diff --git a/README b/README index 71d8c744..375e0084 100644 --- a/README +++ b/README @@ -21,23 +21,25 @@ Getting started --------------- Examining the demo applications in src/demo is a great way to see some usage examples of the library. The basic strategy is to subclass -the SeExpression class and implement the methods that describe what +the Expression class and implement the methods that describe what extra functions and variables your expression evaluation will need -Be sure to check out the doxygen pages for an API overview. - +Be sure to check out the doxygen pages for an API overview: +http://wdas.github.io/SeExpr/doxygen/ Source code overview ==================== src/ SeExpr/ Library code + ui/ User Interface components for editing demos/ Demo Applications tests/ Regression Tests doc/ Doxygen generation SeExpr Developers ================= +Janet Berlin Brent Burley Lawrence Chai Andrew Selle diff --git a/TODO.txt b/TODO.txt deleted file mode 100644 index b9187ce8..00000000 --- a/TODO.txt +++ /dev/null @@ -1,45 +0,0 @@ -asciiCalc evalStr() should not ignore return - -SeExprNode - getStrArg() does not belong on base SeExprNode. We use this in SeExprPlugins, but there should be a better way of looking for that -// Do we need to check the value of string arg of custom function? Shouldn't -// it be done at runtime and fail in eval stage? - -SeExprPlugins - Arguments for in tangent and out tangent don't check they are constant string. Also, do we want ot make this work - foo="constant"; animCurve(foo,"fds"); (i.e. the first argument is not a SeExprStr as your current code assumes) -// in tangent and out tangent are checked as varying string before. now changed to checked as constant string. - -The trim function seems unused. Can we delete it? -// deleted. - -PromoteBinaryOperands should perhaps return a std::pair of value*'s instead of mutating the incoming ones -// done - -The prmoting of values for binary operands compares its arguments like 3 times. Maybe there is a way to clean that up -// isLegaltoPromote are now removed. It is simplified to check if destType is vector. - -Is resolveLocalVar correct. What if it needs to look in a different basic block. What are the variable resolution rules? -// Are local var are alloca'd in entry basic block. Only when codegen assignment, local var may be alloca'd. -// case like $m = 1.0; $m=$m * [1,2,3] cause a new vector version of m to be alloca'd. No other cases incur local var alloca - -Select does not work on SeExprCond needs to be fixed -// fixed. - - ---- testing - make a script that runs all of our tests and returns exit code 0 if pass, - this should probably be python - exit code 1 if fails - make a script that runs all imageSynth tests with the interprett and with llvm - add all of your basic tests to your test suite and also a type checking test - suite TypeTester.cpp. - ---- ensure that the output is clean when evaluating, no debugging on by default - ---- write documentation and add it to the documentation folder in the repo in - docs/summer_documentation2 - ---- Fix time frame stuff use voodoo $frame in expression - ---- SeExprPlugins should be integrated into the existing SeExprPlugins... diff --git a/src/SeExpr/ExprBuiltins.cpp b/src/SeExpr/ExprBuiltins.cpp index aea4d981..83d7876b 100644 --- a/src/SeExpr/ExprBuiltins.cpp +++ b/src/SeExpr/ExprBuiltins.cpp @@ -386,6 +386,25 @@ static const char* hsltorgb_docstring = "hsl value (except for negative s values), the conversion is\n" "well-defined and reversible."; +static Vec3d saturate(const Vec3d& Cin, double amt) { + const Vec3d lum(.2126,.7152,.0722); // rec709 luminance + Vec3d result = Vec3d(Cin.dot(lum) * (1-amt)) + Cin * amt; + if (result[0] < 0) result[0] = 0; + if (result[1] < 0) result[1] = 0; + if (result[2] < 0) result[2] = 0; + return result; +} + +Vec3d saturate(int n, const Vec3d* args) { + if (n < 2) return 0.0; + return saturate(args[0], args[1][0]); +} +static const char* saturate_docstring = + "color saturate(color val, float amt)\n" + "Scale saturation of color by amt.\n" + "The color is scaled around the rec709 luminance value,\n" + "and negative results are clamped at zero.\n"; + double hash(int n, double* args) { // combine args into a single seed uint32_t seed = 0; @@ -729,7 +748,9 @@ static const char* ccellnoise_docstring = double pnoise(const Vec3d& p, const Vec3d& period) { double result; double args[3] = {p[0], p[1], p[2]}; - int pargs[3] = {(int)period[0], (int)period[1], (int)period[2]}; + int pargs[3] = {max(1,(int)period[0]), + max(1,(int)period[1]), + max(1,(int)period[2])}; PNoise<3, 1>(args, pargs, &result); return result; } @@ -1177,6 +1198,13 @@ static const char* pick_docstring = "to the supplied weights.  Any weights not supplied are assumed to\n" "be 1.0."; +double swatch(int n, double* params) { + return choose(n, params); + } +static const char *swatch_docstring= + "color swatch(float index, color choice0, color choice1, color choice2, [...])\n" + "Chooses one of the supplied color choices based on the index (assumed to be in range [0..1])."; + double choose(int n, double* params) { if (n < 3) return 0; double key = params[0]; @@ -1644,6 +1672,7 @@ void defineBuiltins(ExprFunc::Define define, ExprFunc::Define3 define3) { FUNCNDOC(midhsi, 5, 7); FUNCDOC(hsltorgb); FUNCDOC(rgbtohsl); + FUNCNDOC(saturate, 2, 2); // noise FUNCNDOC(hash, 1, -1); @@ -1684,6 +1713,7 @@ void defineBuiltins(ExprFunc::Define define, ExprFunc::Define3 define3) { FUNCNDOC(pick, 3, -1); FUNCNDOC(choose, 3, -1); FUNCNDOC(wchoose, 4, -1); + FUNCNDOC(swatch, 3, -1); FUNCNDOC(spline, 5, -1); // FuncX interface diff --git a/src/SeExpr/generated/README b/src/SeExpr/generated/README deleted file mode 100644 index e11f8dbc..00000000 --- a/src/SeExpr/generated/README +++ /dev/null @@ -1,2 +0,0 @@ -If you copy the files from here from a Linux machine to a Windows machime, you -don't need flex/bison on the Windows machine to build SeExpr diff --git a/src/doc/license.txt b/src/doc/license.txt index e04cdc9a..ad880ae9 100644 --- a/src/doc/license.txt +++ b/src/doc/license.txt @@ -12,5 +12,5 @@ Licensor and its affiliates, except as required for reproducing the content of the NOTICE file. You may obtain a copy of the License at -http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 diff --git a/src/doc/main.txt b/src/doc/main.txt index 398757e0..6a108860 100644 --- a/src/doc/main.txt +++ b/src/doc/main.txt @@ -22,25 +22,26 @@ * - \subpage plugins - Custom Function Plugins * \section demos Demo Applications * - \subpage mytut (code at asciiGraph.cpp) - * - \subpage uitut (code starting at imageEditor.cpp) - * - Image Synthesizer (code at imageSynth.cpp) - * - SeGrapher Qt Grapher (code starting at segraph.cpp) - * - Renderman Shadeop (code at seop.cpp) + * - \subpage uitut (code at imageEditor.cpp) + * - Image Synthesizer (at imageSynth.cpp) + * - SeGrapher Qt Grapher (at demos/segraph) + * - Renderman Shadeop (at demos/rman) + * - \subpage varblocks * \section mainapi Main API pages - * - SeExpression - Main class to parse a single expression - * - SeExprVarRef - Binding of an external variable to an expression context. - * - SeExprFunc - Define a custom function that calls C++ code - * - SeExprFuncX - Manual argument parsing C++ code - * - SeExprFuncNode - Node that calls a function (needed for SeExprFuncX arg parsing) + * - Expression - Main class to parse a single expression + * - ExprVarRef - Binding of an external variable to an expression context. + * - ExprFunc - Define a custom function that calls C++ code + * - ExprFuncX - Manual argument parsing C++ code + * - ExprFuncNode - Node that calls a function (needed for SeExprFuncX arg parsing) * \section useful Useful classes and functions - * - SeVec3d - Class to hold and manipulate 3-vectors - * - SeExprBuiltins.h - Useful builtin functions that are also available in C++ - * - SeExpr::SeCurve - Hermite interpolation curve. + * - Vec - Class to hold and manipulate n-dimensional vectors + * - ExprBuiltins.h - Useful builtin functions that are also available in C++ + * - SeExpr2::Curve - Hermite interpolation curve. * * \section internals Internals - * - SeExprNode - Parse Tree Node - * - SeExprParser.h - Entry point to bison/flex parser - * + * - ExprNode - Parse Tree Node + * - ExprParser - Entry point to bison/flex parser + * * \section Other * - \subpage license */ @@ -50,10 +51,14 @@ \htmlinclude tutorial.txt */ /** -\page uitut Simple Image Editor UI Tutorial +\page uitut Image Editor Tutorial \htmlinclude uitutorial.txt */ /** +\page varblocks Using Variable Blocks +\htmlinclude varblocks.txt +*/ +/** \page userdoc User Documentation \htmlinclude userdoc.txt */ diff --git a/src/doc/plugins.txt b/src/doc/plugins.txt index 2c2047b2..202124b3 100644 --- a/src/doc/plugins.txt +++ b/src/doc/plugins.txt @@ -1,3 +1,20 @@ + + + +

You can still define resolveVar() and resolveFunc() methods in your custom expression classes, but you now also have the option to use variable blocks instead. These are useful for re-using variables and managing thread evaluation. + +Within your custom expression class, you would skip the usual resolveVar() and resolveFunc() implementations: + +

+class MyExpr:public SeExpr2::Expression {
+
+// These are now optional:
+//   resolveVar()
+//   resolveFunc()
+};
+
+ + +

Here's how you might write an example function to run an expression that uses variable blocks. This example assumes you have a particle data struct p, with numParticles, numAttributes. A variable block contains variable names and types, but doesn't care what the values are. + +

+void f(const std::string& s, MyParticleData* p, int outputDim=3){
+
+    // set up the bindings for each of the particle attributes
+    SeExpr2::VarBlockCreator blockCreator;
+    std::vector variableHandles;
+    std::vector attrs;
+    for(int i=0; inumAttrs(); i++) {
+        MyParticleAttr attr;
+        p->getAttrInfo(i,attr);
+        attrs.push_back(attr);
+        int handle = blockCreator.registerVariable(attr.name,
+                                                   TypeVec(attr.dim));
+        variableHandles.push_back(handle);
+    }
+
+    // set up binding for the output
+    int outputVariableHandle=blockCreator.registerVariable("__output",
+                                                           TypeVec(outputDim));
+
+    // make an expression with the appropriate bindings
+    MyExpr e(s);
+    e.setDesiredType(TypeVec(outputDim));
+    e.setVarBlockCreator(&blockCreator);
+    if(!e.isValid()) throw std::runtime_error(e.parseError()):
+
+    // create the variable block, set up pointers to data
+    SeExpr2::VarBlock block = blockCreator.create();
+    for(int i=0; inumAttrs(); i++) {
+        block.Pointer(variableHandles[i]) = p->data(attrs[i]);
+    }
+    std::vector outputData(p->numParticles()*outputDim);
+    block.Pointer(outputVariableHandle)=outputData.data();
+
+    // evaluate multiple expressions at once; inlines expressions
+    e.evalMultiple(&block, outputVariableHandle, 0, p->numParticles());
+}
+
+ +To parallelize evaluation per particle, a simple parallel_for can be used: +
+    // evaluate multiple expressions at once, inlines expressions
+    tbb::parallel_for(blocked_range(0,p->numParticles()),[](blocked_range r)) {
+        VarBlock myBlock=block.clone(); //should be cheap
+        e.evalMultiple(&myblock, outputVariableHandle, r.start, r.end);
+    }
+
diff --git a/src/ui/generated/README b/src/ui/generated/README deleted file mode 100644 index e11f8dbc..00000000 --- a/src/ui/generated/README +++ /dev/null @@ -1,2 +0,0 @@ -If you copy the files from here from a Linux machine to a Windows machime, you -don't need flex/bison on the Windows machine to build SeExpr diff --git a/src/ui/generated/SeExprSpecParser.cpp b/src/ui/generated/SeExprSpecParser.cpp deleted file mode 100644 index e23449f9..00000000 --- a/src/ui/generated/SeExprSpecParser.cpp +++ /dev/null @@ -1,2707 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.7. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - - This program 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. - - This program 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 this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with SeExprEdSpec or SeExprEdSpecYY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define SeExprEdSpecYYBISON 1 - -/* Bison version. */ -#define SeExprEdSpecYYBISON_VERSION "2.7" - -/* Skeleton name. */ -#define SeExprEdSpecYYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define SeExprEdSpecYYPURE 0 - -/* Push parsers. */ -#define SeExprEdSpecYYPUSH 0 - -/* Pull parsers. */ -#define SeExprEdSpecYYPULL 1 - - -/* Substitute the variable and function names. */ -#define SeExprEdSpecparse SeExprEdSpecparse -#define SeExprEdSpeclex SeExprEdSpeclex -#define SeExprEdSpecerror SeExprEdSpecerror -#define SeExprEdSpeclval SeExprEdSpeclval -#define SeExprEdSpecchar SeExprEdSpecchar -#define SeExprEdSpecdebug SeExprEdSpecdebug -#define SeExprEdSpecnerrs SeExprEdSpecnerrs -#define SeExprEdSpeclloc SeExprEdSpeclloc - -/* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 18 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - -#include -#include -#include -#include -#include -#include -#ifdef SEEXPR_USE_ANIMLIB -#include -#include -#else -#define UNUSED(x) (void)(x) -#endif -#include "SePlatform.h" -#include "SeMutex.h" -#include "SeExprSpecType.h" -#include "SeExprEdEditable.h" -#include "SeExprEdDeepWater.h" - - -/****************** - lexer declarations - ******************/ - - -#define SPEC_IS_NUMBER(x) \ - (dynamic_cast(x) != 0) -#define SPEC_IS_VECTOR(x) \ - (dynamic_cast(x) != 0) -#define SPEC_IS_STR(x) \ - (dynamic_cast(x) != 0) - -// declarations of functions and data in SeExprParser.l -int SeExprEdSpeclex(); -int SeExprEdSpecpos(); -extern int SeExprEdSpec_start; -extern char* SeExprEdSpectext; -struct SeExprEdSpec_buffer_state; -SeExprEdSpec_buffer_state* SeExprEdSpec_scan_string(const char *str); -void SeExprEdSpec_delete_buffer(SeExprEdSpec_buffer_state*); - -//##################################### -// Keep track of mini parse tree nodes - -// temporary to the parse... all pointers deleted at end of parse -static std::vector specNodes; -/// Remember the spec node, so we can delete it later -static SeExprSpecNode* remember(SeExprSpecNode* node) -{specNodes.push_back(node);return node;} - - -/// list of strings duplicated by lexer to avoid error mem leak -static std::vector tokens; - -char* specRegisterToken(char* rawString) -{ - char* tok=strdup(rawString); - tokens.push_back(tok); - return tok; -} - -//###################################################################### -// Expose parser API inputs/outputs to yacc as statics - -// these are pointers to the arguments send into parse API -// made static here so the parser can see them in yacc actions -static std::vector* editables; -static std::vector* variables; - -static const char* ParseStr; // string being parsed -static std::string ParseError; // error (set from SeExprEdSpecerror) -static SeExprSpecNode* ParseResult; // must set result here since SeExprEdSpecparse can't return it - - -//###################################################################### -// Helpers used by actions to register data - - -/// Remember that there is an assignment to this variable (For autocomplete) -static void specRegisterVariable(const char* var) -{ - variables->push_back(var); -} - -/// Variable Assignment/String literal should be turned into an editable -/// an editable is the data part of a control (it's model essentially) -static void specRegisterEditable(const char* var,SeExprSpecNode* node) -{ - //std::cerr<<"we have editable var "<(node)){ - editables->push_back(new SeExprEdNumberEditable(var,node->startPos,node->endPos,n->v)); - }else if(SeExprSpecVectorNode* n=dynamic_cast(node)){ - editables->push_back(new SeExprEdVectorEditable(var,node->startPos,node->endPos,n->v)); - }else if(SeExprSpecStringNode* n=dynamic_cast(node)){ - editables->push_back(new SeExprEdStringEditable(node->startPos,node->endPos,n->v)); - }else if(SeExprSpecCCurveNode* n=dynamic_cast(node)){ - if(SeExprSpecListNode* args=dynamic_cast(n->args)){ - if((args->nodes.size())%3==0){ - SeExprEdColorCurveEditable* ccurve=new SeExprEdColorCurveEditable(var,node->startPos,node->endPos); - bool valid=true; - for(size_t i=0;inodes.size();i+=3){ - SeExprSpecScalarNode* xnode=dynamic_cast(args->nodes[i]); - SeExprSpecVectorNode* ynode=dynamic_cast(args->nodes[i+1]); - SeExprSpecScalarNode* interpnode=dynamic_cast(args->nodes[i+2]); - if(xnode && ynode && interpnode){ - ccurve->add(xnode->v,ynode->v,interpnode->v); - }else{ - valid=false; - } - } - if(valid) editables->push_back(ccurve); - else delete ccurve; - }else{ - //std::cerr<<"Curve has wrong # of args"<nodes.size()<(node)){ - if(SeExprSpecListNode* args=dynamic_cast(n->args)){ - if((args->nodes.size())%3==0){ - SeExprEdCurveEditable* ccurve=new SeExprEdCurveEditable(var,node->startPos,node->endPos); - bool valid=true; - for(size_t i=0;inodes.size();i+=3){ - SeExprSpecScalarNode* xnode=dynamic_cast(args->nodes[i]); - SeExprSpecScalarNode* ynode=dynamic_cast(args->nodes[i+1]); - SeExprSpecScalarNode* interpnode=dynamic_cast(args->nodes[i+2]); - if(xnode && ynode && interpnode){ - ccurve->add(xnode->v,ynode->v,interpnode->v); - }else{ - valid=false; - } - } - if(valid) editables->push_back(ccurve); - else{ - delete ccurve; - } - } - } - }else if(SeExprSpecColorSwatchNode* n=dynamic_cast(node)){ - if(SeExprSpecListNode* args=dynamic_cast(n->args)){ - if(args->nodes.size()>0){ - SeExprEdColorSwatchEditable* swatch=new SeExprEdColorSwatchEditable(var,node->startPos,node->endPos); - bool valid=true; - for(size_t i=0;inodes.size();i++){ - SeExprSpecVectorNode* colornode=dynamic_cast(args->nodes[i]); - if(colornode){ - swatch->add(colornode->v); - }else{ - valid=false; - } - } - if(valid) editables->push_back(swatch); - else delete swatch; - } - } - }else if(SeExprSpecAnimCurveNode* n=dynamic_cast(node)){ - if(SeExprSpecListNode* args=dynamic_cast(n->args)){ - // need 3 items for pre inf and post inf and weighting, plus 9 items per key - if((args->nodes.size()-4)%9==0){ - SeExprEdAnimCurveEditable* animCurve=new SeExprEdAnimCurveEditable(var,node->startPos,node->endPos); - bool valid=true; - - -#ifdef SEEXPR_USE_ANIMLIB - if(SeExprSpecStringNode* s=dynamic_cast(args->nodes[0])){ - animCurve->curve.setPreInfinity(animlib::AnimCurve::stringToInfinityType(s->v)); - }else valid=false; - if(SeExprSpecStringNode* s=dynamic_cast(args->nodes[1])){ - animCurve->curve.setPostInfinity(animlib::AnimCurve::stringToInfinityType(s->v)); - }else valid=false; - if(SeExprSpecScalarNode* v=dynamic_cast(args->nodes[2])){ - animCurve->curve.setWeighted(bool(v->v)); - } - if(SeExprSpecStringNode* v=dynamic_cast(args->nodes[3])){ - animCurve->link=v->v; - } - - for(size_t i=4;inodes.size();i+=9){ - SeExprSpecScalarNode* xnode=dynamic_cast(args->nodes[i]); - SeExprSpecScalarNode* ynode=dynamic_cast(args->nodes[i+1]); - SeExprSpecScalarNode* inWeight=dynamic_cast(args->nodes[i+2]); - SeExprSpecScalarNode* outWeight=dynamic_cast(args->nodes[i+3]); - SeExprSpecScalarNode* inAngle=dynamic_cast(args->nodes[i+4]); - SeExprSpecScalarNode* outAngle=dynamic_cast(args->nodes[i+5]); - SeExprSpecStringNode* inTangType=dynamic_cast(args->nodes[i+6]); - SeExprSpecStringNode* outTangType=dynamic_cast(args->nodes[i+7]); - SeExprSpecScalarNode* weighted=dynamic_cast(args->nodes[i+8]); - if(xnode && ynode && inWeight && outWeight && inAngle && outAngle && inTangType && outTangType ){ - animlib::AnimKeyframe key(xnode->v,ynode->v); - key.setInWeight(inWeight->v); - key.setOutWeight(outWeight->v); - key.setInAngle(inAngle->v); - key.setOutAngle(outAngle->v); - key.setInTangentType(animlib::AnimKeyframe::stringToTangentType(inTangType->v)); - key.setOutTangentType(animlib::AnimKeyframe::stringToTangentType(outTangType->v)); - key.setWeightsLocked(weighted->v); - animCurve->curve.addKey(key); - }else{ - valid=false; - } - } - if(valid) editables->push_back(animCurve); - else delete animCurve; -#else - UNUSED(animCurve); - UNUSED(valid); -#endif - } - } - }else if(SeExprSpecDeepWaterNode* n=dynamic_cast(node)){ - if(SeExprSpecListNode* args=dynamic_cast(n->args)){ - if(args->nodes.size()==12){ - SeExprEdDeepWaterEditable* deepWater=new SeExprEdDeepWaterEditable(var,node->startPos,node->endPos); - bool valid=true; - - SeExprSpecScalarNode* resolution=dynamic_cast(args->nodes[0]); - SeExprSpecScalarNode* tileSize=dynamic_cast(args->nodes[1]); - SeExprSpecScalarNode* lengthCutoff=dynamic_cast(args->nodes[2]); - SeExprSpecScalarNode* amplitude=dynamic_cast(args->nodes[3]); - SeExprSpecScalarNode* windAngle=dynamic_cast(args->nodes[4]); - SeExprSpecScalarNode* windSpeed=dynamic_cast(args->nodes[5]); - SeExprSpecScalarNode* directionalFactorExponent=dynamic_cast(args->nodes[6]); - SeExprSpecScalarNode* directionalReflectionDamping=dynamic_cast(args->nodes[7]); - SeExprSpecVectorNode* flowDirection=dynamic_cast(args->nodes[8]); - SeExprSpecScalarNode* sharpen=dynamic_cast(args->nodes[9]); - SeExprSpecScalarNode* time=dynamic_cast(args->nodes[10]); - SeExprSpecScalarNode* filterWidth=dynamic_cast(args->nodes[11]); - if(resolution && tileSize && lengthCutoff && amplitude && windAngle && windSpeed && directionalFactorExponent && directionalReflectionDamping && flowDirection && sharpen && time && filterWidth){ - deepWater->setParams(SeDeepWaterParams(resolution->v, tileSize->v, lengthCutoff->v, amplitude->v, windAngle->v, windSpeed->v, directionalFactorExponent->v, directionalReflectionDamping->v, flowDirection->v, sharpen->v, time->v, filterWidth->v)); - }else{ - valid=false; - } - - if(valid) editables->push_back(deepWater); - else delete deepWater; - } - } - }else{ - std::cerr<<"SEEXPREDITOR LOGIC ERROR: We didn't recognize the Spec"< /* INFRINGES ON USER NAME SPACE */ -# define SeExprEdSpecYYSIZE_T size_t -# else -# define SeExprEdSpecYYSIZE_T unsigned int -# endif -#endif - -#define SeExprEdSpecYYSIZE_MAXIMUM ((SeExprEdSpecYYSIZE_T) -1) - -#ifndef SeExprEdSpecYY_ -# if defined SeExprEdSpecYYENABLE_NLS && SeExprEdSpecYYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define SeExprEdSpecYY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef SeExprEdSpecYY_ -# define SeExprEdSpecYY_(Msgid) Msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define SeExprEdSpecYYUSE(E) ((void) (E)) -#else -# define SeExprEdSpecYYUSE(E) /* empty */ -#endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define SeExprEdSpecYYID(N) (N) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -SeExprEdSpecYYID (int SeExprEdSpeci) -#else -static int -SeExprEdSpecYYID (SeExprEdSpeci) - int SeExprEdSpeci; -#endif -{ - return SeExprEdSpeci; -} -#endif - -#if ! defined SeExprEdSpecoverflow || SeExprEdSpecYYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef SeExprEdSpecYYSTACK_USE_ALLOCA -# if SeExprEdSpecYYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define SeExprEdSpecYYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define SeExprEdSpecYYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define SeExprEdSpecYYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef SeExprEdSpecYYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define SeExprEdSpecYYSTACK_FREE(Ptr) do { /* empty */; } while (SeExprEdSpecYYID (0)) -# ifndef SeExprEdSpecYYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define SeExprEdSpecYYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define SeExprEdSpecYYSTACK_ALLOC SeExprEdSpecYYMALLOC -# define SeExprEdSpecYYSTACK_FREE SeExprEdSpecYYFREE -# ifndef SeExprEdSpecYYSTACK_ALLOC_MAXIMUM -# define SeExprEdSpecYYSTACK_ALLOC_MAXIMUM SeExprEdSpecYYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined SeExprEdSpecYYMALLOC || defined malloc) \ - && (defined SeExprEdSpecYYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef SeExprEdSpecYYMALLOC -# define SeExprEdSpecYYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (SeExprEdSpecYYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef SeExprEdSpecYYFREE -# define SeExprEdSpecYYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined SeExprEdSpecoverflow || SeExprEdSpecYYERROR_VERBOSE */ - - -#if (! defined SeExprEdSpecoverflow \ - && (! defined __cplusplus \ - || (defined SeExprEdSpecYYLTYPE_IS_TRIVIAL && SeExprEdSpecYYLTYPE_IS_TRIVIAL \ - && defined SeExprEdSpecYYSTYPE_IS_TRIVIAL && SeExprEdSpecYYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union SeExprEdSpecalloc -{ - SeExprEdSpectype_int16 SeExprEdSpecss_alloc; - SeExprEdSpecYYSTYPE SeExprEdSpecvs_alloc; - SeExprEdSpecYYLTYPE SeExprEdSpecls_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define SeExprEdSpecYYSTACK_GAP_MAXIMUM (sizeof (union SeExprEdSpecalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define SeExprEdSpecYYSTACK_BYTES(N) \ - ((N) * (sizeof (SeExprEdSpectype_int16) + sizeof (SeExprEdSpecYYSTYPE) + sizeof (SeExprEdSpecYYLTYPE)) \ - + 2 * SeExprEdSpecYYSTACK_GAP_MAXIMUM) - -# define SeExprEdSpecYYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables SeExprEdSpecYYSIZE and SeExprEdSpecYYSTACKSIZE give the old and new number of - elements in the stack, and SeExprEdSpecYYPTR gives the new location of the - stack. Advance SeExprEdSpecYYPTR to a properly aligned location for the next - stack. */ -# define SeExprEdSpecYYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - SeExprEdSpecYYSIZE_T SeExprEdSpecnewbytes; \ - SeExprEdSpecYYCOPY (&SeExprEdSpecptr->Stack_alloc, Stack, SeExprEdSpecsize); \ - Stack = &SeExprEdSpecptr->Stack_alloc; \ - SeExprEdSpecnewbytes = SeExprEdSpecstacksize * sizeof (*Stack) + SeExprEdSpecYYSTACK_GAP_MAXIMUM; \ - SeExprEdSpecptr += SeExprEdSpecnewbytes / sizeof (*SeExprEdSpecptr); \ - } \ - while (SeExprEdSpecYYID (0)) - -#endif - -#if defined SeExprEdSpecYYCOPY_NEEDED && SeExprEdSpecYYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef SeExprEdSpecYYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define SeExprEdSpecYYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define SeExprEdSpecYYCOPY(Dst, Src, Count) \ - do \ - { \ - SeExprEdSpecYYSIZE_T SeExprEdSpeci; \ - for (SeExprEdSpeci = 0; SeExprEdSpeci < (Count); SeExprEdSpeci++) \ - (Dst)[SeExprEdSpeci] = (Src)[SeExprEdSpeci]; \ - } \ - while (SeExprEdSpecYYID (0)) -# endif -# endif -#endif /* !SeExprEdSpecYYCOPY_NEEDED */ - -/* SeExprEdSpecYYFINAL -- State number of the termination state. */ -#define SeExprEdSpecYYFINAL 40 -/* SeExprEdSpecYYLAST -- Last index in SeExprEdSpecYYTABLE. */ -#define SeExprEdSpecYYLAST 693 - -/* SeExprEdSpecYYNTOKENS -- Number of terminals. */ -#define SeExprEdSpecYYNTOKENS 44 -/* SeExprEdSpecYYNNTS -- Number of nonterminals. */ -#define SeExprEdSpecYYNNTS 11 -/* SeExprEdSpecYYNRULES -- Number of rules. */ -#define SeExprEdSpecYYNRULES 59 -/* SeExprEdSpecYYNRULES -- Number of states. */ -#define SeExprEdSpecYYNSTATES 139 - -/* SeExprEdSpecYYTRANSLATE(SeExprEdSpecYYLEX) -- Bison symbol number corresponding to SeExprEdSpecYYLEX. */ -#define SeExprEdSpecYYUNDEFTOK 2 -#define SeExprEdSpecYYMAXUTOK 277 - -#define SeExprEdSpecYYTRANSLATE(SeExprEdSpecYYX) \ - ((unsigned int) (SeExprEdSpecYYX) <= SeExprEdSpecYYMAXUTOK ? SeExprEdSpectranslate[SeExprEdSpecYYX] : SeExprEdSpecYYUNDEFTOK) - -/* SeExprEdSpecYYTRANSLATE[SeExprEdSpecYYLEX] -- Bison symbol number corresponding to SeExprEdSpecYYLEX. */ -static const SeExprEdSpectype_uint8 SeExprEdSpectranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 33, 2, 2, 2, 32, 2, 2, - 15, 16, 30, 28, 42, 29, 2, 31, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 18, 39, - 24, 38, 25, 19, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 37, 2, 43, 36, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 40, 2, 41, 34, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 17, 20, 21, 22, 23, 26, 27, 35 -}; - -#if SeExprEdSpecYYDEBUG -/* SeExprEdSpecYYPRHS[SeExprEdSpecYYN] -- Index of the first RHS symbol of rule number SeExprEdSpecYYN in - SeExprEdSpecYYRHS. */ -static const SeExprEdSpectype_uint8 SeExprEdSpecprhs[] = -{ - 0, 0, 3, 6, 8, 9, 11, 13, 16, 18, - 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, - 73, 78, 83, 88, 97, 98, 103, 106, 110, 118, - 123, 129, 133, 137, 141, 145, 149, 153, 157, 161, - 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, - 202, 209, 211, 213, 215, 216, 218, 220, 224, 226 -}; - -/* SeExprEdSpecYYRHS -- A `-1'-separated list of the rules' RHS. */ -static const SeExprEdSpectype_int8 SeExprEdSpecrhs[] = -{ - 45, 0, -1, 47, 51, -1, 51, -1, -1, 47, - -1, 48, -1, 47, 48, -1, 49, -1, 6, 38, - 51, 39, -1, 6, 9, 51, 39, -1, 6, 10, - 51, 39, -1, 6, 11, 51, 39, -1, 6, 12, - 51, 39, -1, 6, 13, 51, 39, -1, 6, 14, - 51, 39, -1, 5, 38, 51, 39, -1, 5, 9, - 51, 39, -1, 5, 10, 51, 39, -1, 5, 11, - 51, 39, -1, 5, 12, 51, 39, -1, 5, 13, - 51, 39, -1, 5, 14, 51, 39, -1, 3, 15, - 51, 16, 40, 46, 41, 50, -1, -1, 4, 40, - 46, 41, -1, 4, 49, -1, 15, 51, 16, -1, - 37, 51, 42, 51, 42, 51, 43, -1, 51, 37, - 51, 43, -1, 51, 19, 51, 18, 51, -1, 51, - 20, 51, -1, 51, 21, 51, -1, 51, 23, 51, - -1, 51, 22, 51, -1, 51, 24, 51, -1, 51, - 25, 51, -1, 51, 27, 51, -1, 51, 26, 51, - -1, 28, 51, -1, 29, 51, -1, 33, 51, -1, - 34, 51, -1, 51, 28, 51, -1, 51, 29, 51, - -1, 51, 30, 51, -1, 51, 31, 51, -1, 51, - 32, 51, -1, 51, 36, 51, -1, 5, 15, 52, - 16, -1, 51, 17, 5, 15, 52, 16, -1, 6, - -1, 5, -1, 8, -1, -1, 53, -1, 54, -1, - 53, 42, 54, -1, 51, -1, 7, -1 -}; - -/* SeExprEdSpecYYRLINE[SeExprEdSpecYYN] -- source line where rule number SeExprEdSpecYYN was defined. */ -static const SeExprEdSpectype_uint16 SeExprEdSpecrline[] = -{ - 0, 313, 313, 314, 319, 320, 324, 325, 330, 331, - 335, 336, 337, 338, 339, 340, 341, 345, 346, 347, - 348, 349, 350, 354, 359, 360, 361, 366, 367, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 425, 426, 427, 428, 433, 434, 439, 448, 460, 461 -}; -#endif - -#if SeExprEdSpecYYDEBUG || SeExprEdSpecYYERROR_VERBOSE || 0 -/* SeExprEdSpecYYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at SeExprEdSpecYYNTOKENS, nonterminals. */ -static const char *const SeExprEdSpectname[] = -{ - "$end", "error", "$undefined", "IF", "ELSE", "NAME", "VAR", "STR", - "NUMBER", "AddEq", "SubEq", "MultEq", "DivEq", "ExpEq", "ModEq", "'('", - "')'", "ARROW", "':'", "'?'", "OR", "AND", "NE", "EQ", "'<'", "'>'", - "GE", "LE", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "'~'", "UNARY", - "'^'", "'['", "'='", "';'", "'{'", "'}'", "','", "']'", "$accept", - "expr", "optassigns", "assigns", "assign", "ifthenelse", "optelse", "e", - "optargs", "args", "arg", SeExprEdSpecYY_NULL -}; -#endif - -# ifdef SeExprEdSpecYYPRINT -/* SeExprEdSpecYYTOKNUM[SeExprEdSpecYYLEX-NUM] -- Internal token number corresponding to - token SeExprEdSpecYYLEX-NUM. */ -static const SeExprEdSpectype_uint16 SeExprEdSpectoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 40, 41, 270, 58, 63, - 271, 272, 273, 274, 60, 62, 275, 276, 43, 45, - 42, 47, 37, 33, 126, 277, 94, 91, 61, 59, - 123, 125, 44, 93 -}; -# endif - -/* SeExprEdSpecYYR1[SeExprEdSpecYYN] -- Symbol number of symbol that rule SeExprEdSpecYYN derives. */ -static const SeExprEdSpectype_uint8 SeExprEdSpecr1[] = -{ - 0, 44, 45, 45, 46, 46, 47, 47, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 49, 50, 50, 50, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 52, 52, 53, 53, 54, 54 -}; - -/* SeExprEdSpecYYR2[SeExprEdSpecYYN] -- Number of symbols composing right hand side of rule SeExprEdSpecYYN. */ -static const SeExprEdSpectype_uint8 SeExprEdSpecr2[] = -{ - 0, 2, 2, 1, 0, 1, 1, 2, 1, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 8, 0, 4, 2, 3, 7, 4, - 5, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, - 6, 1, 1, 1, 0, 1, 1, 3, 1, 1 -}; - -/* SeExprEdSpecYYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when SeExprEdSpecYYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const SeExprEdSpectype_uint8 SeExprEdSpecdefact[] = -{ - 0, 0, 52, 51, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 8, 3, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 52, 51, 0, 39, 40, 41, 42, 0, - 1, 7, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 59, 58, 0, - 55, 56, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 0, 31, 32, 34, 33, 35, 36, - 38, 37, 43, 44, 45, 46, 47, 48, 0, 0, - 17, 18, 19, 20, 21, 22, 49, 0, 16, 10, - 11, 12, 13, 14, 15, 9, 0, 54, 0, 29, - 4, 57, 0, 0, 30, 0, 0, 0, 5, 0, - 50, 24, 28, 0, 23, 4, 26, 0, 25 -}; - -/* SeExprEdSpecYYDEFGOTO[NTERM-NUM]. */ -static const SeExprEdSpectype_int16 SeExprEdSpecdefgoto[] = -{ - -1, 11, 127, 128, 13, 14, 134, 68, 69, 70, - 71 -}; - -/* SeExprEdSpecYYPACT[STATE-NUM] -- Index in SeExprEdSpecYYTABLE of the portion describing - STATE-NUM. */ -#define SeExprEdSpecYYPACT_NINF -65 -static const SeExprEdSpectype_int16 SeExprEdSpecpact[] = -{ - 57, 25, 23, 127, -65, 98, 98, 98, 98, 98, - 98, 15, 57, -65, -65, 590, 98, 98, 98, 98, - 98, 98, 98, 68, 98, 98, 98, 98, 98, 98, - 98, 98, 26, -65, 526, -33, -33, -33, -33, 181, - -65, -65, 590, 18, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 548, 229, 250, 271, 292, 313, 334, -65, 590, 27, - 22, -65, 355, 376, 397, 418, 439, 460, 481, 502, - -65, 98, 51, 569, 626, 642, 656, 656, 79, 79, - 79, 79, 93, 93, -33, -33, -33, -33, 131, 2, - -65, -65, -65, -65, -65, -65, -65, 68, -65, -65, - -65, -65, -65, -65, -65, -65, 205, 68, 98, -65, - 8, -65, 98, 52, 609, 133, 127, 28, 8, 156, - -65, 63, -65, -1, -65, 8, -65, 29, -65 -}; - -/* SeExprEdSpecYYPGOTO[NTERM-NUM]. */ -static const SeExprEdSpectype_int8 SeExprEdSpecpgoto[] = -{ - -65, -65, -64, 77, -11, -55, -65, 0, -38, -65, - -27 -}; - -/* SeExprEdSpecYYTABLE[SeExprEdSpecYYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If SeExprEdSpecYYTABLE_NINF, syntax error. */ -#define SeExprEdSpecYYTABLE_NINF -1 -static const SeExprEdSpectype_uint8 SeExprEdSpectable[] = -{ - 15, 41, 1, 58, 59, 34, 35, 36, 37, 38, - 39, 1, 42, 125, 126, 40, 60, 61, 62, 63, - 64, 65, 66, 82, 72, 73, 74, 75, 76, 77, - 78, 79, 17, 18, 19, 20, 21, 22, 23, 135, - 16, 23, 120, 106, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 1, 24, 2, 3, 107, 4, 117, 133, 130, 131, - 138, 137, 5, 32, 33, 67, 4, 12, 136, 123, - 121, 116, 0, 5, 0, 6, 7, 0, 0, 0, - 8, 9, 0, 0, 10, 0, 6, 7, 0, 0, - 0, 8, 9, 32, 33, 10, 4, 53, 54, 55, - 56, 57, 0, 5, 0, 58, 59, 41, 124, 0, - 0, 0, 129, 55, 56, 57, 6, 7, 0, 58, - 59, 8, 9, 0, 0, 10, 25, 26, 27, 28, - 29, 30, 17, 18, 19, 20, 21, 22, 43, 0, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 0, 31, 0, 58, 59, 0, - 0, 24, 0, 43, 119, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, - 0, 0, 58, 59, 0, 0, 0, 0, 43, 132, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 0, 0, 0, 58, 59, 0, - 0, 0, 43, 81, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 0, 0, - 0, 58, 59, 0, 0, 0, 43, 122, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 0, 0, 0, 58, 59, 43, 100, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 0, 0, 0, 58, 59, 43, 101, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 0, 0, 0, 58, 59, 43, - 102, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 0, 0, 0, 58, 59, - 43, 103, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 0, 0, 0, 58, - 59, 43, 104, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 0, 0, 0, - 58, 59, 43, 105, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 0, 0, - 0, 58, 59, 43, 108, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, - 0, 0, 58, 59, 43, 109, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 0, 0, 0, 58, 59, 43, 110, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 0, 0, 0, 58, 59, 43, 111, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 0, 0, 0, 58, 59, 43, 112, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 0, 0, 0, 58, 59, 43, 113, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 0, 0, 0, 58, 59, 43, - 114, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 0, 0, 0, 58, 59, - 0, 115, 80, 43, 0, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, - 0, 0, 58, 59, 99, 43, 0, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 0, 0, 0, 58, 59, 43, 118, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 0, 0, 0, 58, 59, 43, 0, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 0, 0, 0, 58, 59, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 0, 0, 0, 58, 59, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, - 0, 0, 58, 59, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 0, 0, 0, 58, 59, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, - 0, 0, 58, 59 -}; - -#define SeExprEdSpecpact_value_is_default(Yystate) \ - (!!((Yystate) == (-65))) - -#define SeExprEdSpectable_value_is_error(Yytable_value) \ - SeExprEdSpecYYID (0) - -static const SeExprEdSpectype_int16 SeExprEdSpeccheck[] = -{ - 0, 12, 3, 36, 37, 5, 6, 7, 8, 9, - 10, 3, 12, 5, 6, 0, 16, 17, 18, 19, - 20, 21, 22, 5, 24, 25, 26, 27, 28, 29, - 30, 31, 9, 10, 11, 12, 13, 14, 15, 40, - 15, 15, 40, 16, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 3, 38, 5, 6, 42, 8, 15, 4, 16, 41, - 41, 135, 15, 5, 6, 7, 8, 0, 133, 117, - 107, 81, -1, 15, -1, 28, 29, -1, -1, -1, - 33, 34, -1, -1, 37, -1, 28, 29, -1, -1, - -1, 33, 34, 5, 6, 37, 8, 28, 29, 30, - 31, 32, -1, 15, -1, 36, 37, 128, 118, -1, - -1, -1, 122, 30, 31, 32, 28, 29, -1, 36, - 37, 33, 34, -1, -1, 37, 9, 10, 11, 12, - 13, 14, 9, 10, 11, 12, 13, 14, 17, -1, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 38, -1, 36, 37, -1, - -1, 38, -1, 17, 43, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - -1, -1, 36, 37, -1, -1, -1, -1, 17, 43, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, -1, -1, 36, 37, -1, - -1, -1, 17, 42, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, - -1, 36, 37, -1, -1, -1, 17, 42, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, -1, -1, 36, 37, 17, 39, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, -1, -1, -1, 36, 37, 17, 39, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, -1, -1, 36, 37, 17, - 39, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, -1, -1, 36, 37, - 17, 39, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, -1, -1, -1, 36, - 37, 17, 39, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, - 36, 37, 17, 39, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, - -1, 36, 37, 17, 39, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - -1, -1, 36, 37, 17, 39, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - -1, -1, -1, 36, 37, 17, 39, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, -1, -1, -1, 36, 37, 17, 39, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, -1, -1, 36, 37, 17, 39, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, -1, -1, -1, 36, 37, 17, 39, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, -1, -1, 36, 37, 17, - 39, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, -1, -1, 36, 37, - -1, 39, 16, 17, -1, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - -1, -1, 36, 37, 16, 17, -1, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, -1, -1, -1, 36, 37, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, -1, -1, 36, 37, 17, -1, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, -1, -1, -1, 36, 37, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, -1, -1, 36, 37, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - -1, -1, 36, 37, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, -1, -1, 36, 37, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - -1, -1, 36, 37 -}; - -/* SeExprEdSpecYYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const SeExprEdSpectype_uint8 SeExprEdSpecstos[] = -{ - 0, 3, 5, 6, 8, 15, 28, 29, 33, 34, - 37, 45, 47, 48, 49, 51, 15, 9, 10, 11, - 12, 13, 14, 15, 38, 9, 10, 11, 12, 13, - 14, 38, 5, 6, 51, 51, 51, 51, 51, 51, - 0, 48, 51, 17, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 36, 37, - 51, 51, 51, 51, 51, 51, 51, 7, 51, 52, - 53, 54, 51, 51, 51, 51, 51, 51, 51, 51, - 16, 42, 5, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 16, - 39, 39, 39, 39, 39, 39, 16, 42, 39, 39, - 39, 39, 39, 39, 39, 39, 51, 15, 18, 43, - 40, 54, 42, 52, 51, 5, 6, 46, 47, 51, - 16, 41, 43, 4, 50, 40, 49, 46, 41 -}; - -#define SeExprEdSpecerrok (SeExprEdSpecerrstatus = 0) -#define SeExprEdSpecclearin (SeExprEdSpecchar = SeExprEdSpecYYEMPTY) -#define SeExprEdSpecYYEMPTY (-2) -#define SeExprEdSpecYYEOF 0 - -#define SeExprEdSpecYYACCEPT goto SeExprEdSpecacceptlab -#define SeExprEdSpecYYABORT goto SeExprEdSpecabortlab -#define SeExprEdSpecYYERROR goto SeExprEdSpecerrorlab - - -/* Like SeExprEdSpecYYERROR except do call SeExprEdSpecerror. This remains here temporarily - to ease the transition to the new meaning of SeExprEdSpecYYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - SeExprEdSpecYYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define SeExprEdSpecYYFAIL goto SeExprEdSpecerrlab -#if defined SeExprEdSpecYYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - SeExprEdSpecYYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif - -#define SeExprEdSpecYYRECOVERING() (!!SeExprEdSpecerrstatus) - -#define SeExprEdSpecYYBACKUP(Token, Value) \ -do \ - if (SeExprEdSpecchar == SeExprEdSpecYYEMPTY) \ - { \ - SeExprEdSpecchar = (Token); \ - SeExprEdSpeclval = (Value); \ - SeExprEdSpecYYPOPSTACK (SeExprEdSpeclen); \ - SeExprEdSpecstate = *SeExprEdSpecssp; \ - goto SeExprEdSpecbackup; \ - } \ - else \ - { \ - SeExprEdSpecerror (SeExprEdSpecYY_("syntax error: cannot back up")); \ - SeExprEdSpecYYERROR; \ - } \ -while (SeExprEdSpecYYID (0)) - -/* Error token number */ -#define SeExprEdSpecYYTERROR 1 -#define SeExprEdSpecYYERRCODE 256 - - -/* SeExprEdSpecYYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#ifndef SeExprEdSpecYYLLOC_DEFAULT -# define SeExprEdSpecYYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (SeExprEdSpecYYID (N)) \ - { \ - (Current).first_line = SeExprEdSpecYYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = SeExprEdSpecYYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = SeExprEdSpecYYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = SeExprEdSpecYYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - SeExprEdSpecYYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - SeExprEdSpecYYRHSLOC (Rhs, 0).last_column; \ - } \ - while (SeExprEdSpecYYID (0)) -#endif - -#define SeExprEdSpecYYRHSLOC(Rhs, K) ((Rhs)[K]) - - -/* SeExprEdSpecYY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef SeExprEdSpecYY_LOCATION_PRINT -# if defined SeExprEdSpecYYLTYPE_IS_TRIVIAL && SeExprEdSpecYYLTYPE_IS_TRIVIAL - -/* Print *SeExprEdSpecYYLOCP on SeExprEdSpecYYO. Private, do not rely on its existence. */ - -__attribute__((__unused__)) -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static unsigned -SeExprEdSpec_location_print_ (FILE *SeExprEdSpeco, SeExprEdSpecYYLTYPE const * const SeExprEdSpeclocp) -#else -static unsigned -SeExprEdSpec_location_print_ (SeExprEdSpeco, SeExprEdSpeclocp) - FILE *SeExprEdSpeco; - SeExprEdSpecYYLTYPE const * const SeExprEdSpeclocp; -#endif -{ - unsigned res = 0; - int end_col = 0 != SeExprEdSpeclocp->last_column ? SeExprEdSpeclocp->last_column - 1 : 0; - if (0 <= SeExprEdSpeclocp->first_line) - { - res += fprintf (SeExprEdSpeco, "%d", SeExprEdSpeclocp->first_line); - if (0 <= SeExprEdSpeclocp->first_column) - res += fprintf (SeExprEdSpeco, ".%d", SeExprEdSpeclocp->first_column); - } - if (0 <= SeExprEdSpeclocp->last_line) - { - if (SeExprEdSpeclocp->first_line < SeExprEdSpeclocp->last_line) - { - res += fprintf (SeExprEdSpeco, "-%d", SeExprEdSpeclocp->last_line); - if (0 <= end_col) - res += fprintf (SeExprEdSpeco, ".%d", end_col); - } - else if (0 <= end_col && SeExprEdSpeclocp->first_column < end_col) - res += fprintf (SeExprEdSpeco, "-%d", end_col); - } - return res; - } - -# define SeExprEdSpecYY_LOCATION_PRINT(File, Loc) \ - SeExprEdSpec_location_print_ (File, &(Loc)) - -# else -# define SeExprEdSpecYY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -/* SeExprEdSpecYYLEX -- calling `SeExprEdSpeclex' with the right arguments. */ -#ifdef SeExprEdSpecYYLEX_PARAM -# define SeExprEdSpecYYLEX SeExprEdSpeclex (SeExprEdSpecYYLEX_PARAM) -#else -# define SeExprEdSpecYYLEX SeExprEdSpeclex () -#endif - -/* Enable debugging if requested. */ -#if SeExprEdSpecYYDEBUG - -# ifndef SeExprEdSpecYYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define SeExprEdSpecYYFPRINTF fprintf -# endif - -# define SeExprEdSpecYYDPRINTF(Args) \ -do { \ - if (SeExprEdSpecdebug) \ - SeExprEdSpecYYFPRINTF Args; \ -} while (SeExprEdSpecYYID (0)) - -# define SeExprEdSpecYY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (SeExprEdSpecdebug) \ - { \ - SeExprEdSpecYYFPRINTF (stderr, "%s ", Title); \ - SeExprEdSpec_symbol_print (stderr, \ - Type, Value, Location); \ - SeExprEdSpecYYFPRINTF (stderr, "\n"); \ - } \ -} while (SeExprEdSpecYYID (0)) - - -/*--------------------------------. -| Print this symbol on SeExprEdSpecYYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -SeExprEdSpec_symbol_value_print (FILE *SeExprEdSpecoutput, int SeExprEdSpectype, SeExprEdSpecYYSTYPE const * const SeExprEdSpecvaluep, SeExprEdSpecYYLTYPE const * const SeExprEdSpeclocationp) -#else -static void -SeExprEdSpec_symbol_value_print (SeExprEdSpecoutput, SeExprEdSpectype, SeExprEdSpecvaluep, SeExprEdSpeclocationp) - FILE *SeExprEdSpecoutput; - int SeExprEdSpectype; - SeExprEdSpecYYSTYPE const * const SeExprEdSpecvaluep; - SeExprEdSpecYYLTYPE const * const SeExprEdSpeclocationp; -#endif -{ - FILE *SeExprEdSpeco = SeExprEdSpecoutput; - SeExprEdSpecYYUSE (SeExprEdSpeco); - if (!SeExprEdSpecvaluep) - return; - SeExprEdSpecYYUSE (SeExprEdSpeclocationp); -# ifdef SeExprEdSpecYYPRINT - if (SeExprEdSpectype < SeExprEdSpecYYNTOKENS) - SeExprEdSpecYYPRINT (SeExprEdSpecoutput, SeExprEdSpectoknum[SeExprEdSpectype], *SeExprEdSpecvaluep); -# else - SeExprEdSpecYYUSE (SeExprEdSpecoutput); -# endif - switch (SeExprEdSpectype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on SeExprEdSpecYYOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -SeExprEdSpec_symbol_print (FILE *SeExprEdSpecoutput, int SeExprEdSpectype, SeExprEdSpecYYSTYPE const * const SeExprEdSpecvaluep, SeExprEdSpecYYLTYPE const * const SeExprEdSpeclocationp) -#else -static void -SeExprEdSpec_symbol_print (SeExprEdSpecoutput, SeExprEdSpectype, SeExprEdSpecvaluep, SeExprEdSpeclocationp) - FILE *SeExprEdSpecoutput; - int SeExprEdSpectype; - SeExprEdSpecYYSTYPE const * const SeExprEdSpecvaluep; - SeExprEdSpecYYLTYPE const * const SeExprEdSpeclocationp; -#endif -{ - if (SeExprEdSpectype < SeExprEdSpecYYNTOKENS) - SeExprEdSpecYYFPRINTF (SeExprEdSpecoutput, "token %s (", SeExprEdSpectname[SeExprEdSpectype]); - else - SeExprEdSpecYYFPRINTF (SeExprEdSpecoutput, "nterm %s (", SeExprEdSpectname[SeExprEdSpectype]); - - SeExprEdSpecYY_LOCATION_PRINT (SeExprEdSpecoutput, *SeExprEdSpeclocationp); - SeExprEdSpecYYFPRINTF (SeExprEdSpecoutput, ": "); - SeExprEdSpec_symbol_value_print (SeExprEdSpecoutput, SeExprEdSpectype, SeExprEdSpecvaluep, SeExprEdSpeclocationp); - SeExprEdSpecYYFPRINTF (SeExprEdSpecoutput, ")"); -} - -/*------------------------------------------------------------------. -| SeExprEdSpec_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -SeExprEdSpec_stack_print (SeExprEdSpectype_int16 *SeExprEdSpecbottom, SeExprEdSpectype_int16 *SeExprEdSpectop) -#else -static void -SeExprEdSpec_stack_print (SeExprEdSpecbottom, SeExprEdSpectop) - SeExprEdSpectype_int16 *SeExprEdSpecbottom; - SeExprEdSpectype_int16 *SeExprEdSpectop; -#endif -{ - SeExprEdSpecYYFPRINTF (stderr, "Stack now"); - for (; SeExprEdSpecbottom <= SeExprEdSpectop; SeExprEdSpecbottom++) - { - int SeExprEdSpecbot = *SeExprEdSpecbottom; - SeExprEdSpecYYFPRINTF (stderr, " %d", SeExprEdSpecbot); - } - SeExprEdSpecYYFPRINTF (stderr, "\n"); -} - -# define SeExprEdSpecYY_STACK_PRINT(Bottom, Top) \ -do { \ - if (SeExprEdSpecdebug) \ - SeExprEdSpec_stack_print ((Bottom), (Top)); \ -} while (SeExprEdSpecYYID (0)) - - -/*------------------------------------------------. -| Report that the SeExprEdSpecYYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -SeExprEdSpec_reduce_print (SeExprEdSpecYYSTYPE *SeExprEdSpecvsp, SeExprEdSpecYYLTYPE *SeExprEdSpeclsp, int SeExprEdSpecrule) -#else -static void -SeExprEdSpec_reduce_print (SeExprEdSpecvsp, SeExprEdSpeclsp, SeExprEdSpecrule) - SeExprEdSpecYYSTYPE *SeExprEdSpecvsp; - SeExprEdSpecYYLTYPE *SeExprEdSpeclsp; - int SeExprEdSpecrule; -#endif -{ - int SeExprEdSpecnrhs = SeExprEdSpecr2[SeExprEdSpecrule]; - int SeExprEdSpeci; - unsigned long int SeExprEdSpeclno = SeExprEdSpecrline[SeExprEdSpecrule]; - SeExprEdSpecYYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - SeExprEdSpecrule - 1, SeExprEdSpeclno); - /* The symbols being reduced. */ - for (SeExprEdSpeci = 0; SeExprEdSpeci < SeExprEdSpecnrhs; SeExprEdSpeci++) - { - SeExprEdSpecYYFPRINTF (stderr, " $%d = ", SeExprEdSpeci + 1); - SeExprEdSpec_symbol_print (stderr, SeExprEdSpecrhs[SeExprEdSpecprhs[SeExprEdSpecrule] + SeExprEdSpeci], - &(SeExprEdSpecvsp[(SeExprEdSpeci + 1) - (SeExprEdSpecnrhs)]) - , &(SeExprEdSpeclsp[(SeExprEdSpeci + 1) - (SeExprEdSpecnrhs)]) ); - SeExprEdSpecYYFPRINTF (stderr, "\n"); - } -} - -# define SeExprEdSpecYY_REDUCE_PRINT(Rule) \ -do { \ - if (SeExprEdSpecdebug) \ - SeExprEdSpec_reduce_print (SeExprEdSpecvsp, SeExprEdSpeclsp, Rule); \ -} while (SeExprEdSpecYYID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int SeExprEdSpecdebug; -#else /* !SeExprEdSpecYYDEBUG */ -# define SeExprEdSpecYYDPRINTF(Args) -# define SeExprEdSpecYY_SYMBOL_PRINT(Title, Type, Value, Location) -# define SeExprEdSpecYY_STACK_PRINT(Bottom, Top) -# define SeExprEdSpecYY_REDUCE_PRINT(Rule) -#endif /* !SeExprEdSpecYYDEBUG */ - - -/* SeExprEdSpecYYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef SeExprEdSpecYYINITDEPTH -# define SeExprEdSpecYYINITDEPTH 200 -#endif - -/* SeExprEdSpecYYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - SeExprEdSpecYYSTACK_ALLOC_MAXIMUM < SeExprEdSpecYYSTACK_BYTES (SeExprEdSpecYYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef SeExprEdSpecYYMAXDEPTH -# define SeExprEdSpecYYMAXDEPTH 10000 -#endif - - -#if SeExprEdSpecYYERROR_VERBOSE - -# ifndef SeExprEdSpecstrlen -# if defined __GLIBC__ && defined _STRING_H -# define SeExprEdSpecstrlen strlen -# else -/* Return the length of SeExprEdSpecYYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static SeExprEdSpecYYSIZE_T -SeExprEdSpecstrlen (const char *SeExprEdSpecstr) -#else -static SeExprEdSpecYYSIZE_T -SeExprEdSpecstrlen (SeExprEdSpecstr) - const char *SeExprEdSpecstr; -#endif -{ - SeExprEdSpecYYSIZE_T SeExprEdSpeclen; - for (SeExprEdSpeclen = 0; SeExprEdSpecstr[SeExprEdSpeclen]; SeExprEdSpeclen++) - continue; - return SeExprEdSpeclen; -} -# endif -# endif - -# ifndef SeExprEdSpecstpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define SeExprEdSpecstpcpy stpcpy -# else -/* Copy SeExprEdSpecYYSRC to SeExprEdSpecYYDEST, returning the address of the terminating '\0' in - SeExprEdSpecYYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -SeExprEdSpecstpcpy (char *SeExprEdSpecdest, const char *SeExprEdSpecsrc) -#else -static char * -SeExprEdSpecstpcpy (SeExprEdSpecdest, SeExprEdSpecsrc) - char *SeExprEdSpecdest; - const char *SeExprEdSpecsrc; -#endif -{ - char *SeExprEdSpecd = SeExprEdSpecdest; - const char *SeExprEdSpecs = SeExprEdSpecsrc; - - while ((*SeExprEdSpecd++ = *SeExprEdSpecs++) != '\0') - continue; - - return SeExprEdSpecd - 1; -} -# endif -# endif - -# ifndef SeExprEdSpectnamerr -/* Copy to SeExprEdSpecYYRES the contents of SeExprEdSpecYYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for SeExprEdSpecerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). SeExprEdSpecYYSTR is taken from SeExprEdSpectname. If SeExprEdSpecYYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static SeExprEdSpecYYSIZE_T -SeExprEdSpectnamerr (char *SeExprEdSpecres, const char *SeExprEdSpecstr) -{ - if (*SeExprEdSpecstr == '"') - { - SeExprEdSpecYYSIZE_T SeExprEdSpecn = 0; - char const *SeExprEdSpecp = SeExprEdSpecstr; - - for (;;) - switch (*++SeExprEdSpecp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++SeExprEdSpecp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (SeExprEdSpecres) - SeExprEdSpecres[SeExprEdSpecn] = *SeExprEdSpecp; - SeExprEdSpecn++; - break; - - case '"': - if (SeExprEdSpecres) - SeExprEdSpecres[SeExprEdSpecn] = '\0'; - return SeExprEdSpecn; - } - do_not_strip_quotes: ; - } - - if (! SeExprEdSpecres) - return SeExprEdSpecstrlen (SeExprEdSpecstr); - - return SeExprEdSpecstpcpy (SeExprEdSpecres, SeExprEdSpecstr) - SeExprEdSpecres; -} -# endif - -/* Copy into *SeExprEdSpecYYMSG, which is of size *SeExprEdSpecYYMSG_ALLOC, an error message - about the unexpected token SeExprEdSpecYYTOKEN for the state stack whose top is - SeExprEdSpecYYSSP. - - Return 0 if *SeExprEdSpecYYMSG was successfully written. Return 1 if *SeExprEdSpecYYMSG is - not large enough to hold the message. In that case, also set - *SeExprEdSpecYYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -SeExprEdSpecsyntax_error (SeExprEdSpecYYSIZE_T *SeExprEdSpecmsg_alloc, char **SeExprEdSpecmsg, - SeExprEdSpectype_int16 *SeExprEdSpecssp, int SeExprEdSpectoken) -{ - SeExprEdSpecYYSIZE_T SeExprEdSpecsize0 = SeExprEdSpectnamerr (SeExprEdSpecYY_NULL, SeExprEdSpectname[SeExprEdSpectoken]); - SeExprEdSpecYYSIZE_T SeExprEdSpecsize = SeExprEdSpecsize0; - enum { SeExprEdSpecYYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *SeExprEdSpecformat = SeExprEdSpecYY_NULL; - /* Arguments of SeExprEdSpecformat. */ - char const *SeExprEdSpecarg[SeExprEdSpecYYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int SeExprEdSpeccount = 0; - - /* There are many possibilities here to consider: - - Assume SeExprEdSpecYYFAIL is not used. It's too flawed to consider. See - - for details. SeExprEdSpecYYERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in SeExprEdSpecchar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated SeExprEdSpecchar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (SeExprEdSpectoken != SeExprEdSpecYYEMPTY) - { - int SeExprEdSpecn = SeExprEdSpecpact[*SeExprEdSpecssp]; - SeExprEdSpecarg[SeExprEdSpeccount++] = SeExprEdSpectname[SeExprEdSpectoken]; - if (!SeExprEdSpecpact_value_is_default (SeExprEdSpecn)) - { - /* Start SeExprEdSpecYYX at -SeExprEdSpecYYN if negative to avoid negative indexes in - SeExprEdSpecYYCHECK. In other words, skip the first -SeExprEdSpecYYN actions for - this state because they are default actions. */ - int SeExprEdSpecxbegin = SeExprEdSpecn < 0 ? -SeExprEdSpecn : 0; - /* Stay within bounds of both SeExprEdSpeccheck and SeExprEdSpectname. */ - int SeExprEdSpecchecklim = SeExprEdSpecYYLAST - SeExprEdSpecn + 1; - int SeExprEdSpecxend = SeExprEdSpecchecklim < SeExprEdSpecYYNTOKENS ? SeExprEdSpecchecklim : SeExprEdSpecYYNTOKENS; - int SeExprEdSpecx; - - for (SeExprEdSpecx = SeExprEdSpecxbegin; SeExprEdSpecx < SeExprEdSpecxend; ++SeExprEdSpecx) - if (SeExprEdSpeccheck[SeExprEdSpecx + SeExprEdSpecn] == SeExprEdSpecx && SeExprEdSpecx != SeExprEdSpecYYTERROR - && !SeExprEdSpectable_value_is_error (SeExprEdSpectable[SeExprEdSpecx + SeExprEdSpecn])) - { - if (SeExprEdSpeccount == SeExprEdSpecYYERROR_VERBOSE_ARGS_MAXIMUM) - { - SeExprEdSpeccount = 1; - SeExprEdSpecsize = SeExprEdSpecsize0; - break; - } - SeExprEdSpecarg[SeExprEdSpeccount++] = SeExprEdSpectname[SeExprEdSpecx]; - { - SeExprEdSpecYYSIZE_T SeExprEdSpecsize1 = SeExprEdSpecsize + SeExprEdSpectnamerr (SeExprEdSpecYY_NULL, SeExprEdSpectname[SeExprEdSpecx]); - if (! (SeExprEdSpecsize <= SeExprEdSpecsize1 - && SeExprEdSpecsize1 <= SeExprEdSpecYYSTACK_ALLOC_MAXIMUM)) - return 2; - SeExprEdSpecsize = SeExprEdSpecsize1; - } - } - } - } - - switch (SeExprEdSpeccount) - { -# define SeExprEdSpecYYCASE_(N, S) \ - case N: \ - SeExprEdSpecformat = S; \ - break - SeExprEdSpecYYCASE_(0, SeExprEdSpecYY_("syntax error")); - SeExprEdSpecYYCASE_(1, SeExprEdSpecYY_("syntax error, unexpected %s")); - SeExprEdSpecYYCASE_(2, SeExprEdSpecYY_("syntax error, unexpected %s, expecting %s")); - SeExprEdSpecYYCASE_(3, SeExprEdSpecYY_("syntax error, unexpected %s, expecting %s or %s")); - SeExprEdSpecYYCASE_(4, SeExprEdSpecYY_("syntax error, unexpected %s, expecting %s or %s or %s")); - SeExprEdSpecYYCASE_(5, SeExprEdSpecYY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef SeExprEdSpecYYCASE_ - } - - { - SeExprEdSpecYYSIZE_T SeExprEdSpecsize1 = SeExprEdSpecsize + SeExprEdSpecstrlen (SeExprEdSpecformat); - if (! (SeExprEdSpecsize <= SeExprEdSpecsize1 && SeExprEdSpecsize1 <= SeExprEdSpecYYSTACK_ALLOC_MAXIMUM)) - return 2; - SeExprEdSpecsize = SeExprEdSpecsize1; - } - - if (*SeExprEdSpecmsg_alloc < SeExprEdSpecsize) - { - *SeExprEdSpecmsg_alloc = 2 * SeExprEdSpecsize; - if (! (SeExprEdSpecsize <= *SeExprEdSpecmsg_alloc - && *SeExprEdSpecmsg_alloc <= SeExprEdSpecYYSTACK_ALLOC_MAXIMUM)) - *SeExprEdSpecmsg_alloc = SeExprEdSpecYYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *SeExprEdSpecp = *SeExprEdSpecmsg; - int SeExprEdSpeci = 0; - while ((*SeExprEdSpecp = *SeExprEdSpecformat) != '\0') - if (*SeExprEdSpecp == '%' && SeExprEdSpecformat[1] == 's' && SeExprEdSpeci < SeExprEdSpeccount) - { - SeExprEdSpecp += SeExprEdSpectnamerr (SeExprEdSpecp, SeExprEdSpecarg[SeExprEdSpeci++]); - SeExprEdSpecformat += 2; - } - else - { - SeExprEdSpecp++; - SeExprEdSpecformat++; - } - } - return 0; -} -#endif /* SeExprEdSpecYYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -SeExprEdSpecdestruct (const char *SeExprEdSpecmsg, int SeExprEdSpectype, SeExprEdSpecYYSTYPE *SeExprEdSpecvaluep, SeExprEdSpecYYLTYPE *SeExprEdSpeclocationp) -#else -static void -SeExprEdSpecdestruct (SeExprEdSpecmsg, SeExprEdSpectype, SeExprEdSpecvaluep, SeExprEdSpeclocationp) - const char *SeExprEdSpecmsg; - int SeExprEdSpectype; - SeExprEdSpecYYSTYPE *SeExprEdSpecvaluep; - SeExprEdSpecYYLTYPE *SeExprEdSpeclocationp; -#endif -{ - SeExprEdSpecYYUSE (SeExprEdSpecvaluep); - SeExprEdSpecYYUSE (SeExprEdSpeclocationp); - - if (!SeExprEdSpecmsg) - SeExprEdSpecmsg = "Deleting"; - SeExprEdSpecYY_SYMBOL_PRINT (SeExprEdSpecmsg, SeExprEdSpectype, SeExprEdSpecvaluep, SeExprEdSpeclocationp); - - switch (SeExprEdSpectype) - { - - default: - break; - } -} - - - - -/* The lookahead symbol. */ -int SeExprEdSpecchar; - - -#ifndef SeExprEdSpecYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define SeExprEdSpecYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define SeExprEdSpecYY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef SeExprEdSpecYY_INITIAL_VALUE -# define SeExprEdSpecYY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -/* The semantic value of the lookahead symbol. */ -SeExprEdSpecYYSTYPE SeExprEdSpeclval SeExprEdSpecYY_INITIAL_VALUE(SeExprEdSpecval_default); - -/* Location data for the lookahead symbol. */ -SeExprEdSpecYYLTYPE SeExprEdSpeclloc -# if defined SeExprEdSpecYYLTYPE_IS_TRIVIAL && SeExprEdSpecYYLTYPE_IS_TRIVIAL - = { 1, 1, 1, 1 } -# endif -; - - -/* Number of syntax errors so far. */ -int SeExprEdSpecnerrs; - - -/*----------. -| SeExprEdSpecparse. | -`----------*/ - -#ifdef SeExprEdSpecYYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -SeExprEdSpecparse (void *SeExprEdSpecYYPARSE_PARAM) -#else -int -SeExprEdSpecparse (SeExprEdSpecYYPARSE_PARAM) - void *SeExprEdSpecYYPARSE_PARAM; -#endif -#else /* ! SeExprEdSpecYYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -SeExprEdSpecparse (void) -#else -int -SeExprEdSpecparse () - -#endif -#endif -{ - int SeExprEdSpecstate; - /* Number of tokens to shift before error messages enabled. */ - int SeExprEdSpecerrstatus; - - /* The stacks and their tools: - `SeExprEdSpecss': related to states. - `SeExprEdSpecvs': related to semantic values. - `SeExprEdSpecls': related to locations. - - Refer to the stacks through separate pointers, to allow SeExprEdSpecoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - SeExprEdSpectype_int16 SeExprEdSpecssa[SeExprEdSpecYYINITDEPTH]; - SeExprEdSpectype_int16 *SeExprEdSpecss; - SeExprEdSpectype_int16 *SeExprEdSpecssp; - - /* The semantic value stack. */ - SeExprEdSpecYYSTYPE SeExprEdSpecvsa[SeExprEdSpecYYINITDEPTH]; - SeExprEdSpecYYSTYPE *SeExprEdSpecvs; - SeExprEdSpecYYSTYPE *SeExprEdSpecvsp; - - /* The location stack. */ - SeExprEdSpecYYLTYPE SeExprEdSpeclsa[SeExprEdSpecYYINITDEPTH]; - SeExprEdSpecYYLTYPE *SeExprEdSpecls; - SeExprEdSpecYYLTYPE *SeExprEdSpeclsp; - - /* The locations where the error started and ended. */ - SeExprEdSpecYYLTYPE SeExprEdSpecerror_range[3]; - - SeExprEdSpecYYSIZE_T SeExprEdSpecstacksize; - - int SeExprEdSpecn; - int SeExprEdSpecresult; - /* Lookahead token as an internal (translated) token number. */ - int SeExprEdSpectoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - SeExprEdSpecYYSTYPE SeExprEdSpecval; - SeExprEdSpecYYLTYPE SeExprEdSpecloc; - -#if SeExprEdSpecYYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char SeExprEdSpecmsgbuf[128]; - char *SeExprEdSpecmsg = SeExprEdSpecmsgbuf; - SeExprEdSpecYYSIZE_T SeExprEdSpecmsg_alloc = sizeof SeExprEdSpecmsgbuf; -#endif - -#define SeExprEdSpecYYPOPSTACK(N) (SeExprEdSpecvsp -= (N), SeExprEdSpecssp -= (N), SeExprEdSpeclsp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int SeExprEdSpeclen = 0; - - SeExprEdSpecssp = SeExprEdSpecss = SeExprEdSpecssa; - SeExprEdSpecvsp = SeExprEdSpecvs = SeExprEdSpecvsa; - SeExprEdSpeclsp = SeExprEdSpecls = SeExprEdSpeclsa; - SeExprEdSpecstacksize = SeExprEdSpecYYINITDEPTH; - - SeExprEdSpecYYDPRINTF ((stderr, "Starting parse\n")); - - SeExprEdSpecstate = 0; - SeExprEdSpecerrstatus = 0; - SeExprEdSpecnerrs = 0; - SeExprEdSpecchar = SeExprEdSpecYYEMPTY; /* Cause a token to be read. */ - SeExprEdSpeclsp[0] = SeExprEdSpeclloc; - goto SeExprEdSpecsetstate; - -/*------------------------------------------------------------. -| SeExprEdSpecnewstate -- Push a new state, which is found in SeExprEdSpecstate. | -`------------------------------------------------------------*/ - SeExprEdSpecnewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - SeExprEdSpecssp++; - - SeExprEdSpecsetstate: - *SeExprEdSpecssp = SeExprEdSpecstate; - - if (SeExprEdSpecss + SeExprEdSpecstacksize - 1 <= SeExprEdSpecssp) - { - /* Get the current used size of the three stacks, in elements. */ - SeExprEdSpecYYSIZE_T SeExprEdSpecsize = SeExprEdSpecssp - SeExprEdSpecss + 1; - -#ifdef SeExprEdSpecoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - SeExprEdSpecYYSTYPE *SeExprEdSpecvs1 = SeExprEdSpecvs; - SeExprEdSpectype_int16 *SeExprEdSpecss1 = SeExprEdSpecss; - SeExprEdSpecYYLTYPE *SeExprEdSpecls1 = SeExprEdSpecls; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if SeExprEdSpecoverflow is a macro. */ - SeExprEdSpecoverflow (SeExprEdSpecYY_("memory exhausted"), - &SeExprEdSpecss1, SeExprEdSpecsize * sizeof (*SeExprEdSpecssp), - &SeExprEdSpecvs1, SeExprEdSpecsize * sizeof (*SeExprEdSpecvsp), - &SeExprEdSpecls1, SeExprEdSpecsize * sizeof (*SeExprEdSpeclsp), - &SeExprEdSpecstacksize); - - SeExprEdSpecls = SeExprEdSpecls1; - SeExprEdSpecss = SeExprEdSpecss1; - SeExprEdSpecvs = SeExprEdSpecvs1; - } -#else /* no SeExprEdSpecoverflow */ -# ifndef SeExprEdSpecYYSTACK_RELOCATE - goto SeExprEdSpecexhaustedlab; -# else - /* Extend the stack our own way. */ - if (SeExprEdSpecYYMAXDEPTH <= SeExprEdSpecstacksize) - goto SeExprEdSpecexhaustedlab; - SeExprEdSpecstacksize *= 2; - if (SeExprEdSpecYYMAXDEPTH < SeExprEdSpecstacksize) - SeExprEdSpecstacksize = SeExprEdSpecYYMAXDEPTH; - - { - SeExprEdSpectype_int16 *SeExprEdSpecss1 = SeExprEdSpecss; - union SeExprEdSpecalloc *SeExprEdSpecptr = - (union SeExprEdSpecalloc *) SeExprEdSpecYYSTACK_ALLOC (SeExprEdSpecYYSTACK_BYTES (SeExprEdSpecstacksize)); - if (! SeExprEdSpecptr) - goto SeExprEdSpecexhaustedlab; - SeExprEdSpecYYSTACK_RELOCATE (SeExprEdSpecss_alloc, SeExprEdSpecss); - SeExprEdSpecYYSTACK_RELOCATE (SeExprEdSpecvs_alloc, SeExprEdSpecvs); - SeExprEdSpecYYSTACK_RELOCATE (SeExprEdSpecls_alloc, SeExprEdSpecls); -# undef SeExprEdSpecYYSTACK_RELOCATE - if (SeExprEdSpecss1 != SeExprEdSpecssa) - SeExprEdSpecYYSTACK_FREE (SeExprEdSpecss1); - } -# endif -#endif /* no SeExprEdSpecoverflow */ - - SeExprEdSpecssp = SeExprEdSpecss + SeExprEdSpecsize - 1; - SeExprEdSpecvsp = SeExprEdSpecvs + SeExprEdSpecsize - 1; - SeExprEdSpeclsp = SeExprEdSpecls + SeExprEdSpecsize - 1; - - SeExprEdSpecYYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) SeExprEdSpecstacksize)); - - if (SeExprEdSpecss + SeExprEdSpecstacksize - 1 <= SeExprEdSpecssp) - SeExprEdSpecYYABORT; - } - - SeExprEdSpecYYDPRINTF ((stderr, "Entering state %d\n", SeExprEdSpecstate)); - - if (SeExprEdSpecstate == SeExprEdSpecYYFINAL) - SeExprEdSpecYYACCEPT; - - goto SeExprEdSpecbackup; - -/*-----------. -| SeExprEdSpecbackup. | -`-----------*/ -SeExprEdSpecbackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - SeExprEdSpecn = SeExprEdSpecpact[SeExprEdSpecstate]; - if (SeExprEdSpecpact_value_is_default (SeExprEdSpecn)) - goto SeExprEdSpecdefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* SeExprEdSpecYYCHAR is either SeExprEdSpecYYEMPTY or SeExprEdSpecYYEOF or a valid lookahead symbol. */ - if (SeExprEdSpecchar == SeExprEdSpecYYEMPTY) - { - SeExprEdSpecYYDPRINTF ((stderr, "Reading a token: ")); - SeExprEdSpecchar = SeExprEdSpecYYLEX; - } - - if (SeExprEdSpecchar <= SeExprEdSpecYYEOF) - { - SeExprEdSpecchar = SeExprEdSpectoken = SeExprEdSpecYYEOF; - SeExprEdSpecYYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - SeExprEdSpectoken = SeExprEdSpecYYTRANSLATE (SeExprEdSpecchar); - SeExprEdSpecYY_SYMBOL_PRINT ("Next token is", SeExprEdSpectoken, &SeExprEdSpeclval, &SeExprEdSpeclloc); - } - - /* If the proper action on seeing token SeExprEdSpecYYTOKEN is to reduce or to - detect an error, take that action. */ - SeExprEdSpecn += SeExprEdSpectoken; - if (SeExprEdSpecn < 0 || SeExprEdSpecYYLAST < SeExprEdSpecn || SeExprEdSpeccheck[SeExprEdSpecn] != SeExprEdSpectoken) - goto SeExprEdSpecdefault; - SeExprEdSpecn = SeExprEdSpectable[SeExprEdSpecn]; - if (SeExprEdSpecn <= 0) - { - if (SeExprEdSpectable_value_is_error (SeExprEdSpecn)) - goto SeExprEdSpecerrlab; - SeExprEdSpecn = -SeExprEdSpecn; - goto SeExprEdSpecreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (SeExprEdSpecerrstatus) - SeExprEdSpecerrstatus--; - - /* Shift the lookahead token. */ - SeExprEdSpecYY_SYMBOL_PRINT ("Shifting", SeExprEdSpectoken, &SeExprEdSpeclval, &SeExprEdSpeclloc); - - /* Discard the shifted token. */ - SeExprEdSpecchar = SeExprEdSpecYYEMPTY; - - SeExprEdSpecstate = SeExprEdSpecn; - SeExprEdSpecYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++SeExprEdSpecvsp = SeExprEdSpeclval; - SeExprEdSpecYY_IGNORE_MAYBE_UNINITIALIZED_END - *++SeExprEdSpeclsp = SeExprEdSpeclloc; - goto SeExprEdSpecnewstate; - - -/*-----------------------------------------------------------. -| SeExprEdSpecdefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -SeExprEdSpecdefault: - SeExprEdSpecn = SeExprEdSpecdefact[SeExprEdSpecstate]; - if (SeExprEdSpecn == 0) - goto SeExprEdSpecerrlab; - goto SeExprEdSpecreduce; - - -/*-----------------------------. -| SeExprEdSpecreduce -- Do a reduction. | -`-----------------------------*/ -SeExprEdSpecreduce: - /* SeExprEdSpecn is the number of a rule to reduce with. */ - SeExprEdSpeclen = SeExprEdSpecr2[SeExprEdSpecn]; - - /* If SeExprEdSpecYYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets SeExprEdSpecYYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to SeExprEdSpecYYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that SeExprEdSpecYYVAL may be used uninitialized. */ - SeExprEdSpecval = SeExprEdSpecvsp[1-SeExprEdSpeclen]; - - /* Default location. */ - SeExprEdSpecYYLLOC_DEFAULT (SeExprEdSpecloc, (SeExprEdSpeclsp - SeExprEdSpeclen), SeExprEdSpeclen); - SeExprEdSpecYY_REDUCE_PRINT (SeExprEdSpecn); - switch (SeExprEdSpecn) - { - case 2: -/* Line 1792 of yacc.c */ -#line 313 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { ParseResult = 0; } - break; - - case 3: -/* Line 1792 of yacc.c */ -#line 314 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { ParseResult = 0; } - break; - - case 4: -/* Line 1792 of yacc.c */ -#line 319 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 5: -/* Line 1792 of yacc.c */ -#line 320 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 6: -/* Line 1792 of yacc.c */ -#line 324 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 7: -/* Line 1792 of yacc.c */ -#line 325 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 8: -/* Line 1792 of yacc.c */ -#line 330 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 9: -/* Line 1792 of yacc.c */ -#line 331 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { - specRegisterVariable((SeExprEdSpecvsp[(1) - (4)].s)); - specRegisterEditable((SeExprEdSpecvsp[(1) - (4)].s),(SeExprEdSpecvsp[(3) - (4)].n)); - } - break; - - case 10: -/* Line 1792 of yacc.c */ -#line 335 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 11: -/* Line 1792 of yacc.c */ -#line 336 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 12: -/* Line 1792 of yacc.c */ -#line 337 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 13: -/* Line 1792 of yacc.c */ -#line 338 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 14: -/* Line 1792 of yacc.c */ -#line 339 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 15: -/* Line 1792 of yacc.c */ -#line 340 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 16: -/* Line 1792 of yacc.c */ -#line 341 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { - specRegisterVariable((SeExprEdSpecvsp[(1) - (4)].s)); - specRegisterEditable((SeExprEdSpecvsp[(1) - (4)].s),(SeExprEdSpecvsp[(3) - (4)].n)); - } - break; - - case 17: -/* Line 1792 of yacc.c */ -#line 345 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 18: -/* Line 1792 of yacc.c */ -#line 346 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 19: -/* Line 1792 of yacc.c */ -#line 347 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 20: -/* Line 1792 of yacc.c */ -#line 348 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 21: -/* Line 1792 of yacc.c */ -#line 349 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 22: -/* Line 1792 of yacc.c */ -#line 350 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 23: -/* Line 1792 of yacc.c */ -#line 355 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 24: -/* Line 1792 of yacc.c */ -#line 359 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 25: -/* Line 1792 of yacc.c */ -#line 360 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0;} - break; - - case 26: -/* Line 1792 of yacc.c */ -#line 361 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0;} - break; - - case 27: -/* Line 1792 of yacc.c */ -#line 366 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 28: -/* Line 1792 of yacc.c */ -#line 367 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { - if(SPEC_IS_NUMBER((SeExprEdSpecvsp[(2) - (7)].n)) && SPEC_IS_NUMBER((SeExprEdSpecvsp[(4) - (7)].n)) && SPEC_IS_NUMBER((SeExprEdSpecvsp[(6) - (7)].n))){ - (SeExprEdSpecval.n)=remember(new SeExprSpecVectorNode((SeExprEdSpecloc).first_column,(SeExprEdSpecloc).last_column,(SeExprEdSpecvsp[(2) - (7)].n),(SeExprEdSpecvsp[(4) - (7)].n),(SeExprEdSpecvsp[(6) - (7)].n))); - }else (SeExprEdSpecval.n)=0; - } - break; - - case 29: -/* Line 1792 of yacc.c */ -#line 372 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 30: -/* Line 1792 of yacc.c */ -#line 373 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 31: -/* Line 1792 of yacc.c */ -#line 374 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 32: -/* Line 1792 of yacc.c */ -#line 375 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 33: -/* Line 1792 of yacc.c */ -#line 376 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 34: -/* Line 1792 of yacc.c */ -#line 377 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 35: -/* Line 1792 of yacc.c */ -#line 378 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 36: -/* Line 1792 of yacc.c */ -#line 379 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 37: -/* Line 1792 of yacc.c */ -#line 380 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 38: -/* Line 1792 of yacc.c */ -#line 381 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 39: -/* Line 1792 of yacc.c */ -#line 382 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = (SeExprEdSpecvsp[(2) - (2)].n); } - break; - - case 40: -/* Line 1792 of yacc.c */ -#line 383 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { - if(SPEC_IS_NUMBER((SeExprEdSpecvsp[(2) - (2)].n))){ - SeExprSpecScalarNode* node=(SeExprSpecScalarNode*)(SeExprEdSpecvsp[(2) - (2)].n); - node->v*=-1; - node->startPos=(SeExprEdSpecloc).first_column; - node->endPos=(SeExprEdSpecloc).last_column; - (SeExprEdSpecval.n)=(SeExprEdSpecvsp[(2) - (2)].n); - }else (SeExprEdSpecval.n)=0; - } - break; - - case 41: -/* Line 1792 of yacc.c */ -#line 392 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 42: -/* Line 1792 of yacc.c */ -#line 393 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 43: -/* Line 1792 of yacc.c */ -#line 394 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 44: -/* Line 1792 of yacc.c */ -#line 395 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 45: -/* Line 1792 of yacc.c */ -#line 396 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 46: -/* Line 1792 of yacc.c */ -#line 397 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 47: -/* Line 1792 of yacc.c */ -#line 398 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 48: -/* Line 1792 of yacc.c */ -#line 399 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 49: -/* Line 1792 of yacc.c */ -#line 400 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { - if((SeExprEdSpecvsp[(3) - (4)].n) && strcmp((SeExprEdSpecvsp[(1) - (4)].s),"curve")==0){ - (SeExprEdSpecval.n)=remember(new SeExprSpecCurveNode((SeExprEdSpecvsp[(3) - (4)].n))); - }else if((SeExprEdSpecvsp[(3) - (4)].n) && strcmp((SeExprEdSpecvsp[(1) - (4)].s),"ccurve")==0){ - (SeExprEdSpecval.n)=remember(new SeExprSpecCCurveNode((SeExprEdSpecvsp[(3) - (4)].n))); - }else if((SeExprEdSpecvsp[(3) - (4)].n) && strcmp((SeExprEdSpecvsp[(1) - (4)].s),"swatch")==0){ - (SeExprEdSpecval.n)=remember(new SeExprSpecColorSwatchNode((SeExprEdSpecvsp[(3) - (4)].n))); - }else if((SeExprEdSpecvsp[(3) - (4)].n) && strcmp((SeExprEdSpecvsp[(1) - (4)].s),"animCurve")==0){ - (SeExprEdSpecval.n)=remember(new SeExprSpecAnimCurveNode((SeExprEdSpecvsp[(3) - (4)].n))); - }else if((SeExprEdSpecvsp[(3) - (4)].n) && strcmp((SeExprEdSpecvsp[(1) - (4)].s),"deepWater")==0){ - (SeExprEdSpecval.n)=remember(new SeExprSpecDeepWaterNode((SeExprEdSpecvsp[(3) - (4)].n))); - }else if((SeExprEdSpecvsp[(3) - (4)].n)){ - // function arguments not parse of curve, ccurve, or animCurve - // check if there are any string args that need to be made into controls - // but be sure to return 0 as this parseable - if(SeExprSpecListNode* list=dynamic_cast((SeExprEdSpecvsp[(3) - (4)].n))){ - for(size_t i=0;inodes.size();i++){ - if(SeExprSpecStringNode* str=dynamic_cast(list->nodes[i])){ - specRegisterEditable("",str); - } - } - } - (SeExprEdSpecval.n)=0; - }else (SeExprEdSpecval.n)=0; - } - break; - - case 50: -/* Line 1792 of yacc.c */ -#line 425 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - {(SeExprEdSpecval.n) = 0; } - break; - - case 51: -/* Line 1792 of yacc.c */ -#line 426 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 52: -/* Line 1792 of yacc.c */ -#line 427 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0; } - break; - - case 53: -/* Line 1792 of yacc.c */ -#line 428 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n)=remember(new SeExprSpecScalarNode((SeExprEdSpecloc).first_column,(SeExprEdSpecloc).last_column,(SeExprEdSpecvsp[(1) - (1)].d))); } - break; - - case 54: -/* Line 1792 of yacc.c */ -#line 433 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = 0;} - break; - - case 55: -/* Line 1792 of yacc.c */ -#line 434 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = (SeExprEdSpecvsp[(1) - (1)].n);} - break; - - case 56: -/* Line 1792 of yacc.c */ -#line 439 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { - // ignore first argument unless it is a string (because we parse strings in weird ways) - SeExprSpecListNode* list=new SeExprSpecListNode((SeExprEdSpecloc).last_column,(SeExprEdSpecloc).last_column); - if((SeExprEdSpecvsp[(1) - (1)].n) && SPEC_IS_STR((SeExprEdSpecvsp[(1) - (1)].n))){ - list->add((SeExprEdSpecvsp[(1) - (1)].n)); - } - remember(list); - (SeExprEdSpecval.n)=list; - } - break; - - case 57: -/* Line 1792 of yacc.c */ -#line 448 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { - - if((SeExprEdSpecvsp[(1) - (3)].n) && (SeExprEdSpecvsp[(3) - (3)].n) && ((SPEC_IS_NUMBER((SeExprEdSpecvsp[(3) - (3)].n)) || SPEC_IS_VECTOR((SeExprEdSpecvsp[(3) - (3)].n)) || SPEC_IS_STR((SeExprEdSpecvsp[(3) - (3)].n))))){ - (SeExprEdSpecval.n)=(SeExprEdSpecvsp[(1) - (3)].n); - dynamic_cast((SeExprEdSpecvsp[(1) - (3)].n))->add((SeExprEdSpecvsp[(3) - (3)].n)); - }else{ - (SeExprEdSpecval.n)=0; - } - } - break; - - case 58: -/* Line 1792 of yacc.c */ -#line 460 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { (SeExprEdSpecval.n) = (SeExprEdSpecvsp[(1) - (1)].n);} - break; - - case 59: -/* Line 1792 of yacc.c */ -#line 461 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - { - SeExprSpecStringNode* str=new SeExprSpecStringNode((SeExprEdSpecloc).first_column,(SeExprEdSpecloc).last_column,(SeExprEdSpecvsp[(1) - (1)].s)); - //specRegisterEditable("",str); - // TODO: move string stuff out - (SeExprEdSpecval.n) = remember(str); - } - break; - - -/* Line 1792 of yacc.c */ -#line 2391 "y.tab.c" - default: break; - } - /* User semantic actions sometimes alter SeExprEdSpecchar, and that requires - that SeExprEdSpectoken be updated with the new translation. We take the - approach of translating immediately before every use of SeExprEdSpectoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - SeExprEdSpecYYABORT, SeExprEdSpecYYACCEPT, or SeExprEdSpecYYERROR immediately after altering SeExprEdSpecchar or - if it invokes SeExprEdSpecYYBACKUP. In the case of SeExprEdSpecYYABORT or SeExprEdSpecYYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of SeExprEdSpecYYERROR or SeExprEdSpecYYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - SeExprEdSpecYY_SYMBOL_PRINT ("-> $$ =", SeExprEdSpecr1[SeExprEdSpecn], &SeExprEdSpecval, &SeExprEdSpecloc); - - SeExprEdSpecYYPOPSTACK (SeExprEdSpeclen); - SeExprEdSpeclen = 0; - SeExprEdSpecYY_STACK_PRINT (SeExprEdSpecss, SeExprEdSpecssp); - - *++SeExprEdSpecvsp = SeExprEdSpecval; - *++SeExprEdSpeclsp = SeExprEdSpecloc; - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - SeExprEdSpecn = SeExprEdSpecr1[SeExprEdSpecn]; - - SeExprEdSpecstate = SeExprEdSpecpgoto[SeExprEdSpecn - SeExprEdSpecYYNTOKENS] + *SeExprEdSpecssp; - if (0 <= SeExprEdSpecstate && SeExprEdSpecstate <= SeExprEdSpecYYLAST && SeExprEdSpeccheck[SeExprEdSpecstate] == *SeExprEdSpecssp) - SeExprEdSpecstate = SeExprEdSpectable[SeExprEdSpecstate]; - else - SeExprEdSpecstate = SeExprEdSpecdefgoto[SeExprEdSpecn - SeExprEdSpecYYNTOKENS]; - - goto SeExprEdSpecnewstate; - - -/*------------------------------------. -| SeExprEdSpecerrlab -- here on detecting error | -`------------------------------------*/ -SeExprEdSpecerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - SeExprEdSpectoken = SeExprEdSpecchar == SeExprEdSpecYYEMPTY ? SeExprEdSpecYYEMPTY : SeExprEdSpecYYTRANSLATE (SeExprEdSpecchar); - - /* If not already recovering from an error, report this error. */ - if (!SeExprEdSpecerrstatus) - { - ++SeExprEdSpecnerrs; -#if ! SeExprEdSpecYYERROR_VERBOSE - SeExprEdSpecerror (SeExprEdSpecYY_("syntax error")); -#else -# define SeExprEdSpecYYSYNTAX_ERROR SeExprEdSpecsyntax_error (&SeExprEdSpecmsg_alloc, &SeExprEdSpecmsg, \ - SeExprEdSpecssp, SeExprEdSpectoken) - { - char const *SeExprEdSpecmsgp = SeExprEdSpecYY_("syntax error"); - int SeExprEdSpecsyntax_error_status; - SeExprEdSpecsyntax_error_status = SeExprEdSpecYYSYNTAX_ERROR; - if (SeExprEdSpecsyntax_error_status == 0) - SeExprEdSpecmsgp = SeExprEdSpecmsg; - else if (SeExprEdSpecsyntax_error_status == 1) - { - if (SeExprEdSpecmsg != SeExprEdSpecmsgbuf) - SeExprEdSpecYYSTACK_FREE (SeExprEdSpecmsg); - SeExprEdSpecmsg = (char *) SeExprEdSpecYYSTACK_ALLOC (SeExprEdSpecmsg_alloc); - if (!SeExprEdSpecmsg) - { - SeExprEdSpecmsg = SeExprEdSpecmsgbuf; - SeExprEdSpecmsg_alloc = sizeof SeExprEdSpecmsgbuf; - SeExprEdSpecsyntax_error_status = 2; - } - else - { - SeExprEdSpecsyntax_error_status = SeExprEdSpecYYSYNTAX_ERROR; - SeExprEdSpecmsgp = SeExprEdSpecmsg; - } - } - SeExprEdSpecerror (SeExprEdSpecmsgp); - if (SeExprEdSpecsyntax_error_status == 2) - goto SeExprEdSpecexhaustedlab; - } -# undef SeExprEdSpecYYSYNTAX_ERROR -#endif - } - - SeExprEdSpecerror_range[1] = SeExprEdSpeclloc; - - if (SeExprEdSpecerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (SeExprEdSpecchar <= SeExprEdSpecYYEOF) - { - /* Return failure if at end of input. */ - if (SeExprEdSpecchar == SeExprEdSpecYYEOF) - SeExprEdSpecYYABORT; - } - else - { - SeExprEdSpecdestruct ("Error: discarding", - SeExprEdSpectoken, &SeExprEdSpeclval, &SeExprEdSpeclloc); - SeExprEdSpecchar = SeExprEdSpecYYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto SeExprEdSpecerrlab1; - - -/*---------------------------------------------------. -| SeExprEdSpecerrorlab -- error raised explicitly by SeExprEdSpecYYERROR. | -`---------------------------------------------------*/ -SeExprEdSpecerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - SeExprEdSpecYYERROR and the label SeExprEdSpecerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto SeExprEdSpecerrorlab; - - SeExprEdSpecerror_range[1] = SeExprEdSpeclsp[1-SeExprEdSpeclen]; - /* Do not reclaim the symbols of the rule which action triggered - this SeExprEdSpecYYERROR. */ - SeExprEdSpecYYPOPSTACK (SeExprEdSpeclen); - SeExprEdSpeclen = 0; - SeExprEdSpecYY_STACK_PRINT (SeExprEdSpecss, SeExprEdSpecssp); - SeExprEdSpecstate = *SeExprEdSpecssp; - goto SeExprEdSpecerrlab1; - - -/*-------------------------------------------------------------. -| SeExprEdSpecerrlab1 -- common code for both syntax error and SeExprEdSpecYYERROR. | -`-------------------------------------------------------------*/ -SeExprEdSpecerrlab1: - SeExprEdSpecerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - SeExprEdSpecn = SeExprEdSpecpact[SeExprEdSpecstate]; - if (!SeExprEdSpecpact_value_is_default (SeExprEdSpecn)) - { - SeExprEdSpecn += SeExprEdSpecYYTERROR; - if (0 <= SeExprEdSpecn && SeExprEdSpecn <= SeExprEdSpecYYLAST && SeExprEdSpeccheck[SeExprEdSpecn] == SeExprEdSpecYYTERROR) - { - SeExprEdSpecn = SeExprEdSpectable[SeExprEdSpecn]; - if (0 < SeExprEdSpecn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (SeExprEdSpecssp == SeExprEdSpecss) - SeExprEdSpecYYABORT; - - SeExprEdSpecerror_range[1] = *SeExprEdSpeclsp; - SeExprEdSpecdestruct ("Error: popping", - SeExprEdSpecstos[SeExprEdSpecstate], SeExprEdSpecvsp, SeExprEdSpeclsp); - SeExprEdSpecYYPOPSTACK (1); - SeExprEdSpecstate = *SeExprEdSpecssp; - SeExprEdSpecYY_STACK_PRINT (SeExprEdSpecss, SeExprEdSpecssp); - } - - SeExprEdSpecYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++SeExprEdSpecvsp = SeExprEdSpeclval; - SeExprEdSpecYY_IGNORE_MAYBE_UNINITIALIZED_END - - SeExprEdSpecerror_range[2] = SeExprEdSpeclloc; - /* Using SeExprEdSpecYYLLOC is tempting, but would change the location of - the lookahead. SeExprEdSpecYYLOC is available though. */ - SeExprEdSpecYYLLOC_DEFAULT (SeExprEdSpecloc, SeExprEdSpecerror_range, 2); - *++SeExprEdSpeclsp = SeExprEdSpecloc; - - /* Shift the error token. */ - SeExprEdSpecYY_SYMBOL_PRINT ("Shifting", SeExprEdSpecstos[SeExprEdSpecn], SeExprEdSpecvsp, SeExprEdSpeclsp); - - SeExprEdSpecstate = SeExprEdSpecn; - goto SeExprEdSpecnewstate; - - -/*-------------------------------------. -| SeExprEdSpecacceptlab -- SeExprEdSpecYYACCEPT comes here. | -`-------------------------------------*/ -SeExprEdSpecacceptlab: - SeExprEdSpecresult = 0; - goto SeExprEdSpecreturn; - -/*-----------------------------------. -| SeExprEdSpecabortlab -- SeExprEdSpecYYABORT comes here. | -`-----------------------------------*/ -SeExprEdSpecabortlab: - SeExprEdSpecresult = 1; - goto SeExprEdSpecreturn; - -#if !defined SeExprEdSpecoverflow || SeExprEdSpecYYERROR_VERBOSE -/*-------------------------------------------------. -| SeExprEdSpecexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -SeExprEdSpecexhaustedlab: - SeExprEdSpecerror (SeExprEdSpecYY_("memory exhausted")); - SeExprEdSpecresult = 2; - /* Fall through. */ -#endif - -SeExprEdSpecreturn: - if (SeExprEdSpecchar != SeExprEdSpecYYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - SeExprEdSpectoken = SeExprEdSpecYYTRANSLATE (SeExprEdSpecchar); - SeExprEdSpecdestruct ("Cleanup: discarding lookahead", - SeExprEdSpectoken, &SeExprEdSpeclval, &SeExprEdSpeclloc); - } - /* Do not reclaim the symbols of the rule which action triggered - this SeExprEdSpecYYABORT or SeExprEdSpecYYACCEPT. */ - SeExprEdSpecYYPOPSTACK (SeExprEdSpeclen); - SeExprEdSpecYY_STACK_PRINT (SeExprEdSpecss, SeExprEdSpecssp); - while (SeExprEdSpecssp != SeExprEdSpecss) - { - SeExprEdSpecdestruct ("Cleanup: popping", - SeExprEdSpecstos[*SeExprEdSpecssp], SeExprEdSpecvsp, SeExprEdSpeclsp); - SeExprEdSpecYYPOPSTACK (1); - } -#ifndef SeExprEdSpecoverflow - if (SeExprEdSpecss != SeExprEdSpecssa) - SeExprEdSpecYYSTACK_FREE (SeExprEdSpecss); -#endif -#if SeExprEdSpecYYERROR_VERBOSE - if (SeExprEdSpecmsg != SeExprEdSpecmsgbuf) - SeExprEdSpecYYSTACK_FREE (SeExprEdSpecmsg); -#endif - /* Make sure SeExprEdSpecYYID is used. */ - return SeExprEdSpecYYID (SeExprEdSpecresult); -} - - -/* Line 2055 of yacc.c */ -#line 469 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParser.y" - - -/* SeExprEdSpecerror - Report an error. This is called by the parser. -(Note: the "msg" param is useless as it is usually just "sparse error". -so it's ignored.) -*/ -static void SeExprEdSpecerror(const char* /*msg*/) -{ - // find start of line containing error - int pos = SeExprEdSpecpos(), lineno = 1, start = 0, end = strlen(ParseStr); - bool multiline = 0; - for (int i = start; i < pos; i++) - if (ParseStr[i] == '\n') { start = i + 1; lineno++; multiline=1; } - - // find end of line containing error - for (int i = end; i > pos; i--) - if (ParseStr[i] == '\n') { end = i - 1; multiline=1; } - - ParseError = SeExprEdSpectext[0] ? "Syntax error" : "Unexpected end of expression"; - if (multiline) { - char buff[30]; - snprintf(buff, 30, " at line %d", lineno); - ParseError += buff; - } - if (SeExprEdSpectext[0]) { - ParseError += " near '"; - ParseError += SeExprEdSpectext; - } - ParseError += "':\n "; - - int s = std::max(start, pos-30); - int e = std::min(end, pos+30); - - if (s != start) ParseError += "..."; - ParseError += std::string(ParseStr, s, e-s+1); - if (e != end) ParseError += "..."; -} - -extern void specResetCounters(std::vector >& comments); - - -/* CallParser - This is our entrypoint from the rest of the expr library. - A string is passed in and a parse tree is returned. If the tree is null, - an error string is returned. Any flags set during parsing are passed - along. - */ - -static SeExprInternal::Mutex mutex; - -/// Main entry point to parser -bool SeExprSpecParse(std::vector& outputEditables, - std::vector& outputVariables, - std::vector >& comments, - const char* str) -{ - SeExprInternal::AutoMutex locker(mutex); - - /// Make inputs/outputs accessible to parser actions - editables=&outputEditables; - variables=&outputVariables; - ParseStr=str; - - // setup and startup parser - specResetCounters(comments); // reset lineNumber and columnNumber in scanner - SeExprEdSpec_buffer_state* buffer = SeExprEdSpec_scan_string(str); // setup lexer - ParseResult = 0; - int resultCode = SeExprEdSpecparse(); // parser (don't care if it is a parse error) - UNUSED(resultCode); - SeExprEdSpec_delete_buffer(buffer); - - // delete temporary data -- specs(mini parse tree) and tokens(strings)! - for(size_t i=0;i 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define SeExprEdSpecYY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define SeExprEdSpecYY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef SeExprEdSpecYY_USE_CONST -#define SeExprEdSpecconst const -#else -#define SeExprEdSpecconst -#endif - -/* Returned upon end-of-file. */ -#define SeExprEdSpecYY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define SeExprEdSpecYY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (SeExprEdSpec_start) = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The SeExprEdSpecYYSTATE alias is for lex - * compatibility. - */ -#define SeExprEdSpecYY_START (((SeExprEdSpec_start) - 1) / 2) -#define SeExprEdSpecYYSTATE SeExprEdSpecYY_START - -/* Action number for EOF rule of a given start state. */ -#define SeExprEdSpecYY_STATE_EOF(state) (SeExprEdSpecYY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define SeExprEdSpecYY_NEW_FILE SeExprEdSpecrestart(SeExprEdSpecin ) - -#define SeExprEdSpecYY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef SeExprEdSpecYY_BUF_SIZE -#define SeExprEdSpecYY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define SeExprEdSpecYY_STATE_BUF_SIZE ((SeExprEdSpecYY_BUF_SIZE + 2) * sizeof(SeExprEdSpec_state_type)) - -#ifndef SeExprEdSpecYY_TYPEDEF_SeExprEdSpecYY_BUFFER_STATE -#define SeExprEdSpecYY_TYPEDEF_SeExprEdSpecYY_BUFFER_STATE -typedef struct SeExprEdSpec_buffer_state *SeExprEdSpecYY_BUFFER_STATE; -#endif - -#ifndef SeExprEdSpecYY_TYPEDEF_SeExprEdSpecYY_SIZE_T -#define SeExprEdSpecYY_TYPEDEF_SeExprEdSpecYY_SIZE_T -typedef size_t SeExprEdSpec_size_t; -#endif - -extern SeExprEdSpec_size_t SeExprEdSpecleng; - -extern FILE *SeExprEdSpecin, *SeExprEdSpecout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define SeExprEdSpecYY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define SeExprEdSpecless(n) \ - do \ - { \ - /* Undo effects of setting up SeExprEdSpectext. */ \ - int SeExprEdSpecless_macro_arg = (n); \ - SeExprEdSpecYY_LESS_LINENO(SeExprEdSpecless_macro_arg);\ - *SeExprEdSpec_cp = (SeExprEdSpec_hold_char); \ - SeExprEdSpecYY_RESTORE_SeExprEdSpecYY_MORE_OFFSET \ - (SeExprEdSpec_c_buf_p) = SeExprEdSpec_cp = SeExprEdSpec_bp + SeExprEdSpecless_macro_arg - SeExprEdSpecYY_MORE_ADJ; \ - SeExprEdSpecYY_DO_BEFORE_ACTION; /* set up SeExprEdSpectext again */ \ - } \ - while ( 0 ) - -#define unput(c) SeExprEdSpecunput( c, (SeExprEdSpectext_ptr) ) - -#ifndef SeExprEdSpecYY_STRUCT_SeExprEdSpecYY_BUFFER_STATE -#define SeExprEdSpecYY_STRUCT_SeExprEdSpecYY_BUFFER_STATE -struct SeExprEdSpec_buffer_state - { - FILE *SeExprEdSpec_input_file; - - char *SeExprEdSpec_ch_buf; /* input buffer */ - char *SeExprEdSpec_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - SeExprEdSpec_size_t SeExprEdSpec_buf_size; - - /* Number of characters read into SeExprEdSpec_ch_buf, not including EOB - * characters. - */ - SeExprEdSpec_size_t SeExprEdSpec_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int SeExprEdSpec_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int SeExprEdSpec_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int SeExprEdSpec_at_bol; - - int SeExprEdSpec_bs_lineno; /**< The line count. */ - int SeExprEdSpec_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int SeExprEdSpec_fill_buffer; - - int SeExprEdSpec_buffer_status; - -#define SeExprEdSpecYY_BUFFER_NEW 0 -#define SeExprEdSpecYY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as SeExprEdSpecYY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via SeExprEdSpecrestart()), so that the user can continue scanning by - * just pointing SeExprEdSpecin at a new input file. - */ -#define SeExprEdSpecYY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !SeExprEdSpecYY_STRUCT_SeExprEdSpecYY_BUFFER_STATE */ - -/* Stack of input buffers. */ -static size_t SeExprEdSpec_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t SeExprEdSpec_buffer_stack_max = 0; /**< capacity of stack. */ -static SeExprEdSpecYY_BUFFER_STATE * SeExprEdSpec_buffer_stack = 0; /**< Stack as an array. */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define SeExprEdSpecYY_CURRENT_BUFFER ( (SeExprEdSpec_buffer_stack) \ - ? (SeExprEdSpec_buffer_stack)[(SeExprEdSpec_buffer_stack_top)] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define SeExprEdSpecYY_CURRENT_BUFFER_LVALUE (SeExprEdSpec_buffer_stack)[(SeExprEdSpec_buffer_stack_top)] - -/* SeExprEdSpec_hold_char holds the character lost when SeExprEdSpectext is formed. */ -static char SeExprEdSpec_hold_char; -static SeExprEdSpec_size_t SeExprEdSpec_n_chars; /* number of characters read into SeExprEdSpec_ch_buf */ -SeExprEdSpec_size_t SeExprEdSpecleng; - -/* Points to current character in buffer. */ -static char *SeExprEdSpec_c_buf_p = (char *) 0; -static int SeExprEdSpec_init = 0; /* whether we need to initialize */ -static int SeExprEdSpec_start = 0; /* start state number */ - -/* Flag which is used to allow SeExprEdSpecwrap()'s to do buffer switches - * instead of setting up a fresh SeExprEdSpecin. A bit of a hack ... - */ -static int SeExprEdSpec_did_buffer_switch_on_eof; - -void SeExprEdSpecrestart (FILE *input_file ); -void SeExprEdSpec_switch_to_buffer (SeExprEdSpecYY_BUFFER_STATE new_buffer ); -SeExprEdSpecYY_BUFFER_STATE SeExprEdSpec_create_buffer (FILE *file,int size ); -void SeExprEdSpec_delete_buffer (SeExprEdSpecYY_BUFFER_STATE b ); -void SeExprEdSpec_flush_buffer (SeExprEdSpecYY_BUFFER_STATE b ); -void SeExprEdSpecpush_buffer_state (SeExprEdSpecYY_BUFFER_STATE new_buffer ); -void SeExprEdSpecpop_buffer_state (void ); - -static void SeExprEdSpecensure_buffer_stack (void ); -static void SeExprEdSpec_load_buffer_state (void ); -static void SeExprEdSpec_init_buffer (SeExprEdSpecYY_BUFFER_STATE b,FILE *file ); - -#define SeExprEdSpecYY_FLUSH_BUFFER SeExprEdSpec_flush_buffer(SeExprEdSpecYY_CURRENT_BUFFER ) - -SeExprEdSpecYY_BUFFER_STATE SeExprEdSpec_scan_buffer (char *base,SeExprEdSpec_size_t size ); -SeExprEdSpecYY_BUFFER_STATE SeExprEdSpec_scan_string (SeExprEdSpecconst char *SeExprEdSpec_str ); -SeExprEdSpecYY_BUFFER_STATE SeExprEdSpec_scan_bytes (SeExprEdSpecconst char *bytes,SeExprEdSpec_size_t len ); - -void *SeExprEdSpecalloc (SeExprEdSpec_size_t ); -void *SeExprEdSpecrealloc (void *,SeExprEdSpec_size_t ); -void SeExprEdSpecfree (void * ); - -#define SeExprEdSpec_new_buffer SeExprEdSpec_create_buffer - -#define SeExprEdSpec_set_interactive(is_interactive) \ - { \ - if ( ! SeExprEdSpecYY_CURRENT_BUFFER ){ \ - SeExprEdSpecensure_buffer_stack (); \ - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = \ - SeExprEdSpec_create_buffer(SeExprEdSpecin,SeExprEdSpecYY_BUF_SIZE ); \ - } \ - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_is_interactive = is_interactive; \ - } - -#define SeExprEdSpec_set_bol(at_bol) \ - { \ - if ( ! SeExprEdSpecYY_CURRENT_BUFFER ){\ - SeExprEdSpecensure_buffer_stack (); \ - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = \ - SeExprEdSpec_create_buffer(SeExprEdSpecin,SeExprEdSpecYY_BUF_SIZE ); \ - } \ - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_at_bol = at_bol; \ - } - -#define SeExprEdSpecYY_AT_BOL() (SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_at_bol) - -/* Begin user sect3 */ - -#define SeExprEdSpecwrap() 1 -#define SeExprEdSpecYY_SKIP_SeExprEdSpecYYWRAP - -typedef unsigned char SeExprEdSpecYY_CHAR; - -FILE *SeExprEdSpecin = (FILE *) 0, *SeExprEdSpecout = (FILE *) 0; - -typedef int SeExprEdSpec_state_type; - -extern int SeExprEdSpeclineno; - -int SeExprEdSpeclineno = 1; - -extern char *SeExprEdSpectext; -#define SeExprEdSpectext_ptr SeExprEdSpectext - -static SeExprEdSpec_state_type SeExprEdSpec_get_previous_state (void ); -static SeExprEdSpec_state_type SeExprEdSpec_try_NUL_trans (SeExprEdSpec_state_type current_state ); -static int SeExprEdSpec_get_next_buffer (void ); -static void SeExprEdSpec_fatal_error (SeExprEdSpecconst char msg[] ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up SeExprEdSpectext. - */ -#define SeExprEdSpecYY_DO_BEFORE_ACTION \ - (SeExprEdSpectext_ptr) = SeExprEdSpec_bp; \ - SeExprEdSpecleng = (size_t) (SeExprEdSpec_cp - SeExprEdSpec_bp); \ - (SeExprEdSpec_hold_char) = *SeExprEdSpec_cp; \ - *SeExprEdSpec_cp = '\0'; \ - (SeExprEdSpec_c_buf_p) = SeExprEdSpec_cp; - -#define SeExprEdSpecYY_NUM_RULES 34 -#define SeExprEdSpecYY_END_OF_BUFFER 35 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct SeExprEdSpec_trans_info - { - flex_int32_t SeExprEdSpec_verify; - flex_int32_t SeExprEdSpec_nxt; - }; -static SeExprEdSpecconst flex_int16_t SeExprEdSpec_accept[115] = - { 0, - 0, 0, 35, 33, 31, 31, 33, 33, 32, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 23, 33, - 33, 33, 28, 28, 18, 28, 33, 33, 28, 28, - 28, 28, 28, 28, 33, 7, 0, 24, 0, 32, - 0, 26, 15, 5, 0, 25, 0, 13, 11, 12, - 10, 23, 14, 23, 23, 0, 8, 6, 9, 28, - 28, 17, 29, 30, 16, 28, 28, 28, 2, 28, - 28, 4, 24, 26, 0, 25, 0, 23, 0, 0, - 23, 28, 22, 28, 28, 28, 28, 0, 0, 23, - 0, 0, 23, 28, 3, 28, 28, 28, 27, 0, - - 23, 28, 28, 28, 28, 27, 28, 28, 19, 20, - 1, 28, 21, 0 - } ; - -static SeExprEdSpecconst flex_int32_t SeExprEdSpec_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 4, 5, 6, 7, 8, 9, 10, 1, - 1, 11, 12, 1, 13, 14, 15, 16, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, - 21, 22, 1, 1, 23, 24, 23, 23, 25, 23, - 26, 23, 27, 23, 23, 23, 23, 28, 23, 29, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 1, 30, 1, 31, 23, 1, 32, 33, 23, 23, - - 34, 35, 36, 37, 38, 23, 23, 39, 40, 41, - 42, 23, 23, 43, 44, 45, 46, 23, 23, 47, - 23, 23, 1, 48, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static SeExprEdSpecconst flex_int32_t SeExprEdSpec_meta[49] = - { 0, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 3, 3, 4, 1, 1, - 1, 1, 5, 5, 5, 5, 5, 5, 5, 1, - 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 1 - } ; - -static SeExprEdSpecconst flex_int16_t SeExprEdSpec_base[123] = - { 0, - 0, 0, 193, 194, 194, 194, 171, 44, 161, 0, - 169, 180, 40, 167, 166, 30, 37, 165, 41, 164, - 163, 162, 0, 157, 0, 154, 15, 159, 137, 139, - 145, 141, 137, 134, 125, 194, 54, 194, 56, 142, - 130, 152, 194, 194, 52, 194, 53, 194, 194, 194, - 194, 51, 194, 55, 74, 80, 194, 194, 194, 0, - 143, 0, 194, 194, 194, 121, 123, 120, 0, 124, - 122, 194, 64, 145, 144, 68, 88, 86, 97, 48, - 90, 134, 0, 126, 115, 124, 115, 0, 99, 101, - 109, 107, 111, 127, 0, 105, 112, 94, 0, 113, - - 115, 118, 81, 69, 58, 0, 68, 49, 0, 0, - 194, 38, 0, 194, 132, 137, 72, 142, 145, 148, - 68, 151 - } ; - -static SeExprEdSpecconst flex_int16_t SeExprEdSpec_def[123] = - { 0, - 114, 1, 114, 114, 114, 114, 114, 115, 116, 117, - 114, 114, 118, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 119, 119, 119, 119, 114, 114, 119, 119, - 119, 119, 119, 119, 114, 114, 115, 114, 115, 116, - 116, 120, 114, 114, 118, 114, 118, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 119, - 119, 119, 114, 114, 114, 119, 119, 119, 119, 119, - 119, 114, 115, 120, 114, 118, 114, 114, 114, 114, - 114, 119, 119, 119, 119, 119, 119, 121, 114, 114, - 114, 114, 114, 119, 119, 119, 119, 119, 122, 114, - - 114, 119, 119, 119, 119, 122, 119, 119, 119, 119, - 114, 119, 119, 0, 114, 114, 114, 114, 114, 114, - 114, 114 - } ; - -static SeExprEdSpecconst flex_int16_t SeExprEdSpec_nxt[243] = - { 0, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 19, 4, 4, 20, - 21, 22, 23, 24, 25, 23, 23, 23, 26, 27, - 28, 23, 29, 30, 23, 31, 23, 32, 33, 23, - 23, 23, 23, 34, 23, 23, 23, 35, 38, 46, - 50, 51, 52, 52, 54, 63, 55, 55, 38, 64, - 73, 46, 76, 81, 81, 56, 52, 52, 38, 47, - 78, 78, 99, 39, 56, 77, 42, 46, 113, 79, - 112, 47, 47, 39, 77, 39, 111, 54, 79, 55, - 55, 80, 80, 39, 110, 81, 81, 47, 56, 89, - - 89, 78, 78, 90, 90, 81, 81, 56, 92, 92, - 91, 109, 93, 93, 90, 90, 90, 90, 108, 91, - 100, 100, 93, 93, 101, 101, 93, 93, 101, 101, - 101, 101, 37, 107, 37, 37, 37, 40, 105, 40, - 40, 40, 45, 104, 45, 45, 45, 60, 103, 60, - 74, 74, 74, 106, 102, 106, 98, 97, 96, 95, - 94, 88, 75, 87, 86, 85, 84, 83, 82, 75, - 114, 41, 72, 71, 70, 69, 68, 67, 66, 65, - 62, 61, 59, 58, 57, 53, 49, 48, 44, 43, - 41, 36, 114, 3, 114, 114, 114, 114, 114, 114, - - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114 - } ; - -static SeExprEdSpecconst flex_int16_t SeExprEdSpec_chk[243] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 8, 13, - 16, 16, 17, 17, 19, 27, 19, 19, 37, 27, - 39, 45, 47, 80, 80, 19, 52, 52, 73, 13, - 54, 54, 121, 8, 19, 52, 117, 76, 112, 54, - 108, 45, 47, 37, 52, 39, 107, 55, 54, 55, - 55, 56, 56, 73, 105, 56, 56, 76, 55, 77, - - 77, 78, 78, 77, 77, 81, 81, 55, 79, 79, - 78, 104, 79, 79, 89, 89, 90, 90, 103, 78, - 91, 91, 92, 92, 91, 91, 93, 93, 100, 100, - 101, 101, 115, 102, 115, 115, 115, 116, 98, 116, - 116, 116, 118, 97, 118, 118, 118, 119, 96, 119, - 120, 120, 120, 122, 94, 122, 87, 86, 85, 84, - 82, 75, 74, 71, 70, 68, 67, 66, 61, 42, - 41, 40, 35, 34, 33, 32, 31, 30, 29, 28, - 26, 24, 22, 21, 20, 18, 15, 14, 12, 11, - 9, 7, 3, 114, 114, 114, 114, 114, 114, 114, - - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114 - } ; - -static SeExprEdSpec_state_type SeExprEdSpec_last_accepting_state; -static char *SeExprEdSpec_last_accepting_cpos; - -extern int SeExprEdSpec_flex_debug; -int SeExprEdSpec_flex_debug = 0; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define SeExprEdSpecmore() SeExprEdSpecmore_used_but_not_detected -#define SeExprEdSpecYY_MORE_ADJ 0 -#define SeExprEdSpecYY_RESTORE_SeExprEdSpecYY_MORE_OFFSET -char *SeExprEdSpectext; -#line 1 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -/* -* Copyright Disney Enterprises, Inc. All rights reserved. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License -* and the following modification to it: Section 6 Trademarks. -* deleted and replaced with: -* -* 6. Trademarks. This License does not grant permission to use the -* trade names, trademarks, service marks, or product names of the -* Licensor and its affiliates, except as required for reproducing -* the content of the NOTICE file. -* -* You may obtain a copy of the License at -* http://www.apache.org/licenses/LICENSE-2.0 -*/ -/* Don't generate SeExprEdSpecwrap since everything is in one string */ -/* Don't generate unput since it's unused and gcc complains... */ -/* Don't worry about interactive and using isatty(). Fixes Windows compile. */ -#line 26 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -#ifndef MAKEDEPEND -# include -# include -# include -#define _USE_MATH_DEFINES -# include -#endif - -//#include "SePlatform.h" -//#include "SeExprSpecParser.h" -#include "SeExprSpecType.h" - -#ifdef SEEXPR_WIN32 -# define SeExprEdSpecYY_NO_UNISTD_H -# define SeExprEdSpecYY_SKIP_SeExprEdSpecYYWRAP -#endif - -#ifndef MAKEDEPEND -# include "SeExprSpecParser.tab.h" -#endif - -// TODO: make this thread safe -static int columnNumber=0; // really buffer position -static int lineNumber=0; // not used - -static std::vector >* comments=0; - -extern char* specRegisterToken(char* tok); -void specResetCounters(std::vector >& commentsIn){ - columnNumber=lineNumber=0; - comments=&commentsIn; -} - -int SeExprEdSpecpos(); // forward declare - - -#define SeExprEdSpecYY_USER_ACTION { \ - SeExprEdSpeclloc.first_line=lineNumber;SeExprEdSpeclloc.first_column=columnNumber; \ - columnNumber+=SeExprEdSpecleng;\ - SeExprEdSpeclloc.last_column=columnNumber;SeExprEdSpeclloc.last_line=lineNumber;} - -#line 609 "SeExprSpecParserLexIn.cpp" - -#define INITIAL 0 - -#ifndef SeExprEdSpecYY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include -#endif - -#ifndef SeExprEdSpecYY_EXTRA_TYPE -#define SeExprEdSpecYY_EXTRA_TYPE void * -#endif - -static int SeExprEdSpec_init_globals (void ); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int SeExprEdSpeclex_destroy (void ); - -int SeExprEdSpecget_debug (void ); - -void SeExprEdSpecset_debug (int debug_flag ); - -SeExprEdSpecYY_EXTRA_TYPE SeExprEdSpecget_extra (void ); - -void SeExprEdSpecset_extra (SeExprEdSpecYY_EXTRA_TYPE user_defined ); - -FILE *SeExprEdSpecget_in (void ); - -void SeExprEdSpecset_in (FILE * in_str ); - -FILE *SeExprEdSpecget_out (void ); - -void SeExprEdSpecset_out (FILE * out_str ); - -SeExprEdSpec_size_t SeExprEdSpecget_leng (void ); - -char *SeExprEdSpecget_text (void ); - -int SeExprEdSpecget_lineno (void ); - -void SeExprEdSpecset_lineno (int line_number ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef SeExprEdSpecYY_SKIP_SeExprEdSpecYYWRAP -#ifdef __cplusplus -extern "C" int SeExprEdSpecwrap (void ); -#else -extern int SeExprEdSpecwrap (void ); -#endif -#endif - -#ifndef SeExprEdSpectext_ptr -static void SeExprEdSpec_flex_strncpy (char *,SeExprEdSpecconst char *,int ); -#endif - -#ifdef SeExprEdSpecYY_NEED_STRLEN -static int SeExprEdSpec_flex_strlen (SeExprEdSpecconst char * ); -#endif - -#ifndef SeExprEdSpecYY_NO_INPUT - -#ifdef __cplusplus -static int SeExprEdSpecinput (void ); -#else -static int input (void ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef SeExprEdSpecYY_READ_BUF_SIZE -#define SeExprEdSpecYY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO do { if (fwrite( SeExprEdSpectext, SeExprEdSpecleng, 1, SeExprEdSpecout )) {} } while (0) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or SeExprEdSpecYY_NULL, - * is returned in "result". - */ -#ifndef SeExprEdSpecYY_INPUT -#define SeExprEdSpecYY_INPUT(buf,result,max_size) \ - if ( SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_is_interactive ) \ - { \ - int c = '*'; \ - size_t n; \ - for ( n = 0; n < max_size && \ - (c = getc( SeExprEdSpecin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( SeExprEdSpecin ) ) \ - SeExprEdSpecYY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, SeExprEdSpecin))==0 && ferror(SeExprEdSpecin)) \ - { \ - if( errno != EINTR) \ - { \ - SeExprEdSpecYY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(SeExprEdSpecin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "SeExprEdSpecterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef SeExprEdSpecterminate -#define SeExprEdSpecterminate() return SeExprEdSpecYY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef SeExprEdSpecYY_START_STACK_INCR -#define SeExprEdSpecYY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef SeExprEdSpecYY_FATAL_ERROR -#define SeExprEdSpecYY_FATAL_ERROR(msg) SeExprEdSpec_fatal_error( msg ) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef SeExprEdSpecYY_DECL -#define SeExprEdSpecYY_DECL_IS_OURS 1 - -extern int SeExprEdSpeclex (void); - -#define SeExprEdSpecYY_DECL int SeExprEdSpeclex (void) -#endif /* !SeExprEdSpecYY_DECL */ - -/* Code executed at the beginning of each rule, after SeExprEdSpectext and SeExprEdSpecleng - * have been set up. - */ -#ifndef SeExprEdSpecYY_USER_ACTION -#define SeExprEdSpecYY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef SeExprEdSpecYY_BREAK -#define SeExprEdSpecYY_BREAK break; -#endif - -#define SeExprEdSpecYY_RULE_SETUP \ - SeExprEdSpecYY_USER_ACTION - -/** The main scanner function which does all the work. - */ -SeExprEdSpecYY_DECL -{ - register SeExprEdSpec_state_type SeExprEdSpec_current_state; - register char *SeExprEdSpec_cp, *SeExprEdSpec_bp; - register int SeExprEdSpec_act; - -#line 74 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" - -#line 791 "SeExprSpecParserLexIn.cpp" - - if ( !(SeExprEdSpec_init) ) - { - (SeExprEdSpec_init) = 1; - -#ifdef SeExprEdSpecYY_USER_INIT - SeExprEdSpecYY_USER_INIT; -#endif - - if ( ! (SeExprEdSpec_start) ) - (SeExprEdSpec_start) = 1; /* first start state */ - - if ( ! SeExprEdSpecin ) - SeExprEdSpecin = stdin; - - if ( ! SeExprEdSpecout ) - SeExprEdSpecout = stdout; - - if ( ! SeExprEdSpecYY_CURRENT_BUFFER ) { - SeExprEdSpecensure_buffer_stack (); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = - SeExprEdSpec_create_buffer(SeExprEdSpecin,SeExprEdSpecYY_BUF_SIZE ); - } - - SeExprEdSpec_load_buffer_state( ); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - SeExprEdSpec_cp = (SeExprEdSpec_c_buf_p); - - /* Support of SeExprEdSpectext. */ - *SeExprEdSpec_cp = (SeExprEdSpec_hold_char); - - /* SeExprEdSpec_bp points to the position in SeExprEdSpec_ch_buf of the start of - * the current run. - */ - SeExprEdSpec_bp = SeExprEdSpec_cp; - - SeExprEdSpec_current_state = (SeExprEdSpec_start); -SeExprEdSpec_match: - do - { - register SeExprEdSpecYY_CHAR SeExprEdSpec_c = SeExprEdSpec_ec[SeExprEdSpecYY_SC_TO_UI(*SeExprEdSpec_cp)]; - if ( SeExprEdSpec_accept[SeExprEdSpec_current_state] ) - { - (SeExprEdSpec_last_accepting_state) = SeExprEdSpec_current_state; - (SeExprEdSpec_last_accepting_cpos) = SeExprEdSpec_cp; - } - while ( SeExprEdSpec_chk[SeExprEdSpec_base[SeExprEdSpec_current_state] + SeExprEdSpec_c] != SeExprEdSpec_current_state ) - { - SeExprEdSpec_current_state = (int) SeExprEdSpec_def[SeExprEdSpec_current_state]; - if ( SeExprEdSpec_current_state >= 115 ) - SeExprEdSpec_c = SeExprEdSpec_meta[(unsigned int) SeExprEdSpec_c]; - } - SeExprEdSpec_current_state = SeExprEdSpec_nxt[SeExprEdSpec_base[SeExprEdSpec_current_state] + (unsigned int) SeExprEdSpec_c]; - ++SeExprEdSpec_cp; - } - while ( SeExprEdSpec_current_state != 114 ); - SeExprEdSpec_cp = (SeExprEdSpec_last_accepting_cpos); - SeExprEdSpec_current_state = (SeExprEdSpec_last_accepting_state); - -SeExprEdSpec_find_action: - SeExprEdSpec_act = SeExprEdSpec_accept[SeExprEdSpec_current_state]; - - SeExprEdSpecYY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( SeExprEdSpec_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of SeExprEdSpecYY_DO_BEFORE_ACTION */ - *SeExprEdSpec_cp = (SeExprEdSpec_hold_char); - SeExprEdSpec_cp = (SeExprEdSpec_last_accepting_cpos); - SeExprEdSpec_current_state = (SeExprEdSpec_last_accepting_state); - goto SeExprEdSpec_find_action; - -case 1: -SeExprEdSpecYY_RULE_SETUP -#line 75 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" - - SeExprEdSpecYY_BREAK -case 2: -SeExprEdSpecYY_RULE_SETUP -#line 77 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return IF; } - SeExprEdSpecYY_BREAK -case 3: -SeExprEdSpecYY_RULE_SETUP -#line 78 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return ELSE; } - SeExprEdSpecYY_BREAK -case 4: -SeExprEdSpecYY_RULE_SETUP -#line 80 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return OR; } - SeExprEdSpecYY_BREAK -case 5: -SeExprEdSpecYY_RULE_SETUP -#line 81 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return AND; } - SeExprEdSpecYY_BREAK -case 6: -SeExprEdSpecYY_RULE_SETUP -#line 82 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return EQ; } - SeExprEdSpecYY_BREAK -case 7: -SeExprEdSpecYY_RULE_SETUP -#line 83 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return NE; } - SeExprEdSpecYY_BREAK -case 8: -SeExprEdSpecYY_RULE_SETUP -#line 84 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return LE; } - SeExprEdSpecYY_BREAK -case 9: -SeExprEdSpecYY_RULE_SETUP -#line 85 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return GE; } - SeExprEdSpecYY_BREAK -case 10: -SeExprEdSpecYY_RULE_SETUP -#line 86 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return ARROW; } - SeExprEdSpecYY_BREAK -case 11: -SeExprEdSpecYY_RULE_SETUP -#line 87 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return AddEq; } - SeExprEdSpecYY_BREAK -case 12: -SeExprEdSpecYY_RULE_SETUP -#line 88 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return SubEq; } - SeExprEdSpecYY_BREAK -case 13: -SeExprEdSpecYY_RULE_SETUP -#line 89 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return MultEq; } - SeExprEdSpecYY_BREAK -case 14: -SeExprEdSpecYY_RULE_SETUP -#line 90 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return DivEq; } - SeExprEdSpecYY_BREAK -case 15: -SeExprEdSpecYY_RULE_SETUP -#line 91 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return ModEq; } - SeExprEdSpecYY_BREAK -case 16: -SeExprEdSpecYY_RULE_SETUP -#line 92 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return ExpEq; } - SeExprEdSpecYY_BREAK -case 17: -SeExprEdSpecYY_RULE_SETUP -#line 94 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.d = M_PI; return NUMBER; } - SeExprEdSpecYY_BREAK -case 18: -SeExprEdSpecYY_RULE_SETUP -#line 95 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.d = M_E; return NUMBER; } - SeExprEdSpecYY_BREAK -case 19: -SeExprEdSpecYY_RULE_SETUP -#line 96 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.d = 0; return NUMBER; } - SeExprEdSpecYY_BREAK -case 20: -SeExprEdSpecYY_RULE_SETUP -#line 97 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.d = 1; return NUMBER; } - SeExprEdSpecYY_BREAK -case 21: -SeExprEdSpecYY_RULE_SETUP -#line 98 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.d = 2; return NUMBER; } - SeExprEdSpecYY_BREAK -case 22: -SeExprEdSpecYY_RULE_SETUP -#line 99 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.d = 3; return NUMBER; } - SeExprEdSpecYY_BREAK -case 23: -SeExprEdSpecYY_RULE_SETUP -#line 101 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.d = atof(SeExprEdSpectext); return NUMBER; } - SeExprEdSpecYY_BREAK -case 24: -SeExprEdSpecYY_RULE_SETUP -#line 102 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ /* match quoted string, allow embedded quote, \" */ - SeExprEdSpeclval.s = specRegisterToken(&SeExprEdSpectext[1]); - SeExprEdSpeclval.s[strlen(SeExprEdSpeclval.s)-1] = '\0'; - return STR; } - SeExprEdSpecYY_BREAK -case 25: -SeExprEdSpecYY_RULE_SETUP -#line 106 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ /* match quoted string, allow embedded quote, \' */ - SeExprEdSpeclval.s = specRegisterToken(&SeExprEdSpectext[1]); - SeExprEdSpeclval.s[strlen(SeExprEdSpeclval.s)-1] = '\0'; - return STR; } - SeExprEdSpecYY_BREAK -case 26: -SeExprEdSpecYY_RULE_SETUP -#line 110 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.s = specRegisterToken(&SeExprEdSpectext[1]); return VAR; } - SeExprEdSpecYY_BREAK -case 27: -SeExprEdSpecYY_RULE_SETUP -#line 111 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.s = specRegisterToken(&SeExprEdSpectext[1]); return VAR; } - SeExprEdSpecYY_BREAK -case 28: -SeExprEdSpecYY_RULE_SETUP -#line 112 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ SeExprEdSpeclval.s = specRegisterToken(SeExprEdSpectext); return NAME; } - SeExprEdSpecYY_BREAK -case 29: -SeExprEdSpecYY_RULE_SETUP -#line 114 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -/* ignore quoted newline */; - SeExprEdSpecYY_BREAK -case 30: -SeExprEdSpecYY_RULE_SETUP -#line 115 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -/* ignore quoted tab */; - SeExprEdSpecYY_BREAK -case 31: -/* rule 31 can match eol */ -SeExprEdSpecYY_RULE_SETUP -#line 116 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -/* ignore whitespace */; - SeExprEdSpecYY_BREAK -case 32: -SeExprEdSpecYY_RULE_SETUP -#line 117 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ /* match comment */ - int startPos=SeExprEdSpecpos(),endPos=SeExprEdSpecpos()+strlen(&SeExprEdSpectext[1])+1; - comments->push_back(std::pair(startPos,endPos));} - SeExprEdSpecYY_BREAK -case 33: -SeExprEdSpecYY_RULE_SETUP -#line 122 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -{ return SeExprEdSpectext[0]; } - SeExprEdSpecYY_BREAK -case 34: -SeExprEdSpecYY_RULE_SETUP -#line 124 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" -ECHO; - SeExprEdSpecYY_BREAK -#line 1049 "SeExprSpecParserLexIn.cpp" -case SeExprEdSpecYY_STATE_EOF(INITIAL): - SeExprEdSpecterminate(); - - case SeExprEdSpecYY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int SeExprEdSpec_amount_of_matched_text = (int) (SeExprEdSpec_cp - (SeExprEdSpectext_ptr)) - 1; - - /* Undo the effects of SeExprEdSpecYY_DO_BEFORE_ACTION. */ - *SeExprEdSpec_cp = (SeExprEdSpec_hold_char); - SeExprEdSpecYY_RESTORE_SeExprEdSpecYY_MORE_OFFSET - - if ( SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buffer_status == SeExprEdSpecYY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed SeExprEdSpecin at a new source and called - * SeExprEdSpeclex(). If so, then we have to assure - * consistency between SeExprEdSpecYY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (SeExprEdSpec_n_chars) = SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_n_chars; - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_input_file = SeExprEdSpecin; - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buffer_status = SeExprEdSpecYY_BUFFER_NORMAL; - } - - /* Note that here we test for SeExprEdSpec_c_buf_p "<=" to the position - * of the first EOB in the buffer, since SeExprEdSpec_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (SeExprEdSpec_c_buf_p) <= &SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf[(SeExprEdSpec_n_chars)] ) - { /* This was really a NUL. */ - SeExprEdSpec_state_type SeExprEdSpec_next_state; - - (SeExprEdSpec_c_buf_p) = (SeExprEdSpectext_ptr) + SeExprEdSpec_amount_of_matched_text; - - SeExprEdSpec_current_state = SeExprEdSpec_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * SeExprEdSpec_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - SeExprEdSpec_next_state = SeExprEdSpec_try_NUL_trans( SeExprEdSpec_current_state ); - - SeExprEdSpec_bp = (SeExprEdSpectext_ptr) + SeExprEdSpecYY_MORE_ADJ; - - if ( SeExprEdSpec_next_state ) - { - /* Consume the NUL. */ - SeExprEdSpec_cp = ++(SeExprEdSpec_c_buf_p); - SeExprEdSpec_current_state = SeExprEdSpec_next_state; - goto SeExprEdSpec_match; - } - - else - { - SeExprEdSpec_cp = (SeExprEdSpec_last_accepting_cpos); - SeExprEdSpec_current_state = (SeExprEdSpec_last_accepting_state); - goto SeExprEdSpec_find_action; - } - } - - else switch ( SeExprEdSpec_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (SeExprEdSpec_did_buffer_switch_on_eof) = 0; - - if ( SeExprEdSpecwrap( ) ) - { - /* Note: because we've taken care in - * SeExprEdSpec_get_next_buffer() to have set up - * SeExprEdSpectext, we can now set up - * SeExprEdSpec_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * SeExprEdSpecYY_NULL, it'll still work - another - * SeExprEdSpecYY_NULL will get returned. - */ - (SeExprEdSpec_c_buf_p) = (SeExprEdSpectext_ptr) + SeExprEdSpecYY_MORE_ADJ; - - SeExprEdSpec_act = SeExprEdSpecYY_STATE_EOF(SeExprEdSpecYY_START); - goto do_action; - } - - else - { - if ( ! (SeExprEdSpec_did_buffer_switch_on_eof) ) - SeExprEdSpecYY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (SeExprEdSpec_c_buf_p) = - (SeExprEdSpectext_ptr) + SeExprEdSpec_amount_of_matched_text; - - SeExprEdSpec_current_state = SeExprEdSpec_get_previous_state( ); - - SeExprEdSpec_cp = (SeExprEdSpec_c_buf_p); - SeExprEdSpec_bp = (SeExprEdSpectext_ptr) + SeExprEdSpecYY_MORE_ADJ; - goto SeExprEdSpec_match; - - case EOB_ACT_LAST_MATCH: - (SeExprEdSpec_c_buf_p) = - &SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf[(SeExprEdSpec_n_chars)]; - - SeExprEdSpec_current_state = SeExprEdSpec_get_previous_state( ); - - SeExprEdSpec_cp = (SeExprEdSpec_c_buf_p); - SeExprEdSpec_bp = (SeExprEdSpectext_ptr) + SeExprEdSpecYY_MORE_ADJ; - goto SeExprEdSpec_find_action; - } - break; - } - - default: - SeExprEdSpecYY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of SeExprEdSpeclex */ - -/* SeExprEdSpec_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int SeExprEdSpec_get_next_buffer (void) -{ - register char *dest = SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf; - register char *source = (SeExprEdSpectext_ptr); - register int number_to_move, i; - int ret_val; - - if ( (SeExprEdSpec_c_buf_p) > &SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf[(SeExprEdSpec_n_chars) + 1] ) - SeExprEdSpecYY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (SeExprEdSpec_c_buf_p) - (SeExprEdSpectext_ptr) - SeExprEdSpecYY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((SeExprEdSpec_c_buf_p) - (SeExprEdSpectext_ptr)) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buffer_status == SeExprEdSpecYY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_n_chars = (SeExprEdSpec_n_chars) = 0; - - else - { - SeExprEdSpec_size_t num_to_read = - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - SeExprEdSpecYY_BUFFER_STATE b = SeExprEdSpecYY_CURRENT_BUFFER_LVALUE; - - int SeExprEdSpec_c_buf_p_offset = - (int) ((SeExprEdSpec_c_buf_p) - b->SeExprEdSpec_ch_buf); - - if ( b->SeExprEdSpec_is_our_buffer ) - { - SeExprEdSpec_size_t new_size = b->SeExprEdSpec_buf_size * 2; - - if ( new_size <= 0 ) - b->SeExprEdSpec_buf_size += b->SeExprEdSpec_buf_size / 8; - else - b->SeExprEdSpec_buf_size *= 2; - - b->SeExprEdSpec_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - SeExprEdSpecrealloc((void *) b->SeExprEdSpec_ch_buf,b->SeExprEdSpec_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->SeExprEdSpec_ch_buf = 0; - - if ( ! b->SeExprEdSpec_ch_buf ) - SeExprEdSpecYY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - (SeExprEdSpec_c_buf_p) = &b->SeExprEdSpec_ch_buf[SeExprEdSpec_c_buf_p_offset]; - - num_to_read = SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > SeExprEdSpecYY_READ_BUF_SIZE ) - num_to_read = SeExprEdSpecYY_READ_BUF_SIZE; - - /* Read in more data. */ - SeExprEdSpecYY_INPUT( (&SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf[number_to_move]), - (SeExprEdSpec_n_chars), num_to_read ); - - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_n_chars = (SeExprEdSpec_n_chars); - } - - if ( (SeExprEdSpec_n_chars) == 0 ) - { - if ( number_to_move == SeExprEdSpecYY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - SeExprEdSpecrestart(SeExprEdSpecin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buffer_status = - SeExprEdSpecYY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((SeExprEdSpec_size_t) ((SeExprEdSpec_n_chars) + number_to_move) > SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - SeExprEdSpec_size_t new_size = (SeExprEdSpec_n_chars) + number_to_move + ((SeExprEdSpec_n_chars) >> 1); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf = (char *) SeExprEdSpecrealloc((void *) SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf,new_size ); - if ( ! SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf ) - SeExprEdSpecYY_FATAL_ERROR( "out of dynamic memory in SeExprEdSpec_get_next_buffer()" ); - } - - (SeExprEdSpec_n_chars) += number_to_move; - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf[(SeExprEdSpec_n_chars)] = SeExprEdSpecYY_END_OF_BUFFER_CHAR; - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf[(SeExprEdSpec_n_chars) + 1] = SeExprEdSpecYY_END_OF_BUFFER_CHAR; - - (SeExprEdSpectext_ptr) = &SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf[0]; - - return ret_val; -} - -/* SeExprEdSpec_get_previous_state - get the state just before the EOB char was reached */ - - static SeExprEdSpec_state_type SeExprEdSpec_get_previous_state (void) -{ - register SeExprEdSpec_state_type SeExprEdSpec_current_state; - register char *SeExprEdSpec_cp; - - SeExprEdSpec_current_state = (SeExprEdSpec_start); - - for ( SeExprEdSpec_cp = (SeExprEdSpectext_ptr) + SeExprEdSpecYY_MORE_ADJ; SeExprEdSpec_cp < (SeExprEdSpec_c_buf_p); ++SeExprEdSpec_cp ) - { - register SeExprEdSpecYY_CHAR SeExprEdSpec_c = (*SeExprEdSpec_cp ? SeExprEdSpec_ec[SeExprEdSpecYY_SC_TO_UI(*SeExprEdSpec_cp)] : 1); - if ( SeExprEdSpec_accept[SeExprEdSpec_current_state] ) - { - (SeExprEdSpec_last_accepting_state) = SeExprEdSpec_current_state; - (SeExprEdSpec_last_accepting_cpos) = SeExprEdSpec_cp; - } - while ( SeExprEdSpec_chk[SeExprEdSpec_base[SeExprEdSpec_current_state] + SeExprEdSpec_c] != SeExprEdSpec_current_state ) - { - SeExprEdSpec_current_state = (int) SeExprEdSpec_def[SeExprEdSpec_current_state]; - if ( SeExprEdSpec_current_state >= 115 ) - SeExprEdSpec_c = SeExprEdSpec_meta[(unsigned int) SeExprEdSpec_c]; - } - SeExprEdSpec_current_state = SeExprEdSpec_nxt[SeExprEdSpec_base[SeExprEdSpec_current_state] + (unsigned int) SeExprEdSpec_c]; - } - - return SeExprEdSpec_current_state; -} - -/* SeExprEdSpec_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = SeExprEdSpec_try_NUL_trans( current_state ); - */ - static SeExprEdSpec_state_type SeExprEdSpec_try_NUL_trans (SeExprEdSpec_state_type SeExprEdSpec_current_state ) -{ - register int SeExprEdSpec_is_jam; - register char *SeExprEdSpec_cp = (SeExprEdSpec_c_buf_p); - - register SeExprEdSpecYY_CHAR SeExprEdSpec_c = 1; - if ( SeExprEdSpec_accept[SeExprEdSpec_current_state] ) - { - (SeExprEdSpec_last_accepting_state) = SeExprEdSpec_current_state; - (SeExprEdSpec_last_accepting_cpos) = SeExprEdSpec_cp; - } - while ( SeExprEdSpec_chk[SeExprEdSpec_base[SeExprEdSpec_current_state] + SeExprEdSpec_c] != SeExprEdSpec_current_state ) - { - SeExprEdSpec_current_state = (int) SeExprEdSpec_def[SeExprEdSpec_current_state]; - if ( SeExprEdSpec_current_state >= 115 ) - SeExprEdSpec_c = SeExprEdSpec_meta[(unsigned int) SeExprEdSpec_c]; - } - SeExprEdSpec_current_state = SeExprEdSpec_nxt[SeExprEdSpec_base[SeExprEdSpec_current_state] + (unsigned int) SeExprEdSpec_c]; - SeExprEdSpec_is_jam = (SeExprEdSpec_current_state == 114); - - return SeExprEdSpec_is_jam ? 0 : SeExprEdSpec_current_state; -} - -#ifndef SeExprEdSpecYY_NO_INPUT -#ifdef __cplusplus - static int SeExprEdSpecinput (void) -#else - static int input (void) -#endif - -{ - int c; - - *(SeExprEdSpec_c_buf_p) = (SeExprEdSpec_hold_char); - - if ( *(SeExprEdSpec_c_buf_p) == SeExprEdSpecYY_END_OF_BUFFER_CHAR ) - { - /* SeExprEdSpec_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (SeExprEdSpec_c_buf_p) < &SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_ch_buf[(SeExprEdSpec_n_chars)] ) - /* This was really a NUL. */ - *(SeExprEdSpec_c_buf_p) = '\0'; - - else - { /* need more input */ - SeExprEdSpec_size_t offset = (SeExprEdSpec_c_buf_p) - (SeExprEdSpectext_ptr); - ++(SeExprEdSpec_c_buf_p); - - switch ( SeExprEdSpec_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because SeExprEdSpec_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - SeExprEdSpecrestart(SeExprEdSpecin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( SeExprEdSpecwrap( ) ) - return EOF; - - if ( ! (SeExprEdSpec_did_buffer_switch_on_eof) ) - SeExprEdSpecYY_NEW_FILE; -#ifdef __cplusplus - return SeExprEdSpecinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (SeExprEdSpec_c_buf_p) = (SeExprEdSpectext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (SeExprEdSpec_c_buf_p); /* cast for 8-bit char's */ - *(SeExprEdSpec_c_buf_p) = '\0'; /* preserve SeExprEdSpectext */ - (SeExprEdSpec_hold_char) = *++(SeExprEdSpec_c_buf_p); - - return c; -} -#endif /* ifndef SeExprEdSpecYY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void SeExprEdSpecrestart (FILE * input_file ) -{ - - if ( ! SeExprEdSpecYY_CURRENT_BUFFER ){ - SeExprEdSpecensure_buffer_stack (); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = - SeExprEdSpec_create_buffer(SeExprEdSpecin,SeExprEdSpecYY_BUF_SIZE ); - } - - SeExprEdSpec_init_buffer(SeExprEdSpecYY_CURRENT_BUFFER,input_file ); - SeExprEdSpec_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void SeExprEdSpec_switch_to_buffer (SeExprEdSpecYY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * SeExprEdSpecpop_buffer_state(); - * SeExprEdSpecpush_buffer_state(new_buffer); - */ - SeExprEdSpecensure_buffer_stack (); - if ( SeExprEdSpecYY_CURRENT_BUFFER == new_buffer ) - return; - - if ( SeExprEdSpecYY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(SeExprEdSpec_c_buf_p) = (SeExprEdSpec_hold_char); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buf_pos = (SeExprEdSpec_c_buf_p); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_n_chars = (SeExprEdSpec_n_chars); - } - - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = new_buffer; - SeExprEdSpec_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (SeExprEdSpecwrap()) processing, but the only time this flag - * is looked at is after SeExprEdSpecwrap() is called, so it's safe - * to go ahead and always set it. - */ - (SeExprEdSpec_did_buffer_switch_on_eof) = 1; -} - -static void SeExprEdSpec_load_buffer_state (void) -{ - (SeExprEdSpec_n_chars) = SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_n_chars; - (SeExprEdSpectext_ptr) = (SeExprEdSpec_c_buf_p) = SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buf_pos; - SeExprEdSpecin = SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_input_file; - (SeExprEdSpec_hold_char) = *(SeExprEdSpec_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c SeExprEdSpecYY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - SeExprEdSpecYY_BUFFER_STATE SeExprEdSpec_create_buffer (FILE * file, int size ) -{ - SeExprEdSpecYY_BUFFER_STATE b; - - b = (SeExprEdSpecYY_BUFFER_STATE) SeExprEdSpecalloc(sizeof( struct SeExprEdSpec_buffer_state ) ); - if ( ! b ) - SeExprEdSpecYY_FATAL_ERROR( "out of dynamic memory in SeExprEdSpec_create_buffer()" ); - - b->SeExprEdSpec_buf_size = size; - - /* SeExprEdSpec_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->SeExprEdSpec_ch_buf = (char *) SeExprEdSpecalloc(b->SeExprEdSpec_buf_size + 2 ); - if ( ! b->SeExprEdSpec_ch_buf ) - SeExprEdSpecYY_FATAL_ERROR( "out of dynamic memory in SeExprEdSpec_create_buffer()" ); - - b->SeExprEdSpec_is_our_buffer = 1; - - SeExprEdSpec_init_buffer(b,file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with SeExprEdSpec_create_buffer() - * - */ - void SeExprEdSpec_delete_buffer (SeExprEdSpecYY_BUFFER_STATE b ) -{ - - if ( ! b ) - return; - - if ( b == SeExprEdSpecYY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = (SeExprEdSpecYY_BUFFER_STATE) 0; - - if ( b->SeExprEdSpec_is_our_buffer ) - SeExprEdSpecfree((void *) b->SeExprEdSpec_ch_buf ); - - SeExprEdSpecfree((void *) b ); -} - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a SeExprEdSpecrestart() or at EOF. - */ - static void SeExprEdSpec_init_buffer (SeExprEdSpecYY_BUFFER_STATE b, FILE * file ) - -{ - int oerrno = errno; - - SeExprEdSpec_flush_buffer(b ); - - b->SeExprEdSpec_input_file = file; - b->SeExprEdSpec_fill_buffer = 1; - - /* If b is the current buffer, then SeExprEdSpec_init_buffer was _probably_ - * called from SeExprEdSpecrestart() or through SeExprEdSpec_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != SeExprEdSpecYY_CURRENT_BUFFER){ - b->SeExprEdSpec_bs_lineno = 1; - b->SeExprEdSpec_bs_column = 0; - } - - b->SeExprEdSpec_is_interactive = 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, SeExprEdSpecYY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c SeExprEdSpecYY_CURRENT_BUFFER. - * - */ - void SeExprEdSpec_flush_buffer (SeExprEdSpecYY_BUFFER_STATE b ) -{ - if ( ! b ) - return; - - b->SeExprEdSpec_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->SeExprEdSpec_ch_buf[0] = SeExprEdSpecYY_END_OF_BUFFER_CHAR; - b->SeExprEdSpec_ch_buf[1] = SeExprEdSpecYY_END_OF_BUFFER_CHAR; - - b->SeExprEdSpec_buf_pos = &b->SeExprEdSpec_ch_buf[0]; - - b->SeExprEdSpec_at_bol = 1; - b->SeExprEdSpec_buffer_status = SeExprEdSpecYY_BUFFER_NEW; - - if ( b == SeExprEdSpecYY_CURRENT_BUFFER ) - SeExprEdSpec_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void SeExprEdSpecpush_buffer_state (SeExprEdSpecYY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - SeExprEdSpecensure_buffer_stack(); - - /* This block is copied from SeExprEdSpec_switch_to_buffer. */ - if ( SeExprEdSpecYY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(SeExprEdSpec_c_buf_p) = (SeExprEdSpec_hold_char); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_buf_pos = (SeExprEdSpec_c_buf_p); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE->SeExprEdSpec_n_chars = (SeExprEdSpec_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (SeExprEdSpecYY_CURRENT_BUFFER) - (SeExprEdSpec_buffer_stack_top)++; - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from SeExprEdSpec_switch_to_buffer. */ - SeExprEdSpec_load_buffer_state( ); - (SeExprEdSpec_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void SeExprEdSpecpop_buffer_state (void) -{ - if (!SeExprEdSpecYY_CURRENT_BUFFER) - return; - - SeExprEdSpec_delete_buffer(SeExprEdSpecYY_CURRENT_BUFFER ); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = NULL; - if ((SeExprEdSpec_buffer_stack_top) > 0) - --(SeExprEdSpec_buffer_stack_top); - - if (SeExprEdSpecYY_CURRENT_BUFFER) { - SeExprEdSpec_load_buffer_state( ); - (SeExprEdSpec_did_buffer_switch_on_eof) = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void SeExprEdSpecensure_buffer_stack (void) -{ - SeExprEdSpec_size_t num_to_alloc; - - if (!(SeExprEdSpec_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (SeExprEdSpec_buffer_stack) = (struct SeExprEdSpec_buffer_state**)SeExprEdSpecalloc - (num_to_alloc * sizeof(struct SeExprEdSpec_buffer_state*) - ); - if ( ! (SeExprEdSpec_buffer_stack) ) - SeExprEdSpecYY_FATAL_ERROR( "out of dynamic memory in SeExprEdSpecensure_buffer_stack()" ); - - memset((SeExprEdSpec_buffer_stack), 0, num_to_alloc * sizeof(struct SeExprEdSpec_buffer_state*)); - - (SeExprEdSpec_buffer_stack_max) = num_to_alloc; - (SeExprEdSpec_buffer_stack_top) = 0; - return; - } - - if ((SeExprEdSpec_buffer_stack_top) >= ((SeExprEdSpec_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (SeExprEdSpec_buffer_stack_max) + grow_size; - (SeExprEdSpec_buffer_stack) = (struct SeExprEdSpec_buffer_state**)SeExprEdSpecrealloc - ((SeExprEdSpec_buffer_stack), - num_to_alloc * sizeof(struct SeExprEdSpec_buffer_state*) - ); - if ( ! (SeExprEdSpec_buffer_stack) ) - SeExprEdSpecYY_FATAL_ERROR( "out of dynamic memory in SeExprEdSpecensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((SeExprEdSpec_buffer_stack) + (SeExprEdSpec_buffer_stack_max), 0, grow_size * sizeof(struct SeExprEdSpec_buffer_state*)); - (SeExprEdSpec_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -SeExprEdSpecYY_BUFFER_STATE SeExprEdSpec_scan_buffer (char * base, SeExprEdSpec_size_t size ) -{ - SeExprEdSpecYY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != SeExprEdSpecYY_END_OF_BUFFER_CHAR || - base[size-1] != SeExprEdSpecYY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (SeExprEdSpecYY_BUFFER_STATE) SeExprEdSpecalloc(sizeof( struct SeExprEdSpec_buffer_state ) ); - if ( ! b ) - SeExprEdSpecYY_FATAL_ERROR( "out of dynamic memory in SeExprEdSpec_scan_buffer()" ); - - b->SeExprEdSpec_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->SeExprEdSpec_buf_pos = b->SeExprEdSpec_ch_buf = base; - b->SeExprEdSpec_is_our_buffer = 0; - b->SeExprEdSpec_input_file = 0; - b->SeExprEdSpec_n_chars = b->SeExprEdSpec_buf_size; - b->SeExprEdSpec_is_interactive = 0; - b->SeExprEdSpec_at_bol = 1; - b->SeExprEdSpec_fill_buffer = 0; - b->SeExprEdSpec_buffer_status = SeExprEdSpecYY_BUFFER_NEW; - - SeExprEdSpec_switch_to_buffer(b ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to SeExprEdSpeclex() will - * scan from a @e copy of @a str. - * @param SeExprEdSpecstr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * SeExprEdSpec_scan_bytes() instead. - */ -SeExprEdSpecYY_BUFFER_STATE SeExprEdSpec_scan_string (SeExprEdSpecconst char * SeExprEdSpecstr ) -{ - - return SeExprEdSpec_scan_bytes(SeExprEdSpecstr,strlen(SeExprEdSpecstr) ); -} - -/** Setup the input buffer state to scan the given bytes. The next call to SeExprEdSpeclex() will - * scan from a @e copy of @a bytes. - * @param SeExprEdSpecbytes the byte buffer to scan - * @param _SeExprEdSpecbytes_len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -SeExprEdSpecYY_BUFFER_STATE SeExprEdSpec_scan_bytes (SeExprEdSpecconst char * SeExprEdSpecbytes, SeExprEdSpec_size_t _SeExprEdSpecbytes_len ) -{ - SeExprEdSpecYY_BUFFER_STATE b; - char *buf; - SeExprEdSpec_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _SeExprEdSpecbytes_len + 2; - buf = (char *) SeExprEdSpecalloc(n ); - if ( ! buf ) - SeExprEdSpecYY_FATAL_ERROR( "out of dynamic memory in SeExprEdSpec_scan_bytes()" ); - - for ( i = 0; i < _SeExprEdSpecbytes_len; ++i ) - buf[i] = SeExprEdSpecbytes[i]; - - buf[_SeExprEdSpecbytes_len] = buf[_SeExprEdSpecbytes_len+1] = SeExprEdSpecYY_END_OF_BUFFER_CHAR; - - b = SeExprEdSpec_scan_buffer(buf,n ); - if ( ! b ) - SeExprEdSpecYY_FATAL_ERROR( "bad buffer in SeExprEdSpec_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->SeExprEdSpec_is_our_buffer = 1; - - return b; -} - -#ifndef SeExprEdSpecYY_EXIT_FAILURE -#define SeExprEdSpecYY_EXIT_FAILURE 2 -#endif - -static void SeExprEdSpec_fatal_error (SeExprEdSpecconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( SeExprEdSpecYY_EXIT_FAILURE ); -} - -/* Redefine SeExprEdSpecless() so it works in section 3 code. */ - -#undef SeExprEdSpecless -#define SeExprEdSpecless(n) \ - do \ - { \ - /* Undo effects of setting up SeExprEdSpectext. */ \ - int SeExprEdSpecless_macro_arg = (n); \ - SeExprEdSpecYY_LESS_LINENO(SeExprEdSpecless_macro_arg);\ - SeExprEdSpectext[SeExprEdSpecleng] = (SeExprEdSpec_hold_char); \ - (SeExprEdSpec_c_buf_p) = SeExprEdSpectext + SeExprEdSpecless_macro_arg; \ - (SeExprEdSpec_hold_char) = *(SeExprEdSpec_c_buf_p); \ - *(SeExprEdSpec_c_buf_p) = '\0'; \ - SeExprEdSpecleng = SeExprEdSpecless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the current line number. - * - */ -int SeExprEdSpecget_lineno (void) -{ - - return SeExprEdSpeclineno; -} - -/** Get the input stream. - * - */ -FILE *SeExprEdSpecget_in (void) -{ - return SeExprEdSpecin; -} - -/** Get the output stream. - * - */ -FILE *SeExprEdSpecget_out (void) -{ - return SeExprEdSpecout; -} - -/** Get the length of the current token. - * - */ -SeExprEdSpec_size_t SeExprEdSpecget_leng (void) -{ - return SeExprEdSpecleng; -} - -/** Get the current token. - * - */ - -char *SeExprEdSpecget_text (void) -{ - return SeExprEdSpectext; -} - -/** Set the current line number. - * @param line_number - * - */ -void SeExprEdSpecset_lineno (int line_number ) -{ - - SeExprEdSpeclineno = line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see SeExprEdSpec_switch_to_buffer - */ -void SeExprEdSpecset_in (FILE * in_str ) -{ - SeExprEdSpecin = in_str ; -} - -void SeExprEdSpecset_out (FILE * out_str ) -{ - SeExprEdSpecout = out_str ; -} - -int SeExprEdSpecget_debug (void) -{ - return SeExprEdSpec_flex_debug; -} - -void SeExprEdSpecset_debug (int bdebug ) -{ - SeExprEdSpec_flex_debug = bdebug ; -} - -static int SeExprEdSpec_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from SeExprEdSpeclex_destroy(), so don't allocate here. - */ - - (SeExprEdSpec_buffer_stack) = 0; - (SeExprEdSpec_buffer_stack_top) = 0; - (SeExprEdSpec_buffer_stack_max) = 0; - (SeExprEdSpec_c_buf_p) = (char *) 0; - (SeExprEdSpec_init) = 0; - (SeExprEdSpec_start) = 0; - -/* Defined in main.c */ -#ifdef SeExprEdSpecYY_STDINIT - SeExprEdSpecin = stdin; - SeExprEdSpecout = stdout; -#else - SeExprEdSpecin = (FILE *) 0; - SeExprEdSpecout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * SeExprEdSpeclex_init() - */ - return 0; -} - -/* SeExprEdSpeclex_destroy is for both reentrant and non-reentrant scanners. */ -int SeExprEdSpeclex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(SeExprEdSpecYY_CURRENT_BUFFER){ - SeExprEdSpec_delete_buffer(SeExprEdSpecYY_CURRENT_BUFFER ); - SeExprEdSpecYY_CURRENT_BUFFER_LVALUE = NULL; - SeExprEdSpecpop_buffer_state(); - } - - /* Destroy the stack itself. */ - SeExprEdSpecfree((SeExprEdSpec_buffer_stack) ); - (SeExprEdSpec_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * SeExprEdSpeclex() is called, initialization will occur. */ - SeExprEdSpec_init_globals( ); - - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef SeExprEdSpectext_ptr -static void SeExprEdSpec_flex_strncpy (char* s1, SeExprEdSpecconst char * s2, int n ) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef SeExprEdSpecYY_NEED_STRLEN -static int SeExprEdSpec_flex_strlen (SeExprEdSpecconst char * s ) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *SeExprEdSpecalloc (SeExprEdSpec_size_t size ) -{ - return (void *) malloc( size ); -} - -void *SeExprEdSpecrealloc (void * ptr, SeExprEdSpec_size_t size ) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void SeExprEdSpecfree (void * ptr ) -{ - free( (char *) ptr ); /* see SeExprEdSpecrealloc() for (char *) cast */ -} - -#define SeExprEdSpecYYTABLES_NAME "SeExprEdSpectables" - -#line 124 "/disney/users/jberlin/projects/llvm-sandbox/seexpr/src/SeExprEditor/SeExprSpecParserLex.l" - - - -/* Gets index of current token (corresponding to SeExprEdSpectext). - Used for error reporting. - */ -int SeExprEdSpecpos() -{ - return SeExprEdSpec_c_buf_p - SeExprEdSpecYY_CURRENT_BUFFER->SeExprEdSpec_ch_buf - SeExprEdSpecleng; -} - diff --git a/windows7/README b/windows7/README index 0a504167..9cc3d3eb 100644 --- a/windows7/README +++ b/windows7/README @@ -1,24 +1,21 @@ -Because there are some known problems with building bison/flex files -on Windows, this directory contains needed files built on Linux that -work with a Windows 7 / Visual Studio 2010 build. +Because there are some known problems with building bison / flex files +on Windows, this directory contains needed files built on Linux that +work with a Windows 7 / Visual Studio 2010 build. -Copy the files in SeExpr/generated/* and SeExprEditor/generated/* to -their respective src sub-directories. +Copy the files in SeExpr\generated\* and ui\generated\* to +their respective "src" sub-directories. Here is a tree listing of what's in this sub-directory: windows7/ ├── README ├── SeExpr -│   └── generated -│   ├── SeExprParser.cpp -│   ├── SeExprParserLex.cpp -│   └── SeExprParser.tab.h -└── SeExprEditor +│ └── generated +│ ├── ExprParser.cpp +│ ├── ExprParserLex.cpp +│ └── ExprParser.tab.h +└── ui └── generated - ├── SeExprSpecParser.cpp - ├── SeExprSpecParserLex.cpp - └── SeExprSpecParser.tab.h - -See: https://groups.google.com/forum/#!topic/seexpr-discuss/TAsGkXIjiH4 - + ├── ExprSpecParser.cpp + ├── ExprSpecParserLex.cpp + └── ExprSpecParser.tab.h diff --git a/windows7/SeExpr/generated/ExprParser.cpp b/windows7/SeExpr/generated/ExprParser.cpp new file mode 100644 index 00000000..56abc1b1 --- /dev/null +++ b/windows7/SeExpr/generated/ExprParser.cpp @@ -0,0 +1,2755 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + + This program 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. + + This program 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 this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with SeExpr2 or SeExprYY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define SeExprYYBISON 1 + +/* Bison version. */ +#define SeExprYYBISON_VERSION "2.7" + +/* Skeleton name. */ +#define SeExprYYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define SeExprYYPURE 0 + +/* Push parsers. */ +#define SeExprYYPUSH 0 + +/* Pull parsers. */ +#define SeExprYYPULL 1 + + +/* Substitute the variable and function names. */ +#define SeExpr2parse SeExpr2parse +#define SeExpr2lex SeExpr2lex +#define SeExpr2error SeExpr2error +#define SeExpr2lval SeExpr2lval +#define SeExpr2char SeExpr2char +#define SeExpr2debug SeExpr2debug +#define SeExpr2nerrs SeExpr2nerrs +#define SeExpr2lloc SeExpr2lloc + +/* Copy the first part of user declarations. */ +/* Line 371 of yacc.c */ +#line 18 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + +#ifndef MAKEDEPEND +#include +#include +#include +#include +#include +#endif +#include "ExprType.h" +#include "ExprNode.h" +#include "ExprParser.h" +#include "Expression.h" +#include "Mutex.h" + +/****************** + lexer declarations + ******************/ + +// declarations of functions and data in ExprParser.l +int SeExpr2lex(); +int SeExpr2pos(); +extern int SeExpr2_start; +extern char* SeExpr2text; +struct SeExpr2_buffer_state; +SeExpr2_buffer_state* SeExpr2_scan_string(const char *str); +void SeExpr2_delete_buffer(SeExpr2_buffer_state*); + +/******************* + parser declarations + *******************/ + +// forward declaration +static void SeExpr2error(const char* msg); + +// local data +static const char* ParseStr; // string being parsed +static std::string ParseError; // error (set from SeExpr2error) +static SeExpr2::ExprNode* ParseResult; // must set result here since SeExpr2parse can't return it +static const SeExpr2::Expression* Expr;// used for parenting created SeExprOp's + +/* The list of nodes being built is remembered locally here. + Eventually (if there are no syntax errors) ownership of the nodes + will belong solely to the parse tree and the parent expression. + However, if there is a syntax error, we must loop through this list + and free any nodes that were allocated before the error to avoid a + memory leak. */ +static std::vector ParseNodes; +inline SeExpr2::ExprNode* Remember(SeExpr2::ExprNode* n,const int startPos,const int endPos) + { ParseNodes.push_back(n); n->setPosition(startPos,endPos); return n; } +inline void Forget(SeExpr2::ExprNode* n) + { ParseNodes.erase(std::find(ParseNodes.begin(), ParseNodes.end(), n)); } +/* These are handy node constructors for 0-3 arguments */ +#define NODE(startPos,endPos,name) Remember(new SeExpr2::Expr##name(Expr),startPos,endPos) +#define NODE1(startPos,endPos,name,a) Remember(new SeExpr2::Expr##name(Expr,a),startPos,endPos) +#define NODE2(startPos,endPos,name,a,b) Remember(new SeExpr2::Expr##name(Expr,a,b),startPos,endPos) +#define NODE3(startPos,endPos,name,a,b,c) Remember(new SeExpr2::Expr##name(Expr,a,b,c),startPos,endPos) +#define NODE4(startPos,endPos,name,a,b,c,t) Remember(new SeExpr2::Expr##name(Expr,a,b,c,t),startPos,endPos) + +/* Line 371 of yacc.c */ +#line 135 "y.tab.c" + +# ifndef SeExprYY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define SeExprYY_NULL nullptr +# else +# define SeExprYY_NULL 0 +# endif +# endif + +/* Enabling verbose error messages. */ +#ifdef SeExprYYERROR_VERBOSE +# undef SeExprYYERROR_VERBOSE +# define SeExprYYERROR_VERBOSE 1 +#else +# define SeExprYYERROR_VERBOSE 0 +#endif + +/* In a future release of Bison, this section will be replaced + by #include "y.tab.h". */ +#ifndef SeExprYY_SEEXPR2_Y_TAB_H_INCLUDED +# define SeExprYY_SEEXPR2_Y_TAB_H_INCLUDED +/* Enabling traces. */ +#ifndef SeExprYYDEBUG +# define SeExprYYDEBUG 0 +#endif +#if SeExprYYDEBUG +extern int SeExpr2debug; +#endif + +/* Tokens. */ +#ifndef SeExprYYTOKENTYPE +# define SeExprYYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum SeExpr2tokentype { + IF = 258, + ELSE = 259, + EXTERN = 260, + DEF = 261, + FLOATPOINT = 262, + STRING = 263, + NAME = 264, + VAR = 265, + STR = 266, + NUMBER = 267, + LIFETIME_CONSTANT = 268, + LIFETIME_UNIFORM = 269, + LIFETIME_VARYING = 270, + LIFETIME_ERROR = 271, + AddEq = 272, + SubEq = 273, + MultEq = 274, + DivEq = 275, + ExpEq = 276, + ModEq = 277, + ARROW = 278, + OR = 279, + AND = 280, + NE = 281, + EQ = 282, + SEEXPR_GE = 283, + SEEXPR_LE = 284, + UNARY = 285 + }; +#endif +/* Tokens. */ +#define IF 258 +#define ELSE 259 +#define EXTERN 260 +#define DEF 261 +#define FLOATPOINT 262 +#define STRING 263 +#define NAME 264 +#define VAR 265 +#define STR 266 +#define NUMBER 267 +#define LIFETIME_CONSTANT 268 +#define LIFETIME_UNIFORM 269 +#define LIFETIME_VARYING 270 +#define LIFETIME_ERROR 271 +#define AddEq 272 +#define SubEq 273 +#define MultEq 274 +#define DivEq 275 +#define ExpEq 276 +#define ModEq 277 +#define ARROW 278 +#define OR 279 +#define AND 280 +#define NE 281 +#define EQ 282 +#define SEEXPR_GE 283 +#define SEEXPR_LE 284 +#define UNARY 285 + + + +#if ! defined SeExprYYSTYPE && ! defined SeExprYYSTYPE_IS_DECLARED +typedef union SeExprYYSTYPE +{ +/* Line 387 of yacc.c */ +#line 77 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + + SeExpr2::ExprNode* n; /* a node is returned for all non-terminals to + build the parse tree from the leaves up. */ + double d; // return value for number tokens + char* s; /* return value for name tokens. Note: the string + is allocated with strdup() in the lexer and must + be freed with free() */ + struct { + SeExpr2::ExprType::Type type; + int dim; + SeExpr2::ExprType::Lifetime lifetime; + } t; // return value for types + SeExpr2::ExprType::Lifetime l; // return value for lifetime qualifiers + + +/* Line 387 of yacc.c */ +#line 254 "y.tab.c" +} SeExprYYSTYPE; +# define SeExprYYSTYPE_IS_TRIVIAL 1 +# define SeExpr2stype SeExprYYSTYPE /* obsolescent; will be withdrawn */ +# define SeExprYYSTYPE_IS_DECLARED 1 +#endif + +#if ! defined SeExprYYLTYPE && ! defined SeExprYYLTYPE_IS_DECLARED +typedef struct SeExprYYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +} SeExprYYLTYPE; +# define SeExpr2ltype SeExprYYLTYPE /* obsolescent; will be withdrawn */ +# define SeExprYYLTYPE_IS_DECLARED 1 +# define SeExprYYLTYPE_IS_TRIVIAL 1 +#endif + +extern SeExprYYSTYPE SeExpr2lval; +extern SeExprYYLTYPE SeExpr2lloc; +#ifdef SeExprYYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int SeExpr2parse (void *SeExprYYPARSE_PARAM); +#else +int SeExpr2parse (); +#endif +#else /* ! SeExprYYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int SeExpr2parse (void); +#else +int SeExpr2parse (); +#endif +#endif /* ! SeExprYYPARSE_PARAM */ + +#endif /* !SeExprYY_SEEXPR2_Y_TAB_H_INCLUDED */ + +/* Copy the second part of user declarations. */ + +/* Line 390 of yacc.c */ +#line 295 "y.tab.c" + +#ifdef short +# undef short +#endif + +#ifdef SeExprYYTYPE_UINT8 +typedef SeExprYYTYPE_UINT8 SeExpr2type_uint8; +#else +typedef unsigned char SeExpr2type_uint8; +#endif + +#ifdef SeExprYYTYPE_INT8 +typedef SeExprYYTYPE_INT8 SeExpr2type_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char SeExpr2type_int8; +#else +typedef short int SeExpr2type_int8; +#endif + +#ifdef SeExprYYTYPE_UINT16 +typedef SeExprYYTYPE_UINT16 SeExpr2type_uint16; +#else +typedef unsigned short int SeExpr2type_uint16; +#endif + +#ifdef SeExprYYTYPE_INT16 +typedef SeExprYYTYPE_INT16 SeExpr2type_int16; +#else +typedef short int SeExpr2type_int16; +#endif + +#ifndef SeExprYYSIZE_T +# ifdef __SIZE_TYPE__ +# define SeExprYYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define SeExprYYSIZE_T size_t +# elif ! defined SeExprYYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define SeExprYYSIZE_T size_t +# else +# define SeExprYYSIZE_T unsigned int +# endif +#endif + +#define SeExprYYSIZE_MAXIMUM ((SeExprYYSIZE_T) -1) + +#ifndef SeExprYY_ +# if defined SeExprYYENABLE_NLS && SeExprYYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define SeExprYY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef SeExprYY_ +# define SeExprYY_(Msgid) Msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define SeExprYYUSE(E) ((void) (E)) +#else +# define SeExprYYUSE(E) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define SeExprYYID(N) (N) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +SeExprYYID (int SeExpr2i) +#else +static int +SeExprYYID (SeExpr2i) + int SeExpr2i; +#endif +{ + return SeExpr2i; +} +#endif + +#if ! defined SeExpr2overflow || SeExprYYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef SeExprYYSTACK_USE_ALLOCA +# if SeExprYYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define SeExprYYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define SeExprYYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define SeExprYYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef SeExprYYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define SeExprYYSTACK_FREE(Ptr) do { /* empty */; } while (SeExprYYID (0)) +# ifndef SeExprYYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define SeExprYYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define SeExprYYSTACK_ALLOC SeExprYYMALLOC +# define SeExprYYSTACK_FREE SeExprYYFREE +# ifndef SeExprYYSTACK_ALLOC_MAXIMUM +# define SeExprYYSTACK_ALLOC_MAXIMUM SeExprYYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined SeExprYYMALLOC || defined malloc) \ + && (defined SeExprYYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef SeExprYYMALLOC +# define SeExprYYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (SeExprYYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef SeExprYYFREE +# define SeExprYYFREE free +# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined SeExpr2overflow || SeExprYYERROR_VERBOSE */ + + +#if (! defined SeExpr2overflow \ + && (! defined __cplusplus \ + || (defined SeExprYYLTYPE_IS_TRIVIAL && SeExprYYLTYPE_IS_TRIVIAL \ + && defined SeExprYYSTYPE_IS_TRIVIAL && SeExprYYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union SeExpr2alloc +{ + SeExpr2type_int16 SeExpr2ss_alloc; + SeExprYYSTYPE SeExpr2vs_alloc; + SeExprYYLTYPE SeExpr2ls_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define SeExprYYSTACK_GAP_MAXIMUM (sizeof (union SeExpr2alloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define SeExprYYSTACK_BYTES(N) \ + ((N) * (sizeof (SeExpr2type_int16) + sizeof (SeExprYYSTYPE) + sizeof (SeExprYYLTYPE)) \ + + 2 * SeExprYYSTACK_GAP_MAXIMUM) + +# define SeExprYYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables SeExprYYSIZE and SeExprYYSTACKSIZE give the old and new number of + elements in the stack, and SeExprYYPTR gives the new location of the + stack. Advance SeExprYYPTR to a properly aligned location for the next + stack. */ +# define SeExprYYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + SeExprYYSIZE_T SeExpr2newbytes; \ + SeExprYYCOPY (&SeExpr2ptr->Stack_alloc, Stack, SeExpr2size); \ + Stack = &SeExpr2ptr->Stack_alloc; \ + SeExpr2newbytes = SeExpr2stacksize * sizeof (*Stack) + SeExprYYSTACK_GAP_MAXIMUM; \ + SeExpr2ptr += SeExpr2newbytes / sizeof (*SeExpr2ptr); \ + } \ + while (SeExprYYID (0)) + +#endif + +#if defined SeExprYYCOPY_NEEDED && SeExprYYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef SeExprYYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define SeExprYYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define SeExprYYCOPY(Dst, Src, Count) \ + do \ + { \ + SeExprYYSIZE_T SeExpr2i; \ + for (SeExpr2i = 0; SeExpr2i < (Count); SeExpr2i++) \ + (Dst)[SeExpr2i] = (Src)[SeExpr2i]; \ + } \ + while (SeExprYYID (0)) +# endif +# endif +#endif /* !SeExprYYCOPY_NEEDED */ + +/* SeExprYYFINAL -- State number of the termination state. */ +#define SeExprYYFINAL 52 +/* SeExprYYLAST -- Last index in SeExprYYTABLE. */ +#define SeExprYYLAST 691 + +/* SeExprYYNTOKENS -- Number of terminals. */ +#define SeExprYYNTOKENS 52 +/* SeExprYYNNTS -- Number of nonterminals. */ +#define SeExprYYNNTS 21 +/* SeExprYYNRULES -- Number of rules. */ +#define SeExprYYNRULES 84 +/* SeExprYYNRULES -- Number of states. */ +#define SeExprYYNSTATES 187 + +/* SeExprYYTRANSLATE(SeExprYYLEX) -- Bison symbol number corresponding to SeExprYYLEX. */ +#define SeExprYYUNDEFTOK 2 +#define SeExprYYMAXUTOK 285 + +#define SeExprYYTRANSLATE(SeExprYYX) \ + ((unsigned int) (SeExprYYX) <= SeExprYYMAXUTOK ? SeExpr2translate[SeExprYYX] : SeExprYYUNDEFTOK) + +/* SeExprYYTRANSLATE[SeExprYYLEX] -- Bison symbol number corresponding to SeExprYYLEX. */ +static const SeExpr2type_uint8 SeExpr2translate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 41, 2, 2, 2, 40, 2, 2, + 23, 24, 38, 36, 49, 37, 2, 39, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 26, 51, + 32, 50, 33, 27, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 45, 2, 48, 44, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 46, 2, 47, 42, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 25, 28, + 29, 30, 31, 34, 35, 43 +}; + +#if SeExprYYDEBUG +/* SeExprYYPRHS[SeExprYYN] -- Index of the first RHS symbol of rule number SeExprYYN in + SeExprYYRHS. */ +static const SeExpr2type_uint16 SeExpr2prhs[] = +{ + 0, 0, 3, 6, 8, 10, 13, 20, 30, 39, + 40, 42, 44, 46, 48, 51, 57, 60, 61, 63, + 65, 69, 70, 72, 75, 80, 83, 85, 86, 88, + 90, 93, 95, 100, 105, 110, 115, 120, 125, 130, + 135, 140, 145, 150, 155, 160, 165, 174, 175, 180, + 183, 187, 191, 196, 202, 206, 210, 214, 218, 222, + 226, 230, 234, 237, 240, 243, 246, 250, 254, 258, + 262, 266, 270, 275, 282, 284, 286, 288, 290, 292, + 296, 297, 299, 301, 305 +}; + +/* SeExprYYRHS -- A `-1'-separated list of the rules' RHS. */ +static const SeExpr2type_int8 SeExpr2rhs[] = +{ + 53, 0, -1, 54, 62, -1, 62, -1, 55, -1, + 54, 55, -1, 5, 57, 9, 23, 58, 24, -1, + 6, 57, 9, 23, 60, 24, 46, 62, 47, -1, + 6, 9, 23, 60, 24, 46, 62, 47, -1, -1, + 13, -1, 14, -1, 15, -1, 16, -1, 7, 56, + -1, 7, 45, 12, 48, 56, -1, 8, 56, -1, + -1, 59, -1, 57, -1, 59, 49, 57, -1, -1, + 61, -1, 57, 9, -1, 61, 49, 57, 9, -1, + 64, 68, -1, 68, -1, -1, 64, -1, 65, -1, + 64, 65, -1, 66, -1, 10, 50, 68, 51, -1, + 10, 17, 68, 51, -1, 10, 18, 68, 51, -1, + 10, 19, 68, 51, -1, 10, 20, 68, 51, -1, + 10, 21, 68, 51, -1, 10, 22, 68, 51, -1, + 9, 50, 68, 51, -1, 9, 17, 68, 51, -1, + 9, 18, 68, 51, -1, 9, 19, 68, 51, -1, + 9, 20, 68, 51, -1, 9, 21, 68, 51, -1, + 9, 22, 68, 51, -1, 3, 23, 68, 24, 46, + 63, 47, 67, -1, -1, 4, 46, 63, 47, -1, + 4, 66, -1, 23, 68, 24, -1, 45, 69, 48, + -1, 68, 45, 68, 48, -1, 68, 27, 68, 26, + 68, -1, 68, 28, 68, -1, 68, 29, 68, -1, + 68, 31, 68, -1, 68, 30, 68, -1, 68, 32, + 68, -1, 68, 33, 68, -1, 68, 35, 68, -1, + 68, 34, 68, -1, 36, 68, -1, 37, 68, -1, + 41, 68, -1, 42, 68, -1, 68, 36, 68, -1, + 68, 37, 68, -1, 68, 38, 68, -1, 68, 39, + 68, -1, 68, 40, 68, -1, 68, 44, 68, -1, + 9, 23, 70, 24, -1, 68, 25, 9, 23, 70, + 24, -1, 10, -1, 9, -1, 12, -1, 11, -1, + 68, -1, 69, 49, 68, -1, -1, 71, -1, 72, + -1, 71, 49, 72, -1, 68, -1 +}; + +/* SeExprYYRLINE[SeExprYYN] -- source line where rule number SeExprYYN was defined. */ +static const SeExpr2type_uint16 SeExpr2rline[] = +{ + 0, 132, 132, 134, 139, 140, 146, 154, 162, 172, + 173, 174, 175, 176, 180, 183, 188, 194, 195, 199, + 203, 210, 211, 215, 220, 229, 230, 235, 236, 240, + 241, 245, 246, 247, 250, 253, 256, 259, 262, 265, + 266, 269, 272, 275, 278, 281, 287, 292, 293, 294, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 325, 331, 332, 333, 334, 338, 339, + 345, 346, 351, 352, 356 +}; +#endif + +#if SeExprYYDEBUG || SeExprYYERROR_VERBOSE || 0 +/* SeExprYYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at SeExprYYNTOKENS, nonterminals. */ +static const char *const SeExpr2tname[] = +{ + "$end", "error", "$undefined", "IF", "ELSE", "EXTERN", "DEF", + "FLOATPOINT", "STRING", "NAME", "VAR", "STR", "NUMBER", + "LIFETIME_CONSTANT", "LIFETIME_UNIFORM", "LIFETIME_VARYING", + "LIFETIME_ERROR", "AddEq", "SubEq", "MultEq", "DivEq", "ExpEq", "ModEq", + "'('", "')'", "ARROW", "':'", "'?'", "OR", "AND", "NE", "EQ", "'<'", + "'>'", "SEEXPR_GE", "SEEXPR_LE", "'+'", "'-'", "'*'", "'/'", "'%'", + "'!'", "'~'", "UNARY", "'^'", "'['", "'{'", "'}'", "']'", "','", "'='", + "';'", "$accept", "module", "declarationList", "declaration", + "lifetimeOptional", "typeDeclare", "typeListOptional", "typeList", + "formalTypeListOptional", "formalTypeList", "block", "optassigns", + "assigns", "assign", "ifthenelse", "optelse", "e", "exprlist", "optargs", + "args", "arg", SeExprYY_NULL +}; +#endif + +# ifdef SeExprYYPRINT +/* SeExprYYTOKNUM[SeExprYYLEX-NUM] -- Internal token number corresponding to + token SeExprYYLEX-NUM. */ +static const SeExpr2type_uint16 SeExpr2toknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 40, 41, 278, 58, 63, 279, 280, + 281, 282, 60, 62, 283, 284, 43, 45, 42, 47, + 37, 33, 126, 285, 94, 91, 123, 125, 93, 44, + 61, 59 +}; +# endif + +/* SeExprYYR1[SeExprYYN] -- Symbol number of symbol that rule SeExprYYN derives. */ +static const SeExpr2type_uint8 SeExpr2r1[] = +{ + 0, 52, 53, 53, 54, 54, 55, 55, 55, 56, + 56, 56, 56, 56, 57, 57, 57, 58, 58, 59, + 59, 60, 60, 61, 61, 62, 62, 63, 63, 64, + 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 66, 67, 67, 67, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, + 70, 70, 71, 71, 72 +}; + +/* SeExprYYR2[SeExprYYN] -- Number of symbols composing right hand side of rule SeExprYYN. */ +static const SeExpr2type_uint8 SeExpr2r2[] = +{ + 0, 2, 2, 1, 1, 2, 6, 9, 8, 0, + 1, 1, 1, 1, 2, 5, 2, 0, 1, 1, + 3, 0, 1, 2, 4, 2, 1, 0, 1, 1, + 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 8, 0, 4, 2, + 3, 3, 4, 5, 3, 3, 3, 3, 3, 3, + 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, + 3, 3, 4, 6, 1, 1, 1, 1, 1, 3, + 0, 1, 1, 3, 1 +}; + +/* SeExprYYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. + Performed when SeExprYYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const SeExpr2type_uint8 SeExpr2defact[] = +{ + 0, 0, 0, 0, 75, 74, 77, 76, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 3, 0, 29, + 31, 26, 0, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 75, 74, 0, 62, 63, 64, 65, + 78, 0, 1, 5, 2, 30, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 12, 13, 0, + 14, 16, 0, 21, 0, 0, 0, 0, 0, 0, + 0, 84, 0, 81, 82, 0, 0, 0, 0, 0, + 0, 0, 0, 50, 51, 0, 0, 0, 54, 55, + 57, 56, 58, 59, 61, 60, 66, 67, 68, 69, + 70, 71, 0, 0, 0, 17, 0, 0, 22, 21, + 40, 41, 42, 43, 44, 45, 72, 0, 39, 33, + 34, 35, 36, 37, 38, 32, 79, 80, 0, 52, + 27, 9, 19, 0, 18, 23, 0, 0, 0, 83, + 0, 53, 0, 0, 0, 28, 15, 6, 0, 0, + 0, 0, 73, 47, 20, 0, 24, 0, 0, 46, + 8, 0, 27, 49, 7, 0, 48 +}; + +/* SeExprYYDEFGOTO[NTERM-NUM]. */ +static const SeExpr2type_int16 SeExpr2defgoto[] = +{ + -1, 14, 15, 16, 80, 126, 153, 154, 127, 128, + 17, 164, 18, 19, 20, 179, 21, 51, 92, 93, + 94 +}; + +/* SeExprYYPACT[STATE-NUM] -- Index in SeExprYYTABLE of the portion describing + STATE-NUM. */ +#define SeExprYYPACT_NINF -68 +static const SeExpr2type_int16 SeExpr2pact[] = +{ + 67, 0, 4, 90, 24, 31, -68, -68, 84, 84, + 84, 84, 84, 84, 71, 67, -68, -68, 77, -68, + -68, 580, 84, 125, 202, 66, 17, 93, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 82, -68, 516, 40, 40, 40, 40, + 580, 43, -68, -68, -68, -68, 580, 97, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 538, -68, -68, -68, -68, 98, + -68, -68, 88, 4, 94, 144, 169, 194, 219, 244, + 269, 580, 92, 75, -68, 294, 319, 344, 369, 394, + 419, 444, 469, -68, -68, 84, 104, 559, 616, 632, + 646, 646, 109, 109, 109, 109, -23, -23, 40, 40, + 40, 40, 494, 85, 80, 4, 121, 108, 86, 4, + -68, -68, -68, -68, -68, -68, -68, 84, -68, -68, + -68, -68, -68, -68, -68, -68, 580, 84, 84, -68, + 10, 202, -68, 110, 87, -68, 96, 4, 127, -68, + 128, 599, 140, 31, 116, 10, -68, -68, 4, 77, + 156, 122, -68, 163, -68, 138, -68, 77, 36, -68, + -68, 139, 10, -68, -68, 145, -68 +}; + +/* SeExprYYPGOTO[NTERM-NUM]. */ +static const SeExpr2type_int16 SeExpr2pgoto[] = +{ + -68, -68, -68, 172, -14, -2, -68, -68, 62, -68, + -13, 11, -67, -15, 32, -68, -4, -68, 64, -68, + 99 +}; + +/* SeExprYYTABLE[SeExprYYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If SeExprYYTABLE_NINF, syntax error. */ +#define SeExprYYTABLE_NINF -1 +static const SeExpr2type_uint8 SeExpr2table[] = +{ + 25, 27, 54, 55, 45, 46, 47, 48, 49, 50, + 81, 23, 24, 1, 56, 69, 70, 71, 74, 162, + 163, 72, 73, 22, 85, 86, 87, 88, 89, 90, + 91, 95, 96, 97, 98, 99, 100, 101, 102, 1, + 83, 28, 29, 30, 31, 32, 33, 34, 36, 37, + 38, 39, 40, 41, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 1, 52, 2, 3, 35, 82, 4, 5, 6, 7, + 1, 42, 182, 165, 72, 73, 4, 5, 6, 7, + 8, 104, 105, 43, 44, 6, 7, 23, 24, 26, + 8, 146, 84, 9, 10, 34, 106, 8, 11, 12, + 124, 125, 13, 9, 10, 165, 136, 129, 11, 12, + 9, 10, 13, 152, 137, 11, 12, 147, 151, 13, + 155, 150, 156, 91, 167, 157, 168, 166, 75, 76, + 77, 78, 169, 91, 161, 67, 68, 69, 70, 71, + 55, 171, 172, 72, 73, 170, 175, 28, 29, 30, + 31, 32, 33, 173, 181, 176, 174, 178, 177, 57, + 79, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 180, 184, 53, 72, 73, + 35, 158, 186, 185, 57, 130, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 183, 160, 0, 72, 73, 75, 76, 77, 78, 57, + 131, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 0, 159, 0, 72, 73, + 0, 0, 0, 0, 57, 132, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 0, 0, 0, 72, 73, 0, 0, 0, 0, 57, + 133, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 0, 0, 0, 72, 73, + 0, 0, 0, 0, 57, 134, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 0, 0, 0, 72, 73, 0, 0, 0, 0, 57, + 135, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 0, 0, 0, 72, 73, + 0, 0, 0, 0, 57, 138, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 0, 0, 0, 72, 73, 0, 0, 0, 0, 57, + 139, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 0, 0, 0, 72, 73, + 0, 0, 0, 0, 57, 140, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 0, 0, 0, 72, 73, 0, 0, 0, 0, 57, + 141, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 0, 0, 0, 72, 73, + 0, 0, 0, 0, 57, 142, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 0, 0, 0, 72, 73, 0, 0, 0, 0, 57, + 143, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 0, 0, 0, 72, 73, + 0, 0, 0, 0, 57, 144, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 0, 0, 0, 72, 73, 0, 0, 0, 0, 57, + 145, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 0, 0, 0, 72, 73, + 103, 57, 149, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 0, 0, 0, + 72, 73, 123, 57, 0, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 0, + 0, 0, 72, 73, 57, 148, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 0, 0, 0, 72, 73, 57, 0, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 0, 0, 0, 72, 73, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 0, 0, 0, 72, 73, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 0, 0, 0, + 72, 73, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 0, 0, 0, 72, 73, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 0, 0, 0, + 72, 73 +}; + +#define SeExpr2pact_value_is_default(Yystate) \ + (!!((Yystate) == (-68))) + +#define SeExpr2table_value_is_error(Yytable_value) \ + SeExprYYID (0) + +static const SeExpr2type_int16 SeExpr2check[] = +{ + 2, 3, 15, 18, 8, 9, 10, 11, 12, 13, + 24, 7, 8, 3, 18, 38, 39, 40, 22, 9, + 10, 44, 45, 23, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 3, + 23, 17, 18, 19, 20, 21, 22, 23, 17, 18, + 19, 20, 21, 22, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 3, 0, 5, 6, 50, 9, 9, 10, 11, 12, + 3, 50, 46, 150, 44, 45, 9, 10, 11, 12, + 23, 48, 49, 9, 10, 11, 12, 7, 8, 9, + 23, 105, 9, 36, 37, 23, 9, 23, 41, 42, + 12, 23, 45, 36, 37, 182, 24, 23, 41, 42, + 36, 37, 45, 125, 49, 41, 42, 23, 48, 45, + 9, 46, 24, 137, 24, 49, 49, 151, 13, 14, + 15, 16, 46, 147, 148, 36, 37, 38, 39, 40, + 165, 24, 24, 44, 45, 157, 169, 17, 18, 19, + 20, 21, 22, 47, 177, 9, 168, 4, 46, 25, + 45, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 47, 47, 15, 44, 45, + 50, 129, 47, 182, 25, 51, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 178, 147, -1, 44, 45, 13, 14, 15, 16, 25, + 51, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, -1, 137, -1, 44, 45, + -1, -1, -1, -1, 25, 51, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 25, + 51, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 25, 51, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 25, + 51, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 25, 51, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 25, + 51, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 25, 51, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 25, + 51, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 25, 51, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 25, + 51, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 25, 51, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 25, + 51, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + 24, 25, 48, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, + 44, 45, 24, 25, -1, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, -1, + -1, -1, 44, 45, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 44, 45, 25, -1, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, -1, -1, -1, 44, 45, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, -1, -1, 44, 45, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, + 44, 45, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, -1, -1, -1, 44, 45, 32, 33, + 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, + 44, 45 +}; + +/* SeExprYYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const SeExpr2type_uint8 SeExpr2stos[] = +{ + 0, 3, 5, 6, 9, 10, 11, 12, 23, 36, + 37, 41, 42, 45, 53, 54, 55, 62, 64, 65, + 66, 68, 23, 7, 8, 57, 9, 57, 17, 18, + 19, 20, 21, 22, 23, 50, 17, 18, 19, 20, + 21, 22, 50, 9, 10, 68, 68, 68, 68, 68, + 68, 69, 0, 55, 62, 65, 68, 25, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 44, 45, 68, 13, 14, 15, 16, 45, + 56, 56, 9, 23, 9, 68, 68, 68, 68, 68, + 68, 68, 70, 71, 72, 68, 68, 68, 68, 68, + 68, 68, 68, 24, 48, 49, 9, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 24, 12, 23, 57, 60, 61, 23, + 51, 51, 51, 51, 51, 51, 24, 49, 51, 51, + 51, 51, 51, 51, 51, 51, 68, 23, 26, 48, + 46, 48, 57, 58, 59, 9, 24, 49, 60, 72, + 70, 68, 9, 10, 63, 64, 56, 24, 49, 46, + 57, 24, 24, 47, 57, 62, 9, 46, 4, 67, + 47, 62, 46, 66, 47, 63, 47 +}; + +#define SeExpr2errok (SeExpr2errstatus = 0) +#define SeExpr2clearin (SeExpr2char = SeExprYYEMPTY) +#define SeExprYYEMPTY (-2) +#define SeExprYYEOF 0 + +#define SeExprYYACCEPT goto SeExpr2acceptlab +#define SeExprYYABORT goto SeExpr2abortlab +#define SeExprYYERROR goto SeExpr2errorlab + + +/* Like SeExprYYERROR except do call SeExpr2error. This remains here temporarily + to ease the transition to the new meaning of SeExprYYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. However, + SeExprYYFAIL appears to be in use. Nevertheless, it is formally deprecated + in Bison 2.4.2's NEWS entry, where a plan to phase it out is + discussed. */ + +#define SeExprYYFAIL goto SeExpr2errlab +#if defined SeExprYYFAIL + /* This is here to suppress warnings from the GCC cpp's + -Wunused-macros. Normally we don't worry about that warning, but + some users do, and we want to make it easy for users to remove + SeExprYYFAIL uses, which will produce warnings from Bison 2.5. */ +#endif + +#define SeExprYYRECOVERING() (!!SeExpr2errstatus) + +#define SeExprYYBACKUP(Token, Value) \ +do \ + if (SeExpr2char == SeExprYYEMPTY) \ + { \ + SeExpr2char = (Token); \ + SeExpr2lval = (Value); \ + SeExprYYPOPSTACK (SeExpr2len); \ + SeExpr2state = *SeExpr2ssp; \ + goto SeExpr2backup; \ + } \ + else \ + { \ + SeExpr2error (SeExprYY_("syntax error: cannot back up")); \ + SeExprYYERROR; \ + } \ +while (SeExprYYID (0)) + +/* Error token number */ +#define SeExprYYTERROR 1 +#define SeExprYYERRCODE 256 + + +/* SeExprYYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#ifndef SeExprYYLLOC_DEFAULT +# define SeExprYYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (SeExprYYID (N)) \ + { \ + (Current).first_line = SeExprYYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = SeExprYYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = SeExprYYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = SeExprYYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + SeExprYYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + SeExprYYRHSLOC (Rhs, 0).last_column; \ + } \ + while (SeExprYYID (0)) +#endif + +#define SeExprYYRHSLOC(Rhs, K) ((Rhs)[K]) + + +/* SeExprYY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef SeExprYY_LOCATION_PRINT +# if defined SeExprYYLTYPE_IS_TRIVIAL && SeExprYYLTYPE_IS_TRIVIAL + +/* Print *SeExprYYLOCP on SeExprYYO. Private, do not rely on its existence. */ + +__attribute__((__unused__)) +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static unsigned +SeExpr2_location_print_ (FILE *SeExpr2o, SeExprYYLTYPE const * const SeExpr2locp) +#else +static unsigned +SeExpr2_location_print_ (SeExpr2o, SeExpr2locp) + FILE *SeExpr2o; + SeExprYYLTYPE const * const SeExpr2locp; +#endif +{ + unsigned res = 0; + int end_col = 0 != SeExpr2locp->last_column ? SeExpr2locp->last_column - 1 : 0; + if (0 <= SeExpr2locp->first_line) + { + res += fprintf (SeExpr2o, "%d", SeExpr2locp->first_line); + if (0 <= SeExpr2locp->first_column) + res += fprintf (SeExpr2o, ".%d", SeExpr2locp->first_column); + } + if (0 <= SeExpr2locp->last_line) + { + if (SeExpr2locp->first_line < SeExpr2locp->last_line) + { + res += fprintf (SeExpr2o, "-%d", SeExpr2locp->last_line); + if (0 <= end_col) + res += fprintf (SeExpr2o, ".%d", end_col); + } + else if (0 <= end_col && SeExpr2locp->first_column < end_col) + res += fprintf (SeExpr2o, "-%d", end_col); + } + return res; + } + +# define SeExprYY_LOCATION_PRINT(File, Loc) \ + SeExpr2_location_print_ (File, &(Loc)) + +# else +# define SeExprYY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* SeExprYYLEX -- calling `SeExpr2lex' with the right arguments. */ +#ifdef SeExprYYLEX_PARAM +# define SeExprYYLEX SeExpr2lex (SeExprYYLEX_PARAM) +#else +# define SeExprYYLEX SeExpr2lex () +#endif + +/* Enable debugging if requested. */ +#if SeExprYYDEBUG + +# ifndef SeExprYYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define SeExprYYFPRINTF fprintf +# endif + +# define SeExprYYDPRINTF(Args) \ +do { \ + if (SeExpr2debug) \ + SeExprYYFPRINTF Args; \ +} while (SeExprYYID (0)) + +# define SeExprYY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (SeExpr2debug) \ + { \ + SeExprYYFPRINTF (stderr, "%s ", Title); \ + SeExpr2_symbol_print (stderr, \ + Type, Value, Location); \ + SeExprYYFPRINTF (stderr, "\n"); \ + } \ +} while (SeExprYYID (0)) + + +/*--------------------------------. +| Print this symbol on SeExprYYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +SeExpr2_symbol_value_print (FILE *SeExpr2output, int SeExpr2type, SeExprYYSTYPE const * const SeExpr2valuep, SeExprYYLTYPE const * const SeExpr2locationp) +#else +static void +SeExpr2_symbol_value_print (SeExpr2output, SeExpr2type, SeExpr2valuep, SeExpr2locationp) + FILE *SeExpr2output; + int SeExpr2type; + SeExprYYSTYPE const * const SeExpr2valuep; + SeExprYYLTYPE const * const SeExpr2locationp; +#endif +{ + FILE *SeExpr2o = SeExpr2output; + SeExprYYUSE (SeExpr2o); + if (!SeExpr2valuep) + return; + SeExprYYUSE (SeExpr2locationp); +# ifdef SeExprYYPRINT + if (SeExpr2type < SeExprYYNTOKENS) + SeExprYYPRINT (SeExpr2output, SeExpr2toknum[SeExpr2type], *SeExpr2valuep); +# else + SeExprYYUSE (SeExpr2output); +# endif + switch (SeExpr2type) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on SeExprYYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +SeExpr2_symbol_print (FILE *SeExpr2output, int SeExpr2type, SeExprYYSTYPE const * const SeExpr2valuep, SeExprYYLTYPE const * const SeExpr2locationp) +#else +static void +SeExpr2_symbol_print (SeExpr2output, SeExpr2type, SeExpr2valuep, SeExpr2locationp) + FILE *SeExpr2output; + int SeExpr2type; + SeExprYYSTYPE const * const SeExpr2valuep; + SeExprYYLTYPE const * const SeExpr2locationp; +#endif +{ + if (SeExpr2type < SeExprYYNTOKENS) + SeExprYYFPRINTF (SeExpr2output, "token %s (", SeExpr2tname[SeExpr2type]); + else + SeExprYYFPRINTF (SeExpr2output, "nterm %s (", SeExpr2tname[SeExpr2type]); + + SeExprYY_LOCATION_PRINT (SeExpr2output, *SeExpr2locationp); + SeExprYYFPRINTF (SeExpr2output, ": "); + SeExpr2_symbol_value_print (SeExpr2output, SeExpr2type, SeExpr2valuep, SeExpr2locationp); + SeExprYYFPRINTF (SeExpr2output, ")"); +} + +/*------------------------------------------------------------------. +| SeExpr2_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +SeExpr2_stack_print (SeExpr2type_int16 *SeExpr2bottom, SeExpr2type_int16 *SeExpr2top) +#else +static void +SeExpr2_stack_print (SeExpr2bottom, SeExpr2top) + SeExpr2type_int16 *SeExpr2bottom; + SeExpr2type_int16 *SeExpr2top; +#endif +{ + SeExprYYFPRINTF (stderr, "Stack now"); + for (; SeExpr2bottom <= SeExpr2top; SeExpr2bottom++) + { + int SeExpr2bot = *SeExpr2bottom; + SeExprYYFPRINTF (stderr, " %d", SeExpr2bot); + } + SeExprYYFPRINTF (stderr, "\n"); +} + +# define SeExprYY_STACK_PRINT(Bottom, Top) \ +do { \ + if (SeExpr2debug) \ + SeExpr2_stack_print ((Bottom), (Top)); \ +} while (SeExprYYID (0)) + + +/*------------------------------------------------. +| Report that the SeExprYYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +SeExpr2_reduce_print (SeExprYYSTYPE *SeExpr2vsp, SeExprYYLTYPE *SeExpr2lsp, int SeExpr2rule) +#else +static void +SeExpr2_reduce_print (SeExpr2vsp, SeExpr2lsp, SeExpr2rule) + SeExprYYSTYPE *SeExpr2vsp; + SeExprYYLTYPE *SeExpr2lsp; + int SeExpr2rule; +#endif +{ + int SeExpr2nrhs = SeExpr2r2[SeExpr2rule]; + int SeExpr2i; + unsigned long int SeExpr2lno = SeExpr2rline[SeExpr2rule]; + SeExprYYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + SeExpr2rule - 1, SeExpr2lno); + /* The symbols being reduced. */ + for (SeExpr2i = 0; SeExpr2i < SeExpr2nrhs; SeExpr2i++) + { + SeExprYYFPRINTF (stderr, " $%d = ", SeExpr2i + 1); + SeExpr2_symbol_print (stderr, SeExpr2rhs[SeExpr2prhs[SeExpr2rule] + SeExpr2i], + &(SeExpr2vsp[(SeExpr2i + 1) - (SeExpr2nrhs)]) + , &(SeExpr2lsp[(SeExpr2i + 1) - (SeExpr2nrhs)]) ); + SeExprYYFPRINTF (stderr, "\n"); + } +} + +# define SeExprYY_REDUCE_PRINT(Rule) \ +do { \ + if (SeExpr2debug) \ + SeExpr2_reduce_print (SeExpr2vsp, SeExpr2lsp, Rule); \ +} while (SeExprYYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int SeExpr2debug; +#else /* !SeExprYYDEBUG */ +# define SeExprYYDPRINTF(Args) +# define SeExprYY_SYMBOL_PRINT(Title, Type, Value, Location) +# define SeExprYY_STACK_PRINT(Bottom, Top) +# define SeExprYY_REDUCE_PRINT(Rule) +#endif /* !SeExprYYDEBUG */ + + +/* SeExprYYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef SeExprYYINITDEPTH +# define SeExprYYINITDEPTH 200 +#endif + +/* SeExprYYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SeExprYYSTACK_ALLOC_MAXIMUM < SeExprYYSTACK_BYTES (SeExprYYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef SeExprYYMAXDEPTH +# define SeExprYYMAXDEPTH 10000 +#endif + + +#if SeExprYYERROR_VERBOSE + +# ifndef SeExpr2strlen +# if defined __GLIBC__ && defined _STRING_H +# define SeExpr2strlen strlen +# else +/* Return the length of SeExprYYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static SeExprYYSIZE_T +SeExpr2strlen (const char *SeExpr2str) +#else +static SeExprYYSIZE_T +SeExpr2strlen (SeExpr2str) + const char *SeExpr2str; +#endif +{ + SeExprYYSIZE_T SeExpr2len; + for (SeExpr2len = 0; SeExpr2str[SeExpr2len]; SeExpr2len++) + continue; + return SeExpr2len; +} +# endif +# endif + +# ifndef SeExpr2stpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define SeExpr2stpcpy stpcpy +# else +/* Copy SeExprYYSRC to SeExprYYDEST, returning the address of the terminating '\0' in + SeExprYYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +SeExpr2stpcpy (char *SeExpr2dest, const char *SeExpr2src) +#else +static char * +SeExpr2stpcpy (SeExpr2dest, SeExpr2src) + char *SeExpr2dest; + const char *SeExpr2src; +#endif +{ + char *SeExpr2d = SeExpr2dest; + const char *SeExpr2s = SeExpr2src; + + while ((*SeExpr2d++ = *SeExpr2s++) != '\0') + continue; + + return SeExpr2d - 1; +} +# endif +# endif + +# ifndef SeExpr2tnamerr +/* Copy to SeExprYYRES the contents of SeExprYYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for SeExpr2error. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). SeExprYYSTR is taken from SeExpr2tname. If SeExprYYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static SeExprYYSIZE_T +SeExpr2tnamerr (char *SeExpr2res, const char *SeExpr2str) +{ + if (*SeExpr2str == '"') + { + SeExprYYSIZE_T SeExpr2n = 0; + char const *SeExpr2p = SeExpr2str; + + for (;;) + switch (*++SeExpr2p) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++SeExpr2p != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (SeExpr2res) + SeExpr2res[SeExpr2n] = *SeExpr2p; + SeExpr2n++; + break; + + case '"': + if (SeExpr2res) + SeExpr2res[SeExpr2n] = '\0'; + return SeExpr2n; + } + do_not_strip_quotes: ; + } + + if (! SeExpr2res) + return SeExpr2strlen (SeExpr2str); + + return SeExpr2stpcpy (SeExpr2res, SeExpr2str) - SeExpr2res; +} +# endif + +/* Copy into *SeExprYYMSG, which is of size *SeExprYYMSG_ALLOC, an error message + about the unexpected token SeExprYYTOKEN for the state stack whose top is + SeExprYYSSP. + + Return 0 if *SeExprYYMSG was successfully written. Return 1 if *SeExprYYMSG is + not large enough to hold the message. In that case, also set + *SeExprYYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +SeExpr2syntax_error (SeExprYYSIZE_T *SeExpr2msg_alloc, char **SeExpr2msg, + SeExpr2type_int16 *SeExpr2ssp, int SeExpr2token) +{ + SeExprYYSIZE_T SeExpr2size0 = SeExpr2tnamerr (SeExprYY_NULL, SeExpr2tname[SeExpr2token]); + SeExprYYSIZE_T SeExpr2size = SeExpr2size0; + enum { SeExprYYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *SeExpr2format = SeExprYY_NULL; + /* Arguments of SeExpr2format. */ + char const *SeExpr2arg[SeExprYYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int SeExpr2count = 0; + + /* There are many possibilities here to consider: + - Assume SeExprYYFAIL is not used. It's too flawed to consider. See + + for details. SeExprYYERROR is fine as it does not invoke this + function. + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in SeExpr2char) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated SeExpr2char. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (SeExpr2token != SeExprYYEMPTY) + { + int SeExpr2n = SeExpr2pact[*SeExpr2ssp]; + SeExpr2arg[SeExpr2count++] = SeExpr2tname[SeExpr2token]; + if (!SeExpr2pact_value_is_default (SeExpr2n)) + { + /* Start SeExprYYX at -SeExprYYN if negative to avoid negative indexes in + SeExprYYCHECK. In other words, skip the first -SeExprYYN actions for + this state because they are default actions. */ + int SeExpr2xbegin = SeExpr2n < 0 ? -SeExpr2n : 0; + /* Stay within bounds of both SeExpr2check and SeExpr2tname. */ + int SeExpr2checklim = SeExprYYLAST - SeExpr2n + 1; + int SeExpr2xend = SeExpr2checklim < SeExprYYNTOKENS ? SeExpr2checklim : SeExprYYNTOKENS; + int SeExpr2x; + + for (SeExpr2x = SeExpr2xbegin; SeExpr2x < SeExpr2xend; ++SeExpr2x) + if (SeExpr2check[SeExpr2x + SeExpr2n] == SeExpr2x && SeExpr2x != SeExprYYTERROR + && !SeExpr2table_value_is_error (SeExpr2table[SeExpr2x + SeExpr2n])) + { + if (SeExpr2count == SeExprYYERROR_VERBOSE_ARGS_MAXIMUM) + { + SeExpr2count = 1; + SeExpr2size = SeExpr2size0; + break; + } + SeExpr2arg[SeExpr2count++] = SeExpr2tname[SeExpr2x]; + { + SeExprYYSIZE_T SeExpr2size1 = SeExpr2size + SeExpr2tnamerr (SeExprYY_NULL, SeExpr2tname[SeExpr2x]); + if (! (SeExpr2size <= SeExpr2size1 + && SeExpr2size1 <= SeExprYYSTACK_ALLOC_MAXIMUM)) + return 2; + SeExpr2size = SeExpr2size1; + } + } + } + } + + switch (SeExpr2count) + { +# define SeExprYYCASE_(N, S) \ + case N: \ + SeExpr2format = S; \ + break + SeExprYYCASE_(0, SeExprYY_("syntax error")); + SeExprYYCASE_(1, SeExprYY_("syntax error, unexpected %s")); + SeExprYYCASE_(2, SeExprYY_("syntax error, unexpected %s, expecting %s")); + SeExprYYCASE_(3, SeExprYY_("syntax error, unexpected %s, expecting %s or %s")); + SeExprYYCASE_(4, SeExprYY_("syntax error, unexpected %s, expecting %s or %s or %s")); + SeExprYYCASE_(5, SeExprYY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef SeExprYYCASE_ + } + + { + SeExprYYSIZE_T SeExpr2size1 = SeExpr2size + SeExpr2strlen (SeExpr2format); + if (! (SeExpr2size <= SeExpr2size1 && SeExpr2size1 <= SeExprYYSTACK_ALLOC_MAXIMUM)) + return 2; + SeExpr2size = SeExpr2size1; + } + + if (*SeExpr2msg_alloc < SeExpr2size) + { + *SeExpr2msg_alloc = 2 * SeExpr2size; + if (! (SeExpr2size <= *SeExpr2msg_alloc + && *SeExpr2msg_alloc <= SeExprYYSTACK_ALLOC_MAXIMUM)) + *SeExpr2msg_alloc = SeExprYYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *SeExpr2p = *SeExpr2msg; + int SeExpr2i = 0; + while ((*SeExpr2p = *SeExpr2format) != '\0') + if (*SeExpr2p == '%' && SeExpr2format[1] == 's' && SeExpr2i < SeExpr2count) + { + SeExpr2p += SeExpr2tnamerr (SeExpr2p, SeExpr2arg[SeExpr2i++]); + SeExpr2format += 2; + } + else + { + SeExpr2p++; + SeExpr2format++; + } + } + return 0; +} +#endif /* SeExprYYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +SeExpr2destruct (const char *SeExpr2msg, int SeExpr2type, SeExprYYSTYPE *SeExpr2valuep, SeExprYYLTYPE *SeExpr2locationp) +#else +static void +SeExpr2destruct (SeExpr2msg, SeExpr2type, SeExpr2valuep, SeExpr2locationp) + const char *SeExpr2msg; + int SeExpr2type; + SeExprYYSTYPE *SeExpr2valuep; + SeExprYYLTYPE *SeExpr2locationp; +#endif +{ + SeExprYYUSE (SeExpr2valuep); + SeExprYYUSE (SeExpr2locationp); + + if (!SeExpr2msg) + SeExpr2msg = "Deleting"; + SeExprYY_SYMBOL_PRINT (SeExpr2msg, SeExpr2type, SeExpr2valuep, SeExpr2locationp); + + switch (SeExpr2type) + { + + default: + break; + } +} + + + + +/* The lookahead symbol. */ +int SeExpr2char; + + +#ifndef SeExprYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define SeExprYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define SeExprYY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef SeExprYY_INITIAL_VALUE +# define SeExprYY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +/* The semantic value of the lookahead symbol. */ +SeExprYYSTYPE SeExpr2lval SeExprYY_INITIAL_VALUE(SeExpr2val_default); + +/* Location data for the lookahead symbol. */ +SeExprYYLTYPE SeExpr2lloc +# if defined SeExprYYLTYPE_IS_TRIVIAL && SeExprYYLTYPE_IS_TRIVIAL + = { 1, 1, 1, 1 } +# endif +; + + +/* Number of syntax errors so far. */ +int SeExpr2nerrs; + + +/*----------. +| SeExpr2parse. | +`----------*/ + +#ifdef SeExprYYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +SeExpr2parse (void *SeExprYYPARSE_PARAM) +#else +int +SeExpr2parse (SeExprYYPARSE_PARAM) + void *SeExprYYPARSE_PARAM; +#endif +#else /* ! SeExprYYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +SeExpr2parse (void) +#else +int +SeExpr2parse () + +#endif +#endif +{ + int SeExpr2state; + /* Number of tokens to shift before error messages enabled. */ + int SeExpr2errstatus; + + /* The stacks and their tools: + `SeExpr2ss': related to states. + `SeExpr2vs': related to semantic values. + `SeExpr2ls': related to locations. + + Refer to the stacks through separate pointers, to allow SeExpr2overflow + to reallocate them elsewhere. */ + + /* The state stack. */ + SeExpr2type_int16 SeExpr2ssa[SeExprYYINITDEPTH]; + SeExpr2type_int16 *SeExpr2ss; + SeExpr2type_int16 *SeExpr2ssp; + + /* The semantic value stack. */ + SeExprYYSTYPE SeExpr2vsa[SeExprYYINITDEPTH]; + SeExprYYSTYPE *SeExpr2vs; + SeExprYYSTYPE *SeExpr2vsp; + + /* The location stack. */ + SeExprYYLTYPE SeExpr2lsa[SeExprYYINITDEPTH]; + SeExprYYLTYPE *SeExpr2ls; + SeExprYYLTYPE *SeExpr2lsp; + + /* The locations where the error started and ended. */ + SeExprYYLTYPE SeExpr2error_range[3]; + + SeExprYYSIZE_T SeExpr2stacksize; + + int SeExpr2n; + int SeExpr2result; + /* Lookahead token as an internal (translated) token number. */ + int SeExpr2token = 0; + /* The variables used to return semantic value and location from the + action routines. */ + SeExprYYSTYPE SeExpr2val; + SeExprYYLTYPE SeExpr2loc; + +#if SeExprYYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char SeExpr2msgbuf[128]; + char *SeExpr2msg = SeExpr2msgbuf; + SeExprYYSIZE_T SeExpr2msg_alloc = sizeof SeExpr2msgbuf; +#endif + +#define SeExprYYPOPSTACK(N) (SeExpr2vsp -= (N), SeExpr2ssp -= (N), SeExpr2lsp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int SeExpr2len = 0; + + SeExpr2ssp = SeExpr2ss = SeExpr2ssa; + SeExpr2vsp = SeExpr2vs = SeExpr2vsa; + SeExpr2lsp = SeExpr2ls = SeExpr2lsa; + SeExpr2stacksize = SeExprYYINITDEPTH; + + SeExprYYDPRINTF ((stderr, "Starting parse\n")); + + SeExpr2state = 0; + SeExpr2errstatus = 0; + SeExpr2nerrs = 0; + SeExpr2char = SeExprYYEMPTY; /* Cause a token to be read. */ + SeExpr2lsp[0] = SeExpr2lloc; + goto SeExpr2setstate; + +/*------------------------------------------------------------. +| SeExpr2newstate -- Push a new state, which is found in SeExpr2state. | +`------------------------------------------------------------*/ + SeExpr2newstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + SeExpr2ssp++; + + SeExpr2setstate: + *SeExpr2ssp = SeExpr2state; + + if (SeExpr2ss + SeExpr2stacksize - 1 <= SeExpr2ssp) + { + /* Get the current used size of the three stacks, in elements. */ + SeExprYYSIZE_T SeExpr2size = SeExpr2ssp - SeExpr2ss + 1; + +#ifdef SeExpr2overflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + SeExprYYSTYPE *SeExpr2vs1 = SeExpr2vs; + SeExpr2type_int16 *SeExpr2ss1 = SeExpr2ss; + SeExprYYLTYPE *SeExpr2ls1 = SeExpr2ls; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if SeExpr2overflow is a macro. */ + SeExpr2overflow (SeExprYY_("memory exhausted"), + &SeExpr2ss1, SeExpr2size * sizeof (*SeExpr2ssp), + &SeExpr2vs1, SeExpr2size * sizeof (*SeExpr2vsp), + &SeExpr2ls1, SeExpr2size * sizeof (*SeExpr2lsp), + &SeExpr2stacksize); + + SeExpr2ls = SeExpr2ls1; + SeExpr2ss = SeExpr2ss1; + SeExpr2vs = SeExpr2vs1; + } +#else /* no SeExpr2overflow */ +# ifndef SeExprYYSTACK_RELOCATE + goto SeExpr2exhaustedlab; +# else + /* Extend the stack our own way. */ + if (SeExprYYMAXDEPTH <= SeExpr2stacksize) + goto SeExpr2exhaustedlab; + SeExpr2stacksize *= 2; + if (SeExprYYMAXDEPTH < SeExpr2stacksize) + SeExpr2stacksize = SeExprYYMAXDEPTH; + + { + SeExpr2type_int16 *SeExpr2ss1 = SeExpr2ss; + union SeExpr2alloc *SeExpr2ptr = + (union SeExpr2alloc *) SeExprYYSTACK_ALLOC (SeExprYYSTACK_BYTES (SeExpr2stacksize)); + if (! SeExpr2ptr) + goto SeExpr2exhaustedlab; + SeExprYYSTACK_RELOCATE (SeExpr2ss_alloc, SeExpr2ss); + SeExprYYSTACK_RELOCATE (SeExpr2vs_alloc, SeExpr2vs); + SeExprYYSTACK_RELOCATE (SeExpr2ls_alloc, SeExpr2ls); +# undef SeExprYYSTACK_RELOCATE + if (SeExpr2ss1 != SeExpr2ssa) + SeExprYYSTACK_FREE (SeExpr2ss1); + } +# endif +#endif /* no SeExpr2overflow */ + + SeExpr2ssp = SeExpr2ss + SeExpr2size - 1; + SeExpr2vsp = SeExpr2vs + SeExpr2size - 1; + SeExpr2lsp = SeExpr2ls + SeExpr2size - 1; + + SeExprYYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) SeExpr2stacksize)); + + if (SeExpr2ss + SeExpr2stacksize - 1 <= SeExpr2ssp) + SeExprYYABORT; + } + + SeExprYYDPRINTF ((stderr, "Entering state %d\n", SeExpr2state)); + + if (SeExpr2state == SeExprYYFINAL) + SeExprYYACCEPT; + + goto SeExpr2backup; + +/*-----------. +| SeExpr2backup. | +`-----------*/ +SeExpr2backup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + SeExpr2n = SeExpr2pact[SeExpr2state]; + if (SeExpr2pact_value_is_default (SeExpr2n)) + goto SeExpr2default; + + /* Not known => get a lookahead token if don't already have one. */ + + /* SeExprYYCHAR is either SeExprYYEMPTY or SeExprYYEOF or a valid lookahead symbol. */ + if (SeExpr2char == SeExprYYEMPTY) + { + SeExprYYDPRINTF ((stderr, "Reading a token: ")); + SeExpr2char = SeExprYYLEX; + } + + if (SeExpr2char <= SeExprYYEOF) + { + SeExpr2char = SeExpr2token = SeExprYYEOF; + SeExprYYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + SeExpr2token = SeExprYYTRANSLATE (SeExpr2char); + SeExprYY_SYMBOL_PRINT ("Next token is", SeExpr2token, &SeExpr2lval, &SeExpr2lloc); + } + + /* If the proper action on seeing token SeExprYYTOKEN is to reduce or to + detect an error, take that action. */ + SeExpr2n += SeExpr2token; + if (SeExpr2n < 0 || SeExprYYLAST < SeExpr2n || SeExpr2check[SeExpr2n] != SeExpr2token) + goto SeExpr2default; + SeExpr2n = SeExpr2table[SeExpr2n]; + if (SeExpr2n <= 0) + { + if (SeExpr2table_value_is_error (SeExpr2n)) + goto SeExpr2errlab; + SeExpr2n = -SeExpr2n; + goto SeExpr2reduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (SeExpr2errstatus) + SeExpr2errstatus--; + + /* Shift the lookahead token. */ + SeExprYY_SYMBOL_PRINT ("Shifting", SeExpr2token, &SeExpr2lval, &SeExpr2lloc); + + /* Discard the shifted token. */ + SeExpr2char = SeExprYYEMPTY; + + SeExpr2state = SeExpr2n; + SeExprYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++SeExpr2vsp = SeExpr2lval; + SeExprYY_IGNORE_MAYBE_UNINITIALIZED_END + *++SeExpr2lsp = SeExpr2lloc; + goto SeExpr2newstate; + + +/*-----------------------------------------------------------. +| SeExpr2default -- do the default action for the current state. | +`-----------------------------------------------------------*/ +SeExpr2default: + SeExpr2n = SeExpr2defact[SeExpr2state]; + if (SeExpr2n == 0) + goto SeExpr2errlab; + goto SeExpr2reduce; + + +/*-----------------------------. +| SeExpr2reduce -- Do a reduction. | +`-----------------------------*/ +SeExpr2reduce: + /* SeExpr2n is the number of a rule to reduce with. */ + SeExpr2len = SeExpr2r2[SeExpr2n]; + + /* If SeExprYYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets SeExprYYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to SeExprYYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that SeExprYYVAL may be used uninitialized. */ + SeExpr2val = SeExpr2vsp[1-SeExpr2len]; + + /* Default location. */ + SeExprYYLLOC_DEFAULT (SeExpr2loc, (SeExpr2lsp - SeExpr2len), SeExpr2len); + SeExprYY_REDUCE_PRINT (SeExpr2n); + switch (SeExpr2n) + { + case 2: +/* Line 1792 of yacc.c */ +#line 132 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { ParseResult = (SeExpr2vsp[(1) - (2)].n); ParseResult->setPosition((SeExpr2loc).first_column, (SeExpr2loc).last_column); + ParseResult->addChild((SeExpr2vsp[(2) - (2)].n)); } + break; + + case 3: +/* Line 1792 of yacc.c */ +#line 134 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { ParseResult = NODE((SeExpr2loc).first_column, (SeExpr2loc).last_column, ModuleNode); + ParseResult->addChild((SeExpr2vsp[(1) - (1)].n)); } + break; + + case 4: +/* Line 1792 of yacc.c */ +#line 139 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE((SeExpr2loc).first_column, (SeExpr2loc).last_column, ModuleNode); (SeExpr2val.n)->addChild((SeExpr2vsp[(1) - (1)].n)); } + break; + + case 5: +/* Line 1792 of yacc.c */ +#line 141 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (2)].n); (SeExpr2val.n)->setPosition((SeExpr2loc).first_column, (SeExpr2loc).last_column); + (SeExpr2val.n)->addChild((SeExpr2vsp[(2) - (2)].n)); } + break; + + case 6: +/* Line 1792 of yacc.c */ +#line 147 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { SeExpr2::ExprType type = SeExpr2::ExprType((SeExpr2vsp[(2) - (6)].t).type, (SeExpr2vsp[(2) - (6)].t).dim, (SeExpr2vsp[(2) - (6)].t).lifetime); + SeExpr2::ExprPrototypeNode * prototype = + (SeExpr2::ExprPrototypeNode*)NODE2((SeExpr2loc).first_column, (SeExpr2loc).last_column, PrototypeNode, (SeExpr2vsp[(3) - (6)].s), type); + prototype->addArgTypes((SeExpr2vsp[(5) - (6)].n)); + Forget((SeExpr2vsp[(5) - (6)].n)); + (SeExpr2val.n) = prototype; + free((SeExpr2vsp[(3) - (6)].s)); } + break; + + case 7: +/* Line 1792 of yacc.c */ +#line 155 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { SeExpr2::ExprType type = SeExpr2::ExprType((SeExpr2vsp[(2) - (9)].t).type, (SeExpr2vsp[(2) - (9)].t).dim, (SeExpr2vsp[(2) - (9)].t).lifetime); + SeExpr2::ExprPrototypeNode * prototype = + (SeExpr2::ExprPrototypeNode*)NODE2((SeExpr2loc).first_column, (SeExpr2lsp[(6) - (9)]).last_column, PrototypeNode, (SeExpr2vsp[(3) - (9)].s), type); + prototype->addArgs((SeExpr2vsp[(5) - (9)].n)); + Forget((SeExpr2vsp[(5) - (9)].n)); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column, (SeExpr2loc).last_column, LocalFunctionNode, prototype, (SeExpr2vsp[(8) - (9)].n)); + free((SeExpr2vsp[(3) - (9)].s)); } + break; + + case 8: +/* Line 1792 of yacc.c */ +#line 163 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { SeExpr2::ExprPrototypeNode * prototype = + (SeExpr2::ExprPrototypeNode*)NODE1((SeExpr2loc).first_column, (SeExpr2lsp[(5) - (8)]).last_column, PrototypeNode, (SeExpr2vsp[(2) - (8)].s)); + prototype->addArgs((SeExpr2vsp[(4) - (8)].n)); + Forget((SeExpr2vsp[(4) - (8)].n)); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column, (SeExpr2loc).last_column, LocalFunctionNode, prototype, (SeExpr2vsp[(7) - (8)].n)); + free((SeExpr2vsp[(2) - (8)].s)); } + break; + + case 9: +/* Line 1792 of yacc.c */ +#line 172 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.l) = SeExpr2::ExprType::ltVARYING; } + break; + + case 10: +/* Line 1792 of yacc.c */ +#line 173 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.l) = SeExpr2::ExprType::ltCONSTANT; } + break; + + case 11: +/* Line 1792 of yacc.c */ +#line 174 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.l) = SeExpr2::ExprType::ltUNIFORM; } + break; + + case 12: +/* Line 1792 of yacc.c */ +#line 175 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.l) = SeExpr2::ExprType::ltVARYING; } + break; + + case 13: +/* Line 1792 of yacc.c */ +#line 176 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.l) = SeExpr2::ExprType::ltERROR; } + break; + + case 14: +/* Line 1792 of yacc.c */ +#line 180 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {(SeExpr2val.t).type = SeExpr2::ExprType::tFP; + (SeExpr2val.t).dim = 1; + (SeExpr2val.t).lifetime = (SeExpr2vsp[(2) - (2)].l); } + break; + + case 15: +/* Line 1792 of yacc.c */ +#line 184 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.t).type = ((SeExpr2vsp[(3) - (5)].d) > 0 ? SeExpr2::ExprType::tFP : SeExpr2::ExprType::tERROR); + //TODO: This causes an error but does not report it to user. Change this. + (SeExpr2val.t).dim = ((SeExpr2vsp[(3) - (5)].d) > 0 ? (SeExpr2vsp[(3) - (5)].d) : 0); + (SeExpr2val.t).lifetime = (SeExpr2vsp[(5) - (5)].l); } + break; + + case 16: +/* Line 1792 of yacc.c */ +#line 188 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.t).type = SeExpr2::ExprType::tSTRING; + (SeExpr2val.t).dim = 1; + (SeExpr2val.t).lifetime = (SeExpr2vsp[(2) - (2)].l); } + break; + + case 17: +/* Line 1792 of yacc.c */ +#line 194 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE((SeExpr2loc).first_column, (SeExpr2loc).last_column, Node); } + break; + + case 18: +/* Line 1792 of yacc.c */ +#line 195 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (1)].n); } + break; + + case 19: +/* Line 1792 of yacc.c */ +#line 199 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE((SeExpr2loc).first_column, (SeExpr2loc).last_column, Node); + SeExpr2::ExprType type = SeExpr2::ExprType((SeExpr2vsp[(1) - (1)].t).type, (SeExpr2vsp[(1) - (1)].t).dim, (SeExpr2vsp[(1) - (1)].t).lifetime); + SeExpr2::ExprNode* varNode = NODE2((SeExpr2loc).first_column, (SeExpr2loc).last_column, VarNode, 0, type); + (SeExpr2val.n)->addChild(varNode); } + break; + + case 20: +/* Line 1792 of yacc.c */ +#line 203 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (3)].n); + SeExpr2::ExprType type = SeExpr2::ExprType((SeExpr2vsp[(3) - (3)].t).type, (SeExpr2vsp[(3) - (3)].t).dim, (SeExpr2vsp[(3) - (3)].t).lifetime); + SeExpr2::ExprNode* varNode = NODE2((SeExpr2lsp[(3) - (3)]).first_column, (SeExpr2lsp[(3) - (3)]).last_column, VarNode, 0, type); + (SeExpr2val.n)->addChild(varNode); } + break; + + case 21: +/* Line 1792 of yacc.c */ +#line 210 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE((SeExpr2loc).first_column, (SeExpr2loc).last_column, Node); } + break; + + case 22: +/* Line 1792 of yacc.c */ +#line 211 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (1)].n); } + break; + + case 23: +/* Line 1792 of yacc.c */ +#line 215 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE((SeExpr2loc).first_column, (SeExpr2loc).last_column, Node); + SeExpr2::ExprType type = SeExpr2::ExprType((SeExpr2vsp[(1) - (2)].t).type, (SeExpr2vsp[(1) - (2)].t).dim, (SeExpr2vsp[(1) - (2)].t).lifetime); + SeExpr2::ExprNode* varNode = NODE2((SeExpr2loc).first_column, (SeExpr2loc).last_column, VarNode, (SeExpr2vsp[(2) - (2)].s), type); + (SeExpr2val.n)->addChild(varNode); + free((SeExpr2vsp[(2) - (2)].s)); } + break; + + case 24: +/* Line 1792 of yacc.c */ +#line 221 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (4)].n); + SeExpr2::ExprType type = SeExpr2::ExprType((SeExpr2vsp[(3) - (4)].t).type, (SeExpr2vsp[(3) - (4)].t).dim, (SeExpr2vsp[(3) - (4)].t).lifetime); + SeExpr2::ExprNode* varNode = NODE2((SeExpr2lsp[(3) - (4)]).first_column, (SeExpr2lsp[(4) - (4)]).last_column, VarNode, (SeExpr2vsp[(4) - (4)].s), type); + (SeExpr2val.n)->addChild(varNode); + free((SeExpr2vsp[(4) - (4)].s)); } + break; + + case 25: +/* Line 1792 of yacc.c */ +#line 229 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,BlockNode, (SeExpr2vsp[(1) - (2)].n), (SeExpr2vsp[(2) - (2)].n)); } + break; + + case 26: +/* Line 1792 of yacc.c */ +#line 230 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (1)].n); } + break; + + case 27: +/* Line 1792 of yacc.c */ +#line 235 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE((SeExpr2loc).first_column,(SeExpr2loc).last_column,Node); /* create empty node */; } + break; + + case 28: +/* Line 1792 of yacc.c */ +#line 236 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (1)].n); } + break; + + case 29: +/* Line 1792 of yacc.c */ +#line 240 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,Node, (SeExpr2vsp[(1) - (1)].n)); /* create var list */} + break; + + case 30: +/* Line 1792 of yacc.c */ +#line 241 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (2)].n); (SeExpr2vsp[(1) - (2)].n)->addChild((SeExpr2vsp[(2) - (2)].n)); /* add to list */} + break; + + case 31: +/* Line 1792 of yacc.c */ +#line 245 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (1)].n); } + break; + + case 32: +/* Line 1792 of yacc.c */ +#line 246 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), (SeExpr2vsp[(3) - (4)].n)); free((SeExpr2vsp[(1) - (4)].s)); } + break; + + case 33: +/* Line 1792 of yacc.c */ +#line 247 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'+'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 34: +/* Line 1792 of yacc.c */ +#line 250 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'-'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 35: +/* Line 1792 of yacc.c */ +#line 253 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'*'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 36: +/* Line 1792 of yacc.c */ +#line 256 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'/'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 37: +/* Line 1792 of yacc.c */ +#line 259 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'^'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 38: +/* Line 1792 of yacc.c */ +#line 262 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'%'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 39: +/* Line 1792 of yacc.c */ +#line 265 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), (SeExpr2vsp[(3) - (4)].n)); free((SeExpr2vsp[(1) - (4)].s)); } + break; + + case 40: +/* Line 1792 of yacc.c */ +#line 266 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'+'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 41: +/* Line 1792 of yacc.c */ +#line 269 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'-'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 42: +/* Line 1792 of yacc.c */ +#line 272 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'*'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 43: +/* Line 1792 of yacc.c */ +#line 275 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'/'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 44: +/* Line 1792 of yacc.c */ +#line 278 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'^'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 45: +/* Line 1792 of yacc.c */ +#line 281 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + {SeExpr2::ExprNode* varNode=NODE1((SeExpr2lsp[(1) - (4)]).first_column,(SeExpr2lsp[(1) - (4)]).first_column,VarNode, (SeExpr2vsp[(1) - (4)].s)); + SeExpr2::ExprNode* opNode=NODE3((SeExpr2lsp[(3) - (4)]).first_column,(SeExpr2lsp[(3) - (4)]).first_column,BinaryOpNode,varNode,(SeExpr2vsp[(3) - (4)].n),'%'); + (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,AssignNode, (SeExpr2vsp[(1) - (4)].s), opNode);free((SeExpr2vsp[(1) - (4)].s));} + break; + + case 46: +/* Line 1792 of yacc.c */ +#line 288 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,IfThenElseNode, (SeExpr2vsp[(3) - (8)].n), (SeExpr2vsp[(6) - (8)].n), (SeExpr2vsp[(8) - (8)].n)); } + break; + + case 47: +/* Line 1792 of yacc.c */ +#line 292 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE((SeExpr2loc).first_column,(SeExpr2loc).last_column,Node); /* create empty node */ } + break; + + case 48: +/* Line 1792 of yacc.c */ +#line 293 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(3) - (4)].n); } + break; + + case 49: +/* Line 1792 of yacc.c */ +#line 294 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(2) - (2)].n); } + break; + + case 50: +/* Line 1792 of yacc.c */ +#line 299 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(2) - (3)].n); } + break; + + case 51: +/* Line 1792 of yacc.c */ +#line 300 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { SeExpr2::ExprNode* newNode = NODE((SeExpr2loc).first_column,(SeExpr2loc).last_column,VecNode); newNode->addChildren((SeExpr2vsp[(2) - (3)].n)); Forget((SeExpr2vsp[(2) - (3)].n)); (SeExpr2val.n)=newNode;} + break; + + case 52: +/* Line 1792 of yacc.c */ +#line 301 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,SubscriptNode, (SeExpr2vsp[(1) - (4)].n), (SeExpr2vsp[(3) - (4)].n)); } + break; + + case 53: +/* Line 1792 of yacc.c */ +#line 302 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CondNode, (SeExpr2vsp[(1) - (5)].n), (SeExpr2vsp[(3) - (5)].n), (SeExpr2vsp[(5) - (5)].n)); } + break; + + case 54: +/* Line 1792 of yacc.c */ +#line 303 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CompareNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n), '|'); } + break; + + case 55: +/* Line 1792 of yacc.c */ +#line 304 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CompareNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n), '&'); } + break; + + case 56: +/* Line 1792 of yacc.c */ +#line 305 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CompareEqNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n),'='); } + break; + + case 57: +/* Line 1792 of yacc.c */ +#line 306 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CompareEqNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n),'!'); } + break; + + case 58: +/* Line 1792 of yacc.c */ +#line 307 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CompareNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n),'<'); } + break; + + case 59: +/* Line 1792 of yacc.c */ +#line 308 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CompareNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n),'>'); } + break; + + case 60: +/* Line 1792 of yacc.c */ +#line 309 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CompareNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n),'l'); } + break; + + case 61: +/* Line 1792 of yacc.c */ +#line 310 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,CompareNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n),'g'); } + break; + + case 62: +/* Line 1792 of yacc.c */ +#line 311 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(2) - (2)].n); } + break; + + case 63: +/* Line 1792 of yacc.c */ +#line 312 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,UnaryOpNode, (SeExpr2vsp[(2) - (2)].n), '-'); } + break; + + case 64: +/* Line 1792 of yacc.c */ +#line 313 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,UnaryOpNode, (SeExpr2vsp[(2) - (2)].n), '!'); } + break; + + case 65: +/* Line 1792 of yacc.c */ +#line 314 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE2((SeExpr2loc).first_column,(SeExpr2loc).last_column,UnaryOpNode, (SeExpr2vsp[(2) - (2)].n), '~'); } + break; + + case 66: +/* Line 1792 of yacc.c */ +#line 315 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,BinaryOpNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n), '+'); } + break; + + case 67: +/* Line 1792 of yacc.c */ +#line 316 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,BinaryOpNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n), '-'); } + break; + + case 68: +/* Line 1792 of yacc.c */ +#line 317 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,BinaryOpNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n), '*'); } + break; + + case 69: +/* Line 1792 of yacc.c */ +#line 318 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,BinaryOpNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n), '/'); } + break; + + case 70: +/* Line 1792 of yacc.c */ +#line 319 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,BinaryOpNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n), '%'); } + break; + + case 71: +/* Line 1792 of yacc.c */ +#line 320 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE3((SeExpr2loc).first_column,(SeExpr2loc).last_column,BinaryOpNode, (SeExpr2vsp[(1) - (3)].n), (SeExpr2vsp[(3) - (3)].n), '^'); } + break; + + case 72: +/* Line 1792 of yacc.c */ +#line 321 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,FuncNode, (SeExpr2vsp[(1) - (4)].s)); + free((SeExpr2vsp[(1) - (4)].s)); // free name string + // add args directly and discard arg list node + (SeExpr2val.n)->addChildren((SeExpr2vsp[(3) - (4)].n)); Forget((SeExpr2vsp[(3) - (4)].n)); } + break; + + case 73: +/* Line 1792 of yacc.c */ +#line 326 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,FuncNode, (SeExpr2vsp[(3) - (6)].s)); + free((SeExpr2vsp[(3) - (6)].s)); // free name string + (SeExpr2val.n)->addChild((SeExpr2vsp[(1) - (6)].n)); + // add args directly and discard arg list node + (SeExpr2val.n)->addChildren((SeExpr2vsp[(5) - (6)].n)); Forget((SeExpr2vsp[(5) - (6)].n)); } + break; + + case 74: +/* Line 1792 of yacc.c */ +#line 331 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,VarNode, (SeExpr2vsp[(1) - (1)].s)); free((SeExpr2vsp[(1) - (1)].s)); /* free name string */ } + break; + + case 75: +/* Line 1792 of yacc.c */ +#line 332 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,VarNode, (SeExpr2vsp[(1) - (1)].s)); free((SeExpr2vsp[(1) - (1)].s)); /* free name string */ } + break; + + case 76: +/* Line 1792 of yacc.c */ +#line 333 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,NumNode, (SeExpr2vsp[(1) - (1)].d)); /*printf("line %d",@$.last_column);*/} + break; + + case 77: +/* Line 1792 of yacc.c */ +#line 334 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,StrNode, (SeExpr2vsp[(1) - (1)].s)); free((SeExpr2vsp[(1) - (1)].s)); /* free string */} + break; + + case 78: +/* Line 1792 of yacc.c */ +#line 338 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,Node,(SeExpr2vsp[(1) - (1)].n)); } + break; + + case 79: +/* Line 1792 of yacc.c */ +#line 339 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (3)].n); + (SeExpr2vsp[(1) - (3)].n)->addChild((SeExpr2vsp[(3) - (3)].n)); } + break; + + case 80: +/* Line 1792 of yacc.c */ +#line 345 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE((SeExpr2loc).first_column,(SeExpr2loc).last_column,Node); /* create empty node */} + break; + + case 81: +/* Line 1792 of yacc.c */ +#line 346 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (1)].n); } + break; + + case 82: +/* Line 1792 of yacc.c */ +#line 351 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = NODE1((SeExpr2loc).first_column,(SeExpr2loc).last_column,Node, (SeExpr2vsp[(1) - (1)].n)); /* create arg list */} + break; + + case 83: +/* Line 1792 of yacc.c */ +#line 352 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (3)].n); (SeExpr2vsp[(1) - (3)].n)->addChild((SeExpr2vsp[(3) - (3)].n)); /* add to list */} + break; + + case 84: +/* Line 1792 of yacc.c */ +#line 356 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + { (SeExpr2val.n) = (SeExpr2vsp[(1) - (1)].n); } + break; + + +/* Line 1792 of yacc.c */ +#line 2426 "y.tab.c" + default: break; + } + /* User semantic actions sometimes alter SeExpr2char, and that requires + that SeExpr2token be updated with the new translation. We take the + approach of translating immediately before every use of SeExpr2token. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + SeExprYYABORT, SeExprYYACCEPT, or SeExprYYERROR immediately after altering SeExpr2char or + if it invokes SeExprYYBACKUP. In the case of SeExprYYABORT or SeExprYYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of SeExprYYERROR or SeExprYYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + SeExprYY_SYMBOL_PRINT ("-> $$ =", SeExpr2r1[SeExpr2n], &SeExpr2val, &SeExpr2loc); + + SeExprYYPOPSTACK (SeExpr2len); + SeExpr2len = 0; + SeExprYY_STACK_PRINT (SeExpr2ss, SeExpr2ssp); + + *++SeExpr2vsp = SeExpr2val; + *++SeExpr2lsp = SeExpr2loc; + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + SeExpr2n = SeExpr2r1[SeExpr2n]; + + SeExpr2state = SeExpr2pgoto[SeExpr2n - SeExprYYNTOKENS] + *SeExpr2ssp; + if (0 <= SeExpr2state && SeExpr2state <= SeExprYYLAST && SeExpr2check[SeExpr2state] == *SeExpr2ssp) + SeExpr2state = SeExpr2table[SeExpr2state]; + else + SeExpr2state = SeExpr2defgoto[SeExpr2n - SeExprYYNTOKENS]; + + goto SeExpr2newstate; + + +/*------------------------------------. +| SeExpr2errlab -- here on detecting error | +`------------------------------------*/ +SeExpr2errlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + SeExpr2token = SeExpr2char == SeExprYYEMPTY ? SeExprYYEMPTY : SeExprYYTRANSLATE (SeExpr2char); + + /* If not already recovering from an error, report this error. */ + if (!SeExpr2errstatus) + { + ++SeExpr2nerrs; +#if ! SeExprYYERROR_VERBOSE + SeExpr2error (SeExprYY_("syntax error")); +#else +# define SeExprYYSYNTAX_ERROR SeExpr2syntax_error (&SeExpr2msg_alloc, &SeExpr2msg, \ + SeExpr2ssp, SeExpr2token) + { + char const *SeExpr2msgp = SeExprYY_("syntax error"); + int SeExpr2syntax_error_status; + SeExpr2syntax_error_status = SeExprYYSYNTAX_ERROR; + if (SeExpr2syntax_error_status == 0) + SeExpr2msgp = SeExpr2msg; + else if (SeExpr2syntax_error_status == 1) + { + if (SeExpr2msg != SeExpr2msgbuf) + SeExprYYSTACK_FREE (SeExpr2msg); + SeExpr2msg = (char *) SeExprYYSTACK_ALLOC (SeExpr2msg_alloc); + if (!SeExpr2msg) + { + SeExpr2msg = SeExpr2msgbuf; + SeExpr2msg_alloc = sizeof SeExpr2msgbuf; + SeExpr2syntax_error_status = 2; + } + else + { + SeExpr2syntax_error_status = SeExprYYSYNTAX_ERROR; + SeExpr2msgp = SeExpr2msg; + } + } + SeExpr2error (SeExpr2msgp); + if (SeExpr2syntax_error_status == 2) + goto SeExpr2exhaustedlab; + } +# undef SeExprYYSYNTAX_ERROR +#endif + } + + SeExpr2error_range[1] = SeExpr2lloc; + + if (SeExpr2errstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (SeExpr2char <= SeExprYYEOF) + { + /* Return failure if at end of input. */ + if (SeExpr2char == SeExprYYEOF) + SeExprYYABORT; + } + else + { + SeExpr2destruct ("Error: discarding", + SeExpr2token, &SeExpr2lval, &SeExpr2lloc); + SeExpr2char = SeExprYYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto SeExpr2errlab1; + + +/*---------------------------------------------------. +| SeExpr2errorlab -- error raised explicitly by SeExprYYERROR. | +`---------------------------------------------------*/ +SeExpr2errorlab: + + /* Pacify compilers like GCC when the user code never invokes + SeExprYYERROR and the label SeExpr2errorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto SeExpr2errorlab; + + SeExpr2error_range[1] = SeExpr2lsp[1-SeExpr2len]; + /* Do not reclaim the symbols of the rule which action triggered + this SeExprYYERROR. */ + SeExprYYPOPSTACK (SeExpr2len); + SeExpr2len = 0; + SeExprYY_STACK_PRINT (SeExpr2ss, SeExpr2ssp); + SeExpr2state = *SeExpr2ssp; + goto SeExpr2errlab1; + + +/*-------------------------------------------------------------. +| SeExpr2errlab1 -- common code for both syntax error and SeExprYYERROR. | +`-------------------------------------------------------------*/ +SeExpr2errlab1: + SeExpr2errstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + SeExpr2n = SeExpr2pact[SeExpr2state]; + if (!SeExpr2pact_value_is_default (SeExpr2n)) + { + SeExpr2n += SeExprYYTERROR; + if (0 <= SeExpr2n && SeExpr2n <= SeExprYYLAST && SeExpr2check[SeExpr2n] == SeExprYYTERROR) + { + SeExpr2n = SeExpr2table[SeExpr2n]; + if (0 < SeExpr2n) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (SeExpr2ssp == SeExpr2ss) + SeExprYYABORT; + + SeExpr2error_range[1] = *SeExpr2lsp; + SeExpr2destruct ("Error: popping", + SeExpr2stos[SeExpr2state], SeExpr2vsp, SeExpr2lsp); + SeExprYYPOPSTACK (1); + SeExpr2state = *SeExpr2ssp; + SeExprYY_STACK_PRINT (SeExpr2ss, SeExpr2ssp); + } + + SeExprYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++SeExpr2vsp = SeExpr2lval; + SeExprYY_IGNORE_MAYBE_UNINITIALIZED_END + + SeExpr2error_range[2] = SeExpr2lloc; + /* Using SeExprYYLLOC is tempting, but would change the location of + the lookahead. SeExprYYLOC is available though. */ + SeExprYYLLOC_DEFAULT (SeExpr2loc, SeExpr2error_range, 2); + *++SeExpr2lsp = SeExpr2loc; + + /* Shift the error token. */ + SeExprYY_SYMBOL_PRINT ("Shifting", SeExpr2stos[SeExpr2n], SeExpr2vsp, SeExpr2lsp); + + SeExpr2state = SeExpr2n; + goto SeExpr2newstate; + + +/*-------------------------------------. +| SeExpr2acceptlab -- SeExprYYACCEPT comes here. | +`-------------------------------------*/ +SeExpr2acceptlab: + SeExpr2result = 0; + goto SeExpr2return; + +/*-----------------------------------. +| SeExpr2abortlab -- SeExprYYABORT comes here. | +`-----------------------------------*/ +SeExpr2abortlab: + SeExpr2result = 1; + goto SeExpr2return; + +#if !defined SeExpr2overflow || SeExprYYERROR_VERBOSE +/*-------------------------------------------------. +| SeExpr2exhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +SeExpr2exhaustedlab: + SeExpr2error (SeExprYY_("memory exhausted")); + SeExpr2result = 2; + /* Fall through. */ +#endif + +SeExpr2return: + if (SeExpr2char != SeExprYYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + SeExpr2token = SeExprYYTRANSLATE (SeExpr2char); + SeExpr2destruct ("Cleanup: discarding lookahead", + SeExpr2token, &SeExpr2lval, &SeExpr2lloc); + } + /* Do not reclaim the symbols of the rule which action triggered + this SeExprYYABORT or SeExprYYACCEPT. */ + SeExprYYPOPSTACK (SeExpr2len); + SeExprYY_STACK_PRINT (SeExpr2ss, SeExpr2ssp); + while (SeExpr2ssp != SeExpr2ss) + { + SeExpr2destruct ("Cleanup: popping", + SeExpr2stos[*SeExpr2ssp], SeExpr2vsp, SeExpr2lsp); + SeExprYYPOPSTACK (1); + } +#ifndef SeExpr2overflow + if (SeExpr2ss != SeExpr2ssa) + SeExprYYSTACK_FREE (SeExpr2ss); +#endif +#if SeExprYYERROR_VERBOSE + if (SeExpr2msg != SeExpr2msgbuf) + SeExprYYSTACK_FREE (SeExpr2msg); +#endif + /* Make sure SeExprYYID is used. */ + return SeExprYYID (SeExpr2result); +} + + +/* Line 2055 of yacc.c */ +#line 359 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + + + /* SeExpr2error - Report an error. This is called by the parser. + (Note: the "msg" param is useless as it is usually just "parse error". + so it's ignored.) + */ +static void SeExpr2error(const char* /*msg*/) +{ + // find start of line containing error + int pos = SeExpr2pos(), lineno = 1, start = 0, end = strlen(ParseStr); + bool multiline = 0; + for (int i = start; i < pos; i++) + if (ParseStr[i] == '\n') { start = i + 1; lineno++; multiline=1; } + + // find end of line containing error + for (int i = end; i > pos; i--) + if (ParseStr[i] == '\n') { end = i - 1; multiline=1; } + + ParseError = SeExpr2text[0] ? "Syntax error" : "Unexpected end of expression"; + if (multiline) { + char buff[30]; + snprintf(buff, 30, " at line %d", lineno); + ParseError += buff; + } + if (SeExpr2text[0]) { + ParseError += " near '"; + ParseError += SeExpr2text; + } + ParseError += "':\n "; + + int s = std::max(start, pos-30); + int e = std::min(end, pos+30); + + if (s != start) ParseError += "..."; + ParseError += std::string(ParseStr, s, e-s+1); + if (e != end) ParseError += "..."; +} + + +/* CallParser - This is our entrypoint from the rest of the expr library. + A string is passed in and a parse tree is returned. If the tree is null, + an error string is returned. Any flags set during parsing are passed + along. + */ + +extern void SeExprLexerResetState(std::vector >& comments); + +static SeExprInternal2::Mutex mutex; + +namespace SeExpr2 { +bool ExprParse(SeExpr2::ExprNode*& parseTree, + std::string& error, int& errorStart, int& errorEnd, + std::vector >& comments, + const SeExpr2::Expression* expr, const char* str, bool wantVec) +{ + SeExprInternal2::AutoMutex locker(mutex); + + // glue around crippled C interface - ugh! + Expr = expr; + ParseStr = str; + SeExprLexerResetState(comments); + SeExpr2_buffer_state* buffer = SeExpr2_scan_string(str); + ParseResult = 0; + int resultCode = SeExpr2parse(); + SeExpr2_delete_buffer(buffer); + + if (resultCode == 0) { + // success + error = ""; + parseTree = ParseResult; + } + else { + // failure + error = ParseError; + errorStart=SeExpr2lloc.first_column; + errorEnd=SeExpr2lloc.last_column; + parseTree = 0; + // gather list of nodes with no parent + std::vector delnodes; + std::vector::iterator iter; + for (iter = ParseNodes.begin(); iter != ParseNodes.end(); iter++) + if (!(*iter)->parent()) { delnodes.push_back(*iter); } + // now delete them (they will delete their own children) + for (iter = delnodes.begin(); iter != delnodes.end(); iter++) + delete *iter; + } + ParseNodes.clear(); + + return parseTree != 0; +} +} diff --git a/windows7/SeExpr/generated/ExprParser.tab.h b/windows7/SeExpr/generated/ExprParser.tab.h new file mode 100644 index 00000000..d93f29bc --- /dev/null +++ b/windows7/SeExpr/generated/ExprParser.tab.h @@ -0,0 +1,168 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + + This program 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. + + This program 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 this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +#ifndef SeExprYY_SEEXPR2_Y_TAB_H_INCLUDED +# define SeExprYY_SEEXPR2_Y_TAB_H_INCLUDED +/* Enabling traces. */ +#ifndef SeExprYYDEBUG +# define SeExprYYDEBUG 0 +#endif +#if SeExprYYDEBUG +extern int SeExpr2debug; +#endif + +/* Tokens. */ +#ifndef SeExprYYTOKENTYPE +# define SeExprYYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum SeExpr2tokentype { + IF = 258, + ELSE = 259, + EXTERN = 260, + DEF = 261, + FLOATPOINT = 262, + STRING = 263, + NAME = 264, + VAR = 265, + STR = 266, + NUMBER = 267, + LIFETIME_CONSTANT = 268, + LIFETIME_UNIFORM = 269, + LIFETIME_VARYING = 270, + LIFETIME_ERROR = 271, + AddEq = 272, + SubEq = 273, + MultEq = 274, + DivEq = 275, + ExpEq = 276, + ModEq = 277, + ARROW = 278, + OR = 279, + AND = 280, + NE = 281, + EQ = 282, + SEEXPR_GE = 283, + SEEXPR_LE = 284, + UNARY = 285 + }; +#endif +/* Tokens. */ +#define IF 258 +#define ELSE 259 +#define EXTERN 260 +#define DEF 261 +#define FLOATPOINT 262 +#define STRING 263 +#define NAME 264 +#define VAR 265 +#define STR 266 +#define NUMBER 267 +#define LIFETIME_CONSTANT 268 +#define LIFETIME_UNIFORM 269 +#define LIFETIME_VARYING 270 +#define LIFETIME_ERROR 271 +#define AddEq 272 +#define SubEq 273 +#define MultEq 274 +#define DivEq 275 +#define ExpEq 276 +#define ModEq 277 +#define ARROW 278 +#define OR 279 +#define AND 280 +#define NE 281 +#define EQ 282 +#define SEEXPR_GE 283 +#define SEEXPR_LE 284 +#define UNARY 285 + + + +#if ! defined SeExprYYSTYPE && ! defined SeExprYYSTYPE_IS_DECLARED +typedef union SeExprYYSTYPE +{ +/* Line 2058 of yacc.c */ +#line 77 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParser.y" + + SeExpr2::ExprNode* n; /* a node is returned for all non-terminals to + build the parse tree from the leaves up. */ + double d; // return value for number tokens + char* s; /* return value for name tokens. Note: the string + is allocated with strdup() in the lexer and must + be freed with free() */ + struct { + SeExpr2::ExprType::Type type; + int dim; + SeExpr2::ExprType::Lifetime lifetime; + } t; // return value for types + SeExpr2::ExprType::Lifetime l; // return value for lifetime qualifiers + + +/* Line 2058 of yacc.c */ +#line 133 "y.tab.h" +} SeExprYYSTYPE; +# define SeExprYYSTYPE_IS_TRIVIAL 1 +# define SeExpr2stype SeExprYYSTYPE /* obsolescent; will be withdrawn */ +# define SeExprYYSTYPE_IS_DECLARED 1 +#endif + +#if ! defined SeExprYYLTYPE && ! defined SeExprYYLTYPE_IS_DECLARED +typedef struct SeExprYYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +} SeExprYYLTYPE; +# define SeExpr2ltype SeExprYYLTYPE /* obsolescent; will be withdrawn */ +# define SeExprYYLTYPE_IS_DECLARED 1 +# define SeExprYYLTYPE_IS_TRIVIAL 1 +#endif + +extern SeExprYYSTYPE SeExpr2lval; +extern SeExprYYLTYPE SeExpr2lloc; +#ifdef SeExprYYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int SeExpr2parse (void *SeExprYYPARSE_PARAM); +#else +int SeExpr2parse (); +#endif +#else /* ! SeExprYYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int SeExpr2parse (void); +#else +int SeExpr2parse (); +#endif +#endif /* ! SeExprYYPARSE_PARAM */ + +#endif /* !SeExprYY_SEEXPR2_Y_TAB_H_INCLUDED */ diff --git a/windows7/SeExpr/generated/ExprParserLex.cpp b/windows7/SeExpr/generated/ExprParserLex.cpp new file mode 100644 index 00000000..712f7625 --- /dev/null +++ b/windows7/SeExpr/generated/ExprParserLex.cpp @@ -0,0 +1,2090 @@ +#line 2 "ExprParserLexIn.cpp" + +#line 4 "ExprParserLexIn.cpp" + +#define SeExprYY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define SeExprYY_FLEX_MAJOR_VERSION 2 +#define SeExprYY_FLEX_MINOR_VERSION 5 +#define SeExprYY_FLEX_SUBMINOR_VERSION 37 +#if SeExprYY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define SeExprYY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define SeExprYY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef SeExprYY_USE_CONST +#define SeExpr2const const +#else +#define SeExpr2const +#endif + +/* Returned upon end-of-file. */ +#define SeExprYY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define SeExprYY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (SeExpr2_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The SeExprYYSTATE alias is for lex + * compatibility. + */ +#define SeExprYY_START (((SeExpr2_start) - 1) / 2) +#define SeExprYYSTATE SeExprYY_START + +/* Action number for EOF rule of a given start state. */ +#define SeExprYY_STATE_EOF(state) (SeExprYY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define SeExprYY_NEW_FILE SeExpr2restart(SeExpr2in ) + +#define SeExprYY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef SeExprYY_BUF_SIZE +#define SeExprYY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define SeExprYY_STATE_BUF_SIZE ((SeExprYY_BUF_SIZE + 2) * sizeof(SeExpr2_state_type)) + +#ifndef SeExprYY_TYPEDEF_SeExprYY_BUFFER_STATE +#define SeExprYY_TYPEDEF_SeExprYY_BUFFER_STATE +typedef struct SeExpr2_buffer_state *SeExprYY_BUFFER_STATE; +#endif + +#ifndef SeExprYY_TYPEDEF_SeExprYY_SIZE_T +#define SeExprYY_TYPEDEF_SeExprYY_SIZE_T +typedef size_t SeExpr2_size_t; +#endif + +extern SeExpr2_size_t SeExpr2leng; + +extern FILE *SeExpr2in, *SeExpr2out; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define SeExprYY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define SeExpr2less(n) \ + do \ + { \ + /* Undo effects of setting up SeExpr2text. */ \ + int SeExpr2less_macro_arg = (n); \ + SeExprYY_LESS_LINENO(SeExpr2less_macro_arg);\ + *SeExpr2_cp = (SeExpr2_hold_char); \ + SeExprYY_RESTORE_SeExprYY_MORE_OFFSET \ + (SeExpr2_c_buf_p) = SeExpr2_cp = SeExpr2_bp + SeExpr2less_macro_arg - SeExprYY_MORE_ADJ; \ + SeExprYY_DO_BEFORE_ACTION; /* set up SeExpr2text again */ \ + } \ + while ( 0 ) + +#define unput(c) SeExpr2unput( c, (SeExpr2text_ptr) ) + +#ifndef SeExprYY_STRUCT_SeExprYY_BUFFER_STATE +#define SeExprYY_STRUCT_SeExprYY_BUFFER_STATE +struct SeExpr2_buffer_state + { + FILE *SeExpr2_input_file; + + char *SeExpr2_ch_buf; /* input buffer */ + char *SeExpr2_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + SeExpr2_size_t SeExpr2_buf_size; + + /* Number of characters read into SeExpr2_ch_buf, not including EOB + * characters. + */ + SeExpr2_size_t SeExpr2_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int SeExpr2_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int SeExpr2_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int SeExpr2_at_bol; + + int SeExpr2_bs_lineno; /**< The line count. */ + int SeExpr2_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int SeExpr2_fill_buffer; + + int SeExpr2_buffer_status; + +#define SeExprYY_BUFFER_NEW 0 +#define SeExprYY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as SeExprYY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via SeExpr2restart()), so that the user can continue scanning by + * just pointing SeExpr2in at a new input file. + */ +#define SeExprYY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !SeExprYY_STRUCT_SeExprYY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t SeExpr2_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t SeExpr2_buffer_stack_max = 0; /**< capacity of stack. */ +static SeExprYY_BUFFER_STATE * SeExpr2_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define SeExprYY_CURRENT_BUFFER ( (SeExpr2_buffer_stack) \ + ? (SeExpr2_buffer_stack)[(SeExpr2_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define SeExprYY_CURRENT_BUFFER_LVALUE (SeExpr2_buffer_stack)[(SeExpr2_buffer_stack_top)] + +/* SeExpr2_hold_char holds the character lost when SeExpr2text is formed. */ +static char SeExpr2_hold_char; +static SeExpr2_size_t SeExpr2_n_chars; /* number of characters read into SeExpr2_ch_buf */ +SeExpr2_size_t SeExpr2leng; + +/* Points to current character in buffer. */ +static char *SeExpr2_c_buf_p = (char *) 0; +static int SeExpr2_init = 0; /* whether we need to initialize */ +static int SeExpr2_start = 0; /* start state number */ + +/* Flag which is used to allow SeExpr2wrap()'s to do buffer switches + * instead of setting up a fresh SeExpr2in. A bit of a hack ... + */ +static int SeExpr2_did_buffer_switch_on_eof; + +void SeExpr2restart (FILE *input_file ); +void SeExpr2_switch_to_buffer (SeExprYY_BUFFER_STATE new_buffer ); +SeExprYY_BUFFER_STATE SeExpr2_create_buffer (FILE *file,int size ); +void SeExpr2_delete_buffer (SeExprYY_BUFFER_STATE b ); +void SeExpr2_flush_buffer (SeExprYY_BUFFER_STATE b ); +void SeExpr2push_buffer_state (SeExprYY_BUFFER_STATE new_buffer ); +void SeExpr2pop_buffer_state (void ); + +static void SeExpr2ensure_buffer_stack (void ); +static void SeExpr2_load_buffer_state (void ); +static void SeExpr2_init_buffer (SeExprYY_BUFFER_STATE b,FILE *file ); + +#define SeExprYY_FLUSH_BUFFER SeExpr2_flush_buffer(SeExprYY_CURRENT_BUFFER ) + +SeExprYY_BUFFER_STATE SeExpr2_scan_buffer (char *base,SeExpr2_size_t size ); +SeExprYY_BUFFER_STATE SeExpr2_scan_string (SeExpr2const char *SeExpr2_str ); +SeExprYY_BUFFER_STATE SeExpr2_scan_bytes (SeExpr2const char *bytes,SeExpr2_size_t len ); + +void *SeExpr2alloc (SeExpr2_size_t ); +void *SeExpr2realloc (void *,SeExpr2_size_t ); +void SeExpr2free (void * ); + +#define SeExpr2_new_buffer SeExpr2_create_buffer + +#define SeExpr2_set_interactive(is_interactive) \ + { \ + if ( ! SeExprYY_CURRENT_BUFFER ){ \ + SeExpr2ensure_buffer_stack (); \ + SeExprYY_CURRENT_BUFFER_LVALUE = \ + SeExpr2_create_buffer(SeExpr2in,SeExprYY_BUF_SIZE ); \ + } \ + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_is_interactive = is_interactive; \ + } + +#define SeExpr2_set_bol(at_bol) \ + { \ + if ( ! SeExprYY_CURRENT_BUFFER ){\ + SeExpr2ensure_buffer_stack (); \ + SeExprYY_CURRENT_BUFFER_LVALUE = \ + SeExpr2_create_buffer(SeExpr2in,SeExprYY_BUF_SIZE ); \ + } \ + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_at_bol = at_bol; \ + } + +#define SeExprYY_AT_BOL() (SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_at_bol) + +/* Begin user sect3 */ + +#define SeExpr2wrap() 1 +#define SeExprYY_SKIP_SeExprYYWRAP + +typedef unsigned char SeExprYY_CHAR; + +FILE *SeExpr2in = (FILE *) 0, *SeExpr2out = (FILE *) 0; + +typedef int SeExpr2_state_type; + +extern int SeExpr2lineno; + +int SeExpr2lineno = 1; + +extern char *SeExpr2text; +#define SeExpr2text_ptr SeExpr2text + +static SeExpr2_state_type SeExpr2_get_previous_state (void ); +static SeExpr2_state_type SeExpr2_try_NUL_trans (SeExpr2_state_type current_state ); +static int SeExpr2_get_next_buffer (void ); +static void SeExpr2_fatal_error (SeExpr2const char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up SeExpr2text. + */ +#define SeExprYY_DO_BEFORE_ACTION \ + (SeExpr2text_ptr) = SeExpr2_bp; \ + SeExpr2leng = (size_t) (SeExpr2_cp - SeExpr2_bp); \ + (SeExpr2_hold_char) = *SeExpr2_cp; \ + *SeExpr2_cp = '\0'; \ + (SeExpr2_c_buf_p) = SeExpr2_cp; + +#define SeExprYY_NUM_RULES 42 +#define SeExprYY_END_OF_BUFFER 43 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct SeExpr2_trans_info + { + flex_int32_t SeExpr2_verify; + flex_int32_t SeExpr2_nxt; + }; +static SeExpr2const flex_int16_t SeExpr2_accept[160] = + { 0, + 0, 0, 43, 41, 39, 39, 41, 41, 40, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 31, 41, + 41, 41, 36, 36, 36, 26, 36, 36, 36, 36, + 36, 41, 41, 36, 36, 36, 36, 36, 36, 36, + 41, 15, 0, 32, 0, 40, 0, 34, 23, 13, + 0, 33, 0, 21, 19, 20, 18, 31, 22, 31, + 31, 0, 16, 14, 17, 36, 36, 36, 36, 36, + 25, 36, 36, 36, 37, 38, 24, 36, 36, 36, + 36, 36, 10, 36, 36, 12, 32, 34, 0, 33, + 0, 31, 0, 0, 31, 36, 36, 36, 36, 36, + + 36, 36, 30, 3, 36, 36, 36, 36, 36, 0, + 0, 31, 0, 0, 31, 36, 36, 36, 36, 36, + 36, 36, 11, 36, 36, 36, 36, 35, 0, 31, + 36, 36, 9, 4, 36, 36, 36, 36, 36, 36, + 36, 35, 36, 36, 5, 36, 36, 2, 36, 27, + 28, 1, 36, 7, 8, 36, 6, 29, 0 + } ; + +static SeExpr2const flex_int32_t SeExpr2_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 7, 8, 9, 10, 1, + 1, 11, 12, 1, 13, 14, 15, 16, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, + 21, 22, 1, 1, 23, 24, 25, 26, 27, 28, + 29, 26, 30, 26, 26, 31, 32, 33, 34, 35, + 26, 36, 37, 38, 39, 40, 26, 26, 41, 26, + 1, 42, 1, 43, 26, 1, 44, 45, 26, 46, + + 47, 48, 49, 50, 51, 26, 26, 52, 53, 54, + 55, 26, 26, 56, 57, 58, 59, 26, 26, 60, + 26, 26, 1, 61, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static SeExpr2const flex_int32_t SeExpr2_meta[62] = + { 0, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 3, 3, 4, 1, 1, + 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 1, 1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 1 + } ; + +static SeExpr2const flex_int16_t SeExpr2_base[168] = + { 0, + 0, 0, 245, 246, 246, 246, 223, 57, 201, 0, + 221, 232, 53, 219, 218, 43, 50, 217, 54, 216, + 215, 214, 0, 207, 199, 196, 200, 200, 191, 195, + 204, 15, 205, 170, 177, 20, 179, 174, 170, 167, + 158, 246, 69, 246, 70, 176, 163, 198, 246, 246, + 66, 246, 67, 246, 246, 246, 246, 66, 246, 69, + 73, 90, 246, 246, 246, 0, 186, 181, 177, 178, + 0, 175, 180, 173, 246, 246, 246, 148, 159, 149, + 147, 145, 0, 149, 147, 246, 73, 183, 182, 81, + 105, 108, 114, 81, 88, 169, 161, 163, 173, 165, + + 166, 152, 0, 0, 145, 144, 133, 142, 133, 0, + 112, 116, 124, 122, 126, 154, 148, 149, 146, 150, + 148, 151, 0, 124, 121, 128, 109, 0, 128, 130, + 146, 134, 0, 0, 125, 117, 119, 97, 99, 93, + 98, 0, 115, 86, 0, 82, 81, 0, 50, 0, + 0, 246, 54, 0, 0, 34, 0, 0, 246, 155, + 160, 79, 165, 168, 171, 74, 174 + } ; + +static SeExpr2const flex_int16_t SeExpr2_def[168] = + { 0, + 159, 1, 159, 159, 159, 159, 159, 160, 161, 162, + 159, 159, 163, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 159, 159, 164, 164, 164, 164, 164, 164, 164, + 159, 159, 160, 159, 160, 161, 161, 165, 159, 159, + 163, 159, 163, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 159, 159, 159, 164, 164, 164, + 164, 164, 164, 164, 164, 159, 160, 165, 159, 163, + 159, 159, 159, 159, 159, 164, 164, 164, 164, 164, + + 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, + 159, 159, 159, 159, 159, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 167, 159, 159, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 167, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 159, 164, 164, 164, 164, 164, 164, 0, 159, + 159, 159, 159, 159, 159, 159, 159 + } ; + +static SeExpr2const flex_int16_t SeExpr2_nxt[308] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 19, 4, 4, 20, + 21, 22, 23, 24, 25, 23, 26, 27, 23, 23, + 23, 23, 23, 23, 28, 23, 29, 23, 30, 31, + 23, 32, 33, 23, 34, 35, 36, 23, 37, 23, + 38, 39, 23, 23, 23, 23, 40, 23, 23, 23, + 41, 44, 52, 56, 57, 58, 58, 60, 75, 61, + 61, 80, 76, 44, 87, 52, 90, 44, 128, 81, + 62, 58, 58, 48, 92, 92, 60, 158, 61, 61, + 52, 157, 91, 156, 53, 93, 95, 95, 45, 62, + + 62, 94, 94, 95, 95, 95, 95, 53, 53, 155, + 45, 45, 91, 154, 45, 93, 111, 111, 153, 62, + 112, 112, 53, 92, 92, 114, 114, 112, 112, 115, + 115, 112, 112, 152, 113, 129, 129, 115, 115, 130, + 130, 115, 115, 130, 130, 130, 130, 151, 150, 149, + 148, 147, 146, 145, 113, 43, 144, 43, 43, 43, + 46, 143, 46, 46, 46, 51, 141, 51, 51, 51, + 66, 140, 66, 88, 88, 88, 142, 139, 142, 138, + 137, 136, 135, 134, 133, 132, 131, 127, 126, 125, + 124, 123, 122, 121, 120, 119, 118, 117, 116, 110, + + 89, 109, 108, 107, 106, 105, 104, 103, 102, 101, + 100, 99, 98, 97, 96, 89, 159, 47, 86, 85, + 84, 83, 82, 79, 78, 77, 74, 73, 72, 71, + 70, 69, 68, 67, 65, 64, 63, 59, 55, 54, + 50, 49, 47, 42, 159, 3, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 159, 159, 159, 159, 159, 159, 159 + } ; + +static SeExpr2const flex_int16_t SeExpr2_chk[308] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 8, 13, 16, 16, 17, 17, 19, 32, 19, + 19, 36, 32, 43, 45, 51, 53, 87, 166, 36, + 19, 58, 58, 162, 60, 60, 61, 156, 61, 61, + 90, 153, 58, 149, 13, 60, 94, 94, 8, 61, + + 19, 62, 62, 95, 95, 62, 62, 51, 53, 147, + 43, 45, 58, 146, 87, 60, 91, 91, 144, 61, + 91, 91, 90, 92, 92, 93, 93, 111, 111, 93, + 93, 112, 112, 143, 92, 113, 113, 114, 114, 113, + 113, 115, 115, 129, 129, 130, 130, 141, 140, 139, + 138, 137, 136, 135, 92, 160, 132, 160, 160, 160, + 161, 131, 161, 161, 161, 163, 127, 163, 163, 163, + 164, 126, 164, 165, 165, 165, 167, 125, 167, 124, + 122, 121, 120, 119, 118, 117, 116, 109, 108, 107, + 106, 105, 102, 101, 100, 99, 98, 97, 96, 89, + + 88, 85, 84, 82, 81, 80, 79, 78, 74, 73, + 72, 70, 69, 68, 67, 48, 47, 46, 41, 40, + 39, 38, 37, 35, 34, 33, 31, 30, 29, 28, + 27, 26, 25, 24, 22, 21, 20, 18, 15, 14, + 12, 11, 9, 7, 3, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 159, 159, 159, 159, 159, 159, 159 + } ; + +static SeExpr2_state_type SeExpr2_last_accepting_state; +static char *SeExpr2_last_accepting_cpos; + +extern int SeExpr2_flex_debug; +int SeExpr2_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define SeExpr2more() SeExpr2more_used_but_not_detected +#define SeExprYY_MORE_ADJ 0 +#define SeExprYY_RESTORE_SeExprYY_MORE_OFFSET +char *SeExpr2text; +#line 1 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +/* + Copyright Disney Enterprises, Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License + and the following modification to it: Section 6 Trademarks. + deleted and replaced with: + + 6. Trademarks. This License does not grant permission to use the + trade names, trademarks, service marks, or product names of the + Licensor and its affiliates, except as required for reproducing + the content of the NOTICE file. + + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +*/ +/* Don't generate SeExpr2wrap since everything is in one string */ +/* Don't generate unput since it's unused and gcc complains... */ +#line 24 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +#ifndef MAKEDEPEND +# include +# include +# include +# include +# include +#endif + +// If c++11 don't use register designator, lex and yacc need to go... +#if __cplusplus > 199711L +#define register // Deprecated in C++11. +#endif // #if __cplusplus > 199711L + +#include "Platform.h" +#include "ExprParser.h" +#include "ExprNode.h" +#include "Expression.h" + +#ifdef SEEXPR_WIN32 +# define SeExprYY_NO_UNISTD_H +# define SeExprYY_SKIP_SeExprYYWRAP +#endif + +#ifndef MAKEDEPEND +# include "ExprParser.tab.h" +#endif + +// TODO: make this thread safe +static int columnNumber=0; // really buffer position +static int lineNumber=0; // not used +std::vector >* comments=0; +//! For lexer's internal use only! +void SeExprLexerResetState(std::vector >& commentsIn){ + comments=&commentsIn; + columnNumber=lineNumber=0; +} + +int SeExpr2pos(); + +#define SeExprYY_USER_ACTION { \ + SeExpr2lloc.first_line=lineNumber;SeExpr2lloc.first_column=columnNumber; \ + columnNumber+=SeExpr2leng;\ + SeExpr2lloc.last_column=columnNumber;SeExpr2lloc.last_line=lineNumber;} + +#line 639 "ExprParserLexIn.cpp" + +#define INITIAL 0 + +#ifndef SeExprYY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef SeExprYY_EXTRA_TYPE +#define SeExprYY_EXTRA_TYPE void * +#endif + +static int SeExpr2_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int SeExpr2lex_destroy (void ); + +int SeExpr2get_debug (void ); + +void SeExpr2set_debug (int debug_flag ); + +SeExprYY_EXTRA_TYPE SeExpr2get_extra (void ); + +void SeExpr2set_extra (SeExprYY_EXTRA_TYPE user_defined ); + +FILE *SeExpr2get_in (void ); + +void SeExpr2set_in (FILE * in_str ); + +FILE *SeExpr2get_out (void ); + +void SeExpr2set_out (FILE * out_str ); + +SeExpr2_size_t SeExpr2get_leng (void ); + +char *SeExpr2get_text (void ); + +int SeExpr2get_lineno (void ); + +void SeExpr2set_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef SeExprYY_SKIP_SeExprYYWRAP +#ifdef __cplusplus +extern "C" int SeExpr2wrap (void ); +#else +extern int SeExpr2wrap (void ); +#endif +#endif + +#ifndef SeExpr2text_ptr +static void SeExpr2_flex_strncpy (char *,SeExpr2const char *,int ); +#endif + +#ifdef SeExprYY_NEED_STRLEN +static int SeExpr2_flex_strlen (SeExpr2const char * ); +#endif + +#ifndef SeExprYY_NO_INPUT + +#ifdef __cplusplus +static int SeExpr2input (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef SeExprYY_READ_BUF_SIZE +#define SeExprYY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( SeExpr2text, SeExpr2leng, 1, SeExpr2out )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or SeExprYY_NULL, + * is returned in "result". + */ +#ifndef SeExprYY_INPUT +#define SeExprYY_INPUT(buf,result,max_size) \ + if ( SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( SeExpr2in )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( SeExpr2in ) ) \ + SeExprYY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, SeExpr2in))==0 && ferror(SeExpr2in)) \ + { \ + if( errno != EINTR) \ + { \ + SeExprYY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(SeExpr2in); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "SeExpr2terminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef SeExpr2terminate +#define SeExpr2terminate() return SeExprYY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef SeExprYY_START_STACK_INCR +#define SeExprYY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef SeExprYY_FATAL_ERROR +#define SeExprYY_FATAL_ERROR(msg) SeExpr2_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef SeExprYY_DECL +#define SeExprYY_DECL_IS_OURS 1 + +extern int SeExpr2lex (void); + +#define SeExprYY_DECL int SeExpr2lex (void) +#endif /* !SeExprYY_DECL */ + +/* Code executed at the beginning of each rule, after SeExpr2text and SeExpr2leng + * have been set up. + */ +#ifndef SeExprYY_USER_ACTION +#define SeExprYY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef SeExprYY_BREAK +#define SeExprYY_BREAK break; +#endif + +#define SeExprYY_RULE_SETUP \ + SeExprYY_USER_ACTION + +/** The main scanner function which does all the work. + */ +SeExprYY_DECL +{ + register SeExpr2_state_type SeExpr2_current_state; + register char *SeExpr2_cp, *SeExpr2_bp; + register int SeExpr2_act; + +#line 75 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" + +#line 821 "ExprParserLexIn.cpp" + + if ( !(SeExpr2_init) ) + { + (SeExpr2_init) = 1; + +#ifdef SeExprYY_USER_INIT + SeExprYY_USER_INIT; +#endif + + if ( ! (SeExpr2_start) ) + (SeExpr2_start) = 1; /* first start state */ + + if ( ! SeExpr2in ) + SeExpr2in = stdin; + + if ( ! SeExpr2out ) + SeExpr2out = stdout; + + if ( ! SeExprYY_CURRENT_BUFFER ) { + SeExpr2ensure_buffer_stack (); + SeExprYY_CURRENT_BUFFER_LVALUE = + SeExpr2_create_buffer(SeExpr2in,SeExprYY_BUF_SIZE ); + } + + SeExpr2_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + SeExpr2_cp = (SeExpr2_c_buf_p); + + /* Support of SeExpr2text. */ + *SeExpr2_cp = (SeExpr2_hold_char); + + /* SeExpr2_bp points to the position in SeExpr2_ch_buf of the start of + * the current run. + */ + SeExpr2_bp = SeExpr2_cp; + + SeExpr2_current_state = (SeExpr2_start); +SeExpr2_match: + do + { + register SeExprYY_CHAR SeExpr2_c = SeExpr2_ec[SeExprYY_SC_TO_UI(*SeExpr2_cp)]; + if ( SeExpr2_accept[SeExpr2_current_state] ) + { + (SeExpr2_last_accepting_state) = SeExpr2_current_state; + (SeExpr2_last_accepting_cpos) = SeExpr2_cp; + } + while ( SeExpr2_chk[SeExpr2_base[SeExpr2_current_state] + SeExpr2_c] != SeExpr2_current_state ) + { + SeExpr2_current_state = (int) SeExpr2_def[SeExpr2_current_state]; + if ( SeExpr2_current_state >= 160 ) + SeExpr2_c = SeExpr2_meta[(unsigned int) SeExpr2_c]; + } + SeExpr2_current_state = SeExpr2_nxt[SeExpr2_base[SeExpr2_current_state] + (unsigned int) SeExpr2_c]; + ++SeExpr2_cp; + } + while ( SeExpr2_base[SeExpr2_current_state] != 246 ); + +SeExpr2_find_action: + SeExpr2_act = SeExpr2_accept[SeExpr2_current_state]; + if ( SeExpr2_act == 0 ) + { /* have to back up */ + SeExpr2_cp = (SeExpr2_last_accepting_cpos); + SeExpr2_current_state = (SeExpr2_last_accepting_state); + SeExpr2_act = SeExpr2_accept[SeExpr2_current_state]; + } + + SeExprYY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( SeExpr2_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of SeExprYY_DO_BEFORE_ACTION */ + *SeExpr2_cp = (SeExpr2_hold_char); + SeExpr2_cp = (SeExpr2_last_accepting_cpos); + SeExpr2_current_state = (SeExpr2_last_accepting_state); + goto SeExpr2_find_action; + +case 1: +SeExprYY_RULE_SETUP +#line 76 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" + + SeExprYY_BREAK +case 2: +SeExprYY_RULE_SETUP +#line 78 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return EXTERN; } + SeExprYY_BREAK +case 3: +SeExprYY_RULE_SETUP +#line 79 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return DEF; } + SeExprYY_BREAK +case 4: +SeExprYY_RULE_SETUP +#line 80 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return FLOATPOINT; } + SeExprYY_BREAK +case 5: +SeExprYY_RULE_SETUP +#line 81 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return STRING; } + SeExprYY_BREAK +case 6: +SeExprYY_RULE_SETUP +#line 82 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return LIFETIME_CONSTANT; } + SeExprYY_BREAK +case 7: +SeExprYY_RULE_SETUP +#line 83 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return LIFETIME_UNIFORM; } + SeExprYY_BREAK +case 8: +SeExprYY_RULE_SETUP +#line 84 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return LIFETIME_VARYING; } + SeExprYY_BREAK +case 9: +SeExprYY_RULE_SETUP +#line 85 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return LIFETIME_ERROR; } + SeExprYY_BREAK +case 10: +SeExprYY_RULE_SETUP +#line 87 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return IF; } + SeExprYY_BREAK +case 11: +SeExprYY_RULE_SETUP +#line 88 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return ELSE; } + SeExprYY_BREAK +case 12: +SeExprYY_RULE_SETUP +#line 90 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return OR; } + SeExprYY_BREAK +case 13: +SeExprYY_RULE_SETUP +#line 91 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return AND; } + SeExprYY_BREAK +case 14: +SeExprYY_RULE_SETUP +#line 92 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return EQ; } + SeExprYY_BREAK +case 15: +SeExprYY_RULE_SETUP +#line 93 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return NE; } + SeExprYY_BREAK +case 16: +SeExprYY_RULE_SETUP +#line 94 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return SEEXPR_LE; } + SeExprYY_BREAK +case 17: +SeExprYY_RULE_SETUP +#line 95 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return SEEXPR_GE; } + SeExprYY_BREAK +case 18: +SeExprYY_RULE_SETUP +#line 96 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return ARROW; } + SeExprYY_BREAK +case 19: +SeExprYY_RULE_SETUP +#line 97 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return AddEq; } + SeExprYY_BREAK +case 20: +SeExprYY_RULE_SETUP +#line 98 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return SubEq; } + SeExprYY_BREAK +case 21: +SeExprYY_RULE_SETUP +#line 99 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return MultEq; } + SeExprYY_BREAK +case 22: +SeExprYY_RULE_SETUP +#line 100 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return DivEq; } + SeExprYY_BREAK +case 23: +SeExprYY_RULE_SETUP +#line 101 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return ModEq; } + SeExprYY_BREAK +case 24: +SeExprYY_RULE_SETUP +#line 102 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return ExpEq; } + SeExprYY_BREAK +case 25: +SeExprYY_RULE_SETUP +#line 104 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.d = M_PI; return NUMBER; } + SeExprYY_BREAK +case 26: +SeExprYY_RULE_SETUP +#line 105 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.d = M_E; return NUMBER; } + SeExprYY_BREAK +case 27: +SeExprYY_RULE_SETUP +#line 106 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.d = 0; return NUMBER; } + SeExprYY_BREAK +case 28: +SeExprYY_RULE_SETUP +#line 107 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.d = 1; return NUMBER; } + SeExprYY_BREAK +case 29: +SeExprYY_RULE_SETUP +#line 108 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.d = 2; return NUMBER; } + SeExprYY_BREAK +case 30: +SeExprYY_RULE_SETUP +#line 109 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.d = 3; return NUMBER; } + SeExprYY_BREAK +case 31: +SeExprYY_RULE_SETUP +#line 111 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.d = atof(SeExpr2text); return NUMBER; } + SeExprYY_BREAK +case 32: +SeExprYY_RULE_SETUP +#line 112 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ /* match quoted string, allow embedded quote, \" */ + SeExpr2lval.s = strdup(&SeExpr2text[1]); + SeExpr2lval.s[strlen(SeExpr2lval.s)-1] = '\0'; + return STR; } + SeExprYY_BREAK +case 33: +SeExprYY_RULE_SETUP +#line 116 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ /* match quoted string, allow embedded quote, \' */ + SeExpr2lval.s = strdup(&SeExpr2text[1]); + SeExpr2lval.s[strlen(SeExpr2lval.s)-1] = '\0'; + return STR; } + SeExprYY_BREAK +case 34: +SeExprYY_RULE_SETUP +#line 120 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.s = strdup(&SeExpr2text[1]); return VAR; } + SeExprYY_BREAK +case 35: +SeExprYY_RULE_SETUP +#line 121 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.s = strdup(&SeExpr2text[1]); return VAR; } + SeExprYY_BREAK +case 36: +SeExprYY_RULE_SETUP +#line 122 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ SeExpr2lval.s = strdup(SeExpr2text); return NAME; } + SeExprYY_BREAK +case 37: +SeExprYY_RULE_SETUP +#line 124 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +/* ignore quoted newline */; + SeExprYY_BREAK +case 38: +SeExprYY_RULE_SETUP +#line 125 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +/* ignore quoted tab */; + SeExprYY_BREAK +case 39: +/* rule 39 can match eol */ +SeExprYY_RULE_SETUP +#line 126 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +/* ignore whitespace */; + SeExprYY_BREAK +case 40: +SeExprYY_RULE_SETUP +#line 127 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ /* match comment */ + int startPos=SeExpr2pos(),endPos=SeExpr2pos()+strlen(&SeExpr2text[1])+1; + comments->push_back(std::pair(startPos,endPos));} + SeExprYY_BREAK +case 41: +SeExprYY_RULE_SETUP +#line 131 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return SeExpr2text[0]; } + SeExprYY_BREAK +case 42: +SeExprYY_RULE_SETUP +#line 133 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +ECHO; + SeExprYY_BREAK +#line 1123 "ExprParserLexIn.cpp" +case SeExprYY_STATE_EOF(INITIAL): + SeExpr2terminate(); + + case SeExprYY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int SeExpr2_amount_of_matched_text = (int) (SeExpr2_cp - (SeExpr2text_ptr)) - 1; + + /* Undo the effects of SeExprYY_DO_BEFORE_ACTION. */ + *SeExpr2_cp = (SeExpr2_hold_char); + SeExprYY_RESTORE_SeExprYY_MORE_OFFSET + + if ( SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buffer_status == SeExprYY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed SeExpr2in at a new source and called + * SeExpr2lex(). If so, then we have to assure + * consistency between SeExprYY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (SeExpr2_n_chars) = SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_n_chars; + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_input_file = SeExpr2in; + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buffer_status = SeExprYY_BUFFER_NORMAL; + } + + /* Note that here we test for SeExpr2_c_buf_p "<=" to the position + * of the first EOB in the buffer, since SeExpr2_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (SeExpr2_c_buf_p) <= &SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf[(SeExpr2_n_chars)] ) + { /* This was really a NUL. */ + SeExpr2_state_type SeExpr2_next_state; + + (SeExpr2_c_buf_p) = (SeExpr2text_ptr) + SeExpr2_amount_of_matched_text; + + SeExpr2_current_state = SeExpr2_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * SeExpr2_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + SeExpr2_next_state = SeExpr2_try_NUL_trans( SeExpr2_current_state ); + + SeExpr2_bp = (SeExpr2text_ptr) + SeExprYY_MORE_ADJ; + + if ( SeExpr2_next_state ) + { + /* Consume the NUL. */ + SeExpr2_cp = ++(SeExpr2_c_buf_p); + SeExpr2_current_state = SeExpr2_next_state; + goto SeExpr2_match; + } + + else + { + SeExpr2_cp = (SeExpr2_c_buf_p); + goto SeExpr2_find_action; + } + } + + else switch ( SeExpr2_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (SeExpr2_did_buffer_switch_on_eof) = 0; + + if ( SeExpr2wrap( ) ) + { + /* Note: because we've taken care in + * SeExpr2_get_next_buffer() to have set up + * SeExpr2text, we can now set up + * SeExpr2_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * SeExprYY_NULL, it'll still work - another + * SeExprYY_NULL will get returned. + */ + (SeExpr2_c_buf_p) = (SeExpr2text_ptr) + SeExprYY_MORE_ADJ; + + SeExpr2_act = SeExprYY_STATE_EOF(SeExprYY_START); + goto do_action; + } + + else + { + if ( ! (SeExpr2_did_buffer_switch_on_eof) ) + SeExprYY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (SeExpr2_c_buf_p) = + (SeExpr2text_ptr) + SeExpr2_amount_of_matched_text; + + SeExpr2_current_state = SeExpr2_get_previous_state( ); + + SeExpr2_cp = (SeExpr2_c_buf_p); + SeExpr2_bp = (SeExpr2text_ptr) + SeExprYY_MORE_ADJ; + goto SeExpr2_match; + + case EOB_ACT_LAST_MATCH: + (SeExpr2_c_buf_p) = + &SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf[(SeExpr2_n_chars)]; + + SeExpr2_current_state = SeExpr2_get_previous_state( ); + + SeExpr2_cp = (SeExpr2_c_buf_p); + SeExpr2_bp = (SeExpr2text_ptr) + SeExprYY_MORE_ADJ; + goto SeExpr2_find_action; + } + break; + } + + default: + SeExprYY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of SeExpr2lex */ + +/* SeExpr2_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int SeExpr2_get_next_buffer (void) +{ + register char *dest = SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf; + register char *source = (SeExpr2text_ptr); + register int number_to_move, i; + int ret_val; + + if ( (SeExpr2_c_buf_p) > &SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf[(SeExpr2_n_chars) + 1] ) + SeExprYY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (SeExpr2_c_buf_p) - (SeExpr2text_ptr) - SeExprYY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((SeExpr2_c_buf_p) - (SeExpr2text_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buffer_status == SeExprYY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_n_chars = (SeExpr2_n_chars) = 0; + + else + { + SeExpr2_size_t num_to_read = + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + SeExprYY_BUFFER_STATE b = SeExprYY_CURRENT_BUFFER_LVALUE; + + int SeExpr2_c_buf_p_offset = + (int) ((SeExpr2_c_buf_p) - b->SeExpr2_ch_buf); + + if ( b->SeExpr2_is_our_buffer ) + { + SeExpr2_size_t new_size = b->SeExpr2_buf_size * 2; + + if ( new_size <= 0 ) + b->SeExpr2_buf_size += b->SeExpr2_buf_size / 8; + else + b->SeExpr2_buf_size *= 2; + + b->SeExpr2_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + SeExpr2realloc((void *) b->SeExpr2_ch_buf,b->SeExpr2_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->SeExpr2_ch_buf = 0; + + if ( ! b->SeExpr2_ch_buf ) + SeExprYY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (SeExpr2_c_buf_p) = &b->SeExpr2_ch_buf[SeExpr2_c_buf_p_offset]; + + num_to_read = SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > SeExprYY_READ_BUF_SIZE ) + num_to_read = SeExprYY_READ_BUF_SIZE; + + /* Read in more data. */ + SeExprYY_INPUT( (&SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf[number_to_move]), + (SeExpr2_n_chars), num_to_read ); + + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_n_chars = (SeExpr2_n_chars); + } + + if ( (SeExpr2_n_chars) == 0 ) + { + if ( number_to_move == SeExprYY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + SeExpr2restart(SeExpr2in ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buffer_status = + SeExprYY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((SeExpr2_size_t) ((SeExpr2_n_chars) + number_to_move) > SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + SeExpr2_size_t new_size = (SeExpr2_n_chars) + number_to_move + ((SeExpr2_n_chars) >> 1); + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf = (char *) SeExpr2realloc((void *) SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf,new_size ); + if ( ! SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf ) + SeExprYY_FATAL_ERROR( "out of dynamic memory in SeExpr2_get_next_buffer()" ); + } + + (SeExpr2_n_chars) += number_to_move; + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf[(SeExpr2_n_chars)] = SeExprYY_END_OF_BUFFER_CHAR; + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf[(SeExpr2_n_chars) + 1] = SeExprYY_END_OF_BUFFER_CHAR; + + (SeExpr2text_ptr) = &SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf[0]; + + return ret_val; +} + +/* SeExpr2_get_previous_state - get the state just before the EOB char was reached */ + + static SeExpr2_state_type SeExpr2_get_previous_state (void) +{ + register SeExpr2_state_type SeExpr2_current_state; + register char *SeExpr2_cp; + + SeExpr2_current_state = (SeExpr2_start); + + for ( SeExpr2_cp = (SeExpr2text_ptr) + SeExprYY_MORE_ADJ; SeExpr2_cp < (SeExpr2_c_buf_p); ++SeExpr2_cp ) + { + register SeExprYY_CHAR SeExpr2_c = (*SeExpr2_cp ? SeExpr2_ec[SeExprYY_SC_TO_UI(*SeExpr2_cp)] : 1); + if ( SeExpr2_accept[SeExpr2_current_state] ) + { + (SeExpr2_last_accepting_state) = SeExpr2_current_state; + (SeExpr2_last_accepting_cpos) = SeExpr2_cp; + } + while ( SeExpr2_chk[SeExpr2_base[SeExpr2_current_state] + SeExpr2_c] != SeExpr2_current_state ) + { + SeExpr2_current_state = (int) SeExpr2_def[SeExpr2_current_state]; + if ( SeExpr2_current_state >= 160 ) + SeExpr2_c = SeExpr2_meta[(unsigned int) SeExpr2_c]; + } + SeExpr2_current_state = SeExpr2_nxt[SeExpr2_base[SeExpr2_current_state] + (unsigned int) SeExpr2_c]; + } + + return SeExpr2_current_state; +} + +/* SeExpr2_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = SeExpr2_try_NUL_trans( current_state ); + */ + static SeExpr2_state_type SeExpr2_try_NUL_trans (SeExpr2_state_type SeExpr2_current_state ) +{ + register int SeExpr2_is_jam; + register char *SeExpr2_cp = (SeExpr2_c_buf_p); + + register SeExprYY_CHAR SeExpr2_c = 1; + if ( SeExpr2_accept[SeExpr2_current_state] ) + { + (SeExpr2_last_accepting_state) = SeExpr2_current_state; + (SeExpr2_last_accepting_cpos) = SeExpr2_cp; + } + while ( SeExpr2_chk[SeExpr2_base[SeExpr2_current_state] + SeExpr2_c] != SeExpr2_current_state ) + { + SeExpr2_current_state = (int) SeExpr2_def[SeExpr2_current_state]; + if ( SeExpr2_current_state >= 160 ) + SeExpr2_c = SeExpr2_meta[(unsigned int) SeExpr2_c]; + } + SeExpr2_current_state = SeExpr2_nxt[SeExpr2_base[SeExpr2_current_state] + (unsigned int) SeExpr2_c]; + SeExpr2_is_jam = (SeExpr2_current_state == 159); + + return SeExpr2_is_jam ? 0 : SeExpr2_current_state; +} + +#ifndef SeExprYY_NO_INPUT +#ifdef __cplusplus + static int SeExpr2input (void) +#else + static int input (void) +#endif + +{ + int c; + + *(SeExpr2_c_buf_p) = (SeExpr2_hold_char); + + if ( *(SeExpr2_c_buf_p) == SeExprYY_END_OF_BUFFER_CHAR ) + { + /* SeExpr2_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (SeExpr2_c_buf_p) < &SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_ch_buf[(SeExpr2_n_chars)] ) + /* This was really a NUL. */ + *(SeExpr2_c_buf_p) = '\0'; + + else + { /* need more input */ + SeExpr2_size_t offset = (SeExpr2_c_buf_p) - (SeExpr2text_ptr); + ++(SeExpr2_c_buf_p); + + switch ( SeExpr2_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because SeExpr2_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + SeExpr2restart(SeExpr2in ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( SeExpr2wrap( ) ) + return EOF; + + if ( ! (SeExpr2_did_buffer_switch_on_eof) ) + SeExprYY_NEW_FILE; +#ifdef __cplusplus + return SeExpr2input(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (SeExpr2_c_buf_p) = (SeExpr2text_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (SeExpr2_c_buf_p); /* cast for 8-bit char's */ + *(SeExpr2_c_buf_p) = '\0'; /* preserve SeExpr2text */ + (SeExpr2_hold_char) = *++(SeExpr2_c_buf_p); + + return c; +} +#endif /* ifndef SeExprYY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void SeExpr2restart (FILE * input_file ) +{ + + if ( ! SeExprYY_CURRENT_BUFFER ){ + SeExpr2ensure_buffer_stack (); + SeExprYY_CURRENT_BUFFER_LVALUE = + SeExpr2_create_buffer(SeExpr2in,SeExprYY_BUF_SIZE ); + } + + SeExpr2_init_buffer(SeExprYY_CURRENT_BUFFER,input_file ); + SeExpr2_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void SeExpr2_switch_to_buffer (SeExprYY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * SeExpr2pop_buffer_state(); + * SeExpr2push_buffer_state(new_buffer); + */ + SeExpr2ensure_buffer_stack (); + if ( SeExprYY_CURRENT_BUFFER == new_buffer ) + return; + + if ( SeExprYY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(SeExpr2_c_buf_p) = (SeExpr2_hold_char); + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buf_pos = (SeExpr2_c_buf_p); + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_n_chars = (SeExpr2_n_chars); + } + + SeExprYY_CURRENT_BUFFER_LVALUE = new_buffer; + SeExpr2_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (SeExpr2wrap()) processing, but the only time this flag + * is looked at is after SeExpr2wrap() is called, so it's safe + * to go ahead and always set it. + */ + (SeExpr2_did_buffer_switch_on_eof) = 1; +} + +static void SeExpr2_load_buffer_state (void) +{ + (SeExpr2_n_chars) = SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_n_chars; + (SeExpr2text_ptr) = (SeExpr2_c_buf_p) = SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buf_pos; + SeExpr2in = SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_input_file; + (SeExpr2_hold_char) = *(SeExpr2_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c SeExprYY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + SeExprYY_BUFFER_STATE SeExpr2_create_buffer (FILE * file, int size ) +{ + SeExprYY_BUFFER_STATE b; + + b = (SeExprYY_BUFFER_STATE) SeExpr2alloc(sizeof( struct SeExpr2_buffer_state ) ); + if ( ! b ) + SeExprYY_FATAL_ERROR( "out of dynamic memory in SeExpr2_create_buffer()" ); + + b->SeExpr2_buf_size = size; + + /* SeExpr2_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->SeExpr2_ch_buf = (char *) SeExpr2alloc(b->SeExpr2_buf_size + 2 ); + if ( ! b->SeExpr2_ch_buf ) + SeExprYY_FATAL_ERROR( "out of dynamic memory in SeExpr2_create_buffer()" ); + + b->SeExpr2_is_our_buffer = 1; + + SeExpr2_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with SeExpr2_create_buffer() + * + */ + void SeExpr2_delete_buffer (SeExprYY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == SeExprYY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + SeExprYY_CURRENT_BUFFER_LVALUE = (SeExprYY_BUFFER_STATE) 0; + + if ( b->SeExpr2_is_our_buffer ) + SeExpr2free((void *) b->SeExpr2_ch_buf ); + + SeExpr2free((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a SeExpr2restart() or at EOF. + */ + static void SeExpr2_init_buffer (SeExprYY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + SeExpr2_flush_buffer(b ); + + b->SeExpr2_input_file = file; + b->SeExpr2_fill_buffer = 1; + + /* If b is the current buffer, then SeExpr2_init_buffer was _probably_ + * called from SeExpr2restart() or through SeExpr2_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != SeExprYY_CURRENT_BUFFER){ + b->SeExpr2_bs_lineno = 1; + b->SeExpr2_bs_column = 0; + } + + b->SeExpr2_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, SeExprYY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c SeExprYY_CURRENT_BUFFER. + * + */ + void SeExpr2_flush_buffer (SeExprYY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->SeExpr2_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->SeExpr2_ch_buf[0] = SeExprYY_END_OF_BUFFER_CHAR; + b->SeExpr2_ch_buf[1] = SeExprYY_END_OF_BUFFER_CHAR; + + b->SeExpr2_buf_pos = &b->SeExpr2_ch_buf[0]; + + b->SeExpr2_at_bol = 1; + b->SeExpr2_buffer_status = SeExprYY_BUFFER_NEW; + + if ( b == SeExprYY_CURRENT_BUFFER ) + SeExpr2_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void SeExpr2push_buffer_state (SeExprYY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + SeExpr2ensure_buffer_stack(); + + /* This block is copied from SeExpr2_switch_to_buffer. */ + if ( SeExprYY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(SeExpr2_c_buf_p) = (SeExpr2_hold_char); + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_buf_pos = (SeExpr2_c_buf_p); + SeExprYY_CURRENT_BUFFER_LVALUE->SeExpr2_n_chars = (SeExpr2_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (SeExprYY_CURRENT_BUFFER) + (SeExpr2_buffer_stack_top)++; + SeExprYY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from SeExpr2_switch_to_buffer. */ + SeExpr2_load_buffer_state( ); + (SeExpr2_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void SeExpr2pop_buffer_state (void) +{ + if (!SeExprYY_CURRENT_BUFFER) + return; + + SeExpr2_delete_buffer(SeExprYY_CURRENT_BUFFER ); + SeExprYY_CURRENT_BUFFER_LVALUE = NULL; + if ((SeExpr2_buffer_stack_top) > 0) + --(SeExpr2_buffer_stack_top); + + if (SeExprYY_CURRENT_BUFFER) { + SeExpr2_load_buffer_state( ); + (SeExpr2_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void SeExpr2ensure_buffer_stack (void) +{ + SeExpr2_size_t num_to_alloc; + + if (!(SeExpr2_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (SeExpr2_buffer_stack) = (struct SeExpr2_buffer_state**)SeExpr2alloc + (num_to_alloc * sizeof(struct SeExpr2_buffer_state*) + ); + if ( ! (SeExpr2_buffer_stack) ) + SeExprYY_FATAL_ERROR( "out of dynamic memory in SeExpr2ensure_buffer_stack()" ); + + memset((SeExpr2_buffer_stack), 0, num_to_alloc * sizeof(struct SeExpr2_buffer_state*)); + + (SeExpr2_buffer_stack_max) = num_to_alloc; + (SeExpr2_buffer_stack_top) = 0; + return; + } + + if ((SeExpr2_buffer_stack_top) >= ((SeExpr2_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (SeExpr2_buffer_stack_max) + grow_size; + (SeExpr2_buffer_stack) = (struct SeExpr2_buffer_state**)SeExpr2realloc + ((SeExpr2_buffer_stack), + num_to_alloc * sizeof(struct SeExpr2_buffer_state*) + ); + if ( ! (SeExpr2_buffer_stack) ) + SeExprYY_FATAL_ERROR( "out of dynamic memory in SeExpr2ensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((SeExpr2_buffer_stack) + (SeExpr2_buffer_stack_max), 0, grow_size * sizeof(struct SeExpr2_buffer_state*)); + (SeExpr2_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +SeExprYY_BUFFER_STATE SeExpr2_scan_buffer (char * base, SeExpr2_size_t size ) +{ + SeExprYY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != SeExprYY_END_OF_BUFFER_CHAR || + base[size-1] != SeExprYY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (SeExprYY_BUFFER_STATE) SeExpr2alloc(sizeof( struct SeExpr2_buffer_state ) ); + if ( ! b ) + SeExprYY_FATAL_ERROR( "out of dynamic memory in SeExpr2_scan_buffer()" ); + + b->SeExpr2_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->SeExpr2_buf_pos = b->SeExpr2_ch_buf = base; + b->SeExpr2_is_our_buffer = 0; + b->SeExpr2_input_file = 0; + b->SeExpr2_n_chars = b->SeExpr2_buf_size; + b->SeExpr2_is_interactive = 0; + b->SeExpr2_at_bol = 1; + b->SeExpr2_fill_buffer = 0; + b->SeExpr2_buffer_status = SeExprYY_BUFFER_NEW; + + SeExpr2_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to SeExpr2lex() will + * scan from a @e copy of @a str. + * @param SeExpr2str a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * SeExpr2_scan_bytes() instead. + */ +SeExprYY_BUFFER_STATE SeExpr2_scan_string (SeExpr2const char * SeExpr2str ) +{ + + return SeExpr2_scan_bytes(SeExpr2str,strlen(SeExpr2str) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to SeExpr2lex() will + * scan from a @e copy of @a bytes. + * @param SeExpr2bytes the byte buffer to scan + * @param _SeExpr2bytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +SeExprYY_BUFFER_STATE SeExpr2_scan_bytes (SeExpr2const char * SeExpr2bytes, SeExpr2_size_t _SeExpr2bytes_len ) +{ + SeExprYY_BUFFER_STATE b; + char *buf; + SeExpr2_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _SeExpr2bytes_len + 2; + buf = (char *) SeExpr2alloc(n ); + if ( ! buf ) + SeExprYY_FATAL_ERROR( "out of dynamic memory in SeExpr2_scan_bytes()" ); + + for ( i = 0; i < _SeExpr2bytes_len; ++i ) + buf[i] = SeExpr2bytes[i]; + + buf[_SeExpr2bytes_len] = buf[_SeExpr2bytes_len+1] = SeExprYY_END_OF_BUFFER_CHAR; + + b = SeExpr2_scan_buffer(buf,n ); + if ( ! b ) + SeExprYY_FATAL_ERROR( "bad buffer in SeExpr2_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->SeExpr2_is_our_buffer = 1; + + return b; +} + +#ifndef SeExprYY_EXIT_FAILURE +#define SeExprYY_EXIT_FAILURE 2 +#endif + +static void SeExpr2_fatal_error (SeExpr2const char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( SeExprYY_EXIT_FAILURE ); +} + +/* Redefine SeExpr2less() so it works in section 3 code. */ + +#undef SeExpr2less +#define SeExpr2less(n) \ + do \ + { \ + /* Undo effects of setting up SeExpr2text. */ \ + int SeExpr2less_macro_arg = (n); \ + SeExprYY_LESS_LINENO(SeExpr2less_macro_arg);\ + SeExpr2text[SeExpr2leng] = (SeExpr2_hold_char); \ + (SeExpr2_c_buf_p) = SeExpr2text + SeExpr2less_macro_arg; \ + (SeExpr2_hold_char) = *(SeExpr2_c_buf_p); \ + *(SeExpr2_c_buf_p) = '\0'; \ + SeExpr2leng = SeExpr2less_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int SeExpr2get_lineno (void) +{ + + return SeExpr2lineno; +} + +/** Get the input stream. + * + */ +FILE *SeExpr2get_in (void) +{ + return SeExpr2in; +} + +/** Get the output stream. + * + */ +FILE *SeExpr2get_out (void) +{ + return SeExpr2out; +} + +/** Get the length of the current token. + * + */ +SeExpr2_size_t SeExpr2get_leng (void) +{ + return SeExpr2leng; +} + +/** Get the current token. + * + */ + +char *SeExpr2get_text (void) +{ + return SeExpr2text; +} + +/** Set the current line number. + * @param line_number + * + */ +void SeExpr2set_lineno (int line_number ) +{ + + SeExpr2lineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see SeExpr2_switch_to_buffer + */ +void SeExpr2set_in (FILE * in_str ) +{ + SeExpr2in = in_str ; +} + +void SeExpr2set_out (FILE * out_str ) +{ + SeExpr2out = out_str ; +} + +int SeExpr2get_debug (void) +{ + return SeExpr2_flex_debug; +} + +void SeExpr2set_debug (int bdebug ) +{ + SeExpr2_flex_debug = bdebug ; +} + +static int SeExpr2_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from SeExpr2lex_destroy(), so don't allocate here. + */ + + (SeExpr2_buffer_stack) = 0; + (SeExpr2_buffer_stack_top) = 0; + (SeExpr2_buffer_stack_max) = 0; + (SeExpr2_c_buf_p) = (char *) 0; + (SeExpr2_init) = 0; + (SeExpr2_start) = 0; + +/* Defined in main.c */ +#ifdef SeExprYY_STDINIT + SeExpr2in = stdin; + SeExpr2out = stdout; +#else + SeExpr2in = (FILE *) 0; + SeExpr2out = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * SeExpr2lex_init() + */ + return 0; +} + +/* SeExpr2lex_destroy is for both reentrant and non-reentrant scanners. */ +int SeExpr2lex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(SeExprYY_CURRENT_BUFFER){ + SeExpr2_delete_buffer(SeExprYY_CURRENT_BUFFER ); + SeExprYY_CURRENT_BUFFER_LVALUE = NULL; + SeExpr2pop_buffer_state(); + } + + /* Destroy the stack itself. */ + SeExpr2free((SeExpr2_buffer_stack) ); + (SeExpr2_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * SeExpr2lex() is called, initialization will occur. */ + SeExpr2_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef SeExpr2text_ptr +static void SeExpr2_flex_strncpy (char* s1, SeExpr2const char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef SeExprYY_NEED_STRLEN +static int SeExpr2_flex_strlen (SeExpr2const char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *SeExpr2alloc (SeExpr2_size_t size ) +{ + return (void *) malloc( size ); +} + +void *SeExpr2realloc (void * ptr, SeExpr2_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void SeExpr2free (void * ptr ) +{ + free( (char *) ptr ); /* see SeExpr2realloc() for (char *) cast */ +} + +#define SeExprYYTABLES_NAME "SeExpr2tables" + +#line 133 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" + + + +/* Gets index of current token (corresponding to SeExpr2text). + Used for error reporting. + */ +int SeExpr2pos() +{ + return SeExpr2_c_buf_p - SeExprYY_CURRENT_BUFFER->SeExpr2_ch_buf - SeExpr2leng; +} + diff --git a/windows7/SeExpr/generated/ExprParserLexIn.cpp b/windows7/SeExpr/generated/ExprParserLexIn.cpp new file mode 100644 index 00000000..762f8900 --- /dev/null +++ b/windows7/SeExpr/generated/ExprParserLexIn.cpp @@ -0,0 +1,2090 @@ +#line 2 "ExprParserLexIn.cpp" + +#line 4 "ExprParserLexIn.cpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 37 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart(yyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t yyleng; + +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + yy_size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define yywrap() 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 42 +#define YY_END_OF_BUFFER 43 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[160] = + { 0, + 0, 0, 43, 41, 39, 39, 41, 41, 40, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 31, 41, + 41, 41, 36, 36, 36, 26, 36, 36, 36, 36, + 36, 41, 41, 36, 36, 36, 36, 36, 36, 36, + 41, 15, 0, 32, 0, 40, 0, 34, 23, 13, + 0, 33, 0, 21, 19, 20, 18, 31, 22, 31, + 31, 0, 16, 14, 17, 36, 36, 36, 36, 36, + 25, 36, 36, 36, 37, 38, 24, 36, 36, 36, + 36, 36, 10, 36, 36, 12, 32, 34, 0, 33, + 0, 31, 0, 0, 31, 36, 36, 36, 36, 36, + + 36, 36, 30, 3, 36, 36, 36, 36, 36, 0, + 0, 31, 0, 0, 31, 36, 36, 36, 36, 36, + 36, 36, 11, 36, 36, 36, 36, 35, 0, 31, + 36, 36, 9, 4, 36, 36, 36, 36, 36, 36, + 36, 35, 36, 36, 5, 36, 36, 2, 36, 27, + 28, 1, 36, 7, 8, 36, 6, 29, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 7, 8, 9, 10, 1, + 1, 11, 12, 1, 13, 14, 15, 16, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, + 21, 22, 1, 1, 23, 24, 25, 26, 27, 28, + 29, 26, 30, 26, 26, 31, 32, 33, 34, 35, + 26, 36, 37, 38, 39, 40, 26, 26, 41, 26, + 1, 42, 1, 43, 26, 1, 44, 45, 26, 46, + + 47, 48, 49, 50, 51, 26, 26, 52, 53, 54, + 55, 26, 26, 56, 57, 58, 59, 26, 26, 60, + 26, 26, 1, 61, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[62] = + { 0, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 3, 3, 4, 1, 1, + 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 1, 1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 1 + } ; + +static yyconst flex_int16_t yy_base[168] = + { 0, + 0, 0, 245, 246, 246, 246, 223, 57, 201, 0, + 221, 232, 53, 219, 218, 43, 50, 217, 54, 216, + 215, 214, 0, 207, 199, 196, 200, 200, 191, 195, + 204, 15, 205, 170, 177, 20, 179, 174, 170, 167, + 158, 246, 69, 246, 70, 176, 163, 198, 246, 246, + 66, 246, 67, 246, 246, 246, 246, 66, 246, 69, + 73, 90, 246, 246, 246, 0, 186, 181, 177, 178, + 0, 175, 180, 173, 246, 246, 246, 148, 159, 149, + 147, 145, 0, 149, 147, 246, 73, 183, 182, 81, + 105, 108, 114, 81, 88, 169, 161, 163, 173, 165, + + 166, 152, 0, 0, 145, 144, 133, 142, 133, 0, + 112, 116, 124, 122, 126, 154, 148, 149, 146, 150, + 148, 151, 0, 124, 121, 128, 109, 0, 128, 130, + 146, 134, 0, 0, 125, 117, 119, 97, 99, 93, + 98, 0, 115, 86, 0, 82, 81, 0, 50, 0, + 0, 246, 54, 0, 0, 34, 0, 0, 246, 155, + 160, 79, 165, 168, 171, 74, 174 + } ; + +static yyconst flex_int16_t yy_def[168] = + { 0, + 159, 1, 159, 159, 159, 159, 159, 160, 161, 162, + 159, 159, 163, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 159, 159, 164, 164, 164, 164, 164, 164, 164, + 159, 159, 160, 159, 160, 161, 161, 165, 159, 159, + 163, 159, 163, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 159, 159, 159, 164, 164, 164, + 164, 164, 164, 164, 164, 159, 160, 165, 159, 163, + 159, 159, 159, 159, 159, 164, 164, 164, 164, 164, + + 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, + 159, 159, 159, 159, 159, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 167, 159, 159, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 167, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 159, 164, 164, 164, 164, 164, 164, 0, 159, + 159, 159, 159, 159, 159, 159, 159 + } ; + +static yyconst flex_int16_t yy_nxt[308] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 19, 4, 4, 20, + 21, 22, 23, 24, 25, 23, 26, 27, 23, 23, + 23, 23, 23, 23, 28, 23, 29, 23, 30, 31, + 23, 32, 33, 23, 34, 35, 36, 23, 37, 23, + 38, 39, 23, 23, 23, 23, 40, 23, 23, 23, + 41, 44, 52, 56, 57, 58, 58, 60, 75, 61, + 61, 80, 76, 44, 87, 52, 90, 44, 128, 81, + 62, 58, 58, 48, 92, 92, 60, 158, 61, 61, + 52, 157, 91, 156, 53, 93, 95, 95, 45, 62, + + 62, 94, 94, 95, 95, 95, 95, 53, 53, 155, + 45, 45, 91, 154, 45, 93, 111, 111, 153, 62, + 112, 112, 53, 92, 92, 114, 114, 112, 112, 115, + 115, 112, 112, 152, 113, 129, 129, 115, 115, 130, + 130, 115, 115, 130, 130, 130, 130, 151, 150, 149, + 148, 147, 146, 145, 113, 43, 144, 43, 43, 43, + 46, 143, 46, 46, 46, 51, 141, 51, 51, 51, + 66, 140, 66, 88, 88, 88, 142, 139, 142, 138, + 137, 136, 135, 134, 133, 132, 131, 127, 126, 125, + 124, 123, 122, 121, 120, 119, 118, 117, 116, 110, + + 89, 109, 108, 107, 106, 105, 104, 103, 102, 101, + 100, 99, 98, 97, 96, 89, 159, 47, 86, 85, + 84, 83, 82, 79, 78, 77, 74, 73, 72, 71, + 70, 69, 68, 67, 65, 64, 63, 59, 55, 54, + 50, 49, 47, 42, 159, 3, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 159, 159, 159, 159, 159, 159, 159 + } ; + +static yyconst flex_int16_t yy_chk[308] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 8, 13, 16, 16, 17, 17, 19, 32, 19, + 19, 36, 32, 43, 45, 51, 53, 87, 166, 36, + 19, 58, 58, 162, 60, 60, 61, 156, 61, 61, + 90, 153, 58, 149, 13, 60, 94, 94, 8, 61, + + 19, 62, 62, 95, 95, 62, 62, 51, 53, 147, + 43, 45, 58, 146, 87, 60, 91, 91, 144, 61, + 91, 91, 90, 92, 92, 93, 93, 111, 111, 93, + 93, 112, 112, 143, 92, 113, 113, 114, 114, 113, + 113, 115, 115, 129, 129, 130, 130, 141, 140, 139, + 138, 137, 136, 135, 92, 160, 132, 160, 160, 160, + 161, 131, 161, 161, 161, 163, 127, 163, 163, 163, + 164, 126, 164, 165, 165, 165, 167, 125, 167, 124, + 122, 121, 120, 119, 118, 117, 116, 109, 108, 107, + 106, 105, 102, 101, 100, 99, 98, 97, 96, 89, + + 88, 85, 84, 82, 81, 80, 79, 78, 74, 73, + 72, 70, 69, 68, 67, 48, 47, 46, 41, 40, + 39, 38, 37, 35, 34, 33, 31, 30, 29, 28, + 27, 26, 25, 24, 22, 21, 20, 18, 15, 14, + 12, 11, 9, 7, 3, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 159, 159, 159, 159, 159, 159, 159 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *yytext; +#line 1 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +/* + Copyright Disney Enterprises, Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License + and the following modification to it: Section 6 Trademarks. + deleted and replaced with: + + 6. Trademarks. This License does not grant permission to use the + trade names, trademarks, service marks, or product names of the + Licensor and its affiliates, except as required for reproducing + the content of the NOTICE file. + + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +*/ +/* Don't generate yywrap since everything is in one string */ +/* Don't generate unput since it's unused and gcc complains... */ +#line 24 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +#ifndef MAKEDEPEND +# include +# include +# include +# include +# include +#endif + +// If c++11 don't use register designator, lex and yacc need to go... +#if __cplusplus > 199711L +#define register // Deprecated in C++11. +#endif // #if __cplusplus > 199711L + +#include "Platform.h" +#include "ExprParser.h" +#include "ExprNode.h" +#include "Expression.h" + +#ifdef SEEXPR_WIN32 +# define YY_NO_UNISTD_H +# define YY_SKIP_YYWRAP +#endif + +#ifndef MAKEDEPEND +# include "ExprParser.tab.h" +#endif + +// TODO: make this thread safe +static int columnNumber=0; // really buffer position +static int lineNumber=0; // not used +std::vector >* comments=0; +//! For lexer's internal use only! +void SeExprLexerResetState(std::vector >& commentsIn){ + comments=&commentsIn; + columnNumber=lineNumber=0; +} + +int yypos(); + +#define YY_USER_ACTION { \ + yylloc.first_line=lineNumber;yylloc.first_column=columnNumber; \ + columnNumber+=yyleng;\ + yylloc.last_column=columnNumber;yylloc.last_line=lineNumber;} + +#line 639 "ExprParserLexIn.cpp" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +yy_size_t yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 75 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" + +#line 821 "ExprParserLexIn.cpp" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 160 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 246 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 76 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" + + YY_BREAK +case 2: +YY_RULE_SETUP +#line 78 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return EXTERN; } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 79 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return DEF; } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 80 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return FLOATPOINT; } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 81 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return STRING; } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 82 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return LIFETIME_CONSTANT; } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 83 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return LIFETIME_UNIFORM; } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 84 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return LIFETIME_VARYING; } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 85 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return LIFETIME_ERROR; } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 87 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return IF; } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 88 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return ELSE; } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 90 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return OR; } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 91 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return AND; } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 92 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return EQ; } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 93 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return NE; } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 94 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return SEEXPR_LE; } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 95 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return SEEXPR_GE; } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 96 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return ARROW; } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 97 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return AddEq; } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 98 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return SubEq; } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 99 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return MultEq; } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 100 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return DivEq; } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 101 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return ModEq; } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 102 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return ExpEq; } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 104 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.d = M_PI; return NUMBER; } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 105 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.d = M_E; return NUMBER; } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 106 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.d = 0; return NUMBER; } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 107 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.d = 1; return NUMBER; } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 108 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.d = 2; return NUMBER; } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 109 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.d = 3; return NUMBER; } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 111 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.d = atof(yytext); return NUMBER; } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 112 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ /* match quoted string, allow embedded quote, \" */ + yylval.s = strdup(&yytext[1]); + yylval.s[strlen(yylval.s)-1] = '\0'; + return STR; } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 116 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ /* match quoted string, allow embedded quote, \' */ + yylval.s = strdup(&yytext[1]); + yylval.s[strlen(yylval.s)-1] = '\0'; + return STR; } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 120 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.s = strdup(&yytext[1]); return VAR; } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 121 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.s = strdup(&yytext[1]); return VAR; } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 122 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ yylval.s = strdup(yytext); return NAME; } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 124 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +/* ignore quoted newline */; + YY_BREAK +case 38: +YY_RULE_SETUP +#line 125 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +/* ignore quoted tab */; + YY_BREAK +case 39: +/* rule 39 can match eol */ +YY_RULE_SETUP +#line 126 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +/* ignore whitespace */; + YY_BREAK +case 40: +YY_RULE_SETUP +#line 127 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ /* match comment */ + int startPos=yypos(),endPos=yypos()+strlen(&yytext[1])+1; + comments->push_back(std::pair(startPos,endPos));} + YY_BREAK +case 41: +YY_RULE_SETUP +#line 131 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +{ return yytext[0]; } + YY_BREAK +case 42: +YY_RULE_SETUP +#line 133 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" +ECHO; + YY_BREAK +#line 1123 "ExprParserLexIn.cpp" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + yy_size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + yy_size_t new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart(yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 160 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 160 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 159); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart(yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +yy_size_t yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void yyset_lineno (int line_number ) +{ + + yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str ) +{ + yyin = in_str ; +} + +void yyset_out (FILE * out_str ) +{ + yyout = out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int bdebug ) +{ + yy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 133 "/disney/users/jberlin/projects/seexpr2/src/SeExpr/ExprParserLex.l" + + + +/* Gets index of current token (corresponding to yytext). + Used for error reporting. + */ +int yypos() +{ + return yy_c_buf_p - YY_CURRENT_BUFFER->yy_ch_buf - yyleng; +} + diff --git a/windows7/ui/generated/ExprSpecParser.cpp b/windows7/ui/generated/ExprSpecParser.cpp new file mode 100644 index 00000000..ed305dba --- /dev/null +++ b/windows7/ui/generated/ExprSpecParser.cpp @@ -0,0 +1,2707 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + + This program 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. + + This program 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 this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with ExprSpec or ExprSpecYY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define ExprSpecYYBISON 1 + +/* Bison version. */ +#define ExprSpecYYBISON_VERSION "2.7" + +/* Skeleton name. */ +#define ExprSpecYYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define ExprSpecYYPURE 0 + +/* Push parsers. */ +#define ExprSpecYYPUSH 0 + +/* Pull parsers. */ +#define ExprSpecYYPULL 1 + + +/* Substitute the variable and function names. */ +#define ExprSpecparse ExprSpecparse +#define ExprSpeclex ExprSpeclex +#define ExprSpecerror ExprSpecerror +#define ExprSpeclval ExprSpeclval +#define ExprSpecchar ExprSpecchar +#define ExprSpecdebug ExprSpecdebug +#define ExprSpecnerrs ExprSpecnerrs +#define ExprSpeclloc ExprSpeclloc + +/* Copy the first part of user declarations. */ +/* Line 371 of yacc.c */ +#line 18 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + +#include +#include +#include +#include +#include +#include +#ifdef SEEXPR_USE_ANIMLIB +#include +#include +#else +#define UNUSED(x) (void)(x) +#endif +#include +#include +#include "ExprSpecType.h" +#include "Editable.h" +#include "ExprDeepWater.h" + + +/****************** + lexer declarations + ******************/ + + +#define SPEC_IS_NUMBER(x) \ + (dynamic_cast(x) != 0) +#define SPEC_IS_VECTOR(x) \ + (dynamic_cast(x) != 0) +#define SPEC_IS_STR(x) \ + (dynamic_cast(x) != 0) + +// declarations of functions and data in ExprParser.y +int ExprSpeclex(); +int ExprSpecpos(); +extern int ExprSpec_start; +extern char* ExprSpectext; +struct ExprSpec_buffer_state; +ExprSpec_buffer_state* ExprSpec_scan_string(const char *str); +void ExprSpec_delete_buffer(ExprSpec_buffer_state*); + +//##################################### +// Keep track of mini parse tree nodes + +// temporary to the parse... all pointers deleted at end of parse +static std::vector specNodes; +/// Remember the spec node, so we can delete it later +static ExprSpecNode* remember(ExprSpecNode* node) +{specNodes.push_back(node);return node;} + + +/// list of strings duplicated by lexer to avoid error mem leak +static std::vector tokens; + +char* specRegisterToken(char* rawString) +{ + char* tok=strdup(rawString); + tokens.push_back(tok); + return tok; +} + +//###################################################################### +// Expose parser API inputs/outputs to yacc as statics + +// these are pointers to the arguments send into parse API +// made static here so the parser can see them in yacc actions +static std::vector* editables; +static std::vector* variables; + +static const char* ParseStr; // string being parsed +static std::string ParseError; // error (set from ExprSpecerror) +static ExprSpecNode* ParseResult; // must set result here since ExprSpecparse can't return it + + +//###################################################################### +// Helpers used by actions to register data + + +/// Remember that there is an assignment to this variable (For autocomplete) +static void specRegisterVariable(const char* var) +{ + variables->push_back(var); +} + +/// Variable Assignment/String literal should be turned into an editable +/// an editable is the data part of a control (it's model essentially) +static void specRegisterEditable(const char* var,ExprSpecNode* node) +{ + //std::cerr<<"we have editable var "<(node)){ + editables->push_back(new NumberEditable(var,node->startPos,node->endPos,n->v)); + }else if(ExprSpecVectorNode* n=dynamic_cast(node)){ + editables->push_back(new VectorEditable(var,node->startPos,node->endPos,n->v)); + }else if(ExprSpecStringNode* n=dynamic_cast(node)){ + editables->push_back(new StringEditable(node->startPos,node->endPos,n->v)); + }else if(ExprSpecCCurveNode* n=dynamic_cast(node)){ + if(ExprSpecListNode* args=dynamic_cast(n->args)){ + if((args->nodes.size())%3==0){ + ColorCurveEditable* ccurve=new ColorCurveEditable(var,node->startPos,node->endPos); + bool valid=true; + for(size_t i=0;inodes.size();i+=3){ + ExprSpecScalarNode* xnode=dynamic_cast(args->nodes[i]); + ExprSpecVectorNode* ynode=dynamic_cast(args->nodes[i+1]); + ExprSpecScalarNode* interpnode=dynamic_cast(args->nodes[i+2]); + if(xnode && ynode && interpnode){ + ccurve->add(xnode->v,ynode->v,interpnode->v); + }else{ + valid=false; + } + } + if(valid) editables->push_back(ccurve); + else delete ccurve; + }else{ + //std::cerr<<"Curve has wrong # of args"<nodes.size()<(node)){ + if(ExprSpecListNode* args=dynamic_cast(n->args)){ + if((args->nodes.size())%3==0){ + CurveEditable* ccurve=new CurveEditable(var,node->startPos,node->endPos); + bool valid=true; + for(size_t i=0;inodes.size();i+=3){ + ExprSpecScalarNode* xnode=dynamic_cast(args->nodes[i]); + ExprSpecScalarNode* ynode=dynamic_cast(args->nodes[i+1]); + ExprSpecScalarNode* interpnode=dynamic_cast(args->nodes[i+2]); + if(xnode && ynode && interpnode){ + ccurve->add(xnode->v,ynode->v,interpnode->v); + }else{ + valid=false; + } + } + if(valid) editables->push_back(ccurve); + else{ + delete ccurve; + } + } + } + }else if(ExprSpecColorSwatchNode* n=dynamic_cast(node)){ + if(ExprSpecListNode* args=dynamic_cast(n->args)){ + if(args->nodes.size()>0){ + ColorSwatchEditable* swatch=new ColorSwatchEditable(var,node->startPos,node->endPos); + bool valid=true; + for(size_t i=0;inodes.size();i++){ + ExprSpecVectorNode* colornode=dynamic_cast(args->nodes[i]); + if(colornode){ + swatch->add(colornode->v); + }else{ + valid=false; + } + } + if(valid) editables->push_back(swatch); + else delete swatch; + } + } + }else if(ExprSpecAnimCurveNode* n=dynamic_cast(node)){ + if(ExprSpecListNode* args=dynamic_cast(n->args)){ + // need 3 items for pre inf and post inf and weighting, plus 9 items per key + if((args->nodes.size()-4)%9==0){ + AnimCurveEditable* animCurve=new AnimCurveEditable(var,node->startPos,node->endPos); + bool valid=true; + + +#ifdef SEEXPR_USE_ANIMLIB + if(ExprSpecStringNode* s=dynamic_cast(args->nodes[0])){ + animCurve->curve.setPreInfinity(animlib::AnimCurve::stringToInfinityType(s->v)); + }else valid=false; + if(ExprSpecStringNode* s=dynamic_cast(args->nodes[1])){ + animCurve->curve.setPostInfinity(animlib::AnimCurve::stringToInfinityType(s->v)); + }else valid=false; + if(ExprSpecScalarNode* v=dynamic_cast(args->nodes[2])){ + animCurve->curve.setWeighted(bool(v->v)); + } + if(ExprSpecStringNode* v=dynamic_cast(args->nodes[3])){ + animCurve->link=v->v; + } + + for(size_t i=4;inodes.size();i+=9){ + ExprSpecScalarNode* xnode=dynamic_cast(args->nodes[i]); + ExprSpecScalarNode* ynode=dynamic_cast(args->nodes[i+1]); + ExprSpecScalarNode* inWeight=dynamic_cast(args->nodes[i+2]); + ExprSpecScalarNode* outWeight=dynamic_cast(args->nodes[i+3]); + ExprSpecScalarNode* inAngle=dynamic_cast(args->nodes[i+4]); + ExprSpecScalarNode* outAngle=dynamic_cast(args->nodes[i+5]); + ExprSpecStringNode* inTangType=dynamic_cast(args->nodes[i+6]); + ExprSpecStringNode* outTangType=dynamic_cast(args->nodes[i+7]); + ExprSpecScalarNode* weighted=dynamic_cast(args->nodes[i+8]); + if(xnode && ynode && inWeight && outWeight && inAngle && outAngle && inTangType && outTangType ){ + animlib::AnimKeyframe key(xnode->v,ynode->v); + key.setInWeight(inWeight->v); + key.setOutWeight(outWeight->v); + key.setInAngle(inAngle->v); + key.setOutAngle(outAngle->v); + key.setInTangentType(animlib::AnimKeyframe::stringToTangentType(inTangType->v)); + key.setOutTangentType(animlib::AnimKeyframe::stringToTangentType(outTangType->v)); + key.setWeightsLocked(weighted->v); + animCurve->curve.addKey(key); + }else{ + valid=false; + } + } + if(valid) editables->push_back(animCurve); + else delete animCurve; +#else + UNUSED(animCurve); + UNUSED(valid); +#endif + } + } + }else if(ExprSpecDeepWaterNode* n=dynamic_cast(node)){ + if(ExprSpecListNode* args=dynamic_cast(n->args)){ + if(args->nodes.size()==12){ + DeepWaterEditable* deepWater=new DeepWaterEditable(var,node->startPos,node->endPos); + bool valid=true; + + ExprSpecScalarNode* resolution=dynamic_cast(args->nodes[0]); + ExprSpecScalarNode* tileSize=dynamic_cast(args->nodes[1]); + ExprSpecScalarNode* lengthCutoff=dynamic_cast(args->nodes[2]); + ExprSpecScalarNode* amplitude=dynamic_cast(args->nodes[3]); + ExprSpecScalarNode* windAngle=dynamic_cast(args->nodes[4]); + ExprSpecScalarNode* windSpeed=dynamic_cast(args->nodes[5]); + ExprSpecScalarNode* directionalFactorExponent=dynamic_cast(args->nodes[6]); + ExprSpecScalarNode* directionalReflectionDamping=dynamic_cast(args->nodes[7]); + ExprSpecVectorNode* flowDirection=dynamic_cast(args->nodes[8]); + ExprSpecScalarNode* sharpen=dynamic_cast(args->nodes[9]); + ExprSpecScalarNode* time=dynamic_cast(args->nodes[10]); + ExprSpecScalarNode* filterWidth=dynamic_cast(args->nodes[11]); + if(resolution && tileSize && lengthCutoff && amplitude && windAngle && windSpeed && directionalFactorExponent && directionalReflectionDamping && flowDirection && sharpen && time && filterWidth){ + deepWater->setParams(SeDeepWaterParams(resolution->v, tileSize->v, lengthCutoff->v, amplitude->v, windAngle->v, windSpeed->v, directionalFactorExponent->v, directionalReflectionDamping->v, flowDirection->v, sharpen->v, time->v, filterWidth->v)); + }else{ + valid=false; + } + + if(valid) editables->push_back(deepWater); + else delete deepWater; + } + } + }else{ + std::cerr<<"SEEXPREDITOR LOGIC ERROR: We didn't recognize the Spec"< /* INFRINGES ON USER NAME SPACE */ +# define ExprSpecYYSIZE_T size_t +# else +# define ExprSpecYYSIZE_T unsigned int +# endif +#endif + +#define ExprSpecYYSIZE_MAXIMUM ((ExprSpecYYSIZE_T) -1) + +#ifndef ExprSpecYY_ +# if defined ExprSpecYYENABLE_NLS && ExprSpecYYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define ExprSpecYY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef ExprSpecYY_ +# define ExprSpecYY_(Msgid) Msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define ExprSpecYYUSE(E) ((void) (E)) +#else +# define ExprSpecYYUSE(E) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define ExprSpecYYID(N) (N) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +ExprSpecYYID (int ExprSpeci) +#else +static int +ExprSpecYYID (ExprSpeci) + int ExprSpeci; +#endif +{ + return ExprSpeci; +} +#endif + +#if ! defined ExprSpecoverflow || ExprSpecYYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef ExprSpecYYSTACK_USE_ALLOCA +# if ExprSpecYYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define ExprSpecYYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define ExprSpecYYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define ExprSpecYYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef ExprSpecYYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define ExprSpecYYSTACK_FREE(Ptr) do { /* empty */; } while (ExprSpecYYID (0)) +# ifndef ExprSpecYYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define ExprSpecYYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define ExprSpecYYSTACK_ALLOC ExprSpecYYMALLOC +# define ExprSpecYYSTACK_FREE ExprSpecYYFREE +# ifndef ExprSpecYYSTACK_ALLOC_MAXIMUM +# define ExprSpecYYSTACK_ALLOC_MAXIMUM ExprSpecYYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined ExprSpecYYMALLOC || defined malloc) \ + && (defined ExprSpecYYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef ExprSpecYYMALLOC +# define ExprSpecYYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (ExprSpecYYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef ExprSpecYYFREE +# define ExprSpecYYFREE free +# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined ExprSpecoverflow || ExprSpecYYERROR_VERBOSE */ + + +#if (! defined ExprSpecoverflow \ + && (! defined __cplusplus \ + || (defined ExprSpecYYLTYPE_IS_TRIVIAL && ExprSpecYYLTYPE_IS_TRIVIAL \ + && defined ExprSpecYYSTYPE_IS_TRIVIAL && ExprSpecYYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union ExprSpecalloc +{ + ExprSpectype_int16 ExprSpecss_alloc; + ExprSpecYYSTYPE ExprSpecvs_alloc; + ExprSpecYYLTYPE ExprSpecls_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define ExprSpecYYSTACK_GAP_MAXIMUM (sizeof (union ExprSpecalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define ExprSpecYYSTACK_BYTES(N) \ + ((N) * (sizeof (ExprSpectype_int16) + sizeof (ExprSpecYYSTYPE) + sizeof (ExprSpecYYLTYPE)) \ + + 2 * ExprSpecYYSTACK_GAP_MAXIMUM) + +# define ExprSpecYYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables ExprSpecYYSIZE and ExprSpecYYSTACKSIZE give the old and new number of + elements in the stack, and ExprSpecYYPTR gives the new location of the + stack. Advance ExprSpecYYPTR to a properly aligned location for the next + stack. */ +# define ExprSpecYYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + ExprSpecYYSIZE_T ExprSpecnewbytes; \ + ExprSpecYYCOPY (&ExprSpecptr->Stack_alloc, Stack, ExprSpecsize); \ + Stack = &ExprSpecptr->Stack_alloc; \ + ExprSpecnewbytes = ExprSpecstacksize * sizeof (*Stack) + ExprSpecYYSTACK_GAP_MAXIMUM; \ + ExprSpecptr += ExprSpecnewbytes / sizeof (*ExprSpecptr); \ + } \ + while (ExprSpecYYID (0)) + +#endif + +#if defined ExprSpecYYCOPY_NEEDED && ExprSpecYYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef ExprSpecYYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define ExprSpecYYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define ExprSpecYYCOPY(Dst, Src, Count) \ + do \ + { \ + ExprSpecYYSIZE_T ExprSpeci; \ + for (ExprSpeci = 0; ExprSpeci < (Count); ExprSpeci++) \ + (Dst)[ExprSpeci] = (Src)[ExprSpeci]; \ + } \ + while (ExprSpecYYID (0)) +# endif +# endif +#endif /* !ExprSpecYYCOPY_NEEDED */ + +/* ExprSpecYYFINAL -- State number of the termination state. */ +#define ExprSpecYYFINAL 40 +/* ExprSpecYYLAST -- Last index in ExprSpecYYTABLE. */ +#define ExprSpecYYLAST 693 + +/* ExprSpecYYNTOKENS -- Number of terminals. */ +#define ExprSpecYYNTOKENS 44 +/* ExprSpecYYNNTS -- Number of nonterminals. */ +#define ExprSpecYYNNTS 11 +/* ExprSpecYYNRULES -- Number of rules. */ +#define ExprSpecYYNRULES 59 +/* ExprSpecYYNRULES -- Number of states. */ +#define ExprSpecYYNSTATES 139 + +/* ExprSpecYYTRANSLATE(ExprSpecYYLEX) -- Bison symbol number corresponding to ExprSpecYYLEX. */ +#define ExprSpecYYUNDEFTOK 2 +#define ExprSpecYYMAXUTOK 277 + +#define ExprSpecYYTRANSLATE(ExprSpecYYX) \ + ((unsigned int) (ExprSpecYYX) <= ExprSpecYYMAXUTOK ? ExprSpectranslate[ExprSpecYYX] : ExprSpecYYUNDEFTOK) + +/* ExprSpecYYTRANSLATE[ExprSpecYYLEX] -- Bison symbol number corresponding to ExprSpecYYLEX. */ +static const ExprSpectype_uint8 ExprSpectranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 33, 2, 2, 2, 32, 2, 2, + 15, 16, 30, 28, 42, 29, 2, 31, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 18, 39, + 24, 38, 25, 19, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 37, 2, 43, 36, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 40, 2, 41, 34, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 17, 20, 21, 22, 23, 26, 27, 35 +}; + +#if ExprSpecYYDEBUG +/* ExprSpecYYPRHS[ExprSpecYYN] -- Index of the first RHS symbol of rule number ExprSpecYYN in + ExprSpecYYRHS. */ +static const ExprSpectype_uint8 ExprSpecprhs[] = +{ + 0, 0, 3, 6, 8, 9, 11, 13, 16, 18, + 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, + 73, 78, 83, 88, 97, 98, 103, 106, 110, 118, + 123, 129, 133, 137, 141, 145, 149, 153, 157, 161, + 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, + 202, 209, 211, 213, 215, 216, 218, 220, 224, 226 +}; + +/* ExprSpecYYRHS -- A `-1'-separated list of the rules' RHS. */ +static const ExprSpectype_int8 ExprSpecrhs[] = +{ + 45, 0, -1, 47, 51, -1, 51, -1, -1, 47, + -1, 48, -1, 47, 48, -1, 49, -1, 6, 38, + 51, 39, -1, 6, 9, 51, 39, -1, 6, 10, + 51, 39, -1, 6, 11, 51, 39, -1, 6, 12, + 51, 39, -1, 6, 13, 51, 39, -1, 6, 14, + 51, 39, -1, 5, 38, 51, 39, -1, 5, 9, + 51, 39, -1, 5, 10, 51, 39, -1, 5, 11, + 51, 39, -1, 5, 12, 51, 39, -1, 5, 13, + 51, 39, -1, 5, 14, 51, 39, -1, 3, 15, + 51, 16, 40, 46, 41, 50, -1, -1, 4, 40, + 46, 41, -1, 4, 49, -1, 15, 51, 16, -1, + 37, 51, 42, 51, 42, 51, 43, -1, 51, 37, + 51, 43, -1, 51, 19, 51, 18, 51, -1, 51, + 20, 51, -1, 51, 21, 51, -1, 51, 23, 51, + -1, 51, 22, 51, -1, 51, 24, 51, -1, 51, + 25, 51, -1, 51, 27, 51, -1, 51, 26, 51, + -1, 28, 51, -1, 29, 51, -1, 33, 51, -1, + 34, 51, -1, 51, 28, 51, -1, 51, 29, 51, + -1, 51, 30, 51, -1, 51, 31, 51, -1, 51, + 32, 51, -1, 51, 36, 51, -1, 5, 15, 52, + 16, -1, 51, 17, 5, 15, 52, 16, -1, 6, + -1, 5, -1, 8, -1, -1, 53, -1, 54, -1, + 53, 42, 54, -1, 51, -1, 7, -1 +}; + +/* ExprSpecYYRLINE[ExprSpecYYN] -- source line where rule number ExprSpecYYN was defined. */ +static const ExprSpectype_uint16 ExprSpecrline[] = +{ + 0, 313, 313, 314, 319, 320, 324, 325, 330, 331, + 335, 336, 337, 338, 339, 340, 341, 345, 346, 347, + 348, 349, 350, 354, 359, 360, 361, 366, 367, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 425, 426, 427, 428, 433, 434, 439, 448, 460, 461 +}; +#endif + +#if ExprSpecYYDEBUG || ExprSpecYYERROR_VERBOSE || 0 +/* ExprSpecYYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at ExprSpecYYNTOKENS, nonterminals. */ +static const char *const ExprSpectname[] = +{ + "$end", "error", "$undefined", "IF", "ELSE", "NAME", "VAR", "STR", + "NUMBER", "AddEq", "SubEq", "MultEq", "DivEq", "ExpEq", "ModEq", "'('", + "')'", "ARROW", "':'", "'?'", "OR", "AND", "NE", "EQ", "'<'", "'>'", + "GE", "LE", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "'~'", "UNARY", + "'^'", "'['", "'='", "';'", "'{'", "'}'", "','", "']'", "$accept", + "expr", "optassigns", "assigns", "assign", "ifthenelse", "optelse", "e", + "optargs", "args", "arg", ExprSpecYY_NULL +}; +#endif + +# ifdef ExprSpecYYPRINT +/* ExprSpecYYTOKNUM[ExprSpecYYLEX-NUM] -- Internal token number corresponding to + token ExprSpecYYLEX-NUM. */ +static const ExprSpectype_uint16 ExprSpectoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 40, 41, 270, 58, 63, + 271, 272, 273, 274, 60, 62, 275, 276, 43, 45, + 42, 47, 37, 33, 126, 277, 94, 91, 61, 59, + 123, 125, 44, 93 +}; +# endif + +/* ExprSpecYYR1[ExprSpecYYN] -- Symbol number of symbol that rule ExprSpecYYN derives. */ +static const ExprSpectype_uint8 ExprSpecr1[] = +{ + 0, 44, 45, 45, 46, 46, 47, 47, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 49, 50, 50, 50, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 52, 52, 53, 53, 54, 54 +}; + +/* ExprSpecYYR2[ExprSpecYYN] -- Number of symbols composing right hand side of rule ExprSpecYYN. */ +static const ExprSpectype_uint8 ExprSpecr2[] = +{ + 0, 2, 2, 1, 0, 1, 1, 2, 1, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 8, 0, 4, 2, 3, 7, 4, + 5, 3, 3, 3, 3, 3, 3, 3, 3, 2, + 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, + 6, 1, 1, 1, 0, 1, 1, 3, 1, 1 +}; + +/* ExprSpecYYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. + Performed when ExprSpecYYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const ExprSpectype_uint8 ExprSpecdefact[] = +{ + 0, 0, 52, 51, 53, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 8, 3, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, + 0, 0, 52, 51, 0, 39, 40, 41, 42, 0, + 1, 7, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 58, 0, + 55, 56, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 31, 32, 34, 33, 35, 36, + 38, 37, 43, 44, 45, 46, 47, 48, 0, 0, + 17, 18, 19, 20, 21, 22, 49, 0, 16, 10, + 11, 12, 13, 14, 15, 9, 0, 54, 0, 29, + 4, 57, 0, 0, 30, 0, 0, 0, 5, 0, + 50, 24, 28, 0, 23, 4, 26, 0, 25 +}; + +/* ExprSpecYYDEFGOTO[NTERM-NUM]. */ +static const ExprSpectype_int16 ExprSpecdefgoto[] = +{ + -1, 11, 127, 128, 13, 14, 134, 68, 69, 70, + 71 +}; + +/* ExprSpecYYPACT[STATE-NUM] -- Index in ExprSpecYYTABLE of the portion describing + STATE-NUM. */ +#define ExprSpecYYPACT_NINF -65 +static const ExprSpectype_int16 ExprSpecpact[] = +{ + 57, 25, 23, 127, -65, 98, 98, 98, 98, 98, + 98, 15, 57, -65, -65, 590, 98, 98, 98, 98, + 98, 98, 98, 68, 98, 98, 98, 98, 98, 98, + 98, 98, 26, -65, 526, -33, -33, -33, -33, 181, + -65, -65, 590, 18, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 548, 229, 250, 271, 292, 313, 334, -65, 590, 27, + 22, -65, 355, 376, 397, 418, 439, 460, 481, 502, + -65, 98, 51, 569, 626, 642, 656, 656, 79, 79, + 79, 79, 93, 93, -33, -33, -33, -33, 131, 2, + -65, -65, -65, -65, -65, -65, -65, 68, -65, -65, + -65, -65, -65, -65, -65, -65, 205, 68, 98, -65, + 8, -65, 98, 52, 609, 133, 127, 28, 8, 156, + -65, 63, -65, -1, -65, 8, -65, 29, -65 +}; + +/* ExprSpecYYPGOTO[NTERM-NUM]. */ +static const ExprSpectype_int8 ExprSpecpgoto[] = +{ + -65, -65, -64, 77, -11, -55, -65, 0, -38, -65, + -27 +}; + +/* ExprSpecYYTABLE[ExprSpecYYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If ExprSpecYYTABLE_NINF, syntax error. */ +#define ExprSpecYYTABLE_NINF -1 +static const ExprSpectype_uint8 ExprSpectable[] = +{ + 15, 41, 1, 58, 59, 34, 35, 36, 37, 38, + 39, 1, 42, 125, 126, 40, 60, 61, 62, 63, + 64, 65, 66, 82, 72, 73, 74, 75, 76, 77, + 78, 79, 17, 18, 19, 20, 21, 22, 23, 135, + 16, 23, 120, 106, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 1, 24, 2, 3, 107, 4, 117, 133, 130, 131, + 138, 137, 5, 32, 33, 67, 4, 12, 136, 123, + 121, 116, 0, 5, 0, 6, 7, 0, 0, 0, + 8, 9, 0, 0, 10, 0, 6, 7, 0, 0, + 0, 8, 9, 32, 33, 10, 4, 53, 54, 55, + 56, 57, 0, 5, 0, 58, 59, 41, 124, 0, + 0, 0, 129, 55, 56, 57, 6, 7, 0, 58, + 59, 8, 9, 0, 0, 10, 25, 26, 27, 28, + 29, 30, 17, 18, 19, 20, 21, 22, 43, 0, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 0, 31, 0, 58, 59, 0, + 0, 24, 0, 43, 119, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, + 0, 0, 58, 59, 0, 0, 0, 0, 43, 132, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 0, 0, 0, 58, 59, 0, + 0, 0, 43, 81, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 0, 0, + 0, 58, 59, 0, 0, 0, 43, 122, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 0, 0, 0, 58, 59, 43, 100, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 0, 0, 0, 58, 59, 43, 101, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 0, 0, 0, 58, 59, 43, + 102, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 0, 0, 0, 58, 59, + 43, 103, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 0, 0, 0, 58, + 59, 43, 104, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 0, 0, 0, + 58, 59, 43, 105, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 0, 0, + 0, 58, 59, 43, 108, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, + 0, 0, 58, 59, 43, 109, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 0, 0, 0, 58, 59, 43, 110, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 0, 0, 0, 58, 59, 43, 111, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 0, 0, 0, 58, 59, 43, 112, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 0, 0, 0, 58, 59, 43, 113, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 0, 0, 0, 58, 59, 43, + 114, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 0, 0, 0, 58, 59, + 0, 115, 80, 43, 0, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, + 0, 0, 58, 59, 99, 43, 0, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 0, 0, 0, 58, 59, 43, 118, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 0, 0, 0, 58, 59, 43, 0, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 0, 0, 0, 58, 59, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 0, 0, 0, 58, 59, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, + 0, 0, 58, 59, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 0, 0, 0, 58, 59, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, + 0, 0, 58, 59 +}; + +#define ExprSpecpact_value_is_default(Yystate) \ + (!!((Yystate) == (-65))) + +#define ExprSpectable_value_is_error(Yytable_value) \ + ExprSpecYYID (0) + +static const ExprSpectype_int16 ExprSpeccheck[] = +{ + 0, 12, 3, 36, 37, 5, 6, 7, 8, 9, + 10, 3, 12, 5, 6, 0, 16, 17, 18, 19, + 20, 21, 22, 5, 24, 25, 26, 27, 28, 29, + 30, 31, 9, 10, 11, 12, 13, 14, 15, 40, + 15, 15, 40, 16, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 3, 38, 5, 6, 42, 8, 15, 4, 16, 41, + 41, 135, 15, 5, 6, 7, 8, 0, 133, 117, + 107, 81, -1, 15, -1, 28, 29, -1, -1, -1, + 33, 34, -1, -1, 37, -1, 28, 29, -1, -1, + -1, 33, 34, 5, 6, 37, 8, 28, 29, 30, + 31, 32, -1, 15, -1, 36, 37, 128, 118, -1, + -1, -1, 122, 30, 31, 32, 28, 29, -1, 36, + 37, 33, 34, -1, -1, 37, 9, 10, 11, 12, + 13, 14, 9, 10, 11, 12, 13, 14, 17, -1, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, 38, -1, 36, 37, -1, + -1, 38, -1, 17, 43, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + -1, -1, 36, 37, -1, -1, -1, -1, 17, 43, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, -1, -1, 36, 37, -1, + -1, -1, 17, 42, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, + -1, 36, 37, -1, -1, -1, 17, 42, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, -1, -1, -1, 36, 37, 17, 39, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, -1, -1, 36, 37, 17, 39, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, -1, -1, 36, 37, 17, + 39, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, -1, -1, 36, 37, + 17, 39, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, -1, -1, 36, + 37, 17, 39, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, + 36, 37, 17, 39, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, + -1, 36, 37, 17, 39, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + -1, -1, 36, 37, 17, 39, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + -1, -1, -1, 36, 37, 17, 39, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, -1, 36, 37, 17, 39, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, -1, -1, -1, 36, 37, 17, 39, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, -1, -1, 36, 37, 17, 39, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, -1, -1, 36, 37, 17, + 39, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, -1, -1, 36, 37, + -1, 39, 16, 17, -1, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + -1, -1, 36, 37, 16, 17, -1, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, -1, 36, 37, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, -1, -1, -1, 36, 37, 17, -1, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, -1, -1, 36, 37, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, -1, -1, -1, 36, 37, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + -1, -1, 36, 37, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, -1, -1, 36, 37, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + -1, -1, 36, 37 +}; + +/* ExprSpecYYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const ExprSpectype_uint8 ExprSpecstos[] = +{ + 0, 3, 5, 6, 8, 15, 28, 29, 33, 34, + 37, 45, 47, 48, 49, 51, 15, 9, 10, 11, + 12, 13, 14, 15, 38, 9, 10, 11, 12, 13, + 14, 38, 5, 6, 51, 51, 51, 51, 51, 51, + 0, 48, 51, 17, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 36, 37, + 51, 51, 51, 51, 51, 51, 51, 7, 51, 52, + 53, 54, 51, 51, 51, 51, 51, 51, 51, 51, + 16, 42, 5, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 16, + 39, 39, 39, 39, 39, 39, 16, 42, 39, 39, + 39, 39, 39, 39, 39, 39, 51, 15, 18, 43, + 40, 54, 42, 52, 51, 5, 6, 46, 47, 51, + 16, 41, 43, 4, 50, 40, 49, 46, 41 +}; + +#define ExprSpecerrok (ExprSpecerrstatus = 0) +#define ExprSpecclearin (ExprSpecchar = ExprSpecYYEMPTY) +#define ExprSpecYYEMPTY (-2) +#define ExprSpecYYEOF 0 + +#define ExprSpecYYACCEPT goto ExprSpecacceptlab +#define ExprSpecYYABORT goto ExprSpecabortlab +#define ExprSpecYYERROR goto ExprSpecerrorlab + + +/* Like ExprSpecYYERROR except do call ExprSpecerror. This remains here temporarily + to ease the transition to the new meaning of ExprSpecYYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. However, + ExprSpecYYFAIL appears to be in use. Nevertheless, it is formally deprecated + in Bison 2.4.2's NEWS entry, where a plan to phase it out is + discussed. */ + +#define ExprSpecYYFAIL goto ExprSpecerrlab +#if defined ExprSpecYYFAIL + /* This is here to suppress warnings from the GCC cpp's + -Wunused-macros. Normally we don't worry about that warning, but + some users do, and we want to make it easy for users to remove + ExprSpecYYFAIL uses, which will produce warnings from Bison 2.5. */ +#endif + +#define ExprSpecYYRECOVERING() (!!ExprSpecerrstatus) + +#define ExprSpecYYBACKUP(Token, Value) \ +do \ + if (ExprSpecchar == ExprSpecYYEMPTY) \ + { \ + ExprSpecchar = (Token); \ + ExprSpeclval = (Value); \ + ExprSpecYYPOPSTACK (ExprSpeclen); \ + ExprSpecstate = *ExprSpecssp; \ + goto ExprSpecbackup; \ + } \ + else \ + { \ + ExprSpecerror (ExprSpecYY_("syntax error: cannot back up")); \ + ExprSpecYYERROR; \ + } \ +while (ExprSpecYYID (0)) + +/* Error token number */ +#define ExprSpecYYTERROR 1 +#define ExprSpecYYERRCODE 256 + + +/* ExprSpecYYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#ifndef ExprSpecYYLLOC_DEFAULT +# define ExprSpecYYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (ExprSpecYYID (N)) \ + { \ + (Current).first_line = ExprSpecYYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = ExprSpecYYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = ExprSpecYYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = ExprSpecYYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + ExprSpecYYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + ExprSpecYYRHSLOC (Rhs, 0).last_column; \ + } \ + while (ExprSpecYYID (0)) +#endif + +#define ExprSpecYYRHSLOC(Rhs, K) ((Rhs)[K]) + + +/* ExprSpecYY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef ExprSpecYY_LOCATION_PRINT +# if defined ExprSpecYYLTYPE_IS_TRIVIAL && ExprSpecYYLTYPE_IS_TRIVIAL + +/* Print *ExprSpecYYLOCP on ExprSpecYYO. Private, do not rely on its existence. */ + +__attribute__((__unused__)) +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static unsigned +ExprSpec_location_print_ (FILE *ExprSpeco, ExprSpecYYLTYPE const * const ExprSpeclocp) +#else +static unsigned +ExprSpec_location_print_ (ExprSpeco, ExprSpeclocp) + FILE *ExprSpeco; + ExprSpecYYLTYPE const * const ExprSpeclocp; +#endif +{ + unsigned res = 0; + int end_col = 0 != ExprSpeclocp->last_column ? ExprSpeclocp->last_column - 1 : 0; + if (0 <= ExprSpeclocp->first_line) + { + res += fprintf (ExprSpeco, "%d", ExprSpeclocp->first_line); + if (0 <= ExprSpeclocp->first_column) + res += fprintf (ExprSpeco, ".%d", ExprSpeclocp->first_column); + } + if (0 <= ExprSpeclocp->last_line) + { + if (ExprSpeclocp->first_line < ExprSpeclocp->last_line) + { + res += fprintf (ExprSpeco, "-%d", ExprSpeclocp->last_line); + if (0 <= end_col) + res += fprintf (ExprSpeco, ".%d", end_col); + } + else if (0 <= end_col && ExprSpeclocp->first_column < end_col) + res += fprintf (ExprSpeco, "-%d", end_col); + } + return res; + } + +# define ExprSpecYY_LOCATION_PRINT(File, Loc) \ + ExprSpec_location_print_ (File, &(Loc)) + +# else +# define ExprSpecYY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* ExprSpecYYLEX -- calling `ExprSpeclex' with the right arguments. */ +#ifdef ExprSpecYYLEX_PARAM +# define ExprSpecYYLEX ExprSpeclex (ExprSpecYYLEX_PARAM) +#else +# define ExprSpecYYLEX ExprSpeclex () +#endif + +/* Enable debugging if requested. */ +#if ExprSpecYYDEBUG + +# ifndef ExprSpecYYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define ExprSpecYYFPRINTF fprintf +# endif + +# define ExprSpecYYDPRINTF(Args) \ +do { \ + if (ExprSpecdebug) \ + ExprSpecYYFPRINTF Args; \ +} while (ExprSpecYYID (0)) + +# define ExprSpecYY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (ExprSpecdebug) \ + { \ + ExprSpecYYFPRINTF (stderr, "%s ", Title); \ + ExprSpec_symbol_print (stderr, \ + Type, Value, Location); \ + ExprSpecYYFPRINTF (stderr, "\n"); \ + } \ +} while (ExprSpecYYID (0)) + + +/*--------------------------------. +| Print this symbol on ExprSpecYYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +ExprSpec_symbol_value_print (FILE *ExprSpecoutput, int ExprSpectype, ExprSpecYYSTYPE const * const ExprSpecvaluep, ExprSpecYYLTYPE const * const ExprSpeclocationp) +#else +static void +ExprSpec_symbol_value_print (ExprSpecoutput, ExprSpectype, ExprSpecvaluep, ExprSpeclocationp) + FILE *ExprSpecoutput; + int ExprSpectype; + ExprSpecYYSTYPE const * const ExprSpecvaluep; + ExprSpecYYLTYPE const * const ExprSpeclocationp; +#endif +{ + FILE *ExprSpeco = ExprSpecoutput; + ExprSpecYYUSE (ExprSpeco); + if (!ExprSpecvaluep) + return; + ExprSpecYYUSE (ExprSpeclocationp); +# ifdef ExprSpecYYPRINT + if (ExprSpectype < ExprSpecYYNTOKENS) + ExprSpecYYPRINT (ExprSpecoutput, ExprSpectoknum[ExprSpectype], *ExprSpecvaluep); +# else + ExprSpecYYUSE (ExprSpecoutput); +# endif + switch (ExprSpectype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on ExprSpecYYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +ExprSpec_symbol_print (FILE *ExprSpecoutput, int ExprSpectype, ExprSpecYYSTYPE const * const ExprSpecvaluep, ExprSpecYYLTYPE const * const ExprSpeclocationp) +#else +static void +ExprSpec_symbol_print (ExprSpecoutput, ExprSpectype, ExprSpecvaluep, ExprSpeclocationp) + FILE *ExprSpecoutput; + int ExprSpectype; + ExprSpecYYSTYPE const * const ExprSpecvaluep; + ExprSpecYYLTYPE const * const ExprSpeclocationp; +#endif +{ + if (ExprSpectype < ExprSpecYYNTOKENS) + ExprSpecYYFPRINTF (ExprSpecoutput, "token %s (", ExprSpectname[ExprSpectype]); + else + ExprSpecYYFPRINTF (ExprSpecoutput, "nterm %s (", ExprSpectname[ExprSpectype]); + + ExprSpecYY_LOCATION_PRINT (ExprSpecoutput, *ExprSpeclocationp); + ExprSpecYYFPRINTF (ExprSpecoutput, ": "); + ExprSpec_symbol_value_print (ExprSpecoutput, ExprSpectype, ExprSpecvaluep, ExprSpeclocationp); + ExprSpecYYFPRINTF (ExprSpecoutput, ")"); +} + +/*------------------------------------------------------------------. +| ExprSpec_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +ExprSpec_stack_print (ExprSpectype_int16 *ExprSpecbottom, ExprSpectype_int16 *ExprSpectop) +#else +static void +ExprSpec_stack_print (ExprSpecbottom, ExprSpectop) + ExprSpectype_int16 *ExprSpecbottom; + ExprSpectype_int16 *ExprSpectop; +#endif +{ + ExprSpecYYFPRINTF (stderr, "Stack now"); + for (; ExprSpecbottom <= ExprSpectop; ExprSpecbottom++) + { + int ExprSpecbot = *ExprSpecbottom; + ExprSpecYYFPRINTF (stderr, " %d", ExprSpecbot); + } + ExprSpecYYFPRINTF (stderr, "\n"); +} + +# define ExprSpecYY_STACK_PRINT(Bottom, Top) \ +do { \ + if (ExprSpecdebug) \ + ExprSpec_stack_print ((Bottom), (Top)); \ +} while (ExprSpecYYID (0)) + + +/*------------------------------------------------. +| Report that the ExprSpecYYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +ExprSpec_reduce_print (ExprSpecYYSTYPE *ExprSpecvsp, ExprSpecYYLTYPE *ExprSpeclsp, int ExprSpecrule) +#else +static void +ExprSpec_reduce_print (ExprSpecvsp, ExprSpeclsp, ExprSpecrule) + ExprSpecYYSTYPE *ExprSpecvsp; + ExprSpecYYLTYPE *ExprSpeclsp; + int ExprSpecrule; +#endif +{ + int ExprSpecnrhs = ExprSpecr2[ExprSpecrule]; + int ExprSpeci; + unsigned long int ExprSpeclno = ExprSpecrline[ExprSpecrule]; + ExprSpecYYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + ExprSpecrule - 1, ExprSpeclno); + /* The symbols being reduced. */ + for (ExprSpeci = 0; ExprSpeci < ExprSpecnrhs; ExprSpeci++) + { + ExprSpecYYFPRINTF (stderr, " $%d = ", ExprSpeci + 1); + ExprSpec_symbol_print (stderr, ExprSpecrhs[ExprSpecprhs[ExprSpecrule] + ExprSpeci], + &(ExprSpecvsp[(ExprSpeci + 1) - (ExprSpecnrhs)]) + , &(ExprSpeclsp[(ExprSpeci + 1) - (ExprSpecnrhs)]) ); + ExprSpecYYFPRINTF (stderr, "\n"); + } +} + +# define ExprSpecYY_REDUCE_PRINT(Rule) \ +do { \ + if (ExprSpecdebug) \ + ExprSpec_reduce_print (ExprSpecvsp, ExprSpeclsp, Rule); \ +} while (ExprSpecYYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int ExprSpecdebug; +#else /* !ExprSpecYYDEBUG */ +# define ExprSpecYYDPRINTF(Args) +# define ExprSpecYY_SYMBOL_PRINT(Title, Type, Value, Location) +# define ExprSpecYY_STACK_PRINT(Bottom, Top) +# define ExprSpecYY_REDUCE_PRINT(Rule) +#endif /* !ExprSpecYYDEBUG */ + + +/* ExprSpecYYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef ExprSpecYYINITDEPTH +# define ExprSpecYYINITDEPTH 200 +#endif + +/* ExprSpecYYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + ExprSpecYYSTACK_ALLOC_MAXIMUM < ExprSpecYYSTACK_BYTES (ExprSpecYYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef ExprSpecYYMAXDEPTH +# define ExprSpecYYMAXDEPTH 10000 +#endif + + +#if ExprSpecYYERROR_VERBOSE + +# ifndef ExprSpecstrlen +# if defined __GLIBC__ && defined _STRING_H +# define ExprSpecstrlen strlen +# else +/* Return the length of ExprSpecYYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static ExprSpecYYSIZE_T +ExprSpecstrlen (const char *ExprSpecstr) +#else +static ExprSpecYYSIZE_T +ExprSpecstrlen (ExprSpecstr) + const char *ExprSpecstr; +#endif +{ + ExprSpecYYSIZE_T ExprSpeclen; + for (ExprSpeclen = 0; ExprSpecstr[ExprSpeclen]; ExprSpeclen++) + continue; + return ExprSpeclen; +} +# endif +# endif + +# ifndef ExprSpecstpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define ExprSpecstpcpy stpcpy +# else +/* Copy ExprSpecYYSRC to ExprSpecYYDEST, returning the address of the terminating '\0' in + ExprSpecYYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +ExprSpecstpcpy (char *ExprSpecdest, const char *ExprSpecsrc) +#else +static char * +ExprSpecstpcpy (ExprSpecdest, ExprSpecsrc) + char *ExprSpecdest; + const char *ExprSpecsrc; +#endif +{ + char *ExprSpecd = ExprSpecdest; + const char *ExprSpecs = ExprSpecsrc; + + while ((*ExprSpecd++ = *ExprSpecs++) != '\0') + continue; + + return ExprSpecd - 1; +} +# endif +# endif + +# ifndef ExprSpectnamerr +/* Copy to ExprSpecYYRES the contents of ExprSpecYYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for ExprSpecerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). ExprSpecYYSTR is taken from ExprSpectname. If ExprSpecYYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static ExprSpecYYSIZE_T +ExprSpectnamerr (char *ExprSpecres, const char *ExprSpecstr) +{ + if (*ExprSpecstr == '"') + { + ExprSpecYYSIZE_T ExprSpecn = 0; + char const *ExprSpecp = ExprSpecstr; + + for (;;) + switch (*++ExprSpecp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++ExprSpecp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (ExprSpecres) + ExprSpecres[ExprSpecn] = *ExprSpecp; + ExprSpecn++; + break; + + case '"': + if (ExprSpecres) + ExprSpecres[ExprSpecn] = '\0'; + return ExprSpecn; + } + do_not_strip_quotes: ; + } + + if (! ExprSpecres) + return ExprSpecstrlen (ExprSpecstr); + + return ExprSpecstpcpy (ExprSpecres, ExprSpecstr) - ExprSpecres; +} +# endif + +/* Copy into *ExprSpecYYMSG, which is of size *ExprSpecYYMSG_ALLOC, an error message + about the unexpected token ExprSpecYYTOKEN for the state stack whose top is + ExprSpecYYSSP. + + Return 0 if *ExprSpecYYMSG was successfully written. Return 1 if *ExprSpecYYMSG is + not large enough to hold the message. In that case, also set + *ExprSpecYYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +ExprSpecsyntax_error (ExprSpecYYSIZE_T *ExprSpecmsg_alloc, char **ExprSpecmsg, + ExprSpectype_int16 *ExprSpecssp, int ExprSpectoken) +{ + ExprSpecYYSIZE_T ExprSpecsize0 = ExprSpectnamerr (ExprSpecYY_NULL, ExprSpectname[ExprSpectoken]); + ExprSpecYYSIZE_T ExprSpecsize = ExprSpecsize0; + enum { ExprSpecYYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *ExprSpecformat = ExprSpecYY_NULL; + /* Arguments of ExprSpecformat. */ + char const *ExprSpecarg[ExprSpecYYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int ExprSpeccount = 0; + + /* There are many possibilities here to consider: + - Assume ExprSpecYYFAIL is not used. It's too flawed to consider. See + + for details. ExprSpecYYERROR is fine as it does not invoke this + function. + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in ExprSpecchar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated ExprSpecchar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (ExprSpectoken != ExprSpecYYEMPTY) + { + int ExprSpecn = ExprSpecpact[*ExprSpecssp]; + ExprSpecarg[ExprSpeccount++] = ExprSpectname[ExprSpectoken]; + if (!ExprSpecpact_value_is_default (ExprSpecn)) + { + /* Start ExprSpecYYX at -ExprSpecYYN if negative to avoid negative indexes in + ExprSpecYYCHECK. In other words, skip the first -ExprSpecYYN actions for + this state because they are default actions. */ + int ExprSpecxbegin = ExprSpecn < 0 ? -ExprSpecn : 0; + /* Stay within bounds of both ExprSpeccheck and ExprSpectname. */ + int ExprSpecchecklim = ExprSpecYYLAST - ExprSpecn + 1; + int ExprSpecxend = ExprSpecchecklim < ExprSpecYYNTOKENS ? ExprSpecchecklim : ExprSpecYYNTOKENS; + int ExprSpecx; + + for (ExprSpecx = ExprSpecxbegin; ExprSpecx < ExprSpecxend; ++ExprSpecx) + if (ExprSpeccheck[ExprSpecx + ExprSpecn] == ExprSpecx && ExprSpecx != ExprSpecYYTERROR + && !ExprSpectable_value_is_error (ExprSpectable[ExprSpecx + ExprSpecn])) + { + if (ExprSpeccount == ExprSpecYYERROR_VERBOSE_ARGS_MAXIMUM) + { + ExprSpeccount = 1; + ExprSpecsize = ExprSpecsize0; + break; + } + ExprSpecarg[ExprSpeccount++] = ExprSpectname[ExprSpecx]; + { + ExprSpecYYSIZE_T ExprSpecsize1 = ExprSpecsize + ExprSpectnamerr (ExprSpecYY_NULL, ExprSpectname[ExprSpecx]); + if (! (ExprSpecsize <= ExprSpecsize1 + && ExprSpecsize1 <= ExprSpecYYSTACK_ALLOC_MAXIMUM)) + return 2; + ExprSpecsize = ExprSpecsize1; + } + } + } + } + + switch (ExprSpeccount) + { +# define ExprSpecYYCASE_(N, S) \ + case N: \ + ExprSpecformat = S; \ + break + ExprSpecYYCASE_(0, ExprSpecYY_("syntax error")); + ExprSpecYYCASE_(1, ExprSpecYY_("syntax error, unexpected %s")); + ExprSpecYYCASE_(2, ExprSpecYY_("syntax error, unexpected %s, expecting %s")); + ExprSpecYYCASE_(3, ExprSpecYY_("syntax error, unexpected %s, expecting %s or %s")); + ExprSpecYYCASE_(4, ExprSpecYY_("syntax error, unexpected %s, expecting %s or %s or %s")); + ExprSpecYYCASE_(5, ExprSpecYY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef ExprSpecYYCASE_ + } + + { + ExprSpecYYSIZE_T ExprSpecsize1 = ExprSpecsize + ExprSpecstrlen (ExprSpecformat); + if (! (ExprSpecsize <= ExprSpecsize1 && ExprSpecsize1 <= ExprSpecYYSTACK_ALLOC_MAXIMUM)) + return 2; + ExprSpecsize = ExprSpecsize1; + } + + if (*ExprSpecmsg_alloc < ExprSpecsize) + { + *ExprSpecmsg_alloc = 2 * ExprSpecsize; + if (! (ExprSpecsize <= *ExprSpecmsg_alloc + && *ExprSpecmsg_alloc <= ExprSpecYYSTACK_ALLOC_MAXIMUM)) + *ExprSpecmsg_alloc = ExprSpecYYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *ExprSpecp = *ExprSpecmsg; + int ExprSpeci = 0; + while ((*ExprSpecp = *ExprSpecformat) != '\0') + if (*ExprSpecp == '%' && ExprSpecformat[1] == 's' && ExprSpeci < ExprSpeccount) + { + ExprSpecp += ExprSpectnamerr (ExprSpecp, ExprSpecarg[ExprSpeci++]); + ExprSpecformat += 2; + } + else + { + ExprSpecp++; + ExprSpecformat++; + } + } + return 0; +} +#endif /* ExprSpecYYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +ExprSpecdestruct (const char *ExprSpecmsg, int ExprSpectype, ExprSpecYYSTYPE *ExprSpecvaluep, ExprSpecYYLTYPE *ExprSpeclocationp) +#else +static void +ExprSpecdestruct (ExprSpecmsg, ExprSpectype, ExprSpecvaluep, ExprSpeclocationp) + const char *ExprSpecmsg; + int ExprSpectype; + ExprSpecYYSTYPE *ExprSpecvaluep; + ExprSpecYYLTYPE *ExprSpeclocationp; +#endif +{ + ExprSpecYYUSE (ExprSpecvaluep); + ExprSpecYYUSE (ExprSpeclocationp); + + if (!ExprSpecmsg) + ExprSpecmsg = "Deleting"; + ExprSpecYY_SYMBOL_PRINT (ExprSpecmsg, ExprSpectype, ExprSpecvaluep, ExprSpeclocationp); + + switch (ExprSpectype) + { + + default: + break; + } +} + + + + +/* The lookahead symbol. */ +int ExprSpecchar; + + +#ifndef ExprSpecYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define ExprSpecYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define ExprSpecYY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef ExprSpecYY_INITIAL_VALUE +# define ExprSpecYY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +/* The semantic value of the lookahead symbol. */ +ExprSpecYYSTYPE ExprSpeclval ExprSpecYY_INITIAL_VALUE(ExprSpecval_default); + +/* Location data for the lookahead symbol. */ +ExprSpecYYLTYPE ExprSpeclloc +# if defined ExprSpecYYLTYPE_IS_TRIVIAL && ExprSpecYYLTYPE_IS_TRIVIAL + = { 1, 1, 1, 1 } +# endif +; + + +/* Number of syntax errors so far. */ +int ExprSpecnerrs; + + +/*----------. +| ExprSpecparse. | +`----------*/ + +#ifdef ExprSpecYYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +ExprSpecparse (void *ExprSpecYYPARSE_PARAM) +#else +int +ExprSpecparse (ExprSpecYYPARSE_PARAM) + void *ExprSpecYYPARSE_PARAM; +#endif +#else /* ! ExprSpecYYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +ExprSpecparse (void) +#else +int +ExprSpecparse () + +#endif +#endif +{ + int ExprSpecstate; + /* Number of tokens to shift before error messages enabled. */ + int ExprSpecerrstatus; + + /* The stacks and their tools: + `ExprSpecss': related to states. + `ExprSpecvs': related to semantic values. + `ExprSpecls': related to locations. + + Refer to the stacks through separate pointers, to allow ExprSpecoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + ExprSpectype_int16 ExprSpecssa[ExprSpecYYINITDEPTH]; + ExprSpectype_int16 *ExprSpecss; + ExprSpectype_int16 *ExprSpecssp; + + /* The semantic value stack. */ + ExprSpecYYSTYPE ExprSpecvsa[ExprSpecYYINITDEPTH]; + ExprSpecYYSTYPE *ExprSpecvs; + ExprSpecYYSTYPE *ExprSpecvsp; + + /* The location stack. */ + ExprSpecYYLTYPE ExprSpeclsa[ExprSpecYYINITDEPTH]; + ExprSpecYYLTYPE *ExprSpecls; + ExprSpecYYLTYPE *ExprSpeclsp; + + /* The locations where the error started and ended. */ + ExprSpecYYLTYPE ExprSpecerror_range[3]; + + ExprSpecYYSIZE_T ExprSpecstacksize; + + int ExprSpecn; + int ExprSpecresult; + /* Lookahead token as an internal (translated) token number. */ + int ExprSpectoken = 0; + /* The variables used to return semantic value and location from the + action routines. */ + ExprSpecYYSTYPE ExprSpecval; + ExprSpecYYLTYPE ExprSpecloc; + +#if ExprSpecYYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char ExprSpecmsgbuf[128]; + char *ExprSpecmsg = ExprSpecmsgbuf; + ExprSpecYYSIZE_T ExprSpecmsg_alloc = sizeof ExprSpecmsgbuf; +#endif + +#define ExprSpecYYPOPSTACK(N) (ExprSpecvsp -= (N), ExprSpecssp -= (N), ExprSpeclsp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int ExprSpeclen = 0; + + ExprSpecssp = ExprSpecss = ExprSpecssa; + ExprSpecvsp = ExprSpecvs = ExprSpecvsa; + ExprSpeclsp = ExprSpecls = ExprSpeclsa; + ExprSpecstacksize = ExprSpecYYINITDEPTH; + + ExprSpecYYDPRINTF ((stderr, "Starting parse\n")); + + ExprSpecstate = 0; + ExprSpecerrstatus = 0; + ExprSpecnerrs = 0; + ExprSpecchar = ExprSpecYYEMPTY; /* Cause a token to be read. */ + ExprSpeclsp[0] = ExprSpeclloc; + goto ExprSpecsetstate; + +/*------------------------------------------------------------. +| ExprSpecnewstate -- Push a new state, which is found in ExprSpecstate. | +`------------------------------------------------------------*/ + ExprSpecnewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + ExprSpecssp++; + + ExprSpecsetstate: + *ExprSpecssp = ExprSpecstate; + + if (ExprSpecss + ExprSpecstacksize - 1 <= ExprSpecssp) + { + /* Get the current used size of the three stacks, in elements. */ + ExprSpecYYSIZE_T ExprSpecsize = ExprSpecssp - ExprSpecss + 1; + +#ifdef ExprSpecoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + ExprSpecYYSTYPE *ExprSpecvs1 = ExprSpecvs; + ExprSpectype_int16 *ExprSpecss1 = ExprSpecss; + ExprSpecYYLTYPE *ExprSpecls1 = ExprSpecls; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if ExprSpecoverflow is a macro. */ + ExprSpecoverflow (ExprSpecYY_("memory exhausted"), + &ExprSpecss1, ExprSpecsize * sizeof (*ExprSpecssp), + &ExprSpecvs1, ExprSpecsize * sizeof (*ExprSpecvsp), + &ExprSpecls1, ExprSpecsize * sizeof (*ExprSpeclsp), + &ExprSpecstacksize); + + ExprSpecls = ExprSpecls1; + ExprSpecss = ExprSpecss1; + ExprSpecvs = ExprSpecvs1; + } +#else /* no ExprSpecoverflow */ +# ifndef ExprSpecYYSTACK_RELOCATE + goto ExprSpecexhaustedlab; +# else + /* Extend the stack our own way. */ + if (ExprSpecYYMAXDEPTH <= ExprSpecstacksize) + goto ExprSpecexhaustedlab; + ExprSpecstacksize *= 2; + if (ExprSpecYYMAXDEPTH < ExprSpecstacksize) + ExprSpecstacksize = ExprSpecYYMAXDEPTH; + + { + ExprSpectype_int16 *ExprSpecss1 = ExprSpecss; + union ExprSpecalloc *ExprSpecptr = + (union ExprSpecalloc *) ExprSpecYYSTACK_ALLOC (ExprSpecYYSTACK_BYTES (ExprSpecstacksize)); + if (! ExprSpecptr) + goto ExprSpecexhaustedlab; + ExprSpecYYSTACK_RELOCATE (ExprSpecss_alloc, ExprSpecss); + ExprSpecYYSTACK_RELOCATE (ExprSpecvs_alloc, ExprSpecvs); + ExprSpecYYSTACK_RELOCATE (ExprSpecls_alloc, ExprSpecls); +# undef ExprSpecYYSTACK_RELOCATE + if (ExprSpecss1 != ExprSpecssa) + ExprSpecYYSTACK_FREE (ExprSpecss1); + } +# endif +#endif /* no ExprSpecoverflow */ + + ExprSpecssp = ExprSpecss + ExprSpecsize - 1; + ExprSpecvsp = ExprSpecvs + ExprSpecsize - 1; + ExprSpeclsp = ExprSpecls + ExprSpecsize - 1; + + ExprSpecYYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) ExprSpecstacksize)); + + if (ExprSpecss + ExprSpecstacksize - 1 <= ExprSpecssp) + ExprSpecYYABORT; + } + + ExprSpecYYDPRINTF ((stderr, "Entering state %d\n", ExprSpecstate)); + + if (ExprSpecstate == ExprSpecYYFINAL) + ExprSpecYYACCEPT; + + goto ExprSpecbackup; + +/*-----------. +| ExprSpecbackup. | +`-----------*/ +ExprSpecbackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + ExprSpecn = ExprSpecpact[ExprSpecstate]; + if (ExprSpecpact_value_is_default (ExprSpecn)) + goto ExprSpecdefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* ExprSpecYYCHAR is either ExprSpecYYEMPTY or ExprSpecYYEOF or a valid lookahead symbol. */ + if (ExprSpecchar == ExprSpecYYEMPTY) + { + ExprSpecYYDPRINTF ((stderr, "Reading a token: ")); + ExprSpecchar = ExprSpecYYLEX; + } + + if (ExprSpecchar <= ExprSpecYYEOF) + { + ExprSpecchar = ExprSpectoken = ExprSpecYYEOF; + ExprSpecYYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + ExprSpectoken = ExprSpecYYTRANSLATE (ExprSpecchar); + ExprSpecYY_SYMBOL_PRINT ("Next token is", ExprSpectoken, &ExprSpeclval, &ExprSpeclloc); + } + + /* If the proper action on seeing token ExprSpecYYTOKEN is to reduce or to + detect an error, take that action. */ + ExprSpecn += ExprSpectoken; + if (ExprSpecn < 0 || ExprSpecYYLAST < ExprSpecn || ExprSpeccheck[ExprSpecn] != ExprSpectoken) + goto ExprSpecdefault; + ExprSpecn = ExprSpectable[ExprSpecn]; + if (ExprSpecn <= 0) + { + if (ExprSpectable_value_is_error (ExprSpecn)) + goto ExprSpecerrlab; + ExprSpecn = -ExprSpecn; + goto ExprSpecreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (ExprSpecerrstatus) + ExprSpecerrstatus--; + + /* Shift the lookahead token. */ + ExprSpecYY_SYMBOL_PRINT ("Shifting", ExprSpectoken, &ExprSpeclval, &ExprSpeclloc); + + /* Discard the shifted token. */ + ExprSpecchar = ExprSpecYYEMPTY; + + ExprSpecstate = ExprSpecn; + ExprSpecYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++ExprSpecvsp = ExprSpeclval; + ExprSpecYY_IGNORE_MAYBE_UNINITIALIZED_END + *++ExprSpeclsp = ExprSpeclloc; + goto ExprSpecnewstate; + + +/*-----------------------------------------------------------. +| ExprSpecdefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +ExprSpecdefault: + ExprSpecn = ExprSpecdefact[ExprSpecstate]; + if (ExprSpecn == 0) + goto ExprSpecerrlab; + goto ExprSpecreduce; + + +/*-----------------------------. +| ExprSpecreduce -- Do a reduction. | +`-----------------------------*/ +ExprSpecreduce: + /* ExprSpecn is the number of a rule to reduce with. */ + ExprSpeclen = ExprSpecr2[ExprSpecn]; + + /* If ExprSpecYYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets ExprSpecYYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to ExprSpecYYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that ExprSpecYYVAL may be used uninitialized. */ + ExprSpecval = ExprSpecvsp[1-ExprSpeclen]; + + /* Default location. */ + ExprSpecYYLLOC_DEFAULT (ExprSpecloc, (ExprSpeclsp - ExprSpeclen), ExprSpeclen); + ExprSpecYY_REDUCE_PRINT (ExprSpecn); + switch (ExprSpecn) + { + case 2: +/* Line 1792 of yacc.c */ +#line 313 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { ParseResult = 0; } + break; + + case 3: +/* Line 1792 of yacc.c */ +#line 314 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { ParseResult = 0; } + break; + + case 4: +/* Line 1792 of yacc.c */ +#line 319 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 5: +/* Line 1792 of yacc.c */ +#line 320 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 6: +/* Line 1792 of yacc.c */ +#line 324 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 7: +/* Line 1792 of yacc.c */ +#line 325 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 8: +/* Line 1792 of yacc.c */ +#line 330 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 9: +/* Line 1792 of yacc.c */ +#line 331 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { + specRegisterVariable((ExprSpecvsp[(1) - (4)].s)); + specRegisterEditable((ExprSpecvsp[(1) - (4)].s),(ExprSpecvsp[(3) - (4)].n)); + } + break; + + case 10: +/* Line 1792 of yacc.c */ +#line 335 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 11: +/* Line 1792 of yacc.c */ +#line 336 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 12: +/* Line 1792 of yacc.c */ +#line 337 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 13: +/* Line 1792 of yacc.c */ +#line 338 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 14: +/* Line 1792 of yacc.c */ +#line 339 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 15: +/* Line 1792 of yacc.c */ +#line 340 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 16: +/* Line 1792 of yacc.c */ +#line 341 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { + specRegisterVariable((ExprSpecvsp[(1) - (4)].s)); + specRegisterEditable((ExprSpecvsp[(1) - (4)].s),(ExprSpecvsp[(3) - (4)].n)); + } + break; + + case 17: +/* Line 1792 of yacc.c */ +#line 345 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 18: +/* Line 1792 of yacc.c */ +#line 346 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 19: +/* Line 1792 of yacc.c */ +#line 347 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 20: +/* Line 1792 of yacc.c */ +#line 348 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 21: +/* Line 1792 of yacc.c */ +#line 349 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 22: +/* Line 1792 of yacc.c */ +#line 350 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 23: +/* Line 1792 of yacc.c */ +#line 355 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 24: +/* Line 1792 of yacc.c */ +#line 359 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 25: +/* Line 1792 of yacc.c */ +#line 360 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0;} + break; + + case 26: +/* Line 1792 of yacc.c */ +#line 361 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0;} + break; + + case 27: +/* Line 1792 of yacc.c */ +#line 366 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 28: +/* Line 1792 of yacc.c */ +#line 367 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { + if(SPEC_IS_NUMBER((ExprSpecvsp[(2) - (7)].n)) && SPEC_IS_NUMBER((ExprSpecvsp[(4) - (7)].n)) && SPEC_IS_NUMBER((ExprSpecvsp[(6) - (7)].n))){ + (ExprSpecval.n)=remember(new ExprSpecVectorNode((ExprSpecloc).first_column,(ExprSpecloc).last_column,(ExprSpecvsp[(2) - (7)].n),(ExprSpecvsp[(4) - (7)].n),(ExprSpecvsp[(6) - (7)].n))); + }else (ExprSpecval.n)=0; + } + break; + + case 29: +/* Line 1792 of yacc.c */ +#line 372 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 30: +/* Line 1792 of yacc.c */ +#line 373 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 31: +/* Line 1792 of yacc.c */ +#line 374 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 32: +/* Line 1792 of yacc.c */ +#line 375 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 33: +/* Line 1792 of yacc.c */ +#line 376 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 34: +/* Line 1792 of yacc.c */ +#line 377 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 35: +/* Line 1792 of yacc.c */ +#line 378 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 36: +/* Line 1792 of yacc.c */ +#line 379 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 37: +/* Line 1792 of yacc.c */ +#line 380 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 38: +/* Line 1792 of yacc.c */ +#line 381 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 39: +/* Line 1792 of yacc.c */ +#line 382 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = (ExprSpecvsp[(2) - (2)].n); } + break; + + case 40: +/* Line 1792 of yacc.c */ +#line 383 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { + if(SPEC_IS_NUMBER((ExprSpecvsp[(2) - (2)].n))){ + ExprSpecScalarNode* node=(ExprSpecScalarNode*)(ExprSpecvsp[(2) - (2)].n); + node->v*=-1; + node->startPos=(ExprSpecloc).first_column; + node->endPos=(ExprSpecloc).last_column; + (ExprSpecval.n)=(ExprSpecvsp[(2) - (2)].n); + }else (ExprSpecval.n)=0; + } + break; + + case 41: +/* Line 1792 of yacc.c */ +#line 392 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 42: +/* Line 1792 of yacc.c */ +#line 393 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 43: +/* Line 1792 of yacc.c */ +#line 394 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 44: +/* Line 1792 of yacc.c */ +#line 395 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 45: +/* Line 1792 of yacc.c */ +#line 396 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 46: +/* Line 1792 of yacc.c */ +#line 397 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 47: +/* Line 1792 of yacc.c */ +#line 398 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 48: +/* Line 1792 of yacc.c */ +#line 399 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 49: +/* Line 1792 of yacc.c */ +#line 400 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { + if((ExprSpecvsp[(3) - (4)].n) && strcmp((ExprSpecvsp[(1) - (4)].s),"curve")==0){ + (ExprSpecval.n)=remember(new ExprSpecCurveNode((ExprSpecvsp[(3) - (4)].n))); + }else if((ExprSpecvsp[(3) - (4)].n) && strcmp((ExprSpecvsp[(1) - (4)].s),"ccurve")==0){ + (ExprSpecval.n)=remember(new ExprSpecCCurveNode((ExprSpecvsp[(3) - (4)].n))); + }else if((ExprSpecvsp[(3) - (4)].n) && strcmp((ExprSpecvsp[(1) - (4)].s),"swatch")==0){ + (ExprSpecval.n)=remember(new ExprSpecColorSwatchNode((ExprSpecvsp[(3) - (4)].n))); + }else if((ExprSpecvsp[(3) - (4)].n) && strcmp((ExprSpecvsp[(1) - (4)].s),"animCurve")==0){ + (ExprSpecval.n)=remember(new ExprSpecAnimCurveNode((ExprSpecvsp[(3) - (4)].n))); + }else if((ExprSpecvsp[(3) - (4)].n) && strcmp((ExprSpecvsp[(1) - (4)].s),"deepWater")==0){ + (ExprSpecval.n)=remember(new ExprSpecDeepWaterNode((ExprSpecvsp[(3) - (4)].n))); + }else if((ExprSpecvsp[(3) - (4)].n)){ + // function arguments not parse of curve, ccurve, or animCurve + // check if there are any string args that need to be made into controls + // but be sure to return 0 as this parseable + if(ExprSpecListNode* list=dynamic_cast((ExprSpecvsp[(3) - (4)].n))){ + for(size_t i=0;inodes.size();i++){ + if(ExprSpecStringNode* str=dynamic_cast(list->nodes[i])){ + specRegisterEditable("",str); + } + } + } + (ExprSpecval.n)=0; + }else (ExprSpecval.n)=0; + } + break; + + case 50: +/* Line 1792 of yacc.c */ +#line 425 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + {(ExprSpecval.n) = 0; } + break; + + case 51: +/* Line 1792 of yacc.c */ +#line 426 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 52: +/* Line 1792 of yacc.c */ +#line 427 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0; } + break; + + case 53: +/* Line 1792 of yacc.c */ +#line 428 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n)=remember(new ExprSpecScalarNode((ExprSpecloc).first_column,(ExprSpecloc).last_column,(ExprSpecvsp[(1) - (1)].d))); } + break; + + case 54: +/* Line 1792 of yacc.c */ +#line 433 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = 0;} + break; + + case 55: +/* Line 1792 of yacc.c */ +#line 434 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = (ExprSpecvsp[(1) - (1)].n);} + break; + + case 56: +/* Line 1792 of yacc.c */ +#line 439 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { + // ignore first argument unless it is a string (because we parse strings in weird ways) + ExprSpecListNode* list=new ExprSpecListNode((ExprSpecloc).last_column,(ExprSpecloc).last_column); + if((ExprSpecvsp[(1) - (1)].n) && SPEC_IS_STR((ExprSpecvsp[(1) - (1)].n))){ + list->add((ExprSpecvsp[(1) - (1)].n)); + } + remember(list); + (ExprSpecval.n)=list; + } + break; + + case 57: +/* Line 1792 of yacc.c */ +#line 448 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { + + if((ExprSpecvsp[(1) - (3)].n) && (ExprSpecvsp[(3) - (3)].n) && ((SPEC_IS_NUMBER((ExprSpecvsp[(3) - (3)].n)) || SPEC_IS_VECTOR((ExprSpecvsp[(3) - (3)].n)) || SPEC_IS_STR((ExprSpecvsp[(3) - (3)].n))))){ + (ExprSpecval.n)=(ExprSpecvsp[(1) - (3)].n); + dynamic_cast((ExprSpecvsp[(1) - (3)].n))->add((ExprSpecvsp[(3) - (3)].n)); + }else{ + (ExprSpecval.n)=0; + } + } + break; + + case 58: +/* Line 1792 of yacc.c */ +#line 460 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { (ExprSpecval.n) = (ExprSpecvsp[(1) - (1)].n);} + break; + + case 59: +/* Line 1792 of yacc.c */ +#line 461 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + { + ExprSpecStringNode* str=new ExprSpecStringNode((ExprSpecloc).first_column,(ExprSpecloc).last_column,(ExprSpecvsp[(1) - (1)].s)); + //specRegisterEditable("",str); + // TODO: move string stuff out + (ExprSpecval.n) = remember(str); + } + break; + + +/* Line 1792 of yacc.c */ +#line 2391 "y.tab.c" + default: break; + } + /* User semantic actions sometimes alter ExprSpecchar, and that requires + that ExprSpectoken be updated with the new translation. We take the + approach of translating immediately before every use of ExprSpectoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + ExprSpecYYABORT, ExprSpecYYACCEPT, or ExprSpecYYERROR immediately after altering ExprSpecchar or + if it invokes ExprSpecYYBACKUP. In the case of ExprSpecYYABORT or ExprSpecYYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of ExprSpecYYERROR or ExprSpecYYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + ExprSpecYY_SYMBOL_PRINT ("-> $$ =", ExprSpecr1[ExprSpecn], &ExprSpecval, &ExprSpecloc); + + ExprSpecYYPOPSTACK (ExprSpeclen); + ExprSpeclen = 0; + ExprSpecYY_STACK_PRINT (ExprSpecss, ExprSpecssp); + + *++ExprSpecvsp = ExprSpecval; + *++ExprSpeclsp = ExprSpecloc; + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + ExprSpecn = ExprSpecr1[ExprSpecn]; + + ExprSpecstate = ExprSpecpgoto[ExprSpecn - ExprSpecYYNTOKENS] + *ExprSpecssp; + if (0 <= ExprSpecstate && ExprSpecstate <= ExprSpecYYLAST && ExprSpeccheck[ExprSpecstate] == *ExprSpecssp) + ExprSpecstate = ExprSpectable[ExprSpecstate]; + else + ExprSpecstate = ExprSpecdefgoto[ExprSpecn - ExprSpecYYNTOKENS]; + + goto ExprSpecnewstate; + + +/*------------------------------------. +| ExprSpecerrlab -- here on detecting error | +`------------------------------------*/ +ExprSpecerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + ExprSpectoken = ExprSpecchar == ExprSpecYYEMPTY ? ExprSpecYYEMPTY : ExprSpecYYTRANSLATE (ExprSpecchar); + + /* If not already recovering from an error, report this error. */ + if (!ExprSpecerrstatus) + { + ++ExprSpecnerrs; +#if ! ExprSpecYYERROR_VERBOSE + ExprSpecerror (ExprSpecYY_("syntax error")); +#else +# define ExprSpecYYSYNTAX_ERROR ExprSpecsyntax_error (&ExprSpecmsg_alloc, &ExprSpecmsg, \ + ExprSpecssp, ExprSpectoken) + { + char const *ExprSpecmsgp = ExprSpecYY_("syntax error"); + int ExprSpecsyntax_error_status; + ExprSpecsyntax_error_status = ExprSpecYYSYNTAX_ERROR; + if (ExprSpecsyntax_error_status == 0) + ExprSpecmsgp = ExprSpecmsg; + else if (ExprSpecsyntax_error_status == 1) + { + if (ExprSpecmsg != ExprSpecmsgbuf) + ExprSpecYYSTACK_FREE (ExprSpecmsg); + ExprSpecmsg = (char *) ExprSpecYYSTACK_ALLOC (ExprSpecmsg_alloc); + if (!ExprSpecmsg) + { + ExprSpecmsg = ExprSpecmsgbuf; + ExprSpecmsg_alloc = sizeof ExprSpecmsgbuf; + ExprSpecsyntax_error_status = 2; + } + else + { + ExprSpecsyntax_error_status = ExprSpecYYSYNTAX_ERROR; + ExprSpecmsgp = ExprSpecmsg; + } + } + ExprSpecerror (ExprSpecmsgp); + if (ExprSpecsyntax_error_status == 2) + goto ExprSpecexhaustedlab; + } +# undef ExprSpecYYSYNTAX_ERROR +#endif + } + + ExprSpecerror_range[1] = ExprSpeclloc; + + if (ExprSpecerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (ExprSpecchar <= ExprSpecYYEOF) + { + /* Return failure if at end of input. */ + if (ExprSpecchar == ExprSpecYYEOF) + ExprSpecYYABORT; + } + else + { + ExprSpecdestruct ("Error: discarding", + ExprSpectoken, &ExprSpeclval, &ExprSpeclloc); + ExprSpecchar = ExprSpecYYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto ExprSpecerrlab1; + + +/*---------------------------------------------------. +| ExprSpecerrorlab -- error raised explicitly by ExprSpecYYERROR. | +`---------------------------------------------------*/ +ExprSpecerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + ExprSpecYYERROR and the label ExprSpecerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto ExprSpecerrorlab; + + ExprSpecerror_range[1] = ExprSpeclsp[1-ExprSpeclen]; + /* Do not reclaim the symbols of the rule which action triggered + this ExprSpecYYERROR. */ + ExprSpecYYPOPSTACK (ExprSpeclen); + ExprSpeclen = 0; + ExprSpecYY_STACK_PRINT (ExprSpecss, ExprSpecssp); + ExprSpecstate = *ExprSpecssp; + goto ExprSpecerrlab1; + + +/*-------------------------------------------------------------. +| ExprSpecerrlab1 -- common code for both syntax error and ExprSpecYYERROR. | +`-------------------------------------------------------------*/ +ExprSpecerrlab1: + ExprSpecerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + ExprSpecn = ExprSpecpact[ExprSpecstate]; + if (!ExprSpecpact_value_is_default (ExprSpecn)) + { + ExprSpecn += ExprSpecYYTERROR; + if (0 <= ExprSpecn && ExprSpecn <= ExprSpecYYLAST && ExprSpeccheck[ExprSpecn] == ExprSpecYYTERROR) + { + ExprSpecn = ExprSpectable[ExprSpecn]; + if (0 < ExprSpecn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (ExprSpecssp == ExprSpecss) + ExprSpecYYABORT; + + ExprSpecerror_range[1] = *ExprSpeclsp; + ExprSpecdestruct ("Error: popping", + ExprSpecstos[ExprSpecstate], ExprSpecvsp, ExprSpeclsp); + ExprSpecYYPOPSTACK (1); + ExprSpecstate = *ExprSpecssp; + ExprSpecYY_STACK_PRINT (ExprSpecss, ExprSpecssp); + } + + ExprSpecYY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++ExprSpecvsp = ExprSpeclval; + ExprSpecYY_IGNORE_MAYBE_UNINITIALIZED_END + + ExprSpecerror_range[2] = ExprSpeclloc; + /* Using ExprSpecYYLLOC is tempting, but would change the location of + the lookahead. ExprSpecYYLOC is available though. */ + ExprSpecYYLLOC_DEFAULT (ExprSpecloc, ExprSpecerror_range, 2); + *++ExprSpeclsp = ExprSpecloc; + + /* Shift the error token. */ + ExprSpecYY_SYMBOL_PRINT ("Shifting", ExprSpecstos[ExprSpecn], ExprSpecvsp, ExprSpeclsp); + + ExprSpecstate = ExprSpecn; + goto ExprSpecnewstate; + + +/*-------------------------------------. +| ExprSpecacceptlab -- ExprSpecYYACCEPT comes here. | +`-------------------------------------*/ +ExprSpecacceptlab: + ExprSpecresult = 0; + goto ExprSpecreturn; + +/*-----------------------------------. +| ExprSpecabortlab -- ExprSpecYYABORT comes here. | +`-----------------------------------*/ +ExprSpecabortlab: + ExprSpecresult = 1; + goto ExprSpecreturn; + +#if !defined ExprSpecoverflow || ExprSpecYYERROR_VERBOSE +/*-------------------------------------------------. +| ExprSpecexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +ExprSpecexhaustedlab: + ExprSpecerror (ExprSpecYY_("memory exhausted")); + ExprSpecresult = 2; + /* Fall through. */ +#endif + +ExprSpecreturn: + if (ExprSpecchar != ExprSpecYYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + ExprSpectoken = ExprSpecYYTRANSLATE (ExprSpecchar); + ExprSpecdestruct ("Cleanup: discarding lookahead", + ExprSpectoken, &ExprSpeclval, &ExprSpeclloc); + } + /* Do not reclaim the symbols of the rule which action triggered + this ExprSpecYYABORT or ExprSpecYYACCEPT. */ + ExprSpecYYPOPSTACK (ExprSpeclen); + ExprSpecYY_STACK_PRINT (ExprSpecss, ExprSpecssp); + while (ExprSpecssp != ExprSpecss) + { + ExprSpecdestruct ("Cleanup: popping", + ExprSpecstos[*ExprSpecssp], ExprSpecvsp, ExprSpeclsp); + ExprSpecYYPOPSTACK (1); + } +#ifndef ExprSpecoverflow + if (ExprSpecss != ExprSpecssa) + ExprSpecYYSTACK_FREE (ExprSpecss); +#endif +#if ExprSpecYYERROR_VERBOSE + if (ExprSpecmsg != ExprSpecmsgbuf) + ExprSpecYYSTACK_FREE (ExprSpecmsg); +#endif + /* Make sure ExprSpecYYID is used. */ + return ExprSpecYYID (ExprSpecresult); +} + + +/* Line 2055 of yacc.c */ +#line 469 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParser.y" + + +/* ExprSpecerror - Report an error. This is called by the parser. +(Note: the "msg" param is useless as it is usually just "sparse error". +so it's ignored.) +*/ +static void ExprSpecerror(const char* /*msg*/) +{ + // find start of line containing error + int pos = ExprSpecpos(), lineno = 1, start = 0, end = strlen(ParseStr); + bool multiline = 0; + for (int i = start; i < pos; i++) + if (ParseStr[i] == '\n') { start = i + 1; lineno++; multiline=1; } + + // find end of line containing error + for (int i = end; i > pos; i--) + if (ParseStr[i] == '\n') { end = i - 1; multiline=1; } + + ParseError = ExprSpectext[0] ? "Syntax error" : "Unexpected end of expression"; + if (multiline) { + char buff[30]; + snprintf(buff, 30, " at line %d", lineno); + ParseError += buff; + } + if (ExprSpectext[0]) { + ParseError += " near '"; + ParseError += ExprSpectext; + } + ParseError += "':\n "; + + int s = std::max(start, pos-30); + int e = std::min(end, pos+30); + + if (s != start) ParseError += "..."; + ParseError += std::string(ParseStr, s, e-s+1); + if (e != end) ParseError += "..."; +} + +extern void specResetCounters(std::vector >& comments); + + +/* CallParser - This is our entrypoint from the rest of the expr library. + A string is passed in and a parse tree is returned. If the tree is null, + an error string is returned. Any flags set during parsing are passed + along. + */ + +static SeExprInternal2::Mutex mutex; + +/// Main entry point to parser +bool ExprSpecParse(std::vector& outputEditables, + std::vector& outputVariables, + std::vector >& comments, + const char* str) +{ + SeExprInternal2::AutoMutex locker(mutex); + + /// Make inputs/outputs accessible to parser actions + editables=&outputEditables; + variables=&outputVariables; + ParseStr=str; + + // setup and startup parser + specResetCounters(comments); // reset lineNumber and columnNumber in scanner + ExprSpec_buffer_state* buffer = ExprSpec_scan_string(str); // setup lexer + ParseResult = 0; + int resultCode = ExprSpecparse(); // parser (don't care if it is a parse error) + UNUSED(resultCode); + ExprSpec_delete_buffer(buffer); + + // delete temporary data -- specs(mini parse tree) and tokens(strings)! + for(size_t i=0;i 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define ExprSpecYY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define ExprSpecYY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef ExprSpecYY_USE_CONST +#define ExprSpecconst const +#else +#define ExprSpecconst +#endif + +/* Returned upon end-of-file. */ +#define ExprSpecYY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define ExprSpecYY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (ExprSpec_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The ExprSpecYYSTATE alias is for lex + * compatibility. + */ +#define ExprSpecYY_START (((ExprSpec_start) - 1) / 2) +#define ExprSpecYYSTATE ExprSpecYY_START + +/* Action number for EOF rule of a given start state. */ +#define ExprSpecYY_STATE_EOF(state) (ExprSpecYY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define ExprSpecYY_NEW_FILE ExprSpecrestart(ExprSpecin ) + +#define ExprSpecYY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef ExprSpecYY_BUF_SIZE +#define ExprSpecYY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define ExprSpecYY_STATE_BUF_SIZE ((ExprSpecYY_BUF_SIZE + 2) * sizeof(ExprSpec_state_type)) + +#ifndef ExprSpecYY_TYPEDEF_ExprSpecYY_BUFFER_STATE +#define ExprSpecYY_TYPEDEF_ExprSpecYY_BUFFER_STATE +typedef struct ExprSpec_buffer_state *ExprSpecYY_BUFFER_STATE; +#endif + +#ifndef ExprSpecYY_TYPEDEF_ExprSpecYY_SIZE_T +#define ExprSpecYY_TYPEDEF_ExprSpecYY_SIZE_T +typedef size_t ExprSpec_size_t; +#endif + +extern ExprSpec_size_t ExprSpecleng; + +extern FILE *ExprSpecin, *ExprSpecout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define ExprSpecYY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define ExprSpecless(n) \ + do \ + { \ + /* Undo effects of setting up ExprSpectext. */ \ + int ExprSpecless_macro_arg = (n); \ + ExprSpecYY_LESS_LINENO(ExprSpecless_macro_arg);\ + *ExprSpec_cp = (ExprSpec_hold_char); \ + ExprSpecYY_RESTORE_ExprSpecYY_MORE_OFFSET \ + (ExprSpec_c_buf_p) = ExprSpec_cp = ExprSpec_bp + ExprSpecless_macro_arg - ExprSpecYY_MORE_ADJ; \ + ExprSpecYY_DO_BEFORE_ACTION; /* set up ExprSpectext again */ \ + } \ + while ( 0 ) + +#define unput(c) ExprSpecunput( c, (ExprSpectext_ptr) ) + +#ifndef ExprSpecYY_STRUCT_ExprSpecYY_BUFFER_STATE +#define ExprSpecYY_STRUCT_ExprSpecYY_BUFFER_STATE +struct ExprSpec_buffer_state + { + FILE *ExprSpec_input_file; + + char *ExprSpec_ch_buf; /* input buffer */ + char *ExprSpec_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + ExprSpec_size_t ExprSpec_buf_size; + + /* Number of characters read into ExprSpec_ch_buf, not including EOB + * characters. + */ + ExprSpec_size_t ExprSpec_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int ExprSpec_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int ExprSpec_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int ExprSpec_at_bol; + + int ExprSpec_bs_lineno; /**< The line count. */ + int ExprSpec_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int ExprSpec_fill_buffer; + + int ExprSpec_buffer_status; + +#define ExprSpecYY_BUFFER_NEW 0 +#define ExprSpecYY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as ExprSpecYY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via ExprSpecrestart()), so that the user can continue scanning by + * just pointing ExprSpecin at a new input file. + */ +#define ExprSpecYY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !ExprSpecYY_STRUCT_ExprSpecYY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t ExprSpec_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t ExprSpec_buffer_stack_max = 0; /**< capacity of stack. */ +static ExprSpecYY_BUFFER_STATE * ExprSpec_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define ExprSpecYY_CURRENT_BUFFER ( (ExprSpec_buffer_stack) \ + ? (ExprSpec_buffer_stack)[(ExprSpec_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define ExprSpecYY_CURRENT_BUFFER_LVALUE (ExprSpec_buffer_stack)[(ExprSpec_buffer_stack_top)] + +/* ExprSpec_hold_char holds the character lost when ExprSpectext is formed. */ +static char ExprSpec_hold_char; +static ExprSpec_size_t ExprSpec_n_chars; /* number of characters read into ExprSpec_ch_buf */ +ExprSpec_size_t ExprSpecleng; + +/* Points to current character in buffer. */ +static char *ExprSpec_c_buf_p = (char *) 0; +static int ExprSpec_init = 0; /* whether we need to initialize */ +static int ExprSpec_start = 0; /* start state number */ + +/* Flag which is used to allow ExprSpecwrap()'s to do buffer switches + * instead of setting up a fresh ExprSpecin. A bit of a hack ... + */ +static int ExprSpec_did_buffer_switch_on_eof; + +void ExprSpecrestart (FILE *input_file ); +void ExprSpec_switch_to_buffer (ExprSpecYY_BUFFER_STATE new_buffer ); +ExprSpecYY_BUFFER_STATE ExprSpec_create_buffer (FILE *file,int size ); +void ExprSpec_delete_buffer (ExprSpecYY_BUFFER_STATE b ); +void ExprSpec_flush_buffer (ExprSpecYY_BUFFER_STATE b ); +void ExprSpecpush_buffer_state (ExprSpecYY_BUFFER_STATE new_buffer ); +void ExprSpecpop_buffer_state (void ); + +static void ExprSpecensure_buffer_stack (void ); +static void ExprSpec_load_buffer_state (void ); +static void ExprSpec_init_buffer (ExprSpecYY_BUFFER_STATE b,FILE *file ); + +#define ExprSpecYY_FLUSH_BUFFER ExprSpec_flush_buffer(ExprSpecYY_CURRENT_BUFFER ) + +ExprSpecYY_BUFFER_STATE ExprSpec_scan_buffer (char *base,ExprSpec_size_t size ); +ExprSpecYY_BUFFER_STATE ExprSpec_scan_string (ExprSpecconst char *ExprSpec_str ); +ExprSpecYY_BUFFER_STATE ExprSpec_scan_bytes (ExprSpecconst char *bytes,ExprSpec_size_t len ); + +void *ExprSpecalloc (ExprSpec_size_t ); +void *ExprSpecrealloc (void *,ExprSpec_size_t ); +void ExprSpecfree (void * ); + +#define ExprSpec_new_buffer ExprSpec_create_buffer + +#define ExprSpec_set_interactive(is_interactive) \ + { \ + if ( ! ExprSpecYY_CURRENT_BUFFER ){ \ + ExprSpecensure_buffer_stack (); \ + ExprSpecYY_CURRENT_BUFFER_LVALUE = \ + ExprSpec_create_buffer(ExprSpecin,ExprSpecYY_BUF_SIZE ); \ + } \ + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_is_interactive = is_interactive; \ + } + +#define ExprSpec_set_bol(at_bol) \ + { \ + if ( ! ExprSpecYY_CURRENT_BUFFER ){\ + ExprSpecensure_buffer_stack (); \ + ExprSpecYY_CURRENT_BUFFER_LVALUE = \ + ExprSpec_create_buffer(ExprSpecin,ExprSpecYY_BUF_SIZE ); \ + } \ + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_at_bol = at_bol; \ + } + +#define ExprSpecYY_AT_BOL() (ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_at_bol) + +/* Begin user sect3 */ + +#define ExprSpecwrap() 1 +#define ExprSpecYY_SKIP_ExprSpecYYWRAP + +typedef unsigned char ExprSpecYY_CHAR; + +FILE *ExprSpecin = (FILE *) 0, *ExprSpecout = (FILE *) 0; + +typedef int ExprSpec_state_type; + +extern int ExprSpeclineno; + +int ExprSpeclineno = 1; + +extern char *ExprSpectext; +#define ExprSpectext_ptr ExprSpectext + +static ExprSpec_state_type ExprSpec_get_previous_state (void ); +static ExprSpec_state_type ExprSpec_try_NUL_trans (ExprSpec_state_type current_state ); +static int ExprSpec_get_next_buffer (void ); +static void ExprSpec_fatal_error (ExprSpecconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up ExprSpectext. + */ +#define ExprSpecYY_DO_BEFORE_ACTION \ + (ExprSpectext_ptr) = ExprSpec_bp; \ + ExprSpecleng = (size_t) (ExprSpec_cp - ExprSpec_bp); \ + (ExprSpec_hold_char) = *ExprSpec_cp; \ + *ExprSpec_cp = '\0'; \ + (ExprSpec_c_buf_p) = ExprSpec_cp; + +#define ExprSpecYY_NUM_RULES 34 +#define ExprSpecYY_END_OF_BUFFER 35 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct ExprSpec_trans_info + { + flex_int32_t ExprSpec_verify; + flex_int32_t ExprSpec_nxt; + }; +static ExprSpecconst flex_int16_t ExprSpec_accept[115] = + { 0, + 0, 0, 35, 33, 31, 31, 33, 33, 32, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 23, 33, + 33, 33, 28, 28, 18, 28, 33, 33, 28, 28, + 28, 28, 28, 28, 33, 7, 0, 24, 0, 32, + 0, 26, 15, 5, 0, 25, 0, 13, 11, 12, + 10, 23, 14, 23, 23, 0, 8, 6, 9, 28, + 28, 17, 29, 30, 16, 28, 28, 28, 2, 28, + 28, 4, 24, 26, 0, 25, 0, 23, 0, 0, + 23, 28, 22, 28, 28, 28, 28, 0, 0, 23, + 0, 0, 23, 28, 3, 28, 28, 28, 27, 0, + + 23, 28, 28, 28, 28, 27, 28, 28, 19, 20, + 1, 28, 21, 0 + } ; + +static ExprSpecconst flex_int32_t ExprSpec_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 7, 8, 9, 10, 1, + 1, 11, 12, 1, 13, 14, 15, 16, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, + 21, 22, 1, 1, 23, 24, 23, 23, 25, 23, + 26, 23, 27, 23, 23, 23, 23, 28, 23, 29, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 1, 30, 1, 31, 23, 1, 32, 33, 23, 23, + + 34, 35, 36, 37, 38, 23, 23, 39, 40, 41, + 42, 23, 23, 43, 44, 45, 46, 23, 23, 47, + 23, 23, 1, 48, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static ExprSpecconst flex_int32_t ExprSpec_meta[49] = + { 0, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 3, 3, 4, 1, 1, + 1, 1, 5, 5, 5, 5, 5, 5, 5, 1, + 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 1 + } ; + +static ExprSpecconst flex_int16_t ExprSpec_base[123] = + { 0, + 0, 0, 193, 194, 194, 194, 171, 44, 161, 0, + 169, 180, 40, 167, 166, 30, 37, 165, 41, 164, + 163, 162, 0, 157, 0, 154, 15, 159, 137, 139, + 145, 141, 137, 134, 125, 194, 54, 194, 56, 142, + 130, 152, 194, 194, 52, 194, 53, 194, 194, 194, + 194, 51, 194, 55, 74, 80, 194, 194, 194, 0, + 143, 0, 194, 194, 194, 121, 123, 120, 0, 124, + 122, 194, 64, 145, 144, 68, 88, 86, 97, 48, + 90, 134, 0, 126, 115, 124, 115, 0, 99, 101, + 109, 107, 111, 127, 0, 105, 112, 94, 0, 113, + + 115, 118, 81, 69, 58, 0, 68, 49, 0, 0, + 194, 38, 0, 194, 132, 137, 72, 142, 145, 148, + 68, 151 + } ; + +static ExprSpecconst flex_int16_t ExprSpec_def[123] = + { 0, + 114, 1, 114, 114, 114, 114, 114, 115, 116, 117, + 114, 114, 118, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 119, 119, 119, 119, 114, 114, 119, 119, + 119, 119, 119, 119, 114, 114, 115, 114, 115, 116, + 116, 120, 114, 114, 118, 114, 118, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 119, + 119, 119, 114, 114, 114, 119, 119, 119, 119, 119, + 119, 114, 115, 120, 114, 118, 114, 114, 114, 114, + 114, 119, 119, 119, 119, 119, 119, 121, 114, 114, + 114, 114, 114, 119, 119, 119, 119, 119, 122, 114, + + 114, 119, 119, 119, 119, 122, 119, 119, 119, 119, + 114, 119, 119, 0, 114, 114, 114, 114, 114, 114, + 114, 114 + } ; + +static ExprSpecconst flex_int16_t ExprSpec_nxt[243] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 19, 4, 4, 20, + 21, 22, 23, 24, 25, 23, 23, 23, 26, 27, + 28, 23, 29, 30, 23, 31, 23, 32, 33, 23, + 23, 23, 23, 34, 23, 23, 23, 35, 38, 46, + 50, 51, 52, 52, 54, 63, 55, 55, 38, 64, + 73, 46, 76, 81, 81, 56, 52, 52, 38, 47, + 78, 78, 99, 39, 56, 77, 42, 46, 113, 79, + 112, 47, 47, 39, 77, 39, 111, 54, 79, 55, + 55, 80, 80, 39, 110, 81, 81, 47, 56, 89, + + 89, 78, 78, 90, 90, 81, 81, 56, 92, 92, + 91, 109, 93, 93, 90, 90, 90, 90, 108, 91, + 100, 100, 93, 93, 101, 101, 93, 93, 101, 101, + 101, 101, 37, 107, 37, 37, 37, 40, 105, 40, + 40, 40, 45, 104, 45, 45, 45, 60, 103, 60, + 74, 74, 74, 106, 102, 106, 98, 97, 96, 95, + 94, 88, 75, 87, 86, 85, 84, 83, 82, 75, + 114, 41, 72, 71, 70, 69, 68, 67, 66, 65, + 62, 61, 59, 58, 57, 53, 49, 48, 44, 43, + 41, 36, 114, 3, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114 + } ; + +static ExprSpecconst flex_int16_t ExprSpec_chk[243] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 8, 13, + 16, 16, 17, 17, 19, 27, 19, 19, 37, 27, + 39, 45, 47, 80, 80, 19, 52, 52, 73, 13, + 54, 54, 121, 8, 19, 52, 117, 76, 112, 54, + 108, 45, 47, 37, 52, 39, 107, 55, 54, 55, + 55, 56, 56, 73, 105, 56, 56, 76, 55, 77, + + 77, 78, 78, 77, 77, 81, 81, 55, 79, 79, + 78, 104, 79, 79, 89, 89, 90, 90, 103, 78, + 91, 91, 92, 92, 91, 91, 93, 93, 100, 100, + 101, 101, 115, 102, 115, 115, 115, 116, 98, 116, + 116, 116, 118, 97, 118, 118, 118, 119, 96, 119, + 120, 120, 120, 122, 94, 122, 87, 86, 85, 84, + 82, 75, 74, 71, 70, 68, 67, 66, 61, 42, + 41, 40, 35, 34, 33, 32, 31, 30, 29, 28, + 26, 24, 22, 21, 20, 18, 15, 14, 12, 11, + 9, 7, 3, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114 + } ; + +static ExprSpec_state_type ExprSpec_last_accepting_state; +static char *ExprSpec_last_accepting_cpos; + +extern int ExprSpec_flex_debug; +int ExprSpec_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define ExprSpecmore() ExprSpecmore_used_but_not_detected +#define ExprSpecYY_MORE_ADJ 0 +#define ExprSpecYY_RESTORE_ExprSpecYY_MORE_OFFSET +char *ExprSpectext; +#line 1 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +/* +* Copyright Disney Enterprises, Inc. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License +* and the following modification to it: Section 6 Trademarks. +* deleted and replaced with: +* +* 6. Trademarks. This License does not grant permission to use the +* trade names, trademarks, service marks, or product names of the +* Licensor and its affiliates, except as required for reproducing +* the content of the NOTICE file. +* +* You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +/* Don't generate ExprSpecwrap since everything is in one string */ +/* Don't generate unput since it's unused and gcc complains... */ +/* Don't worry about interactive and using isatty(). Fixes Windows compile. */ +#line 26 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +#ifndef MAKEDEPEND +# include +# include +# include +#define _USE_MATH_DEFINES +# include +#endif + +#include "ExprSpecType.h" + +#ifdef SEEXPR_WIN32 +# define ExprSpecYY_NO_UNISTD_H +# define ExprSpecYY_SKIP_ExprSpecYYWRAP +#endif + +#ifndef MAKEDEPEND +# include "ExprSpecParser.tab.h" +#endif + +// TODO: make this thread safe +static int columnNumber=0; // really buffer position +static int lineNumber=0; // not used + +static std::vector >* comments=0; + +extern char* specRegisterToken(char* tok); +void specResetCounters(std::vector >& commentsIn){ + columnNumber=lineNumber=0; + comments=&commentsIn; +} + +int ExprSpecpos(); // forward declare + + +#define ExprSpecYY_USER_ACTION { \ + ExprSpeclloc.first_line=lineNumber;ExprSpeclloc.first_column=columnNumber; \ + columnNumber+=ExprSpecleng;\ + ExprSpeclloc.last_column=columnNumber;ExprSpeclloc.last_line=lineNumber;} + +#line 607 "ExprSpecParserLexIn.cpp" + +#define INITIAL 0 + +#ifndef ExprSpecYY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef ExprSpecYY_EXTRA_TYPE +#define ExprSpecYY_EXTRA_TYPE void * +#endif + +static int ExprSpec_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int ExprSpeclex_destroy (void ); + +int ExprSpecget_debug (void ); + +void ExprSpecset_debug (int debug_flag ); + +ExprSpecYY_EXTRA_TYPE ExprSpecget_extra (void ); + +void ExprSpecset_extra (ExprSpecYY_EXTRA_TYPE user_defined ); + +FILE *ExprSpecget_in (void ); + +void ExprSpecset_in (FILE * in_str ); + +FILE *ExprSpecget_out (void ); + +void ExprSpecset_out (FILE * out_str ); + +ExprSpec_size_t ExprSpecget_leng (void ); + +char *ExprSpecget_text (void ); + +int ExprSpecget_lineno (void ); + +void ExprSpecset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef ExprSpecYY_SKIP_ExprSpecYYWRAP +#ifdef __cplusplus +extern "C" int ExprSpecwrap (void ); +#else +extern int ExprSpecwrap (void ); +#endif +#endif + +#ifndef ExprSpectext_ptr +static void ExprSpec_flex_strncpy (char *,ExprSpecconst char *,int ); +#endif + +#ifdef ExprSpecYY_NEED_STRLEN +static int ExprSpec_flex_strlen (ExprSpecconst char * ); +#endif + +#ifndef ExprSpecYY_NO_INPUT + +#ifdef __cplusplus +static int ExprSpecinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef ExprSpecYY_READ_BUF_SIZE +#define ExprSpecYY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( ExprSpectext, ExprSpecleng, 1, ExprSpecout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or ExprSpecYY_NULL, + * is returned in "result". + */ +#ifndef ExprSpecYY_INPUT +#define ExprSpecYY_INPUT(buf,result,max_size) \ + if ( ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( ExprSpecin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( ExprSpecin ) ) \ + ExprSpecYY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, ExprSpecin))==0 && ferror(ExprSpecin)) \ + { \ + if( errno != EINTR) \ + { \ + ExprSpecYY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(ExprSpecin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "ExprSpecterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef ExprSpecterminate +#define ExprSpecterminate() return ExprSpecYY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef ExprSpecYY_START_STACK_INCR +#define ExprSpecYY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef ExprSpecYY_FATAL_ERROR +#define ExprSpecYY_FATAL_ERROR(msg) ExprSpec_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef ExprSpecYY_DECL +#define ExprSpecYY_DECL_IS_OURS 1 + +extern int ExprSpeclex (void); + +#define ExprSpecYY_DECL int ExprSpeclex (void) +#endif /* !ExprSpecYY_DECL */ + +/* Code executed at the beginning of each rule, after ExprSpectext and ExprSpecleng + * have been set up. + */ +#ifndef ExprSpecYY_USER_ACTION +#define ExprSpecYY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef ExprSpecYY_BREAK +#define ExprSpecYY_BREAK break; +#endif + +#define ExprSpecYY_RULE_SETUP \ + ExprSpecYY_USER_ACTION + +/** The main scanner function which does all the work. + */ +ExprSpecYY_DECL +{ + register ExprSpec_state_type ExprSpec_current_state; + register char *ExprSpec_cp, *ExprSpec_bp; + register int ExprSpec_act; + +#line 72 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" + +#line 789 "ExprSpecParserLexIn.cpp" + + if ( !(ExprSpec_init) ) + { + (ExprSpec_init) = 1; + +#ifdef ExprSpecYY_USER_INIT + ExprSpecYY_USER_INIT; +#endif + + if ( ! (ExprSpec_start) ) + (ExprSpec_start) = 1; /* first start state */ + + if ( ! ExprSpecin ) + ExprSpecin = stdin; + + if ( ! ExprSpecout ) + ExprSpecout = stdout; + + if ( ! ExprSpecYY_CURRENT_BUFFER ) { + ExprSpecensure_buffer_stack (); + ExprSpecYY_CURRENT_BUFFER_LVALUE = + ExprSpec_create_buffer(ExprSpecin,ExprSpecYY_BUF_SIZE ); + } + + ExprSpec_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + ExprSpec_cp = (ExprSpec_c_buf_p); + + /* Support of ExprSpectext. */ + *ExprSpec_cp = (ExprSpec_hold_char); + + /* ExprSpec_bp points to the position in ExprSpec_ch_buf of the start of + * the current run. + */ + ExprSpec_bp = ExprSpec_cp; + + ExprSpec_current_state = (ExprSpec_start); +ExprSpec_match: + do + { + register ExprSpecYY_CHAR ExprSpec_c = ExprSpec_ec[ExprSpecYY_SC_TO_UI(*ExprSpec_cp)]; + if ( ExprSpec_accept[ExprSpec_current_state] ) + { + (ExprSpec_last_accepting_state) = ExprSpec_current_state; + (ExprSpec_last_accepting_cpos) = ExprSpec_cp; + } + while ( ExprSpec_chk[ExprSpec_base[ExprSpec_current_state] + ExprSpec_c] != ExprSpec_current_state ) + { + ExprSpec_current_state = (int) ExprSpec_def[ExprSpec_current_state]; + if ( ExprSpec_current_state >= 115 ) + ExprSpec_c = ExprSpec_meta[(unsigned int) ExprSpec_c]; + } + ExprSpec_current_state = ExprSpec_nxt[ExprSpec_base[ExprSpec_current_state] + (unsigned int) ExprSpec_c]; + ++ExprSpec_cp; + } + while ( ExprSpec_current_state != 114 ); + ExprSpec_cp = (ExprSpec_last_accepting_cpos); + ExprSpec_current_state = (ExprSpec_last_accepting_state); + +ExprSpec_find_action: + ExprSpec_act = ExprSpec_accept[ExprSpec_current_state]; + + ExprSpecYY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( ExprSpec_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of ExprSpecYY_DO_BEFORE_ACTION */ + *ExprSpec_cp = (ExprSpec_hold_char); + ExprSpec_cp = (ExprSpec_last_accepting_cpos); + ExprSpec_current_state = (ExprSpec_last_accepting_state); + goto ExprSpec_find_action; + +case 1: +ExprSpecYY_RULE_SETUP +#line 73 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" + + ExprSpecYY_BREAK +case 2: +ExprSpecYY_RULE_SETUP +#line 75 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return IF; } + ExprSpecYY_BREAK +case 3: +ExprSpecYY_RULE_SETUP +#line 76 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ELSE; } + ExprSpecYY_BREAK +case 4: +ExprSpecYY_RULE_SETUP +#line 78 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return OR; } + ExprSpecYY_BREAK +case 5: +ExprSpecYY_RULE_SETUP +#line 79 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return AND; } + ExprSpecYY_BREAK +case 6: +ExprSpecYY_RULE_SETUP +#line 80 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return EQ; } + ExprSpecYY_BREAK +case 7: +ExprSpecYY_RULE_SETUP +#line 81 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return NE; } + ExprSpecYY_BREAK +case 8: +ExprSpecYY_RULE_SETUP +#line 82 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return LE; } + ExprSpecYY_BREAK +case 9: +ExprSpecYY_RULE_SETUP +#line 83 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return GE; } + ExprSpecYY_BREAK +case 10: +ExprSpecYY_RULE_SETUP +#line 84 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ARROW; } + ExprSpecYY_BREAK +case 11: +ExprSpecYY_RULE_SETUP +#line 85 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return AddEq; } + ExprSpecYY_BREAK +case 12: +ExprSpecYY_RULE_SETUP +#line 86 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return SubEq; } + ExprSpecYY_BREAK +case 13: +ExprSpecYY_RULE_SETUP +#line 87 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return MultEq; } + ExprSpecYY_BREAK +case 14: +ExprSpecYY_RULE_SETUP +#line 88 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return DivEq; } + ExprSpecYY_BREAK +case 15: +ExprSpecYY_RULE_SETUP +#line 89 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ModEq; } + ExprSpecYY_BREAK +case 16: +ExprSpecYY_RULE_SETUP +#line 90 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ExpEq; } + ExprSpecYY_BREAK +case 17: +ExprSpecYY_RULE_SETUP +#line 92 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.d = M_PI; return NUMBER; } + ExprSpecYY_BREAK +case 18: +ExprSpecYY_RULE_SETUP +#line 93 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.d = M_E; return NUMBER; } + ExprSpecYY_BREAK +case 19: +ExprSpecYY_RULE_SETUP +#line 94 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.d = 0; return NUMBER; } + ExprSpecYY_BREAK +case 20: +ExprSpecYY_RULE_SETUP +#line 95 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.d = 1; return NUMBER; } + ExprSpecYY_BREAK +case 21: +ExprSpecYY_RULE_SETUP +#line 96 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.d = 2; return NUMBER; } + ExprSpecYY_BREAK +case 22: +ExprSpecYY_RULE_SETUP +#line 97 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.d = 3; return NUMBER; } + ExprSpecYY_BREAK +case 23: +ExprSpecYY_RULE_SETUP +#line 99 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.d = atof(ExprSpectext); return NUMBER; } + ExprSpecYY_BREAK +case 24: +ExprSpecYY_RULE_SETUP +#line 100 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ /* match quoted string, allow embedded quote, \" */ + ExprSpeclval.s = specRegisterToken(&ExprSpectext[1]); + ExprSpeclval.s[strlen(ExprSpeclval.s)-1] = '\0'; + return STR; } + ExprSpecYY_BREAK +case 25: +ExprSpecYY_RULE_SETUP +#line 104 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ /* match quoted string, allow embedded quote, \' */ + ExprSpeclval.s = specRegisterToken(&ExprSpectext[1]); + ExprSpeclval.s[strlen(ExprSpeclval.s)-1] = '\0'; + return STR; } + ExprSpecYY_BREAK +case 26: +ExprSpecYY_RULE_SETUP +#line 108 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.s = specRegisterToken(&ExprSpectext[1]); return VAR; } + ExprSpecYY_BREAK +case 27: +ExprSpecYY_RULE_SETUP +#line 109 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.s = specRegisterToken(&ExprSpectext[1]); return VAR; } + ExprSpecYY_BREAK +case 28: +ExprSpecYY_RULE_SETUP +#line 110 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ ExprSpeclval.s = specRegisterToken(ExprSpectext); return NAME; } + ExprSpecYY_BREAK +case 29: +ExprSpecYY_RULE_SETUP +#line 112 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +/* ignore quoted newline */; + ExprSpecYY_BREAK +case 30: +ExprSpecYY_RULE_SETUP +#line 113 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +/* ignore quoted tab */; + ExprSpecYY_BREAK +case 31: +/* rule 31 can match eol */ +ExprSpecYY_RULE_SETUP +#line 114 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +/* ignore whitespace */; + ExprSpecYY_BREAK +case 32: +ExprSpecYY_RULE_SETUP +#line 115 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ /* match comment */ + int startPos=ExprSpecpos(),endPos=ExprSpecpos()+strlen(&ExprSpectext[1])+1; + comments->push_back(std::pair(startPos,endPos));} + ExprSpecYY_BREAK +case 33: +ExprSpecYY_RULE_SETUP +#line 120 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ExprSpectext[0]; } + ExprSpecYY_BREAK +case 34: +ExprSpecYY_RULE_SETUP +#line 122 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +ECHO; + ExprSpecYY_BREAK +#line 1047 "ExprSpecParserLexIn.cpp" +case ExprSpecYY_STATE_EOF(INITIAL): + ExprSpecterminate(); + + case ExprSpecYY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int ExprSpec_amount_of_matched_text = (int) (ExprSpec_cp - (ExprSpectext_ptr)) - 1; + + /* Undo the effects of ExprSpecYY_DO_BEFORE_ACTION. */ + *ExprSpec_cp = (ExprSpec_hold_char); + ExprSpecYY_RESTORE_ExprSpecYY_MORE_OFFSET + + if ( ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buffer_status == ExprSpecYY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed ExprSpecin at a new source and called + * ExprSpeclex(). If so, then we have to assure + * consistency between ExprSpecYY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (ExprSpec_n_chars) = ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_n_chars; + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_input_file = ExprSpecin; + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buffer_status = ExprSpecYY_BUFFER_NORMAL; + } + + /* Note that here we test for ExprSpec_c_buf_p "<=" to the position + * of the first EOB in the buffer, since ExprSpec_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (ExprSpec_c_buf_p) <= &ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf[(ExprSpec_n_chars)] ) + { /* This was really a NUL. */ + ExprSpec_state_type ExprSpec_next_state; + + (ExprSpec_c_buf_p) = (ExprSpectext_ptr) + ExprSpec_amount_of_matched_text; + + ExprSpec_current_state = ExprSpec_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * ExprSpec_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + ExprSpec_next_state = ExprSpec_try_NUL_trans( ExprSpec_current_state ); + + ExprSpec_bp = (ExprSpectext_ptr) + ExprSpecYY_MORE_ADJ; + + if ( ExprSpec_next_state ) + { + /* Consume the NUL. */ + ExprSpec_cp = ++(ExprSpec_c_buf_p); + ExprSpec_current_state = ExprSpec_next_state; + goto ExprSpec_match; + } + + else + { + ExprSpec_cp = (ExprSpec_last_accepting_cpos); + ExprSpec_current_state = (ExprSpec_last_accepting_state); + goto ExprSpec_find_action; + } + } + + else switch ( ExprSpec_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (ExprSpec_did_buffer_switch_on_eof) = 0; + + if ( ExprSpecwrap( ) ) + { + /* Note: because we've taken care in + * ExprSpec_get_next_buffer() to have set up + * ExprSpectext, we can now set up + * ExprSpec_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * ExprSpecYY_NULL, it'll still work - another + * ExprSpecYY_NULL will get returned. + */ + (ExprSpec_c_buf_p) = (ExprSpectext_ptr) + ExprSpecYY_MORE_ADJ; + + ExprSpec_act = ExprSpecYY_STATE_EOF(ExprSpecYY_START); + goto do_action; + } + + else + { + if ( ! (ExprSpec_did_buffer_switch_on_eof) ) + ExprSpecYY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (ExprSpec_c_buf_p) = + (ExprSpectext_ptr) + ExprSpec_amount_of_matched_text; + + ExprSpec_current_state = ExprSpec_get_previous_state( ); + + ExprSpec_cp = (ExprSpec_c_buf_p); + ExprSpec_bp = (ExprSpectext_ptr) + ExprSpecYY_MORE_ADJ; + goto ExprSpec_match; + + case EOB_ACT_LAST_MATCH: + (ExprSpec_c_buf_p) = + &ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf[(ExprSpec_n_chars)]; + + ExprSpec_current_state = ExprSpec_get_previous_state( ); + + ExprSpec_cp = (ExprSpec_c_buf_p); + ExprSpec_bp = (ExprSpectext_ptr) + ExprSpecYY_MORE_ADJ; + goto ExprSpec_find_action; + } + break; + } + + default: + ExprSpecYY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of ExprSpeclex */ + +/* ExprSpec_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int ExprSpec_get_next_buffer (void) +{ + register char *dest = ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf; + register char *source = (ExprSpectext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (ExprSpec_c_buf_p) > &ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf[(ExprSpec_n_chars) + 1] ) + ExprSpecYY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (ExprSpec_c_buf_p) - (ExprSpectext_ptr) - ExprSpecYY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((ExprSpec_c_buf_p) - (ExprSpectext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buffer_status == ExprSpecYY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_n_chars = (ExprSpec_n_chars) = 0; + + else + { + ExprSpec_size_t num_to_read = + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + ExprSpecYY_BUFFER_STATE b = ExprSpecYY_CURRENT_BUFFER_LVALUE; + + int ExprSpec_c_buf_p_offset = + (int) ((ExprSpec_c_buf_p) - b->ExprSpec_ch_buf); + + if ( b->ExprSpec_is_our_buffer ) + { + ExprSpec_size_t new_size = b->ExprSpec_buf_size * 2; + + if ( new_size <= 0 ) + b->ExprSpec_buf_size += b->ExprSpec_buf_size / 8; + else + b->ExprSpec_buf_size *= 2; + + b->ExprSpec_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + ExprSpecrealloc((void *) b->ExprSpec_ch_buf,b->ExprSpec_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->ExprSpec_ch_buf = 0; + + if ( ! b->ExprSpec_ch_buf ) + ExprSpecYY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (ExprSpec_c_buf_p) = &b->ExprSpec_ch_buf[ExprSpec_c_buf_p_offset]; + + num_to_read = ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > ExprSpecYY_READ_BUF_SIZE ) + num_to_read = ExprSpecYY_READ_BUF_SIZE; + + /* Read in more data. */ + ExprSpecYY_INPUT( (&ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf[number_to_move]), + (ExprSpec_n_chars), num_to_read ); + + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_n_chars = (ExprSpec_n_chars); + } + + if ( (ExprSpec_n_chars) == 0 ) + { + if ( number_to_move == ExprSpecYY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + ExprSpecrestart(ExprSpecin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buffer_status = + ExprSpecYY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((ExprSpec_size_t) ((ExprSpec_n_chars) + number_to_move) > ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + ExprSpec_size_t new_size = (ExprSpec_n_chars) + number_to_move + ((ExprSpec_n_chars) >> 1); + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf = (char *) ExprSpecrealloc((void *) ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf,new_size ); + if ( ! ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf ) + ExprSpecYY_FATAL_ERROR( "out of dynamic memory in ExprSpec_get_next_buffer()" ); + } + + (ExprSpec_n_chars) += number_to_move; + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf[(ExprSpec_n_chars)] = ExprSpecYY_END_OF_BUFFER_CHAR; + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf[(ExprSpec_n_chars) + 1] = ExprSpecYY_END_OF_BUFFER_CHAR; + + (ExprSpectext_ptr) = &ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf[0]; + + return ret_val; +} + +/* ExprSpec_get_previous_state - get the state just before the EOB char was reached */ + + static ExprSpec_state_type ExprSpec_get_previous_state (void) +{ + register ExprSpec_state_type ExprSpec_current_state; + register char *ExprSpec_cp; + + ExprSpec_current_state = (ExprSpec_start); + + for ( ExprSpec_cp = (ExprSpectext_ptr) + ExprSpecYY_MORE_ADJ; ExprSpec_cp < (ExprSpec_c_buf_p); ++ExprSpec_cp ) + { + register ExprSpecYY_CHAR ExprSpec_c = (*ExprSpec_cp ? ExprSpec_ec[ExprSpecYY_SC_TO_UI(*ExprSpec_cp)] : 1); + if ( ExprSpec_accept[ExprSpec_current_state] ) + { + (ExprSpec_last_accepting_state) = ExprSpec_current_state; + (ExprSpec_last_accepting_cpos) = ExprSpec_cp; + } + while ( ExprSpec_chk[ExprSpec_base[ExprSpec_current_state] + ExprSpec_c] != ExprSpec_current_state ) + { + ExprSpec_current_state = (int) ExprSpec_def[ExprSpec_current_state]; + if ( ExprSpec_current_state >= 115 ) + ExprSpec_c = ExprSpec_meta[(unsigned int) ExprSpec_c]; + } + ExprSpec_current_state = ExprSpec_nxt[ExprSpec_base[ExprSpec_current_state] + (unsigned int) ExprSpec_c]; + } + + return ExprSpec_current_state; +} + +/* ExprSpec_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = ExprSpec_try_NUL_trans( current_state ); + */ + static ExprSpec_state_type ExprSpec_try_NUL_trans (ExprSpec_state_type ExprSpec_current_state ) +{ + register int ExprSpec_is_jam; + register char *ExprSpec_cp = (ExprSpec_c_buf_p); + + register ExprSpecYY_CHAR ExprSpec_c = 1; + if ( ExprSpec_accept[ExprSpec_current_state] ) + { + (ExprSpec_last_accepting_state) = ExprSpec_current_state; + (ExprSpec_last_accepting_cpos) = ExprSpec_cp; + } + while ( ExprSpec_chk[ExprSpec_base[ExprSpec_current_state] + ExprSpec_c] != ExprSpec_current_state ) + { + ExprSpec_current_state = (int) ExprSpec_def[ExprSpec_current_state]; + if ( ExprSpec_current_state >= 115 ) + ExprSpec_c = ExprSpec_meta[(unsigned int) ExprSpec_c]; + } + ExprSpec_current_state = ExprSpec_nxt[ExprSpec_base[ExprSpec_current_state] + (unsigned int) ExprSpec_c]; + ExprSpec_is_jam = (ExprSpec_current_state == 114); + + return ExprSpec_is_jam ? 0 : ExprSpec_current_state; +} + +#ifndef ExprSpecYY_NO_INPUT +#ifdef __cplusplus + static int ExprSpecinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(ExprSpec_c_buf_p) = (ExprSpec_hold_char); + + if ( *(ExprSpec_c_buf_p) == ExprSpecYY_END_OF_BUFFER_CHAR ) + { + /* ExprSpec_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (ExprSpec_c_buf_p) < &ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_ch_buf[(ExprSpec_n_chars)] ) + /* This was really a NUL. */ + *(ExprSpec_c_buf_p) = '\0'; + + else + { /* need more input */ + ExprSpec_size_t offset = (ExprSpec_c_buf_p) - (ExprSpectext_ptr); + ++(ExprSpec_c_buf_p); + + switch ( ExprSpec_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because ExprSpec_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + ExprSpecrestart(ExprSpecin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( ExprSpecwrap( ) ) + return EOF; + + if ( ! (ExprSpec_did_buffer_switch_on_eof) ) + ExprSpecYY_NEW_FILE; +#ifdef __cplusplus + return ExprSpecinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (ExprSpec_c_buf_p) = (ExprSpectext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (ExprSpec_c_buf_p); /* cast for 8-bit char's */ + *(ExprSpec_c_buf_p) = '\0'; /* preserve ExprSpectext */ + (ExprSpec_hold_char) = *++(ExprSpec_c_buf_p); + + return c; +} +#endif /* ifndef ExprSpecYY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void ExprSpecrestart (FILE * input_file ) +{ + + if ( ! ExprSpecYY_CURRENT_BUFFER ){ + ExprSpecensure_buffer_stack (); + ExprSpecYY_CURRENT_BUFFER_LVALUE = + ExprSpec_create_buffer(ExprSpecin,ExprSpecYY_BUF_SIZE ); + } + + ExprSpec_init_buffer(ExprSpecYY_CURRENT_BUFFER,input_file ); + ExprSpec_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void ExprSpec_switch_to_buffer (ExprSpecYY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * ExprSpecpop_buffer_state(); + * ExprSpecpush_buffer_state(new_buffer); + */ + ExprSpecensure_buffer_stack (); + if ( ExprSpecYY_CURRENT_BUFFER == new_buffer ) + return; + + if ( ExprSpecYY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(ExprSpec_c_buf_p) = (ExprSpec_hold_char); + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buf_pos = (ExprSpec_c_buf_p); + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_n_chars = (ExprSpec_n_chars); + } + + ExprSpecYY_CURRENT_BUFFER_LVALUE = new_buffer; + ExprSpec_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (ExprSpecwrap()) processing, but the only time this flag + * is looked at is after ExprSpecwrap() is called, so it's safe + * to go ahead and always set it. + */ + (ExprSpec_did_buffer_switch_on_eof) = 1; +} + +static void ExprSpec_load_buffer_state (void) +{ + (ExprSpec_n_chars) = ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_n_chars; + (ExprSpectext_ptr) = (ExprSpec_c_buf_p) = ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buf_pos; + ExprSpecin = ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_input_file; + (ExprSpec_hold_char) = *(ExprSpec_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c ExprSpecYY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + ExprSpecYY_BUFFER_STATE ExprSpec_create_buffer (FILE * file, int size ) +{ + ExprSpecYY_BUFFER_STATE b; + + b = (ExprSpecYY_BUFFER_STATE) ExprSpecalloc(sizeof( struct ExprSpec_buffer_state ) ); + if ( ! b ) + ExprSpecYY_FATAL_ERROR( "out of dynamic memory in ExprSpec_create_buffer()" ); + + b->ExprSpec_buf_size = size; + + /* ExprSpec_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->ExprSpec_ch_buf = (char *) ExprSpecalloc(b->ExprSpec_buf_size + 2 ); + if ( ! b->ExprSpec_ch_buf ) + ExprSpecYY_FATAL_ERROR( "out of dynamic memory in ExprSpec_create_buffer()" ); + + b->ExprSpec_is_our_buffer = 1; + + ExprSpec_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with ExprSpec_create_buffer() + * + */ + void ExprSpec_delete_buffer (ExprSpecYY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == ExprSpecYY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + ExprSpecYY_CURRENT_BUFFER_LVALUE = (ExprSpecYY_BUFFER_STATE) 0; + + if ( b->ExprSpec_is_our_buffer ) + ExprSpecfree((void *) b->ExprSpec_ch_buf ); + + ExprSpecfree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a ExprSpecrestart() or at EOF. + */ + static void ExprSpec_init_buffer (ExprSpecYY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + ExprSpec_flush_buffer(b ); + + b->ExprSpec_input_file = file; + b->ExprSpec_fill_buffer = 1; + + /* If b is the current buffer, then ExprSpec_init_buffer was _probably_ + * called from ExprSpecrestart() or through ExprSpec_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != ExprSpecYY_CURRENT_BUFFER){ + b->ExprSpec_bs_lineno = 1; + b->ExprSpec_bs_column = 0; + } + + b->ExprSpec_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, ExprSpecYY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c ExprSpecYY_CURRENT_BUFFER. + * + */ + void ExprSpec_flush_buffer (ExprSpecYY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->ExprSpec_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->ExprSpec_ch_buf[0] = ExprSpecYY_END_OF_BUFFER_CHAR; + b->ExprSpec_ch_buf[1] = ExprSpecYY_END_OF_BUFFER_CHAR; + + b->ExprSpec_buf_pos = &b->ExprSpec_ch_buf[0]; + + b->ExprSpec_at_bol = 1; + b->ExprSpec_buffer_status = ExprSpecYY_BUFFER_NEW; + + if ( b == ExprSpecYY_CURRENT_BUFFER ) + ExprSpec_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void ExprSpecpush_buffer_state (ExprSpecYY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + ExprSpecensure_buffer_stack(); + + /* This block is copied from ExprSpec_switch_to_buffer. */ + if ( ExprSpecYY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(ExprSpec_c_buf_p) = (ExprSpec_hold_char); + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_buf_pos = (ExprSpec_c_buf_p); + ExprSpecYY_CURRENT_BUFFER_LVALUE->ExprSpec_n_chars = (ExprSpec_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (ExprSpecYY_CURRENT_BUFFER) + (ExprSpec_buffer_stack_top)++; + ExprSpecYY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from ExprSpec_switch_to_buffer. */ + ExprSpec_load_buffer_state( ); + (ExprSpec_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void ExprSpecpop_buffer_state (void) +{ + if (!ExprSpecYY_CURRENT_BUFFER) + return; + + ExprSpec_delete_buffer(ExprSpecYY_CURRENT_BUFFER ); + ExprSpecYY_CURRENT_BUFFER_LVALUE = NULL; + if ((ExprSpec_buffer_stack_top) > 0) + --(ExprSpec_buffer_stack_top); + + if (ExprSpecYY_CURRENT_BUFFER) { + ExprSpec_load_buffer_state( ); + (ExprSpec_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void ExprSpecensure_buffer_stack (void) +{ + ExprSpec_size_t num_to_alloc; + + if (!(ExprSpec_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (ExprSpec_buffer_stack) = (struct ExprSpec_buffer_state**)ExprSpecalloc + (num_to_alloc * sizeof(struct ExprSpec_buffer_state*) + ); + if ( ! (ExprSpec_buffer_stack) ) + ExprSpecYY_FATAL_ERROR( "out of dynamic memory in ExprSpecensure_buffer_stack()" ); + + memset((ExprSpec_buffer_stack), 0, num_to_alloc * sizeof(struct ExprSpec_buffer_state*)); + + (ExprSpec_buffer_stack_max) = num_to_alloc; + (ExprSpec_buffer_stack_top) = 0; + return; + } + + if ((ExprSpec_buffer_stack_top) >= ((ExprSpec_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (ExprSpec_buffer_stack_max) + grow_size; + (ExprSpec_buffer_stack) = (struct ExprSpec_buffer_state**)ExprSpecrealloc + ((ExprSpec_buffer_stack), + num_to_alloc * sizeof(struct ExprSpec_buffer_state*) + ); + if ( ! (ExprSpec_buffer_stack) ) + ExprSpecYY_FATAL_ERROR( "out of dynamic memory in ExprSpecensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((ExprSpec_buffer_stack) + (ExprSpec_buffer_stack_max), 0, grow_size * sizeof(struct ExprSpec_buffer_state*)); + (ExprSpec_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +ExprSpecYY_BUFFER_STATE ExprSpec_scan_buffer (char * base, ExprSpec_size_t size ) +{ + ExprSpecYY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != ExprSpecYY_END_OF_BUFFER_CHAR || + base[size-1] != ExprSpecYY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (ExprSpecYY_BUFFER_STATE) ExprSpecalloc(sizeof( struct ExprSpec_buffer_state ) ); + if ( ! b ) + ExprSpecYY_FATAL_ERROR( "out of dynamic memory in ExprSpec_scan_buffer()" ); + + b->ExprSpec_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->ExprSpec_buf_pos = b->ExprSpec_ch_buf = base; + b->ExprSpec_is_our_buffer = 0; + b->ExprSpec_input_file = 0; + b->ExprSpec_n_chars = b->ExprSpec_buf_size; + b->ExprSpec_is_interactive = 0; + b->ExprSpec_at_bol = 1; + b->ExprSpec_fill_buffer = 0; + b->ExprSpec_buffer_status = ExprSpecYY_BUFFER_NEW; + + ExprSpec_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to ExprSpeclex() will + * scan from a @e copy of @a str. + * @param ExprSpecstr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * ExprSpec_scan_bytes() instead. + */ +ExprSpecYY_BUFFER_STATE ExprSpec_scan_string (ExprSpecconst char * ExprSpecstr ) +{ + + return ExprSpec_scan_bytes(ExprSpecstr,strlen(ExprSpecstr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to ExprSpeclex() will + * scan from a @e copy of @a bytes. + * @param ExprSpecbytes the byte buffer to scan + * @param _ExprSpecbytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +ExprSpecYY_BUFFER_STATE ExprSpec_scan_bytes (ExprSpecconst char * ExprSpecbytes, ExprSpec_size_t _ExprSpecbytes_len ) +{ + ExprSpecYY_BUFFER_STATE b; + char *buf; + ExprSpec_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _ExprSpecbytes_len + 2; + buf = (char *) ExprSpecalloc(n ); + if ( ! buf ) + ExprSpecYY_FATAL_ERROR( "out of dynamic memory in ExprSpec_scan_bytes()" ); + + for ( i = 0; i < _ExprSpecbytes_len; ++i ) + buf[i] = ExprSpecbytes[i]; + + buf[_ExprSpecbytes_len] = buf[_ExprSpecbytes_len+1] = ExprSpecYY_END_OF_BUFFER_CHAR; + + b = ExprSpec_scan_buffer(buf,n ); + if ( ! b ) + ExprSpecYY_FATAL_ERROR( "bad buffer in ExprSpec_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->ExprSpec_is_our_buffer = 1; + + return b; +} + +#ifndef ExprSpecYY_EXIT_FAILURE +#define ExprSpecYY_EXIT_FAILURE 2 +#endif + +static void ExprSpec_fatal_error (ExprSpecconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( ExprSpecYY_EXIT_FAILURE ); +} + +/* Redefine ExprSpecless() so it works in section 3 code. */ + +#undef ExprSpecless +#define ExprSpecless(n) \ + do \ + { \ + /* Undo effects of setting up ExprSpectext. */ \ + int ExprSpecless_macro_arg = (n); \ + ExprSpecYY_LESS_LINENO(ExprSpecless_macro_arg);\ + ExprSpectext[ExprSpecleng] = (ExprSpec_hold_char); \ + (ExprSpec_c_buf_p) = ExprSpectext + ExprSpecless_macro_arg; \ + (ExprSpec_hold_char) = *(ExprSpec_c_buf_p); \ + *(ExprSpec_c_buf_p) = '\0'; \ + ExprSpecleng = ExprSpecless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int ExprSpecget_lineno (void) +{ + + return ExprSpeclineno; +} + +/** Get the input stream. + * + */ +FILE *ExprSpecget_in (void) +{ + return ExprSpecin; +} + +/** Get the output stream. + * + */ +FILE *ExprSpecget_out (void) +{ + return ExprSpecout; +} + +/** Get the length of the current token. + * + */ +ExprSpec_size_t ExprSpecget_leng (void) +{ + return ExprSpecleng; +} + +/** Get the current token. + * + */ + +char *ExprSpecget_text (void) +{ + return ExprSpectext; +} + +/** Set the current line number. + * @param line_number + * + */ +void ExprSpecset_lineno (int line_number ) +{ + + ExprSpeclineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see ExprSpec_switch_to_buffer + */ +void ExprSpecset_in (FILE * in_str ) +{ + ExprSpecin = in_str ; +} + +void ExprSpecset_out (FILE * out_str ) +{ + ExprSpecout = out_str ; +} + +int ExprSpecget_debug (void) +{ + return ExprSpec_flex_debug; +} + +void ExprSpecset_debug (int bdebug ) +{ + ExprSpec_flex_debug = bdebug ; +} + +static int ExprSpec_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from ExprSpeclex_destroy(), so don't allocate here. + */ + + (ExprSpec_buffer_stack) = 0; + (ExprSpec_buffer_stack_top) = 0; + (ExprSpec_buffer_stack_max) = 0; + (ExprSpec_c_buf_p) = (char *) 0; + (ExprSpec_init) = 0; + (ExprSpec_start) = 0; + +/* Defined in main.c */ +#ifdef ExprSpecYY_STDINIT + ExprSpecin = stdin; + ExprSpecout = stdout; +#else + ExprSpecin = (FILE *) 0; + ExprSpecout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * ExprSpeclex_init() + */ + return 0; +} + +/* ExprSpeclex_destroy is for both reentrant and non-reentrant scanners. */ +int ExprSpeclex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(ExprSpecYY_CURRENT_BUFFER){ + ExprSpec_delete_buffer(ExprSpecYY_CURRENT_BUFFER ); + ExprSpecYY_CURRENT_BUFFER_LVALUE = NULL; + ExprSpecpop_buffer_state(); + } + + /* Destroy the stack itself. */ + ExprSpecfree((ExprSpec_buffer_stack) ); + (ExprSpec_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * ExprSpeclex() is called, initialization will occur. */ + ExprSpec_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef ExprSpectext_ptr +static void ExprSpec_flex_strncpy (char* s1, ExprSpecconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef ExprSpecYY_NEED_STRLEN +static int ExprSpec_flex_strlen (ExprSpecconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *ExprSpecalloc (ExprSpec_size_t size ) +{ + return (void *) malloc( size ); +} + +void *ExprSpecrealloc (void * ptr, ExprSpec_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void ExprSpecfree (void * ptr ) +{ + free( (char *) ptr ); /* see ExprSpecrealloc() for (char *) cast */ +} + +#define ExprSpecYYTABLES_NAME "ExprSpectables" + +#line 122 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" + + + +/* Gets index of current token (corresponding to ExprSpectext). + Used for error reporting. + */ +int ExprSpecpos() +{ + return ExprSpec_c_buf_p - ExprSpecYY_CURRENT_BUFFER->ExprSpec_ch_buf - ExprSpecleng; +} + diff --git a/windows7/ui/generated/ExprSpecParserLexIn.cpp b/windows7/ui/generated/ExprSpecParserLexIn.cpp new file mode 100644 index 00000000..1ffd22eb --- /dev/null +++ b/windows7/ui/generated/ExprSpecParserLexIn.cpp @@ -0,0 +1,2015 @@ +#line 2 "ExprSpecParserLexIn.cpp" + +#line 4 "ExprSpecParserLexIn.cpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 37 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart(yyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t yyleng; + +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + yy_size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define yywrap() 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 34 +#define YY_END_OF_BUFFER 35 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[115] = + { 0, + 0, 0, 35, 33, 31, 31, 33, 33, 32, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 23, 33, + 33, 33, 28, 28, 18, 28, 33, 33, 28, 28, + 28, 28, 28, 28, 33, 7, 0, 24, 0, 32, + 0, 26, 15, 5, 0, 25, 0, 13, 11, 12, + 10, 23, 14, 23, 23, 0, 8, 6, 9, 28, + 28, 17, 29, 30, 16, 28, 28, 28, 2, 28, + 28, 4, 24, 26, 0, 25, 0, 23, 0, 0, + 23, 28, 22, 28, 28, 28, 28, 0, 0, 23, + 0, 0, 23, 28, 3, 28, 28, 28, 27, 0, + + 23, 28, 28, 28, 28, 27, 28, 28, 19, 20, + 1, 28, 21, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 7, 8, 9, 10, 1, + 1, 11, 12, 1, 13, 14, 15, 16, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, + 21, 22, 1, 1, 23, 24, 23, 23, 25, 23, + 26, 23, 27, 23, 23, 23, 23, 28, 23, 29, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 1, 30, 1, 31, 23, 1, 32, 33, 23, 23, + + 34, 35, 36, 37, 38, 23, 23, 39, 40, 41, + 42, 23, 23, 43, 44, 45, 46, 23, 23, 47, + 23, 23, 1, 48, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[49] = + { 0, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 3, 3, 4, 1, 1, + 1, 1, 5, 5, 5, 5, 5, 5, 5, 1, + 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 1 + } ; + +static yyconst flex_int16_t yy_base[123] = + { 0, + 0, 0, 193, 194, 194, 194, 171, 44, 161, 0, + 169, 180, 40, 167, 166, 30, 37, 165, 41, 164, + 163, 162, 0, 157, 0, 154, 15, 159, 137, 139, + 145, 141, 137, 134, 125, 194, 54, 194, 56, 142, + 130, 152, 194, 194, 52, 194, 53, 194, 194, 194, + 194, 51, 194, 55, 74, 80, 194, 194, 194, 0, + 143, 0, 194, 194, 194, 121, 123, 120, 0, 124, + 122, 194, 64, 145, 144, 68, 88, 86, 97, 48, + 90, 134, 0, 126, 115, 124, 115, 0, 99, 101, + 109, 107, 111, 127, 0, 105, 112, 94, 0, 113, + + 115, 118, 81, 69, 58, 0, 68, 49, 0, 0, + 194, 38, 0, 194, 132, 137, 72, 142, 145, 148, + 68, 151 + } ; + +static yyconst flex_int16_t yy_def[123] = + { 0, + 114, 1, 114, 114, 114, 114, 114, 115, 116, 117, + 114, 114, 118, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 119, 119, 119, 119, 114, 114, 119, 119, + 119, 119, 119, 119, 114, 114, 115, 114, 115, 116, + 116, 120, 114, 114, 118, 114, 118, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 119, + 119, 119, 114, 114, 114, 119, 119, 119, 119, 119, + 119, 114, 115, 120, 114, 118, 114, 114, 114, 114, + 114, 119, 119, 119, 119, 119, 119, 121, 114, 114, + 114, 114, 114, 119, 119, 119, 119, 119, 122, 114, + + 114, 119, 119, 119, 119, 122, 119, 119, 119, 119, + 114, 119, 119, 0, 114, 114, 114, 114, 114, 114, + 114, 114 + } ; + +static yyconst flex_int16_t yy_nxt[243] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 19, 4, 4, 20, + 21, 22, 23, 24, 25, 23, 23, 23, 26, 27, + 28, 23, 29, 30, 23, 31, 23, 32, 33, 23, + 23, 23, 23, 34, 23, 23, 23, 35, 38, 46, + 50, 51, 52, 52, 54, 63, 55, 55, 38, 64, + 73, 46, 76, 81, 81, 56, 52, 52, 38, 47, + 78, 78, 99, 39, 56, 77, 42, 46, 113, 79, + 112, 47, 47, 39, 77, 39, 111, 54, 79, 55, + 55, 80, 80, 39, 110, 81, 81, 47, 56, 89, + + 89, 78, 78, 90, 90, 81, 81, 56, 92, 92, + 91, 109, 93, 93, 90, 90, 90, 90, 108, 91, + 100, 100, 93, 93, 101, 101, 93, 93, 101, 101, + 101, 101, 37, 107, 37, 37, 37, 40, 105, 40, + 40, 40, 45, 104, 45, 45, 45, 60, 103, 60, + 74, 74, 74, 106, 102, 106, 98, 97, 96, 95, + 94, 88, 75, 87, 86, 85, 84, 83, 82, 75, + 114, 41, 72, 71, 70, 69, 68, 67, 66, 65, + 62, 61, 59, 58, 57, 53, 49, 48, 44, 43, + 41, 36, 114, 3, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114 + } ; + +static yyconst flex_int16_t yy_chk[243] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 8, 13, + 16, 16, 17, 17, 19, 27, 19, 19, 37, 27, + 39, 45, 47, 80, 80, 19, 52, 52, 73, 13, + 54, 54, 121, 8, 19, 52, 117, 76, 112, 54, + 108, 45, 47, 37, 52, 39, 107, 55, 54, 55, + 55, 56, 56, 73, 105, 56, 56, 76, 55, 77, + + 77, 78, 78, 77, 77, 81, 81, 55, 79, 79, + 78, 104, 79, 79, 89, 89, 90, 90, 103, 78, + 91, 91, 92, 92, 91, 91, 93, 93, 100, 100, + 101, 101, 115, 102, 115, 115, 115, 116, 98, 116, + 116, 116, 118, 97, 118, 118, 118, 119, 96, 119, + 120, 120, 120, 122, 94, 122, 87, 86, 85, 84, + 82, 75, 74, 71, 70, 68, 67, 66, 61, 42, + 41, 40, 35, 34, 33, 32, 31, 30, 29, 28, + 26, 24, 22, 21, 20, 18, 15, 14, 12, 11, + 9, 7, 3, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *yytext; +#line 1 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +/* +* Copyright Disney Enterprises, Inc. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License +* and the following modification to it: Section 6 Trademarks. +* deleted and replaced with: +* +* 6. Trademarks. This License does not grant permission to use the +* trade names, trademarks, service marks, or product names of the +* Licensor and its affiliates, except as required for reproducing +* the content of the NOTICE file. +* +* You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +/* Don't generate yywrap since everything is in one string */ +/* Don't generate unput since it's unused and gcc complains... */ +/* Don't worry about interactive and using isatty(). Fixes Windows compile. */ +#line 26 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +#ifndef MAKEDEPEND +# include +# include +# include +#define _USE_MATH_DEFINES +# include +#endif + +#include "ExprSpecType.h" + +#ifdef SEEXPR_WIN32 +# define YY_NO_UNISTD_H +# define YY_SKIP_YYWRAP +#endif + +#ifndef MAKEDEPEND +# include "ExprSpecParser.tab.h" +#endif + +// TODO: make this thread safe +static int columnNumber=0; // really buffer position +static int lineNumber=0; // not used + +static std::vector >* comments=0; + +extern char* specRegisterToken(char* tok); +void specResetCounters(std::vector >& commentsIn){ + columnNumber=lineNumber=0; + comments=&commentsIn; +} + +int yypos(); // forward declare + + +#define YY_USER_ACTION { \ + yylloc.first_line=lineNumber;yylloc.first_column=columnNumber; \ + columnNumber+=yyleng;\ + yylloc.last_column=columnNumber;yylloc.last_line=lineNumber;} + +#line 607 "ExprSpecParserLexIn.cpp" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +yy_size_t yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 72 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" + +#line 789 "ExprSpecParserLexIn.cpp" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 115 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_current_state != 114 ); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 73 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" + + YY_BREAK +case 2: +YY_RULE_SETUP +#line 75 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return IF; } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 76 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ELSE; } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 78 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return OR; } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 79 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return AND; } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 80 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return EQ; } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 81 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return NE; } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 82 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return LE; } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 83 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return GE; } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 84 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ARROW; } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 85 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return AddEq; } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 86 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return SubEq; } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 87 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return MultEq; } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 88 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return DivEq; } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 89 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ModEq; } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 90 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return ExpEq; } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 92 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.d = M_PI; return NUMBER; } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 93 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.d = M_E; return NUMBER; } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 94 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.d = 0; return NUMBER; } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 95 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.d = 1; return NUMBER; } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 96 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.d = 2; return NUMBER; } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 97 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.d = 3; return NUMBER; } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 99 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.d = atof(yytext); return NUMBER; } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 100 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ /* match quoted string, allow embedded quote, \" */ + yylval.s = specRegisterToken(&yytext[1]); + yylval.s[strlen(yylval.s)-1] = '\0'; + return STR; } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 104 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ /* match quoted string, allow embedded quote, \' */ + yylval.s = specRegisterToken(&yytext[1]); + yylval.s[strlen(yylval.s)-1] = '\0'; + return STR; } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 108 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.s = specRegisterToken(&yytext[1]); return VAR; } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 109 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.s = specRegisterToken(&yytext[1]); return VAR; } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 110 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ yylval.s = specRegisterToken(yytext); return NAME; } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 112 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +/* ignore quoted newline */; + YY_BREAK +case 30: +YY_RULE_SETUP +#line 113 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +/* ignore quoted tab */; + YY_BREAK +case 31: +/* rule 31 can match eol */ +YY_RULE_SETUP +#line 114 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +/* ignore whitespace */; + YY_BREAK +case 32: +YY_RULE_SETUP +#line 115 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ /* match comment */ + int startPos=yypos(),endPos=yypos()+strlen(&yytext[1])+1; + comments->push_back(std::pair(startPos,endPos));} + YY_BREAK +case 33: +YY_RULE_SETUP +#line 120 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +{ return yytext[0]; } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 122 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" +ECHO; + YY_BREAK +#line 1047 "ExprSpecParserLexIn.cpp" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + yy_size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + yy_size_t new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart(yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 115 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 115 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 114); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart(yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +yy_size_t yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void yyset_lineno (int line_number ) +{ + + yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str ) +{ + yyin = in_str ; +} + +void yyset_out (FILE * out_str ) +{ + yyout = out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int bdebug ) +{ + yy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 122 "/disney/users/jberlin/projects/seexpr2/src/ui/ExprSpecParserLex.l" + + + +/* Gets index of current token (corresponding to yytext). + Used for error reporting. + */ +int yypos() +{ + return yy_c_buf_p - YY_CURRENT_BUFFER->yy_ch_buf - yyleng; +} +