xtext:表达式/因子/术语语法

时间:2012-02-25 14:30:21

标签: grammar xtext

这必须是互联网上某些着名的例子之一,但我似乎无法找到它。

我正在尝试学习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=RuleRule条目?

1 个答案:

答案 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。它包括比你更多的函数调用,但基础是相同的。