阿摩線上測驗 登入

申論題資訊

試卷:107年 - 107 司法特種考試_三等_檢察事務官電子資訊組:程式語言#74283
科目:程式語言
年份:107年
排序:0

申論題內容

一、在程式語言中,請舉例並說明何謂混淆的文法(ambiguous grammar)? (20 分)

詳解 (共 3 筆)

詳解 提供者:WJ

指的是一個Context Free Grammer中,如果存在一個合法輸入字串,能夠得到多於一個剖析樹(Parsing Tree),則稱作混淆文法

例如:

A -> aA | Aa | ε

input: a

=>

A                            A

|    \                    /    |

a    A        or    A      a

       |                |

       ε                ε

詳解 提供者:hchungw
混淆的文法(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())
詳解 提供者:牛奶鍋
混淆文法(ambiguous grammar)指的是若一語言的某一語句,依其 BNF 文法規則來推導,可繪出兩棵以上的不
同剖析樹。