繁体   English   中英

解析时出现antlr4语法错误

[英]antlr4 grammar errors when parsing

我有以下语法:

grammar Token;

prog: (expr NL?)+ EOF;

expr: '[' type ']';

type : typeid ':' value;

typeid : 'TXT' | 'ENC' | 'USR';

value: Text | INT;

INT :   '0' | [1-9] [0-9]*;

//WS : [ \t]+;
WS  :   [ \t\n\r]+ -> skip ;
NL:  '\r'? '\n';
Text : ~[\]\[\n\r"]+ ;

我需要解析的文本如下所示

[TXT:look at me!]
[USR:19700]
[TXT:, can I go there?]
[ENC:124124]
[TXT:this is needed for you to go...]

我需要分割此文本,但运行grun.bat Token prog -gui -trace -diagnostics时会出现一些错误grun.bat Token prog -gui -trace -diagnostics

enter   prog, LT(1)=[
enter   expr, LT(1)=[
consume [@0,0:0='[',<3>,1:0] rule expr
enter   type, LT(1)=TXT:look at me!
enter   typeid, LT(1)=TXT:look at me!
line 1:1 mismatched input 'TXT:look at me!' expecting {'TXT', 'ENC', 'USR'}
... much more ...

在此处输入图片说明

我的语法有什么问题? 请帮我!

您必须了解,并不是根据解析器尝试匹配的内容来创建令牌。 词法分析器尝试匹配尽可能多的字符(独立于该解析器!):应以不同的方式定义Text令牌。

您可以改为让Text规则成为解析器规则,并匹配单个char令牌,如下所示:

grammar Token;

prog   : expr+ EOF;
expr   : '[' type ']';
type   : typeid ':' value;
typeid : 'TXT' | 'ENC' | 'USR';
value  : text | INT;
text   : CHAR+;

INT  : '0' | [1-9] [0-9]*;
WS   : [ \t\n\r]+ -> skip ;
CHAR : ~[\[\]\r\n];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM