我有一个创建词法分析器的任务,除了一点之外,我已经一切正常。我需要创建一个接受新行的字符串,并且该字符串由双引号分隔。该字符串接受任何数字、字母、某些指定的标点符号、反斜杠和分隔符内的双引号。我似乎不知道如何转义新行字符。是否有某种方法可以转义换行符和制表符等字符?
这是我的一些代码,可能会有所帮助
< 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>
匹配将由四个字符组成:一个引号,后跟一个表示换行符的转义序列,最后是一个引号。
在您当前的定义中,我发现其他经常转义的元字符(例如引号和反斜杠)也被按字面识别,而不是转义序列。
我是一名优秀的程序员,十分优秀!