diff options
Diffstat (limited to 'petascope/src/petascope/wcps/grammar/wcps.g')
-rw-r--r-- | petascope/src/petascope/wcps/grammar/wcps.g | 500 |
1 files changed, 500 insertions, 0 deletions
diff --git a/petascope/src/petascope/wcps/grammar/wcps.g b/petascope/src/petascope/wcps/grammar/wcps.g new file mode 100644 index 0000000..f00d1b5 --- /dev/null +++ b/petascope/src/petascope/wcps/grammar/wcps.g @@ -0,0 +1,500 @@ +/* +Author: Sorin Stancu-Mara, Andrei Aiordachioaie +History: +07 02 2007 smsorin Updated to WCPS 1.0.0 +27 01 2009 smsorin Moved to ANTLR +11 02 2009 andreia Updated to new grammar (spec 08-068r2) +13 02 2009 andreia Fixed small bugs in grammar. Now it can fully compile. +21 04 2009 andreia Removed comments. +04 05 2009 andreia Fixed bugs in integer declaration. +19 05 2009 andreia Fixed some other weird bugs. Grammar passes all tests now. +28 05 2009 andreia Updated class actions names. +02 06 2009 andreia Removed brackets around "and" binary operator in CoverageExpr +03 06 2009 andreia Complex expressions introduced in the "using" clause of general condense operations +05 08 2009 andreia Fixed definition of integer and floating-point numbers. +31 03 2010 andreia Added "sqrt" operation for scalar expressions +*/ +grammar wcps; +options{ +backtrack=true; +memoize=true; +k=2; +language=Java; +output=AST; +} +@header +{package petascope.wcps.grammar;} +@lexer::header +{package petascope.wcps.grammar;} + +/* Parser Rules */ + +wcpsRequest returns[WCPSRequest value] + : e1=forClause { $value= new WCPSRequest($e1.value); } + (e2=whereClause { $value.setWhere($e2.value); } )? + e3=returnClause { $value.setReturn($e3.value); } + ; +forClause returns[ForClauseElements value] + : FOR v=coverageVariable IN LPAREN list=coverageList RPAREN + { $value = new ForClauseElements($v.value, $list.value); } + (COMMA v=coverageVariable IN LPAREN list=coverageList RPAREN + { $value = new ForClauseElements($v.value, $list.value, $value); })* + ; +whereClause returns[WhereClause value] + : WHERE e1=booleanScalarExpr { $value = new WhereClause($e1.value); } + ; +returnClause returns[ReturnClause value] + : RETURN e1=processingExpr { $value = new ReturnClause($e1.value); } + ; +coverageList returns[CoverageList value] + : cname=coverageName { $value = new CoverageList($cname.value); } + (COMMA next=coverageName { $value = new CoverageList($next.value, $value); })* + ; +processingExpr returns[ProcessingExpr value] + : e1=encodedCoverageExpr { $value = new ProcessingExpr($e1.value); } + | e2=storeExpr { $value = new ProcessingExpr($e2.value); } + | e3=scalarExpr { $value = new ProcessingExpr($e3.value); } + ; +encodedCoverageExpr returns[EncodedCoverageExpr value] + : ENCODE LPAREN cov=coverageExpr COMMA format=stringConstant { $value = new EncodedCoverageExpr($cov.value, $format.text); } + (COMMA params=stringConstant { $value.setParams($params.text); })? RPAREN + ; +storeExpr returns[StoreExpr value] + : STORE LPAREN e1=encodedCoverageExpr RPAREN { $value = new StoreExpr($e1.value); } + ; +coverageExpr returns[CoverageExpr value] + : e1=coverageLogicTerm { $value = $e1.value; } + (op=(OR|XOR) e2=coverageLogicTerm { $value = new CoverageExpr($op.text, $value, $e2.value); } )* + ; +coverageLogicTerm returns[CoverageExpr value] + : e1=coverageLogicFactor { $value = $e1.value; } + (op=AND e2=coverageLogicFactor { $value = new CoverageExpr($op.text, $value, $e2.value); } )* + ; +coverageLogicFactor returns[CoverageExpr value] + : e1=coverageArithmeticExpr {$value = $e1.value;} + (op=(EQUALS|NOTEQUALS|LT|GT|LTE|GTE) e2=coverageArithmeticExpr { $value = new CoverageExpr($op.text, $e1.value, $e2.value); } )? + ; +coverageArithmeticExpr returns[CoverageExpr value] + : e1=coverageArithmeticTerm {$value = $e1.value; } + (op=(PLUS|MINUS) e2=coverageArithmeticTerm { $value = new CoverageExpr($op.text, $value, $e2.value); } )* + ; +coverageArithmeticTerm returns[CoverageExpr value] + : e1=coverageArithmeticFactor {$value = $e1.value; } + (op=(MULT|DIVIDE) e2=coverageArithmeticFactor { $value = new CoverageExpr($op.text, $value, $e2.value); } )* + ; +coverageArithmeticFactor returns[CoverageExpr value] + : e1=coverageValue { $value = $e1.value; } + (op=OVERLAY e2=coverageValue { $value = new CoverageExpr($op.text, $value, $e2.value); } )* + ; +coverageValue returns[CoverageExpr value] + : e5=subsetExpr { $value = new CoverageExpr($e5.value); } + | e2=unaryInducedExpr { $value = $e2.value; } + | e4=scaleExpr { $value = new CoverageExpr($e4.value); } + | e3=crsTransformExpr { $value = new CoverageExpr($e3.value); } + | e1=coverageAtom { $value = $e1.value; } + ; +coverageAtom returns[CoverageExpr value] + : e2=scalarExpr { $value = new CoverageExpr($e2.value); } + | e1=coverageVariable { $value = new CoverageExpr($e1.value); } + | LPAREN e7=coverageExpr RPAREN { $value = new CoverageExpr($e7.value); } + | e3=coverageConstantExpr { $value = new CoverageExpr($e3.value); } + | e4=coverageConstructorExpr { $value = new CoverageExpr($e4.value); } + | e5=setMetaDataExpr { $value = new CoverageExpr($e5.value); } + | e6=rangeConstructorExpr { $value = new CoverageExpr($e6.value); } + ; +scalarExpr returns[ScalarExpr value] + : e1=metaDataExpr { $value = new ScalarExpr($e1.value); } + | e2=condenseExpr { $value = new ScalarExpr($e2.value); } + | e3=booleanScalarExpr { $value = new ScalarExpr($e3.value); } + | e4=numericScalarExpr { $value = new ScalarExpr($e4.value); } + | e5=stringScalarExpr { $value = new ScalarExpr($e5.value); } + | LPAREN e6=scalarExpr RPAREN { $value = $e6.value; } + ; +metaDataExpr returns[MetaDataExpr value] + : op=IDENTIFIER LPAREN e1=coverageExpr RPAREN { $value = new MetaDataExpr($op.text, $e1.value); } + | op=IMAGECRS LPAREN e1=coverageExpr RPAREN { $value = new MetaDataExpr($op.text, $e1.value); } + | op=IMAGECRSDOMAIN LPAREN e1=coverageExpr (COMMA e2=axisName)? RPAREN { $value = new MetaDataExpr($op.text, $e1.value, $e2.value); } + | op=CRSSET LPAREN e1=coverageExpr RPAREN { $value = new MetaDataExpr($op.text, $e1.value); } + | de=domainExpr { $value = new MetaDataExpr($de.value); } + | op=NULLSET LPAREN e1=coverageExpr RPAREN { $value = new MetaDataExpr($op.text,$e1.value); } + | op=INTERPOLATIONDEFAULT LPAREN e1=coverageExpr COMMA f1=fieldName RPAREN { $value = new MetaDataExpr($op.text, $e1.value, $f1.value); } + | op=INTERPOLATIONSET LPAREN e1=coverageExpr COMMA f1=fieldName RPAREN { $value = new MetaDataExpr($op.text, $e1.value, $f1.value); } + ; +domainExpr returns[DomainExpr value] + : DOMAIN LPAREN var=coverageVariable COMMA axis=axisName COMMA crs=crsName RPAREN { $value = new DomainExpr($var.value, $axis.value, $crs.value); } + ; +condenseExpr returns[CondenseExpr value] + : e1=reduceExpr { $value = new CondenseExpr($e1.value); } + | e2=generalCondenseExpr { $value = new CondenseExpr($e2.value); } + ; +reduceExpr returns[ReduceExpr value] + : op=(ALL|SOME|COUNT|ADD|AVG|MIN|MAX) LPAREN e1=coverageExpr RPAREN { $value = new ReduceExpr($op.text, $e1.value); } + ; +generalCondenseExpr returns[GeneralCondenseExpr value] + : CONDENSE op=condenseOpType OVER ail=axisIteratorList { $value = new GeneralCondenseExpr($op.value, $ail.value); } + (WHERE cond=booleanScalarExpr { $value.setWhere($cond.value); })? + USING ce=coverageExpr { $value.setUsing($ce.value); } + ; +axisIteratorList returns[AxisIteratorList value] + : vn=variableName an=axisName LPAREN ie=intervalExpr RPAREN + { $value = new AxisIteratorList(new AxisIterator($vn.value, $an.value, $ie.value)); } + (COMMA vn2=variableName an2=axisName LPAREN ie2=intervalExpr RPAREN + { $value = new AxisIteratorList(new AxisIterator($vn2.value, $an2.value, $ie2.value), $value); })* + ; +intervalExpr returns[IntervalExpr value] + : lo=indexExpr COLON hi=indexExpr + { $value = new IntervalExpr($lo.value, $hi.value); } + | IMAGECRSDOMAIN LPAREN e1=coverageName COMMA e2=axisName RPAREN + { $value = new IntervalExpr($e1.value, $e2.value); } + ; +coverageConstantExpr returns[CoverageConstantExpr value] + : COVERAGE aname=coverageName OVER iter=axisIteratorList VALUE LIST LT values=constantList GT + { $value = new CoverageConstantExpr($aname.value, $iter.value, $values.value); } + ; +constantList returns[ConstantList value] + : c=constant { $value = new ConstantList($c.value); } (SEMICOLON c=constant { $value.add($c.value); })* + ; +coverageConstructorExpr returns[CoverageConstructorExpr value] + : COVERAGE coverage=coverageName OVER ail=axisIteratorList VALUES se=scalarExpr + { $value = new CoverageConstructorExpr($coverage.value, $ail.value, $se.value); } + ; +setMetaDataExpr returns[SetMetaDataExpr value] + : op=SETIDENTIFIER LPAREN s=stringConstant COMMA e1=coverageExpr RPAREN + { $value = new SetMetaDataExpr($op.text, $e1.value, $s.value); } + | op=SETCRSSET LPAREN e1=coverageExpr COMMA crs=crsList RPAREN + { $value = new SetMetaDataExpr($op.text, $e1.value, $crs.value); } + | op=SETNULLSET LPAREN e1=coverageExpr COMMA rel=rangeExprList RPAREN + { $value = new SetMetaDataExpr($op.text, $e1.value, $rel.value); } + | op=SETINTERPOLATIONDEFAULT LPAREN e1=coverageExpr COMMA fn=fieldName COMMA im=interpolationMethod RPAREN + { $value = new SetMetaDataExpr($op.text, $e1.value, $im.value, $fn.value); } + | op=SETINTERPOLATIONSET LPAREN e1=coverageExpr COMMA fn=fieldName COMMA iml=interpolationMethodList RPAREN + { $value = new SetMetaDataExpr($op.text, $e1.value, $iml.value, $fn.value); } + ; +crsList returns[CrsList value] + : LBRACE {$value = new CrsList();} (crs=crsName { $value.add($crs.value); } (COMMA crs=crsName { $value.add($crs.value); })* )? RBRACE + ; +rangeExprList returns[RangeExprList value] + : LBRACE { $value = new RangeExprList(); } (re1=rangeExpr { $value.add($re1.value); } (COMMA re2=rangeExpr { $value.add($re2.value); })* )? RBRACE + ; +interpolationMethodList returns[InterpolationMethodList value] + : LBRACE {$value = new InterpolationMethodList();} (e=interpolationMethod { $value.add($e.value); } (COMMA e=interpolationMethod { $value.add($e.value); })*)? RBRACE + ; +rangeExpr returns[RangeExpr value] + : STRUCT LBRACE { $value=new RangeExpr(); } + (field=fieldName COLON expr=scalarExpr { $value.add($field.value, $expr.value); } + (COMMA field=fieldName COLON expr=scalarExpr { $value.add($field.value, $expr.value); })* + )? RBRACE + ; +rangeConstructorExpr returns[RangeConstructorExpr value] + : (STRUCT)? LBRACE field=fieldName COLON expr=coverageExpr { $value = new RangeConstructorExpr($field.value, $expr.value); } + (SEMICOLON field=fieldName COLON expr=coverageExpr { $value.add($field.value, $expr.value); })* RBRACE + ; +crsTransformExpr returns[CrsTransformExpr value] + : CRSTRANSFORM LPAREN e1=coverageExpr COMMA dcl=dimensionIntervalList COMMA fil=fieldInterpolationList RPAREN + { $value = new CrsTransformExpr($e1.value, $dcl.value, $fil.value); } + ; +fieldInterpolationList returns[FieldInterpolationList value] + : LBRACE elem=fieldInterpolationElement { $value = new FieldInterpolationList($elem.value); } + (COMMA elem=fieldInterpolationElement { $value.add($elem.value); }) * RBRACE + ; +fieldInterpolationElement returns[FieldInterpolationElement value] + : aname=fieldName method=interpolationMethod { $value = new FieldInterpolationElement($aname.value, $method.value); } + ; +unaryInducedExpr returns[CoverageExpr value] + : e6=fieldExpr { $value = new CoverageExpr($e6.value); } + | e1=unaryArithmeticExpr { $value = $e1.value; } + | e2=exponentialExpr { $value = new CoverageExpr($e2.value); } + | e3=trigonometricExpr { $value = new CoverageExpr($e3.value); } + | e4=booleanExpr { $value = new CoverageExpr($e4.value); } + | e5=castExpr { $value = new CoverageExpr($e5.value); } + | e7=rangeConstructorExpr { $value = new CoverageExpr($e7.value); } + ; +unaryArithmeticExpr returns[CoverageExpr value] + : op=(MINUS|PLUS) e1=coverageAtom { $value = new CoverageExpr($op.text, $e1.value); } + | op=(SQRT|ABS|RE|IM) LPAREN e2=coverageExpr RPAREN { $value = new CoverageExpr($op.text, $e2.value); } + ; +exponentialExpr returns[ExponentialExpr value] + : op=(EXP|LOG|LN) LPAREN e1=coverageExpr RPAREN { $value = new ExponentialExpr($op.text, $e1.value); } + ; +trigonometricExpr returns[TrigonometricExpr value] + : op=(SIN|COS|TAN|SINH|COSH|TANH|ARCSIN|ARCCOS|ARCTAN) LPAREN e1=coverageExpr RPAREN { $value = new TrigonometricExpr($op.text, $e1.value); } + ; +booleanExpr returns[BooleanExpr value] + : op=NOT e1=coverageExpr { $value = new BooleanExpr($op.text, $e1.value); } + | op=BIT LPAREN e1=coverageExpr COMMA e2=indexExpr RPAREN { $value = new BooleanExpr($op.text, $e1.value, $e2.value); } + ; +indexExpr returns[IndexExpr value] + : e1=indexTerm { $value = $e1.value; } + (op=(PLUS|MINUS) e2=indexTerm { $value = new IndexExpr($op.text, $value, $e2.value); })* + ; +indexTerm returns[IndexExpr value] + : e1=indexFactor { $value = $e1.value; } + ((op=(MULT|DIVIDE) e2=indexFactor { $value = new IndexExpr($op.text, $value, $e2.value); } ))* + ; +indexFactor returns[IndexExpr value] + : e=INTEGERCONSTANT { $value = new IndexExpr($e.text); } + | op=ROUND LPAREN e1=numericScalarExpr RPAREN { $value = new IndexExpr($op.text, $e1.value); } + | (LPAREN e2=indexExpr RPAREN { $value = $e2.value; } ) + ; +stringScalarExpr returns[StringScalarExpr value] +// The first rule should be "metaDataExpr", but currently only a variable "identifier" is allowed. + : op=IDENTIFIER LPAREN e1=coverageExpr RPAREN { $value = new StringScalarExpr($op.text, $e1.value); } + | e=STRING { $value = new StringScalarExpr($e.text); } + ; +scaleExpr returns[ScaleExpr value] + : SCALE LPAREN e1=coverageExpr COMMA dil=dimensionIntervalList { $value = new ScaleExpr($e1.value, $dil.value); } + (COMMA fil=fieldInterpolationList {$value.addInterpolationList($fil.value); } )? + RPAREN + + ; +subsetExpr returns[SubsetExpr value] + : e1=trimExpr { $value = new SubsetExpr($e1.value); } + | e2=sliceExpr { $value = new SubsetExpr($e2.value); } + | e3=extendExpr { $value = new SubsetExpr($e3.value); } + ; +trimExpr returns[TrimExpr value] + : e1=coverageAtom LBRACKET dil=dimensionIntervalList RBRACKET { $value = new TrimExpr($e1.value, $dil.value); } + | TRIM LPAREN e2=coverageExpr COMMA LBRACE dil=dimensionIntervalList RBRACE RPAREN { $value = new TrimExpr($e2.value, $dil.value); } + ; +sliceExpr returns[SliceExpr value] + : e1=coverageAtom LBRACKET dpl=dimensionPointList RBRACKET { $value = new SliceExpr($e1.value, $dpl.value); } + | SLICE LPAREN e2=coverageExpr COMMA LBRACE dpl=dimensionPointList RBRACE RPAREN { $value = new SliceExpr($e2.value, $dpl.value); } + ; +extendExpr returns[ExtendExpr value] + : EXTEND LPAREN e1=coverageExpr COMMA dil=dimensionIntervalList RPAREN { $value = new ExtendExpr($e1.value, $dil.value); } + ; +castExpr returns[CastExpr value] + : LPAREN e1=rangeType RPAREN e2=coverageExpr { $value = new CastExpr($e2.value, $e1.value); } + ; +rangeType returns[String value] + : type=(BOOLEAN|CHAR|SHORT|LONG|FLOAT|DOUBLE|COMPLEX|COMPLEX2) { $value = new String($type.text); } + | UNSIGNED type=(CHAR|SHORT|LONG) { $value = new String("unsigned " + $type.text); } + ; +fieldExpr returns[SelectExpr value] + : e1=coverageAtom DOT e2=fieldName { $value = new SelectExpr($e1.value, $e2.value); } + ; +// NOTE: The following boolean rules are equivalent to the grammar rules in document 08-068r2 +// They have been rewritten in order to prioritize the boolean operators +booleanScalarExpr returns[BooleanScalarExpr value] + : e1=booleanScalarTerm { $value = $e1.value; } + (op=(OR|XOR) e2=booleanScalarTerm { $value = new BooleanScalarExpr($op.text, $value, $e2.value);})* + ; +booleanScalarTerm returns[BooleanScalarExpr value] + : e1=booleanScalarNegation { $value = $e1.value; } + (op=AND e2=booleanScalarNegation { $value = new BooleanScalarExpr($op.text, $value, $e2.value); } )* + ; +booleanScalarNegation returns[BooleanScalarExpr value] + : e1=booleanScalarAtom { $value = $e1.value; } + | op=NOT e1=booleanScalarAtom { $value = new BooleanScalarExpr($op.text, $e1.value); } + ; +booleanScalarAtom returns[BooleanScalarExpr value] + : LPAREN e1=booleanScalarExpr RPAREN { $value = $e1.value; } + | s1=stringScalarExpr cop=compOp s2=stringScalarExpr { $value = new BooleanScalarExpr($cop.value, $s1.value, $s2.value); } + | n1=numericScalarExpr cop=compOp n2=numericScalarExpr { $value = new BooleanScalarExpr($cop.value, $n1.value, $n2.value); } + | e=BOOLEANCONSTANT { $value = new BooleanScalarExpr($e.text); } + ; +numericScalarExpr returns[NumericScalarExpr value] + : e1=numericScalarTerm {$value = $e1.value; } + (op=(PLUS|MINUS) e2=numericScalarTerm { $value = new NumericScalarExpr($op.text, $value, $e2.value); })* + ; +numericScalarTerm returns[NumericScalarExpr value] + : e1=numericScalarFactor { $value = $e1.value; } + (op=(MULT|DIVIDE) e2=numericScalarFactor { $value = new NumericScalarExpr($op.text, $value, $e2.value); })* + ; +numericScalarFactor returns[NumericScalarExpr value] + : LPAREN e1=numericScalarExpr RPAREN { $value = $e1.value; } + | op=MINUS e10=numericScalarFactor { $value = new NumericScalarExpr($op.text, $e10.value); } + | op=ABS LPAREN e12=numericScalarExpr RPAREN { $value = new NumericScalarExpr($op.text, $e12.value); } + | op=SQRT LPAREN e11=numericScalarExpr RPAREN { $value = new NumericScalarExpr($op.text, $e11.value); } + | op=ROUND LPAREN e1=numericScalarExpr RPAREN { $value = new NumericScalarExpr($op.text, $e1.value); } + | e=INTEGERCONSTANT { $value = new NumericScalarExpr($e.text); } + | e=FLOATCONSTANT { $value = new NumericScalarExpr($e.text); } + | e2=complexConstant { $value = new NumericScalarExpr($e2.value); } + | e3=condenseExpr { $value = new NumericScalarExpr($e3.value); } + | e4=variableName { $value = new NumericScalarExpr("var", $e4.value); } + ; +compOp returns[String value] + : EQUALS { $value = new String("equals"); } + | NOTEQUALS { $value = new String("notEqual"); } + | LT { $value = new String("lessThan"); } + | GT { $value = new String("greaterThan"); } + | LTE { $value = new String("lessOrEqual"); } + | GTE { $value = new String("greaterOrEqual"); } + ; +dimensionIntervalList returns[DimensionIntervalList value] + : elem=dimensionIntervalElement { $value = new DimensionIntervalList($elem.value); } + (COMMA elem=dimensionIntervalElement { $value.add($elem.value); })* + ; +dimensionIntervalElement returns[DimensionIntervalElement value] + : aname=axisName { $value = new DimensionIntervalElement($aname.value); } (COLON crs=crsName {$value.setCrs($crs.value); })? + LPAREN die=dimensionIntervalExpr RPAREN { $value.setIntervalExpr($die.value); } + ; +dimensionIntervalExpr returns[DimensionIntervalExpr value] + : e1=scalarExpr COLON e2=scalarExpr { $value = new DimensionIntervalExpr($e1.value, $e2.value); } + | DOMAIN LPAREN e3=coverageName COLON e4=axisName COLON e5=crsName RPAREN { $value = new DimensionIntervalExpr($e3.value, $e4.value, $e5.value); } + ; +dimensionPointList returns[DimensionPointList value] + : elem1=dimensionPointElement { $value = new DimensionPointList($elem1.value); } + (COMMA elem2=dimensionPointElement { $value.add($elem2.value); })* + ; +dimensionPointElement returns[DimensionPointElement value] + : aname=axisName LPAREN dpe=dimensionPoint RPAREN { $value = new DimensionPointElement($aname.value, $dpe.value); } + | aname=axisName COLON crs=crsName LPAREN dpe=dimensionPoint RPAREN { $value = new DimensionPointElement($aname.value, $crs.value, $dpe.value); } + ; +dimensionPoint returns[ScalarExpr value] + : e1=scalarExpr { $value = $e1.value; } + ; +interpolationMethod returns[InterpolationMethod value] + : LPAREN type=interpolationType COLON res=nullResistence RPAREN { $value = new InterpolationMethod($type.value, $res.value); } + ; +interpolationType returns[String value] + : type=(NEAREST|LINEAR|QUADRATIC|CUBIC) { $value = new String($type.text); } + ; +nullResistence returns[String value] + : resistance=(FULL|NONE|HALF|OTHER) { $value = new String($resistance.text); } + ; +condenseOpType returns[CondenseOperation value] + : op=(PLUS|MULT|MAX|MIN|AND|OR) { $value = new CondenseOperation($op.text); } + ; +fieldName returns[String value] + : name { $value = new String($name.value);} + ; +constant returns[String value] + : e=(STRING|BOOLEANCONSTANT|INTEGERCONSTANT|FLOATCONSTANT) { $value = $e.text; } + | e1=complexConstant { $value = $e1.value; } + ; +complexConstant returns[String value] + : LPAREN re1=FLOATCONSTANT COMMA im1=FLOATCONSTANT RPAREN { $value = new String($re1.text +"+i"+$im1.text); } + ; +stringConstant returns[String value] + : s=STRING { $value = $s.text; } + ; +name returns[String value] + : var=(NAME | STRING | INTEGERCONSTANT) { $value = $var.text; } + ; +crsName returns[String value] + : s=stringConstant { $value = $s.value; } + ; +axisName returns[String value] + : type1=name { $value = new String($type1.value); } + ; +variableName returns[String value] + : var=VARIABLE_DOLLAR { $value = new String($var.text); } + ; +coverageVariable returns[String value] + : var=NAME { $value = $var.text; } + ; +coverageName returns[String value] + : name { $value = $name.value; } + ; + + +/* Lexer rules */ +PLUS: '+'; +MINUS: '-'; +DIVIDE: '/'; +MULT: '*'; +EQUALS: '='; +NOTEQUALS: '!='; +LT: '<'; +GT: '>'; +LTE: '<='; +GTE: '>='; +DOT: '.'; +LPAREN: '('; +RPAREN: ')'; +LBRACKET: '['; +RBRACKET: ']'; +LBRACE: '{'; +RBRACE: '}'; +COMMA: ','; +COLON: ':'; +SEMICOLON: ';'; +FOR: ('f'|'F')('o'|'O')('r'|'R'); +IN: ('i'|'I')('n'|'N'); +WHERE: ('w'|'W')('h'|'H')('e'|'E')('r'|'R')('e'|'E'); +RETURN: ('r'|'R')('e'|'E')('t'|'T')('u'|'U')('r'|'R')('n'|'N'); +STORE: ('s'|'S')('t'|'T')('o'|'O')('r'|'R')('e'|'E'); +ENCODE: ('e'|'E')('n'|'N')('c'|'C')('o'|'O')('d'|'D')('e'|'E'); +SQRT: ('s'|'S')('q'|'Q')('r'|'R')('t'|'T'); +SIN: ('s'|'S')('i'|'I')('n'|'N'); +COS: ('c'|'C')('o'|'O')('s'|'S'); +TAN: ('t'|'T')('a'|'A')('n'|'N'); +SINH: ('s'|'S')('i'|'I')('n'|'N')('h'|'H'); +COSH: ('c'|'C')('o'|'O')('s'|'S')('h'|'H'); +TANH: ('t'|'T')('a'|'A')('n'|'N')('h'|'H'); +ARCSIN: ('a'|'A')('r'|'R')('c'|'C')('s'|'S')('i'|'I')('n'|'N'); +ARCCOS: ('a'|'A')('r'|'R')('c'|'C')('c'|'C')('o'|'O')('s'|'S'); +ARCTAN: ('a'|'A')('r'|'R')('c'|'C')('t'|'T')('a'|'A')('n'|'N'); +EXP: ('e'|'E')('x'|'X')('p'|'P'); +LN: ('l'|'L')('n'|'N'); +LOG: ('l'|'L')('o'|'O')('g'|'G'); +ROUND: ('r'|'R')('o'|'O')('u'|'U')('n'|'N')('d'|'D'); +ABS: ('a'|'A')('b'|'B')('s'|'S'); +OVERLAY: ('o'|'O')('v'|'V')('e'|'E')('r'|'R')('l'|'L')('a'|'A')('y'|'Y'); +STRUCT: ('s'|'S')('t'|'T')('r'|'R')('u'|'U')('c'|'C')('t'|'T'); +RE: ('r'|'R')('e'|'E'); +IM: ('i'|'I')('m'|'M'); +AND: ('a'|'A')('n'|'N')('d'|'D'); +OR: ('o'|'O')('r'|'R'); +XOR: ('x'|'X')('o'|'O')('r'|'R'); +NOT: ('n'|'N')('o'|'O')('t'|'T'); +IDENTIFIER: ('i'|'I')('d'|'D')('e'|'E')('n'|'N')('t'|'T')('i'|'I')('f'|'F')('i'|'I')('e'|'E')('r'|'R'); +IMAGECRS: ('i'|'I')('m'|'M')('a'|'A')('g'|'G')('e'|'E')('c'|'C')('r'|'R')('s'|'S'); +IMAGECRSDOMAIN: ('i'|'I')('m'|'M')('a'|'A')('g'|'G')('e'|'E')('c'|'C')('r'|'R')('s'|'S')('d'|'D')('o'|'O')('m'|'M')('a'|'A')('i'|'I')('n'|'N'); +CRSSET: ('c'|'C')('r'|'R')('s'|'S')('s'|'S')('e'|'E')('t'|'T'); +DOMAIN: ('d'|'D')('o'|'O')('m'|'M')('a'|'A')('i'|'I')('n'|'N'); +NULLSET: ('n'|'N')('u'|'U')('l'|'L')('l'|'L')('s'|'S')('e'|'E')('t'|'T'); +NULLDEFAULT: ('n'|'N')('u'|'U')('l'|'L')('l'|'L')('d'|'D')('e'|'E')('f'|'F')('a'|'A')('u'|'U')('l'|'L')('t'|'T'); +INTERPOLATIONDEFAULT: ('i'|'I')('n'|'N')('t'|'T')('e'|'E')('r'|'R')('p'|'P')('o'|'O')('l'|'L')('a'|'A')('t'|'T')('i'|'I')('o'|'O')('n'|'N')('d'|'D')('e'|'E')('f'|'F')('a'|'A')('u'|'U')('l'|'L')('t'|'T'); +INTERPOLATIONSET: ('i'|'I')('n'|'N')('t'|'T')('e'|'E')('r'|'R')('p'|'P')('o'|'O')('l'|'L')('a'|'A')('t'|'T')('i'|'I')('o'|'O')('n'|'N')('s'|'S')('e'|'E')('t'|'T'); +SETIDENTIFIER: ('s'|'S')('e'|'E')('t'|'T')('i'|'I')('d'|'D')('e'|'E')('n'|'N')('t'|'T')('i'|'I')('f'|'F')('i'|'I')('e'|'E')('r'|'R'); +SETNULLSET: ('s'|'S')('e'|'E')('t'|'T')('n'|'N')('u'|'U')('l'|'L')('l'|'L')('s'|'S')('e'|'E')('t'|'T'); +SETINTERPOLATIONDEFAULT: ('s'|'S')('e'|'E')('t'|'T')('i'|'I')('n'|'N')('t'|'T')('e'|'E')('r'|'R')('p'|'P')('o'|'O')('l'|'L')('a'|'A')('t'|'T')('i'|'I')('o'|'O')('n'|'N')('d'|'D')('e'|'E')('f'|'F')('a'|'A')('u'|'U')('l'|'L')('t'|'T'); +SETINTERPOLATIONSET:('s'|'S')('e'|'E')('t'|'T')('i'|'I')('n'|'N')('t'|'T')('e'|'E')('r'|'R')('p'|'P')('o'|'O')('l'|'L')('a'|'A')('t'|'T')('i'|'I')('o'|'O')('n'|'N')('s'|'S')('e'|'E')('t'|'T'); +SETCRSSET: ('s'|'S')('e'|'E')('t'|'T')('c'|'C')('r'|'R')('s'|'S')('s'|'S')('e'|'E')('t'|'T'); +TRIM: ('t'|'T')('r'|'R')('i'|'I')('m'|'M'); +SLICE: ('s'|'S')('l'|'L')('i'|'I')('c'|'C')('e'|'E'); +EXTEND: ('e'|'E')('x'|'X')('t'|'T')('e'|'E')('n'|'N')('d'|'D'); +SCALE: ('s'|'S')('c'|'C')('a'|'A')('l'|'L')('e'|'E'); +CRSTRANSFORM: ('c'|'C')('r'|'R')('s'|'S')('t'|'T')('r'|'R')('a'|'A')('n'|'N')('s'|'S')('f'|'F')('o'|'O')('r'|'R')('m'|'M'); +COUNT: ('c'|'C')('o'|'O')('u'|'U')('n'|'N')('t'|'T'); +ADD: ('a'|'A')('d'|'D')('d'|'D'); +AVG: ('a'|'A')('v'|'V')('g'|'G'); +MAX: ('m'|'M')('a'|'A')('x'|'X'); +MIN: ('m'|'M')('i'|'I')('n'|'N'); +SOME: ('s'|'S')('o'|'O')('m'|'M')('e'|'E'); +ALL: ('a'|'A')('l'|'L')('l'|'L'); +COVERAGE: ('c'|'C')('o'|'O')('v'|'V')('e'|'E')('r'|'R')('a'|'A')('g'|'G')('e'|'E'); +OVER: ('o'|'O')('v'|'V')('e'|'E')('r'|'R'); +VALUE: ('v'|'V')('a'|'A')('l'|'L')('u'|'U')('e'|'E'); +VALUES: ('v'|'V')('a'|'A')('l'|'L')('u'|'U')('e'|'E')('s'|'S'); +LIST: ('l'|'L')('i'|'I')('s'|'S')('t'|'T'); +CONDENSE: ('c'|'C')('o'|'O')('n'|'N')('d'|'D')('e'|'E')('n'|'N')('s'|'S')('e'|'E'); +USING: ('u'|'U')('s'|'S')('i'|'I')('n'|'N')('g'|'G'); +NEAREST: ('n'|'N')('e'|'E')('a'|'A')('r'|'R')('e'|'E')('s'|'S')('t'|'T'); +LINEAR: ('l'|'L')('i'|'I')('n'|'N')('e'|'E')('a'|'A')('r'|'R'); +QUADRATIC: ('q'|'Q')('u'|'U')('a'|'A')('d'|'D')('r'|'R')('a'|'A')('t'|'T')('i'|'I')('c'|'C'); +CUBIC: ('c'|'C')('u'|'U')('b'|'B')('i'|'I')('c'|'C'); +FULL: ('f'|'F')('u'|'U')('l'|'L')('l'|'L'); +NONE: ('n'|'N')('o'|'O')('n'|'N')('e'|'E'); +HALF: ('h'|'H')('a'|'A')('l'|'L')('f'|'F'); +OTHER: ('o'|'O')('t'|'T')('h'|'H')('e'|'E')('r'|'R'); +PHI: ('p'|'P')('h'|'H')('i'|'I'); +BIT: ('b'|'B')('i'|'I')('t'|'T'); +UNSIGNED: ('u'|'U')('n'|'N')('s'|'S')('i'|'I')('g'|'G')('n'|'N')('e'|'E')('d'|'D'); +BOOLEAN: ('b'|'B')('o'|'O')('o'|'O')('l'|'L')('e'|'E')('a'|'A')('n'|'N'); +CHAR: ('c'|'C')('h'|'H')('a'|'A')('r'|'R'); +SHORT: ('s'|'S')('h'|'H')('o'|'O')('r'|'R')('t'|'T'); +LONG: ('l'|'L')('o'|'O')('n'|'N')('g'|'G'); +FLOAT: ('f'|'F')('l'|'L')('o'|'O')('a'|'A')('t'|'T'); +DOUBLE: ('d'|'D')('o'|'O')('u'|'U')('b'|'B')('l'|'L')('e'|'E'); +COMPLEX: ('c'|'C')('o'|'O')('m'|'M')('p'|'P')('l'|'L')('e'|'E')('x'|'X'); +COMPLEX2: ('c'|'C')('o'|'O')('m'|'M')('p'|'P')('l'|'L')('e'|'E')('x'|'X')'2'; +BOOLEANCONSTANT: (('t'|'T')('r'|'R')('u'|'U')('e'|'E'))|(('f'|'F')('a'|'A')('l'|'L')('s'|'S')('e'|'E')); +INTEGERCONSTANT: (PLUS|MINUS)? ('0'..'9')+; +FLOATCONSTANT: INTEGERCONSTANT ('.')('0'..'9'+)(('e'|'E')(('-'|'+')?)('0'..'9'+))?; +STRING: '"' ( options {greedy=false;} : . )* '"' {setText(getText().substring(1, getText().length()-1));}; +NAME: ('a'..'z'|'A'..'Z'|'_')(('a'..'z'|'A'..'Z'|'0'..'9'|'_')*); +VARIABLE_DOLLAR: '$'(('a'..'z'|'A'..'Z'|'0'..'9'|'_')*) {setText(getText().substring(1, getText().length())); } ; +WHITESPACE: (' ' | '\t' | '\r' | '\n' | '\u000C')+ { skip(); } ; |