Advertisement
cardel

FLP 21 de Julio

Jul 21st, 2020
1,853
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.21 KB | None | 0 0
  1. #lang eopl
  2. ;.
  3.  
  4.  
  5. ;Los comentarios inician con %.
  6. ;identificadores  numero (enteros
  7. ;y flotanes, negativos positivos)
  8.  
  9. (define especificacion-lexica
  10.   '(
  11.     (comentario ("%" (arbno (not #\newline))) skip)
  12.     (espacio-blanco (whitespace) skip)
  13.     (identificador (letter (arbno (or letter digit))) symbol)
  14.     (numero (digit (arbno digit)) number)
  15.     (numero ("-" digit (arbno digit)) number)
  16.     (numero (digit (arbno digit) "." digit (arbno digit)) number)
  17.     (numero ("-" digit (arbno digit) "." digit (arbno digit)) number)
  18.     ))
  19.  
  20.  
  21. (define especificacion-gramatical
  22.   '(
  23.     (programa (declaracion) a-program)
  24.     (declaracion ("(" declaracion ";" declaracion ")") decl-1)
  25.     (declaracion ("while" expresion "do" declaracion) decl-2)
  26.     (declaracion (identificador ":=" expresion) decl-3)
  27.     (expresion   (identificador) exp-1)
  28.     (expresion   (numero) exp-2)
  29.     (expresion   ("(" expresion "+" expresion ")") exp-3)
  30.     ))
  31.  
  32. (sllgen:make-define-datatypes especificacion-lexica especificacion-gramatical)
  33. ;;(sllgen:list-define-datatypes especificacion-lexica especificacion-gramatical)
  34.  
  35. ;;Scanner
  36. (define scanner
  37.   (sllgen:make-string-scanner especificacion-lexica especificacion-gramatical)
  38.   )
  39.  
  40. ;;Parser
  41. (define parser
  42.   (sllgen:make-string-parser especificacion-lexica especificacion-gramatical)
  43.   )
  44.  
  45. ;;Interpretador
  46. (define interpretador
  47.   (sllgen:make-rep-loop
  48.    "xXx--xXx "
  49.    (lambda (programa) (evaluar-programa programa))
  50.    (sllgen:make-stream-parser especificacion-lexica especificacion-gramatical))
  51. )
  52.  
  53. (define evaluar-programa
  54.   (lambda (pgm)
  55.     (cases programa pgm
  56.       (a-program (decl) (evaluar-declaracion decl))
  57.       )
  58.     )
  59. )
  60.  
  61.  
  62. (define evaluar-declaracion
  63.   (lambda (dec)
  64.     (cases declaracion dec
  65.       (decl-1 (d1 d2) (list (evaluar-declaracion d1) (evaluar-declaracion d2)))
  66.       (decl-2 (exp d) (list (evaluar-expresion exp) (evaluar-declaracion d)))
  67.       (decl-3 (id exp) (list id (evaluar-expresion exp)))
  68.       )
  69.     )
  70.   )
  71.  
  72. (define evaluar-expresion
  73.   (lambda (exp)
  74.     (cases expresion exp
  75.       (exp-1 (id) id)
  76.       (exp-2 (num) num)
  77.       (exp-3 (exp1 exp2) (list exp1 exp2)))))
  78.  
  79. (interpretador)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement