6
私はF#を初めて使っていて、かなり面倒な問題があります。FParsecを使った単純なラムダ計算パーザ
Application := Expression Expression
Expression := "(" "lambda" Name "." Application ")"
| Name
Name := [a-z]+
(lambda x. (lambda y. x y)) z
と(lambda x. x) y
のようなものにマッチします:私は、次の文法を解析します。
私の問題は、2つのルールがお互いに依存していることである:
let popen = pchar '('
let pclose = pchar ')'
let pname = many1 letter |>> Seq.toArray |>> System.String |>> NameNode
let plambda = pstring "lambda"
let pdot = pchar '.'
let phead = plambda >>. pname .>> pdot
let pexpression =
popen >>. pname .>>. papplication .>> pclose |>> ExpressionNode
<|> pname
let papplication = pexpression .>>. pexpression
pexpression
はpapplication
とvicebersaに依存します。どうすればその依存関係を取り除くことができますか?
Ah!それは私が必要としたものです。ありがとう:) – gosukiwi