包含点字符的ANTLR4字符串解析

时间:2019-08-26 10:08:56

标签: antlr4

grammar h1;

column_name
    : '"' ALPHANUMERIC '.' ALPHANUMERIC '"'
    ;


ALPHA : [a-zA-Z]+ ;

fragment ALPHANUMERIC : ALPHA (ALLOWEDATTCHAR)* ;

fragment ALLOWEDATTCHAR : '-' | '_' | [0-9] | ALPHA ;

我试图匹配"Hello.World",其中单词之间的.是强制性的,但是我的语法似乎不起作用。如何解决?另外,如果可能的话,我希望在点之前和之后至少有一个字符。

1 个答案:

答案 0 :(得分:2)

您似乎想匹配"Hello.World"作为完整的令牌。如果没有,请告诉我。为此,一个非常简单的方法就足够了:

DOT: '.';
String: '"' ALPHANUMERIC ALPHANUMERIC* (DOT ALPHANUMERIC ALPHANUMERIC*)? `"`;
column_name: String;

这是String规则的作用:首先匹配双引号,然后匹配单个字母数字字符。之后,匹配零个或多个以下字母数字字符,直到看到一个点或另一个双引号为止。如果找到了DOT,则匹配另一个单字母数字字符,然后再匹配零个或更多个此类字符,直到找到双引号为止。

别忘了为空白添加规则,否则您将不得不在任何地方手动处理它们。通常,空白会被跳过或放在隐藏的频道上:

Whitespaces: [ \t\r\n]+ -> channel(HIDDEN);

这是使用稍微复杂一些的输入(Hel-lo.Wo_rld)的这种方法的解析结果:

enter image description here