这必须是互联网上某些着名的例子之一,但我似乎无法找到它。
我正在尝试学习XText,我认为计算器表达式解析器将是一个良好的开端。但是我的语法中出现了语法错误:
Expression:
Term (('+'|'-') Term)*;
Term:
Factor (('*'|'/') Factor)*;
Factor:
number=Number | variable=ID | ('(' expression=Expression ')');
我在表达式和术语行中出现此错误:
Multiple markers at this line
- Cannot change type twice within a rule
- An unassigned rule call is not allowed, when the 'current'
was already created.
是什么给出的?我怎样才能解决这个问题?我什么时候在语法中有instanceName=Rule
与Rule
条目?
答案 0 :(得分:2)
我下载了与eclipse集成的xtext,它附带了一个计算器示例,它大致可以实现所谓的算术。根据我的收集,您需要为您的令牌分配关联性。这个语法对我很好:
Expression:
Term (({Plus.left=current}'+'|{Minus.left=current}'-') right=Term)*;
Term:
Factor (({Multiply.left=current} '*'| {Division.left=current}'/') right=Factor)*;
Factor:
number=NUMBER | variable=ID | ('(' expression=Expression ')');
可以查看他们用于算术的示例语法here。它包括比你更多的函数调用,但基础是相同的。