2014-03-13 76 views
1

我正在嘗試使用在https://github.com/antlr/grammars-v4處找到的antlr v4語法解析一個非常簡單的C文件。 該文件是這樣的:令牌識別錯誤:解析c語法時'#i'

#include <stdio.h> 
int main() 
{ 
    printf("hello world!"); 
    return 0; 
} 

我試圖解析這樣的文件:當我試圖解析它,我會得到錯誤

public void parse(FileInputStream myFile) throws IOException { 
    ANTLRInputStream source = new ANTLRInputStream(myFile); 
    CLexer lexer = new CLexer(source); 
    CommonTokenStream stream = new CommonTokenStream(lexer); 
    CParser parser = new CParser(stream); 
    ParseTree tree = parser.primaryExpression(); 
    ParseTreeWalker.DEFAULT.walk(new MyParseListener(), tree); 
} 

line 1:0 token recognition error at: '#i' 

我還需要做另一個步驟來處理預處理? C語法不完整?

+0

「#包括」不的一部分C語法。它與#define,#ifdef等一起由*預處理器*處理,這是一個與解析和編譯相分離的階段。 –

+0

我如何在antlr中處理這個問題呢?在解析它之前是否需要預編譯我的代碼?我是否需要爲預處理添加規則以便能夠解析我的代碼? – BjornArnelid

+0

兩種方法都可以。 –

回答

2

所提供的語法不支持#include指令,據我所知,在當前提交的版本中。

事實上#include指令是不是C語法作爲這樣的一部分,並且爲此它不是由一個編譯器,但通過一個預處理器通常處理

Definition of the C preprocessor

相關問題