如何在ANTLR4中不需要空格



我正在使用ANTLR4尝试解析以下文本:

ex1, ex2: examples             
var1,var2,var3: variables      

由于第二行逗号后没有空格,因此无法正确解析。如果我加上空格,它就可以工作了。我目前用来解析这个的规则:

line : list ':' name;
list : listitem (',' listitem)*;
listitem : [a-zA-Z0-9]+;
name : [a-zA-Z0-9]+;

这对于像第1行这样的行是完美的,但是对于像第2行这样的行是失败的,如果有括号或几乎任何标点符号,它需要在标点符号之后有一些空白,我不能总是保证输入。

有人知道如何解决这个问题吗?

首先添加显式词法分析器规则(以大写字母开头)。然后为空白添加词法分析器规则并忽略空白:

 line : list ':' name;
 list : listitem (',' listitem)*;
 listitem : Identifier;
 name : Identifier;

 Identifier : [a-zA-Z0-9]+; // only one lexer rule for name and listitem, since and Identifier may be a name or listitem depending only on the position
 WhiteSpace : (' '|'t') -> skip;
 NewLine : ('r'?'n'|'r') -> skip; // or don't skip if you need it as a statement terminator 

相关内容

  • 没有找到相关文章

最新更新