是否有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