//CsLex file generated from grammar test1 #pragma warning disable 0414 using System; using System.Text; public class test1lexer : AbstractLexer { Yylex lexer; ET shared_state; public test1lexer(string n) { lexer = new Yylex(new System.IO.StringReader(n)); } public test1lexer(System.IO.FileStream f) { lexer=new Yylex(f); } public RawToken next_lt() => lexer.yylex(); public void set_shared(ET shared) {shared_state=shared;} }//lexer class %% %namespace Fussless %type RawToken %eofval{ return new RawToken("EOF","EOF",yyline,yychar); %eofval} %{ private static int comment_count = 0; private static int line_char = 0; %} %line %char %state COMMENT ALPHA=[A-Za-z] DIGIT=[0-9] DIGITS=[0-9]+ FLOATS = [0-9]*\.[0-9]+([eE]([+-]?){DIGITS})? HEXDIGITS=(0x)[0-9A-Fa-f]* NEWLINE=((\r\n)|\n) NONNEWLINE_WHITE_SPACE_CHAR=[\ \t\b\012] WHITE_SPACE_CHAR=[{NEWLINE}\ \t\b\012] STRING_TEXT=(\\\"|[^{NEWLINE}\"]|{WHITE_SPACE_CHAR}+)* COMMENT_TEXT=([^*/\r\n]|[^*\r\n]"/"[^*\r\n]|[^/\r\n]"*"[^/\r\n]|"*"[^/\r\n]|"/"[^*\r\n])* ALPHANUM=[A-Za-z_][A-Za-z0-9_]* %% {NEWLINE}+ { line_char = yychar+yytext().Length; return null; } {NONNEWLINE_WHITE_SPACE_CHAR}+ { return null; } "(" { return new RawToken("(",yytext(),yyline,yychar-line_char,yychar); } ")" { return new RawToken(")",yytext(),yyline,yychar-line_char,yychar); } "+" { return new RawToken("+",yytext(),yyline,yychar-line_char,yychar); } "*" { return new RawToken("*",yytext(),yyline,yychar-line_char,yychar); } "//".*\n { line_char=yychar+yytext().Length; return null; } [(\r\n?|\n)] { line_char=yychar+yytext().Length; return null; } "/*" { yybegin(COMMENT); comment_count = comment_count + 1; return null; } "/*" { comment_count = comment_count + 1; return null; } "*/" { comment_count = comment_count - 1; if (comment_count == 0) { yybegin(YYINITIAL); } return null; } {COMMENT_TEXT} { return null; } \"{STRING_TEXT}\" { return new RawToken("StrLit",yytext(),yyline,yychar-line_char,yychar); } \"{STRING_TEXT} { String str = yytext().Substring(1,yytext().Length); Utility.error(Utility.E_UNCLOSEDSTR); return new RawToken("Unclosed String",str,yyline,yychar-line_char,yychar); } {DIGIT}+ { return new RawToken("Num",yytext(),yyline,yychar-line_char,yychar); } {HEXDIGITS} { return new RawToken("Hexnum",yytext(),yyline,yychar-line_char,yychar); } {FLOATS} { return new RawToken("Float",yytext(),yyline,yychar-line_char,yychar); } ({ALPHA}|_)({ALPHA}|{DIGIT}|_)* { return new RawToken("Alphanum",yytext(),yyline,yychar-line_char,yychar); } . { StringBuilder sb = new StringBuilder("Illegal character: <"); String s = yytext(); for (int i = 0; i < s.Length; i++) if (s[i] >= 32) sb.Append(s[i]); else { sb.Append("^"); sb.Append(Convert.ToChar(s[i]+'A'-1)); } sb.Append(">"); Console.WriteLine(sb.ToString()); Utility.error(Utility.E_UNMATCHED); return null; }