📄 htmltokenmaker.flex
字号:
JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1})
JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})))
JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))
JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2})
JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD]))
JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+)
JS_Separator = ([\(\)\{\}\[\]\]])
JS_Separator2 = ([\;,.])
JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>")
JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=")
JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator})
JS_Identifier = ({IdentifierStart}{IdentifierPart}*)
JS_ErrorIdentifier = ({NonSeparator}+)
%state COMMENT
%state PI
%state DTD
%state INTAG
%state INTAG_SCRIPT
%state JAVASCRIPT
%state JS_MLC
%%
<YYINITIAL> {
"<!--" { start = zzMarkedPos-4; yybegin(COMMENT); }
"<script" {
addToken(zzStartRead,zzStartRead, Token.SEPARATOR);
addToken(zzMarkedPos-6,zzMarkedPos-1, Token.RESERVED_WORD);
start = zzMarkedPos; yybegin(INTAG_SCRIPT);
}
"<!" { start = zzMarkedPos-2; yybegin(DTD); }
"<?" { start = zzMarkedPos-2; yybegin(PI); }
"<" { addToken(Token.SEPARATOR); yybegin(INTAG); }
{LineTerminator} { addNullToken(); return firstToken; }
{Identifier} { addToken(Token.IDENTIFIER); } // Catches everything.
{AmperItem} { addToken(Token.DATA_TYPE); }
{Whitespace}+ { addToken(Token.WHITESPACE); }
<<EOF>> { addNullToken(); return firstToken; }
}
<COMMENT> {
[^\n\-]+ {}
{LineTerminator} { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; }
"-->" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.COMMENT_MULTILINE); }
"-" {}
<<EOF>> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; }
}
<PI> {
[^\n\?]+ {}
{LineTerminator} { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; }
"?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); }
"?" {}
<<EOF>> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; }
}
<DTD> {
[^\n>]+ {}
{LineTerminator} { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; }
">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.VARIABLE); }
<<EOF>> { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; }
}
<INTAG> {
"a" { addToken(Token.RESERVED_WORD); }
"abbr" { addToken(Token.RESERVED_WORD); }
"acronym" { addToken(Token.RESERVED_WORD); }
"address" { addToken(Token.RESERVED_WORD); }
"applet" { addToken(Token.RESERVED_WORD); }
"area" { addToken(Token.RESERVED_WORD); }
"b" { addToken(Token.RESERVED_WORD); }
"base" { addToken(Token.RESERVED_WORD); }
"basefont" { addToken(Token.RESERVED_WORD); }
"bdo" { addToken(Token.RESERVED_WORD); }
"bgsound" { addToken(Token.RESERVED_WORD); }
"big" { addToken(Token.RESERVED_WORD); }
"blink" { addToken(Token.RESERVED_WORD); }
"blockquote" { addToken(Token.RESERVED_WORD); }
"body" { addToken(Token.RESERVED_WORD); }
"br" { addToken(Token.RESERVED_WORD); }
"button" { addToken(Token.RESERVED_WORD); }
"caption" { addToken(Token.RESERVED_WORD); }
"center" { addToken(Token.RESERVED_WORD); }
"cite" { addToken(Token.RESERVED_WORD); }
"code" { addToken(Token.RESERVED_WORD); }
"col" { addToken(Token.RESERVED_WORD); }
"colgroup" { addToken(Token.RESERVED_WORD); }
"comment" { addToken(Token.RESERVED_WORD); }
"dd" { addToken(Token.RESERVED_WORD); }
"del" { addToken(Token.RESERVED_WORD); }
"dfn" { addToken(Token.RESERVED_WORD); }
"dir" { addToken(Token.RESERVED_WORD); }
"div" { addToken(Token.RESERVED_WORD); }
"dl" { addToken(Token.RESERVED_WORD); }
"dt" { addToken(Token.RESERVED_WORD); }
"em" { addToken(Token.RESERVED_WORD); }
"embed" { addToken(Token.RESERVED_WORD); }
"fieldset" { addToken(Token.RESERVED_WORD); }
"font" { addToken(Token.RESERVED_WORD); }
"form" { addToken(Token.RESERVED_WORD); }
"frame" { addToken(Token.RESERVED_WORD); }
"frameset" { addToken(Token.RESERVED_WORD); }
"h1" { addToken(Token.RESERVED_WORD); }
"h2" { addToken(Token.RESERVED_WORD); }
"h3" { addToken(Token.RESERVED_WORD); }
"h4" { addToken(Token.RESERVED_WORD); }
"h5" { addToken(Token.RESERVED_WORD); }
"h6" { addToken(Token.RESERVED_WORD); }
"head" { addToken(Token.RESERVED_WORD); }
"hr" { addToken(Token.RESERVED_WORD); }
"html" { addToken(Token.RESERVED_WORD); }
"i" { addToken(Token.RESERVED_WORD); }
"iframe" { addToken(Token.RESERVED_WORD); }
"ilayer" { addToken(Token.RESERVED_WORD); }
"img" { addToken(Token.RESERVED_WORD); }
"input" { addToken(Token.RESERVED_WORD); }
"ins" { addToken(Token.RESERVED_WORD); }
"isindex" { addToken(Token.RESERVED_WORD); }
"kbd" { addToken(Token.RESERVED_WORD); }
"keygen" { addToken(Token.RESERVED_WORD); }
"label" { addToken(Token.RESERVED_WORD); }
"layer" { addToken(Token.RESERVED_WORD); }
"legend" { addToken(Token.RESERVED_WORD); }
"li" { addToken(Token.RESERVED_WORD); }
"link" { addToken(Token.RESERVED_WORD); }
"map" { addToken(Token.RESERVED_WORD); }
"marquee" { addToken(Token.RESERVED_WORD); }
"menu" { addToken(Token.RESERVED_WORD); }
"meta" { addToken(Token.RESERVED_WORD); }
"multicol" { addToken(Token.RESERVED_WORD); }
"nobr" { addToken(Token.RESERVED_WORD); }
"noembed" { addToken(Token.RESERVED_WORD); }
"noframes" { addToken(Token.RESERVED_WORD); }
"nolayer" { addToken(Token.RESERVED_WORD); }
"noscript" { addToken(Token.RESERVED_WORD); }
"object" { addToken(Token.RESERVED_WORD); }
"ol" { addToken(Token.RESERVED_WORD); }
"optgroup" { addToken(Token.RESERVED_WORD); }
"option" { addToken(Token.RESERVED_WORD); }
"p" { addToken(Token.RESERVED_WORD); }
"param" { addToken(Token.RESERVED_WORD); }
"plaintext" { addToken(Token.RESERVED_WORD); }
"pre" { addToken(Token.RESERVED_WORD); }
"q" { addToken(Token.RESERVED_WORD); }
"s" { addToken(Token.RESERVED_WORD); }
"samp" { addToken(Token.RESERVED_WORD); }
"script" { addToken(Token.RESERVED_WORD); }
"select" { addToken(Token.RESERVED_WORD); }
"server" { addToken(Token.RESERVED_WORD); }
"small" { addToken(Token.RESERVED_WORD); }
"spacer" { addToken(Token.RESERVED_WORD); }
"span" { addToken(Token.RESERVED_WORD); }
"strike" { addToken(Token.RESERVED_WORD); }
"strong" { addToken(Token.RESERVED_WORD); }
"style" { addToken(Token.RESERVED_WORD); }
"sub" { addToken(Token.RESERVED_WORD); }
"sup" { addToken(Token.RESERVED_WORD); }
"table" { addToken(Token.RESERVED_WORD); }
"tbody" { addToken(Token.RESERVED_WORD); }
"td" { addToken(Token.RESERVED_WORD); }
"textarea" { addToken(Token.RESERVED_WORD); }
"tfoot" { addToken(Token.RESERVED_WORD); }
"th" { addToken(Token.RESERVED_WORD); }
"thead" { addToken(Token.RESERVED_WORD); }
"title" { addToken(Token.RESERVED_WORD); }
"tr" { addToken(Token.RESERVED_WORD); }
"tt" { addToken(Token.RESERVED_WORD); }
"u" { addToken(Token.RESERVED_WORD); }
"ul" { addToken(Token.RESERVED_WORD); }
"var" { addToken(Token.RESERVED_WORD); }
"/" { addToken(Token.RESERVED_WORD); }
{InTagIdentifier} { addToken(Token.IDENTIFIER); }
{Whitespace}+ { addToken(Token.WHITESPACE); }
"=" { addToken(Token.OPERATOR); }
">" { yybegin(YYINITIAL); addToken(Token.SEPARATOR); }
{UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); }
{StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); }
{UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); }
{CharLiteral} { addToken(Token.LITERAL_CHAR); }
<<EOF>> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; }
}
<INTAG_SCRIPT> {
{InTagIdentifier} { addToken(Token.IDENTIFIER); }
"/" { addToken(Token.RESERVED_WORD); } // Won't appear in valid HTML.
{Whitespace}+ { addToken(Token.WHITESPACE); }
"=" { addToken(Token.OPERATOR); }
">" { yybegin(JAVASCRIPT); addToken(Token.SEPARATOR); }
{UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); }
{StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); }
{UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); }
{CharLiteral} { addToken(Token.LITERAL_CHAR); }
<<EOF>> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; }
}
<JAVASCRIPT> {
/*
* NOTE: This state is essentially RText's Java token maker
* copy-and-pasted.
*/
{EndScriptTag} {
yybegin(YYINITIAL);
addToken(zzStartRead,zzStartRead, Token.SEPARATOR);
addToken(zzMarkedPos-8,zzMarkedPos-2, Token.RESERVED_WORD);
addToken(zzMarkedPos-1,zzMarkedPos-1, Token.SEPARATOR);
}
// ECMA keywords.
"break" { addToken(Token.RESERVED_WORD); }
"continue" { addToken(Token.RESERVED_WORD); }
"delete" { addToken(Token.RESERVED_WORD); }
"else" { addToken(Token.RESERVED_WORD); }
"for" { addToken(Token.RESERVED_WORD); }
"function" { addToken(Token.RESERVED_WORD); }
"if" { addToken(Token.RESERVED_WORD); }
"in" { addToken(Token.RESERVED_WORD); }
"new" { addToken(Token.RESERVED_WORD); }
"return" { addToken(Token.RESERVED_WORD); }
"this" { addToken(Token.RESERVED_WORD); }
"typeof" { addToken(Token.RESERVED_WORD); }
"var" { addToken(Token.RESERVED_WORD); }
"void" { addToken(Token.RESERVED_WORD); }
"while" { addToken(Token.RESERVED_WORD); }
"with" { addToken(Token.RESERVED_WORD); }
// Reserved (but not yet used) ECMA keywords.
"abstract" { addToken(Token.RESERVED_WORD); }
"boolean" { addToken(Token.DATA_TYPE); }
"byte" { addToken(Token.DATA_TYPE); }
"case" { addToken(Token.RESERVED_WORD); }
"catch" { addToken(Token.RESERVED_WORD); }
"char" { addToken(Token.DATA_TYPE); }
"class" { addToken(Token.RESERVED_WORD); }
"const" { addToken(Token.RESERVED_WORD); }
"debugger" { addToken(Token.RESERVED_WORD); }
"default" { addToken(Token.RESERVED_WORD); }
"do" { addToken(Token.RESERVED_WORD); }
"double" { addToken(Token.DATA_TYPE); }
"enum" { addToken(Token.RESERVED_WORD); }
"export" { addToken(Token.RESERVED_WORD); }
"extends" { addToken(Token.RESERVED_WORD); }
"final" { addToken(Token.RESERVED_WORD); }
"finally" { addToken(Token.RESERVED_WORD); }
"float" { addToken(Token.DATA_TYPE); }
"goto" { addToken(Token.RESERVED_WORD); }
"implements" { addToken(Token.RESERVED_WORD); }
"import" { addToken(Token.RESERVED_WORD); }
"instanceof" { addToken(Token.RESERVED_WORD); }
"int" { addToken(Token.DATA_TYPE); }
"interface" { addToken(Token.RESERVED_WORD); }
"long" { addToken(Token.DATA_TYPE); }
"native" { addToken(Token.RESERVED_WORD); }
"package" { addToken(Token.RESERVED_WORD); }
"private" { addToken(Token.RESERVED_WORD); }
"protected" { addToken(Token.RESERVED_WORD); }
"public" { addToken(Token.RESERVED_WORD); }
"short" { addToken(Token.DATA_TYPE); }
"static" { addToken(Token.RESERVED_WORD); }
"super" { addToken(Token.RESERVED_WORD); }
"switch" { addToken(Token.RESERVED_WORD); }
"synchronized" { addToken(Token.RESERVED_WORD); }
"throw" { addToken(Token.RESERVED_WORD); }
"throws" { addToken(Token.RESERVED_WORD); }
"transient" { addToken(Token.RESERVED_WORD); }
"try" { addToken(Token.RESERVED_WORD); }
"volatile" { addToken(Token.RESERVED_WORD); }
"null" { addToken(Token.RESERVED_WORD); }
// Literals.
"false" { addToken(Token.LITERAL_BOOLEAN); }
"true" { addToken(Token.LITERAL_BOOLEAN); }
"NaN" { addToken(Token.RESERVED_WORD); }
"Infinity" { addToken(Token.RESERVED_WORD); }
// Functions.
"eval" { addToken(Token.FUNCTION); }
"parseInt" { addToken(Token.FUNCTION); }
"parseFloat" { addToken(Token.FUNCTION); }
"escape" { addToken(Token.FUNCTION); }
"unescape" { addToken(Token.FUNCTION); }
"isNaN" { addToken(Token.FUNCTION); }
"isFinite" { addToken(Token.FUNCTION); }
{LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; }
{JS_Identifier} { addToken(Token.IDENTIFIER); }
{Whitespace}+ { addToken(Token.WHITESPACE); }
/* String/Character literals. */
{JS_CharLiteral} { addToken(Token.LITERAL_CHAR); }
{JS_UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); }
{JS_UnclosedErrorCharLiteral} { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; }
{JS_ErrorCharLiteral} { addToken(Token.ERROR_CHAR); }
{JS_StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); }
{JS_UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; }
{JS_UnclosedErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; }
{JS_ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); }
/* Comment literals. */
"/**/" { /* Silly we have to do this. */ addToken(Token.COMMENT_MULTILINE); }
{JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); }
{JS_LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; }
/* Separators. */
{JS_Separator} { addToken(Token.SEPARATOR); }
{JS_Separator2} { addToken(Token.IDENTIFIER); }
/* Operators. */
{JS_Operator} { addToken(Token.OPERATOR); }
/* Numbers */
{JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); }
{JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); }
{JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); }
{JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); }
{JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); }
/* Ended with a line not in a string or comment. */
<<EOF>> { addEndToken(INTERNAL_IN_JS); return firstToken; }
/* Catch any other (unhandled) characters and flag them as bad. */
. { addToken(Token.ERROR_IDENTIFIER); }
}
<JS_MLC> {
// JavaScript MLC's. This state is essentially Java's MLC state.
[^\n\*]+ {}
\n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; }
{JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); }
\* {}
<<EOF>> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -