antlr4 - 如何解析由多字符分隔符分隔的文本列表
问题描述
要解析逗号分隔的文本列表(不允许逗号转义),我可以使用它,
main: Text (Sep Text)*;
Sep: ',';
Text: ~','*;
现在我想修改解析器以使用两个逗号而不是一个逗号作为分隔符。
显然这行不通,
main: Text (Sep Text)*;
Sep: ',,';
Text: ~',,'*;
我怎样才能做到这一点?词法分析器是否可以在文本中返回单个标记?没有动作\谓词有可能吗?
解决方案
不,您不能否定 2 个(或更多)字符(~',,'
无效)。
你可以这样做:
main : Text (sep Text)* EOF;
sep : Comma Comma;
Comma : ',';
Text : ~',' ( ~',' | ',' ~',' )*;
WhereText
匹配非逗号 ( ~','
),后跟零个或多个:
- 非逗号 (
~','
),或 - 一个逗号,后跟一个非逗号 (
',' ~','
)
推荐阅读
- azure - Azure 静态网站构建管道 -> Blob 上传
- c# - 如何在考虑空值的同时在 Linq 中使用 2 个表达式实现连接?
- java - Maven javadoc插件3.1.0不生成聚合javadocs
- javascript - 如何使用来自 response.write 的数据
- c# - 为什么它给我错误 CS1525 ?? 有什么不好?
- css - 颜色以数字结尾的单词?
- javascript - 在同一页面上集成和通信多个 Angular 应用程序 (SPA)
- c++ - 将 _Assembly 转换为 VARIANT
- html - 将文本移出图像后如何隐藏文本?
- r - 如何使用 Rmarkdown 编写基于 LaTeX 模板的学术论文