コード例 #1
0
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;
}
コード例 #2
0
/* <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);
    }
}