Python lexer词法分析令牌优先级规则处理歧义 - 为什么STRING优先于WORD?

时间:2015-04-12 12:47:02

标签: python lex lexer ply

我正在学习词法分析器 Westley Weimer编程语言课程。

笔记在这里 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 。必须遵守哪条规则? 即 " ......我希望你做的就是告诉我这些功能中的哪一个,这些规则中的哪一个必须最后一个,记住先来的那个。赢得所有联系,以求你好,#34;世界"分解成一个单词后跟一个字符串。"

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


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

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

T_STRING , 然后 t_WORD

..........即使多次观看视频后我也听不到,为什么STRING优先于WORD?

请指教。

非常感谢。

1 个答案:

答案 0 :(得分:1)

两种模式都匹配"world",但希望返回令牌t_STRING。要做到这一点,t_STRING需要具有优先权,因此必须先放置,因为如果有两个或更多模式具有相同的最长匹配,则最早的模式会获胜。