我正在学习词法分析器 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?
请指教。
非常感谢。
答案 0 :(得分:1)
两种模式都匹配"world"
,但希望返回令牌t_STRING
。要做到这一点,t_STRING
需要具有优先权,因此必须先放置,因为如果有两个或更多模式具有相同的最长匹配,则最早的模式会获胜。