⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csharptokenmaker.flex

📁 具有不同语法高亮的编辑器实例
💻 FLEX
📖 第 1 页 / 共 2 页
字号:
/*
CombiningCharacter						= ()
*/
DecimalDigitCharacter					= ([0-9])
ConnectingCharacter						= ([_\-])
/*
FormattingCharacter						= ()
*/
/*
IdentifierPartCharacter					= ({LetterCharacter}|{DecimalDigitCharacter}|{ConnectingCharacter}|{CombiningCharacter}|{FormattingCharacter})
*/
IdentifierPartCharacter					= ({LetterCharacter}|{DecimalDigitCharacter}|{ConnectingCharacter})
IdentifierPartCharacters					= ({IdentifierPartCharacter}+)
IdentifierStartCharacter					= ({LetterCharacter}|[_])
IdentifierOrKeyword						= ({IdentifierStartCharacter}{IdentifierPartCharacters}?)
Identifier							= ("@"?{IdentifierOrKeyword})
/* NOTE:  The two below aren't from the C# spec, but we add them so we can */
/* highlight errors.                                                       */
NonSeparator		= (([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\"))
ErrorIdentifier						= ({NonSeparator}+)

/* C1.8 - Literals. */
BooleanLiteral							= ("true"|"false")
DecimalDigit							= ([0-9])
DecimalDigits							= ({DecimalDigit}+)
IntegerTypeSuffix						= (([uU][lL]?)|([lL][uU]?))
DecimalIntegerLiteral					= ({DecimalDigits}{IntegerTypeSuffix}?)
HexDigit								= ([0-9A-Fa-f])
HexDigits								= ({HexDigit}+)
HexadecimalIntegerLiteral				= ("0"[xX]{HexDigits}{IntegerTypeSuffix}?)
Sign									= ([+\-])
ExponentPart							= ([eE]{Sign}?{DecimalDigits})
RealTypeSuffix							= ([fFdDmM])
RealHelper1							= ({DecimalDigits}"."{DecimalDigits}{ExponentPart}?{RealTypeSuffix}?)
RealHelper2							= ("."{DecimalDigits}{ExponentPart}?{RealTypeSuffix}?)
RealHelper3							= ({DecimalDigits}{ExponentPart}{RealTypeSuffix}?)
RealHelper4							= ({DecimalDigits}{RealTypeSuffix})
RealLiteral							= ({RealHelper1}|{RealHelper2}|{RealHelper3}|{RealHelper4})
ErrorNumberFormat						= (({DecimalIntegerLiteral}|{HexadecimalIntegerLiteral}|{RealLiteral}){NonSeparator}+)
SingleCharacter						= ([^\'\\\n])
SimpleEscapeSequence					= ("\\"[\'\"\\0abfnrtv])
HexadecimalEscapeSequence				= ("\\x"{HexDigit}{HexDigit}?{HexDigit}?{HexDigit}?)
Character								= ({SingleCharacter}|{SimpleEscapeSequence}|{HexadecimalEscapeSequence}|{UnicodeEscapeSequence})
UnclosedCharacterLiteral					= ("'"{Character})
CharacterLiteral						= ({UnclosedCharacterLiteral}"'")
ErrorUnclosedCharacterLiteral				= ("'"[^\'\n]*)
ErrorCharacterLiteral					= ("''"|{ErrorUnclosedCharacterLiteral}[\'])
QuoteEscapeSequence						= ("\"\"")
SingleVerbatimStringLiteralCharacter		= ([^\"])
VerbatimStringLiteralStart				= ("@\"")
SingleRegularStringLiteralCharacter		= ([^\"\\\n])
RegularStringLiteralCharacter				= ({SingleRegularStringLiteralCharacter}|{SimpleEscapeSequence}|{HexadecimalEscapeSequence}|{UnicodeEscapeSequence})
RegularStringLiteralCharacters			= ({RegularStringLiteralCharacter}+)
UnclosedRegularStringLiteral				= ("\""{RegularStringLiteralCharacters}?)
RegularStringLiteral					= ({UnclosedRegularStringLiteral}"\"")
ErrorUnclosedRegularStringLiteral			= ([\"]([^\"\n]|"\\\"")*)
ErrorRegularStringLiteral				= ({ErrorUnclosedRegularStringLiteral}"\"")

/* C.1.9 - Operators and Punctuators. */
OOPHelper1							= (":")
OOPHelper2							= ("+"|"-"|"*"|"/"|"%"|"&"|"|"|"^"|"!"|"~")
OOPHelper3							= ("="|"<"|">"|"?"|"++"|"--"|"&&"|"||"|"<<"|">>")
OOPHelper4							= ("=="|"!="|"<="|">="|"+="|"-="|"*="|"/="|"%="|"&=")
OOPHelper5							= ("|="|"^="|"<<="|">>="|"->")
OperatorOrPunctuator					= ({OOPHelper1}|{OOPHelper2}|{OOPHelper3}|{OOPHelper4}|{OOPHelper5})
/* NOTE:  We distinguish between operators and separators (punctuators), but */
/* the C# spec doesn't, so the stuff below isn't in the spec.                */
Separator								= ([\{\}\[\]\(\)])
Separator2							= ([,;])

/* C.1.10 - Pre-processing Directives. */
/* NOTE:  We don't do ALL of the PP stuff here as it's unnecessary  */
/* for us to know the difference between declarations, diagnostics, */
/* regions, etc.                                                    */
ConditionalSymbol						= ({IdentifierOrKeyword})	/* Not correct - excludes "true" and "false". */
PPNewLine								= ({Whitespace}?{SingleLineComment}?{NewlineCharacter})
PPPrimaryExpression						= ({IdentifierOrKeyword}|({Whitespace}?{PPExpression}{Whitespace}?))
PPUnaryExpression						= ({PPPrimaryExpression}|("!"{Whitespace}?{PPUnaryExpression}))
PPEqualityExpression					= ({PPUnaryExpression}|({Whitespace}?"=="{Whitespace}?{PPUnaryExpression})|({Whitespace}?"!="{Whitespace}?{PPUnaryExpression}))
PPAndExpression						= ({PPEqualityExpression}|({Whitespace}?"&&"{Whitespace}?{PPEqualityExpression}))
PPOrExpression							= ({PPAndExpression}|({Whitespace}?"||"{Whitespace}?{PPAndExpression}))
PPExpression							= ({Whitespace}?{PPOrExpression}{Whitespace}?)
PPWord								= ("define"|"undef"|"if"|"elif"|"else"|"endif"|"line"|"error"|"warning"|"region"|"endregion")
PPDirective							= ({Whitespace}?"#"{Whitespace}?{PPWord}{InputCharacter}*)


%state DELIMITEDCOMMENT
%state DOCUMENTCOMMENT
%state VERBATIMSTRING

%%

/* Keywords */
<YYINITIAL> "abstract"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "as"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "base"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "break"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "case"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "catch"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "checked"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "class"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "const"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "continue"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "decimal"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "default"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "delegate"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "do"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "else"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "enum"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "event"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "explicit"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "extern"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "finally"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "fixed"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "for"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "foreach"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "goto"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "if"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "implicit"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "in"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "interface"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "internal"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "is"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "lock"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "namespace"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "new"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "null"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "object"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "operator"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "out"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "override"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "params"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "private"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "protected"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "public"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "readonly"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "ref"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "return"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "sealed"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "sizeof"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "stackalloc"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "static"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "string"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "struct"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "switch"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "this"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "throw"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "try"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "typeof"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "unchecked"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "unsafe"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "using"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "virtual"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "void"				{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "volatile"			{ addToken(Token.RESERVED_WORD); }
<YYINITIAL> "while"				{ addToken(Token.RESERVED_WORD); }

/* Data types. */
<YYINITIAL> "bool"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "byte"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "char"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "double"				{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "float"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "int"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "long"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "object"				{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "sbyte"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "short"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "string"				{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "uint"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "ulong"					{ addToken(Token.DATA_TYPE); }
<YYINITIAL> "ushort"				{ addToken(Token.DATA_TYPE); }


<YYINITIAL> {

	{NewlineCharacter}					{ addNullToken(); return firstToken; }

	{BooleanLiteral}					{ addToken(Token.LITERAL_BOOLEAN); }

	{Identifier}						{ addToken(Token.IDENTIFIER); }

	{Whitespace}						{ addToken(Token.WHITESPACE); }

	/* String/Character Literals. */
	{CharacterLiteral}					{ addToken(Token.LITERAL_CHAR); }
	{UnclosedCharacterLiteral}			{ addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ }
	{ErrorUnclosedCharacterLiteral}		{ addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; }
	{ErrorCharacterLiteral}				{ addToken(Token.ERROR_CHAR); }
	{VerbatimStringLiteralStart}			{ start = zzMarkedPos-2; yybegin(VERBATIMSTRING); }
	{RegularStringLiteral}				{ addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); }
	{UnclosedRegularStringLiteral}		{ addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; }
	{ErrorUnclosedRegularStringLiteral}	{ addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; }
	{ErrorRegularStringLiteral}			{ addToken(Token.ERROR_STRING_DOUBLE); }

	/* Comments. */
	{DelimitedCommentStart}				{ start = zzMarkedPos-2; yybegin(DELIMITEDCOMMENT); }
	{DocumentationCommentStart}			{ start = zzMarkedPos-3; yybegin(DOCUMENTCOMMENT); }
	{SingleLineComment}					{ addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; }

	/* Separators. */
	{Separator}						{ addToken(Token.SEPARATOR); }
	{Separator2}						{ addToken(Token.IDENTIFIER); }

	/* Operators. */
	{OperatorOrPunctuator}				{ addToken(Token.OPERATOR); }

	/* Numbers */
	{DecimalIntegerLiteral}				{ addToken(Token.LITERAL_NUMBER_DECIMAL_INT); }
	{HexadecimalIntegerLiteral}			{ addToken(Token.LITERAL_NUMBER_HEXADECIMAL); }
	{RealLiteral}						{ addToken(Token.LITERAL_NUMBER_FLOAT); }
	{ErrorNumberFormat}					{ addToken(Token.ERROR_NUMBER_FORMAT); }

	/* Preprocessor directives. */
	{PPDirective}						{ addToken(Token.PREPROCESSOR); }

	/* Pretty-much anything else. */
	{ErrorIdentifier}					{ addToken(Token.ERROR_IDENTIFIER); }

	/* Ended with a line not in a string or comment. */
	<<EOF>>							{ addNullToken(); return firstToken; }

	/* Catch any other (unhandled) characters and flag them as bad. */
	.								{ addToken(Token.ERROR_IDENTIFIER); }

}


<DELIMITEDCOMMENT> {

	[^\n\*]+						{}
	\n							{ addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; }
	{DelimitedCommentEnd}			{ yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); }
	\*							{}
	<<EOF>>						{ addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; }

}


<DOCUMENTCOMMENT> {

	[^\<\n]*						{}
	\n							{ addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; }
	"<"[^\>]*">"					{ int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; }
	"<"							{ int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzEndRead, Token.PREPROCESSOR); addNullToken(); return firstToken; }
	<<EOF>>						{ addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; }

}


<VERBATIMSTRING> {

	[^\"\n]*						{}
	{QuoteEscapeSequence}			{}
	\"							{ yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); }
	\n							{ addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; }
	<<EOF>>						{ addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -