2015-04-12 32 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需要优先,所以它必须放在第一位,因为如果有两个或更多具有相同最长匹配的模式,最早的模式获胜。