我试图找出以下语法是否含糊不清或明确:
stmt - > IF expr THEN stmt | matchedStmt
matchedStmt - > IF expr THEN matchedStmt ELSE stmt |其他
它实现了if-then-else结构。
expr
和other
被视为终端符号,因为我们在此问题中并不关心它们。
我一直在尝试找到一个包含多个解析树的字符串,但我不能。
你能帮帮我吗?
答案 0 :(得分:1)
这个语法含糊不清,虽然它朝着正确的方向前进:)
这是一个含糊不清的地方:
IF c1 THEN IF c2 THEN s2 ELSE IF c3 THEN s3 ELSE s4
由于IF c2 THEN s2 ELSE IF c3 THEN s3
可以简化为:
IF c2 THEN matchedStmt ELSE stmt
是matchedStmt
。因此ELSE s4
属于IF c3
还是IF c1
是不明确的。
您需要matchedStmt
完全匹配ELSE
的两面,如下所示:
stmt -> matchedStmt | unmatchedStmt
matchedStmt -> IF expr THEN matchedStmt ELSE matchedStmt
| other
unmatchedStmt -> IF expr THEN stmt
| IF expr THEN matchedStmt ELSE unmatchedStmt