2010-04-21 14 views
2

J'ai cette grammaire simple pour une syntaxe C#. Je n'arrive pas à trouver un moyen de séparer les champs et les méthodes. Tous les exemples que j'ai vus pour l'analyse de C# combinent des champs et des méthodes dans la même règle. Je voudrais les séparer car mon synatx est assez simple.antlr grammaire plusieurs alternatives

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; 

Je finis toujours par l'esprit cet avertissement

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

Je ne connais pas très bien C#, et la description "syntaxe C# like" n'est pas très précise. Pourriez-vous poster quelques exemples de sources que vous allez analyser? –

Répondre

0

Depuis namespaceName peut être IDENTIFIER DOT IDENTIFIER DOT IDENTIFIER ... Je pense que vous avez des problèmes avec k = 3 dans les options.

Pouvez-vous supprimer l'option K, ANTLR sera par défaut K = *.

+0

Merci cela résolu le problème – joe

Questions connexes