6
我是F#的新手,並有一個非常惱人的問題。我想解析以下語法:一個簡單的lambda微積分解析器與FParsec
Application := Expression Expression
Expression := "(" "lambda" Name "." Application ")"
| Name
Name := [a-z]+
這將匹配像(lambda x. (lambda y. x y)) z
和(lambda x. x) y
事情。
我的問題是兩個規則互相依賴:
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。我如何擺脫這種依賴關係?
啊!這正是我需要的。謝謝 :) – gosukiwi