私はAntlr4を使用しています。ここに私の文法は次のとおりです。 assign : id '=' expr ;
id : 'A' | 'B' | 'C' ;
expr : expr '+' term
| expr '-' term
| term ;
term : term '*' factor
| term '/' factor
です: S -> if E then S
| if E then S else S
| a
E -> b
私は私の解決策よりも複雑である解決策を見つけたが、私は私の解決策が正しいかどうかはわからない。 S -> if E then T else S
| if E then S
| a
T -> if E then T else T
| a
私は、LL構文解析(語彙解析)を作成するための命題論理の文法を書こうとしています。 私は、次の文法試してみました: F = F and F
F = F or F
F = F => F
F = F <=> F
F = not F
F = (F)
D = a
を私はそれがあいまいであることを発見しました。私はあいまいさを取り除くために以下を試みました: F = F and A
F =
私はこの演習で少し問題があります。この文法を考える : S -> aX | X
X -> aXb | b | eps
a)は、それは文字列 b)参照)文法 Cを捉えどのような言語と言う文法を変更し、子孫を構築して曖昧であることを示していますパーサー 解決方法: a) L = {a^n b^n: n >= 0} U {a^n b^m: n=m+1, n,m >= 0} U {a^n b^m:
あいまいな文法: E - > UV | EBE | V | [E] V - > a | b U - > < | > B - >? | ! | @ 一部の情報: 優先順序:? <! < @、単項演算子(<、>)が最高である バイナリ演算子?、!、@は正しい結合です。 私の試み: E - > UV | EBT | V | [E] T - > E V - > | b U - > < | > B - >?