antlr4语法 - 输入错误不匹配
antlr4 grammar - Mismatched input error
我这里有一个非常简单的语法:
grammar mygrammar;
prog : E 'arrow' ('and' E PATTERN) ;
PATTERN : ( BPATTERN | ('and' PATTERN)+ | ('or' PATTERN)+ ) ;
BPATTERN : ( L | P ('and' E PATTERN) ) ;
L : ( E | 'not' E | U | 'not' U ) ;
P : 'p' ;
U : 'u' ;
E : 'e' ;
WS : [ \t\r\n]+ -> skip ;
我解析的所有输入字符串,错误总是一样的:
行 1:0 输入不匹配 'e' 期望 'e'
如果我用 'x' 更改 'e' 标记,我得到的是相同的但里面有 'x',所以问题似乎与非终端 E 有关。
有谁知道错误在哪里?
这是因为输入 "e"
被标记为 L
标记。您需要制作 L
解析器规则而不是词法分析器规则。
解析器规则以小写字母开头,因此您可以这样尝试:
grammar mygrammar;
// parser rules
prog : E 'arrow' 'and' E pattern ;
pattern : bpattern
| ('and' pattern)+
| ('or' pattern)+
;
bpattern : l
| P 'and' E pattern
;
l : 'not'? ( E | U ) ;
// lexer rules (tokens)
P : 'p' ;
U : 'u' ;
E : 'e' ;
// skipped tokens
WS : [ \t\r\n]+ -> skip ;
我这里有一个非常简单的语法:
grammar mygrammar;
prog : E 'arrow' ('and' E PATTERN) ;
PATTERN : ( BPATTERN | ('and' PATTERN)+ | ('or' PATTERN)+ ) ;
BPATTERN : ( L | P ('and' E PATTERN) ) ;
L : ( E | 'not' E | U | 'not' U ) ;
P : 'p' ;
U : 'u' ;
E : 'e' ;
WS : [ \t\r\n]+ -> skip ;
我解析的所有输入字符串,错误总是一样的:
行 1:0 输入不匹配 'e' 期望 'e'
如果我用 'x' 更改 'e' 标记,我得到的是相同的但里面有 'x',所以问题似乎与非终端 E 有关。 有谁知道错误在哪里?
这是因为输入 "e"
被标记为 L
标记。您需要制作 L
解析器规则而不是词法分析器规则。
解析器规则以小写字母开头,因此您可以这样尝试:
grammar mygrammar;
// parser rules
prog : E 'arrow' 'and' E pattern ;
pattern : bpattern
| ('and' pattern)+
| ('or' pattern)+
;
bpattern : l
| P 'and' E pattern
;
l : 'not'? ( E | U ) ;
// lexer rules (tokens)
P : 'p' ;
U : 'u' ;
E : 'e' ;
// skipped tokens
WS : [ \t\r\n]+ -> skip ;