InternalTree.def 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. DEFINITION MODULE InternalTree; (* gf 3.8.88 *)
  2. FROM Scanner IMPORT IDENT, STRING, POSITION;
  3. (*EXPORT QUALIFIED BLCK, DECL, STMT, EXPR,
  4. blckPtr, declPtr, stmtPtr, exprPtr,
  5. declKind, stmtKind, exprKind,
  6. monOperator, dyOperator, conType,
  7. NewDeclSequence, NewStmtSequence, NewExprSequence,
  8. NoDeclaration, NoStatement, NoExpression;
  9. *)
  10. TYPE declKind = (nodeclaration, declsequence,
  11. typeident,
  12. constdecl, vardecl,
  13. procdecl);
  14. stmtKind = (nostatement, stmtsequence,
  15. assign, call, read, write, if, while);
  16. exprKind = (noexpression, exprsequence,
  17. identifier, immediatevalue, string,
  18. monadic, dyadic);
  19. monOperator = (odd, neg, not);
  20. dyOperator = ( greaterequal, plus, minus, times, divides,
  21. equal, notequal, less, greater, lessequal,
  22. and, or);
  23. conType = (int, bool);
  24. blckPtr = POINTER TO BLCK;
  25. declPtr = POINTER TO DECL;
  26. stmtPtr = POINTER TO STMT;
  27. exprPtr = POINTER TO EXPR;
  28. BLCK = RECORD
  29. position : POSITION;
  30. declarations : declPtr;
  31. statements : stmtPtr;
  32. END;
  33. DECL = RECORD
  34. position : POSITION;
  35. CASE kind : declKind OF
  36. nodeclaration:
  37. | declsequence:
  38. first : declPtr;
  39. rest : declPtr
  40. | typeident:
  41. typeId : IDENT
  42. | constdecl:
  43. constId : IDENT;
  44. constVal : CARDINAL
  45. | vardecl:
  46. varId : IDENT;
  47. varType : declPtr
  48. | procdecl:
  49. procId : IDENT;
  50. body : blckPtr
  51. END
  52. END;
  53. STMT = RECORD
  54. position : POSITION;
  55. CASE kind : stmtKind OF
  56. nostatement:
  57. | stmtsequence:
  58. first : stmtPtr;
  59. rest : stmtPtr
  60. | assign:
  61. target : exprPtr;
  62. source : exprPtr
  63. | call:
  64. callId : IDENT;
  65. callParams : exprPtr
  66. | read:
  67. inVar : exprPtr
  68. | write:
  69. outVal : exprPtr
  70. | if:
  71. choice : exprPtr;
  72. thenPart : stmtPtr;
  73. elsePart : stmtPtr
  74. | while:
  75. stop : exprPtr;
  76. doPart : stmtPtr
  77. END
  78. END;
  79. EXPR = RECORD
  80. position : POSITION;
  81. CASE kind: exprKind OF
  82. noexpression:
  83. | exprsequence:
  84. first : exprPtr;
  85. rest : exprPtr
  86. | identifier:
  87. usedId : IDENT;
  88. usedInd : exprPtr;
  89. | string:
  90. stringPtr : STRING;
  91. | immediatevalue:
  92. immVal : CARDINAL;
  93. immType : conType
  94. | monadic:
  95. monOpr : monOperator;
  96. arg : exprPtr
  97. | dyadic:
  98. dyOpr : dyOperator;
  99. leftArg : exprPtr;
  100. rightArg : exprPtr
  101. END
  102. END;
  103. PROCEDURE NewDeclSequence (p: POSITION): declPtr;
  104. PROCEDURE NewStmtSequence (p: POSITION): stmtPtr;
  105. PROCEDURE NewExprSequence (p: POSITION): exprPtr;
  106. PROCEDURE NoDeclaration (): declPtr;
  107. PROCEDURE NoStatement (): stmtPtr;
  108. PROCEDURE NoExpression (): exprPtr;
  109. END InternalTree.