Yacc仍在行业中使用吗?

时间:2008-12-02 01:05:36

标签: parsing yacc

我正在开发的软件库使用了大量的yacc,我不需要处理。有时候我认为这有助于理解我发现的一些问题,但大部分时间我都可以完全忽略yacc。

我的问题是否有足够的新项目仍然使用yacc保证我需要学习它的时间?

编辑:鉴于回复主要是赞成学习Yacc,你会推荐一种与yacc相似的语言吗?

8 个答案:

答案 0 :(得分:30)

是的,如果您需要创建或修改解析语法的代码,这些工具值得学习。

多年来,用于生成解析语法的代码的事实上的工具是yacc,或者它的GNU堂兄,野牛。

最近我听说街区有几个新孩子,但原理是一样的:你用Backus-Naur形式或多或少的格式写一个声明性语法(BNF )和yacc / bison /无论为你生成一些代码都是手工编写非常繁琐。

此外,即使您不需要直接处理此类代码,语法背后的原理也非常有用。自从在大学学习编译器设计课程以来,我没有使用解析器,但是理解运行时堆栈,前瞻解析器,表达式评估以及许多其他相关的东西帮助我有效地编写和调试我的代码。

编辑:鉴于您对其他工具的后续问题,Yacc / Bison当然最适合C / C ++项目,因为它们生成C代码。其他语言也有类似的工具。并非所有语法都是等价的,并且一些解析器生成器只能克服某种复杂性的语法。所以你可能需要找到一个可以解析你的语法的工具。见http://en.wikipedia.org/wiki/Comparison_of_parser_generators

答案 1 :(得分:6)

我不知道使用它的新项目,但我参与了七个不同的维护工作,使用lex和yacc处理配置文件。

对我来说没有XML,没有 - 先生: - )。

使用lex / yacc的解决方案比key=val行的旧配置文件更进一步,因为它们允许更好的层次结构,如:

server = "mercury" {
    ip = "172.3.5.13"
    gateway = "172.3.5.1"
}
server = "venus" {
    ip = "172.3.5.21"
    gateway = "172.3.5.1"
}

而且,是的,我知道你可以用XML做到这一点,但这些主要是用C语言编写的遗留应用程序,老实说,我可能也会将lex / yacc用于新的(非Java)作业。

那是因为我更喜欢按时和按预算交付软件,而不是提供最好的新技术 - 我的客户不会为我的教育付费,他们首先想要结果,而且我已经是lex / yacc的专家并拥有快速完成任务的所有模板代码。

答案 2 :(得分:3)

一般的经验法则:代码会持续很长时间,因此该代码中使用的技术也会持续很长时间。更换你提到的代码库需要花费大量的时间(构建它需要15年......),这反过来意味着它仍将在5年,10年或更长时间内完成。 (甚至有可能读到这个答案的人最终会对它起作用!)

另一个经验法则:如果一个通用技术已经足够普遍,你已经遇到它,那么你应该熟悉它,这很平常,因为有一天你会再次看到它。谁知道:通过熟悉它,也许你为工具箱添加了一个有用的工具......

Yacc是这些技术之一:你可能会再遇到它,它并不困难,你学到的原则适用于整个解析器构造函数。

答案 3 :(得分:3)

PEGs是新的热点,但仍有大量项目使用yacc或比yacc更现代的工具。我不赞成选择使用yacc的新项目,但对于现有项目,移植到更现代的工具可能没有意义。这使得对yacc的熟悉程度非常有用。

如果您对解析器生成器的主题完全不熟悉,我建议您了解一个,任何一个。许多概念在它们之间是可移植的。此外,它是一个有用的工具:一旦你知道一个,你会理解它们通常比正则表达式重手写解析器更优越。如果您已经熟悉解析器主题,我不会担心它。你会在需要的时候学习yacc,以便完成任务。

答案 4 :(得分:2)

我在使用Yacc的项目上工作。不是新代码 - 但如果是新代码,他们仍然使用Yacc或近亲(Bison,Byacc,......)。

是的,如果你在C工作,我认为值得学习。

还要考虑学习ANTLR或其他更现代的解析器生成器。但是Yacc的知识会让你处于有利地位 - 它也会帮助你学习任何其他类似的工具,因为很多基本理论都是相似的。

答案 5 :(得分:2)

我不知道yacc / bison具体,但我使用过antlr,cup,jlex和javacc。我认为它们只具有重要性,但事实证明我们需要一种特定于域的语言,这给了我们一个比一些“更简单”(基于正则表达式)解析器更好的解决方案。但是,在许多环境中维护可能是一个问题 - 因为现在大多数编码人员都没有解析工具的经验。

答案 6 :(得分:2)

我没有机会将它与其他解析系统进行比较,但我绝对可以根据自己的经验以及庞大而活跃的用户群来推荐ANTLR

ANTLR的另一个优点是ANTLRWorks: The ANTLR GUI Development Environment,这在开发和调试语法时非常有用。我还没有看到这种IDE支持的另一个解析系统。

答案 7 :(得分:1)

我们正在为我的公司编写新的yacc代码以运送产品。是的,这些东西仍在使用。