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; }
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; }
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); }
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); }
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); }
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); }
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); }
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); }
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); }