Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang eopl
- ;.
- (define especificacion-lexica
- '(
- (espacio-blanco (whitespace) skip)
- (identificador (letter (arbno (or letter digit))) symbol)
- (numero (digit (arbno digit)) number)
- (numero (digit (arbno digit) "." digit (arbno digit)) number)
- (cadena ("\"" (arbno (or letter digit whitespace)) "\"") string)
- )
- )
- (define especificacion-gramatical
- '(
- (declaracion ("{" declaracion ";" declaracion "}") declaracion1)
- (declaracion ("while" expresion "do" declaracion) while-decl)
- (declaracion (identificador ":=" expresion) equal-decl)
- (expresion (identificador) id-exp)
- (expresion (numero) num-exp)
- (expresion ("(" expresion "+" expresion ")") sum-exp)
- )
- )
- (sllgen:make-define-datatypes especificacion-lexica especificacion-gramatical)
- ;;(sllgen:list-define-datatypes especificacion-lexica especificacion-gramatical)
- (define escanear
- (sllgen:make-string-scanner especificacion-lexica especificacion-gramatical)
- )
- (define parsear
- (sllgen:make-string-parser especificacion-lexica especificacion-gramatical)
- )
- ;;(escanear "while x9 do x9 := (2 + 3.5)")
- ;;(parsear "while x9 do x9 := (2 + 3.5)")
- (define interpretador
- (sllgen:make-rep-loop "xXxNoobMaster69xXx--> "
- (lambda (programa) (software programa))
- (sllgen:make-stream-parser
- especificacion-lexica
- especificacion-gramatical)))
- (define software
- (lambda (pgm)
- (cases declaracion pgm
- (declaracion1 (decl1 decl2) "Soy una declaracion bonita")
- (while-decl (exp1 decl1) "Soy un whilecito")
- (equal-decl (id exp) "Soy una asignacion")
- )
- )
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement