Recreando la función Eval
Frecuentes
Visto 154 veces
1
Estoy tratando de duplicar la función eval en racket sin recurrir a la función eval incorporada. Actualmente estoy usando un analizador y lexer matemático simple
$(define simple-math-lexer
(lexer
((re-+ number10) (token-NUM (string->number lexeme)))
("-" (token--))
("+" (token-+))
;; recursively calls the lexer which effectively skips whitespace
(whitespace (simple-math-lexer input-port))
((eof) (token-EOF))))
(define simple-math-parser
(parser
(start exp)
(end EOF)
(error void)
(tokens a b)
(precs (left - +))
(grammar
(exp ((NUM) $1)
((+ exp exp) (+ $2 $3))
((- exp exp) (- $2 $3))))))
por el momento no estoy seguro de cómo implementaría la multiplicación para el analizador. Cualquier sugerencia o enlace para ayudar sería apreciada.
1 Respuestas
2
Deberías publicar un SSCCE. Con la poca información proporcionada en la pregunta, puedo sugerir lo siguiente:
- Separe la evaluación del análisis, un evaluador debe recibir una lista de símbolos listos para ser evaluados, aquí parece que está mezclando las fases de análisis y evaluación
- Simplemente agregue otro caso, de la misma manera que está manejando la suma y la resta, podría incluir la multiplicación:
((* exp exp) (* $2 $3))
SICP es un muy buen libro para comenzar a escribir su propio evaluador en Scheme.
contestado el 03 de mayo de 12 a las 18:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas parsing scheme eval racket multiplication or haz tu propia pregunta.