%{ /* tpc-2019.y */ /* Syntaxe du TPC pour le projet d'analyse syntaxique de 2018-2019 */ %} %% Prog: DeclConsts DeclVars DeclFoncts ; DeclConsts: DeclConsts CONST ListConst ';' | ; ListConst: ListConst ',' IDENT '=' Litteral | IDENT '=' Litteral ; Litteral: NombreSigne | CARACTERE ; NombreSigne: NUM | ADDSUB NUM ; DeclVars: DeclVars TYPE Declarateurs ';' | ; Declarateurs: Declarateurs ',' Declarateur | Declarateur ; Declarateur: IDENT | IDENT '[' NUM ']' ; DeclFoncts: DeclFoncts DeclFonct | DeclFonct ; DeclFonct: EnTeteFonct Corps ; EnTeteFonct: TYPE IDENT '(' Parametres ')' | VOID IDENT '(' Parametres ')' ; Parametres: VOID | ListTypVar ; ListTypVar: ListTypVar ',' TYPE IDENT | TYPE IDENT ; Corps: '{' DeclConsts DeclVars SuiteInstr '}' ; SuiteInstr: SuiteInstr Instr | ; Instr: Exp ';' | ';' | RETURN Exp ';' | RETURN ';' | READE '(' IDENT ')' ';' | READC '(' IDENT ')' ';' | PRINT '(' Exp ')' ';' | IF '(' Exp ')' Instr | IF '(' Exp ')' Instr ELSE Instr | WHILE '(' Exp ')' Instr | '{' SuiteInstr '}' ; Exp : LValue '=' Exp | EB ; EB : EB 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 DIVSTAR F | F ; F : ADDSUB F | '!' F | '(' Exp ')' | LValue | NUM | CARACTERE | IDENT '(' Arguments ')' ; LValue: IDENT | IDENT '[' Exp ']' ; Arguments: ListExp | ; ListExp: ListExp ',' Exp | Exp ; %%