2012-07-28 75 views
0

我想實現一個簡單的解析與自定義.c文件添加語法。我該怎麼辦...?與詞法分析器唯一的規則ANTLR

例如:test.c 。

// I don’t need this in output 
int func1(int a, int b); 

//I need this. 
@parseme int func2(int a, int b); 

//and this … 
@parseme 
void func3() 
{ 
Int a; 
//put here where ever 
… 
{ 
           //inside block 
       } 
return; 
} 

我想在詞法分析階段使用模糊分析方法,然後在解析器規則上用TokenRewriteStream和模板重寫記號。

那麼這是一個詞法分析器一塊...

lexer grammar Lexi; 

options {filter = true;} 

// Pick everything between @parseme and ';' or '{ }' 
METHOD 
       :    HEADER .* (';' | BODY) 
       ; 

fragment 
HEADER 
       :    '@' ('parseme' | 'PARSEME') ; 

fragment 
BODY: '{' .* '}' ; 

. 

... 問題很簡單的一個專家看: 1詞法分析器停止解析時,發現「;」之前到達最後一個「}」的「@ parseme void func3()...。 「 2- Lexer停止解析時,右側捲曲塊內發現。 3 - 當然更多的情況下還沒有測試。

問題很明顯。解決方案呢?我希望如此 !! 

謝謝。

回答

1

回答我的自我。

lexer grammar Lexi; 

options {filter = true;} 


// Pick everything between @parseme and ';' or '{}' 
METHOD 
    : METHOD_HEADER (~'{')* METHOD_END ; 

fragment 
METHOD_HEADER 
    : '@' ('parseme' | 'PARSEME') ; 

fragment 
METHOD_END 
    : (';' | BLOCK) ; 

fragment 
BLOCK 
    : '{' (~('{' | '}') | BLOCK)* '}' ; 


WS : (' '|'\r'|'\t'|'\n')+ ; 

該解決方案非常簡單。

相關問題