diff --git a/src/main/java/ghidrust/decompiler/parser/c/CVisitor.java b/src/main/java/ghidrust/decompiler/parser/c/CVisitor.java index 8b4c5da..7e17832 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/CVisitor.java +++ b/src/main/java/ghidrust/decompiler/parser/c/CVisitor.java @@ -277,12 +277,16 @@ public class CVisitor implements CParserVisitor { } public Object visit(ASTSelectionStatement node, Object data) { - return defaultVisit(node, data); + StringBuilder ret = new StringBuilder( + "if (" + node.jjtGetChild(0).jjtAccept(this, data) + ") {" + node.jjtGetChild(1).jjtAccept(this, data)); + ret.append("}"); + ((CContext) data).statement_end_sc = false; + return ret; } public Object visit(ASTIterationStatement node, Object data) { StringBuilder sb = new StringBuilder(""); - + if (node.choice == 1) { ((CContext) data).statement_end_sc = false; @@ -294,24 +298,29 @@ public class CVisitor implements CParserVisitor { sb.append("}"); } else if (node.choice == 2) { sb.append("do {"); - sb.append(node.jjtGetChild(0).jjtAccept(this, data)); + sb.append(node.jjtGetChild(0).jjtAccept(this, data)); sb.append("} while ("); sb.append(node.jjtGetChild(1).jjtAccept(this, data)); sb.append(")"); } - + return sb.toString(); } public Object visit(ASTJumpStatement node, Object data) { StringBuilder sb = new StringBuilder(""); - if (node.jjtGetNumChildren() > 0 && node.jjtGetChild(0) instanceof ASTExpression) { + if (node.choice == 2) { + return "break"; + } else if (node.choice == 3) { + return "continue"; + } else if (node.choice == 4) { ((CContext) data).statement_end_sc = false; sb.append(node.jjtGetChild(0).jjtAccept(this, data)); } else { sb.append(defaultVisit(node, data)); } + return sb.toString(); } @@ -399,11 +408,13 @@ public class CVisitor implements CParserVisitor { } public Object visit(ASTUnaryExpression node, Object data) { - return defaultSpacedVisit(node, data, " ", false); - } + String visit = (String) defaultVisit(node, data); - public Object visit(ASTUnaryOperator node, Object data) { - return defaultVisit(node, data); + if (node.choice > 1) { + return "(" + visit + ")"; + } else { + return visit; + } } public Object visit(ASTPostfixExpression node, Object data) { @@ -422,6 +433,12 @@ public class CVisitor implements CParserVisitor { sb.append(node.jjtGetChild(1).jjtAccept(this, data)); sb.append(")"); + return sb.toString(); + } else if (node.choice == 3) { + /* Field access */ + sb.append("."); + sb.append(node.jjtGetChild(1).jjtAccept(this, data)); + return sb.toString(); } diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/ASTJumpStatement.java b/src/main/java/ghidrust/decompiler/parser/c/gen/ASTJumpStatement.java index 62c5540..835f518 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/ASTJumpStatement.java +++ b/src/main/java/ghidrust/decompiler/parser/c/gen/ASTJumpStatement.java @@ -4,6 +4,8 @@ package ghidrust.decompiler.parser.c.gen; /* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ public class ASTJumpStatement extends SimpleNode { + public int choice; + public ASTJumpStatement(int id) { super(id); } diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/ASTUnaryExpression.java b/src/main/java/ghidrust/decompiler/parser/c/gen/ASTUnaryExpression.java index 3ed07ef..0978b69 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/ASTUnaryExpression.java +++ b/src/main/java/ghidrust/decompiler/parser/c/gen/ASTUnaryExpression.java @@ -4,6 +4,8 @@ package ghidrust.decompiler.parser.c.gen; /* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ public class ASTUnaryExpression extends SimpleNode { + public int choice; + public ASTUnaryExpression(int id) { super(id); } diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/ASTUnaryOperator.java b/src/main/java/ghidrust/decompiler/parser/c/gen/ASTUnaryOperator.java deleted file mode 100644 index 7deffb1..0000000 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/ASTUnaryOperator.java +++ /dev/null @@ -1,23 +0,0 @@ -package ghidrust.decompiler.parser.c.gen; - -/* Generated By:JJTree: Do not edit this line. ASTUnaryOperator.java Version 7.0 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ -public -class ASTUnaryOperator extends SimpleNode { - public ASTUnaryOperator(int id) { - super(id); - } - - public ASTUnaryOperator(CParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(CParserVisitor visitor, Object data) { - - return - visitor.visit(this, data); - } -} -/* JavaCC - OriginalChecksum=6c43a4b6e42256ad16599f05ce4392a5 (do not edit this line) */ diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/CParser.java b/src/main/java/ghidrust/decompiler/parser/c/gen/CParser.java index 2a3e622..a0f60d9 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/CParser.java +++ b/src/main/java/ghidrust/decompiler/parser/c/gen/CParser.java @@ -1920,9 +1920,9 @@ if (jjtc000) { } final public void JumpStatement() throws ParseException {/*@bgen(jjtree) JumpStatement */ - ASTJumpStatement jjtn000 = new ASTJumpStatement(JJTJUMPSTATEMENT); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); + ASTJumpStatement jjtn000 = new ASTJumpStatement(JJTJUMPSTATEMENT); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000);int choice = 0; try { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case GOTO:{ @@ -1932,16 +1932,19 @@ if (jjtc000) { break; } case CONTINUE:{ +choice = 1; jj_consume_token(CONTINUE); jj_consume_token(60); break; } case BREAK:{ +choice = 2; jj_consume_token(BREAK); jj_consume_token(60); break; } case RETURN:{ +choice = 3; jj_consume_token(RETURN); switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case INTEGER_LITERAL: @@ -1988,6 +1991,7 @@ if (jjtc000) { ; } jj_consume_token(60); +choice = 4; break; } default: @@ -1995,6 +1999,9 @@ if (jjtc000) { jj_consume_token(-1); throw new ParseException(); } +jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; +jjtn000.choice = choice; } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); @@ -2466,25 +2473,12 @@ if (jjtc000) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case 88: case 89:{ - switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { - case 88:{ - jj_consume_token(88); - break; - } - case 89:{ - jj_consume_token(89); - break; - } - default: - jj_la1[54] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } + EqualityOperator(); EqualityExpression(); break; } default: - jj_la1[55] = jj_gen; + jj_la1[54] = jj_gen; ; } } catch (Throwable jjte000) { @@ -2508,6 +2502,35 @@ if (jjtc000) { } } + final public void EqualityOperator() throws ParseException {/*@bgen(jjtree) StringToken */ + ASTStringToken jjtn000 = new ASTStringToken(JJTSTRINGTOKEN); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000);Token t; + try { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case 88:{ + t = jj_consume_token(88); + break; + } + case 89:{ + t = jj_consume_token(89); + break; + } + default: + jj_la1[55] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } +jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; +jjtn000.image = t.image; + } finally { +if (jjtc000) { + jjtree.closeNodeScope(jjtn000, true); + } + } +} + final public void RelationalExpression() throws ParseException {/*@bgen(jjtree) RelationalExpression */ ASTRelationalExpression jjtn000 = new ASTRelationalExpression(JJTRELATIONALEXPRESSION); boolean jjtc000 = true; @@ -2519,33 +2542,12 @@ if (jjtc000) { case 91: case 92: case 93:{ - switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { - case 90:{ - jj_consume_token(90); - break; - } - case 91:{ - jj_consume_token(91); - break; - } - case 92:{ - jj_consume_token(92); - break; - } - case 93:{ - jj_consume_token(93); - break; - } - default: - jj_la1[56] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } + ComparaisonOperator(); RelationalExpression(); break; } default: - jj_la1[57] = jj_gen; + jj_la1[56] = jj_gen; ; } } catch (Throwable jjte000) { @@ -2569,6 +2571,43 @@ if (jjtc000) { } } + final public void ComparaisonOperator() throws ParseException {/*@bgen(jjtree) StringToken */ + ASTStringToken jjtn000 = new ASTStringToken(JJTSTRINGTOKEN); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000);Token t; + try { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case 90:{ + t = jj_consume_token(90); + break; + } + case 91:{ + t = jj_consume_token(91); + break; + } + case 92:{ + t = jj_consume_token(92); + break; + } + case 93:{ + t = jj_consume_token(93); + break; + } + default: + jj_la1[57] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } +jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; +jjtn000.image = t.image; + } finally { +if (jjtc000) { + jjtree.closeNodeScope(jjtn000, true); + } + } +} + final public void ShiftExpression() throws ParseException {/*@bgen(jjtree) ShiftExpression */ ASTShiftExpression jjtn000 = new ASTShiftExpression(JJTSHIFTEXPRESSION); boolean jjtc000 = true; @@ -2803,22 +2842,25 @@ if (jjtc000) { } final public void UnaryExpression() throws ParseException {/*@bgen(jjtree) UnaryExpression */ - ASTUnaryExpression jjtn000 = new ASTUnaryExpression(JJTUNARYEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); + ASTUnaryExpression jjtn000 = new ASTUnaryExpression(JJTUNARYEXPRESSION); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000);int choice = 0; try { if (jj_2_21(3)) { PostfixExpression(); +choice = 1; } else { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case 100:{ jj_consume_token(100); UnaryExpression(); +choice = 2; break; } case 101:{ jj_consume_token(101); UnaryExpression(); +choice = 3; break; } case 67: @@ -2829,12 +2871,14 @@ if (jjtc000) { case 103:{ UnaryOperator(); CastExpression(); +choice = 4; break; } case SIZEOF:{ jj_consume_token(SIZEOF); if (jj_2_20(2147483647)) { UnaryExpression(); +choice = 5; } else { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case 63:{ @@ -2849,6 +2893,7 @@ if (jjtc000) { throw new ParseException(); } } +choice = 6; break; } default: @@ -2857,6 +2902,9 @@ if (jjtc000) { throw new ParseException(); } } +jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; +jjtn000.choice = choice; } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); @@ -2878,34 +2926,34 @@ if (jjtc000) { } } - final public void UnaryOperator() throws ParseException {/*@bgen(jjtree) UnaryOperator */ - ASTUnaryOperator jjtn000 = new ASTUnaryOperator(JJTUNARYOPERATOR); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); + final public void UnaryOperator() throws ParseException {/*@bgen(jjtree) StringToken */ + ASTStringToken jjtn000 = new ASTStringToken(JJTSTRINGTOKEN); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000);Token t; try { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case 87:{ - jj_consume_token(87); + t = jj_consume_token(87); break; } case 67:{ - jj_consume_token(67); + t = jj_consume_token(67); break; } case 96:{ - jj_consume_token(96); + t = jj_consume_token(96); break; } case 97:{ - jj_consume_token(97); + t = jj_consume_token(97); break; } case 102:{ - jj_consume_token(102); + t = jj_consume_token(102); break; } case 103:{ - jj_consume_token(103); + t = jj_consume_token(103); break; } default: @@ -2913,6 +2961,9 @@ if (jjtc000) { jj_consume_token(-1); throw new ParseException(); } +jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; +jjtn000.image = t.image; } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); @@ -3406,13 +3457,6 @@ if (jjtc000) { finally { jj_save(22, xla); } } - private boolean jj_3_17() - { - if (jj_3R_UnaryExpression_455_9_25()) return true; - if (jj_3R_AssignmentOperator_370_9_26()) return true; - return false; - } - private boolean jj_3_16() { if (jj_scan_token(ELSE)) return true; @@ -3420,126 +3464,82 @@ if (jjtc000) { return false; } - private boolean jj_3R_AssignmentOperator_370_9_26() + private boolean jj_3R_JumpStatement_352_26_125() { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(62)) { - jj_scanpos = xsp; - if (jj_scan_token(72)) { - jj_scanpos = xsp; - if (jj_scan_token(73)) { - jj_scanpos = xsp; - if (jj_scan_token(74)) { - jj_scanpos = xsp; - if (jj_scan_token(75)) { - jj_scanpos = xsp; - if (jj_scan_token(76)) { - jj_scanpos = xsp; - if (jj_scan_token(77)) { - jj_scanpos = xsp; - if (jj_scan_token(78)) { - jj_scanpos = xsp; - if (jj_scan_token(79)) { - jj_scanpos = xsp; - if (jj_scan_token(80)) { - jj_scanpos = xsp; - if (jj_scan_token(81)) return true; - } - } - } - } - } - } - } - } - } - } + if (jj_scan_token(BREAK)) return true; return false; } private boolean jj_3_18() { - if (jj_3R_ConditionalExpression_378_9_27()) return true; + if (jj_3R_ConditionalExpression_384_9_27()) return true; return false; } - private boolean jj_3R_AssignmentExpression_361_9_66() + private boolean jj_3R_AssignmentExpression_367_9_66() { Token xsp; xsp = jj_scanpos; - if (jj_3R_AssignmentExpression_361_9_104()) { + if (jj_3R_AssignmentExpression_367_9_104()) { jj_scanpos = xsp; if (jj_3_18()) return true; } return false; } - private boolean jj_3R_AssignmentExpression_361_9_104() + private boolean jj_3R_AssignmentExpression_367_9_104() { - if (jj_3R_UnaryExpression_455_9_25()) return true; - if (jj_3R_AssignmentOperator_370_9_26()) return true; - if (jj_3R_AssignmentExpression_361_9_66()) return true; + if (jj_3R_UnaryExpression_486_9_25()) return true; + if (jj_3R_AssignmentOperator_376_9_26()) return true; + if (jj_3R_AssignmentExpression_367_9_66()) return true; return false; } - private boolean jj_3R_Expression_356_9_94() - { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_Expression_356_9_129()) { - jj_scanpos = xsp; - if (jj_3R_Expression_356_66_130()) return true; - } - return false; - } - - private boolean jj_3R_Expression_356_9_129() - { - if (jj_3R_AssignmentExpression_361_9_66()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_Expression_356_34_145()) { jj_scanpos = xsp; break; } - } - return false; - } - - private boolean jj_3R_JumpStatement_351_9_126() + private boolean jj_3R_JumpStatement_353_23_126() { if (jj_scan_token(RETURN)) return true; return false; } - private boolean jj_3R_JumpStatement_348_11_123() + private boolean jj_3R_Expression_362_9_94() + { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_Expression_362_9_129()) { + jj_scanpos = xsp; + if (jj_3R_Expression_362_66_130()) return true; + } + return false; + } + + private boolean jj_3R_Expression_362_9_129() + { + if (jj_3R_AssignmentExpression_367_9_66()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_Expression_362_34_145()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_JumpStatement_351_11_123() { if (jj_scan_token(GOTO)) return true; return false; } - private boolean jj_3R_JumpStatement_350_9_125() - { - if (jj_scan_token(BREAK)) return true; - return false; - } - - private boolean jj_3R_JumpStatement_349_9_124() - { - if (jj_scan_token(CONTINUE)) return true; - return false; - } - - private boolean jj_3R_JumpStatement_348_9_88() + private boolean jj_3R_JumpStatement_351_9_88() { Token xsp; xsp = jj_scanpos; - if (jj_3R_JumpStatement_348_11_123()) { + if (jj_3R_JumpStatement_351_11_123()) { jj_scanpos = xsp; - if (jj_3R_JumpStatement_349_9_124()) { + if (jj_3R_JumpStatement_351_37_124()) { jj_scanpos = xsp; - if (jj_3R_JumpStatement_350_9_125()) { + if (jj_3R_JumpStatement_352_26_125()) { jj_scanpos = xsp; - if (jj_3R_JumpStatement_351_9_126()) return true; + if (jj_3R_JumpStatement_353_23_126()) return true; } } } @@ -3645,7 +3645,7 @@ if (jjtc000) { private boolean jj_3R_ExpressionStatement_312_11_117() { - if (jj_3R_Expression_356_9_94()) return true; + if (jj_3R_Expression_362_9_94()) return true; return false; } @@ -3660,14 +3660,14 @@ if (jjtc000) { private boolean jj_3_14() { - if (jj_3R_Identifier_502_9_22()) return true; + if (jj_3R_Identifier_542_9_22()) return true; if (jj_scan_token(71)) return true; return false; } private boolean jj_3R_LabeledStatement_305_11_114() { - if (jj_3R_Identifier_502_9_22()) return true; + if (jj_3R_Identifier_542_9_22()) return true; return false; } @@ -3705,7 +3705,7 @@ if (jjtc000) { private boolean jj_3R_Statement_300_9_54() { - if (jj_3R_JumpStatement_348_9_88()) return true; + if (jj_3R_JumpStatement_351_9_88()) return true; return false; } @@ -3717,7 +3717,7 @@ if (jjtc000) { private boolean jj_3R_DirectAbstractDeclarator_290_17_156() { - if (jj_3R_ConstantExpression_383_9_139()) return true; + if (jj_3R_ConstantExpression_389_9_139()) return true; return false; } @@ -3786,7 +3786,7 @@ if (jjtc000) { private boolean jj_3R_DirectAbstractDeclarator_287_14_149() { - if (jj_3R_ConstantExpression_383_9_139()) return true; + if (jj_3R_ConstantExpression_389_9_139()) return true; return false; } @@ -3910,7 +3910,7 @@ if (jjtc000) { private boolean jj_3R_IdentifierList_258_23_146() { if (jj_scan_token(61)) return true; - if (jj_3R_Identifier_502_9_22()) return true; + if (jj_3R_Identifier_542_9_22()) return true; return false; } @@ -3934,7 +3934,7 @@ if (jjtc000) { private boolean jj_3R_Initializer_263_11_41() { - if (jj_3R_AssignmentExpression_361_9_66()) return true; + if (jj_3R_AssignmentExpression_367_9_66()) return true; return false; } @@ -3975,7 +3975,7 @@ if (jjtc000) { private boolean jj_3R_IdentifierList_258_9_141() { - if (jj_3R_Identifier_502_9_22()) return true; + if (jj_3R_Identifier_542_9_22()) return true; Token xsp; while (true) { xsp = jj_scanpos; @@ -4067,7 +4067,7 @@ if (jjtc000) { private boolean jj_3R_DirectDeclarator_226_17_135() { - if (jj_3R_ConstantExpression_383_9_139()) return true; + if (jj_3R_ConstantExpression_389_9_139()) return true; return false; } @@ -4138,7 +4138,7 @@ if (jjtc000) { private boolean jj_3R_DirectDeclarator_225_11_77() { - if (jj_3R_Identifier_502_9_22()) return true; + if (jj_3R_Identifier_542_9_22()) return true; return false; } @@ -4186,6 +4186,19 @@ if (jjtc000) { return false; } + private boolean jj_3R_Identifier_542_69_47() + { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(56)) jj_scanpos = xsp; + if (jj_scan_token(90)) return true; + if (jj_3R_Identifier_542_9_22()) return true; + if (jj_scan_token(91)) return true; + xsp = jj_scanpos; + if (jj_scan_token(56)) jj_scanpos = xsp; + return false; + } + private boolean jj_3R_SpecifierQualifierList_214_9_37() { if (jj_3R_TypeQualifier_194_9_72()) return true; @@ -4270,6 +4283,14 @@ if (jjtc000) { return false; } + private boolean jj_3R_UnaryExpression_490_86_91() + { + if (jj_scan_token(63)) return true; + if (jj_3R_TypeName_274_9_28()) return true; + if (jj_scan_token(64)) return true; + return false; + } + private boolean jj_3R_TypeSpecifier_182_9_70() { Token xsp; @@ -4323,16 +4344,23 @@ if (jjtc000) { return false; } - private boolean jj_3R_Identifier_502_69_47() + private boolean jj_3R_Constant_559_9_131() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(56)) jj_scanpos = xsp; - if (jj_scan_token(90)) return true; - if (jj_3R_Identifier_502_9_22()) return true; - if (jj_scan_token(91)) return true; - xsp = jj_scanpos; - if (jj_scan_token(56)) jj_scanpos = xsp; + if (jj_scan_token(12)) { + jj_scanpos = xsp; + if (jj_scan_token(16)) { + jj_scanpos = xsp; + if (jj_scan_token(18)) { + jj_scanpos = xsp; + if (jj_scan_token(19)) { + jj_scanpos = xsp; + if (jj_scan_token(20)) return true; + } + } + } + } return false; } @@ -4342,6 +4370,13 @@ if (jjtc000) { return false; } + private boolean jj_3R_ArgumentExpressionList_531_34_67() + { + if (jj_scan_token(61)) return true; + if (jj_3R_AssignmentExpression_367_9_66()) return true; + return false; + } + private boolean jj_3R_StorageClassSpecifier_171_9_68() { Token xsp; @@ -4362,6 +4397,12 @@ if (jjtc000) { return false; } + private boolean jj_3_23() + { + if (jj_scan_token(IDENTIFIER)) return true; + return false; + } + private boolean jj_3_2() { if (jj_3R_Declaration_148_9_14()) return true; @@ -4386,6 +4427,23 @@ if (jjtc000) { return false; } + private boolean jj_3R_Identifier_542_10_46() + { + if (jj_scan_token(IDENTIFIER)) return true; + return false; + } + + private boolean jj_3R_Identifier_542_9_22() + { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_Identifier_542_10_46()) { + jj_scanpos = xsp; + if (jj_3R_Identifier_542_69_47()) return true; + } + return false; + } + private boolean jj_3R_DeclarationSpecifiers_158_9_32() { if (jj_3R_StorageClassSpecifier_171_9_68()) return true; @@ -4426,12 +4484,49 @@ if (jjtc000) { return false; } + private boolean jj_3R_PostfixExpression_514_29_102() + { + if (jj_scan_token(100)) return true; + return false; + } + private boolean jj_3_1() { if (jj_3R_DeclarationSpecifiers_158_9_13()) return true; return false; } + private boolean jj_3R_PostfixExpression_511_31_65() + { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_PostfixExpression_511_31_98()) { + jj_scanpos = xsp; + if (jj_3R_PostfixExpression_512_9_99()) { + jj_scanpos = xsp; + if (jj_3R_PostfixExpression_513_9_100()) { + jj_scanpos = xsp; + if (jj_3R_PostfixExpression_514_9_101()) { + jj_scanpos = xsp; + if (jj_3R_PostfixExpression_514_29_102()) { + jj_scanpos = xsp; + if (jj_3R_PostfixExpression_515_16_103()) return true; + } + } + } + } + } + return false; + } + + private boolean jj_3R_PostfixExpression_511_31_98() + { + if (jj_scan_token(65)) return true; + if (jj_3R_Expression_362_9_94()) return true; + if (jj_scan_token(66)) return true; + return false; + } + private boolean jj_3R_Declaration_148_9_14() { if (jj_3R_DeclarationSpecifiers_158_9_13()) return true; @@ -4442,212 +4537,111 @@ if (jjtc000) { return false; } - private boolean jj_3R_UnaryExpression_459_70_91() + private boolean jj_3R_ArgumentExpressionList_531_9_31() { - if (jj_scan_token(63)) return true; - if (jj_3R_TypeName_274_9_28()) return true; - if (jj_scan_token(64)) return true; - return false; - } - - private boolean jj_3R_Constant_519_9_131() - { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(12)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) { - jj_scanpos = xsp; - if (jj_scan_token(18)) { - jj_scanpos = xsp; - if (jj_scan_token(19)) { - jj_scanpos = xsp; - if (jj_scan_token(20)) return true; - } - } - } - } - return false; - } - - private boolean jj_3R_ArgumentExpressionList_491_34_67() - { - if (jj_scan_token(61)) return true; - if (jj_3R_AssignmentExpression_361_9_66()) return true; - return false; - } - - private boolean jj_3_23() - { - if (jj_scan_token(IDENTIFIER)) return true; - return false; - } - - private boolean jj_3R_Identifier_502_10_46() - { - if (jj_scan_token(IDENTIFIER)) return true; - return false; - } - - private boolean jj_3R_Identifier_502_9_22() - { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_Identifier_502_10_46()) { - jj_scanpos = xsp; - if (jj_3R_Identifier_502_69_47()) return true; - } - return false; - } - - private boolean jj_3R_PostfixExpression_474_29_102() - { - if (jj_scan_token(100)) return true; - return false; - } - - private boolean jj_3R_PostfixExpression_471_31_65() - { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_PostfixExpression_471_31_98()) { - jj_scanpos = xsp; - if (jj_3R_PostfixExpression_472_9_99()) { - jj_scanpos = xsp; - if (jj_3R_PostfixExpression_473_9_100()) { - jj_scanpos = xsp; - if (jj_3R_PostfixExpression_474_9_101()) { - jj_scanpos = xsp; - if (jj_3R_PostfixExpression_474_29_102()) { - jj_scanpos = xsp; - if (jj_3R_PostfixExpression_475_16_103()) return true; - } - } - } - } - } - return false; - } - - private boolean jj_3R_PostfixExpression_471_31_98() - { - if (jj_scan_token(65)) return true; - if (jj_3R_Expression_356_9_94()) return true; - if (jj_scan_token(66)) return true; - return false; - } - - private boolean jj_3R_ArgumentExpressionList_491_9_31() - { - if (jj_3R_AssignmentExpression_361_9_66()) return true; + if (jj_3R_AssignmentExpression_367_9_66()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_ArgumentExpressionList_491_34_67()) { jj_scanpos = xsp; break; } + if (jj_3R_ArgumentExpressionList_531_34_67()) { jj_scanpos = xsp; break; } } return false; } private boolean jj_3_22() { - if (jj_3R_ArgumentExpressionList_491_9_31()) return true; + if (jj_3R_ArgumentExpressionList_531_9_31()) return true; return false; } - private boolean jj_3R_PrimaryExpression_484_11_95() + private boolean jj_3R_PrimaryExpression_524_11_95() { - if (jj_3R_Identifier_502_9_22()) return true; + if (jj_3R_Identifier_542_9_22()) return true; return false; } - private boolean jj_3R_PrimaryExpression_486_9_97() + private boolean jj_3R_PrimaryExpression_526_9_97() { if (jj_scan_token(63)) return true; - if (jj_3R_Expression_356_9_94()) return true; + if (jj_3R_Expression_362_9_94()) return true; if (jj_scan_token(64)) return true; return false; } - private boolean jj_3R_PrimaryExpression_485_9_96() + private boolean jj_3R_PrimaryExpression_525_9_96() { - if (jj_3R_Constant_519_9_131()) return true; + if (jj_3R_Constant_559_9_131()) return true; return false; } - private boolean jj_3R_PrimaryExpression_484_9_64() + private boolean jj_3R_PrimaryExpression_524_9_64() { Token xsp; xsp = jj_scanpos; - if (jj_3R_PrimaryExpression_484_11_95()) { + if (jj_3R_PrimaryExpression_524_11_95()) { jj_scanpos = xsp; - if (jj_3R_PrimaryExpression_485_9_96()) { + if (jj_3R_PrimaryExpression_525_9_96()) { jj_scanpos = xsp; - if (jj_3R_PrimaryExpression_486_9_97()) return true; + if (jj_3R_PrimaryExpression_526_9_97()) return true; } } return false; } - private boolean jj_3R_PostfixExpression_475_16_103() + private boolean jj_3R_PostfixExpression_515_16_103() { if (jj_scan_token(101)) return true; return false; } - private boolean jj_3_20() + private boolean jj_3R_PostfixExpression_512_15_132() { - if (jj_3R_UnaryExpression_455_9_25()) return true; + if (jj_3R_ArgumentExpressionList_531_9_31()) return true; return false; } - private boolean jj_3R_PostfixExpression_472_15_132() - { - if (jj_3R_ArgumentExpressionList_491_9_31()) return true; - return false; - } - - private boolean jj_3R_PostfixExpression_474_9_101() + private boolean jj_3R_PostfixExpression_514_9_101() { if (jj_scan_token(105)) return true; - if (jj_3R_Identifier_502_9_22()) return true; + if (jj_3R_Identifier_542_9_22()) return true; return false; } - private boolean jj_3R_PostfixExpression_473_9_100() + private boolean jj_3R_PostfixExpression_513_9_100() { if (jj_scan_token(104)) return true; - if (jj_3R_Identifier_502_9_22()) return true; + if (jj_3R_Identifier_542_9_22()) return true; return false; } - private boolean jj_3R_PostfixExpression_472_9_99() + private boolean jj_3R_PostfixExpression_512_9_99() { if (jj_scan_token(63)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_PostfixExpression_472_15_132()) jj_scanpos = xsp; + if (jj_3R_PostfixExpression_512_15_132()) jj_scanpos = xsp; if (jj_scan_token(64)) return true; return false; } - private boolean jj_3R_PostfixExpression_471_9_30() + private boolean jj_3R_PostfixExpression_511_9_30() { - if (jj_3R_PrimaryExpression_484_9_64()) return true; + if (jj_3R_PrimaryExpression_524_9_64()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_PostfixExpression_471_31_65()) { jj_scanpos = xsp; break; } + if (jj_3R_PostfixExpression_511_31_65()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_UnaryExpression_459_20_90() + private boolean jj_3_20() { - if (jj_3R_UnaryExpression_455_9_25()) return true; + if (jj_3R_UnaryExpression_486_9_25()) return true; return false; } - private boolean jj_3R_UnaryOperator_464_9_89() + private boolean jj_3R_UnaryOperator_501_9_89() { Token xsp; xsp = jj_scanpos; @@ -4670,7 +4664,13 @@ if (jjtc000) { return false; } - private boolean jj_3R_MultiplicativeExpression_444_28_164() + private boolean jj_3R_UnaryExpression_490_20_90() + { + if (jj_3R_UnaryExpression_486_9_25()) return true; + return false; + } + + private boolean jj_3R_MultiplicativeExpression_472_28_166() { Token xsp; xsp = jj_scanpos; @@ -4681,7 +4681,26 @@ if (jjtc000) { if (jj_scan_token(99)) return true; } } - if (jj_3R_MultiplicativeExpression_444_9_162()) return true; + if (jj_3R_MultiplicativeExpression_472_9_164()) return true; + return false; + } + + private boolean jj_3R_UnaryExpression_490_9_58() + { + if (jj_scan_token(SIZEOF)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_UnaryExpression_490_20_90()) { + jj_scanpos = xsp; + if (jj_3R_UnaryExpression_490_86_91()) return true; + } + return false; + } + + private boolean jj_3R_UnaryExpression_489_9_57() + { + if (jj_3R_UnaryOperator_501_9_89()) return true; + if (jj_3R_CastExpression_477_9_29()) return true; return false; } @@ -4690,69 +4709,43 @@ if (jjtc000) { if (jj_scan_token(63)) return true; if (jj_3R_TypeName_274_9_28()) return true; if (jj_scan_token(64)) return true; - if (jj_3R_CastExpression_449_9_29()) return true; + if (jj_3R_CastExpression_477_9_29()) return true; return false; } - private boolean jj_3R_UnaryExpression_459_9_58() - { - if (jj_scan_token(SIZEOF)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_UnaryExpression_459_20_90()) { - jj_scanpos = xsp; - if (jj_3R_UnaryExpression_459_70_91()) return true; - } - return false; - } - - private boolean jj_3R_UnaryExpression_458_9_57() - { - if (jj_3R_UnaryOperator_464_9_89()) return true; - if (jj_3R_CastExpression_449_9_29()) return true; - return false; - } - - private boolean jj_3R_AdditiveExpression_428_38_163() - { - if (jj_3R_AdditionOperator_436_9_165()) return true; - if (jj_3R_AdditiveExpression_428_9_160()) return true; - return false; - } - - private boolean jj_3R_UnaryExpression_457_9_56() + private boolean jj_3R_UnaryExpression_488_9_56() { if (jj_scan_token(101)) return true; - if (jj_3R_UnaryExpression_455_9_25()) return true; + if (jj_3R_UnaryExpression_486_9_25()) return true; return false; } private boolean jj_3_21() { - if (jj_3R_PostfixExpression_471_9_30()) return true; + if (jj_3R_PostfixExpression_511_9_30()) return true; return false; } - private boolean jj_3R_UnaryExpression_456_9_55() + private boolean jj_3R_UnaryExpression_487_9_55() { if (jj_scan_token(100)) return true; - if (jj_3R_UnaryExpression_455_9_25()) return true; + if (jj_3R_UnaryExpression_486_9_25()) return true; return false; } - private boolean jj_3R_UnaryExpression_455_9_25() + private boolean jj_3R_UnaryExpression_486_9_25() { Token xsp; xsp = jj_scanpos; if (jj_3_21()) { jj_scanpos = xsp; - if (jj_3R_UnaryExpression_456_9_55()) { + if (jj_3R_UnaryExpression_487_9_55()) { jj_scanpos = xsp; - if (jj_3R_UnaryExpression_457_9_56()) { + if (jj_3R_UnaryExpression_488_9_56()) { jj_scanpos = xsp; - if (jj_3R_UnaryExpression_458_9_57()) { + if (jj_3R_UnaryExpression_489_9_57()) { jj_scanpos = xsp; - if (jj_3R_UnaryExpression_459_9_58()) return true; + if (jj_3R_UnaryExpression_490_9_58()) return true; } } } @@ -4760,33 +4753,40 @@ if (jjtc000) { return false; } - private boolean jj_3R_CastExpression_449_11_62() + private boolean jj_3R_AdditiveExpression_456_38_165() + { + if (jj_3R_AdditionOperator_464_9_167()) return true; + if (jj_3R_AdditiveExpression_456_9_161()) return true; + return false; + } + + private boolean jj_3R_CastExpression_477_11_62() { if (jj_scan_token(63)) return true; if (jj_3R_TypeName_274_9_28()) return true; if (jj_scan_token(64)) return true; - if (jj_3R_CastExpression_449_9_29()) return true; + if (jj_3R_CastExpression_477_9_29()) return true; return false; } - private boolean jj_3R_CastExpression_450_9_63() + private boolean jj_3R_CastExpression_478_9_63() { - if (jj_3R_UnaryExpression_455_9_25()) return true; + if (jj_3R_UnaryExpression_486_9_25()) return true; return false; } - private boolean jj_3R_CastExpression_449_9_29() + private boolean jj_3R_CastExpression_477_9_29() { Token xsp; xsp = jj_scanpos; - if (jj_3R_CastExpression_449_11_62()) { + if (jj_3R_CastExpression_477_11_62()) { jj_scanpos = xsp; - if (jj_3R_CastExpression_450_9_63()) return true; + if (jj_3R_CastExpression_478_9_63()) return true; } return false; } - private boolean jj_3R_ShiftExpression_423_32_161() + private boolean jj_3R_ShiftExpression_451_32_162() { Token xsp; xsp = jj_scanpos; @@ -4794,32 +4794,63 @@ if (jjtc000) { jj_scanpos = xsp; if (jj_scan_token(95)) return true; } - if (jj_3R_ShiftExpression_423_9_158()) return true; + if (jj_3R_ShiftExpression_451_9_158()) return true; return false; } - private boolean jj_3R_MultiplicativeExpression_444_9_162() + private boolean jj_3R_MultiplicativeExpression_472_9_164() { - if (jj_3R_CastExpression_449_9_29()) return true; + if (jj_3R_CastExpression_477_9_29()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_MultiplicativeExpression_444_28_164()) jj_scanpos = xsp; + if (jj_3R_MultiplicativeExpression_472_28_166()) jj_scanpos = xsp; return false; } - private boolean jj_3R_EqualityExpression_413_34_155() + private boolean jj_3R_AdditionOperator_464_9_167() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(88)) { + if (jj_scan_token(96)) { jj_scanpos = xsp; - if (jj_scan_token(89)) return true; + if (jj_scan_token(97)) return true; } - if (jj_3R_EqualityExpression_413_9_147()) return true; return false; } - private boolean jj_3R_RelationalExpression_418_28_159() + private boolean jj_3R_AdditiveExpression_456_9_161() + { + if (jj_3R_MultiplicativeExpression_472_9_164()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_AdditiveExpression_456_38_165()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_RelationalExpression_435_28_159() + { + if (jj_3R_ComparaisonOperator_443_9_163()) return true; + if (jj_3R_RelationalExpression_435_9_154()) return true; + return false; + } + + private boolean jj_3R_ShiftExpression_451_9_158() + { + if (jj_3R_AdditiveExpression_456_9_161()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_ShiftExpression_451_32_162()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_EqualityExpression_419_34_155() + { + if (jj_3R_EqualityOperator_427_9_160()) return true; + if (jj_3R_EqualityExpression_419_9_147()) return true; + return false; + } + + private boolean jj_3R_ComparaisonOperator_443_9_163() { Token xsp; xsp = jj_scanpos; @@ -4833,172 +4864,204 @@ if (jjtc000) { } } } - if (jj_3R_RelationalExpression_418_9_154()) return true; return false; } - private boolean jj_3R_AdditionOperator_436_9_165() + private boolean jj_3R_ANDExpression_414_32_148() + { + if (jj_scan_token(87)) return true; + if (jj_3R_ANDExpression_414_9_142()) return true; + return false; + } + + private boolean jj_3R_RelationalExpression_435_9_154() + { + if (jj_3R_ShiftExpression_451_9_158()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_RelationalExpression_435_28_159()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_InclusiveORExpression_404_35_138() + { + if (jj_scan_token(85)) return true; + if (jj_3R_InclusiveORExpression_404_9_127()) return true; + return false; + } + + private boolean jj_3R_EqualityOperator_427_9_160() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(96)) { + if (jj_scan_token(88)) { jj_scanpos = xsp; - if (jj_scan_token(97)) return true; + if (jj_scan_token(89)) return true; } return false; } - private boolean jj_3R_ANDExpression_408_32_148() - { - if (jj_scan_token(87)) return true; - if (jj_3R_ANDExpression_408_9_142()) return true; - return false; - } - - private boolean jj_3R_AdditiveExpression_428_9_160() - { - if (jj_3R_MultiplicativeExpression_444_9_162()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_AdditiveExpression_428_38_163()) jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_InclusiveORExpression_398_35_138() - { - if (jj_scan_token(85)) return true; - if (jj_3R_InclusiveORExpression_398_9_127()) return true; - return false; - } - - private boolean jj_3R_ShiftExpression_423_9_158() - { - if (jj_3R_AdditiveExpression_428_9_160()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_ShiftExpression_423_32_161()) jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_ExclusiveORExpression_403_27_143() + private boolean jj_3R_ExclusiveORExpression_409_27_143() { if (jj_scan_token(86)) return true; - if (jj_3R_ExclusiveORExpression_403_9_137()) return true; + if (jj_3R_ExclusiveORExpression_409_9_137()) return true; return false; } - private boolean jj_3R_LogicalANDExpression_393_35_128() + private boolean jj_3R_LogicalANDExpression_399_35_128() { if (jj_scan_token(84)) return true; - if (jj_3R_LogicalANDExpression_393_9_92()) return true; + if (jj_3R_LogicalANDExpression_399_9_92()) return true; return false; } - private boolean jj_3R_RelationalExpression_418_9_154() + private boolean jj_3R_EqualityExpression_419_9_147() { - if (jj_3R_ShiftExpression_423_9_158()) return true; + if (jj_3R_RelationalExpression_435_9_154()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_RelationalExpression_418_28_159()) jj_scanpos = xsp; + if (jj_3R_EqualityExpression_419_34_155()) jj_scanpos = xsp; return false; } - private boolean jj_3R_EqualityExpression_413_9_147() - { - if (jj_3R_RelationalExpression_418_9_154()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_EqualityExpression_413_34_155()) jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_LogicalORExpression_388_34_93() + private boolean jj_3R_LogicalORExpression_394_34_93() { if (jj_scan_token(83)) return true; - if (jj_3R_LogicalORExpression_388_9_59()) return true; + if (jj_3R_LogicalORExpression_394_9_59()) return true; return false; } - private boolean jj_3R_Expression_356_66_130() + private boolean jj_3R_Expression_362_66_130() { if (jj_3R_DeclarationSpecifiers_158_9_13()) return true; if (jj_3R_InitDeclaratorList_202_9_74()) return true; return false; } - private boolean jj_3R_ANDExpression_408_9_142() + private boolean jj_3R_ANDExpression_414_9_142() { - if (jj_3R_EqualityExpression_413_9_147()) return true; + if (jj_3R_EqualityExpression_419_9_147()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_ANDExpression_408_32_148()) jj_scanpos = xsp; + if (jj_3R_ANDExpression_414_32_148()) jj_scanpos = xsp; return false; } - private boolean jj_3R_ExclusiveORExpression_403_9_137() + private boolean jj_3R_ExclusiveORExpression_409_9_137() { - if (jj_3R_ANDExpression_408_9_142()) return true; + if (jj_3R_ANDExpression_414_9_142()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_ExclusiveORExpression_403_27_143()) jj_scanpos = xsp; + if (jj_3R_ExclusiveORExpression_409_27_143()) jj_scanpos = xsp; return false; } - private boolean jj_3R_ConditionalExpression_378_33_60() + private boolean jj_3R_ConditionalExpression_384_33_60() { if (jj_scan_token(82)) return true; - if (jj_3R_Expression_356_9_94()) return true; + if (jj_3R_Expression_362_9_94()) return true; if (jj_scan_token(71)) return true; - if (jj_3R_ConditionalExpression_378_9_27()) return true; + if (jj_3R_ConditionalExpression_384_9_27()) return true; return false; } - private boolean jj_3R_InclusiveORExpression_398_9_127() + private boolean jj_3R_InclusiveORExpression_404_9_127() { - if (jj_3R_ExclusiveORExpression_403_9_137()) return true; + if (jj_3R_ExclusiveORExpression_409_9_137()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_InclusiveORExpression_398_35_138()) jj_scanpos = xsp; + if (jj_3R_InclusiveORExpression_404_35_138()) jj_scanpos = xsp; return false; } - private boolean jj_3R_LogicalANDExpression_393_9_92() + private boolean jj_3R_LogicalANDExpression_399_9_92() { - if (jj_3R_InclusiveORExpression_398_9_127()) return true; + if (jj_3R_InclusiveORExpression_404_9_127()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_LogicalANDExpression_393_35_128()) jj_scanpos = xsp; + if (jj_3R_LogicalANDExpression_399_35_128()) jj_scanpos = xsp; return false; } - private boolean jj_3R_LogicalORExpression_388_9_59() + private boolean jj_3R_LogicalORExpression_394_9_59() { - if (jj_3R_LogicalANDExpression_393_9_92()) return true; + if (jj_3R_LogicalANDExpression_399_9_92()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_LogicalORExpression_388_34_93()) jj_scanpos = xsp; + if (jj_3R_LogicalORExpression_394_34_93()) jj_scanpos = xsp; return false; } - private boolean jj_3R_ConstantExpression_383_9_139() + private boolean jj_3R_ConstantExpression_389_9_139() { - if (jj_3R_ConditionalExpression_378_9_27()) return true; + if (jj_3R_ConditionalExpression_384_9_27()) return true; return false; } - private boolean jj_3R_Expression_356_34_145() + private boolean jj_3R_Expression_362_34_145() { if (jj_scan_token(61)) return true; - if (jj_3R_AssignmentExpression_361_9_66()) return true; + if (jj_3R_AssignmentExpression_367_9_66()) return true; return false; } - private boolean jj_3R_ConditionalExpression_378_9_27() + private boolean jj_3R_ConditionalExpression_384_9_27() { - if (jj_3R_LogicalORExpression_388_9_59()) return true; + if (jj_3R_LogicalORExpression_394_9_59()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_ConditionalExpression_378_33_60()) jj_scanpos = xsp; + if (jj_3R_ConditionalExpression_384_33_60()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_JumpStatement_351_37_124() + { + if (jj_scan_token(CONTINUE)) return true; + return false; + } + + private boolean jj_3_17() + { + if (jj_3R_UnaryExpression_486_9_25()) return true; + if (jj_3R_AssignmentOperator_376_9_26()) return true; + return false; + } + + private boolean jj_3R_AssignmentOperator_376_9_26() + { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(62)) { + jj_scanpos = xsp; + if (jj_scan_token(72)) { + jj_scanpos = xsp; + if (jj_scan_token(73)) { + jj_scanpos = xsp; + if (jj_scan_token(74)) { + jj_scanpos = xsp; + if (jj_scan_token(75)) { + jj_scanpos = xsp; + if (jj_scan_token(76)) { + jj_scanpos = xsp; + if (jj_scan_token(77)) { + jj_scanpos = xsp; + if (jj_scan_token(78)) { + jj_scanpos = xsp; + if (jj_scan_token(79)) { + jj_scanpos = xsp; + if (jj_scan_token(80)) { + jj_scanpos = xsp; + if (jj_scan_token(81)) return true; + } + } + } + } + } + } + } + } + } + } return false; } diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/CParserDefaultVisitor.java b/src/main/java/ghidrust/decompiler/parser/c/gen/CParserDefaultVisitor.java index f8ea158..c04da8b 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/CParserDefaultVisitor.java +++ b/src/main/java/ghidrust/decompiler/parser/c/gen/CParserDefaultVisitor.java @@ -150,9 +150,6 @@ public class CParserDefaultVisitor implements CParserVisitor{ public Object visit(ASTUnaryExpression node, Object data){ return defaultVisit(node, data); } - public Object visit(ASTUnaryOperator node, Object data){ - return defaultVisit(node, data); - } public Object visit(ASTPostfixExpression node, Object data){ return defaultVisit(node, data); } @@ -163,4 +160,4 @@ public class CParserDefaultVisitor implements CParserVisitor{ return defaultVisit(node, data); } } -/* JavaCC - OriginalChecksum=02bd2f1bbfbe0abbaf156b1dcc67f14c (do not edit this line) */ +/* JavaCC - OriginalChecksum=0df21b33819a468166075ef388879333 (do not edit this line) */ diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/CParserTreeConstants.java b/src/main/java/ghidrust/decompiler/parser/c/gen/CParserTreeConstants.java index 185825c..cdaf03d 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/CParserTreeConstants.java +++ b/src/main/java/ghidrust/decompiler/parser/c/gen/CParserTreeConstants.java @@ -50,10 +50,9 @@ public interface CParserTreeConstants public int JJTMULTIPLICATIVEEXPRESSION = 44; public int JJTCASTEXPRESSION = 45; public int JJTUNARYEXPRESSION = 46; - public int JJTUNARYOPERATOR = 47; - public int JJTPOSTFIXEXPRESSION = 48; - public int JJTPRIMARYEXPRESSION = 49; - public int JJTARGUMENTEXPRESSIONLIST = 50; + public int JJTPOSTFIXEXPRESSION = 47; + public int JJTPRIMARYEXPRESSION = 48; + public int JJTARGUMENTEXPRESSIONLIST = 49; public String[] jjtNodeName = { @@ -104,10 +103,9 @@ public interface CParserTreeConstants "MultiplicativeExpression", "CastExpression", "UnaryExpression", - "UnaryOperator", "PostfixExpression", "PrimaryExpression", "ArgumentExpressionList", }; } -/* JavaCC - OriginalChecksum=6fdc7fd778ad43f052fadf52075bfbaa (do not edit this line) */ +/* JavaCC - OriginalChecksum=e23e00fb56ffad799524355d8342c899 (do not edit this line) */ diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/CParserVisitor.java b/src/main/java/ghidrust/decompiler/parser/c/gen/CParserVisitor.java index 8ccf463..e6c17da 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/CParserVisitor.java +++ b/src/main/java/ghidrust/decompiler/parser/c/gen/CParserVisitor.java @@ -51,9 +51,8 @@ public interface CParserVisitor public Object visit(ASTMultiplicativeExpression node, Object data); public Object visit(ASTCastExpression node, Object data); public Object visit(ASTUnaryExpression node, Object data); - public Object visit(ASTUnaryOperator node, Object data); public Object visit(ASTPostfixExpression node, Object data); public Object visit(ASTPrimaryExpression node, Object data); public Object visit(ASTArgumentExpressionList node, Object data); } -/* JavaCC - OriginalChecksum=1f05897c3d57918f597035227f8d60dd (do not edit this line) */ +/* JavaCC - OriginalChecksum=c11b3a8c5731c3cdcccff61a264d1174 (do not edit this line) */ diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/c.jj b/src/main/java/ghidrust/decompiler/parser/c/gen/c.jj index 8b9ef9a..74b636e 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/c.jj +++ b/src/main/java/ghidrust/decompiler/parser/c/gen/c.jj @@ -1110,18 +1110,29 @@ void IterationStatement() : /*@egen*/ } -void JumpStatement() : {/*@bgen(jjtree) JumpStatement */ - ASTJumpStatement jjtn000 = new ASTJumpStatement(JJTJUMPSTATEMENT); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); -/*@egen*/} +void JumpStatement() : +{/*@bgen(jjtree) JumpStatement */ + ASTJumpStatement jjtn000 = new ASTJumpStatement(JJTJUMPSTATEMENT); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000); +/*@egen*/ + int choice = 0; +} {/*@bgen(jjtree) JumpStatement */ try { /*@egen*/ - ( Identifier() ";" | - ";" | - ";" | - [ Expression() ] ";" )/*@bgen(jjtree)*/ + ( Identifier() ";" | { choice = 1; } + ";" | { choice = 2; } + ";" | { choice = 3; } + [ Expression() ] ";" { choice = 4; } )/*@bgen(jjtree)*/ + { + jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; + } +/*@egen*/ + { + jjtn000.choice = choice; + }/*@bgen(jjtree)*/ } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); @@ -1460,7 +1471,7 @@ void EqualityExpression() : {/*@bgen(jjtree) EqualityExpression */ {/*@bgen(jjtree) EqualityExpression */ try { /*@egen*/ - RelationalExpression() [ ( "==" | "!=" ) EqualityExpression() ]/*@bgen(jjtree)*/ + RelationalExpression() [ EqualityOperator() EqualityExpression() ]/*@bgen(jjtree)*/ } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); @@ -1483,6 +1494,34 @@ void EqualityExpression() : {/*@bgen(jjtree) EqualityExpression */ /*@egen*/ } +void EqualityOperator() : +{/*@bgen(jjtree) StringToken */ + ASTStringToken jjtn000 = new ASTStringToken(JJTSTRINGTOKEN); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000); +/*@egen*/ + Token t; +} +{/*@bgen(jjtree) StringToken */ + try { +/*@egen*/ + ( t = "==" | t = "!=" )/*@bgen(jjtree)*/ + { + jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; + } +/*@egen*/ + { + jjtn000.image = t.image; + }/*@bgen(jjtree)*/ + } finally { + if (jjtc000) { + jjtree.closeNodeScope(jjtn000, true); + } + } +/*@egen*/ +} + void RelationalExpression() : {/*@bgen(jjtree) RelationalExpression */ ASTRelationalExpression jjtn000 = new ASTRelationalExpression(JJTRELATIONALEXPRESSION); boolean jjtc000 = true; @@ -1491,7 +1530,7 @@ void RelationalExpression() : {/*@bgen(jjtree) RelationalExpression */ {/*@bgen(jjtree) RelationalExpression */ try { /*@egen*/ - ShiftExpression() [( "<" | ">" | "<=" | ">=" ) RelationalExpression()]/*@bgen(jjtree)*/ + ShiftExpression() [ComparaisonOperator() RelationalExpression()]/*@bgen(jjtree)*/ } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); @@ -1514,6 +1553,34 @@ void RelationalExpression() : {/*@bgen(jjtree) RelationalExpression */ /*@egen*/ } +void ComparaisonOperator() : +{/*@bgen(jjtree) StringToken */ + ASTStringToken jjtn000 = new ASTStringToken(JJTSTRINGTOKEN); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000); +/*@egen*/ + Token t; +} +{/*@bgen(jjtree) StringToken */ + try { +/*@egen*/ + ( t = "<" | t = ">" | t = "<=" | t = ">=" )/*@bgen(jjtree)*/ + { + jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; + } +/*@egen*/ + { + jjtn000.image = t.image; + }/*@bgen(jjtree)*/ + } finally { + if (jjtc000) { + jjtree.closeNodeScope(jjtn000, true); + } + } +/*@egen*/ +} + void ShiftExpression() : {/*@bgen(jjtree) ShiftExpression */ ASTShiftExpression jjtn000 = new ASTShiftExpression(JJTSHIFTEXPRESSION); boolean jjtc000 = true; @@ -1667,19 +1734,30 @@ void CastExpression() : {/*@bgen(jjtree) CastExpression */ /*@egen*/ } -void UnaryExpression() : {/*@bgen(jjtree) UnaryExpression */ - ASTUnaryExpression jjtn000 = new ASTUnaryExpression(JJTUNARYEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); -/*@egen*/} +void UnaryExpression() : +{/*@bgen(jjtree) UnaryExpression */ + ASTUnaryExpression jjtn000 = new ASTUnaryExpression(JJTUNARYEXPRESSION); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000); +/*@egen*/ + int choice = 0; +} {/*@bgen(jjtree) UnaryExpression */ try { /*@egen*/ - ( LOOKAHEAD(3) PostfixExpression() | - "++" UnaryExpression() | - "--" UnaryExpression() | - UnaryOperator() CastExpression() | - ( LOOKAHEAD(UnaryExpression() ) UnaryExpression() | "(" TypeName() ")" ) )/*@bgen(jjtree)*/ + ( LOOKAHEAD(3) PostfixExpression() { choice = 1; } | + "++" UnaryExpression() { choice = 2; } | + "--" UnaryExpression() { choice = 3; } | + UnaryOperator() CastExpression() { choice = 4; } | + ( LOOKAHEAD(UnaryExpression() ) UnaryExpression() { choice = 5; } | "(" TypeName() ")" ) { choice = 6; } )/*@bgen(jjtree)*/ + { + jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; + } +/*@egen*/ + { + jjtn000.choice = choice; + }/*@bgen(jjtree)*/ } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); @@ -1702,15 +1780,26 @@ void UnaryExpression() : {/*@bgen(jjtree) UnaryExpression */ /*@egen*/ } -void UnaryOperator() : {/*@bgen(jjtree) UnaryOperator */ - ASTUnaryOperator jjtn000 = new ASTUnaryOperator(JJTUNARYOPERATOR); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); -/*@egen*/} -{/*@bgen(jjtree) UnaryOperator */ +void UnaryOperator() : +{/*@bgen(jjtree) StringToken */ + ASTStringToken jjtn000 = new ASTStringToken(JJTSTRINGTOKEN); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000); +/*@egen*/ + Token t; +} +{/*@bgen(jjtree) StringToken */ try { /*@egen*/ - ( "&" | "*" | "+" | "-" | "~" | "!" )/*@bgen(jjtree)*/ + ( t = "&" | t = "*" | t = "+" | t = "-" | t = "~" | t = "!" )/*@bgen(jjtree)*/ + { + jjtree.closeNodeScope(jjtn000, true); + jjtc000 = false; + } +/*@egen*/ + { + jjtn000.image = t.image; + }/*@bgen(jjtree)*/ } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); diff --git a/src/main/java/ghidrust/decompiler/parser/c/gen/c.jjt b/src/main/java/ghidrust/decompiler/parser/c/gen/c.jjt index 2e0a3c5..4cde30e 100644 --- a/src/main/java/ghidrust/decompiler/parser/c/gen/c.jjt +++ b/src/main/java/ghidrust/decompiler/parser/c/gen/c.jjt @@ -343,12 +343,18 @@ void IterationStatement() : } } -void JumpStatement() : {} +void JumpStatement() : { - ( Identifier() ";" | - ";" | - ";" | - [ Expression() ] ";" ) + int choice = 0; +} +{ + ( Identifier() ";" | { choice = 1; } + ";" | { choice = 2; } + ";" | { choice = 3; } + [ Expression() ] ";" { choice = 4; } ) + { + jjtThis.choice = choice; + } } void Expression() : {} @@ -410,12 +416,34 @@ void ANDExpression() : {} void EqualityExpression() : {} { - RelationalExpression() [ ( "==" | "!=" ) EqualityExpression() ] + RelationalExpression() [ EqualityOperator() EqualityExpression() ] +} + +void EqualityOperator() #StringToken : +{ + Token t; +} +{ + ( t = "==" | t = "!=" ) + { + jjtThis.image = t.image; + } } void RelationalExpression() : {} { - ShiftExpression() [( "<" | ">" | "<=" | ">=" ) RelationalExpression()] + ShiftExpression() [ComparaisonOperator() RelationalExpression()] +} + +void ComparaisonOperator() #StringToken : +{ + Token t; +} +{ + ( t = "<" | t = ">" | t = "<=" | t = ">=" ) + { + jjtThis.image = t.image; + } } void ShiftExpression() : {} @@ -450,18 +478,30 @@ void CastExpression() : {} UnaryExpression() ) } -void UnaryExpression() : {} +void UnaryExpression() : { - ( LOOKAHEAD(3) PostfixExpression() | - "++" UnaryExpression() | - "--" UnaryExpression() | - UnaryOperator() CastExpression() | - ( LOOKAHEAD(UnaryExpression() ) UnaryExpression() | "(" TypeName() ")" ) ) + int choice = 0; +} +{ + ( LOOKAHEAD(3) PostfixExpression() { choice = 1; } | + "++" UnaryExpression() { choice = 2; } | + "--" UnaryExpression() { choice = 3; } | + UnaryOperator() CastExpression() { choice = 4; } | + ( LOOKAHEAD(UnaryExpression() ) UnaryExpression() { choice = 5; } | "(" TypeName() ")" ) { choice = 6; } ) + { + jjtThis.choice = choice; + } } -void UnaryOperator() : {} +void UnaryOperator() #StringToken : { - ( "&" | "*" | "+" | "-" | "~" | "!" ) + Token t; +} +{ + ( t = "&" | t = "*" | t = "+" | t = "-" | t = "~" | t = "!" ) + { + jjtThis.image = t.image; + } } void PostfixExpression() : { diff --git a/src/main/java/ghidrust/decompiler/parser/generate.sh b/src/main/java/ghidrust/decompiler/parser/generate.sh index f011513..166986d 100755 --- a/src/main/java/ghidrust/decompiler/parser/generate.sh +++ b/src/main/java/ghidrust/decompiler/parser/generate.sh @@ -4,7 +4,7 @@ cd c/gen -BACKUP_FILES="ASTPostfixExpression ASTIterationStatement \ +BACKUP_FILES="ASTPostfixExpression ASTIterationStatement ASTUnaryExpression ASTJumpStatement \ $(ls -1 AST*Token.java | cut -d. -f1 | tr '\n' ' ')" for file in $BACKUP_FILES; do