java - 手动编写命题逻辑解析器

标签 java parsing grammar lexer finite-automata

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

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

因为我想以最正确的方式来做这件事,所以我为这项工作寻求建议。欢迎任何指向相关信息的链接。

最佳答案

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

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

关于java - 手动编写命题逻辑解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20549834/

相关文章:

python - BeautifulSoup:查询 XML 中的命名空间

parsing - 是否可以为此语法编写递归下降解析器?

eclipse - XText:使用自定义终端定义

java - 如何在 Eclipse 中使用处理库?

java - JDBC 返回结果集

parsing - 如何使用antlr4中的Listener方法获取解析器的内容?

python - 解析 EDGAR 文件

parsing - 如何在简单语法中添加括号作为最高优先级?

java - 有什么方法可以使标签在 SWT 中可选?

java - 在 Map Reduce 上实现 DBSCAN 需要帮助