gpt4 book ai didi

string - 如何在JavaCC中使用反斜杠转义字符换行?

转载 作者:太空宇宙 更新时间:2023-11-04 15:20:38 25 4
gpt4 key购买 nike

我有一个创建词法分析器的任务,除了一点之外,我已经一切正常。我需要创建一个接受新行的字符串,并且该字符串由双引号分隔。该字符串接受任何数字、字母、某些指定的标点符号、反斜杠和分隔符内的双引号。我似乎不知道如何转义新行字符。是否有某种方法可以转义换行符和制表符等字符?

这是我的一些代码,可能会有所帮助

< STRING : ( < QUOTE> (< QUOTE > | < BACKSLASH > | < ID > | < NUM > | " " )* <QUOTE>) >
< #QUOTE : "\"" >
< #BACKSLASH : "\\" >

所以我的字符串应该允许引用,然后是以下任何字符,如反斜杠、空格、数字等,然后是另一个引号。像“\n”这样的换行符不起作用。提前致谢!

最佳答案

对于字符串文字,JavaCC 借用了 Java 的语法。因此,包含回车符的单字 rune 字被转义为 "\r" ,并且包含换行符的单字 rune 字被转义为“\n ”。

但是,处理后的字符串值只是单个字符;这并不是逃避本身。因此,假设您定义了一个换行标记:

< LF : "\n" >

token <LF> 的匹配将是单个换行字符。当在另一个标记的定义中替换该标记时,单个字符被有效地替换。因此,假设您有更高级别的定义:

< STRING : "\"" ( <LF> ) "\"" >

token <STRING> 的匹配将由三个字符组成:一个引号,后跟一个换行符,再后跟一个引号。您似乎想要的是识别转义序列:

< STRING : "\"" ( "\\n" ) "\"" >

现在 token <STRING> 匹配将由四个字符组成:一个引号,后跟一个表示换行符的转义序列,最后是一个引号。

在您当前的定义中,我发现其他经常转义的元字符(例如引号和反斜杠)也被按字面识别,而不是转义序列。

关于string - 如何在JavaCC中使用反斜杠转义字符换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com