首页 > 解决方案 > 如何解析由多字符分隔符分隔的文本列表

问题描述

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

main: Text (Sep Text)*;

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

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

显然这行不通,

main: Text (Sep Text)*;

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

我怎样才能做到这一点?词法分析器是否可以在文本中返回单个标记?没有动作\谓词有可能吗?

标签: antlr4

解决方案


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

你可以这样做:

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

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

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

推荐阅读