1

这一定是互联网上某个地方的知名示例之一,但我似乎找不到。

我正在尝试学习 XText,我认为计算器表达式解析器将是一个好的开始。但是我的语法出现语法错误:

Expression:
    Term (('+'|'-') Term)*;

Term:
    Factor (('*'|'/') Factor)*;

Factor:
    number=Number | variable=ID | ('(' expression=Expression ')');

我在 Expression 和 Term 行中收到此错误:

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中的条目?

4

1 回答 1

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 ')');

The example grammar they have for arithmetics can be viewed here. It includes a bit more than your, like function calls, but the basics are the same.

于 2012-02-25T16:00:12.953 回答