混淆的文法(Ambiguous Grammar)
混淆的文法指的是一種文法,它可以為同一個輸入字符串生成多於一個的解析樹(或推導樹)。這意味著存在多種不同的方式來解析這個字符串,使得其語法結構不唯一。混淆的文法在編譯器設計中會導致語義模糊,因為同一個輸入可能會被解釋為多種不同的結構。
例子:Python 中的混淆文法
考慮一個簡單的文法,用來解析算術運算中的加法和乘法。這裡有一個可能的混淆文法示例:
python
複製程式碼
import lark
grammar = """
?start: expr
?expr: expr "+" term -> add
| term
?term: term "*" factor -> mul
| factor
?factor: NUMBER -> number
| "(" expr ")"
%import common.NUMBER
%import common.WS
%ignore WS
"""
parser = lark.Lark(grammar)
# 解析字符串
parse_tree = parser.parse("3 + 4 * 5")
print(parse_tree.pretty())