词法分子如何对待重叠的终端?

时间:2016-11-03 21:27:15

标签: parsing lex lexical-analysis regular-language

据我所知:

  • Lexers通过一组终端对文本进行标记。
  • 终端是正则表达式。

我即将为我正在研究的简单解析器生成器实现词法分析器。我会这样建立词法分析器:

  1. 有一组终端
  2. 将所有这些终端组合成NFA(记住每个终端的最终状态)
  3. 然后将此NFA转换为DFA(映射每个终端的最终状态)
  4. 然后如果词法分析器即将lex一个令牌,实现将:

    1. 在下一个符号上尝试组合DFA,直至失败
    2. 查找输入的最后一个最终状态
    3. 将该状态映射到预定义终端
    4. (并将包含匹配字符串的feed终端提供给解析器)。

      当语言相交时至少定义了两个终端时,问题就出现了。考虑以下终端:

      Name = [a-z0-9]+
      Number = [0-9]+
      

      因此number的语言实际上是name的子语言。

      如果词法分析器即将分析字符串123,则下一个标记可以是名称一个数字。

      我的设计出了什么问题?或者是否需要为解析器提供多个可能的终端?

0 个答案:

没有答案