こんにちはを解析し、私はこのようなコードだ:Haskellは表現
data Digit = Zero | One | Two | Three | Four | Five | Six | Seven | Eight |
Nine
deriving (Eq, Show)
data Number = Single Digit | Many Digit Number deriving (Eq, Show)
data Expr = Lit Number
| Sub Expr
| Sum Expr Expr
| Mul Expr Expr
deriving (Eq, Show)
だから、このコードのアイデアは* + 2 3 * 2 + 6 - 2
のように、文字列を持つことである、((2 + 3) * (2 * (6 - 2)))
として表現され、その後、部品を置くためにこれを使用しますそこにある文字列のタイプ。もちろん、最終的に結果を見つけます。この場合は40です。問題は、構文解析についてあまりよく分からないため、このような式をどのように解析できるかわかりません。私は、文字列が人や何かのような型に解析されている単純な構文解析を見てきました。しかし、私はこれが少し複雑だと思う。誰かが何か提案があれば、本当に興味があります。
あなたは必ずご入力は* + 2 '3 * 2であることを想定されていないされていますか?これは接頭辞ポーランド表記のように見えます。 – Alec
ええ、私は間違ったコードを掲示しました、それは "Sub Expr Expr"ではなく、 "Sub Expr Expr"であると思われます、ごめんなさい – iIllumination
https://stackoverflow.com/q/46516500/625403と比較してください - どこかでこれを練習として割り当てます。この場合、 '-'はバイナリ減算ではなく、単項否定であると考えられます。 – amalloy