===== Compilation W en P-CODE ===== ^ Source W ^ p-code ^ Remarque ^ | begin [nom]\\ background [nom]| ''PROG / BACK\\ BEXC\\ VERS \\ INCL \\ SRCL \\ PNAM [nom]'' | première instruction en assembleur\\ l'offset de BEXC sera calculé par l'assembleur\\ \\ \\ \\ [nom] du programme est optionnel | | library([a[,b]]) | ''LIBR\\ BEXC\\ VERS \\ INCL \\ PARM \\ PARM \\ SRCL \\ '' | première instruction en assembleur\\ l'offset de BEXC sera calculé par l'assembleur\\ \\ \\ les paramètres [a[,b]] sont optionnels et variables | | except | ''SRCL \\ EXCE'' | | | end | ''SRCL \\ ENDP / ENDL'' | ENDP si PROG ou BACK, ENDL si LIBR | | sub ([param1[,param2]]) | ''SRCL \\ SUBR \\ BEXC\\ [PARM param1]\\ [PARM param2]'' | \\ adresse //ends// calculee par l'assembleur\\ adresse //except// calculée par l'assembleur | | endsub | ''SRCL \\ ENDS'' | | | throw | ''SRCL \\ THRW '' | | | catch | ''SRCL \\ CATC'' | | | include %%"fichier%%"\\ include 'fichier' | ''SRCL \\ INCL \\ ... p-code du fichier ...\\ INCL'' | en assembleur, sans les doubles-quotes/quotes \\ \\ \\ a la fin du traitement du fichier include | | part | ''SRCL \\ PART '' | | | nop | ''SRCL '' | | | declare x[,y] | ''SRCL \\ DECL x\\ DECL y'' | nombre de déclarations variable | | loop\\ \\ ... p-code ...\\ break\\ \\ ... p-code ... \\ continue\\ \\ ... p-code ...\\ endloop | '':L\\ SRCL \\ \\ SRCL \\ JUMP :l\\ \\ SRCL \\ JUMP :L\\ \\ SRCL \\ JUMP :L\\ :l'' | :L et :l sont des marqueurs pour que l'assembleur calcule les adresse des sauts | | input ident1[.ident2][!ident3] | ''SRCL \\ PVAR ident1\\ PVAH ident2\\ PVAI ident3\\ INPT'' | \\ Code assembleur pour une //Variable// | | return | ''SRCL \\ RETN'' | | | returnon | ''SRCL \\ \\ RETT'' | enchaîne les opérations sur la pile.\\ ''RETT'' dépile et si # 0 : //return// | | break | ''SRCL \\ \\ JUMP :l :f'' | '':l'' si loop, '':f'' si for | | breakon | ''SRCL \\ \\ JMPT :l :f'' | '':l'' si loop, '':f'' si for.\\ enchaîne les opérations sur la pile.\\ ''JMPT'' dépile et si # 0 : saut | | continue | ''SRCL \\ \\ JUMP :L :F'' | '':L'' si loop, '':F'' si for | | continueon | ''SRCL \\ \\ JMPT :L :F'' | '':L'' si loop, '':F'' si for.\\ enchaîne les opérations sur la pile.\\ ''JMPT'' dépile et si # 0 : saut | | do routine([x[,y[,z]]]) | ''SRCL \\ CRAZ\\ \\ PSHA\\ \\ PSHA \\ \\ PSHA\\ \\ CALL _'' | Appel //simple// d'une subroutine.\\ Les paramètres sont empilés //à l'envers//.\\ Chaque paramètre est un enchaînement de PVAR/PVAH/PVAI. | | invoke &([x[,y[,z]]]) | ''SRCL \\ CRAZ\\ \\ PSHA\\ \\ PSHA\\ MODL @'' | maxi 21 cars. maxi 23 cars.\\ Maxi. 3 paramètres, chacun est un enchaînement de PVAR/PVAH/PVAI.\\ TODO invoke | | call ([x[,y]]) | ''SRCL \\ CRAZ\\ \\ PSHA\\ \\ PSHA\\ CLIB '' | Chaque paramètre est un enchaînement de PVAR/PVAH/PVAI.\\ maxi 255 cars.\\ TODO call | | let = | ''SRCL \\ \\ \\ POPV'' | enchaîne les opérations sur la pile\\ ou variable à affecter (PVAR/PVAH/PVAI)\\ ou new \\ est un enchaînement de PVAR/PVAH/PVAI. | | echo / echonl | ''SRCL \\ \\ WRIT / WRLN'' | est un enchaînement de PVAR/PVAH/PVAI. | | echo / echonl "chaine" 'chaine' | ''SRCL \\ PVAT\\ DSET "chaine"\\ WRIT / WRLN'' | TODO avec | | delet | ''SRCL \\ \\ DELE'' | est un enchaînement de PVAR/PVAH/PVAI. | | if then / else\\ ... p-code ...\\ \\ \\ \\ elseif then / else\\ ... p-code ...\\ \\ \\ \\ \\ else\\ ... p-code ...\\ \\ \\ endif | '':I\\ SRCL \\ \\ JMPF :E / JMPT :E\\ \\ JUMP :e\\ E:\\ SRCL \\ \\ JMPF :E / JMPT :E\\ \\ JUMP :e\\ E:\\ SRCL \\ \\ :e\\ SRCL '' | Les //elseif// et //else// ne sont pas obligatoires.\\ Dès qu'une clause //else// apparaît, d'autres //elseif// ou //else// ne sont pas autorisés.\\ \\ Les JMPF :E et JMPT :E sautent au __premier__ :E à suivre du même //niveau//. | | foreach in like \\ \\ \\ ... p-code ...\\ break\\ \\ ... p-code ... \\ continue\\ \\ ... p-code ...\\ endfor |''SRCL \\ //TODO//\\ :F\\ \\ SRCL \\ JUMP :f\\ \\ SRCL \\ JUMP :F\\ \\ SRCL \\ JUMP :F\\ :f'' | :F et :f sont des marqueurs pour que l'assembleur calcule les adresse des sauts | | class = {} | | | | precision | | | | setsep , | | | | free | | | | \\ +\\ -\\ *\\ /\\ div\\ mod\\ abs\\ neg\\ int\\ frac\\ round\\ =\\ #\\ <\\ >\\ < =\\ > =\\ and\\ or\\ | \\ ''ADDN''\\ ''SBCN''\\ ''MULN''\\ ''DIVN''\\ ''DIVE''\\ ''MODN''\\ ''ABSN''\\ ''NEGN''\\ ''INTE''\\ ''FRAC''\\ ''ROUN''\\ ''COMP 1''\\ ''COMP 2''\\ ''COMP 3''\\ ''COMP 4''\\ ''COMP 5''\\ ''COMP 6''\\ ''COMP 7''\\ ''COMP 8''\\ | valeurs empilées |