Parsing Yacc是否仍在行业中使用?

Parsing Yacc是否仍在行业中使用?,parsing,yacc,Parsing,Yacc,我正在开发的软件库使用了大量我不需要处理的yacc。有时我认为这有助于理解我发现的一些问题,但大多数情况下,我完全不了解yacc,可以侥幸逃脱 我的问题是,是否有足够多的新项目仍然使用yacc来保证我有足够的时间学习它 编辑:鉴于大多数人都支持学习Yacc,您是否会推荐一种类似于Yacc的语言?是的,如果您需要创建或修改解析语法的代码,这些工具值得学习 多年来,生成语法解析代码的实际工具是yacc,或其GNU近亲bison 最近我听说有几个新来的孩子,但原则是一样的:你写一个声明性语法的格式或多

我正在开发的软件库使用了大量我不需要处理的yacc。有时我认为这有助于理解我发现的一些问题,但大多数情况下,我完全不了解yacc,可以侥幸逃脱

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


编辑:鉴于大多数人都支持学习Yacc,您是否会推荐一种类似于Yacc的语言?

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

多年来,生成语法解析代码的实际工具是yacc,或其GNU近亲bison

最近我听说有几个新来的孩子,但原则是一样的:你写一个声明性语法的格式或多或少都是Backus Naur Form()和yacc/bison/任何能为你生成一些代码的东西,手工编写会非常乏味

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


编辑:鉴于您对其他工具的后续问题,Yacc/Bison当然最适合C/C++项目,因为它们生成C代码。其他语言也有类似的工具。并非所有语法都是等价的,一些解析器生成器只能搜索具有一定复杂性的语法。因此,您可能需要找到一个可以解析语法的工具。请参见

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

我没有XML,没有sir ee:-)

使用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的专家,拥有快速完成的所有模板代码。

我从事使用yacc的项目。不是新的代码-但如果它们是新的,它们仍然会使用Yacc或一个近亲(Bison,Byacc,…)

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


还考虑学习ANTLR或其他更现代的解析器生成器。但是Yacc的知识将对你有好处——它也将帮助你学习任何其他类似的工具,因为许多基本理论都是相似的。

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

另一条经验法则是:如果一项通用技术非常普通,以至于您已经遇到过它,那么您应该熟悉它,因为有一天您会再次看到它。谁知道呢:通过熟悉它,也许你在工具箱中添加了一个有用的工具


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

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

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

ANTLR的另一个优点是它在开发和调试语法时有很大的帮助。我还没有看到这样一个IDE支持的另一个解析系统。

是新的热点,但是仍然有很多项目使用yacc或比yacc更现代的工具。我不赞成选择使用yacc的新项目,但对于现有项目,移植到更现代的工具可能没有意义。这使得大致熟悉yacc成为一项有用的技能


如果您对解析器生成器这个主题完全不熟悉,我建议您学习一个,任何一个。许多概念在它们之间是可移植的。此外,它也是一个有用的工具:一旦你知道了一个,你就会明白它们通常比正则表达式的重手工编写的解析器更好。如果您已经熟悉解析器的主题,我就不必担心了。如果需要完成某项工作,您将在需要时学习yacc。

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

完全同意Bill-descending解析器是开发遗产的关键部分,似乎已经被遗忘了。我理解您提出的前两点(关于软件仍然存在并与yacc发生碰撞的可能性),但该公司正在放弃当前的pr