Advertisement
cardel

Untitled

Jun 24th, 2019
986
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 1.63 KB | None | 0 0
  1. #lang eopl
  2. ;.
  3.  
  4. (define especificacion-lexica
  5.   '(
  6.     (espacio-blanco (whitespace) skip)
  7.     (identificador (letter (arbno (or letter digit))) symbol)
  8.     (numero (digit (arbno digit)) number)
  9.     (numero (digit (arbno digit) "." digit (arbno digit)) number)
  10.     (cadena ("\"" (arbno (or letter digit whitespace)) "\"") string)
  11.     )
  12. )
  13.  
  14. (define especificacion-gramatical
  15.   '(
  16.     (declaracion ("{" declaracion ";" declaracion "}") declaracion1)
  17.     (declaracion ("while" expresion "do" declaracion) while-decl)
  18.     (declaracion (identificador ":=" expresion) equal-decl)
  19.     (expresion (identificador) id-exp)
  20.     (expresion (numero) num-exp)
  21.     (expresion ("(" expresion "+" expresion ")") sum-exp)
  22.     )
  23.   )
  24.  
  25. (sllgen:make-define-datatypes especificacion-lexica especificacion-gramatical)
  26. ;;(sllgen:list-define-datatypes especificacion-lexica especificacion-gramatical)
  27.  
  28. (define escanear
  29.   (sllgen:make-string-scanner especificacion-lexica especificacion-gramatical)
  30. )
  31.  
  32. (define parsear
  33.   (sllgen:make-string-parser especificacion-lexica especificacion-gramatical)
  34. )  
  35.  
  36. ;;(escanear "while x9 do x9 := (2 + 3.5)")
  37. ;;(parsear "while x9 do x9 := (2 + 3.5)")
  38.  
  39.  
  40. (define interpretador
  41.   (sllgen:make-rep-loop "xXxNoobMaster69xXx--> "
  42.     (lambda (programa) (software programa))
  43.     (sllgen:make-stream-parser
  44.       especificacion-lexica
  45.       especificacion-gramatical)))
  46.  
  47. (define software
  48.   (lambda (pgm)
  49.     (cases declaracion pgm
  50.       (declaracion1 (decl1 decl2) "Soy una declaracion bonita")
  51.       (while-decl (exp1 decl1) "Soy un whilecito")
  52.       (equal-decl (id exp)  "Soy una asignacion")
  53.       )
  54.     )
  55.   )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement