Variable reference error [message #1796323] |
Wed, 10 October 2018 11:09  |
Eclipse User |
|
|
|
Please, see my grammar below. I have the following error for the mentioned text
Quote:
operation test(){
i:integer=1;
j:integer=i;
}
Quote:
Couldn't resolve reference to Variable 'i'.
Line 3
Where is the problem and how to fix it?
Regards,
Vladimir
grammar org.blockchain.rell.Rell with org.eclipse.xtext.common.Terminals
generate rell "http://www.blockchain.org/rell/Rell"
Model:
entities+=TheClass*
operations+=Operation*;
TheClass:
'class' name=ID ('extends' superType=[TheClass])? '{'
attributes+=Attribute*
'}';
Operation:
"operation" name=ID "(" parameters=RelAttrubutesList? ")" "{" statements+=Statement* "}";
Statement:
(Relational | Variable) ';';
Variable:
declaration=VariableDeclaration '=' expression=Expression;
Relational:
Update | Delete | Create;
Update:
'update' entity=ID '(' expressions=ExpressionsModel? ')' '{' variableList+=VariableInit
(',' variableList+=VariableInit*)? '}';
Delete:
'delete' entity=ID '(' expressions=ExpressionsModel? ')';
Create:
'create' entity=ID '(' expressions=ExpressionsModel? ')';
ExpressionsModel:
elements+=ConditionElements (',' elements+=ConditionElements*)?;
ConditionElements:
compareName=ID ('==' | '!=' | '>' | '<' | '>=' | '<=') expr=Expression;
VariableInit:
name=ID '=' expression=Expression;
Expression:
Or;
Or returns Expression:
And ({Or.left=current} "or" right=And)*;
And returns Expression:
Equality ({And.left=current} "and" right=Equality)*;
Equality returns Expression:
Comparison ({Equality.left=current} op=("==" | "!=")
right=Comparison)*;
Comparison returns Expression:
PlusOrMinus ({Comparison.left=current} op=(">=" | "<=" | ">" | "<")
right=PlusOrMinus)*;
PlusOrMinus returns Expression:
MulOrDiv (({Plus.left=current} '+' | {Minus.left=current} '-')
right=MulOrDiv)*;
Atomic returns Expression:
{IntConstant} value=INT |
{StringConstant} value=STRING |
{BoolConstant} value=('true' | 'false') |
{VariableRef} variable=[Variable];
MulOrDiv returns Expression:
Primary ({MulOrDiv.left=current} op=('*' | '/')
right=Primary)*;
Primary returns Expression:
'(' Expression ')' |
{Not} "not" expression=Primary |
Atomic;
RelAttrubutesList:
value+=RelAttribute (',' value+=RelAttribute)*;
RelAttribute:
name=ID ':' reference=TypeReference;
Attribute:
modificator=Prefix? variable=VariableDeclaration ';';
VariableDeclaration:
name=ID ':' type=TypeReference;
TypeReference:
primitive=PrimitiveType | entity=EntityType;
PrimitiveType:
Text | Integer | Json | ByteArray;
EntityType:
entity=[TheClass];
Json:
'json';
Integer:
'integer' | 'timestamp';
Text:
'text' | 'tuid' | 'name';
ByteArray:
'byte_array' | 'signer' | 'guid' | 'pubkey';
Prefix:
'key' | 'index';
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04843 seconds