2010-04-21 56 views
2

我對C#語法有這樣簡單的語法。我找不出任何方法來分隔字段和方法。我見過的用於解析C#的所有示例都將相同規則中的字段和方法組合在一起。我想將它們分開,因爲我的synatx非常簡單。antlr語法多種替代方法

grammar test; 

options 
{ 
    language =CSharp2; 
    k = 3; 
    output = AST; 
} 

SEMI : ';' ; 
LCURLY : '{' ; 
RCURLY : '}' ; 
LPAREN : '(' ; 
RPAREN : ')' ; 
DOT :'.'; 

IDENTIFIER 
    : ('a'..'z' | 'A'..'Z' | '_') 
     ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')* 
    ; 

namespaceName 
    : IDENTIFIER (DOT IDENTIFIER)* 
    ; 

classDecl 
    : 'class' IDENTIFIER LCURLY (fieldDecl | methodDecl)* RCURLY 
    ; 

fieldDecl 
    : namespaceName IDENTIFIER SEMI; 
methodDecl 
    : namespaceName IDENTIFIER LPAREN RPAREN SEMI; 

我總是最後機智這個警告

Decision can match input such as "IDENTIFIER DOT IDENTIFIER" using multiple alternatives: 1, 2 
+0

我對C#不太熟悉,而且「C#like syntax」這樣的描述並不是那麼精確。你可以發佈一些你將要解析的示例源代碼嗎? – 2010-04-22 07:25:57

回答

0

由於namespaceName可以標識符DOT標識符DOT標識符......我覺得你有與你的選擇K = 3的問題。

您可以刪除K選項,ANTLR將默認爲K = *。

+0

謝謝你解決了這個問題 – joe 2010-04-22 17:47:34