簡體   English   中英

在C中編譯ANTLR 3語法

[英]Compiling an ANTLR 3 grammar in C

我一直在嘗試學習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 我可以告訴它它是一個目標代碼文件,但我在我的系統上找不到它( locatemdfind )。

您需要將詞法分析器和解析器編譯為相同的可執行文件; 他們共同努力創建一個單一的計划。 嘗試這個:

gcc -o lexer SimpleCalcLexer.c SimpleCalcParser.c -lantlr3c

該命令行將編譯詞法分析器和解析器,然后將結果與ANTLR庫(“-lantlr3c”部分)鏈接。

目標文件ccn8ZVhk.o是運行時庫的一部分,實際上是調用main()。 它不包含用戶可維修的部件。

如果你多次編譯,你會發現目標代碼文件名每次都會改變,所以我猜它們是在編譯和鏈接最終目標之前使用的臨時目標文件。 遇到了同樣的問題,我嘗試將架構指定為386和686.我正在嘗試編譯此Python3語法文件的輸出。 CajunLuke,你可以發布你用來編譯的確切命令嗎? 以下是我所做的一個示例:

WOPR:plex pokstad$ gcc -arch i686 -o lexer python3Lexer.c python3Parser.c -lantlr3c
Undefined symbols:
"_main", referenced from:
  start in crt1.10.6.o
"_python3Lexer_syntetizeEmptyString", referenced from:
  _mLEADING_WS in ccGDusga.o
"_python3Lexer_createLexerToken", referenced from:
  _mCONTINUED_LINE in ccGDusga.o
  _mLEADING_WS in ccGDusga.o
"_python3Lexer_initLexer", referenced from:
  _python3LexerNewSSD in ccGDusga.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

另外,您是否編譯了ANTLR3C運行時與通常的“configure; make; make install”不同? 我嘗試使用64位選項進行編譯,我遇到了同樣的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM