DIRECTORY ParserTypeDefs, ParserUtilityDefs, ParserInputDefs; ParserUtilities: CEDAR PROGRAM IMPORTS ParserInputDefs, ParserTypeDefs EXPORTS ParserUtilityDefs = BEGIN OPEN ParserUtilityDefs; RecoverFromError: PUBLIC ERROR [errorCode: PossibleError] = CODE; InitUtilities: PUBLIC PROCEDURE RETURNS [BOOLEAN] = BEGIN RETURN [TRUE]; END; FinishUtilities: PUBLIC PROCEDURE RETURNS [BOOLEAN] = BEGIN RETURN [TRUE]; END; Blank: PUBLIC PROCEDURE = BEGIN WHILE TRUE DO SELECT ParserInputDefs.Peek[] FROM '(,'),';,'-,ParserInputDefs.EOF,IN ['0..'9],IN ['A..'Z] => RETURN; ENDCASE => [] _ ParserInputDefs.GetChar[]; ENDLOOP; END; Sep: PUBLIC PROCEDURE = BEGIN WHILE TRUE DO SELECT ParserInputDefs.Peek[] FROM '(,'),';,'-,ParserInputDefs.EOF,IN ['0..'9] => RETURN; ENDCASE => [] _ ParserInputDefs.GetChar[]; ENDLOOP; END; Semi: PUBLIC PROCEDURE RETURNS [BOOLEAN] = BEGIN answer: BOOLEAN _ FALSE; Blank[]; IF ParserInputDefs.Peek[] = '; THEN BEGIN [] _ ParserInputDefs.GetChar[]; answer _ TRUE; Blank[]; END; RETURN[answer]; END; GetPath: PUBLIC PROCEDURE [a: ParserTypeDefs.Path] = BEGIN temp: CHARACTER; Sep[]; WHILE (temp _ ParserInputDefs.Peek[]) IN ['0..'9] OR temp = '- DO ParserTypeDefs.AppendPoint[a,GetPoint[]]; Sep[]; ENDLOOP; IF ParserTypeDefs.PathLength[a] = 0 THEN ERROR RecoverFromError[NullPath]; END; Unsigned: PUBLIC PROCEDURE RETURNS [CARDINAL] = BEGIN someDigit: BOOLEAN _ FALSE; ans: CARDINAL _ 0; BigNum: CARDINAL = (LAST[CARDINAL]-9)/10; Sep[]; WHILE (ans < BigNum) AND ParserInputDefs.Peek[] IN ['0..'9] DO ans _ ans * 10 + (ParserInputDefs.GetChar[]-'0); someDigit _ TRUE; ENDLOOP; IF ~someDigit THEN ERROR RecoverFromError[MissingUnsigned]; IF ParserInputDefs.Peek[] IN ['0..'9] THEN ERROR RecoverFromError[NumberTooBig] ELSE RETURN[ans]; END; UnsignedLong: PUBLIC PROCEDURE RETURNS [LONG CARDINAL] = BEGIN someDigit: BOOLEAN _ FALSE; ans: LONG CARDINAL _ 0; BigNum: LONG CARDINAL = (LAST[LONG CARDINAL]-9)/10; Sep[]; WHILE (ans < BigNum) AND ParserInputDefs.Peek[] IN ['0..'9] DO ans _ ans * 10 + (ParserInputDefs.GetChar[]-'0); someDigit _ TRUE; ENDLOOP; IF ~someDigit THEN ERROR RecoverFromError[MissingUnsigned]; IF ParserInputDefs.Peek[] IN ['0..'9] THEN ERROR RecoverFromError[NumberTooBig] ELSE RETURN[ans]; END; Signed: PUBLIC PROCEDURE RETURNS [INTEGER] = BEGIN sign, someDigit: BOOLEAN _ FALSE; ans: INTEGER _ 0; BigNum: INTEGER = (LAST[INTEGER]-9)/10; Sep[]; IF ParserInputDefs.Peek[] = '- THEN BEGIN sign _ TRUE; [] _ ParserInputDefs.GetChar[]; END; WHILE (ans < BigNum) AND ParserInputDefs.Peek[] IN ['0..'9] DO ans _ ans * 10 + (ParserInputDefs.GetChar[]-'0); someDigit _ TRUE; ENDLOOP; IF ~someDigit THEN ERROR RecoverFromError[MissingSigned]; IF ParserInputDefs.Peek[] IN ['0..'9] THEN ERROR RecoverFromError[NumberTooBig] ELSE RETURN[IF sign THEN -ans ELSE ans]; END; SignedLong: PUBLIC PROCEDURE RETURNS [INT] = BEGIN sign, someDigit: BOOLEAN _ FALSE; ans: INT _ 0; BigNum: INT = (LAST[INT]-9)/10; Sep[]; IF ParserInputDefs.Peek[] = '- THEN BEGIN sign _ TRUE; [] _ ParserInputDefs.GetChar[]; END; WHILE (ans < BigNum) AND ParserInputDefs.Peek[] IN ['0..'9] DO ans _ ans * 10 + (ParserInputDefs.GetChar[]-'0); someDigit _ TRUE; ENDLOOP; IF ~someDigit THEN ERROR RecoverFromError[MissingSigned]; IF ParserInputDefs.Peek[] IN ['0..'9] THEN ERROR RecoverFromError[NumberTooBig] ELSE RETURN[IF sign THEN -ans ELSE ans]; END; GetPoint: PUBLIC PROCEDURE RETURNS [ParserTypeDefs.Point] = BEGIN ans: ParserTypeDefs.Point; ans.x _ SignedLong[]; ans.y _ SignedLong[]; RETURN[ans]; END; END. rFile ParserUtilities.mesa March 6, 1980 5:56 PM Last Edited by: McCreight, January 28, 1985 4:12:05 pm PST ʈ˜J˜Jšœ™Jšœ™Jšœ:™:J˜šÏk ˜ J˜3—J˜šœœ˜Jšœ!œ˜CJšœœ˜J˜Jšœœœœ˜AJ˜š Ïn œœ œœœ˜3Jš˜Jšœœ˜Jšœ˜J˜—š žœœ œœœ˜5Jš˜Jšœœ˜Jšœ˜J˜—šžœœ œ˜Jš˜šœœ˜ šœ˜"Jš œœœ œ œ˜BJšœ#˜*——Jšœ˜Jšœ˜J˜—šžœœ œ˜Jš˜šœœ˜ šœ˜"Jšœœœ œ˜6Jšœ#˜*——Jšœ˜Jšœ˜J˜—š žœœ œœœ˜*Jš˜Jšœœœ˜J˜šœ˜#Jšœ*œ œ˜B—Jšœ ˜Jšœ˜J˜—šžœœ œ˜4Jš˜Jšœ œ˜J˜J˜šœ!œ œ ˜AJ˜)J˜Jšœ˜—Jšœ"œœ˜JJšœ˜J˜—š žœœ œœœ˜/Jš˜Jšœ œœ˜Jšœœ˜Jšœœœœ˜)J˜J˜šœœœ ˜>J˜0Jšœ œ˜Jšœ˜J˜—Jšœ œœ#˜;šœœ ˜*Jšœ˜$—š˜Jšœ˜ —Jšœ˜J˜—š ž œœ œœœœ˜8Jš˜Jšœ œœ˜Jšœœœ˜Jš œœœœœœ˜3J˜J˜šœœœ ˜>J˜0Jšœ œ˜Jšœ˜J˜—Jšœ œœ#˜;šœœ ˜*Jšœ˜$—š˜Jšœ˜ —Jšœ˜J˜—š žœœ œœœ˜,Jš˜Jšœœœ˜!Jšœœ˜Jšœœœœ˜'J˜J˜šœ˜#Jš˜Jšœœ˜ J˜Jšœ˜J˜—šœœœ ˜>J˜0Jšœ œ˜Jšœ˜J˜—Jšœ œœ!˜9šœœ ˜*Jšœ˜$—š˜Jšœœœœ˜#—Jšœ˜J˜—š ž œœ œœœ˜,Jš˜Jšœœœ˜!Jšœœ˜ Jšœœœœ˜J˜J˜šœ˜#Jš˜Jšœœ˜ J˜Jšœ˜J˜—šœœœ ˜>J˜0Jšœ œ˜Jšœ˜J˜—Jšœ œœ!˜9šœœ ˜*Jšœ˜$—š˜Jšœœœœ˜#—Jšœ˜J˜—šžœœ œœ˜;Jš˜J˜J˜J˜Jšœ˜ Jšœ˜J˜—Jšœ˜J˜J˜——…— ÖÐ