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

时间:2020-03-05 18:44:53  来源:igfitidea点击:

我已经完成了将一种语言"翻译"为另一种语言的工作。对于使用regex进行简单逐行处理的方法,源代码过于灵活(复杂)。我在哪里可以了解有关词法分析和解析器的更多信息?

解决方案

回答

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

解析很快就会成为一个非常技术性的话题,并且我们会发现,如果使用的是诸如PLY之类的解析器构建器,则可能不需要了解解析算法的所有详细信息。

回答

尝试ANLTR:

ANTLR, ANother Tool for Language
  Recognition, is a language tool that
  provides a framework for constructing
  recognizers, interpreters, compilers,
  and translators from grammatical
  descriptions containing actions in a
  variety of target languages.

也有一本书。

回答

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

回答

如果我们想获得有关该主题的"情感",请索取《龙书》的副本。通常是编译器设计课程中的文字。它一定会满足"学习更多有关词法分析和解析器的知识"以及许多其他有趣的东西!

IMH(umble)O,为自己省下一条胳膊和/或者一条腿,然后购买较旧的版本,这将满足信息需求。

回答

flex和bison是新的lex和yacc。 BNF的语法经常因为有点晦涩而被嘲笑。为此,有些人搬到了ANTLR和Ragel。

如果我们执行的翻译不多,则可以使用Perl或者Ruby的多行正则表达式来完成一次翻译。为现有语言编写兼容的BNF语法并不是一件容易的事。

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

回答

Lexing / Parsing + typecheck +代码生成是一个很棒的CS练习,我会推荐给任何想要扎实基础的人,所以我全都支持Dragon Book

回答

尼克劳斯·沃思(Niklaus Wirth)的著作"编译器构造"(免费提供PDF)
http://www.google.com/search?q=wirth+compiler+construction

回答

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

如果我们使用的是Perl,则要考虑的另一个工具是Parse :: RecDescent。

如果我们只需要执行一次翻译,而对编译器技术一无所知,那么我建议我们尽可能简单地进行一些翻译,然后手动进行修复。是的,这是很多工作。但是,这比学习一门复杂的主题并为一项工作编写正确的解决方案要少。话虽如此,我们仍然应该学习该主题,但不要让它不成为完成当前项目的障碍。

回答

我发现此站点有帮助:

Lex和YACC底漆/方法

我第一次使用lex / yacc是一个相对简单的项目。本教程是我真正需要的。以后,当我处理更复杂的项目时,对本教程的熟悉程度和一个简单的项目使我可以建立一些更奇特的东西。

回答

在(相当)几个编译器课程之后,我同时使用了《龙书》和C&T。我认为C&T在使编译器构造易于理解方面做得更好。不要无视《龙书》,但我认为C&T是一本实用得多的书。

另外,如果我们喜欢用Java编写,我建议使用JFlex和BYACC / J满足词法分析需求。

回答

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

(a)我们是否考虑过学习CS课程的学校?
(b)有很多在线讲座,例如麻省理工学院的开放课件。他们的EE / CS部分有许多涉及解析的课程,尽管我本身看不到解析的任何课程。它通常是第一门理论课程之一,因为语言分类和自动机是许多CS理论的核心。

回答

解析技术实用指南
迪克·格鲁尼(Dick Grune)和塞里尔·J·H(Ceriel J.H.)雅各布斯

本书(以PDF格式免费提供)对不同的解析技术/算法进行了广泛的概述。如果我们真的想了解不同的解析算法,则此IMO比Dragon Book更好(因为Parsing Techniques完全专注于解析,而Dragon Book仅将解析作为编译器构建过程的重要部分之一)进行了介绍。