0

我需要一个词法解析器来解析 C 源代码,我必须使用 Java 语言来完成。我对其进行了研究,并看到了 ANTLR 和 JAVACC。这些解析器中哪个更好用,为什么?或者你有什么其他的解析器可以推荐吗?

答案将不胜感激。谢谢。

4

2 回答 2

1

编译器通常遵循以下步骤:


  1. 词法分析(扫描仪)

  2. 语法分析(解析器)

  3. 语义分析(解析器)

  4. 中间代码生成

  5. 代码优化

  6. 代码生成


您要做的是扫描给定的源代码并计算代码中的变量和函数。这涉及前两个步骤。词法分析器将来自字符流的输入分解为标记(阶段 1),然后将标记发送到解析器(阶段 2)以识别和验证标记。您可以为其编写编译器的编程语言没有任何限制,因为您可以为任何语言的任何语言制作完整的编译器。你是设计编译器的人,你可以完全控制它的作用(你可以为希伯来语制作一个编译器——如果你有耐心的话——)

因此,对于您的情况,您可以从头开始手动编写词法分析器和解析器(这是更好的方法),或者您可以使用像JLex这样的词法分析器生成器,它可以根据非常简单的指令生成词法分析器和您的令牌的正则表达式模式。

可以在此处找到JLex的快速入门指南

于 2013-03-13T03:35:29.787 回答
1

词法分析器仅将输入流分解为标记。它们不计算任何东西,因此对于您计算简单指标的目的来说是不完整的。

如果您想将“函数”与“变量”区分开来,您将需要某种解析器来检查标记序列以确定它们所代表的内容(例如,“变量声明、使用或函数声明”)。您可以构建一个临时解析器来满足您的计数需求,但代价是偶尔会犯错误,或者您可以得到一个真正的解析器并做对。(解析一个 C 变量声明比乍一看要困难得多;它的语法相当晦涩)。

如果这是家庭作业或真正的问题,并且您不在乎答案是否错误,那么任何词法分析器生成器和临时解析代码都可能会做得很好。

如果你想准确地做到这一点,你需要一个预处理器和一个解析器,你最好寻找那些(隐含地包括一个词法分析器)。

于 2013-03-13T03:02:48.070 回答