当前位置:  开发笔记 > 编程语言 > 正文

Yacc仍在行业中使用吗?

如何解决《Yacc仍在行业中使用吗?》经验,为你挑选了2个好方法。

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

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

编辑:鉴于响应主要是支持学习Yacc,是否有类似的语言,你会推荐yacc?



1> Bill Karwin..:

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

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

最近我听说块上有几个新孩子,但原理是一样的:你用Backus-Naur Form(BNF)和yacc/bison/中的一种或多或少的格式写一个声明性语法为您生成一些代码,手工编写将非常繁琐.

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

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



2> paxdiablo..:

我不知道使用它的新项目,但我参与了七个不同的维护工作,使用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的专家并拥有所有快速完成的模板代码.


我同意上面的语法对配置文件更好,但不是因为你声称的原因.没有时间学习是一个可怕的原因.更好的理由是XML配置文件实际上是丑陋的,膨胀的,适合程序而不是人处理.
这与没有时间学习无关.与所有业务决策一样,有一个成本效益分析 - 为什么学习一种新的方式(对我而言)更慢的方式?我经营一家企业,而不是一所教育机构.与家人一起度过的自由时间更好.
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有