A Toy Programming Language
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.3KB

  1. #lang br/quicklang
  2. (require "tmUtils.rkt")
  3. (define-macro (tA-module-begin PARSE-TREE)
  4. #'(#%module-begin
  5. PARSE-TREE
  6. (display-result '(a a a a a))))
  7. (provide (rename-out [tA-module-begin #%module-begin]))
  8. (define-macro (tA-program START-ARG BLANK-ARG ACCEPT-ARG STATE-SET-ARG)
  9. #'(void START-ARG BLANK-ARG ACCEPT-ARG STATE-SET-ARG))
  10. (provide tA-program)
  11. (define-macro (tA-start "@" START-ARG)
  12. #'(set-start! START-ARG))
  13. (provide tA-start)
  14. (define-macro (tA-blank "%" BLANK-ARG)
  15. #'(set-def! BLANK-ARG))
  16. (provide tA-blank)
  17. (define-macro (tA-accept "!" ACCEPT-ARG)
  18. #'(void))
  19. (provide tA-accept)
  20. (define-macro (tA-state-set STATE-ARG ...)
  21. #'(begin
  22. STATE-ARG ...))
  23. (provide tA-state-set)
  24. (define-macro (tA-tran CURRENT "~" NEW DIR NEXT)
  25. #'(lambda (i)
  26. (hash-set! trans-map
  27. `(,i ,CURRENT)
  28. `(,NEW ,DIR ,NEXT))))
  29. (provide tA-tran)
  30. (define-macro (tA-tran-set TRAN ...)
  31. #'(lambda (i)
  32. (begin
  33. (TRAN i) ...)))
  34. (provide tA-tran-set)
  35. (define-macro (tA-state ":" ID TRAN-SET)
  36. #'(TRAN-SET ID))
  37. (provide tA-state)
  38. (define-macro (tA-state-id ID)
  39. #'(string->symbol ID))
  40. (provide tA-state-id)
  41. (define-macro (tA-symbol SYM)
  42. #'(string->symbol SYM))
  43. (provide tA-symbol)
  44. (define-macro (tA-dir DIR)
  45. #'(begin
  46. (if (equal? "<" DIR) 'L 'R)))
  47. (provide tA-dir)