您好,我想制作自己的“解析器”,例如:计算 (4+(3-4^2))*2 或 解析java、jsf、html代码。
其实我也做过这样的事情,但是感觉不太好。
有什么适合我的吗?我试图阅读更多内容,但我有点困惑,LL、LR、AST、BNF、javacc yacc 等 :)。当我想计算 4+ 时,我不确定该走哪条路......
或者如果我想解析 java、jsf 代码并从中生成一些东西(另一个 java 代码)
有没有像 ast 这样的通用性足够好的东西?或者我可以同时使用的东西?
谢谢你的帮助。
最佳答案
首先,您必须了解有关解析的一切都是基于语法。
语法根据如何分解基本单元中的文本以及如何以某种有意义的方式堆叠这些单元来描述您要实现的语言。您可能还想查找 token 、非终端、终端 概念。
LL 和 LR 之间的差异可以分为两种:实现差异和语法编写差异。如果您使用标准工具,则只需了解第二部分。
我通常使用 LL(自上而下)语法。它们更易于编写和实现,甚至使用自定义代码也是如此。 LR 文法理论上涵盖了更多种类的语言,但在正常情况下,当您需要一些正确的错误检测时,它们只是一个障碍。
一些随机指针:
- javacc(java,LL),
- antlr (java, LL),
- yepp (smarteiffel, LL),
- bison(古老的 yacc 的 C、LR、GNU 版本)
关于java - 如何为 java/jsf 代码创建自己的解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/674466/