您好,我想做自己的‘解析器’,例如:计算(4+(3-4^2))*2或解析java,jsf,html代码。
事实上,我做了这样的事情,但我觉得这并不好。
有什么对我有好处的吗?我试着阅读更多,但我有点困惑,LL,LR,AST,BNF,javacc yacc等:)。我不确定该走哪条路,什么时候我想计算4+...
或者,如果我想解析java、jsf代码并从中产生一些东西(另一个java代码)。
有没有像ast这样的好东西呢?或者是我可以两者都用的东西?
谢谢你的帮助。
发布于 2009-03-23 18:00:00
首先,您必须了解有关解析的一切都是基于语法的。
语法描述了你想要实现的语言,比如如何以基本单元分解文本,以及如何以某种有意义的方式堆叠这些单元。您可能还想查找标记、非终端、终端等概念。
LL和LR之间的差异可以分为两类:实现差异和语法写作差异。如果你使用一个标准的工具,你只需要理解第二部分。
我通常使用LL (自上而下)语法。即使使用自定义代码,它们也更易于编写和实现。LR语法理论上涵盖了更多类型的语言,但在正常情况下,当您需要一些正确的错误检测时,它们只是一个障碍。
一些随机指针:
发布于 2009-03-23 17:48:40
解析器的编写可能非常繁重。语法的标准工具是bison或yacc,语法的标准工具是flex。这些都是用C或C++输出的代码。
发布于 2009-03-23 17:49:39
ANTLR可能是java的发展之路。它有点紧张,这本书显然非常好(我只对在线文档感到头疼)。
如果您可以扩展到其他语言,那么lex/yacc (或flex/bison)是C的标准,尽管我不会特别推荐这两种组合中的任何一种(学习曲线陡峭,现在显示出它们的年龄)。
Python有大约一百万个解析器可用(SimpleParse,Yapps),或者有用于Ruby的TreeTop -开发人员甚至有一个演示,可以像你的问题那样做简单的计算-但请注意,这并不能完成LALR解析器所能完成的所有任务。
https://stackoverflow.com/questions/674466
复制相似问题