首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为java/jsf代码创建自己的解析器?

如何为java/jsf代码创建自己的解析器?
EN

Stack Overflow用户
提问于 2009-03-23 17:45:16
回答 8查看 3.1K关注 0票数 4

您好,我想做自己的‘解析器’,例如:计算(4+(3-4^2))*2或解析java,jsf,html代码。

事实上,我做了这样的事情,但我觉得这并不好。

有什么对我有好处的吗?我试着阅读更多,但我有点困惑,LL,LR,AST,BNF,javacc yacc等:)。我不确定该走哪条路,什么时候我想计算4+...

或者,如果我想解析java、jsf代码并从中产生一些东西(另一个java代码)。

有没有像ast这样的好东西呢?或者是我可以两者都用的东西?

谢谢你的帮助。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-03-23 18:00:00

首先,您必须了解有关解析的一切都是基于语法的。

语法描述了你想要实现的语言,比如如何以基本单元分解文本,以及如何以某种有意义的方式堆叠这些单元。您可能还想查找标记非终端终端等概念。

LL和LR之间的差异可以分为两类:实现差异和语法写作差异。如果你使用一个标准的工具,你只需要理解第二部分。

我通常使用LL (自上而下)语法。即使使用自定义代码,它们也更易于编写和实现。LR语法理论上涵盖了更多类型的语言,但在正常情况下,当您需要一些正确的错误检测时,它们只是一个障碍。

一些随机指针:

  • javacc (java,LL),
  • antlr (java,LL),
  • yepp (smarteiffel,LL),
  • bison (C,LR,GNU版本的古老的yacc)
票数 2
EN

Stack Overflow用户

发布于 2009-03-23 17:48:40

解析器的编写可能非常繁重。语法的标准工具是bison或yacc,语法的标准工具是flex。这些都是用C或C++输出的代码。

票数 1
EN

Stack Overflow用户

发布于 2009-03-23 17:49:39

ANTLR可能是java的发展之路。它有点紧张,这本书显然非常好(我只对在线文档感到头疼)。

如果您可以扩展到其他语言,那么lex/yacc (或flex/bison)是C的标准,尽管我不会特别推荐这两种组合中的任何一种(学习曲线陡峭,现在显示出它们的年龄)。

Python有大约一百万个解析器可用(SimpleParse,Yapps),或者有用于Ruby的TreeTop -开发人员甚至有一个演示,可以像你的问题那样做简单的计算-但请注意,这并不能完成LALR解析器所能完成的所有任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/674466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档