要解析以逗号分隔的文本列表(不允许使用逗号转义),我可以使用它,
main: Text (Sep Text)*;
Sep: ',';
Text: ~','*;
现在,我想修改解析器以使用两个逗号而不是一个逗号作为分隔符。
显然这不起作用
main: Text (Sep Text)*;
Sep: ',,';
Text: ~',,'*;
我该如何完成?词法分析器是否可能返回带有文本的单个标记?没有动作\谓词就可以吗?
答案 0 :(得分:1)
否,您不能取反2个(或更多)字符(~',,'
无效)。
您可以这样做:
main : Text (sep Text)* EOF;
sep : Comma Comma;
Comma : ',';
Text : ~',' ( ~',' | ',' ~',' )*;
Text
与非逗号(~','
)匹配,后跟零个或多个:
~','
)或',' ~','
)