%{ /* tpc-2019-2020.y */ /* Syntaxe du TPC pour le projet d'analyse syntaxique de 2019-2020*/ %} %% Prog: DeclVars DeclFoncts ; DeclVars: DeclVars TYPE Declarateurs ';' | ; Declarateurs: Declarateurs ',' IDENT | Declarateurs ',' '*' IDENT | IDENT | '*' IDENT ; DeclFoncts: DeclFoncts DeclFonct | DeclFonct ; DeclFonct: EnTeteFonct Corps ; EnTeteFonct: TYPE IDENT '(' Parametres ')' | TYPE '*' IDENT '(' Parametres ')' | VOID IDENT '(' Parametres ')' ; Parametres: VOID | ListTypVar ; ListTypVar: ListTypVar ',' TYPE IDENT | ListTypVar ',' TYPE '*' IDENT | TYPE IDENT | TYPE '*' IDENT ; Corps: '{' DeclVars SuiteInstr '}' ; SuiteInstr: SuiteInstr Instr | ; Instr: LValue '=' Exp ';' | READE '(' IDENT ')' ';' | READC '(' IDENT ')' ';' | PRINT '(' Exp ')' ';' | IF '(' Exp ')' Instr | IF '(' Exp ')' Instr ELSE Instr | WHILE '(' Exp ')' Instr | IDENT '(' Arguments ')' ';' | RETURN Exp ';' | RETURN ';' | '{' SuiteInstr '}' | ';' ; Exp : Exp OR TB | TB ; TB : TB AND FB | FB ; FB : FB EQ M | M ; M : M ORDER E | E ; E : E ADDSUB T | T ; T : T '*' F | T '/' F | T '%' F | F ; F : ADDSUB F | '!' F | '&' IDENT | '(' Exp ')' | NUM | CHARACTER | LValue | IDENT '(' Arguments ')' | '*' IDENT '(' Arguments ')' ; LValue: IDENT | '*' IDENT ; Arguments: ListExp | ; ListExp: ListExp ',' Exp | Exp ; %% int main(int argc, char** argv) { yyparse(); return 0; } void yyerror(char *s){ fprintf(stderr, "%s near line %d\n", s, lineno); }