Xtext grammar related query [message #1741934] |
Tue, 30 August 2016 12:38  |
Eclipse User |
|
|
|
Hi,
Can anyone please tell me how to use parser rule as part of expression?
Below grammar showing error at Primary Expression because I added Annotation inside Expression. But I need it because my language contains this type of coding.
@app()->test=123 ----------- this works fine
if @app()->test=123 -------------- causes error
{
///////
}
My grammar is:
Model: {Model} statements+=Statement*;
Statement: (Annotation)
Annotation: '@app()->' exp+=Expression ;
ArrayDecl : {ArrayDecl} ('[' ']') | ('[' size=exp+=Expression']');
Parenthesis : {Parenthesis} ('(' ')') | ('(' size=exp+=Expression')');
Expression:
LogicalOr
;
LogicalOr returns Expression:
BitwiseOr ({LogicalOr.left=current} '||' right=BitwiseOr)*
;
BitwiseOr returns Expression:
LogicalAnd ({BitwiseOr.left=current} '|' right=LogicalAnd)*
;
LogicalAnd returns Expression:
BitwiseAnd ({LogicalAnd.left=current} '&&' right=BitwiseAnd)*
;
BitwiseAnd returns Expression:
Equivalency ({BitwiseAnd.left=current} '&' right=Equivalency)*
;
Equivalency returns Expression:
Relational ({Equivalency.left=current} ('=='|'!='|'=') right=Relational)*
;
Relational returns Expression:
PlusMinus ({Relational.left=current} ('>='|'<='|'>'|'<') right=PlusMinus)*
;
PlusMinus returns Expression:
DivMult ({PlusMinus.left=current} ('+'|'-') right=DivMult)*
;
DivMult returns Expression:
LogicalNot ({DivMult.left=current} ('/'|'*') right=LogicalNot)*
;
LogicalNot returns Expression:
OnesComplement | ({LogicalNot} '!' expr=OnesComplement)
;
OnesComplement returns Expression:
Exponentiation ({OnesComplement.left=current} ('~') right=Exponentiation)*
;
Exponentiation returns Expression:
Concatenation ({Exponentialtion.left=current} '^' right=Concatenation)*
;
Concatenation returns Expression:
ArrowExpression ({Concatenation.left=current} '##' right=ArrowExpression)*
;
ArrowExpression returns Expression:
ColonOperator ({ArrowExpression.left=current} '->' right=ColonOperator)*
;
ColonOperator returns Expression:
Primary | ({ColonOperator} (':'('+')?) expr=Primary)
;
Primary returns Expression: {Expression}
name=NUMBER | name=STRING | name=ID (ArrayDecl=ArrayDecl? & Parenthesis=Parenthesis?) | ArrayDecl=ArrayDecl | Parenthesis=Parenthesis|Annotation
;
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04524 seconds