Ich bin neu in F # und habe ein ziemlich nerviges Problem. Ich möchte folgende Grammatik analysieren:Ein einfacher Lambda-Kalkül-Parser mit FParsec
Application := Expression Expression
Expression := "(" "lambda" Name "." Application ")"
| Name
Name := [a-z]+
, dass Dinge wie (lambda x. (lambda y. x y)) z
und (lambda x. x) y
entsprechen würde.
Mein Problem ist, dass zwei Regeln voneinander abhängig ist:
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
auf papplication
und vicebersa abhängt. Wie kann ich diese Abhängigkeit loswerden?
Ah! Genau das habe ich gebraucht. Vielen Dank :) – gosukiwi