如何解析由多字符分隔符分隔的文本列表

时间:2019-04-17 12:27:06

标签: antlr4

要解析以逗号分隔的文本列表(不允许使用逗号转义),我可以使用它,

main: Text (Sep Text)*;

Sep: ',';
Text: ~','*;

现在,我想修改解析器以使用两个逗号而不是一个逗号作为分隔符。

显然这不起作用

main: Text (Sep Text)*;

Sep: ',,';
Text: ~',,'*;

我该如何完成?词法分析器是否可能返回带有文本的单个标记?没有动作\谓词就可以吗?

1 个答案:

答案 0 :(得分:1)

否,您不能取反2个(或更多)字符(~',,'无效)。

您可以这样做:

main  : Text (sep Text)* EOF;
sep   : Comma Comma;
Comma : ',';
Text  : ~',' ( ~',' | ',' ~',' )*;

Text与非逗号(~',')匹配,后跟零个或多个:

  • 非逗号(~',')或
  • 单个逗号,后跟一个非逗号(',' ~','