示例解析器,以了解如何编写它们

gre*_*561 41 language-agnostic parsing

我正在寻找可以进行研究的解析器和/或解析器生成器的源代码,以便进一步发展,我在学校课程中获得的技能.你知道任何类型的推荐解析器吗?

Ira*_*ter 22

您应该知道如何手动构建递归下降解析器.这是一个关于如何执行此操作的快速课程的SO链接:https: //stackoverflow.com/a/2336769/120163

如果您想了解如何自动构建递归下降解析器,您可以在此链接上阅读MetaII上的论文(并参阅教程):https://stackoverflow.com/a/1142034/120163

  • @Ankit:死链接:*这是在脚*中拍摄自己,并提供您想要的不可用信息.所以不断抱怨"到异地资源的链接可能会过时",所以文字应该在SO"在这里".这是一个堆栈溢出答案的链接(你可以在链接名称中看到),他们智慧的SO版主决定删除.(它有17个upvotes和原始问题作者授予的100分奖金).如果你认为这对他们来说是一个坏主意,你可以去Meta并抱怨.[我们这些拥有高代表的人可以看到已删除的答案]. (25认同)
  • 替代链接:http://web.archive.org/web/20100727140855/http://stackoverflow.com/questions/914157/please-recommend-cs-project-books/1142034 - 哦!它在666次观看后被删除了? (3认同)
  • @Odexios:我在死链接上写下了答案。所以删除了它。我的代表将答案包括在这里,但是所有要做的就是降低删除主义者的愤怒;毕竟,已经删除过一次。我之前曾在SO员工那里来过,没有发现让自己受更多相同的事情困扰。这是因为政策选择不当,但我无法控制。 (2认同)
  • 它现在还没死.人民崛起! (2认同)

Esc*_*alo 9

  • 野牛是一个经典的例子(C/C++).
  • Pyparsing是一个很棒的模块,它非常易于使用(Python).
  • 柠檬很容易使用(C++).

查看示例,祝你好运.

编辑:

我想我应该发表评论.A parser是一个处理输入并"理解"它的程序.A parser generator是用于编写解析器的工具.我想你的意思是你想要了解更多关于生成解析器的知识,在这种情况下,你应该参考解析器生成器的文档(以上所有).


Der*_*all 7

解析器本身通常不那么有趣,它是解析器的生成器,它更像是一个学习主题.

  • ANTLR生成LL解析器,一旦生成就很容易读取.(JAVA)
  • Bison生成无法读取的LALR(1)解析器.(C)

如果LALR(1)对你感兴趣,我在github上有一个库,试图在LALR解析上做一个新的数字.随意看看.它是在C#中,我已尽力使代码易于理解.这对我来说是一个学习项目,但它比大工具小,而且更容易渗透.绝对可以随意贡献,还有很多功能可供添加.

否则,请查看生成的这些工具的代码,以了解它们如何构建实际工作的解析器.

  • 分析器生成器[引起许多问题](http://mortoray.com/2012/07/20/why-i-dont-use-a-parser-generator/).编写自己的解析器,你有一个乐趣和b)完全控制. (6认同)

小智 5

我会向你推荐这本书:http : //www.cs.nott.ac.uk/~gmh/book.html。开始使用 Haskell 非常好,它有一整章都是关于解析器的。

如果您能理解这一点,那么使用 Haskell 创建解析器非常简单。还要考虑到 Haskell 非常快,而且非常适合多核编程,所以它可能是未来。

加。

这是 Haskell 中的解析器:Happy - http://www.haskell.org/happy/。