Я пытаюсь продублировать функцию eval в рэкете, не вызывая встроенную функцию eval. В настоящее время я использую простой математический лексер и парсер
$(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))))))
на данный момент я не уверен, как реализовать умножение для парсера. Любые предложения или ссылки на помощь будут оценены.