私はXtextを使用しており、次の2つの問題についての提案が必要です。このxtext文法を書ける最良の方法
問題#1
は、私は3は、b、cのルール考えてみましょう。そして、私はこれらの規則の任意のシーケンスを許可したいが、bとcは一度だけ現れなければならない。どのように文法を書くのが最善でしょうか?ルート文法を書くためのより良い方法はあり
root:
a+=a*
b=b
a+=a*
c=c
a+=a*
;
a: 'a';
b: 'b';
c: 'c';
:ここ
は私が思い付いたのですか? bとcは依然として厳密な順序でなければならず、理想的ではない。
問題#2
はこの文法を見てください:
私は以下のような言語を書くことができると期待この文法を使用root:
any+=any*
x=x
any+=any*
;
any:
name=ID
'{'
any+=any*
'}'
;
x:
name='x' '{' y=y '}'
;
y:
name='y' '{' z=z '}'
;
z:
name='z' '{' any+=any* '}'
;
:
a {
b {
}
c {
y {
}
}
}
x {
y {
z {
the_end {}
}
}
}
しかし、 "y"が "c"の下に表示されるため、エラーが発生します。何故ですか?それは "y"がルールの1つの端末として使用されたので、それは文法のどこにも現れないからですか?
この文法を修正するにはどうすればよいですか?問題#1の
はい私は自分の答えを投稿した後もそれを考えましたが、それ以上追求しておらず、その代わりに美容師を使用することを決めました。それはより良い選択のように思えました。私はそれを試すことができなくても、正しいと思われるのであなたの答えを受け入れます。 –