コード例 #1
0
        private InterfaceDeclaringNode InterfaceDeclaring()
        {
            InterfaceDeclaringNode itsAST;
            SourceCodePosition     itsPos = _currentToken.SourcePosition;

            Accept(Token.TokenType.Interface);
            IdentifierNode itsName = new IdentifierNode(_currentToken);

            Accept(Token.TokenType.Identifier);
            Accept(Token.TokenType.LeftBrace);
            DeclaringSequenceNode itsInterfaceMethodDeclarings = InterfaceMethods();

            Accept(Token.TokenType.RightBrace);
            itsAST = new InterfaceDeclaringNode(itsName, itsInterfaceMethodDeclarings, itsPos);
            return(itsAST);
        }
コード例 #2
0
        private DeclaringSequenceNode ParseMethodDeclarings()
        {
            DeclaringSequenceNode itsAST;
            SourceCodePosition    itsPos    = _currentToken.SourcePosition;
            DeclaringNode         itsMethod = ParseMethodDeclaring();

            if (_currentToken.Type == Token.TokenType.Method)
            {
                DeclaringSequenceNode itsNextMethods = ParseMethodDeclarings();
                itsAST = new MultipleDeclaringSequenceNode(itsMethod, itsNextMethods, itsPos);
            }
            else
            {
                itsAST = new SingleDeclaringSequenceNode(itsMethod, itsPos);
            }
            return(itsAST);
        }
コード例 #3
0
        private DeclaringSequenceNode ParseVariableDeclarings()
        {
            DeclaringSequenceNode itsAST;
            SourceCodePosition    itsPos = _currentToken.SourcePosition;
            DeclaringNode         itsVar = ParseVariableDeclaring();

            if (_currentToken.Type == Token.TokenType.Var)
            {
                DeclaringSequenceNode itsNextVars = ParseVariableDeclarings();
                itsAST = new MultipleDeclaringSequenceNode(itsVar, itsNextVars, itsPos);
            }
            else
            {
                itsAST = new SingleDeclaringSequenceNode(itsVar, itsPos);
            }
            return(itsAST);
        }
コード例 #4
0
        private DeclaringSequenceNode ParseImplements()
        {
            DeclaringSequenceNode itsAST;
            SourceCodePosition    itsPos       = _currentToken.SourcePosition;
            DeclaringNode         itsImplement = ParseImplement();

            if (_currentToken.Type == Token.TokenType.Comma)
            {
                Accept(Token.TokenType.Comma);
                DeclaringSequenceNode itsNextImplements = ParseImplements();
                itsAST = new MultipleDeclaringSequenceNode(itsImplement, itsNextImplements, itsPos);
            }
            else
            {
                itsAST = new SingleDeclaringSequenceNode(itsImplement, itsPos);
            }
            return(itsAST);
        }
コード例 #5
0
        private ClassDeclaringNode ClassDeclaring()
        {
            ClassDeclaringNode itsAST;
            SourceCodePosition itsPos = _currentToken.SourcePosition;

            Accept(Token.TokenType.Class);
            IdentifierNode itsName = new IdentifierNode(_currentToken);

            Accept(Token.TokenType.Identifier);
            DeclaringSequenceNode itsImplements = Implements();

            Accept(Token.TokenType.LeftBrace);
            DeclaringSequenceNode itsVars        = VariableDeclarings();
            DeclaringNode         itsConstructor = ConstructorDeclaring();
            DeclaringSequenceNode itsMethods     = MethodDeclarings();

            Accept(Token.TokenType.RightBrace);
            itsAST = new ClassDeclaringNode(itsName, itsImplements, itsVars, itsConstructor, itsMethods, itsPos);
            return(itsAST);
        }
コード例 #6
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);
        }
コード例 #7
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);
        }
コード例 #8
0
ファイル: ProgramNode.cs プロジェクト: tbyrresen/Deslang
 public ProgramNode(DeclaringSequenceNode declarings, SourceCodePosition pos) : base(pos)
 {
     Declarings = declarings;
 }