antlr - ANTLR 不匹配空注释
问题描述
我正在使用 ANTLR 解析一种语言,该语言使用冒号作为注释指示符和“变得等于”分配的一部分。所以例如在这条线上
Index := 2 :Set Index
我需要将第一部分识别为赋值语句,将第二个冒号后面的文本识别为注释。目前我使用以下规则执行此操作:
COMMENT : ':'+ ~[:='\r\n']*;
除了冒号紧跟新行之外,这似乎工作正常。例如在线
Index := 2 :
换行符紧跟在第二个冒号之后。在这种情况下,注释无法识别,其余代码未在正确的上下文中解析。如果第二个冒号后有一个空格,则该行被正确解析。
我希望 '\r'\n' 能够解决这个问题,但它似乎只有在注释符号后至少有一个字符时才有效 - 我是否错过了命令中的某些内容?
解决方案
大括号表示没有任何引号的字符集合。因此,您的 '\r\n' 文字在那里不起作用(您应该收到一个警告,即撇号在 char 范围内不止一次包含。
改为定义这样的注释:
COMMENT: ':'+ ~[:=\n\r]*;
推荐阅读
- angular7 - Angular 7图像缩放不适用于鼠标悬停
- android - 无法将 mipmap/icon 重命名为 ic_launcher?
- python - 新手:在抓取 Tripadvisor 点评时,Python “AttributeError: 'NoneType' object has no attribute 'text'”
- ruby-on-rails - 无法覆盖 Spree 的助手方法
- python-3.x - 如何将 1,300,000 张图像制作成一个数组文件?
- windows - 如何从詹金斯的远程Windows共享下载文件?
- c# - DBContext 如何在 C# 中处理多个用户会话
- django - 无法获取属性“CronTrigger”
- cmake - 如何修复创建使用 PRIVATE include_directories 的库的 cmake 配置
- c# - 如何使用来自多线程事件的快速数据更新 ObservableCollection?