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

📄 javascanner.flex

📁 JDK1.4编译器后端
💻 FLEX
字号:
package scanner;import beaver.Symbol;import beaver.Scanner;import parser.JavaParser.Terminals;import java.io.*;%%%public %final %class JavaScanner%extends Scanner%type Symbol %function nextToken %yylexthrow Scanner.Exception%unicode%line %column%{  StringBuffer strbuf = new StringBuffer(128);  int sub_line;  int sub_column;  private Symbol sym(short id) {    return new Symbol(id, yyline + 1, yycolumn + 1, len(), str());  }  private Symbol sym(short id, String value) {    return new Symbol(id, yyline + 1, yycolumn + 1, len(), value);  }  private String str() { return yytext(); }  private int len() { return yylength(); }  private void error(String msg) throws Scanner.Exception {    throw new Scanner.Exception(yyline + 1, yycolumn + 1, msg);  }%}// 3.4 Line TerminatorsLineTerminator = \n|\r|\r\nInputCharacter = [^\r\n]// 3.6 White SpaceWhiteSpace = [ ] | \t | \f | {LineTerminator}// 3.7 CommentsComment = {TraditionalComment}        | {EndOfLineComment}TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" | "/*" "*"+ [^/*] ~"*/"EndOfLineComment = "//" {InputCharacter}* {LineTerminator}?// 3.8 IdentifiersIdentifier = [:jletter:][:jletterdigit:]*// 3.10.1 Integer LiteralsDecimalNumeral = 0 | {NonZeroDigit} {Digits}? HexNumeral = 0 [xX] [0-9a-fA-F]+OctalNumeral = 0 [0-7]+Digits = {Digit}+Digit = 0 | {NonZeroDigit}NonZeroDigit = [1-9]// 3.10.2 Floating-Point LiteralsFloatingPointLiteral = {Digits} \. {Digits}? {ExponentPart}?                     | \. {Digits} {ExponentPart}?                     | {Digits} {ExponentPart}ExponentPart = [eE] [+-]? [0-9]+// 3.10.4 Character LiteralsSingleCharacter = [^\r\n\'\\]// 3.10.5 String LiteralsStringCharacter = [^\r\n\"\\]// 3.10.6 Escape Sequences for Character and String LiteralsOctalEscape = \\ {OctalDigit}             | \\ {OctalDigit} {OctalDigit}            | \\  {ZeroToThree} {OctalDigit} {OctalDigit}OctalDigit = [0-7]ZeroToThree = [0-3]%state STRING%%// 3.6 White Space<YYINITIAL> { {WhiteSpace} { } }// 3.7 Comments<YYINITIAL> { {Comment} { } }// 3.9 Keywords<YYINITIAL> {  // 3.9 Keywords  "assert"                       { return sym(Terminals.ASSERT); }  "abstract"                     { return sym(Terminals.ABSTRACT); }  "boolean"                      { return sym(Terminals.BOOLEAN); }  "break"                        { return sym(Terminals.BREAK); }  "byte"                         { return sym(Terminals.BYTE); }  "case"                         { return sym(Terminals.CASE); }  "catch"                        { return sym(Terminals.CATCH); }  "char"                         { return sym(Terminals.CHAR); }  "class"                        { return sym(Terminals.CLASS); }  "const"                        { return sym(Terminals.EOF); }  "continue"                     { return sym(Terminals.CONTINUE); }  "default"                      { return sym(Terminals.DEFAULT); }  "do"                           { return sym(Terminals.DO); }  "double"                       { return sym(Terminals.DOUBLE); }  "else"                         { return sym(Terminals.ELSE); }  "extends"                      { return sym(Terminals.EXTENDS); }  "final"                        { return sym(Terminals.FINAL); }  "finally"                      { return sym(Terminals.FINALLY); }  "float"                        { return sym(Terminals.FLOAT); }  "for"                          { return sym(Terminals.FOR); }  "goto"                         { return sym(Terminals.EOF); }  "if"                           { return sym(Terminals.IF); }  "implements"                   { return sym(Terminals.IMPLEMENTS); }  "import"                       { return sym(Terminals.IMPORT); }  "instanceof"                   { return sym(Terminals.INSTANCEOF); }  "int"                          { return sym(Terminals.INT); }  "interface"                    { return sym(Terminals.INTERFACE); }  "long"                         { return sym(Terminals.LONG); }  "native"                       { return sym(Terminals.NATIVE); }  "new"                          { return sym(Terminals.NEW); }  "package"                      { return sym(Terminals.PACKAGE); }  "private"                      { return sym(Terminals.PRIVATE); }  "protected"                    { return sym(Terminals.PROTECTED); }  "public"                       { return sym(Terminals.PUBLIC); }  "return"                       { return sym(Terminals.RETURN); }  "short"                        { return sym(Terminals.SHORT); }  "static"                       { return sym(Terminals.STATIC); }  "strictfp"                     { return sym(Terminals.STRICTFP); }  "super"                        { return sym(Terminals.SUPER); }  "switch"                       { return sym(Terminals.SWITCH); }  "synchronized"                 { return sym(Terminals.SYNCHRONIZED); }  "this"                         { return sym(Terminals.THIS); }  "throw"                        { return sym(Terminals.THROW); }  "throws"                       { return sym(Terminals.THROWS); }  "transient"                    { return sym(Terminals.TRANSIENT); }  "try"                          { return sym(Terminals.TRY); }  "void"                         { return sym(Terminals.VOID); }  "volatile"                     { return sym(Terminals.VOLATILE); }  "while"                        { return sym(Terminals.WHILE); }}// 3.10 Literals<YYINITIAL> {  // 3.10.1 Integer Literals  {DecimalNumeral}               { return sym(Terminals.INTEGER_LITERAL); }  {DecimalNumeral} [lL]          { return sym(Terminals.LONG_LITERAL, str().substring(0,len()-1)); }  {HexNumeral}                   { return sym(Terminals.INTEGER_LITERAL); }  {HexNumeral} [lL]              { return sym(Terminals.LONG_LITERAL, str().substring(0, len()-1)); }  {OctalNumeral}                 { return sym(Terminals.INTEGER_LITERAL); }  {OctalNumeral} [lL]            { return sym(Terminals.LONG_LITERAL, str().substring(0, len()-1)); }  // 3.10.2 Floating-Point Literals  {FloatingPointLiteral} [fF]    { return sym(Terminals.FLOATING_POINT_LITERAL, str().substring(0,len()-1)); }  {FloatingPointLiteral} [dD]    { return sym(Terminals.DOUBLE_LITERAL, str().substring(0,len()-1)); }  {FloatingPointLiteral}         { return sym(Terminals.DOUBLE_LITERAL); }  [0-9]+ {ExponentPart}? [fF]    { return sym(Terminals.FLOATING_POINT_LITERAL, str().substring(0,len()-1)); }  [0-9]+ {ExponentPart}? [dD]    { return sym(Terminals.DOUBLE_LITERAL, str().substring(0,len()-1)); }    // 3.10.3 Boolean Literals  "true"                         { return sym(Terminals.BOOLEAN_LITERAL); }  "false"                        { return sym(Terminals.BOOLEAN_LITERAL); }    // 3.10.4 Character Literals  \'{SingleCharacter}\'          { return sym(Terminals.CHARACTER_LITERAL, str().substring(1, len()-1)); }  // 3.10.6 Escape Sequences for Character Literals  \'"\\b"\'                      { return sym(Terminals.CHARACTER_LITERAL, "\b"); }  \'"\\t"\'                      { return sym(Terminals.CHARACTER_LITERAL, "\t"); }  \'"\\n"\'                      { return sym(Terminals.CHARACTER_LITERAL, "\n"); }  \'"\\f"\'                      { return sym(Terminals.CHARACTER_LITERAL, "\f"); }  \'"\\r"\'                      { return sym(Terminals.CHARACTER_LITERAL, "\r"); }  \'"\\\""\'                     { return sym(Terminals.CHARACTER_LITERAL, "\""); }  \'"\\'"\'                      { return sym(Terminals.CHARACTER_LITERAL, "\'"); }  \'"\\\\"\'                     { return sym(Terminals.CHARACTER_LITERAL, "\\"); }  \'{OctalEscape}\'              { int val = Integer.parseInt(str().substring(2,len()-1),8);			                             return sym(Terminals.CHARACTER_LITERAL, new Character((char)val).toString()); }  // Character Literal errors  \'\\.                          { error("illegal escape sequence \""+str()+"\""); }  \'{LineTerminator}             { error("unterminated character literal at end of line"); }  // 3.10.5 String Literals  \"                             { yybegin(STRING); strbuf.setLength(0); }  // 3.10.7 The Null Literal  "null"                         { return sym(Terminals.NULL_LITERAL); }}// 3.10.5 String Literals<STRING> {  \"                             { yybegin(YYINITIAL); return sym(Terminals.STRING_LITERAL, strbuf.toString()); }  {StringCharacter}+             { strbuf.append(str()); }  // 3.10.6 Escape sequences for String Literals  "\\b"                          { strbuf.append( '\b' ); }  "\\t"                          { strbuf.append( '\t' ); }  "\\n"                          { strbuf.append( '\n' ); }  "\\f"                          { strbuf.append( '\f' ); }  "\\r"                          { strbuf.append( '\r' ); }  "\\\""                         { strbuf.append( '\"' ); }  "\\'"                          { strbuf.append( '\'' ); }  "\\\\"                         { strbuf.append( '\\' ); }  {OctalEscape}                  { strbuf.append((char)Integer.parseInt(str().substring(1),8)); }  // String Literal errors  \\.                            { error("illegal escape sequence \""+str()+"\""); }  {LineTerminator}               { error("unterminated string at end of line"); }}// 3.11 Separators<YYINITIAL> {  "("                            { return sym(Terminals.LPAREN); }  ")"                            { return sym(Terminals.RPAREN); }  "{"                            { return sym(Terminals.LBRACE); }  "}"                            { return sym(Terminals.RBRACE); }  "["                            { return sym(Terminals.LBRACK); }  "]"                            { return sym(Terminals.RBRACK); }  ";"                            { return sym(Terminals.SEMICOLON); }  ","                            { return sym(Terminals.COMMA); }  "."                            { return sym(Terminals.DOT); }}// 3.12 Operators<YYINITIAL> {  "="                            { return sym(Terminals.EQ); }  ">"                            { return sym(Terminals.GT); }  "<"                            { return sym(Terminals.LT); }  "!"                            { return sym(Terminals.NOT); }  "~"                            { return sym(Terminals.COMP); }  "?"                            { return sym(Terminals.QUESTION); }  ":"                            { return sym(Terminals.COLON); }  "=="                           { return sym(Terminals.EQEQ); }  "<="                           { return sym(Terminals.LTEQ); }  ">="                           { return sym(Terminals.GTEQ); }  "!="                           { return sym(Terminals.NOTEQ); }  "&&"                           { return sym(Terminals.ANDAND); }  "||"                           { return sym(Terminals.OROR); }  "++"                           { return sym(Terminals.PLUSPLUS); }  "--"                           { return sym(Terminals.MINUSMINUS); }  "+"                            { return sym(Terminals.PLUS); }  "-"                            { return sym(Terminals.MINUS); }  "*"                            { return sym(Terminals.MULT); }  "/"                            { return sym(Terminals.DIV); }  "&"                            { return sym(Terminals.AND); }  "|"                            { return sym(Terminals.OR); }  "^"                            { return sym(Terminals.XOR); }  "%"                            { return sym(Terminals.MOD); }  "<<"                           { return sym(Terminals.LSHIFT); }  ">>"                           { return sym(Terminals.RSHIFT); }  ">>>"                          { return sym(Terminals.URSHIFT); }  "+="                           { return sym(Terminals.PLUSEQ); }  "-="                           { return sym(Terminals.MINUSEQ); }  "*="                           { return sym(Terminals.MULTEQ); }  "/="                           { return sym(Terminals.DIVEQ); }  "&="                           { return sym(Terminals.ANDEQ); }  "|="                           { return sym(Terminals.OREQ); }  "^="                           { return sym(Terminals.XOREQ); }  "%="                           { return sym(Terminals.MODEQ); }  "<<="                          { return sym(Terminals.LSHIFTEQ); }  ">>="                          { return sym(Terminals.RSHIFTEQ); }  ">>>="                         { return sym(Terminals.URSHIFTEQ); }}// 3.8 Identifiers located at end of current state due to rule priority disambiguation<YYINITIAL> {  {Identifier}                   { return sym(Terminals.IDENTIFIER); }}// hack to detect the SUB character as the last input character\u001a                           { if(sub_line == 0 && sub_column == 0) {                                     sub_line = yyline; sub_column = yycolumn;                                   }                                  }// fall through errors.|\n                             { error("illegal character \""+str()+ "\""); }<<EOF>>                          { // detect position of first SUB character                                   if(!(sub_line == 0 && sub_column == 0) && (sub_line != yyline || sub_column != yycolumn-1)) {                                     // reset to only return error once                                     sub_line = 0;                                     sub_column = 0;                                     // return error                                     error("error");                                   }                                   return sym(Terminals.EOF);                                 }

⌨️ 快捷键说明

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