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

📄 compiler.java

📁 c--词法分析
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            case 64:                {                alt12=1;                }                break;            case 65:            case 66:                {                alt12=2;                }                break;            case 67:                {                alt12=3;                }                break;            case 68:            case 69:                {                alt12=4;                }                break;            case 70:                {                alt12=5;                }                break;            case 71:                {                alt12=6;                }                break;            case 73:                {                alt12=7;                }                break;            case 72:                {                alt12=8;                }                break;            case 74:                {                alt12=9;                }                break;            case 75:                {                alt12=10;                }                break;            case 76:                {                alt12=11;                }                break;            case 77:                {                alt12=12;                }                break;            case NEGATE:                {                alt12=13;                }                break;            case NOT:                {                alt12=14;                }                break;            case NUM:                {                alt12=15;                }                break;            case VAR:                {                alt12=16;                }                break;            case INDEX:                {                alt12=17;                }                break;            case CALL:                {                alt12=18;                }                break;            case ASSIGN:                {                int LA12_19 = input.LA(2);                if ( (LA12_19==DOWN) ) {                    int LA12_20 = input.LA(3);                    if ( (LA12_20==INDEX) ) {                        alt12=20;                    }                    else if ( (LA12_20==ID) ) {                        alt12=19;                    }                    else {                        NoViableAltException nvae =                            new NoViableAltException("104:1: expr returns [int ref] : ( ^( ( 'or' | '||' ) a= expr b= expr ) -> or(ret=$refexpr1=$a.stexpr2=$b.stref1=$a.refref2=$b.reftmp1=Main.symbols.next_var()tmp2=Main.symbols.next_var()lab1=Main.symbols.next_label()lab2=Main.symbols.next_label()lab3=Main.symbols.next_label()lab4=Main.symbols.next_label()) | ^( ( 'and' | '&&' ) a= expr b= expr ) -> and(ret=$refexpr1=$a.stexpr2=$b.stref1=$a.refref2=$b.reftmp1=Main.symbols.next_var()tmp2=Main.symbols.next_var()lab1=Main.symbols.next_label()lab2=Main.symbols.next_label()lab3=Main.symbols.next_label()lab4=Main.symbols.next_label()) | ^( '==' a= expr b= expr ) -> comparison(type=\"eq\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( ( '!=' | '<>' ) a= expr b= expr ) -> comparison(type=\"ne\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '>' a= expr b= expr ) -> comparison(type=\"gt\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '<' a= expr b= expr ) -> comparison(type=\"lt\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '>=' a= expr b= expr ) -> comparison(type=\"ge\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '<=' a= expr b= expr ) -> comparison(type=\"le\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '+' a= expr b= expr ) -> add(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '-' a= expr b= expr ) -> subtract(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '*' a= expr b= expr ) -> multiply(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '/' a= expr b= expr ) -> divide(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( NEGATE a= expr ) -> negate(expr=$a.str=$refval=$a.ref) | ^( NOT a= expr ) -> not(expr=$a.stret=$refref=$a.ref) | ^( NUM INT ) -> create(r=$refval=$INT) | ^( VAR ID ) -> {(! Main.symbols.get_variable($ID.text).read_only) && Main.symbols.get_variable($ID.text).mode==\"scalar\"}? access(target=$refsource=Main.symbols.get_variable($ID.text).num) -> | ^( INDEX name= ID i= expr ) -> access_array(ret=$refname=Main.symbols.get_variable($name.text).numindex_expr=$i.stindex_ref=i.reftmp1=Main.symbols.next_var()size=Main.symbols.get_variable($name.text).length) | call[$ref] -> {$call.st} | ^( ASSIGN name= ID a= expr ) -> var_assign(ret=$refexpr=$a.stvar=Main.symbols.get_variable($name.text).numref=$a.ref) | ^( ASSIGN ^( INDEX name= ID i= expr ) a= expr ) -> array_assign(ret=$refval_expr=$a.stval_ref=$a.refindex_expr=$i.stindex_ref=i.refvar=Main.symbols.get_variable($name.text).numsize=Main.symbols.get_variable($name.text).values.lengthtmp1=Main.symbols.next_var()));", 12, 20, input);                        throw nvae;                    }                }                else {                    NoViableAltException nvae =                        new NoViableAltException("104:1: expr returns [int ref] : ( ^( ( 'or' | '||' ) a= expr b= expr ) -> or(ret=$refexpr1=$a.stexpr2=$b.stref1=$a.refref2=$b.reftmp1=Main.symbols.next_var()tmp2=Main.symbols.next_var()lab1=Main.symbols.next_label()lab2=Main.symbols.next_label()lab3=Main.symbols.next_label()lab4=Main.symbols.next_label()) | ^( ( 'and' | '&&' ) a= expr b= expr ) -> and(ret=$refexpr1=$a.stexpr2=$b.stref1=$a.refref2=$b.reftmp1=Main.symbols.next_var()tmp2=Main.symbols.next_var()lab1=Main.symbols.next_label()lab2=Main.symbols.next_label()lab3=Main.symbols.next_label()lab4=Main.symbols.next_label()) | ^( '==' a= expr b= expr ) -> comparison(type=\"eq\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( ( '!=' | '<>' ) a= expr b= expr ) -> comparison(type=\"ne\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '>' a= expr b= expr ) -> comparison(type=\"gt\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '<' a= expr b= expr ) -> comparison(type=\"lt\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '>=' a= expr b= expr ) -> comparison(type=\"ge\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '<=' a= expr b= expr ) -> comparison(type=\"le\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '+' a= expr b= expr ) -> add(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '-' a= expr b= expr ) -> subtract(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '*' a= expr b= expr ) -> multiply(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '/' a= expr b= expr ) -> divide(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( NEGATE a= expr ) -> negate(expr=$a.str=$refval=$a.ref) | ^( NOT a= expr ) -> not(expr=$a.stret=$refref=$a.ref) | ^( NUM INT ) -> create(r=$refval=$INT) | ^( VAR ID ) -> {(! Main.symbols.get_variable($ID.text).read_only) && Main.symbols.get_variable($ID.text).mode==\"scalar\"}? access(target=$refsource=Main.symbols.get_variable($ID.text).num) -> | ^( INDEX name= ID i= expr ) -> access_array(ret=$refname=Main.symbols.get_variable($name.text).numindex_expr=$i.stindex_ref=i.reftmp1=Main.symbols.next_var()size=Main.symbols.get_variable($name.text).length) | call[$ref] -> {$call.st} | ^( ASSIGN name= ID a= expr ) -> var_assign(ret=$refexpr=$a.stvar=Main.symbols.get_variable($name.text).numref=$a.ref) | ^( ASSIGN ^( INDEX name= ID i= expr ) a= expr ) -> array_assign(ret=$refval_expr=$a.stval_ref=$a.refindex_expr=$i.stindex_ref=i.refvar=Main.symbols.get_variable($name.text).numsize=Main.symbols.get_variable($name.text).values.lengthtmp1=Main.symbols.next_var()));", 12, 19, input);                    throw nvae;                }                }                break;            default:                NoViableAltException nvae =                    new NoViableAltException("104:1: expr returns [int ref] : ( ^( ( 'or' | '||' ) a= expr b= expr ) -> or(ret=$refexpr1=$a.stexpr2=$b.stref1=$a.refref2=$b.reftmp1=Main.symbols.next_var()tmp2=Main.symbols.next_var()lab1=Main.symbols.next_label()lab2=Main.symbols.next_label()lab3=Main.symbols.next_label()lab4=Main.symbols.next_label()) | ^( ( 'and' | '&&' ) a= expr b= expr ) -> and(ret=$refexpr1=$a.stexpr2=$b.stref1=$a.refref2=$b.reftmp1=Main.symbols.next_var()tmp2=Main.symbols.next_var()lab1=Main.symbols.next_label()lab2=Main.symbols.next_label()lab3=Main.symbols.next_label()lab4=Main.symbols.next_label()) | ^( '==' a= expr b= expr ) -> comparison(type=\"eq\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( ( '!=' | '<>' ) a= expr b= expr ) -> comparison(type=\"ne\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '>' a= expr b= expr ) -> comparison(type=\"gt\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '<' a= expr b= expr ) -> comparison(type=\"lt\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '>=' a= expr b= expr ) -> comparison(type=\"ge\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '<=' a= expr b= expr ) -> comparison(type=\"le\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref) | ^( '+' a= expr b= expr ) -> add(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '-' a= expr b= expr ) -> subtract(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '*' a= expr b= expr ) -> multiply(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( '/' a= expr b= expr ) -> divide(ea=$a.steb=$b.str=$refv1=$a.refv2=$b.ref) | ^( NEGATE a= expr ) -> negate(expr=$a.str=$refval=$a.ref) | ^( NOT a= expr ) -> not(expr=$a.stret=$refref=$a.ref) | ^( NUM INT ) -> create(r=$refval=$INT) | ^( VAR ID ) -> {(! Main.symbols.get_variable($ID.text).read_only) && Main.symbols.get_variable($ID.text).mode==\"scalar\"}? access(target=$refsource=Main.symbols.get_variable($ID.text).num) -> | ^( INDEX name= ID i= expr ) -> access_array(ret=$refname=Main.symbols.get_variable($name.text).numindex_expr=$i.stindex_ref=i.reftmp1=Main.symbols.next_var()size=Main.symbols.get_variable($name.text).length) | call[$ref] -> {$call.st} | ^( ASSIGN name= ID a= expr ) -> var_assign(ret=$refexpr=$a.stvar=Main.symbols.get_variable($name.text).numref=$a.ref) | ^( ASSIGN ^( INDEX name= ID i= expr ) a= expr ) -> array_assign(ret=$refval_expr=$a.stval_ref=$a.refindex_expr=$i.stindex_ref=i.refvar=Main.symbols.get_variable($name.text).numsize=Main.symbols.get_variable($name.text).values.lengthtmp1=Main.symbols.next_var()));", 12, 0, input);                throw nvae;            }            switch (alt12) {                case 1 :                    // Compiler.g:108:4: ^( ( 'or' | '||' ) a= expr b= expr )                    {                    // Compiler.g:108:6: ( 'or' | '||' )                    int alt9=2;                    int LA9_0 = input.LA(1);                    if ( (LA9_0==63) ) {                        alt9=1;                    }                    else if ( (LA9_0==64) ) {                        alt9=2;                    }                    else {                        NoViableAltException nvae =                            new NoViableAltException("108:6: ( 'or' | '||' )", 9, 0, input);                        throw nvae;                    }                    switch (alt9) {                        case 1 :                            // Compiler.g:108:7: 'or'                            {                            match(input,63,FOLLOW_63_in_expr862);                             }                            break;                        case 2 :                            // Compiler.g:108:12: '||'                            {                            match(input,64,FOLLOW_64_in_expr864);                             }                            break;                    }                    match(input, Token.DOWN, null);                     pushFollow(FOLLOW_expr_in_expr869);                    a=expr();                    _fsp--;                    pushFollow(FOLLOW_expr_in_expr873);                    b=expr();                    _fsp--;                    match(input, Token.UP, null);                     // TEMPLATE REWRITE                    // 108:34: -> or(ret=$refexpr1=$a.stexpr2=$b.stref1=$a.refref2=$b.reftmp1=Main.symbols.next_var()tmp2=Main.symbols.next_var()lab1=Main.symbols.next_label()lab2=Main.symbols.next_label()lab3=Main.symbols.next_label()lab4=Main.symbols.next_label())                    {                        retval.st = templateLib.getInstanceOf("or",                      new STAttrMap().put("ret", retval.ref).put("expr1", a.st).put("expr2", b.st).put("ref1", a.ref).put("ref2", b.ref).put("tmp1", Main.symbols.next_var()).put("tmp2", Main.symbols.next_var()).put("lab1", Main.symbols.next_label()).put("lab2", Main.symbols.next_label()).put("lab3", Main.symbols.next_label()).put("lab4", Main.symbols.next_label()));                    }                    }                    break;                case 2 :                    // Compiler.g:109:5: ^( ( 'and' | '&&' ) a= expr b= expr )                    {                    // Compiler.g:109:7: ( 'and' | '&&' )                    int alt10=2;                    int LA10_0 = input.LA(1);                    if ( (LA10_0==65) ) {                        alt10=1;                    }                    else if ( (LA10_0==66) ) {                        alt10=2;                    }                    else {                        NoViableAltException nvae =                            new NoViableAltException("109:7: ( 'and' | '&&' )", 10, 0, input);                        throw nvae;                    }                    switch (alt10) {                        case 1 :                            // Compiler.g:109:8: 'and'                            {                            match(input,65,FOLLOW_65_in_expr932);                             }                            break;                        case 2 :                            // Compiler.g:109:14: '&&'                            {                            match(input,66,FOLLOW_66_in_expr934);                             }                            break;                    }                    match(input, Token.DOWN, null);                     pushFollow(FOLLOW_expr_in_expr939);                    a=expr();                    _fsp--;                    pushFollow(FOLLOW_expr_in_expr943);                    b=expr();                    _fsp--;                    match(input, Token.UP, null);                     // TEMPLATE REWRITE                    // 109:36: -> and(ret=$refexpr1=$a.stexpr2=$b.stref1=$a.refref2=$b.reftmp1=Main.symbols.next_var()tmp2=Main.symbols.next_var()lab1=Main.symbols.next_label()lab2=Main.symbols.next_label()lab3=Main.symbols.next_label()lab4=Main.symbols.next_label())                    {                        retval.st = templateLib.getInstanceOf("and",                      new STAttrMap().put("ret", retval.ref).put("expr1", a.st).put("expr2", b.st).put("ref1", a.ref).put("ref2", b.ref).put("tmp1", Main.symbols.next_var()).put("tmp2", Main.symbols.next_var()).put("lab1", Main.symbols.next_label()).put("lab2", Main.symbols.next_label()).put("lab3", Main.symbols.next_label()).put("lab4", Main.symbols.next_label()));                    }                    }                    break;                case 3 :                    // Compiler.g:110:5: ^( '==' a= expr b= expr )                    {                    match(input,67,FOLLOW_67_in_expr1001);                     match(input, Token.DOWN, null);                     pushFollow(FOLLOW_expr_in_expr1005);                    a=expr();                    _fsp--;                    pushFollow(FOLLOW_expr_in_expr1009);                    b=expr();                    _fsp--;                    match(input, Token.UP, null);                     // TEMPLATE REWRITE                    // 110:29: -> comparison(type=\"eq\"expr1=$a.stexpr2=$b.stret=$refref1=$a.refref2=$b.ref)                    {                        retval.st = templateLib.getInstanceOf("comparison",                      new STAttrMap().put("type", "eq").put("expr1", a.st).put("expr2", b.st).put("ret", retval.ref).put("ref1", a.ref).put("ref2", b.ref));                    }                    }                    break;                case 4 :                    // Compiler.g:111:5: ^( ( '!=' | '<>' ) a= expr b= expr )                    {                    // Compiler.g:111:7: ( '!=' | '<>' )                    int alt11=2;                    int LA11_0 = input.LA(1);                    if ( (LA11_0==68) ) {                        alt11=1;                    }                    else if ( (LA11_0==69) ) {                        alt11=2;                    }                    else {                        NoViableAltException nvae =                            new NoViableAltException("111:7: ( '!=' | '<>' )", 11, 0, in

⌨️ 快捷键说明

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