| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- DEFINITION MODULE InternalTree; (* gf 3.8.88 *)
- FROM Scanner IMPORT IDENT, STRING, POSITION;
- (*EXPORT QUALIFIED BLCK, DECL, STMT, EXPR,
- blckPtr, declPtr, stmtPtr, exprPtr,
- declKind, stmtKind, exprKind,
- monOperator, dyOperator, conType,
- NewDeclSequence, NewStmtSequence, NewExprSequence,
- NoDeclaration, NoStatement, NoExpression;
- *)
- TYPE declKind = (nodeclaration, declsequence,
- typeident,
- constdecl, vardecl,
- procdecl);
- stmtKind = (nostatement, stmtsequence,
- assign, call, read, write, if, while);
- exprKind = (noexpression, exprsequence,
- identifier, immediatevalue, string,
- monadic, dyadic);
- monOperator = (odd, neg, not);
- dyOperator = ( greaterequal, plus, minus, times, divides,
- equal, notequal, less, greater, lessequal,
- and, or);
- conType = (int, bool);
- blckPtr = POINTER TO BLCK;
- declPtr = POINTER TO DECL;
- stmtPtr = POINTER TO STMT;
- exprPtr = POINTER TO EXPR;
- BLCK = RECORD
- position : POSITION;
- declarations : declPtr;
- statements : stmtPtr;
- END;
- DECL = RECORD
- position : POSITION;
- CASE kind : declKind OF
- nodeclaration:
- | declsequence:
- first : declPtr;
- rest : declPtr
- | typeident:
- typeId : IDENT
- | constdecl:
- constId : IDENT;
- constVal : CARDINAL
- | vardecl:
- varId : IDENT;
- varType : declPtr
- | procdecl:
- procId : IDENT;
- body : blckPtr
- END
- END;
- STMT = RECORD
- position : POSITION;
- CASE kind : stmtKind OF
- nostatement:
- | stmtsequence:
- first : stmtPtr;
- rest : stmtPtr
- | assign:
- target : exprPtr;
- source : exprPtr
- | call:
- callId : IDENT;
- callParams : exprPtr
- | read:
- inVar : exprPtr
- | write:
- outVal : exprPtr
- | if:
- choice : exprPtr;
- thenPart : stmtPtr;
- elsePart : stmtPtr
- | while:
- stop : exprPtr;
- doPart : stmtPtr
- END
- END;
- EXPR = RECORD
- position : POSITION;
- CASE kind: exprKind OF
- noexpression:
- | exprsequence:
- first : exprPtr;
- rest : exprPtr
- | identifier:
- usedId : IDENT;
- usedInd : exprPtr;
- | string:
- stringPtr : STRING;
- | immediatevalue:
- immVal : CARDINAL;
- immType : conType
- | monadic:
- monOpr : monOperator;
- arg : exprPtr
- | dyadic:
- dyOpr : dyOperator;
- leftArg : exprPtr;
- rightArg : exprPtr
- END
- END;
- PROCEDURE NewDeclSequence (p: POSITION): declPtr;
- PROCEDURE NewStmtSequence (p: POSITION): stmtPtr;
- PROCEDURE NewExprSequence (p: POSITION): exprPtr;
- PROCEDURE NoDeclaration (): declPtr;
- PROCEDURE NoStatement (): stmtPtr;
- PROCEDURE NoExpression (): exprPtr;
- END InternalTree.
|