me.txt 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // ME Notes
  4. //
  5. //////////////////////////////////////////////////////////////////////////////
  6. - Components
  7. - AST Editor
  8. - Syntax checking
  9. - Type checking
  10. - Evaluator
  11. - Renderer
  12. //////////////////////////////////////////////////////////////////////////////
  13. //
  14. // MDL Examples
  15. //
  16. //////////////////////////////////////////////////////////////////////////////
  17. - patterns
  18. x = identifier
  19. x : float = pattern : type
  20. (x, y : type) = (pattern, pattern)
  21. (x, y) : type =
  22. head :: tail = pattern :: pattern
  23. Point x y = function pattern
  24. //////////////////////////////////////////////////////////////////////////////
  25. //
  26. // MDL Grammer
  27. //
  28. //////////////////////////////////////////////////////////////////////////////
  29. typeList =
  30. type [typeList]
  31. type =
  32. identifier
  33. _
  34. identifier typeList
  35. type, type
  36. [type]
  37. type -> type
  38. (type)
  39. pattern =
  40. identifier
  41. pattern : type
  42. pattern, pattern
  43. pattern :: pattern
  44. identifier pattern
  45. pattern as pattern
  46. (pattern)
  47. patternList =
  48. pattern [patternList]
  49. statement =
  50. statements =
  51. statement [; statements]
  52. block =
  53. { statements }
  54. terminal =
  55. identifier
  56. number
  57. "string"
  58. 'a'
  59. numericOperator = + - * / ^ &
  60. comparisonOperator = == != < <= > >=
  61. booleanOperator = not and or
  62. bitwiseOperator = ! & | xor diff test
  63. pairOperator = ,
  64. consOperator = ::
  65. applyOperator = .
  66. composeOperator = o
  67. operator = ...
  68. expression =
  69. terminal
  70. expression expression
  71. expression operator expression
  72. \pattern -> expression
  73. '[' [expressionList] ']'
  74. (expression)
  75. expression : type
  76. if expression then expression else expression
  77. let definitions in expression
  78. expression where defintions
  79. block
  80. expressionList =
  81. expression [, expression]
  82. definition =
  83. patternList = expression
  84. declaration =
  85. pattern : type
  86. def =
  87. definition
  88. declaration
  89. defList:
  90. def [; defList]
  91. program =
  92. defList;
  93. // types, classes
  94. //////////////////////////////////////////////////////////////////////////////
  95. //
  96. // AST Editor
  97. //
  98. //////////////////////////////////////////////////////////////////////////////
  99. - Token list
  100. - User defined layouts per production