我一直在尝试学习 ANTLR 并使用本教程(也在这个问题中引用)让它与 C 输出代码一起工作。我成功地让 ANTLR 将词法分析器和解析器生成为 C 源代码,但我无法让它们在 Mac OS X Snow Leopard (i686-apple-darwin10-gcc-4.2.1) 上使用 gcc 进行编译。下面是我尝试编译“SimpleCalcLexer.c”时的结果。
dyn-72-33-132-199:Desktop bf$ gcc -o lexer SimpleCalcLexer.c
Undefined symbols:
"_main", referenced from:
start in crt1.10.6.o
"_antlr3LexerNewStream", referenced from:
_SimpleCalcLexerNewSSD in ccjXa6NU.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
SimpleCalcLexer.c 文件在任何地方都没有引用“main”(也没有定义),但解析器确实定义了它,所以我尝试编译它:
dyn-72-33-132-199:Desktop bf$ gcc -o parser SimpleCalcParser.c
Undefined symbols:
"_antlr3CommonTokenStreamSourceNew", referenced from:
_main in ccn8ZVhk.o
"_antlr3ParserNewStream", referenced from:
_SimpleCalcParserNewSSD in ccn8ZVhk.o
"_SimpleCalcLexerNew", referenced from:
_main in ccn8ZVhk.o
"_antlr3AsciiFileStreamNew", referenced from:
_main in ccn8ZVhk.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
所以有几个问题:
1)我做错了什么?我很确定正在找到这些库,因为在代码中还发现了其他 antlr 函数和定义。我是否错误地调用 gcc?(我以前从来没有在命令行上编译过这么复杂的东西。)
2)什么是ccn8ZVhk.o
?我可以说它是一个目标代码文件,但我在我的系统上找不到它(locate
和mdfind
)。