JunoExpressions.mesa (was OldJunoParserEtc.mesa)
Last Edited by: Gnelson, October 11, 1983 9:39 pm
Last Edited by: Stolfi, June 13, 1984 11:50:30 am PDT

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.