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

ANTLR4-需要对此字符串文本进行解释

步兴为
2023-03-14

在我的作业中,我对字符串Lexer有以下描述:

“字符串文字由零个或多个用双引号(”“)括起的字符组成。使用转义序列(如下所列)表示字符串中的特殊字符。在字符串文本中出现新行或EOF字符是编译时错误。

所有支持的转义序列如下:

\b退格

\f formfeed

\r回车

\n换行符

\t水平选项卡

\“双引号

\反斜杠

以下是字符串文字的有效示例:

"这是一个包含制表符\t的字符串"

"他问我:\"John在哪?\"

字符串文字具有字符串类型。"

这是我的String词法分析器:

STRINGLIT: '"'(('\\'('b'|'t'|'n'|'f'|'r'|'\"'|'\\'))|~('\n'))*'"';

有人能检查一下我的lexer是否符合要求吗?如果不是,请告诉我您的更正,我不太理解要求和ANTLR4。

共有1个答案

满博
2023-03-14

使用ANTLR4,您可以编写btn,而不是编写代码('b''t''n')。此外,正如J Earls在评论中提到的那样,您需要在否定集中包括引号,以及文字。

这应该可以做到:

STRINGLIT
 : '"' ( '\\' [btnfr"'\\] | ~[\r\n\\"] )* '"'
 ;
 类似资料:
  • 如果在antlr4 lexer中有一个ONELINE_STRING片段规则标识一行上的一个简单引号字符串,那么如何在lexer中创建一个更通用的字符串规则,该规则将相邻的ONELINE_STRING连接起来(即,只要它们都在不同的行上开始,仅用空格和/或注释分隔)? 即, 将被解析为两个字符串标记,“foo”后跟“bar” 同时: 示例1: Sample3(注意,'output'是该语言中的关键字

  • 代码: 产出:4 1 [代码连结][1] 前缀运算符的优先级高于逻辑运算符。2.逻辑<代码> 怀疑: > 为什么这里不遵循第一条规则?这不应该是正确的吗? 因此,在printf语句中,的值变为5。 为什么这里违反了一般的优先规则?当两个运算符的优先级相同时,关联性开始起作用。编译器不应该首先查看是计算还是

  • 本文向大家介绍Java对字符串进行加密解密,包括了Java对字符串进行加密解密的使用技巧和注意事项,需要的朋友参考一下 要求:    *  对用户输入的每个字符的值进行加密,将解密后的字符串输出    *  对用户输入的已加密字符串进行解密并输出 实现代码: 运行结果: *加密过程: 请输入一个英文字符串或揭秘字符串: I Love You 加密或者解密之后的结果如下: 乩一乬乏乖久一乹乏乕 *解

  • 我一直在此对象上收到JSON解析错误 “DC008”:“PD가격 $2.90/码에서 시작#10#10티앤티 난단에 나염작업#10#10나염비 \4000/YD(数字전사)#1010%损失#10#10판매가 수정 $7.30/码- 但我不知道哪个角色藏在这个物体里。 谁能帮帮我吗 字符串中的btw#10是从\n转换而来的

  • 问题内容: 我正在尝试使用JDK java.net.URI构建URI 。 我想附加一个绝对URI对象,一个查询(在String中)。例如: 理论(或我的想法)是决心应该返回: 但是我得到的是: 为什么#resolve() “吃掉”最后一条路?如果新的URI()构建为: 效果很好。 问题答案: 我想回应一下自己。Javadoc确实可以正确解释。如URI#resolve()所述,在第3.b节中: 否则

  • 问题内容: 我有一个相当大的python 2.6应用程序,上面散布着许多打印语句。我一直在使用unicode字符串,通常效果很好。但是,如果我重定向应用程序的输出(例如“ myapp.py> output.txt”),则有时会出现如下错误: 我猜如果有人将LOCALE设置为ASCII也会出现相同的问题。现在,我完全理解此错误的原因。我的Unicode字符串中有些字符无法用ASCII编码。很公平。但