Tôi mới sử dụng F # và có vấn đề khá khó chịu. Tôi muốn phân tích ngữ pháp sau:Trình phân tích cú pháp tích phân lambda đơn giản với FParsec
Application := Expression Expression
Expression := "(" "lambda" Name "." Application ")"
| Name
Name := [a-z]+
Điều đó sẽ phù hợp với những thứ như (lambda x. (lambda y. x y)) z
và (lambda x. x) y
.
Vấn đề của tôi là hai nguyên tắc phụ thuộc vào nhau:
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
phụ thuộc vào papplication
và vicebersa. Làm thế nào tôi có thể thoát khỏi sự phụ thuộc đó?
Ah! Đó chỉ là những gì tôi cần. Cảm ơn :) – gosukiwi