Parsing ANTLR4-逐行解析文件
我试图写一个语法来逐行解析文件 我的语法是这样的:Parsing ANTLR4-逐行解析文件,parsing,antlr4,Parsing,Antlr4,我试图写一个语法来逐行解析文件 我的语法是这样的: grammar simple; parse: (line NL)* EOF line : statement1 | statement2 | // empty line ; statement1 : KW1 (INT|FLOAT); statement2 : KW2 INT; ... NL : '\r'? '\n'
grammar simple;
parse: (line NL)* EOF
line
: statement1
| statement2
| // empty line
;
statement1 : KW1 (INT|FLOAT);
statement2 : KW2 INT;
...
NL : '\r'? '\n';
WS : (' '|'\t')-> skip; // toss out whitespace
如果输入文件中的最后一行没有换行符,我会收到以下错误消息:
line xx:37 missing NL at <EOF>
第xx行:37处缺少NL
有人能解释一下,如何编写一个语法,实际上接受最后一行而不使用换行符,而不要求
NL
落在最后一行之后。由于行
可以匹配空序列(基本上最后一行始终是空行),因此该表单是有效的,并且是简化的
如果行
不允许为空,则以下规则有效并执行相同的操作:
// best if `line` cannot be empty
parse
: (line (NL line)* NL?)? EOF
;
以下规则适用于行
不能为空,但效率要低得多的情况。我之所以将其包括在内,是因为我经常看到人们以这种形式编写规则,很容易看到特定的NL
标记是可选的,它位于最后一行之后
// INEFFICIENT!
parse
: (line NL)* (line NL?)? EOF
;
// INEFFICIENT!
parse
: (line NL)* (line NL?)? EOF
;