(SCHEME) 英文单词 -> 数字

(SCHEME) english words -> numbers

我需要帮助来尝试获取一个程序,该程序可以接受英语单词并将其转换为数字。我已经完成了数千(千,百万,十亿..... vigintillion)。

所以我必须使用词法分析器和解析器。 我很确定它与我的解析器功能有关。

 #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) ]
       [(S) ])

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

) )

在这个解析器计算器中,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 函数本身,所以我希望有人能帮助我解决这个问题。

输入:"two quintillion four hundred thirty-two quadrillion nine hundred two trillion eight billion one hundred seventy-six million six hundred forty thousand twelve" 应该输出:2432902008176640012。

然而我的输出是176。

这是更新后的代码,已完成

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

**  (L [(T) ]
   [(T D) (* (expt 10 ) )]
   [(T D L) (+ (* (expt 10 ) ) ) ]) **

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