ANTLR4输入语法



如何为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规则之间的实际区别?(。

相关内容

  • 没有找到相关文章

最新更新