【问题标题】:simple C language parser not compiling linux machine简单的 C 语言解析器不编译 linux 机器
【发布时间】:2013-12-09 16:39:18
【问题描述】:

我无法在编译时将所有源代码放在一起。我不知道我做错了什么,我一直在这里和那里遇到小问题,我已经解决了大部分问题(所有愚蠢的疏忽)但现在我面临另一个问题,也许这里有人可以采取看看并告诉我我做错了什么:

我正在使用 lex (flex) 和 yacc 命令行实用程序编写一个小型 C 语言解析器程序。我正在通过 SSH 连接到运行 Unix (Solaris 10) 的 SUN Oracle t4-2 主机。我从我写的 2 个文件开始:grammar.y 和grammar.l

这是我的操作的屏幕截图:

运行 yacc -d grammar.y 生成文件:y.tab.h 和 y.tab.c

运行 flex grammar.l 生成文件:lex.yy.c

然后我尝试使用 gcc *.c -o test 进行编译

然后我得到屏幕截图中显示的错误。

请比我聪明的人告诉我我做错了什么......

我们将不胜感激任何帮助

【问题讨论】:

    标签: c unix gcc yacc lex


    【解决方案1】:

    错误消息告诉您,您引用了两个函数,yyerror()computSymbolIndex(),但您尚未定义。

    对于第一个,您需要为该函数提供一个定义。它不是 yacc 提供的,但写起来不难。 (这里需要做的可能只是打印错误和exit(1)。)

    对于第二个,您需要更正您的错字。

    【讨论】:

    • 在某些系统上,您可以通过使用-ly 编译来获得默认的yyerror
    • yyerror 包含在 lex 实用程序的库中,当运行程序 lex 或 flex 时,它是否应该在输出的 flex.yy.c 文件中包含库定义?我的错字在哪里,我没有看到它
    • 天哪,我明白了!! computSymbolIndex 是错字...ComputeSymbolIndex
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2012-04-15
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多