【问题标题】:Coding a propositional logic parser by hand手动编写命题逻辑解析器
【发布时间】:2013-12-12 17:13:51
【问题描述】:

我需要为命题逻辑做一个解析器。我假装像 java 中的递归下降解析器一样手动实现。

我的问题是关于词法分析器,这份工作真的需要它吗?我的意思是定义一个有限状态机来识别令牌等。 我已经看到了一些关于简单算术解析器的示例,它们仅依靠语法规则在“单个解析器”中处理所有内容。看起来他们并不关心为解析器提供标记的单独独立词法分析器。

因为我想以最正确的方式做到这一点,所以我就这份工作征求意见。欢迎提供任何相关信息的链接。

【问题讨论】:

    标签: java parsing grammar lexer finite-automata


    【解决方案1】:

    更多信息会很有用,即您要使用的语法和示例输入字符串。我不知道你对乔姆斯基的语法水平了解多少,但这是关键。简而言之,词法分析器可以在单词级别进行解析(第 3 级:常规语法),并且解析器也可以分析语法(第 2 级:上下文无关语法)。 (更多信息在这里:lexers vs parsers

    可以使用无扫描仪解析器,但我认为如果您编写时无需尝试避免使用词法分析器,您只需将词法分析器集成到解析器中即可。换句话说,如果您编写程序,您可以将标记原始输入字符串的部分称为词法分析器,将应用语法的部分称为解析器,如果您想这样调用它的话。但你不应该对条款提供太多。如果您编写了一个解析器并且不需要词法分析器,那么很有可能词法分析器已经在您的代码中,但谁在乎;)希望这会有所帮助,但如果还不清楚,请随时询问!

    【讨论】:

    • 不错的链接。好吧,理论上,词法分析器将处理命题逻辑的常规语法、运算符 NOT、OR、AND 等。解析器将处理格式良好的逻辑公式(上下文无关语法)。也许对于 mi case,词法分析器没有太多工作要做,但对于练习和学习很有用,因为我是这个主题的新手。我认为如果我以后想解析不同的语言,拥有一个单独的词法分析器会更方便和更容易扩展。我真的不想避免任何事情,这只是为了学习。
    • 解析器从词法分析器中一个一个地获取标记,或者首先词法分析器完成他的工作并一次将所有标记发送给解析器?我认为这两种方式都可以使用,但哪种方式更好?
    • 如果是为了学习单独的词法分析器,理解机制肯定更好。恕我直言,首先标记所有标记然后解析它们会更清楚,特别是如果它不是尽可能快地解析并且另外你可以看到明文、标记和结果之间的分割。
    【解决方案2】:

    这种解析器不需要“真正的”词法分析器。你确实需要一些能挑出你语言的原子的东西(标识符、运算符、括号)。您可以直接在解析器中对简单语言执行此操作。

    请参阅我关于如何编写简单解析器的答案:Is there an alternative for flex/bison that is usable on 8-bit embedded systems?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多