antlr语法多种选择

时间:2010-04-21 21:34:01

标签: antlr

我有一个类似C#语法的简单语法。我无法找出任何分离字段和方法的方法。我在解析C#时看到的所有示例都将相同规则中的字段和方法组合在一起。我想将它们分开,因为我的synatx非常简单。

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

1 个答案:

答案 0 :(得分:0)

由于namespaceName可以是IDENTIFIER DOT IDENTIFIER DOT IDENTIFIER ...我认为你的选项中你有k = 3的问题。

你可以删除K选项,ANTLR默认为K = *。