示例#1
0
 void StillPrimary(Scope scope, out IExpression expr, VarList vl)
 {
     IType type = new UnknownType();
     string name = "";
     expr = null;
     IExpression rhs;
     if (la.kind == 1) {
         Get();
         name = t.val;
         if (la.kind == 14) {
             Get();
             if (la.kind == 8) {
                 VariableDeclaration newestParam = new VariableDeclaration(name, type);
                 vl.Add(newestParam);
                 MultiVariableDeclaration parmDecl = new MultiVariableDeclaration(vl, null);
                 FunctionReturnDefinition(scope, out expr, parmDecl);
             }
             if (StartOf(1)) {
                 expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
                 Expression(scope, out rhs);
                 expr = new FunctionCall(expr, rhs);
             }
             expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
         } else if (la.kind == 7) {
             Get();
             TypeIdentifier(scope, out type);
             VariableDeclaration newestParam = new VariableDeclaration(name, type);
             vl.Add(newestParam);
             MultiVariableDeclaration parmDecl = new MultiVariableDeclaration(vl, null);
             if (la.kind == 8) {
                 FunctionReturnDefinition(scope, out expr, parmDecl);
                 if (la.kind == 14) {
                     Get();
                     if (StartOf(1)) {
                         Expression(scope, out rhs);
                         expr = new FunctionCall(expr, rhs);
                     }
                 } else if (StartOf(1)) {
                     Expression(scope, out rhs);
                     expr = new FunctionCall(expr, rhs);
                     if (la.kind == 14) {
                         Get();
                     } else if (la.kind == 11) {
                         ExpressionList el = new ExpressionList();
                         expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
                         el.Add(expr);
                         Get();
                         Secondary(scope, el, out expr);
                     } else SynErr(29);
                 } else if (la.kind == 11) {
                     ExpressionList el = new ExpressionList();
                     expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
                     el.Add(expr);
                     Get();
                     Secondary(scope, el, out expr);
                 } else SynErr(30);
             } else if (la.kind == 14) {
                 Get();
                 FunctionReturnDefinition(scope, out expr, parmDecl);
                 if (StartOf(1)) {
                     Expression(scope, out rhs);
                     expr = new FunctionCall(expr, rhs);
                 }
                 if (la.kind == 11) {
                     ExpressionList el = new ExpressionList();
                     expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
                     el.Add(expr);
                     Get();
                     Secondary(scope, el, out expr);
                 }
             } else if (la.kind == 11) {
                 VariableDeclaration vd;
                 NextNomination(ref scope, out vd);
                 FunctionReturnDefinition(scope, out expr, parmDecl);
                 if (StartOf(1)) {
                     Expression(scope, out rhs);
                     expr = new FunctionCall(expr, rhs);
                 }
             } else SynErr(31);
         } else if (la.kind == 11) {
             Get();
             vl.Add(new VariableDeclaration(name, type));
             StillPrimary(scope, out expr, vl);
         } else if (la.kind == 8) {
             VariableDeclaration newestParam = new VariableDeclaration(name, type);
             vl.Add(newestParam);
             MultiVariableDeclaration parmDecl = new MultiVariableDeclaration(vl, null);
             FunctionReturnDefinition(scope, out expr, parmDecl);
             if (la.kind == 14) {
                 Get();
                 Expression(scope, out rhs);
                 expr = new FunctionCall(expr, rhs);
             } else if (StartOf(3)) {
                 if (la.kind == 11) {
                     Get();
                 }
                 ExpressionList el = new ExpressionList();
                 expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
                 el.Add(expr);
                 Secondary(scope, el, out expr);
             } else SynErr(32);
         } else SynErr(33);
     } else if (la.kind == 3 || la.kind == 10) {
         if (la.kind == 3) {
             IntegerLiteral(scope, out expr);
         } else {
             ArrayLiteral(scope, out expr);
         }
         ExpressionList el = new ExpressionList();
         expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
         el.Add(expr);
         if (la.kind == 11) {
             Get();
             Secondary(scope, el, out expr);
         }
     } else SynErr(34);
 }
示例#2
0
 void VarAssignment(ref Scope scope, out IStatement stmt)
 {
     MultiVariableDeclaration mvd;
     IExpression expr = null;
     IExpression rhs = null;
     VariableDeclaration vd = null;
     stmt = null;
     if (la.kind == 21) {
         Get();
         VarNomination(ref scope, out mvd, true);
         Initializer(scope, out expr);
         stmt = new MultiVariableDeclaration(mvd.Declarations, expr);
     } else if (la.kind == 1) {
         SingleVarNomination(ref scope, out vd, false);
         if (la.kind == 20) {
             Initializer(scope, out expr);
             stmt = new MultiVariableDeclaration(new List<VariableDeclaration>(new VariableDeclaration[]{ vd }), expr);
         } else if (StartOf(1)) {
             Expression(scope, out rhs);
             stmt = new FunctionCall(vd, rhs);
         } else SynErr(41);
     } else if (la.kind == 1 || la.kind == 13) {
         VarNomination(ref scope, out mvd, false);
         Initializer(scope, out expr);
         stmt = new MultiVariableDeclaration(mvd.Declarations, expr);
     } else SynErr(42);
 }
示例#3
0
 void Primary(Scope scope, out IExpression expr)
 {
     IType type = new UnknownType();
     string name = "";
     expr = null;
     IExpression rhs;
     if (la.kind == 1) {
         Get();
         name = t.val;
         if (la.kind == 7 || la.kind == 8) {
             if (la.kind == 7) {
                 Get();
                 TypeIdentifier(scope, out type);
                 VariableDeclaration vd = new VariableDeclaration(name, type);
                 MultiVariableDeclaration parmDecl = new MultiVariableDeclaration(new List<VariableDeclaration>(new VariableDeclaration[] {vd}), null);
                 FunctionReturnDefinition(scope, out expr, parmDecl);
             } else {
                 VariableDeclaration vd = new VariableDeclaration(name, type);
                 MultiVariableDeclaration parmDecl = new MultiVariableDeclaration(new List<VariableDeclaration>(new VariableDeclaration[] {vd}), null);
                 FunctionReturnDefinition(scope, out expr, parmDecl);
             }
         }
         if (StartOf(1)) {
             expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
             Expression(scope, out rhs);
             expr = new FunctionCall(expr, rhs);
         }
         expr = expr ?? (IExpression)scope.GetDeclarationFor(name);
     } else if (la.kind == 13) {
         Get();
         VarList vl = new VarList();
         if (la.kind == 1 || la.kind == 3 || la.kind == 10) {
             StillPrimary(scope, out expr, vl);
         } else if (la.kind == 14) {
             Get();
         } else SynErr(27);
     } else SynErr(28);
 }