% $Id: mini_cecil_abstract_syntax.mod,v 1.1 1994/04/27 15:23:27 leavens Exp leavens $
%
% Abstract syntax for mini Cecil
%
% AUTHOR: Gary T. Leavens

module mini_cecil_abstract_syntax.


%%%%%%%%%%%% type expressions
kind	typeExpr	type.
type	ty		string -> typeExpr.
type	procType	(list typeExpr) -> typeExpr -> typeExpr.


%%%%%%%%%%% expressions
kind expression		type.

type varExpr		string -> expression.
type intLiteral		int -> expression.
type true		expression.
type false		expression.
type msgExpr		string -> (list expression) -> expression.
type procCallExpr	string -> (list expression) -> expression.
type newExpr		string -> (list expression) -> expression.
type getExpr		expression -> string -> expression.


%%%%%%%%%%% statements
kind statement		type.

type exprStmt		expression -> statement.
type assignStmt		string -> expression -> statement.
type setFieldStmt	string -> string -> expression -> statement.
type ifStmt		expression -> statement -> statement -> statement.
type seqStmt		(list statement) -> statement.



kind decl		type.
type varDecl		string -> typeExpr -> decl.

kind main		type.
type mainDecl		(list decl) -> statement -> (list decl) -> statement
				-> main.

kind resultExpr		type.
type return		expression -> resultExpr.

kind procBody		type.
type body		statement -> resultExpr -> procBody.

kind procedure 		type.
type procedureDecl	string -> (list decl) -> typeExpr -> procBody
				-> procedure.

kind methodFormal	type.
type methodFormalDecl	string -> typeExpr -> methodFormal.
    
kind class		type.
type classDecl		string -> (list decl) -> class.

kind method		type.
type methodDecl		string -> (list methodFormal) -> typeExpr -> procBody
					-> method.

kind program		type.
type programDecl	(list class) -> (list method) -> (list procedure)
				-> main -> program.
