手动编写命题逻辑解析器

时间:2013-12-12 17:13:51

标签: java parsing grammar lexer finite-automata

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

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

由于我想以最正确的方式做到这一点,我要求为这份工作提供建议。欢迎任何相关信息的链接。

2 个答案:

答案 0 :(得分:3)

更多信息将是有用的,即您要使用的语法和示例输入字符串。我不知道你对乔姆斯基的语法水平有多了解,但那是关键。 Simplified说,词法分析器可以解析单词级别(Level 3:Regular grammars),解析器也可以分析语法(Level 2:Context-free grammars)。 (更多信息请访问:lexers vs parsers

可以使用无扫描器解析器,但我认为如果你在不试图避开词法分析器的情况下编写,你只需将词法分析器集成到解析器中。换句话说,如果你编写你的程序,你会调用标记化原始输入字符串的部分lexer和将语法应用于解析器的部分,如果你想调用它的话。但你不应该对这些条款给予很多。如果你编写一个解析器并且不需要词法分析器,那么很高,lexer已经存在于你的代码中,但是谁在乎;)希望有所帮助,但是可以随意询问它是否仍然不清楚!

答案 1 :(得分:1)

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

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