1

これは、インターネット上のどこかにある有名な例の 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=Rulevs.エントリがあるのはいつですか?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 ')');

算術の文法例は、ここで見ることができます。関数呼び出しなど、あなたよりも少し多く含まれていますが、基本は同じです。

于 2012-02-25T16:00:12.953 に答える