While.Parsing.Parser.Proc C# (CSharp) Method

Proc() public method

public Proc ( ProcedureSequence procs ) : void
procs While.AST.Sequences.ProcedureSequence
return void
        void Proc(ProcedureSequence procs)
        {
            StatementSequence statements;
            string name;
            VariableSequence valArgs = new VariableSequence();
            Variable resultArg = null;
            Expect(5);
            Token ptok = t;
            Expect(1);
            name = t.val;
            Expect(6);
            if (la.kind == 7 || la.kind == 8) {
            if (la.kind == 7) {
                Get();
                Expect(1);
                Variable v = new Variable(t.val);
                v.IsValueArg = true;
                valArgs.AddVariable(v);
                SymbolTable.DefineArgument(t.val);
                if (la.kind == 12) {
                    Args(valArgs, out resultArg);
                }
            } else {
                Get();
                Expect(1);
                resultArg = new Variable(t.val);
                resultArg.IsResultArg = true;
                SymbolTable.DefineResultArgument(t.val);
            }
            }
            Expect(9);
            SequencePoint seq1 = new SequencePoint(ptok.line,ptok.col, t.line,t.col+t.val.Length);
            Expect(10);
            StmtSeq(out statements);
            Expect(4);
            SequencePoint seq2 = new SequencePoint(t.line, t.col, t.line, t.col+t.val.Length);
            Expect(11);
            if (procs.ContainsProcedure(name)) {
            errors.SemErr(ptok.line, ptok.col, "Procedure '" + name + "' is already declared");
            } else {
            Procedure proc = new Procedure(name, valArgs, resultArg, statements);
            proc.AddSequencePoint(seq1);
            proc.AddSequencePoint(seq2);
            procs.AddProcedure(proc);
            }
            SymbolTable.Clear();
        }