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); }
public virtual void VisitConstantListNode(ConstantListNode node) { Visit(node.OpenParenthesisNode); Visit(node.ItemListNode); Visit(node.CloseParenthesisNode); }
public void Visit(ConstantListNode node) { // Do nothing }
public Type Visit(ConstantListNode node) { VisitChildren(node); return(Type.VOID); }
public virtual void VisitConstantListNode(ConstantListNode node) { Visit(node.OpenParenthesisNode); Visit(node.ItemListNode); Visit(node.CloseParenthesisNode); }