private Procedure ProcedureStatement() { if (Accept(Symbol.Procedure)) { Identifier ident = Identifier(); Require(Symbol.ClosureOpen); Parameters parameters = ReadParameters(); Require(Symbol.ClosureClose); Require(Symbol.SemiColon); ScopedProgram block = Block(); block.AddParameters(parameters); return(new Procedure(ident, parameters, block, null)); } return(null); }
private Procedure ReadFunction() { if (Accept(Symbol.Function)) { Identifier ident = Identifier(); Require(Symbol.ClosureOpen); Parameters parameters = ReadParameters(); Require(Symbol.ClosureClose); Require(Symbol.Colon); MiniPascalType type = ReadType(); if (type == null) { throw new SyntaxException(expType, current); } Require(Symbol.SemiColon); ScopedProgram block = Block(); block.AddParameters(parameters); return(new Procedure(ident, parameters, block, type)); } return(null); }