我有一个类似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
答案 0 :(得分:0)
由于namespaceName可以是IDENTIFIER DOT IDENTIFIER DOT IDENTIFIER ...我认为你的选项中你有k = 3的问题。
你可以删除K选项,ANTLR默认为K = *。