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

📄 my.flex

📁 非常好的编译源代码 将一个l语言转换为中间代码 java版本
💻 FLEX
字号:
import java_cup.runtime.*;%%%public%class Scanner%implements sym%unicode%line%column%cup%cupdebug%{  StringBuffer string = new StringBuffer();    private Symbol symbol(int type) {    return new MySymbol(type, yyline+1, yycolumn+1);  }  private Symbol symbol(int type, Object value) {    return new MySymbol(type, yyline+1, yycolumn+1, value);  }  /**    * assumes correct representation of a long value for    * specified radix in scanner buffer from <code>start</code>    * to <code>end</code>    */  private long parseLong(int start, int end, int radix) {    long result = 0;    long digit;    for (int i = start; i < end; i++) {      digit  = Character.digit(yycharat(i),radix);      result*= radix;      result+= digit;    }    return result;  }%}/* main character classes */LineTerminator = \r|\n|\r\nInputCharacter = [^\r\n]WhiteSpace = {LineTerminator} | [ \t\f]/* comments */Comment = {TraditionalComment} | {EndOfLineComment} |           {DocumentationComment}TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/"EndOfLineComment = "//" {InputCharacter}* {LineTerminator}?DocumentationComment = "/*" "*"+ [^/*] ~"*/"/* identifiers */Identifier = [:jletter:][:jletterdigit:]*/* integer literals */DecIntegerLiteral = 0 | [1-9][0-9]*DecLongLiteral    = {DecIntegerLiteral} [lL]HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8}HexLongLiteral    = 0 [xX] 0* {HexDigit} {1,16} [lL]HexDigit          = [0-9a-fA-F]OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15}OctLongLiteral    = 0+ 1? {OctDigit} {1,21} [lL]OctDigit          = [0-7]    /* floating point literals */        FloatLiteral  = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? [fF]DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}?FLit1    = [0-9]+ \. [0-9]* FLit2    = \. [0-9]+ FLit3    = [0-9]+ Exponent = [eE] [+-]? [0-9]+/* string and character literals */StringCharacter = [^\r\n\"\\]SingleCharacter = [^\r\n\'\\]%state STRING, CHARLITERAL%%<YYINITIAL> {  /* keywords */  "repeat"                     { return symbol(REPEAT); }  "array"                     { return symbol(ARRAY); }  "boolean"                      { return symbol(BOOLEAN); }  "break"                        { return symbol(BREAK); }  "byte"                         { return symbol(BYTE); }  "read"                         { return symbol(READ); }  "char"                         { return symbol(CHAR); }  "const"                        { return symbol(CONST); }  "continue"                     { return symbol(CONTINUE); }  "do"                           { return symbol(DO); }  "real"                       { return symbol(REAL); }  "else"                         { return symbol(ELSE); }  "switch"                      { return symbol(SWITCH); }  "case"                      { return symbol(CASE); }  "write"                      { return symbol(WRITE); }  "float"                        { return symbol(FLOAT); }  "for"                          { return symbol(FOR); }  "to"                          { return symbol(TO); }  "default"                      { return symbol(DEFAULT); }  "integer"                          { return symbol(INTEGER); }  "program"                    { return symbol(PROGRAM); }  "long"                         { return symbol(LONG); }  "short"                         { return symbol(SHORT); }  "or"                       { return symbol(OROR); }  "and "                          { return symbol(ANDAND); }  "goto"                         { return symbol(GOTO); }  "if"                           { return symbol(IF); }  "then"                           { return symbol(THEN); }  "not"                       { return symbol(NOT); }  "short"                        { return symbol(SHORT); }   "until"                 { return symbol(UNTIL); }  "return"                       { return symbol(RETURN); }  "void"                         { return symbol(VOID); }  "while"                        { return symbol(WHILE); }  "begin"                     { return symbol(BEGIN); }  "end"                     { return symbol(END); }  "procedure"                     { return symbol(PROCEDURE); }  "call"                     { return symbol(CALL); }    /* boolean literals */  "true"                         { return symbol(BOOLEAN_LITERAL, new Boolean(true)); }  "false"                        { return symbol(BOOLEAN_LITERAL, new Boolean(false)); }          /* separators */  "("                            { return symbol(LPAREN); }  ")"                            { return symbol(RPAREN); }  "{"                            { return symbol(LBRACE); }  "}"                            { return symbol(RBRACE); }  "["                            { return symbol(LBRACK); }  "]"                            { return symbol(RBRACK); }  ";"                            { return symbol(SEMICOLON); }  ","                            { return symbol(COMMA); }  "."                            { return symbol(DOT); }    /* operators */  "="                            { return symbol(EQ); }  ":="                            { return symbol(ASSIGN); }  ">"                            { return symbol(GT); }  "<"                            { return symbol(LT); }  "~"                            { return symbol(COMP); }  "?"                            { return symbol(QUESTION); }  ":"                            { return symbol(COLON); }  "=="                           { return symbol(EQEQ); }  "<="                           { return symbol(LTEQ); }  ">="                           { return symbol(GTEQ); }  "<>"                           { return symbol(NOTEQ); }  "++"                           { return symbol(PLUSPLUS); }  "--"                           { return symbol(MINUSMINUS); }  "+"                            { return symbol(PLUS); }  "-"                            { return symbol(MINUS); }  "*"                            { return symbol(MULT); }  "/"                            { return symbol(DIV); }  "&"                            { return symbol(AND); }  "|"                            { return symbol(OR); }  "^"                            { return symbol(XOR); }  "%"                            { return symbol(MOD); }  "<<"                           { return symbol(LSHIFT); }  ">>"                           { return symbol(RSHIFT); }  "+="                           { return symbol(PLUSEQ); }  "-="                           { return symbol(MINUSEQ); }  "*="                           { return symbol(MULTEQ); }  "/="                           { return symbol(DIVEQ); }  "&="                           { return symbol(ANDEQ); }  "|="                           { return symbol(OREQ); }  "^="                           { return symbol(XOREQ); }  "%="                           { return symbol(MODEQ); }  "<<="                          { return symbol(LSHIFTEQ); }  ">>="                          { return symbol(RSHIFTEQ); }    /* string literal */  \"                             { yybegin(STRING); string.setLength(0); }  /* character literal */  \'                             { yybegin(CHARLITERAL); }  /* numeric literals */  {DecIntegerLiteral}            { return symbol(INTEGER_LITERAL, new Integer(yytext())); }  {DecLongLiteral}               { return symbol(INTEGER_LITERAL, new Long(yytext().substring(0,yylength()-1))); }    {HexIntegerLiteral}            { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(2, yylength(), 16))); }  {HexLongLiteral}               { return symbol(INTEGER_LITERAL, new Long(parseLong(2, yylength()-1, 16))); }   {OctIntegerLiteral}            { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(0, yylength(), 8))); }    {OctLongLiteral}               { return symbol(INTEGER_LITERAL, new Long(parseLong(0, yylength()-1, 8))); }    {FloatLiteral}                 { return symbol(FLOATING_POINT_LITERAL, new Float(yytext().substring(0,yylength()-1))); }  {DoubleLiteral}                { return symbol(FLOATING_POINT_LITERAL, new Double(yytext())); }  {DoubleLiteral}[dD]            { return symbol(FLOATING_POINT_LITERAL, new Double(yytext().substring(0,yylength()-1))); }    /* comments */  {Comment}                      { /* ignore */ }  /* whitespace */  {WhiteSpace}                   { /* ignore */ }  /* identifiers */   {Identifier}                   { return symbol(IDENTIFIER, yytext()); }  }<STRING> {  \"                             { yybegin(YYINITIAL); return symbol(STRING_LITERAL, string.toString()); }    {StringCharacter}+             { string.append( yytext() ); }    /* escape sequences */  "\\b"                          { string.append( '\b' ); }  "\\t"                          { string.append( '\t' ); }  "\\n"                          { string.append( '\n' ); }  "\\f"                          { string.append( '\f' ); }  "\\r"                          { string.append( '\r' ); }  "\\\""                         { string.append( '\"' ); }  "\\'"                          { string.append( '\'' ); }  "\\\\"                         { string.append( '\\' ); }  \\[0-3]?{OctDigit}?{OctDigit}  { char val = (char) Integer.parseInt(yytext().substring(1),8);                        				   string.append( val ); }    /* error cases */  \\.                            { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); }  {LineTerminator}               { throw new RuntimeException("Unterminated string at end of line"); }}<CHARLITERAL> {  {SingleCharacter}\'            { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character(yytext().charAt(0))); }    /* escape sequences */  "\\b"\'                        { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\b'));}  "\\t"\'                        { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\t'));}  "\\n"\'                        { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\n'));}  "\\f"\'                        { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\f'));}  "\\r"\'                        { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\r'));}  "\\\""\'                       { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\"'));}  "\\'"\'                        { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\''));}  "\\\\"\'                       { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\\')); }  \\[0-3]?{OctDigit}?{OctDigit}\' { yybegin(YYINITIAL); 			                              int val = Integer.parseInt(yytext().substring(1,yylength()-1),8);			                            return symbol(CHARACTER_LITERAL, new Character((char)val)); }    /* error cases */  \\.                            { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); }  {LineTerminator}               { throw new RuntimeException("Unterminated character literal at end of line"); }}/* error fallback */.|\n                             { throw new RuntimeException("Illegal character \""+yytext()+                                                              "\" at line "+yyline+", column "+yycolumn); }<<EOF>>                          { return symbol(EOF); }

⌨️ 快捷键说明

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