当前位置: 首页 > 知识库问答 >
问题:

在ANTLR Lexer规则中包含某些擒纵符号

胡新
2023-03-14

我正在Antlr4和Python中创建一个解析器。下面是我在Antlr中创建的Lexer规则。

VARIABLE_ID :   [$][a-zA-Z][a-zA-Z0-9_]*;
ARRAY_ID    :   [*][a-zA-Z][a-zA-Z0-9_]*;
STRINGCONST :   ["][/|:.a-zA-Z0-9 ]+["];
WS          :   [ \r\t\f\n]+ -> skip;

我正在研究STRINGCONST规则,并试图添加符号,例如-~,但是,由于它们是转义字符,Antlr只是在为我抛出错误。我试着用自己的方式逃离他们,但我没能做到这一点。

有没有办法将它们包含在STRINGCONST规则中?基本思想是我希望将字符串标识为两个"标记之间的任何字符,但是我很乐意将其限制为规则中的当前内容,只要我也可以在其中获取-~

共有1个答案

蒋曾笑
2023-03-14

您可以通过在字符前面添加\来转义字符:

STRINGCONST :   ["] [/|:.a-zA-Z0-9 \-~]+ ["];

请注意,~在char类中没有特殊含义(仅在它们之外),因此不需要转义。

 类似资料:
  • 问题内容: 我们有一个Android / Blackberry项目,其中有一个共同的部分。显然,该部分被编写为可同时针对Android和Blackberry目标进行编译,因此无法使用某些较新的Java功能(例如Integer.valueOf)。我想跳过一些专门针对该部分的规则。有没有办法做到这一点? 问题答案: 如果将通用零件分离到自己的项目,则可以在Sonar中添加新的质量配置文件(在其中停用了

  • 问题内容: 我正在尝试从文本文件中读取文本,读取行,删除包含特定字符串的行(在这种情况下为“坏”和“顽皮”)。我写的代码是这样的: 我这样写,但没有成功。 重要的一件事是,如果文本的内容是这样的: 我不希望输出有空行。所以不喜欢: 但是像这样: 我应该从上面的代码中编辑什么? 问题答案: 您可以像这样使代码更简单,更易读 使用上下文管理器和任何。

  • 我试图改变我的编码为utf-8,下面是我到目前为止。 表Charset MBString安装 mbstring在 标题 HTML元标记 超文本标记语言代码 PHP SQL 要插入的PHP 应该存储的数据- 原始数据存储 添加如@Pekka所建议的,输出变成(下面也有评论) 经过一些故障排除,数据部分存储正确。 尝试通过检查字符集,并在拉取的结果上获得。 在检查firefox中的字符集时。 这似乎是

  • 问题内容: 在Python中,如何检查字符串是否仅包含某些字符? 我需要检查仅包含a..z,0..9和的字符串。(句号),没有其他字符。 我可以遍历每个字符并检查字符是a..z还是0..9或。但这会很慢。 我现在不清楚如何使用正则表达式进行操作。 这个对吗?您可以提出更简单的正则表达式还是更有效的方法? 问题答案: 决赛(?) 答案,包装在函数中,带有注释的交互式会话: 注意:在此答案中还有一个比

  • 问题内容: 我有以下问题。我需要获取UI属性: 返回字符串,并且有效。但是,如果我遍历密钥集,则永远不会得到密钥。有谁知道为什么会这样吗?我得到了三种不同的方式(,和),但这些工作的任何人。 编辑 :我也找到了JFileChooser类的属性列表,其中包含一些不会出现在键集中的属性。问题是:如何以编程方式获取所有这些属性? 编辑 :代码示例: 此代码返回打印这些属性。键不出现在输出中。 问题答案:

  • 我为我的AAR库做了C#绑定,但是扩展支持片段的片段不包括在绑定中。另外,返回类型为支持片段的其他类的方法也不包括在内。 我的继承层次结构:ScreenAFragment(公共)->PermissionsRequesterFragment(公共抽象)->BaseFragment(公共抽象)->Fragment(Android.support.v4.app包) 有人能告诉我这种行为的原因,并告诉我如