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