【发布时间】:2023-07-20 06:15:01
【问题描述】:
我需要解析不同文件的源代码,每个文件都用不同的语言编写,我想用 C 来做。
为此,我正在考虑使用yacc / lex,但我发现它们很难理解,可能是由于完全缺乏体面的文档(要么是这样,要么它们真的很神秘)。
所以我的问题是:我在哪里可以找到yacc / lex 的一些好的文档,最好是教程风格的介绍?或者,有没有更好的方法在 C 中做到这一点?也许我可以用其他东西代替yacc / lex,甚至可以用不同的语言编写?
【问题讨论】:
-
我想你会发现,与为真正的语言构建一个解析器相比,学习如何使用 yacc 和 lex 是一件小事,更不用说多个解析器了。最好简单地获取已经构建的解析器;参见 www.antlr.org 作为一个选项。
-
yacc/lex/bison/等。几乎死了。我看不出学习它们的意义,除非它是纯粹的教育追求。有很多解析器生成器更适合这项任务:en.wikipedia.org/wiki/Comparison_of_parser_generators
-
@Gene Bushuyev,我对这个领域很陌生。我看到很多选择,但我不知道该寻找什么。我很可能会解析 PHP、HTML、CSS 和 JavaScript,而我实现应用程序所使用的语言很可能是 C 或 Java。我应该看哪些?
-
@Radu:这是我个人经验的看法,其他人可能不同意,我不会争论。我不喜欢带有自己的语法然后为目标语言生成代码的解析器生成器。它们是维护的噩梦,词法结构和代码之间几乎没有相似之处,调试、扩展困难,以及大量浪费的开发时间。我不再使用构建解析树的解析器,将遍历和语义留给你——性能差、缺乏表现力、复杂的遍历代码。