0

歧义语法:从语法中消除歧义

E - > UV | EBE | V | [E]

V - > a | b

U - > < | >

B - >? | ! | @

一些信息:

优先顺序:? <! < @,一元运算符(<,>)最高

二元运算符?,!,@是右关联的。 E-> UV |

我的尝试:

E - > UV | EBT | V | [E]

T→E

V→a | b

U - > < | >

B - >? | B1

B1 - >! | B2

B2 - > @

我不知道如果我在我的转换过程中留下了一些极端情况。感谢您能否指出一些错误并提供一些提示。

回答

0

E -> UV | EBE | V | [E] V -> a | b U -> < | > B -> ? | ! | @

优先顺序:? <! < @,一元运营商(<,>)是最高的 。

二元运算符?,!,@是正确的关联。

我对您的优先顺序感到困惑,因为它意味着!的优先级高于>

因此,假设优先顺序:

a,b,<,>,?,!,@

我想指出,明确的语法都是关于使用中介角色,通常比模糊的语法较多,以确保有步骤的标准程序以达到某个终端符号,即每个字符串将具有相同的分析树。最高优先级意味着它是最终转换到最终非终端到终端符号转换。

我的答案是:

E -> V?E | V!E | [email protected] | [E] //Right associativity = right recursive V-> <V | >V | E | T | a | b T-> a | b | E

但是很难知道不知道你的目标串并接受/不接受。