如何为ANTLR4输入编写此语法表达式?
原始表达式:
<int_literal> = 0|(1 -9){0 -9}
<char_literal> = ’( ESC |~( ’|| LF | CR )) ’
<string_literal> = "{ ESC |~("|| LF | CR )}"
我尝试了以下表达式:
int_literal : '0' | ('1'..'9')('0'..'9')*;
char_literal : '('ESC' | '~'(''|'''|'LF'|'CR'))';
但它回来了:
syntax error: '' came as a complete surprise to me
syntax error: mismatched input ')' expecting SEMI while matching a rule
unterminated string literal
您的报价不匹配:
'('ESC' | '~'(''|'''|'LF'|'CR'))'
^ ^ ^ ^ ^ ^ ^
| | | | | | |
o c o c o c error
o
打开,c
关闭
我读"{ ESC |~("|| LF | CR )}"
是这样的:
// A string literal is zero or more chars other than ", , r and n
// enclosed in double quotes
StringLiteral
: '"' ( Escape | ~( '"' | '\' | 'r' | 'n' ) )* '"'
;
Escape
: '\' ???
;
还要注意,ANTLR4有短字符类([0-9]
等于'0'..'9'
(,所以您可以这样做:
IntLiteral
: '0'
| [1-9] [0-9]*
;
StringLiteral
: '"' ( Escape | ~["\rn] )* '"'
;
也不是说lexer规则以大写字母开头!否则,它们将成为解析器规则(请参阅:ANTLR中解析器规则和lexer规则之间的实际区别?(。