2015-04-12 30 views
0

我正在學習韋克斯利韋默編程語言課程 lexer。Python詞法分析器令牌優先級規則順序處理歧義---爲什麼STRING優先於WORD?

的音符在這裏 https://www.udacity.com/wiki/cs262/unit-2#quiz-rule-order

{視頻,如果你願意看,最後40秒。} https://www.udacity.com/course/viewer#!/c-cs262/l-48713810/e-48652568/m-48676965

測驗: 當兩個標記定義可以匹配相同的字符串,行爲我們的詞法分析器可能是模糊.....

假設我們有輸入字符串

你好,「世界,「

並且我們希望輸入字符串產生 WORD STRING 。哪個規則必須持續? ie 「......我想讓你做的是告訴我哪些函數中的哪一個,這些規則中的哪一個必須最後一個,記住先來的那個會贏得所有的爲了打招呼,「世界」要分成一個字和一個字符串。「

def t_WORD(token): 
    r'[^ <>]+' 


def t_STRING(token)        
    r'"[^"]*"' 

........答案是:

T_STRING ,然後 t_WORD

..........我不明白這一點連在多次觀看視頻後,爲什麼STRING優先於WORD?

請指教。

非常感謝。

回答

1

兩種模式都匹配"world",但願望是令牌t_STRING被返回。要做到這一點,t_STRING需要優先,所以它必須放在第一位,因爲如果有兩個或更多具有相同最長匹配的模式,最早的模式獲勝。