<> <<>> <> <> << This module defines the internal Juno expression (Se) syntax. It exports the static syntax checker and the reserved atoms.>> DIRECTORY JunoParseUnparse USING [Se, SyntacticPredicate]; JunoExpressions: DEFINITIONS = BEGIN OPEN Parse: JunoParseUnparse; << - - - - IMPORTED TYPES>> Se: TYPE = Parse.Se; -- Se = "symbolic expression" << - - - - RESERVED ATOMS >> << Tokens that have special meaning for the Juno interpreter: >> and: READONLY ATOM; approx: READONLY ATOM; -- '~' symbol (hint/initial value for local variable) assign: READONLY ATOM; -- ':=' symbol at: READONLY ATOM; -- 'at' constraint ccw: READONLY ATOM; colon: READONLY ATOM; -- ':' infix operator (lambda expression) comma: READONLY ATOM; -- ',' (concatenate sequences of values) cong: READONLY ATOM; cons: READONLY ATOM; -- list cons dec: READONLY ATOM; -- decrement by 1 dist: READONLY ATOM; -- double minus infix operator (distance) div: READONLY ATOM; -- '/' operator (infix) do: READONLY ATOM; draw: READONLY ATOM; ends: READONLY ATOM; face: READONLY ATOM; -- infix; sets face (bold, italic, etc) for folowing prints fill: READONLY ATOM; first: READONLY ATOM; -- first element of list (car) floor: READONLY ATOM; -- integer part font: READONLY ATOM; -- infix; sets font for following prints hor: READONLY ATOM; if: READONLY ATOM; inc: READONLY ATOM; -- increment by one justified: READONLY ATOM; -- infix; sets justification (left, center, right) for folowing prints. lambda: READONLY ATOM; -- infix; separates parms from body in lambdas (faked for now). leftPren: READONLY ATOM; minus: READONLY ATOM; -- '-' operator (prefix or infix) obox: READONLY ATOM; -- "or" ("else if") box to separate alternatives in if/do statements paint: READONLY ATOM; para: READONLY ATOM; perp: READONLY ATOM; plus: READONLY ATOM; -- '+' operator (infix) print: READONLY ATOM; rel: READONLY ATOM; rest: READONLY ATOM; -- cdr of list rightArrow: READONLY ATOM; -- '->' ("then") operator for if/do sataements semicolon: READONLY ATOM; size: READONLY ATOM; -- infix; sets font size for folowing prints skip: READONLY ATOM; -- 'skip' ("do nothing") statement stroke: READONLY ATOM; suchThat: READONLY ATOM; -- '|' (separates declaations from constraints) times: READONLY ATOM; -- '*' operator (infix) true: READONLY ATOM; -- 'true' atom (for empty constraint lists) ver: READONLY ATOM; width: READONLY ATOM; xcoord: READONLY ATOM; ycoord: READONLY ATOM; << - - - - SYNTAX CHECKING>> Lambda: Parse.SyntacticPredicate; Expr: Parse.SyntacticPredicate; Command: Parse.SyntacticPredicate; Definition: Parse.SyntacticPredicate; << - - - - CAR, CDR, ETC>> Car: PROC [r: Se] RETURNS [Se]; Cdr: PROC [r: Se] RETURNS [Se]; Cadr: PROC [r: Se] RETURNS [Se]; Caddr: PROC [r: Se] RETURNS [Se]; Cddr: PROC [r: Se] RETURNS [Se]; Caadr: PROC [r: Se] RETURNS [Se]; Cdar: PROC [r: Se] RETURNS [Se]; Cddar: PROC [r: Se] RETURNS [Se]; END.