diff --git a/src/l.cfg b/src/l.cfg index 82998c3fb54e674635dc0a0d12c6664c692ca625..e2c8d422adcd3bb241dc880b06540cb2c595b98d 100644 --- a/src/l.cfg +++ b/src/l.cfg @@ -11,37 +11,37 @@ Tokens espaces = (' ' | 13 | 10)+; commentaire= '#' [[0 .. 0xffff] - [10 + 13]]* (10 | 13 | 10 13); -nombre = chiffre+; -ou = '|'; -et = '&'; +add = '+'; +sub = '-'; +mult = '*'; +div = '/'; egal = '='; inf = '<'; -infegal = '<='; -sup = '>'; -supegal = '>='; -plus = '+'; -moins = '-'; -mul = '*'; -div = '/'; -non = '!'; -gpar = '('; -dpar = ')'; +or = '|'; +and = '&'; +not = '!'; vrai = 'vrai'; faux = 'faux'; -tantque = 'tantque'; -faire = 'faire'; -pvirg = ';'; -si = 'si'; -alors = 'alors'; -sinon = 'sinon'; -retour = 'retour'; +gpar = '('; +dpar = ')'; gacc = '{'; dacc = '}'; -epsilon = ; -id = alpha[alpha + chiffre]+; gcro = '['; dcro = ']'; +pvirg = ';'; virg = ','; +si = 'si'; +alors = 'alors'; +sinon = 'sinon'; +tantque = 'tantque'; +faire = 'faire'; +retour = 'retour'; +ecrire = 'ecrire'; +lire = 'lire'; +int = 'int'; +boolean = 'boolean'; +nombre = chiffre+; +id = alpha alphanum*; Ignored Tokens @@ -49,21 +49,25 @@ espaces, commentaire; Productions -exp = {ou} exp ou exp1 | {exp1} exp1; -exp1 = {et} exp1 et exp2 | {exp2} exp2; +epsilon = ; + +exp = {or} exp or exp1 | {exp1} exp1; +exp1 = {and} exp1 and exp2 | {exp2} exp2; exp2 = {egal} exp2 egal exp3 | {inf} exp2 inf exp3 | {exp3} exp3; -exp3 = {plus} exp3 plus exp4 | {moins} exp3 moins exp4 | {exp4} exp4; -exp4 = {mul} exp4 mul exp5 | {div} exp4 div exp5 | {exp5} exp5; -exp5 = {non} non exp5 | {exp6} exp6; -exp6 = {parenthesis} gpar exp dpar | {nombre} nombre | {vrai} vrai | {faux} faux | {lire} lire() ; +exp3 = {add} exp3 add exp4 | {sub} exp3 sub exp4 | {exp4} exp4; +exp4 = {mult} exp4 mult exp5 | {div} exp4 div exp5 | {exp5} exp5; +exp5 = {not} not exp5 | {exp6} exp6; +exp6 = {parenthesis} gpar exp dpar | {nombre} nombre | {var} var | {vrai} vrai | {faux} faux | {ecrire} ecrire gpar dpar; -ins = {affectation} var egal exp | +var = {id} id | {crochets} id gcro exp dcro; + +ins = {affectation} var egal exp pvirg| {fairetantque} tantque exp faire bloc | -{fonction} id gpar lexp dpar | +{fonction} id gpar lexp dpar pvirg| {sisinon} si exp alors [alors1]: bloc sinon [sinon1]: bloc | {sialors} si exp alors bloc | {retour} retour exp pvirg | -{ecrire} ecrire(e); +{ecrire} ecrire gpar exp dpar pvirg; bloc = {accolades} gacc lins dacc; lins = {lins} ins lins | {epsilon} epsilon; @@ -71,19 +75,18 @@ lins = {lins} ins lins | {epsilon} epsilon; lexp = {lexp2} lexp2 | {epsilon} epsilon; lexp2 = {virgule} exp virg lexp2 | {exp} exp; -var = {id} id | {crochets} id gcro exp dcro; -type = {bool} bool | {entier} entier; +type = {boolean} boolean | {int} int; typeopt = {type} type | {epsilon} epsilon; decvar = {var} type id | {tableau} type id gcro nombre dcro; -decfonc = {fonction} type id gpar [params]: ldecvar rpar [locals]: ldecvar bloc; +decfonc = {fonction} type id gpar [params]: ldecvar dpar [locals]: ldecvar bloc; ldecvar = {listedecvar} ldecvar2 | {epsilon} epsilon; -ldecvar2 = {listedecvar2} decvar virg ldecvar2 | decvar; +ldecvar2 = {listedecvar2} decvar virg ldecvar2 | {decvar} decvar; ldecfonc = {listedecfonc} decfonc ldecfonc | {epsilon} epsilon; -prog = ldecvar ldecfonc; \ No newline at end of file +prog = {prog} ldecvar ldecfonc; \ No newline at end of file