【问题标题】:Python lexer lexical analysis token priority rule order dealing with ambiguities --- why STRING has priority over WORD?Python lexer 词法分析标记优先级规则顺序处理歧义——为什么 STRING 优先于 WORD?
【发布时间】:2015-04-12 12:47:02
【问题描述】:

我正在学习词法分析器 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

测验: 当两个标记定义可以匹配同一个字符串时,我们的词法分析器的行为可能是模棱两可的.....

假设我们有输入字符串

你好,“世界”,

我们希望输入字符串产生 字串 .哪条规则必须放在最后? IE。 “......我想让你做的是告诉我这些功能中的哪一个,这些规则中的哪一个必须最后出现,记住首先出现的那个会按顺序赢得所有平局对于你好,“世界”分解成一个单词,后跟一个字符串。”

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


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

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

t_STRING , 然后 t_WORD

..........看了很多遍都看不懂,为什么STRING优先于WORD?

请指教。

非常感谢。

【问题讨论】:

    标签: python lex lexer ply


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      相关资源
      最近更新 更多