public Node ProcedureDeclaration() { Expect(TokenCategory.PROCEDURE); var procedure_node = new ProcedureDeclarationNode() { AnchorToken = Expect(TokenCategory.IDENTIFIER) }; Expect(TokenCategory.PARENTHESIS_OPEN); procedure_node.Add(new ParameterDeclarationNode() { ZeroOrMore(TokenCategory.IDENTIFIER, ParameterDeclaration) }); Expect(TokenCategory.PARENTHESIS_CLOSE); var typeNode = Optional(TokenCategory.COLON, Type, true); if (typeNode == null) { typeNode = new VoidTypeNode(); } procedure_node.Add(typeNode); Expect(TokenCategory.SEMICOLON); procedure_node.Add(Optional(TokenCategory.CONST, () => { var node = new ConstantListNode() { AnchorToken = Expect(TokenCategory.CONST) }; node.Add(OneOrMore(TokenCategory.IDENTIFIER, ConstantDeclaration)); return(node); })); procedure_node.Add(Optional(TokenCategory.VAR, () => { var node = new VariableDeclarationNode() { AnchorToken = Expect(TokenCategory.VAR) }; node.Add(OneOrMore(TokenCategory.IDENTIFIER, VariableDeclaration)); return(node); })); Expect(TokenCategory.BEGIN); procedure_node.Add(new StatementListNode() { ZeroOrMore(firstOfStatement, Statement) }); Expect(TokenCategory.END); Expect(TokenCategory.SEMICOLON); return(procedure_node); }
private TypeNode ReturnType() { TypeNode itsAST = null; // in case there is a syntactic error SourceCodePosition itsPos = _currentToken.SourcePosition; if (Array.Exists(_typeFirstSet, e => e == _currentToken.Type)) { itsAST = Type(); } else if (_currentToken.Type == Token.TokenType.Void) { itsAST = new VoidTypeNode(itsPos); Accept(Token.TokenType.Void); } else { Error("Expected int, real, string, boolean, identifier, void or array type"); } return(itsAST); }
public object Visit(VoidTypeNode n, object o) { return(null); }
public void Visit(VoidTypeNode node) { builder.Append("void"); }
public Type Visit(VoidTypeNode node) { return(Type.VOID); }
public object Visit(VoidTypeNode n, object o) { Append("void"); return(null); }