コード例 #1
0
 public ConstructorDeclaringNode(IdentifierNode ident, TypeNode type, ParameterSequenceNode parameters, DeclaringSequenceNode vars,
                                 ActionSequenceNode actions, SourceCodePosition pos) : base(pos)
 {
     Identifier    = ident;
     Type          = type;
     Parameters    = parameters;
     VarDeclarings = vars;
     Actions       = actions;
 }
コード例 #2
0
 public MethodDeclaringNode(IdentifierNode ident, TypeNode type, ParameterSequenceNode parameters,
                            DeclaringSequenceNode vars, ActionSequenceNode actions, ReturnActionNode ret, SourceCodePosition pos)
     : base(pos)
 {
     Identifier    = ident;
     Type          = type;
     Parameters    = parameters;
     VarDeclarings = vars;
     Actions       = actions;
     Return        = ret;
 }
コード例 #3
0
        private ActionNode ParseElseifStatement()
        {
            ActionNode         itsAST;
            SourceCodePosition itsPos = _currentToken.SourcePosition;

            Accept(Token.TokenType.Elseif);
            Accept(Token.TokenType.LeftParen);
            ExpressionNode itsExpr = Expression();

            Accept(Token.TokenType.RightParen);
            Accept(Token.TokenType.LeftBrace);
            ActionSequenceNode itsActions = ActionStatements();

            Accept(Token.TokenType.RightBrace);
            itsAST = new ElseifActionNode(itsExpr, itsActions, itsPos);
            return(itsAST);
        }
コード例 #4
0
        private ActionSequenceNode ParseElseifStatements()
        {
            ActionSequenceNode itsAST;
            SourceCodePosition itsPos    = _currentToken.SourcePosition;
            ActionNode         itsAction = ParseElseifStatement();

            if (_currentToken.Type == Token.TokenType.Elseif)
            {
                ActionSequenceNode itsNextActions = ParseElseifStatements();
                itsAST = new MultipleActionSequenceNode(itsAction, itsNextActions, itsPos);
            }
            else
            {
                itsAST = new SingleActionSequenceNode(itsAction, itsPos);
            }
            return(itsAST);
        }
コード例 #5
0
        private ActionSequenceNode ParseActionStatements()
        {
            ActionSequenceNode itsAST;
            SourceCodePosition itsPos    = _currentToken.SourcePosition;
            ActionNode         itsAction = ParseActionStatement();

            if (Array.Exists(_actionStatementFirstSet, e => e == _currentToken.Type))
            {
                ActionSequenceNode itsNextActions = ParseActionStatements();
                itsAST = new MultipleActionSequenceNode(itsAction, itsNextActions, itsPos);
            }
            else
            {
                itsAST = new SingleActionSequenceNode(itsAction, itsPos);
            }
            return(itsAST);
        }
コード例 #6
0
        private ActionNode ElseStatement()
        {
            ActionNode         itsAST;
            SourceCodePosition itsPos = _currentToken.SourcePosition;

            if (_currentToken.Type == Token.TokenType.Else)
            {
                Accept(Token.TokenType.Else);
                Accept(Token.TokenType.LeftBrace);
                ActionSequenceNode itsActions = ActionStatements();
                Accept(Token.TokenType.RightBrace);
                itsAST = new ElseActionNode(itsActions, itsPos);
            }
            else
            {
                itsAST = new EmptyActionNode(itsPos);
            }
            return(itsAST);
        }
コード例 #7
0
        private ConstructorDeclaringNode ConstructorDeclaring()
        {
            ConstructorDeclaringNode itsAST;
            SourceCodePosition       itsPos = _currentToken.SourcePosition;

            Accept(Token.TokenType.Constructor);
            IdentifierNode itsName = new IdentifierNode(_currentToken);
            TypeNode       itsType = new ClassTypeNode(itsName, itsPos);

            Accept(Token.TokenType.Identifier);
            Accept(Token.TokenType.LeftParen);
            ParameterSequenceNode itsParams = Parameters();

            Accept(Token.TokenType.RightParen);
            Accept(Token.TokenType.LeftBrace);
            DeclaringSequenceNode itsVars    = VariableDeclarings();
            ActionSequenceNode    itsActions = ActionStatements();

            Accept(Token.TokenType.RightBrace);
            itsAST = new ConstructorDeclaringNode(itsName, itsType, itsParams, itsVars, itsActions, itsPos);
            return(itsAST);
        }
コード例 #8
0
        private MethodDeclaringNode ParseMethodDeclaring()
        {
            MethodDeclaringNode itsAST;
            SourceCodePosition  itsPos = _currentToken.SourcePosition;

            Accept(Token.TokenType.Method);
            TypeNode       itsType = ReturnType();
            IdentifierNode itsName = new IdentifierNode(_currentToken);

            Accept(Token.TokenType.Identifier);
            Accept(Token.TokenType.LeftParen);
            ParameterSequenceNode itsParams = Parameters();

            Accept(Token.TokenType.RightParen);
            Accept(Token.TokenType.LeftBrace);
            DeclaringSequenceNode itsVars    = VariableDeclarings();
            ActionSequenceNode    itsActions = ActionStatements();
            ReturnActionNode      itsReturn  = ReturnStatement();

            Accept(Token.TokenType.RightBrace);
            itsAST = new MethodDeclaringNode(itsName, itsType, itsParams, itsVars, itsActions, itsReturn, itsPos);
            return(itsAST);
        }
コード例 #9
0
        private ActionNode IterationStatement()
        {
            ActionNode         itsAST;
            SourceCodePosition itsPos = _currentToken.SourcePosition;

            if (_currentToken.Type == Token.TokenType.While)
            {
                Accept(Token.TokenType.While);
                Accept(Token.TokenType.LeftParen);
                ExpressionNode itsExpr = Expression();
                Accept(Token.TokenType.RightParen);
                Accept(Token.TokenType.LeftBrace);
                ActionSequenceNode itsActions = ActionStatements();
                Accept(Token.TokenType.RightBrace);
                itsAST = new WhileActionNode(itsExpr, itsActions, itsPos);
            }
            else
            {
                Accept(Token.TokenType.Foreach);
                Accept(Token.TokenType.LeftParen);
                VarDeclaringNode itsDecl;
                Accept(Token.TokenType.Var);
                TypeNode       itsType = Type();
                IdentifierNode itsName = new IdentifierNode(_currentToken, itsType);
                Accept(Token.TokenType.Identifier);
                itsDecl = new VarDeclaringNode(itsName, itsType, itsPos);
                Accept(Token.TokenType.In);
                ExpressionNode itsExpr = Expression();
                Accept(Token.TokenType.RightParen);
                Accept(Token.TokenType.LeftBrace);
                ActionSequenceNode itsActions = ActionStatements();
                Accept(Token.TokenType.RightBrace);
                itsAST = new ForeachActionNode(itsDecl, itsName, itsExpr, itsActions, itsPos);
            }
            return(itsAST);
        }