Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang eopl
- ;.
- ;Los comentarios inician con %.
- ;identificadores numero (enteros
- ;y flotanes, negativos positivos)
- (define especificacion-lexica
- '(
- (comentario ("%" (arbno (not #\newline))) skip)
- (espacio-blanco (whitespace) skip)
- (identificador (letter (arbno (or letter digit))) symbol)
- (numero (digit (arbno digit)) number)
- (numero ("-" digit (arbno digit)) number)
- (numero (digit (arbno digit) "." digit (arbno digit)) number)
- (numero ("-" digit (arbno digit) "." digit (arbno digit)) number)
- ))
- (define especificacion-gramatical
- '(
- (programa (declaracion) a-program)
- (declaracion ("(" declaracion ";" declaracion ")") decl-1)
- (declaracion ("while" expresion "do" declaracion) decl-2)
- (declaracion (identificador ":=" expresion) decl-3)
- (expresion (identificador) exp-1)
- (expresion (numero) exp-2)
- (expresion ("(" expresion "+" expresion ")") exp-3)
- ))
- (sllgen:make-define-datatypes especificacion-lexica especificacion-gramatical)
- ;;(sllgen:list-define-datatypes especificacion-lexica especificacion-gramatical)
- ;;Scanner
- (define scanner
- (sllgen:make-string-scanner especificacion-lexica especificacion-gramatical)
- )
- ;;Parser
- (define parser
- (sllgen:make-string-parser especificacion-lexica especificacion-gramatical)
- )
- ;;Interpretador
- (define interpretador
- (sllgen:make-rep-loop
- "xXx--xXx "
- (lambda (programa) (evaluar-programa programa))
- (sllgen:make-stream-parser especificacion-lexica especificacion-gramatical))
- )
- (define evaluar-programa
- (lambda (pgm)
- (cases programa pgm
- (a-program (decl) (evaluar-declaracion decl))
- )
- )
- )
- (define evaluar-declaracion
- (lambda (dec)
- (cases declaracion dec
- (decl-1 (d1 d2) (list (evaluar-declaracion d1) (evaluar-declaracion d2)))
- (decl-2 (exp d) (list (evaluar-expresion exp) (evaluar-declaracion d)))
- (decl-3 (id exp) (list id (evaluar-expresion exp)))
- )
- )
- )
- (define evaluar-expresion
- (lambda (exp)
- (cases expresion exp
- (exp-1 (id) id)
- (exp-2 (num) num)
- (exp-3 (exp1 exp2) (list exp1 exp2)))))
- (interpretador)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement