Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int program()
- {
- int start=idxCrtAtomi;
- for(;;)
- {
- if(defVar())
- {
- }
- else if(defFunc())
- {
- }
- else if(block())
- {
- }
- else
- {
- break;
- }
- }
- if(consume(FINISH))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste FINISH!");
- return 0;
- }
- idxCrtAtomi=start;
- return 0;
- }
- int defVar()
- {
- int start=idxCrtAtomi;
- if(consume(VAR))
- {
- if(consume(ID))
- {
- if(consume(COLON))
- {
- if(base_Type())
- {
- if(consume(SEMICOLON))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste ; ");
- }
- }
- else
- {
- eroare1("lipseste tipul ");
- }
- }
- else
- {
- eroare1("lipsesc : ");
- }
- }
- else
- {
- eroare1("Lipseste ID !!");
- }
- }
- idxCrtAtomi=start;
- return 0;
- }
- int base_Type()
- {
- if(consume(TYPE_INT))
- {
- return 1;
- }
- else if(consume(TYPE_REAL))
- {
- return 1;
- }
- else if(consume(TYPE_STR))
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- int defFunc()
- {
- int start=idxCrtAtomi;
- if(consume(FUNCTION))
- {
- if(consume(ID))
- {
- if(consume(LPAR))
- {
- if(funcParams())
- {
- if(consume(RPAR))
- {
- if(consume(COLON))
- {
- if(base_Type())
- {
- for(;;)
- {
- if(defVar())
- {
- }
- else
- {
- break;
- }
- }
- if(block())
- {
- if(consume(END))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste END .");
- }
- }
- else
- {
- eroare1("lipseste blocul .");
- }
- }
- else
- {
- eroare1("lipseste tipul .");
- }
- }
- else
- {
- eroare1("lipsesc : .");
- }
- }
- else
- {
- eroare1("lipseste ) .");
- }
- }
- else
- {
- eroare1("lipsesc parametri .");
- }
- }
- else
- {
- eroare1("lipseste ( .");
- }
- }
- else
- {
- eroare1("lipseste ID .");
- }
- }
- idxCrtAtomi=start;
- return 0;
- }
- int block()
- {
- int start=idxCrtAtomi;
- if(instr())
- {
- for(;;)
- {
- if(instr())
- {
- }
- else
- {
- break;
- }
- }
- return 1;
- }
- idxCrtAtomi=start;
- return 0;
- }
- int funcParams()
- {
- int start=idxCrtAtomi;
- if(funcParam())
- {
- for(;;)
- {
- if(consume(COMMA))
- {
- if(funcParam())
- {
- }
- }
- else
- {
- break;
- }
- }
- return 1;
- }
- idxCrtAtomi=start;
- return 0;
- }
- int funcParam()
- {
- int start=idxCrtAtomi;
- if(consume(ID))
- {
- if(consume(COLON))
- {
- if(base_Type())
- {
- return 1;//intreb
- }
- else
- {
- eroare1("lipseste tipul .");
- }
- }
- else
- {
- eroare1("lipsesc : .");
- }
- }
- idxCrtAtomi=start;
- return 0;
- }
- int instr()
- {
- int start=idxCrtAtomi;
- if(expr())
- {
- if(consume(SEMICOLON))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste ; .");
- }
- }
- else if(consume(IF))
- {
- if(consume(LPAR))
- {
- if(expr())
- {
- if(consume(RPAR))
- {
- if(block())
- {
- if(consume(ELSE))
- {
- if(block())
- {
- if(consume(END))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste END dupa ramura ELSE .");
- }
- }
- else
- {
- eroare1("lipseste blocul la ramura ELSE .");
- }
- }
- else if(consume(END))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste END la finalul IF .");
- }
- }
- else
- {
- eroare1("lipseste blocul din IF .");
- }
- }
- else
- {
- eroare1("lipseste ) .");
- }
- }
- else
- {
- eroare1("lipseste expresia .");
- }
- }
- else
- {
- eroare1("lipseste ( .");
- }
- }
- else if(consume(RETURN))
- {
- if(expr())
- {
- if(consume(SEMICOLON))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste ; dupa expr din RETURN .");
- }
- }
- else
- {
- eroare1("lipseste expr dupa RETURN .");
- }
- }
- else if(consume(WHILE))
- {
- if(consume(LPAR))
- {
- if(expr())
- {
- if(consume(RPAR))
- {
- if(block())
- {
- if(consume(END))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste END .");
- }
- }
- else
- {
- eroare1("lipseste blocul .");
- }
- }
- else
- {
- eroare1("lipseste ) .");
- }
- }
- else
- {
- eroare1("lipseste expr .");
- }
- }
- else
- {
- eroare1("lipseste ( .");
- }
- }
- idxCrtAtomi=start;
- return 0;
- }
- int expr()
- {
- int start=idxCrtAtomi;
- if(expr_Logic())
- {
- return 1;
- }
- idxCrtAtomi=start;
- return 0;
- }
- int expr_Logic()
- {
- int start=idxCrtAtomi;
- if(expr_Assign())
- {
- for(;;)
- {
- if(consume(AND))
- {
- if(expr_Assign())
- {
- }
- else
- {
- eroare1("lipseste expr_Assign .");
- }
- }
- else if(consume(OR))
- {
- if(expr_Assign())
- {
- }
- else
- {
- eroare1("lipseste expr_Assign .");
- }
- }
- else
- {
- break;
- }
- }
- return 1;
- }
- idxCrtAtomi=start;
- return 0;
- }
- int expr_Assign()
- {
- int start=idxCrtAtomi;
- if(consume(ID))
- {
- if(consume(ASSIGN))
- {
- if(expr_Comp())
- {
- return 1;
- }
- else
- {
- eroare1("lipseste expr_Comp .");
- }
- }
- else
- {
- idxCrtAtomi=start;
- if(expr_Comp())
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- }
- else
- {
- if(expr_Comp())
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- }
- int expr_Comp()
- {
- int start=idxCrtAtomi;
- if(expr_Add())
- {
- if(consume(LESS))
- {
- if(expr_Add())
- {
- return 1;
- }
- else
- {
- eroare1("lipseste expr_Add dupa LESS .");
- }
- }
- else if(consume(EQUAL))
- {
- if(expr_Add())
- {
- return 1;
- }
- else
- {
- eroare1("lipseste expr_Add dupa EQUAL .");
- }
- }
- return 1;
- }
- idxCrtAtomi=start;
- return 0;
- }
- int expr_Add()
- {
- int start=idxCrtAtomi;
- if(expr_Mul())
- {
- for(;;)
- {
- if(consume(ADD))
- {
- if(expr_Mul())
- {
- }
- else
- {
- eroare1("lipseste expr_Mul dupa ADD .");
- }
- }
- else if(consume(SUB))
- {
- if(expr_Mul())
- {
- }
- else
- {
- eroare1("lipseste expr_Mul dupa SUB .");
- }
- }
- else
- {
- break;
- }
- }
- return 1;
- }
- idxCrtAtomi=start;
- return 0;
- }
- int expr_Mul()
- {
- int start=idxCrtAtomi;
- if(expr_Prefix())
- {
- for(;;)
- {
- if(consume(MUL))
- {
- if(expr_Prefix())
- {
- }
- else
- {
- eroare1("lipseste expr_Prefix dupa MUL .");
- }
- }
- else if(consume(DIV))
- {
- if(expr_Prefix())
- {
- }
- else
- {
- eroare1("lipseste expr_Prefix dupa DIV .");
- }
- }
- else
- {
- break;
- }
- }
- return 1;
- }
- idxCrtAtomi=start;
- return 0;
- }
- int expr_Prefix()
- {
- int start=idxCrtAtomi;
- if(consume(SUB))
- {
- if(factor())
- {
- return 1;
- }
- else
- {
- eroare1("lipseste factor dupa SUB .");
- }
- }
- else if(consume(NOT))
- {
- if(factor())
- {
- return 1;
- }
- else
- {
- eroare1("lipseste factor dupa NOT .");
- }
- }
- else if(factor())
- {
- return 1;
- }
- start=idxCrtAtomi;
- return 0;
- }
- int factor()
- {
- int start=idxCrtAtomi;
- if(consume(INT))
- {
- return 1;
- }
- else if(consume(REAL))
- {
- return 1;
- }
- else if(consume(STR))
- {
- return 1;
- }
- else if(consume((LPAR)))
- {
- if(expr())
- {
- if(consume(RPAR))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste ) .");
- }
- }
- else
- {
- eroare1("lipseste expr .");
- }
- }
- else if(consume(ID))
- {
- if(consume(LPAR))
- {
- if(expr())
- {
- for(;;)
- {
- if(consume(COMMA))
- {
- if(expr())
- {
- }
- else
- {
- eroare1("lipseste expr dupa , .");
- }
- }
- else
- {
- break;
- }
- }
- if(consume(RPAR))
- {
- return 1;
- }
- else
- {
- eroare1("lipseste ) .");
- }
- }
- else if(consume(RPAR))
- {
- return 1;
- }
- }
- return 1;
- }
- idxCrtAtomi=start;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement