Parsing ANTLR不';找不到已定义的开始规则

Parsing ANTLR不';找不到已定义的开始规则,parsing,antlr,abstract-syntax-tree,Parsing,Antlr,Abstract Syntax Tree,我面临一个奇怪的ANTLR问题,它应该只输出一个AST grammar ltxt.g; options { language=CSharp3; } prog : start ; start : '{Start 'loopname'}'statement'{Ende 'loopname'}' | statement ; loopname : (('a'..'z')|('A'..'Z')|('

我面临一个奇怪的ANTLR问题,它应该只输出一个AST

       grammar ltxt.g;

options
{
    language=CSharp3;
}


prog    : start
    ;

start       :   '{Start 'loopname'}'statement'{Ende 'loopname'}'
        |   statement
        ;

loopname    :   (('a'..'z')|('A'..'Z')|('1'..'9'))*;
statement   :   '<%' table_ref '>'
        |   start;

table_ref   :   '{'format'}'ID;

format      :   FSTRING 
        |   FSTRING OFSTRING{0,5}
        ;
FSTRING :   '#F'
    |   '#D'
    |   '#U'
    |   '#K'
    ;

OFSTRING:   'F'
    |   'D'
    |   'U'
    |   'K'
    //| 1..65536
    ;

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


WS  :   ( ' '
        | '\t'
        | '\r'
        | '\n'
        ) {$channel=HIDDEN;}
    ;
语法ltxt.g; 选择权 { 语言=CS3; } 程序:开始 ; start:“{start'loopname'}”语句“{Ende'loopname'}” |声明 ; 循环名称:(('a'..'z')|('a'..'z')|('1'..'9'))*; 语句:“” |开始; 表_ref:'{'format'}'ID; 格式:FSTRING |字符串{0,5}的FSTRING ; FSTRING:“#F” |"D" |"你" |"K" ; OFSTRING:“F” |“D” |“你” |“K” //| 1..65536 ; ID:('a'、'z'|'a'、'z'|'a'('a'、'z'|'a'、'z'|'0'、'9'|'a')* ; WS:(“” |“\t” |“\r” |“\n” ){$channel=HIDDEN;} ; 当我试图编写这一代码时,我得到了

  • 错误(100):LTXT.g:1:13:语法错误:antlr:MismatchedTokenException(74!=52)。我没有申报任何74或52
  • 此外,我没有得到Synatx图表,因为无法找到“规则”start“”作为启动状态
我知道这不太好,但我认为它至少会起作用:)

最好的,
我看到了四个错误

  • 语法名称不能包含句点。这就是你得到的语法错误。
    74=52
    错误消息是一条提示,告诉您ANTLR在需要令牌id 52时找到了令牌id 74,在本例中,这只是转换为“它在需要其他东西时找到了一件东西。”
  • 语法名(“ltxt”)和扩展名(“ltxt”)之前的文件名需要完全匹配
  • 除非指定
    output=AST,否则语法不会生成AST
    选项
    部分
  • format
    的第二种选择(
    FSTRING of string{0,5}
    )不会像我认为的那样。ANTLR不支持任意数量的匹配,例如字符串
    s的“从零到五匹配”。您需要使用该计数来重新定义规则。它们不难使用,但它们是ANTLR中比较棘手的部分之一
我希望这能帮助你开始