bool Parser::Impl::parse() { // this is the entry point: START := command-list if ( !parseCommandList() ) return false; if ( !atEnd() ) { makeUnexpectedTokenError( Error::ExpectedCommand ); return false; } if ( scriptBuilder() ) scriptBuilder()->finished(); return true; }
bool Parser::Impl::parseBlock() { // our ABNF: // block := "{" [ command-list ] "}" if(!obtainToken() || atEnd()) return false; if(token() != Lexer::Special || tokenValue() != "{") return false; if(scriptBuilder()) scriptBuilder()->blockStart(); consumeToken(); if(!obtainToken()) return false; if(atEnd()) { makeError(Error::PrematureEndOfBlock); return false; } if(token() == Lexer::Identifier) { if(!parseCommandList()) { assert(error()); return false; } } if(!obtainToken()) return false; if(atEnd()) { makeError(Error::PrematureEndOfBlock); return false; } if(token() != Lexer::Special || tokenValue() != "}") { makeError(Error::NonCommandInCommandList); return false; } if(scriptBuilder()) scriptBuilder()->blockEnd(); consumeToken(); return true; }