コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: GeneratedVisitor.cs プロジェクト: DvdKhl/dgrok
 public virtual void VisitConstantListNode(ConstantListNode node)
 {
     Visit(node.OpenParenthesisNode);
     Visit(node.ItemListNode);
     Visit(node.CloseParenthesisNode);
 }
コード例 #3
0
 public void Visit(ConstantListNode node)
 {
     // Do nothing
 }
コード例 #4
0
ファイル: SemanticAnalyzer.cs プロジェクト: aLagoG/chimera
 public Type Visit(ConstantListNode node)
 {
     VisitChildren(node);
     return(Type.VOID);
 }
コード例 #5
0
ファイル: GeneratedVisitor.cs プロジェクト: DvdKhl/dgrok
 public virtual void VisitConstantListNode(ConstantListNode node)
 {
     Visit(node.OpenParenthesisNode);
     Visit(node.ItemListNode);
     Visit(node.CloseParenthesisNode);
 }