Java中的C源代码词法解析器

时间:2013-03-13 01:57:11

标签: java parsing

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

将非常感谢答案。 感谢。

2 个答案:

答案 0 :(得分:1)

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

如果要区分“函数”和“变量”,则需要某种解析器来检查令牌序列以确定它们代表什么(例如,“变量声明,用法或函数声明”) 。您可以构建一个特殊的解析器,它可以以偶然的错误为代价满足您的计数需求,或者您可以获得真正的解析器并正确执行。 (解析C变量声明比看起来乍一看要难得多;它的语法非常神秘)。

如果这是家庭作业,或者是一个真正的问题,而你并不关心答案是否错误,那么任何词法分析器生成器和临时解析代码都可能做得很好。

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

答案 1 :(得分:1)

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


  1. Lexical Analysis(扫描仪)

  2. Syntax Analysis(Parser)

  3. Semantic Analysis(Parser)

  4. Intermediate Code Generation

  5. Code Optimization

  6. Code Generation


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

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

    可以找到 JLex 的快速入门指南here