mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: improved separation of scanner/parser debug selection
- now use debug 2 for scanner and debug 4 for parser. Provided better feedback about what is being parsed (debug mode) - relocate debug application to applications/tools/foamExprParserInfo
This commit is contained in:
@ -19,4 +19,7 @@ wmakeCheckPwd "$WM_PROJECT_DIR/applications" 2>/dev/null || {
|
|||||||
wmake -all $targetType solvers
|
wmake -all $targetType solvers
|
||||||
wmake -all $targetType utilities
|
wmake -all $targetType utilities
|
||||||
|
|
||||||
|
# Optional
|
||||||
|
## wmake -all $targetType tools
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
Test-parserInfo.C
|
|
||||||
|
|
||||||
EXE = $(FOAM_USER_APPBIN)/Test-parserInfo
|
|
||||||
@ -1,131 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | www.openfoam.com
|
|
||||||
\\/ M anipulation |
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
License
|
|
||||||
This file is part of OpenFOAM.
|
|
||||||
|
|
||||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Description
|
|
||||||
Output some (expressions) parser information
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "argList.H"
|
|
||||||
#include "IOstreams.H"
|
|
||||||
#include "List.H"
|
|
||||||
#include "fieldExprParser.H"
|
|
||||||
#include "patchExprParser.H"
|
|
||||||
#include "volumeExprParser.H"
|
|
||||||
|
|
||||||
using namespace Foam;
|
|
||||||
|
|
||||||
template<class Parser>
|
|
||||||
void printInformation
|
|
||||||
(
|
|
||||||
Ostream& os,
|
|
||||||
const word& name,
|
|
||||||
const bool printNames,
|
|
||||||
const bool printRules
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (printNames)
|
|
||||||
{
|
|
||||||
os << nl << name << " tokenNames:" << nl;
|
|
||||||
Parser::printTokenNames(os);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (printRules)
|
|
||||||
{
|
|
||||||
os << nl << name << " rules:" << nl;
|
|
||||||
Parser::printRules(os);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
// Main program:
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
argList::noBanner();
|
|
||||||
argList::addNote
|
|
||||||
(
|
|
||||||
"Display token names or rules for specified expression parser(s)."
|
|
||||||
" Without options, displays everything."
|
|
||||||
);
|
|
||||||
|
|
||||||
argList::addBoolOption("rules", "Print parser rules");
|
|
||||||
argList::addBoolOption("tokens", "Print token names");
|
|
||||||
|
|
||||||
argList::addBoolOption("field", "Field expression parser");
|
|
||||||
argList::addBoolOption("patch", "Patch expression parser");
|
|
||||||
argList::addBoolOption("volume", "Volume expression parser");
|
|
||||||
|
|
||||||
argList args(argc, argv);
|
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const bool all = !args.count({"field", "patch", "volume"});
|
|
||||||
const bool both = !args.count({"tokens", "rules"});
|
|
||||||
|
|
||||||
const bool printNames = both || args.found("tokens");
|
|
||||||
const bool printRules = both || args.found("rules");
|
|
||||||
|
|
||||||
|
|
||||||
if (all || args.found("field"))
|
|
||||||
{
|
|
||||||
printInformation<Foam::expressions::fieldExpr::parser>
|
|
||||||
(
|
|
||||||
Info,
|
|
||||||
"field",
|
|
||||||
printNames,
|
|
||||||
printRules
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (all || args.found("patch"))
|
|
||||||
{
|
|
||||||
printInformation<Foam::expressions::patchExpr::parser>
|
|
||||||
(
|
|
||||||
Info,
|
|
||||||
"patch",
|
|
||||||
printNames,
|
|
||||||
printRules
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (all || args.found("volume"))
|
|
||||||
{
|
|
||||||
printInformation<Foam::expressions::volumeExpr::parser>
|
|
||||||
(
|
|
||||||
Info,
|
|
||||||
"volume",
|
|
||||||
printNames,
|
|
||||||
printRules
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< "\nEnd\n" << endl;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
5
applications/tools/README.md
Normal file
5
applications/tools/README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
The applications/tools directory contains tools that may be useful for
|
||||||
|
developers or advanced users, but which will not normally be built.
|
||||||
|
|
||||||
|
The user should note that the types of tools, their behaviour and
|
||||||
|
syntax are subject to much more fluctuation than regular utilities.
|
||||||
3
applications/tools/foamExprParserInfo/Make/files
Normal file
3
applications/tools/foamExprParserInfo/Make/files
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
foamExprParserInfo.C
|
||||||
|
|
||||||
|
EXE = $(FOAM_APPBIN)/foamExprParserInfo
|
||||||
199
applications/tools/foamExprParserInfo/foamExprParserInfo.C
Normal file
199
applications/tools/foamExprParserInfo/foamExprParserInfo.C
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | www.openfoam.com
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 2019 OpenCFD Ltd.
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Application
|
||||||
|
foamExprParserInfo
|
||||||
|
|
||||||
|
Group
|
||||||
|
grpTools
|
||||||
|
|
||||||
|
Description
|
||||||
|
Display token names or rules for specified expression parsers.
|
||||||
|
|
||||||
|
In the Lemon grammar, terminals (uppercase) are listed first.
|
||||||
|
Non-terminals (lowercase) are listed second.
|
||||||
|
|
||||||
|
The current OpenFOAM grammar short naming conventions:
|
||||||
|
- svalue : scalar value
|
||||||
|
- sfield : scalar field
|
||||||
|
- lfield : logic field
|
||||||
|
- vfield : vector field
|
||||||
|
- tfield : tensor field
|
||||||
|
- hfield : sphericalTensor field
|
||||||
|
- yfield : symmTensor field
|
||||||
|
.
|
||||||
|
Prefixes: 's' (surface) or 'p' (point).
|
||||||
|
For example, psfield for a point scalar field
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\b foamExprParserInfo [OPTION]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- \par -rules
|
||||||
|
Print parser rules
|
||||||
|
|
||||||
|
- \par -tokens
|
||||||
|
Print token names (default)
|
||||||
|
|
||||||
|
- \par -all
|
||||||
|
Display information for all parsers
|
||||||
|
|
||||||
|
- \par -field
|
||||||
|
Field expression parser information
|
||||||
|
|
||||||
|
- \par -patch
|
||||||
|
Patch expression parser information
|
||||||
|
|
||||||
|
- \par -volume
|
||||||
|
Volume expression parser information
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "argList.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
#include "List.H"
|
||||||
|
#include "fieldExprParser.H"
|
||||||
|
#include "patchExprParser.H"
|
||||||
|
#include "volumeExprParser.H"
|
||||||
|
|
||||||
|
using namespace Foam;
|
||||||
|
|
||||||
|
template<class Parser>
|
||||||
|
void printInformation
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const word& name,
|
||||||
|
const bool printNames,
|
||||||
|
const bool printRules
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (printNames)
|
||||||
|
{
|
||||||
|
os << nl << "# Tokens for " << name << nl;
|
||||||
|
Parser::printTokenNames(os);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (printRules)
|
||||||
|
{
|
||||||
|
os << nl << "# Rules for " << name << nl;
|
||||||
|
Parser::printRules(os);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
// Main program:
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
argList::noBanner();
|
||||||
|
argList::noParallel();
|
||||||
|
argList::setAdvanced("case"); // Hide -case : has no meaning here
|
||||||
|
|
||||||
|
argList::addNote
|
||||||
|
(
|
||||||
|
"Display token names or rules for specified expression parsers.\n"
|
||||||
|
"In the Lemon grammar, terminals (uppercase) are listed first.\n"
|
||||||
|
"Non-terminals (lowercase) are listed second.\n \n"
|
||||||
|
"The current OpenFOAM grammar short naming conventions:\n"
|
||||||
|
" * svalue : scalar value\n"
|
||||||
|
" * sfield : scalar field\n"
|
||||||
|
" * lfield : logic field\n"
|
||||||
|
" * vfield : vector field\n"
|
||||||
|
" * tfield : tensor field\n"
|
||||||
|
" * hfield : sphericalTensor field\n"
|
||||||
|
" * yfield : symmTensor field\n"
|
||||||
|
" \n"
|
||||||
|
"Prefixes: 's' (surface) or 'p' (point).\n"
|
||||||
|
"Eg, psfield for a point scalar field\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
argList::addBoolOption("rules", "Print parser rules");
|
||||||
|
argList::addBoolOption("tokens", "Print token names (default)");
|
||||||
|
|
||||||
|
argList::addBoolOption("all", "Display information for all parsers");
|
||||||
|
argList::addBoolOption("field", "Field expression parser information");
|
||||||
|
argList::addBoolOption("patch", "Patch expression parser information");
|
||||||
|
argList::addBoolOption("volume", "Volume expression parser information");
|
||||||
|
|
||||||
|
argList args(argc, argv);
|
||||||
|
|
||||||
|
const bool all = args.found("all");
|
||||||
|
const bool printRules = args.found("rules");
|
||||||
|
const bool printNames = args.found("tokens") || !printRules;
|
||||||
|
|
||||||
|
label count = 0;
|
||||||
|
|
||||||
|
if (all || args.found("field"))
|
||||||
|
{
|
||||||
|
++count;
|
||||||
|
printInformation<expressions::fieldExpr::parser>
|
||||||
|
(
|
||||||
|
Info,
|
||||||
|
"field",
|
||||||
|
printNames,
|
||||||
|
printRules
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (all || args.found("patch"))
|
||||||
|
{
|
||||||
|
++count;
|
||||||
|
printInformation<expressions::patchExpr::parser>
|
||||||
|
(
|
||||||
|
Info,
|
||||||
|
"patch",
|
||||||
|
printNames,
|
||||||
|
printRules
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (all || args.found("volume"))
|
||||||
|
{
|
||||||
|
++count;
|
||||||
|
printInformation<expressions::volumeExpr::parser>
|
||||||
|
(
|
||||||
|
Info,
|
||||||
|
"volume",
|
||||||
|
printNames,
|
||||||
|
printRules
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!count)
|
||||||
|
{
|
||||||
|
InfoErr
|
||||||
|
<< "Error: no parser selected." << nl
|
||||||
|
<< "See '" << args.executable() << " -help' for usage" << nl
|
||||||
|
<< nl;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -542,6 +542,7 @@ DebugSwitches
|
|||||||
faceZone 0;
|
faceZone 0;
|
||||||
fan 0;
|
fan 0;
|
||||||
featureEdgeMesh 0;
|
featureEdgeMesh 0;
|
||||||
|
fieldExpr 0;
|
||||||
fieldToCell 0;
|
fieldToCell 0;
|
||||||
file 0;
|
file 0;
|
||||||
fileName 2;
|
fileName 2;
|
||||||
@ -759,6 +760,7 @@ DebugSwitches
|
|||||||
partialSlip 0;
|
partialSlip 0;
|
||||||
passiveParticle 0;
|
passiveParticle 0;
|
||||||
patch 0;
|
patch 0;
|
||||||
|
patchExpr 0;
|
||||||
patchToFace 0;
|
patchToFace 0;
|
||||||
patchZones 0;
|
patchZones 0;
|
||||||
pdf 0;
|
pdf 0;
|
||||||
@ -966,6 +968,7 @@ DebugSwitches
|
|||||||
volTensorField::Internal 0;
|
volTensorField::Internal 0;
|
||||||
volVectorField 0;
|
volVectorField 0;
|
||||||
volVectorField::Internal 0;
|
volVectorField::Internal 0;
|
||||||
|
volumeExpr 0;
|
||||||
vtk 0;
|
vtk 0;
|
||||||
walkPatch 0;
|
walkPatch 0;
|
||||||
wall 0;
|
wall 0;
|
||||||
|
|||||||
@ -395,7 +395,8 @@ public:
|
|||||||
|
|
||||||
// Evaluation
|
// Evaluation
|
||||||
|
|
||||||
//- Execute the parser
|
//- Execute the parser.
|
||||||
|
// The return value currently has no meaning.
|
||||||
virtual unsigned parse
|
virtual unsigned parse
|
||||||
(
|
(
|
||||||
const std::string& expr,
|
const std::string& expr,
|
||||||
|
|||||||
@ -39,6 +39,9 @@ Description
|
|||||||
rand | Random field | 0/1 |
|
rand | Random field | 0/1 |
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
|
Note
|
||||||
|
Use namespace debug switch \c fieldExpr for scanner (2), parser (4)
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
fieldExprDriver.C
|
fieldExprDriver.C
|
||||||
fieldExprDriverFields.C
|
fieldExprDriverFields.C
|
||||||
@ -133,6 +136,7 @@ public:
|
|||||||
using genericRagelLemonDriver::content;
|
using genericRagelLemonDriver::content;
|
||||||
|
|
||||||
//- Execute the parser
|
//- Execute the parser
|
||||||
|
// The return value currently has no meaning.
|
||||||
virtual unsigned parse
|
virtual unsigned parse
|
||||||
(
|
(
|
||||||
const std::string& expr,
|
const std::string& expr,
|
||||||
|
|||||||
@ -381,7 +381,7 @@ void Foam::expressions::fieldExpr::parser::start(parseDriver& driver_)
|
|||||||
this->stop();
|
this->stop();
|
||||||
lemon_ = ParseAlloc(::operator new, &driver_);
|
lemon_ = ParseAlloc(::operator new, &driver_);
|
||||||
|
|
||||||
if (debug || driver_.debugParser())
|
if ((debug & 0x4) || driver_.debugParser())
|
||||||
{
|
{
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
ParseTrace(stderr, const_cast<char*>(prompt_));
|
ParseTrace(stderr, const_cast<char*>(prompt_));
|
||||||
|
|||||||
@ -42,7 +42,7 @@ Description
|
|||||||
|
|
||||||
// Debugging to stderr
|
// Debugging to stderr
|
||||||
#undef DebugInfo
|
#undef DebugInfo
|
||||||
#define DebugInfo if (debug) InfoErr
|
#define DebugInfo if (debug & 0x2) InfoErr
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
@ -157,7 +157,7 @@ static int driverTokenType
|
|||||||
|
|
||||||
#define EMIT_TOKEN(T) \
|
#define EMIT_TOKEN(T) \
|
||||||
driver_.parsePosition() = (ts-buf); \
|
driver_.parsePosition() = (ts-buf); \
|
||||||
DebugInfo<< STRINGIFY(T) << ": " << driver_.parsePosition() << nl; \
|
DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl; \
|
||||||
parser_->parse(TOKEN_OF(T), nullptr); \
|
parser_->parse(TOKEN_OF(T), nullptr); \
|
||||||
driver_.parsePosition() = (p-buf);
|
driver_.parsePosition() = (p-buf);
|
||||||
|
|
||||||
@ -349,9 +349,14 @@ bool Foam::expressions::fieldExpr::scanner::process
|
|||||||
// Save debug value
|
// Save debug value
|
||||||
const int oldDebug = debug;
|
const int oldDebug = debug;
|
||||||
|
|
||||||
if (driver_.debugScanner())
|
if (driver_.debugScanner()) { debug |= 0x2; }
|
||||||
|
if (driver_.debugParser()) { debug |= 0x4; }
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
{
|
{
|
||||||
debug |= 4;
|
InfoErr
|
||||||
|
<< "Begin parse {"
|
||||||
|
<< str.substr(strBeg, strLen).c_str() << '}' << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parser_)
|
if (!parser_)
|
||||||
@ -383,12 +388,12 @@ bool Foam::expressions::fieldExpr::scanner::process
|
|||||||
// Scan token type
|
// Scan token type
|
||||||
scanToken scanTok;
|
scanToken scanTok;
|
||||||
|
|
||||||
// Ragel token start/end (required naming)
|
// Token start/end (Ragel naming)
|
||||||
const char* ts;
|
const char* ts;
|
||||||
const char* te;
|
const char* te;
|
||||||
|
|
||||||
// Local buffer data.
|
// Local buffer data.
|
||||||
// - p, pe, eof are required Ragel naming
|
// - p, pe, eof are Ragel naming
|
||||||
// - buf is our own naming
|
// - buf is our own naming
|
||||||
|
|
||||||
const char* buf = &(str[strBeg]);
|
const char* buf = &(str[strBeg]);
|
||||||
@ -398,7 +403,7 @@ bool Foam::expressions::fieldExpr::scanner::process
|
|||||||
|
|
||||||
// Initialize FSM variables
|
// Initialize FSM variables
|
||||||
|
|
||||||
#line 402 "fieldExprScanner.cc"
|
#line 407 "fieldExprScanner.cc"
|
||||||
{
|
{
|
||||||
cs = fieldExpr_start;
|
cs = fieldExpr_start;
|
||||||
ts = 0;
|
ts = 0;
|
||||||
@ -406,11 +411,11 @@ bool Foam::expressions::fieldExpr::scanner::process
|
|||||||
act = 0;
|
act = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 528 "fieldExprScanner.rl"
|
#line 533 "fieldExprScanner.rl"
|
||||||
/* ^^^ FSM initialization here ^^^ */;
|
/* ^^^ FSM initialization here ^^^ */;
|
||||||
|
|
||||||
|
|
||||||
#line 414 "fieldExprScanner.cc"
|
#line 419 "fieldExprScanner.cc"
|
||||||
{
|
{
|
||||||
if ( p == pe )
|
if ( p == pe )
|
||||||
goto _test_eof;
|
goto _test_eof;
|
||||||
@ -748,7 +753,7 @@ st11:
|
|||||||
case 11:
|
case 11:
|
||||||
#line 1 "NONE"
|
#line 1 "NONE"
|
||||||
{ts = p;}
|
{ts = p;}
|
||||||
#line 752 "fieldExprScanner.cc"
|
#line 757 "fieldExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 32: goto st12;
|
case 32: goto st12;
|
||||||
case 33: goto st13;
|
case 33: goto st13;
|
||||||
@ -875,7 +880,7 @@ st16:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof16;
|
goto _test_eof16;
|
||||||
case 16:
|
case 16:
|
||||||
#line 879 "fieldExprScanner.cc"
|
#line 884 "fieldExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 69: goto st5;
|
case 69: goto st5;
|
||||||
case 101: goto st5;
|
case 101: goto st5;
|
||||||
@ -926,7 +931,7 @@ st19:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof19;
|
goto _test_eof19;
|
||||||
case 19:
|
case 19:
|
||||||
#line 930 "fieldExprScanner.cc"
|
#line 935 "fieldExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr57;
|
case 46: goto tr57;
|
||||||
case 69: goto st5;
|
case 69: goto st5;
|
||||||
@ -1163,7 +1168,7 @@ st23:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof23;
|
goto _test_eof23;
|
||||||
case 23:
|
case 23:
|
||||||
#line 1167 "fieldExprScanner.cc"
|
#line 1172 "fieldExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr67;
|
case 46: goto tr67;
|
||||||
case 95: goto tr67;
|
case 95: goto tr67;
|
||||||
@ -2929,7 +2934,7 @@ st120:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof120;
|
goto _test_eof120;
|
||||||
case 120:
|
case 120:
|
||||||
#line 2933 "fieldExprScanner.cc"
|
#line 2938 "fieldExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr67;
|
case 46: goto tr67;
|
||||||
case 58: goto st8;
|
case 58: goto st8;
|
||||||
@ -3350,7 +3355,7 @@ case 10:
|
|||||||
_out: {}
|
_out: {}
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 530 "fieldExprScanner.rl"
|
#line 535 "fieldExprScanner.rl"
|
||||||
/* ^^^ FSM execution here ^^^ */;
|
/* ^^^ FSM execution here ^^^ */;
|
||||||
|
|
||||||
if (0 == cs)
|
if (0 == cs)
|
||||||
@ -3367,6 +3372,11 @@ case 10:
|
|||||||
parser_->parse(0, nullptr);
|
parser_->parse(0, nullptr);
|
||||||
parser_->stop();
|
parser_->stop();
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
|
{
|
||||||
|
InfoErr<< "Done parse." << nl;
|
||||||
|
}
|
||||||
|
|
||||||
// Restore debug value
|
// Restore debug value
|
||||||
debug = oldDebug;
|
debug = oldDebug;
|
||||||
|
|
||||||
|
|||||||
@ -40,7 +40,7 @@ Description
|
|||||||
|
|
||||||
// Debugging to stderr
|
// Debugging to stderr
|
||||||
#undef DebugInfo
|
#undef DebugInfo
|
||||||
#define DebugInfo if (debug) InfoErr
|
#define DebugInfo if (debug & 0x2) InfoErr
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
@ -155,7 +155,7 @@ static int driverTokenType
|
|||||||
|
|
||||||
#define EMIT_TOKEN(T) \
|
#define EMIT_TOKEN(T) \
|
||||||
driver_.parsePosition() = (ts-buf); \
|
driver_.parsePosition() = (ts-buf); \
|
||||||
DebugInfo<< STRINGIFY(T) << ": " << driver_.parsePosition() << nl; \
|
DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl; \
|
||||||
parser_->parse(TOKEN_OF(T), nullptr); \
|
parser_->parse(TOKEN_OF(T), nullptr); \
|
||||||
driver_.parsePosition() = (p-buf);
|
driver_.parsePosition() = (p-buf);
|
||||||
|
|
||||||
@ -477,9 +477,14 @@ bool Foam::expressions::fieldExpr::scanner::process
|
|||||||
// Save debug value
|
// Save debug value
|
||||||
const int oldDebug = debug;
|
const int oldDebug = debug;
|
||||||
|
|
||||||
if (driver_.debugScanner())
|
if (driver_.debugScanner()) { debug |= 0x2; }
|
||||||
|
if (driver_.debugParser()) { debug |= 0x4; }
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
{
|
{
|
||||||
debug |= 4;
|
InfoErr
|
||||||
|
<< "Begin parse {"
|
||||||
|
<< str.substr(strBeg, strLen).c_str() << '}' << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parser_)
|
if (!parser_)
|
||||||
@ -511,12 +516,12 @@ bool Foam::expressions::fieldExpr::scanner::process
|
|||||||
// Scan token type
|
// Scan token type
|
||||||
scanToken scanTok;
|
scanToken scanTok;
|
||||||
|
|
||||||
// Ragel token start/end (required naming)
|
// Token start/end (Ragel naming)
|
||||||
const char* ts;
|
const char* ts;
|
||||||
const char* te;
|
const char* te;
|
||||||
|
|
||||||
// Local buffer data.
|
// Local buffer data.
|
||||||
// - p, pe, eof are required Ragel naming
|
// - p, pe, eof are Ragel naming
|
||||||
// - buf is our own naming
|
// - buf is our own naming
|
||||||
|
|
||||||
const char* buf = &(str[strBeg]);
|
const char* buf = &(str[strBeg]);
|
||||||
@ -543,6 +548,11 @@ bool Foam::expressions::fieldExpr::scanner::process
|
|||||||
parser_->parse(0, nullptr);
|
parser_->parse(0, nullptr);
|
||||||
parser_->stop();
|
parser_->stop();
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
|
{
|
||||||
|
InfoErr<< "Done parse." << nl;
|
||||||
|
}
|
||||||
|
|
||||||
// Restore debug value
|
// Restore debug value
|
||||||
debug = oldDebug;
|
debug = oldDebug;
|
||||||
|
|
||||||
|
|||||||
@ -30,13 +30,12 @@ Description
|
|||||||
Driver for patch expressions
|
Driver for patch expressions
|
||||||
|
|
||||||
In addition to the standard mathematical functions, operations and
|
In addition to the standard mathematical functions, operations and
|
||||||
logical and relational operations, the volume expression support the
|
logical and relational operations, the patch expressions support the
|
||||||
following driver-specific functions:
|
following driver-specific functions:
|
||||||
|
|
||||||
Functions
|
Functions
|
||||||
\table
|
\table
|
||||||
Function | Description | Number of arguments |
|
Function | Description | Number of arguments |
|
||||||
vol | The cell volumes | 0 |
|
|
||||||
pos | The face centres | 0 |
|
pos | The face centres | 0 |
|
||||||
pts | The face points | 0 |
|
pts | The face points | 0 |
|
||||||
area | The face area magnitudes | 0 |
|
area | The face area magnitudes | 0 |
|
||||||
@ -49,6 +48,10 @@ Description
|
|||||||
rand | Random field | 0/1 |
|
rand | Random field | 0/1 |
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
|
Note
|
||||||
|
Use namespace debug switch \c patchExpr for scanner (2), parser (4)
|
||||||
|
or dictionary controls as per Foam::expressions::exprDriver.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
patchExprDriver.C
|
patchExprDriver.C
|
||||||
patchExprDriverFields.C
|
patchExprDriverFields.C
|
||||||
@ -176,7 +179,8 @@ public:
|
|||||||
//- Perform parsing on (sub) string
|
//- Perform parsing on (sub) string
|
||||||
using genericRagelLemonDriver::content;
|
using genericRagelLemonDriver::content;
|
||||||
|
|
||||||
//- Execute the parser
|
//- Execute the parser.
|
||||||
|
// The return value currently has no meaning.
|
||||||
virtual unsigned parse
|
virtual unsigned parse
|
||||||
(
|
(
|
||||||
const std::string& expr,
|
const std::string& expr,
|
||||||
|
|||||||
@ -527,7 +527,7 @@ void Foam::expressions::patchExpr::parser::start(parseDriver& driver_)
|
|||||||
this->stop();
|
this->stop();
|
||||||
lemon_ = ParseAlloc(::operator new, &driver_);
|
lemon_ = ParseAlloc(::operator new, &driver_);
|
||||||
|
|
||||||
if (debug || driver_.debugParser())
|
if ((debug & 0x4) || driver_.debugParser())
|
||||||
{
|
{
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
ParseTrace(stderr, const_cast<char*>(prompt_));
|
ParseTrace(stderr, const_cast<char*>(prompt_));
|
||||||
|
|||||||
@ -42,7 +42,7 @@ Description
|
|||||||
|
|
||||||
// Debugging to stderr
|
// Debugging to stderr
|
||||||
#undef DebugInfo
|
#undef DebugInfo
|
||||||
#define DebugInfo if (debug) InfoErr
|
#define DebugInfo if (debug & 0x2) InfoErr
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
@ -281,7 +281,7 @@ static int driverTokenType
|
|||||||
|
|
||||||
#define EMIT_TOKEN(T) \
|
#define EMIT_TOKEN(T) \
|
||||||
driver_.parsePosition() = (ts-buf); \
|
driver_.parsePosition() = (ts-buf); \
|
||||||
DebugInfo<< STRINGIFY(T) << ": " << driver_.parsePosition() << nl; \
|
DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl; \
|
||||||
parser_->parse(TOKEN_OF(T), nullptr); \
|
parser_->parse(TOKEN_OF(T), nullptr); \
|
||||||
driver_.parsePosition() = (p-buf);
|
driver_.parsePosition() = (p-buf);
|
||||||
|
|
||||||
@ -473,9 +473,14 @@ bool Foam::expressions::patchExpr::scanner::process
|
|||||||
// Save debug value
|
// Save debug value
|
||||||
const int oldDebug = debug;
|
const int oldDebug = debug;
|
||||||
|
|
||||||
if (driver_.debugScanner())
|
if (driver_.debugScanner()) { debug |= 0x2; }
|
||||||
|
if (driver_.debugParser()) { debug |= 0x4; }
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
{
|
{
|
||||||
debug |= 4;
|
InfoErr
|
||||||
|
<< "Begin parse {"
|
||||||
|
<< str.substr(strBeg, strLen).c_str() << '}' << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parser_)
|
if (!parser_)
|
||||||
@ -507,12 +512,12 @@ bool Foam::expressions::patchExpr::scanner::process
|
|||||||
// Scan token type
|
// Scan token type
|
||||||
scanToken scanTok;
|
scanToken scanTok;
|
||||||
|
|
||||||
// Ragel token start/end (required naming)
|
// Token start/end (Ragel naming)
|
||||||
const char* ts;
|
const char* ts;
|
||||||
const char* te;
|
const char* te;
|
||||||
|
|
||||||
// Local buffer data.
|
// Local buffer data.
|
||||||
// - p, pe, eof are required Ragel naming
|
// - p, pe, eof are Ragel naming
|
||||||
// - buf is our own naming
|
// - buf is our own naming
|
||||||
|
|
||||||
const char* buf = &(str[strBeg]);
|
const char* buf = &(str[strBeg]);
|
||||||
@ -522,7 +527,7 @@ bool Foam::expressions::patchExpr::scanner::process
|
|||||||
|
|
||||||
// Initialize FSM variables
|
// Initialize FSM variables
|
||||||
|
|
||||||
#line 526 "patchExprScanner.cc"
|
#line 531 "patchExprScanner.cc"
|
||||||
{
|
{
|
||||||
cs = patchExpr_start;
|
cs = patchExpr_start;
|
||||||
ts = 0;
|
ts = 0;
|
||||||
@ -530,11 +535,11 @@ bool Foam::expressions::patchExpr::scanner::process
|
|||||||
act = 0;
|
act = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 654 "patchExprScanner.rl"
|
#line 659 "patchExprScanner.rl"
|
||||||
/* ^^^ FSM initialization here ^^^ */;
|
/* ^^^ FSM initialization here ^^^ */;
|
||||||
|
|
||||||
|
|
||||||
#line 538 "patchExprScanner.cc"
|
#line 543 "patchExprScanner.cc"
|
||||||
{
|
{
|
||||||
if ( p == pe )
|
if ( p == pe )
|
||||||
goto _test_eof;
|
goto _test_eof;
|
||||||
@ -881,7 +886,7 @@ st11:
|
|||||||
case 11:
|
case 11:
|
||||||
#line 1 "NONE"
|
#line 1 "NONE"
|
||||||
{ts = p;}
|
{ts = p;}
|
||||||
#line 885 "patchExprScanner.cc"
|
#line 890 "patchExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 32: goto st12;
|
case 32: goto st12;
|
||||||
case 33: goto st13;
|
case 33: goto st13;
|
||||||
@ -1009,7 +1014,7 @@ st16:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof16;
|
goto _test_eof16;
|
||||||
case 16:
|
case 16:
|
||||||
#line 1013 "patchExprScanner.cc"
|
#line 1018 "patchExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 69: goto st5;
|
case 69: goto st5;
|
||||||
case 101: goto st5;
|
case 101: goto st5;
|
||||||
@ -1060,7 +1065,7 @@ st19:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof19;
|
goto _test_eof19;
|
||||||
case 19:
|
case 19:
|
||||||
#line 1064 "patchExprScanner.cc"
|
#line 1069 "patchExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr58;
|
case 46: goto tr58;
|
||||||
case 69: goto st5;
|
case 69: goto st5;
|
||||||
@ -1315,7 +1320,7 @@ st23:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof23;
|
goto _test_eof23;
|
||||||
case 23:
|
case 23:
|
||||||
#line 1319 "patchExprScanner.cc"
|
#line 1324 "patchExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr68;
|
case 46: goto tr68;
|
||||||
case 95: goto tr68;
|
case 95: goto tr68;
|
||||||
@ -3082,7 +3087,7 @@ st120:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof120;
|
goto _test_eof120;
|
||||||
case 120:
|
case 120:
|
||||||
#line 3086 "patchExprScanner.cc"
|
#line 3091 "patchExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr68;
|
case 46: goto tr68;
|
||||||
case 58: goto st8;
|
case 58: goto st8;
|
||||||
@ -3824,7 +3829,7 @@ case 10:
|
|||||||
_out: {}
|
_out: {}
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 656 "patchExprScanner.rl"
|
#line 661 "patchExprScanner.rl"
|
||||||
/* ^^^ FSM execution here ^^^ */;
|
/* ^^^ FSM execution here ^^^ */;
|
||||||
|
|
||||||
if (0 == cs)
|
if (0 == cs)
|
||||||
@ -3841,6 +3846,11 @@ case 10:
|
|||||||
parser_->parse(0, nullptr);
|
parser_->parse(0, nullptr);
|
||||||
parser_->stop();
|
parser_->stop();
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
|
{
|
||||||
|
InfoErr<< "Done parse." << nl;
|
||||||
|
}
|
||||||
|
|
||||||
// Restore debug value
|
// Restore debug value
|
||||||
debug = oldDebug;
|
debug = oldDebug;
|
||||||
|
|
||||||
|
|||||||
@ -40,7 +40,7 @@ Description
|
|||||||
|
|
||||||
// Debugging to stderr
|
// Debugging to stderr
|
||||||
#undef DebugInfo
|
#undef DebugInfo
|
||||||
#define DebugInfo if (debug) InfoErr
|
#define DebugInfo if (debug & 0x2) InfoErr
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
@ -279,7 +279,7 @@ static int driverTokenType
|
|||||||
|
|
||||||
#define EMIT_TOKEN(T) \
|
#define EMIT_TOKEN(T) \
|
||||||
driver_.parsePosition() = (ts-buf); \
|
driver_.parsePosition() = (ts-buf); \
|
||||||
DebugInfo<< STRINGIFY(T) << ": " << driver_.parsePosition() << nl; \
|
DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl; \
|
||||||
parser_->parse(TOKEN_OF(T), nullptr); \
|
parser_->parse(TOKEN_OF(T), nullptr); \
|
||||||
driver_.parsePosition() = (p-buf);
|
driver_.parsePosition() = (p-buf);
|
||||||
|
|
||||||
@ -603,9 +603,14 @@ bool Foam::expressions::patchExpr::scanner::process
|
|||||||
// Save debug value
|
// Save debug value
|
||||||
const int oldDebug = debug;
|
const int oldDebug = debug;
|
||||||
|
|
||||||
if (driver_.debugScanner())
|
if (driver_.debugScanner()) { debug |= 0x2; }
|
||||||
|
if (driver_.debugParser()) { debug |= 0x4; }
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
{
|
{
|
||||||
debug |= 4;
|
InfoErr
|
||||||
|
<< "Begin parse {"
|
||||||
|
<< str.substr(strBeg, strLen).c_str() << '}' << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parser_)
|
if (!parser_)
|
||||||
@ -637,12 +642,12 @@ bool Foam::expressions::patchExpr::scanner::process
|
|||||||
// Scan token type
|
// Scan token type
|
||||||
scanToken scanTok;
|
scanToken scanTok;
|
||||||
|
|
||||||
// Ragel token start/end (required naming)
|
// Token start/end (Ragel naming)
|
||||||
const char* ts;
|
const char* ts;
|
||||||
const char* te;
|
const char* te;
|
||||||
|
|
||||||
// Local buffer data.
|
// Local buffer data.
|
||||||
// - p, pe, eof are required Ragel naming
|
// - p, pe, eof are Ragel naming
|
||||||
// - buf is our own naming
|
// - buf is our own naming
|
||||||
|
|
||||||
const char* buf = &(str[strBeg]);
|
const char* buf = &(str[strBeg]);
|
||||||
@ -669,6 +674,11 @@ bool Foam::expressions::patchExpr::scanner::process
|
|||||||
parser_->parse(0, nullptr);
|
parser_->parse(0, nullptr);
|
||||||
parser_->stop();
|
parser_->stop();
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
|
{
|
||||||
|
InfoErr<< "Done parse." << nl;
|
||||||
|
}
|
||||||
|
|
||||||
// Restore debug value
|
// Restore debug value
|
||||||
debug = oldDebug;
|
debug = oldDebug;
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ Description
|
|||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
In addition to the standard mathematical functions, operations and
|
In addition to the standard mathematical functions, operations and
|
||||||
logical and relational operations, the volume expression support the
|
logical and relational operations, the volume expressions support the
|
||||||
following driver-specific functions:
|
following driver-specific functions:
|
||||||
|
|
||||||
Functions
|
Functions
|
||||||
@ -70,6 +70,10 @@ Description
|
|||||||
pzone | Logical point field corresponding to pointZone| 1 |
|
pzone | Logical point field corresponding to pointZone| 1 |
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
|
Note
|
||||||
|
Use namespace debug switch \c volumeExpr for scanner (2), parser (4)
|
||||||
|
or dictionary controls as per Foam::expressions::exprDriver.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
volumeExprDriver.C
|
volumeExprDriver.C
|
||||||
|
|
||||||
@ -242,7 +246,8 @@ public:
|
|||||||
//- Perform parsing on (sub) string
|
//- Perform parsing on (sub) string
|
||||||
using genericRagelLemonDriver::content;
|
using genericRagelLemonDriver::content;
|
||||||
|
|
||||||
//- Execute the parser
|
//- Execute the parser.
|
||||||
|
// The return value currently has no meaning.
|
||||||
virtual unsigned parse
|
virtual unsigned parse
|
||||||
(
|
(
|
||||||
const std::string& expr,
|
const std::string& expr,
|
||||||
|
|||||||
@ -790,7 +790,7 @@ void Foam::expressions::volumeExpr::parser::start(parseDriver& driver_)
|
|||||||
this->stop();
|
this->stop();
|
||||||
lemon_ = ParseAlloc(::operator new, &driver_);
|
lemon_ = ParseAlloc(::operator new, &driver_);
|
||||||
|
|
||||||
if (debug || driver_.debugParser())
|
if ((debug & 0x4) || driver_.debugParser())
|
||||||
{
|
{
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
ParseTrace(stderr, const_cast<char*>(prompt_));
|
ParseTrace(stderr, const_cast<char*>(prompt_));
|
||||||
|
|||||||
@ -42,7 +42,7 @@ Description
|
|||||||
|
|
||||||
// Debugging to stderr
|
// Debugging to stderr
|
||||||
#undef DebugInfo
|
#undef DebugInfo
|
||||||
#define DebugInfo if (debug) InfoErr
|
#define DebugInfo if (debug & 0x2) InfoErr
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
@ -310,7 +310,7 @@ static int driverTokenType
|
|||||||
|
|
||||||
#define EMIT_TOKEN(T) \
|
#define EMIT_TOKEN(T) \
|
||||||
driver_.parsePosition() = (ts-buf); \
|
driver_.parsePosition() = (ts-buf); \
|
||||||
DebugInfo<< STRINGIFY(T) << ": " << driver_.parsePosition() << nl; \
|
DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl; \
|
||||||
parser_->parse(TOKEN_OF(T), nullptr); \
|
parser_->parse(TOKEN_OF(T), nullptr); \
|
||||||
driver_.parsePosition() = (p-buf);
|
driver_.parsePosition() = (p-buf);
|
||||||
|
|
||||||
@ -502,9 +502,14 @@ bool Foam::expressions::volumeExpr::scanner::process
|
|||||||
// Save debug value
|
// Save debug value
|
||||||
const int oldDebug = debug;
|
const int oldDebug = debug;
|
||||||
|
|
||||||
if (driver_.debugScanner())
|
if (driver_.debugScanner()) { debug |= 0x2; }
|
||||||
|
if (driver_.debugParser()) { debug |= 0x4; }
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
{
|
{
|
||||||
debug |= 4;
|
InfoErr
|
||||||
|
<< "Begin parse {"
|
||||||
|
<< str.substr(strBeg, strLen).c_str() << '}' << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parser_)
|
if (!parser_)
|
||||||
@ -536,12 +541,12 @@ bool Foam::expressions::volumeExpr::scanner::process
|
|||||||
// Scan token type
|
// Scan token type
|
||||||
scanToken scanTok;
|
scanToken scanTok;
|
||||||
|
|
||||||
// Ragel token start/end (required naming)
|
// Token start/end (Ragel naming)
|
||||||
const char* ts;
|
const char* ts;
|
||||||
const char* te;
|
const char* te;
|
||||||
|
|
||||||
// Local buffer data.
|
// Local buffer data.
|
||||||
// - p, pe, eof are required Ragel naming
|
// - p, pe, eof are Ragel naming
|
||||||
// - buf is our own naming
|
// - buf is our own naming
|
||||||
|
|
||||||
const char* buf = &(str[strBeg]);
|
const char* buf = &(str[strBeg]);
|
||||||
@ -551,7 +556,7 @@ bool Foam::expressions::volumeExpr::scanner::process
|
|||||||
|
|
||||||
// Initialize FSM variables
|
// Initialize FSM variables
|
||||||
|
|
||||||
#line 555 "volumeExprScanner.cc"
|
#line 560 "volumeExprScanner.cc"
|
||||||
{
|
{
|
||||||
cs = volumeExpr_start;
|
cs = volumeExpr_start;
|
||||||
ts = 0;
|
ts = 0;
|
||||||
@ -559,11 +564,11 @@ bool Foam::expressions::volumeExpr::scanner::process
|
|||||||
act = 0;
|
act = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 683 "volumeExprScanner.rl"
|
#line 688 "volumeExprScanner.rl"
|
||||||
/* ^^^ FSM initialization here ^^^ */;
|
/* ^^^ FSM initialization here ^^^ */;
|
||||||
|
|
||||||
|
|
||||||
#line 567 "volumeExprScanner.cc"
|
#line 572 "volumeExprScanner.cc"
|
||||||
{
|
{
|
||||||
if ( p == pe )
|
if ( p == pe )
|
||||||
goto _test_eof;
|
goto _test_eof;
|
||||||
@ -910,7 +915,7 @@ st11:
|
|||||||
case 11:
|
case 11:
|
||||||
#line 1 "NONE"
|
#line 1 "NONE"
|
||||||
{ts = p;}
|
{ts = p;}
|
||||||
#line 914 "volumeExprScanner.cc"
|
#line 919 "volumeExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 32: goto st12;
|
case 32: goto st12;
|
||||||
case 33: goto st13;
|
case 33: goto st13;
|
||||||
@ -1038,7 +1043,7 @@ st16:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof16;
|
goto _test_eof16;
|
||||||
case 16:
|
case 16:
|
||||||
#line 1042 "volumeExprScanner.cc"
|
#line 1047 "volumeExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 69: goto st5;
|
case 69: goto st5;
|
||||||
case 101: goto st5;
|
case 101: goto st5;
|
||||||
@ -1089,7 +1094,7 @@ st19:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof19;
|
goto _test_eof19;
|
||||||
case 19:
|
case 19:
|
||||||
#line 1093 "volumeExprScanner.cc"
|
#line 1098 "volumeExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr58;
|
case 46: goto tr58;
|
||||||
case 69: goto st5;
|
case 69: goto st5;
|
||||||
@ -1344,7 +1349,7 @@ st23:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof23;
|
goto _test_eof23;
|
||||||
case 23:
|
case 23:
|
||||||
#line 1348 "volumeExprScanner.cc"
|
#line 1353 "volumeExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr68;
|
case 46: goto tr68;
|
||||||
case 95: goto tr68;
|
case 95: goto tr68;
|
||||||
@ -3111,7 +3116,7 @@ st120:
|
|||||||
if ( ++p == pe )
|
if ( ++p == pe )
|
||||||
goto _test_eof120;
|
goto _test_eof120;
|
||||||
case 120:
|
case 120:
|
||||||
#line 3115 "volumeExprScanner.cc"
|
#line 3120 "volumeExprScanner.cc"
|
||||||
switch( (*p) ) {
|
switch( (*p) ) {
|
||||||
case 46: goto tr68;
|
case 46: goto tr68;
|
||||||
case 58: goto st8;
|
case 58: goto st8;
|
||||||
@ -3853,7 +3858,7 @@ case 10:
|
|||||||
_out: {}
|
_out: {}
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 685 "volumeExprScanner.rl"
|
#line 690 "volumeExprScanner.rl"
|
||||||
/* ^^^ FSM execution here ^^^ */;
|
/* ^^^ FSM execution here ^^^ */;
|
||||||
|
|
||||||
if (0 == cs)
|
if (0 == cs)
|
||||||
@ -3870,6 +3875,11 @@ case 10:
|
|||||||
parser_->parse(0, nullptr);
|
parser_->parse(0, nullptr);
|
||||||
parser_->stop();
|
parser_->stop();
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
|
{
|
||||||
|
InfoErr<< "Done parse." << nl;
|
||||||
|
}
|
||||||
|
|
||||||
// Restore debug value
|
// Restore debug value
|
||||||
debug = oldDebug;
|
debug = oldDebug;
|
||||||
|
|
||||||
|
|||||||
@ -40,7 +40,7 @@ Description
|
|||||||
|
|
||||||
// Debugging to stderr
|
// Debugging to stderr
|
||||||
#undef DebugInfo
|
#undef DebugInfo
|
||||||
#define DebugInfo if (debug) InfoErr
|
#define DebugInfo if (debug & 0x2) InfoErr
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
@ -308,7 +308,7 @@ static int driverTokenType
|
|||||||
|
|
||||||
#define EMIT_TOKEN(T) \
|
#define EMIT_TOKEN(T) \
|
||||||
driver_.parsePosition() = (ts-buf); \
|
driver_.parsePosition() = (ts-buf); \
|
||||||
DebugInfo<< STRINGIFY(T) << ": " << driver_.parsePosition() << nl; \
|
DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl; \
|
||||||
parser_->parse(TOKEN_OF(T), nullptr); \
|
parser_->parse(TOKEN_OF(T), nullptr); \
|
||||||
driver_.parsePosition() = (p-buf);
|
driver_.parsePosition() = (p-buf);
|
||||||
|
|
||||||
@ -632,9 +632,14 @@ bool Foam::expressions::volumeExpr::scanner::process
|
|||||||
// Save debug value
|
// Save debug value
|
||||||
const int oldDebug = debug;
|
const int oldDebug = debug;
|
||||||
|
|
||||||
if (driver_.debugScanner())
|
if (driver_.debugScanner()) { debug |= 0x2; }
|
||||||
|
if (driver_.debugParser()) { debug |= 0x4; }
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
{
|
{
|
||||||
debug |= 4;
|
InfoErr
|
||||||
|
<< "Begin parse {"
|
||||||
|
<< str.substr(strBeg, strLen).c_str() << '}' << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parser_)
|
if (!parser_)
|
||||||
@ -666,12 +671,12 @@ bool Foam::expressions::volumeExpr::scanner::process
|
|||||||
// Scan token type
|
// Scan token type
|
||||||
scanToken scanTok;
|
scanToken scanTok;
|
||||||
|
|
||||||
// Ragel token start/end (required naming)
|
// Token start/end (Ragel naming)
|
||||||
const char* ts;
|
const char* ts;
|
||||||
const char* te;
|
const char* te;
|
||||||
|
|
||||||
// Local buffer data.
|
// Local buffer data.
|
||||||
// - p, pe, eof are required Ragel naming
|
// - p, pe, eof are Ragel naming
|
||||||
// - buf is our own naming
|
// - buf is our own naming
|
||||||
|
|
||||||
const char* buf = &(str[strBeg]);
|
const char* buf = &(str[strBeg]);
|
||||||
@ -698,6 +703,11 @@ bool Foam::expressions::volumeExpr::scanner::process
|
|||||||
parser_->parse(0, nullptr);
|
parser_->parse(0, nullptr);
|
||||||
parser_->stop();
|
parser_->stop();
|
||||||
|
|
||||||
|
if (debug & 0x6)
|
||||||
|
{
|
||||||
|
InfoErr<< "Done parse." << nl;
|
||||||
|
}
|
||||||
|
|
||||||
// Restore debug value
|
// Restore debug value
|
||||||
debug = oldDebug;
|
debug = oldDebug;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user