|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 3200 (0xc80) Types: TextFile Names: »POSTFIX.DOC«
└─⟦f974e4adc⟧ Bits:30003931/CCPM_Studie.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline) └─⟦this⟧ »POSTFIX.DOC«
Postfix, en miniparser af Palle Skaarup, Aug 1987 Postfix er en pascal-pakke til Comal80, der kan håndtere funktionsudtryk i datastrenge. Pakken består af to procedurer, som tilsammen kan udregne et matematisk funk- tionsudtryk som fx. 2*sin(x)'2-3*sin(x) Postfix virker i to skridt. Først omdanner proceduren, ReversePostfix, et sæd- vanligt matematisk funktionsudtryk (infix notation) som det ovenstående til omvendt polsk (postfix) notation: 2,xs2,'*3,xs*- , hvor s er koden for sin. Den, der kender lidt til omvendt polsk notation, kan forhåbentligt genkende udtrykket. I andet skridt, der kan gentages, udregner functionen, Evaluate, det nye funk- tionsudtryk med varierende x-værdier. Et meget simpelt COMAL80-program kunne se sådan ud: 0010 USE postfix 0020 MARGIN 80; ZONE 20; i:=0; y:=0 0030 DIM str1$ OF 80, str2$ OF 80 0040 REPEAT 0050 INPUT "f(x)=":str1$ 0060 reversepolish(str1$,str2$,i) 0070 IF i THEN PRINT "fejl i pos ";i 0080 UNTIL i=0 0090 FOR x:=-5 TO 5 DO 0100 IF evaluate(str2$,x,y) THEN PRINT x,y 0110 NEXT x Pakkebeskrivelsen i COMAL80 ser således ud: PACKAGE postfix FUNC evaluate(str2$,x,REF res) PROC reversepolish(str1$,REF str2$,REF res) ENDPACKAGE postfix Str1$ er procedurens inddatastreng. Dvs, den skal indeholde et sædvanligt ma- tematisk funktionsudtryk med "x" som den uafhængige variabel. Reversepolish vil forsøge at analysere (parse) udtrykket og samtidig ændre notationen. Hvis udtrykket er fejlfrit, placeres den nye notation i str2$, og res bliver sat til 0. Hvis der findes en fejl, så vil res indeholde nummeret på det tegn i str1$, hvor analysen standsede. Evaluate har den nye streng str2$ som inddata sammen med et tal x, der indsæt- tes i forskriften, efterhånden som dette udregnes. Hvis udregningen forløber normalt, vil res indeholde funktionsværdien, og functionen får værdien "TRUE". De mest almindelige aritmetiske fejl (division med 0, kvadratrod af negativt tal mv.) afsløres ved, at functionen returnerer værdien "FALSE". Mere grave- rende fejl som aritmetisk overløb, fanges af pascals errorhandler og videregi- ves til COMAL80 som fejlnummer 190. Bemærk i den forbindelse, at pascals talområde numerisk kun går fra 1E-37 til 1E37 ca. Til gengæld er pascal lidt hurtigere til at regne end COMAL80 pga en mere maskinnær datarepræsentation. Postfix har en syntaks for matematiske udtryk, der er meget lig den, der an- vendes i COMAL80. Regnearter: +, -, *, /, ', div, mod, <, >, =, <=, >=, <>, or, and og not. Funktioner: sin, cos, tan og cot (radianer) asin, acos, atn og acot ln og exp (grundtal e) log (grundtal 10) abs, int, sgn og sqr. Konstanter: true, false, pi og e. Parenteser sættes som i COMAL80, og regnearterne virker næsten på samme måde. «eof»