2016-03-03 45 views
0

我需要幫助,試圖獲得一個需要英文單詞並將其放入數字的程序。我已經做了所有事情,達到數千(千,百萬,億..... vigintillion)。(SCHEME)英文單詞 - >編號

所以我必須使用詞法分析器和解析器。 我很確定它與我的解析器功能有關。

#lang scheme 
(define calcp 
(parser 

(start start) 
(end newline EOF) 
(tokens value-tokens op-tokens) 
(error (lambda (a b c) (void))) 

(grammar 

(start [() #f] 
     ;; If there is an error, ignore everything before the error 
     ;; and try to start over right after the error 
     [(error start) $2] 
     [(S) $1]) 

(S [(zero) $1] 
    [(L) $1]) 
(zero [(ZERO) 0]) 
(L [(T) $1] 
    [(T D) (expt 10 (thousands-number $1))] 
    [(T D L) $1]) 
(T [(H) $1] 
    [(A HUNDRED H) (+ (* $1 100) $3)] 
    [(A HUNDRED) (* $1 100)]) 
(H [(B) $1] 
    [(C) $1] 
    [(C B) (+ $1 $2)]) 
(A [(UNDERTEN) (undertwenty-number $1)]) 
(B [(UNDERTWENTY) (undertwenty-number $1)] 
    [(A) $1]) 
(C [(TENS) (tens-number $1)]) 
(D [(THOUSANDS) (thousands-number $1)]) 
) 

) )

在該計算器,用於解析器,L是我定義語法的一部分。 在這種情況下,L-> T | TD | TDL。其中D是我的數千個功能。

下面的代碼描述了我所有大數字名稱的列表。

#lang scheme 
(define (thousands-number name) 
    (cadr 
    (assoc 
    name 
    '((thousand 3) (million 6) (billion 9) (trillion 12) (quadrillion 15) (quintillion 18) (sextillion 21) (septillion 24) (octillion 27) (nonillion 30) (decillion 33) (undecillion 36) (duodecillion 39) 
       (tredecillion 42) (quattuordecillion 45) (quindecillion 48) (sexdecillion 51) (septendecillion 54) (octodecillion 57) (novemdecillion 60) (vigintillion 63))))) 

我想在這裏做的是使用指數函數是有很多很多個零的數字,因爲我不喜歡硬編碼的10^33甚至10^63的大量零。 我可能在解析器裏面用expt函數搞砸了,所以我希望有人能幫我解決這個問題。

輸入:「兩百萬的三次432萬億9020000億8個十億176640000十二條」應輸出:2432902008176640012.

但是我的輸出是176。

回答

0

這裏是更新的代碼和完成

(S [(zero) $1] 
    [(L) $1]) 
(zero [(ZERO) 0]) 

** (L [(T) $1] 
    [(T D) (* (expt 10 $2) $1)] 
    [(T D L) (+ (* (expt 10 $2) $1) $3) ]) ** 

(T [(H) $1] 
    [(A HUNDRED H) (+ (* $1 100) $3)] 
    [(A HUNDRED) (* $1 100)]) 
(H [(B) $1] 
    [(C) $1] 
    [(C B) (+ $1 $2)]) 
(A [(UNDERTEN) (undertwenty-number $1)]) 
(B [(UNDERTWENTY) (undertwenty-number $1)] 
    [(A) $1]) 
(C [(TENS) (tens-number $1)]) 
(D [(THOUSANDS) (thousands-number $1)]) 
) 
) 
)