解析,我在哪里可以了解它

Parsing, where can I learn about it

提问人:DaveP 提问时间:8/29/2008 最后编辑:lillqDaveP 更新时间:5/6/2013 访问量:5685

问:

我被赋予了将一种语言“翻译”成另一种语言的工作。源过于灵活(复杂),无法使用正则表达式进行简单的逐行方法。在哪里可以了解有关词法分析和解析器的更多信息?

解析 Lex

评论


答:

2赞 Greg Hewgill 8/29/2008 #1

我最近一直在使用 PLY,它是 Python 中 lex 和 yacc 的实现。它很容易上手,文档中有一些简单的示例。

解析很快就会成为一个技术性很强的话题,你会发现,如果你使用像 PLY 这样的解析器构建器,你可能不需要知道解析算法的所有细节。

8赞 jfs 8/29/2008 #2

试试 ANLTR

ANTLR,其他语言工具 识别,是一种语言工具, 提供用于构建的框架 识别器、解释器、编译器、 和语法翻译 包含操作的描述 多种目标语言。

还有一本书。

alt text

1赞 tsellon 8/29/2008 #3

如果您更喜欢基于 Java 的工具,那么 Java Compiler Compiler JavaCC 是一个不错的解析器/扫描器。它是配置文件驱动的,将生成可以包含在程序中的 java 代码。不过我已经有几年没有使用它了,所以我不确定当前版本如何。您可以在此处找到更多信息: https://javacc.dev.java.net/

13赞 Matt Cummings 8/29/2008 #4

如果你想对这个主题感到“情绪化”,那就拿起一本《龙之书》。它通常是编译器设计课程中的文本。它肯定会满足您的需求“了解有关词法分析和解析器的更多信息”以及一堆其他有趣的东西!

IMH(umble)O,给自己省下一只胳膊和/或一条腿,买一个旧版本 - 它会满足你的信息需求。

评论

0赞 Ostati 12/18/2018
马特,有 3 个版本,所以请为您建议的版本添加 ISBN,或者使用所有书籍的 ISBN 改进您的评论,并对每本书说一两句话。
0赞 Matt Cummings 1/11/2019
真的@Ostati吗?我明确表示要为自己节省一些钱并购买旧版本......或者不省钱,买电流。
0赞 Ostati 1/12/2019
马特,我花了一段时间才知道哪个版本是哪个版本。但是有你的答案,顺便说一句,我投了赞成票,ISBN......无论如何,我去读书,开始了我的旅程。感谢。
1赞 hoyhoy 8/29/2008 #5

不过,Flex 和 Bison 是新的 Lex 和 YACC。BNF 的语法经常被嘲笑为有点迟钝。出于这个原因,有些人搬到了 ANTLR 和 Ragel。

如果你没有做太多的翻译,你可以使用Perl或Ruby的多行正则表达式来做一次性的翻译。为现有语言编写兼容的 BNF 语法并不是一项可以掉以轻心的任务。

另一方面,如果任何给定语言的 .l 和 .y 文件是开源的,则完全可以利用它们。然后,您可以从现有的分析树构造新代码。

1赞 svrist 8/29/2008 #6

词法分析/解析 + 类型检查 + 代码生成是一个很棒的 CS 练习,我会推荐给任何想要扎实基础的人,所以我完全支持 Dragon Book

5赞 tamberg 8/29/2008 #7

Niklaus Wirth 的著作“Compiler Construction”(免费 PDF 版本)http://www.google.com/search?q=wirth+compiler+construction

1赞 user11318 9/19/2008 #8

另一本需要考虑的教科书是《编程语言语用学》。我更喜欢它而不是 Dragon 书,但 YMMV。

如果你使用的是Perl,另一个可以考虑的工具是Parse::RecDescent

如果你只需要做一次这个翻译,而对编译器技术一无所知,我建议你尽可能地做一些相当简单的翻译,然后手动修复它。是的,这是很多工作。但这比学习一门复杂的学科并为一项工作编写正确的解决方案要少得多。也就是说,你仍然应该学习这个主题,但不要让不知道它成为完成你当前项目的障碍。

1赞 Matt 9/30/2008 #9

我发现这个网站很有帮助:

Lex 和 YACC 入门/HOWTO

我第一次使用 lex/yacc 是为了一个相对简单的项目。本教程是我真正需要的。当我后来接触更复杂的项目时,我从本教程和一个简单的项目中学到的熟悉程度使我能够构建更高级的东西。

1赞 jacobko 10/25/2008 #10

在学习了几门编译器课程后,我同时使用了 The Dragon BookC&T。我认为 C&T 在使编译器结构易于理解方面做得更好。不是要从《龙之书》中拿走任何东西,但我认为C&T是一本更实用的书。

另外,如果你喜欢用 Java 编写,我建议使用 JFlexBYACC/J 来满足你的词法和解析需求。

2赞 wnoise 10/25/2008 #11

很多人都推荐了书。对于许多人来说,这些在具有作业和截止日期等的结构化环境中更有用。即使没有,以不同的方式呈现材料也会有很大帮助。

(a) 你有没有考虑过去一所计算机科学课程不错的学校?
(b) 有很多在线讲座,例如麻省理工学院的公开课件。他们的 EE/CS 部分有许多涉及解析的课程,尽管我看不到任何关于解析本身的课程。它通常作为最早的理论课程之一引入,因为语言分类和自动机是大部分 CS 理论的核心。

评论

0赞 Shawn 4/21/2011
麻省理工学院的 OCW +1,我一直用它来做数学。出于某种原因,在我的日程安排上上课比 6:30 起床要好得多。
1赞 Gio 10/26/2008 #12

解析技术 - 实用指南作者:Dick Grune 和 Ceriel J.H. Jacobs

本书(以 PDF 格式免费提供)对不同的解析技术/算法进行了广泛的概述。如果你真的想了解不同的解析算法,这个IMO是比Dragon Book更好的参考(因为Parsing Techniques完全专注于解析,而Dragon Book只将解析作为编译器构建过程的一个部分,尽管很重要)。

评论

0赞 Gio 12/1/2012
我已经修复了链接:实际的 PDF(第一版)可以在这里下载:dickgrune.com/Books/PTAPG_1st_Edition/BookBody.pdf ;该书的新版本和更广泛的版本现在也可以在亚马逊上购买