Parsing ANTLR不';找不到已定义的开始规则
我面临一个奇怪的ANTLR问题,它应该只输出一个ASTParsing 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')|('
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“”作为启动状态
我看到了四个错误
- 语法名称不能包含句点。这就是你得到的语法错误。
错误消息是一条提示,告诉您ANTLR在需要令牌id 52时找到了令牌id 74,在本例中,这只是转换为“它在需要其他东西时找到了一件东西。”74=52
- 语法名(“ltxt”)和扩展名(“ltxt”)之前的文件名需要完全匹配李>
- 除非指定
output=AST,否则语法不会生成AST代码>在
部分选项
的第二种选择(format
)不会像我认为的那样。ANTLR不支持任意数量的匹配,例如字符串s的“从零到五匹配”。您需要使用该计数来重新定义规则。它们不难使用,但它们是ANTLR中比较棘手的部分之一FSTRING of string{0,5}