===== Compilation W en P-CODE ===== //En construction !!// ^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 ,| | | | \\ + \\ - \\ * \\ / \\ 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|