StatementsPtr Parser::parseStatementList_r() { if (match(TokenType::Semicolon)) { return parseStatementList(); } return StatementsPtr(); }
void TreeWalker::parseStatement(StatementAST *node) { switch (node->nodeType()) { case NodeType_ExpressionStatement: parseExpressionStatement(static_cast<ExpressionStatementAST*>(node)); break; case NodeType_IfStatement: parseIfStatement(static_cast<IfStatementAST*>(node)); break; case NodeType_WhileStatement: parseWhileStatement(static_cast<WhileStatementAST*>(node)); return; case NodeType_DoStatement: parseDoStatement(static_cast<DoStatementAST*>(node)); break; case NodeType_ForStatement: parseForStatement(static_cast<ForStatementAST*>(node)); break; case NodeType_SwitchStatement: parseSwitchStatement(static_cast<SwitchStatementAST*>(node)); break; case NodeType_LabeledStatement: parseLabeledStatement(static_cast<LabeledStatementAST*>(node)); break; case NodeType_StatementList: parseStatementList(static_cast<StatementListAST*>(node)); break; case NodeType_DeclarationStatement: parseDeclarationStatement(static_cast<DeclarationStatementAST*>(node)); break; case NodeType_ReturnStatement: parseReturnStatement(static_cast<ReturnStatementAST*>(node)); break; default: break; } }
StatementsPtr Parser::parseOptionalStatements() { if (m_curToken.tokenType() != TokenType::Identifier && m_curToken.tokenType() != TokenType::Begin && m_curToken.tokenType() != TokenType::If && m_curToken.tokenType() != TokenType::While) { return StatementsPtr(); } StatementsPtr statements = parseStatementList(); if (m_errorCode > ErrorCodes::NoError) { panic(optionalStatementsFollow, optionalStatementsFollowSize); return StatementsPtr(); } return statements; }
void Parser::parseOptionalStatements(){ if(isNext(tc_ID) || isNext(tc_BEGIN) || isNext(tc_IF) || isNext(tc_WHILE)){ parseStatementList(); } }