DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦229c1212b⟧ TextFile

    Length: 3200 (0xc80)
    Types: TextFile
    Names: »POSTFIX.DOC«

Derivation

└─⟦f974e4adc⟧ Bits:30003931/CCPM_Studie.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline)
    └─⟦this⟧ »POSTFIX.DOC« 

TextFile

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»