gpt4 book ai didi

java - 某处是否有 jflex 规范的 java 字符串文字?

转载 作者:行者123 更新时间:2023-11-30 07:38:05 26 4
gpt4 key购买 nike

我所说的字符串文字是指那些也包含类似 \123 的字符。我写了一些东西,但我不知道它是否完美:

<STRING> {
\" { yybegin(YYINITIAL);
return new Token(TokenType.STRING,string.toString()); }
\\[0-3][0-7][0-7] { string.append( yytext() ); }
\\[0-3][0-7] { string.append( yytext() ); }
\\[0-7] { string.append( yytext() ); }
[^\n\r\"\\]+ { string.append( yytext() ); }
\\t { string.append('\t'); }
\\n { string.append('\n'); }

\\r { string.append('\r'); }
\\\" { string.append('\"'); }
\\ { string.append('\\'); }
}

事实上,我知道这并不完美,因为对于解析类似 \ddd 的字符的三行,我没有将字符本身放入字符串中,而是将其表示形式放入字符串中。我可能会尝试使用 Character 方法转换它,但也许我并不详尽,也许还有其他我没有处理的转义序列......所以如果有一个规范的 jflex 文件,那将是完美的。

最佳答案

查看 JLS 时,段落 3.10.5 String Literals ,它定义字符串文字如下:

    StringLiteral:      " StringCharacters* "    StringCharacters:      StringCharacter      StringCharacters StringCharacter    StringCharacter:      InputCharacter but not " or \      EscapeSequence

其中 EscapeSequence 定义在 3.10.6 中:

    EscapeSequence:      \ b            /* \u0008: backspace BS */      \ t            /* \u0009: horizontal tab HT */      \ n            /* \u000a: linefeed LF */      \ f            /* \u000c: form feed FF */      \ r            /* \u000d: carriage return CR */      \ "            /* \u0022: double quote " */      \ '            /* \u0027: single quote ' */      \ \            /* \u005c: backslash \ */      OctalEscape    /* \u0000 to \u00ff: from octal value */    OctalEscape:      \ OctalDigit      \ OctalDigit OctalDigit      \ ZeroToThree OctalDigit OctalDigit    OctalDigit: one of      0 1 2 3 4 5 6 7    ZeroToThree: one of      0 1 2 3

请注意,\' 也是 String 文字中的有效转义序列,目前,您仍然会错过几个转义序列。您可能还想考虑 Java 源文件中可能存在的 Unicode 转义(因此也存在于字符串文字中):\u HEX HEX HEX HEX 其中 HEX0-9 之一 | A-F.

关于java - 某处是否有 jflex 规范的 java 字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182863/

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