我已经完成了一项家庭作业,将以下语法转换为明确的语法。
A --> B
A --> ε
B --> B @ B
B --> STRING
B --> DOUBLE(STRING)
其中A和B是非终结点,STRING和DOUBLE是非终结点。
我可以得出结论,因为可以为字符串构建两个不同的解析树,例如:
STRING @ STRING @ DOUBLE(STRING)
。
到目前为止,我有:
A --> B | ε
B --> B @ DOUBLE(STRING)
B --> C
C --> C @ STRING | STRING | DOUBLE(STRING)
但是它不是完整的字符串,例如:
STRING @ DOUBLE(STRING)@ STRING
无法创建。我如何将这种语法转换为明确的?
答案 0 :(得分:0)
STRING @ STRING @ STRING
可能是由于 A⇒B @(B @ B)或 A⇒(B @ B)@ B 因为
B --> B @ B
解决方案是引入一个新的类似B的非终结子,并用该非终结子替换出现的事件。这引入了不对称性,您会在许多语法中找到它。
很高兴找出剩下的我。
答案 1 :(得分:0)
继续Joop的回答,您可以引入一个新符号D
,以消除B --> B @ B
周围的歧义:
A --> D
A --> ε
D --> D @ B
D --> B
B --> STRING
B --> DOUBLE(STRING)
通过此更改,该语言中的任何字符串都只能有一棵树。