【问题标题】:Is there a jflex specification of java string literals somewhere?某处是否有 java 字符串文字的 jflex 规范?
【发布时间】:2010-02-02 09:05:53
【问题描述】:

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

<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-like 字符的三行,我没有将字符本身放入字符串中,而是将其表示。 我可能会尝试使用字符方法对其进行转换,但也许我并不详尽,也许还有其他我没有处理的转义序列....所以如果有一个规范的 jflex 文件,那将是完美的。

【问题讨论】:

    标签: java lexer jflex


    【解决方案1】:

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

    字符串字面量: “字符串字符*” 字符串字符: 字符串字符 字符串字符 字符串字符 字符串字符: InputCharacter 但不是 " 或 \ 转义序列

    EscapeSequence3.10.6 中定义:

    转义序列: \ b /* \u0008: 退格 BS */ \t /* \u0009: 水平制表符 HT */ \n /* \u000a: 换行 LF */ \f /* \u000c: 换页 FF */ \r /* \u000d: 回车CR */ \ " /* \u0022: 双引号 " */ \ ' /* \u0027: 单引号 ' */ \ \ /* \u005c: 反斜杠 \ */ OctalEscape /* \u0000 到 \u00ff: 从八进制值 */ 八进制转义: \八进制数 \ 八进制数字 \ 零到三八位数字八位数字 OctalDigit:其中之一 0 1 2 3 4 5 6 7 ZeroToThree:其中之一 0 1 2 3

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

    【讨论】:

      【解决方案2】:

      是的。下载JFlex 并查看文件examples/java/java.flex。它在 JFlex 语法中定义了 Java 语言的所有词法组件。

      干杯。

      【讨论】:

        猜你喜欢
        • 2020-02-12
        • 2018-04-16
        • 2014-05-10
        • 1970-01-01
        • 2021-08-13
        • 2010-10-10
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多