Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有java字符串文本的jflex规范?_Java_Lexer_Jflex - Fatal编程技术网

是否有java字符串文本的jflex规范?

是否有java字符串文本的jflex规范?,java,lexer,jflex,Java,Lexer,Jflex,我所说的字符串文字是指那些包含类似于\123-的字符的文字。 我写了一些东西,但我不知道它是否完美: <STRING> { \" { yybegin(YYINITIAL); return new Token(TokenType.STRING,string.toString()); } \\[0-3][0-7][0-7] {

我所说的字符串文字是指那些包含类似于
\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('\\'); }
}
{
\“{yybegin(YY首字母);
返回新标记(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
的三行字符,我没有将字符本身放在字符串中,而是将其表示形式放在字符串中。
我可能会尝试使用字符方法来转换它,但也许我并不是详尽无遗的,也许还有其他转义序列我没有处理。。。。因此,如果有一个规范的jflex文件,它将是完美的。

当查看JLS段落时,它将字符串文本定义如下:

StringLiteral: " StringCharacters* " StringCharacters: StringCharacter StringCharacters StringCharacter StringCharacter: InputCharacter but not " or \ EscapeSequence 请注意,
\'
也是字符串文本中的有效转义序列,目前,您仍然缺少几个转义序列。您可能还想说明Java源文件中可能存在的Unicode转义(因此也包括字符串文本):
\u HEX HEX
,其中
HEX
0-9 | A-F

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

干杯

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