bool syntaxparser::Function(){ bool bFunction = false; if (displayFlag){ cout<<"<Function> ::= function <identifier> [ <Opt Parameter List> ] <Opt Declaration List> <Body>"<<endl; printproduction("<Function> ::= function <identifier> [ <Opt Parameter List> ] <Opt Declaration List> <Body>"); } print(); if( lexeme == "function"){ Lexer(); print(); if(token == "identifier"){ Lexer(); print(); if(lexeme == "["){ Lexer(); if(OptParameterList()){ if(lexeme == "]"){ print(); Lexer(); cout<<endl; if(OptDeclarationList()){ if(Body()){ bFunction = true; } } }else error("Missing ']'"); } }else{ error("Missing '[' separator"); } }else{ error("Missing identifier"); } } return bFunction; }
/* <Function> ::= function <Identifier> ( <Opt Parameter List> ) <Opt Declaration List> <Body> */ void SyntaxAnalyzer::Function() { if(rrr == k_function) { NextRecord(); if(rrr == Identifier) { NextRecord(); if(rrr == s_openbracketround) { NextRecord(); OptParameterList(); if(rrr == s_closebracketround) { NextRecord(); OptDeclarationList(); Body(); logger.Log("<Function> ::= function <Identifier> ( <Opt Parameter List> ) <Opt Declaration List> <Body>"); } else { insert(s_closebracketround); } } else { insert(s_openbracketround); } } else { insert(Identifier, "MISSING IDENTIFIER"); } } else { insert(k_function); } }