2012-05-03 20 views
1

私は組み込み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)))))) 

を使用しています。 助言への提案やリンクがあれば幸いです。

答えて

2

SSCCEをお送りください。私がお勧めすることができ、質問で提供さ少しの情報で:

  • 解析とは別に評価、評価者が評価する準備ができてシンボルのリストを受け取る必要があり、ここではyou'reが解析を混合していることを表示されます評価段階
  • は、単にあなたが加算と減算を処理しているのと同じ方法であなたは乗算を含むことができ、別のケースを追加します。((* exp exp) (* $2 $3))

SICPは、あなた自身の書き方に入門のための非常に良い本ですSchemeの評価者。

関連する問題