fparsec

    10熱度

    1回答

    我已經決定檢查FParsec並嘗試爲λ表達式編寫解析器。事實證明,渴望使得遞歸解析變得困難。我該如何解決這個問題? 代碼: open FParsec type λExpr = | Variable of char | Application of λExpr * λExpr | Lambda of char * λExpr let rec FV = funct

    5熱度

    2回答

    我想使用FParsec解析標準簡單類型(在lambda微積分意義上),但是我很難從Lex/Yacc風格轉到FParsec中使用的風格,特別是在尊重遞歸定義。我試圖解析類型的 的例子是: Ø Ø - > 0 (鄰 - > 0 - > O) - > 0 這裏是我的嘗試: type SType = | Atom | Arrow of SType * SType

    4熱度

    3回答

    我需要解析簡單的DSL語言類似如下: import "library.txt" def <int, bool, byte> main(int param1, bool param2) { var a = f4(param1); // or var d = f1(f2(f3(f4(param1)))); var b = f3(a); var c = f2(b);

    1熱度

    1回答

    我想使用fparsec來解析簡單的待辦事項列表語言(實際上來自TaskPaper的數據)作爲簡單的分析程序組合器示例。但是我遇到了一個我似乎無法解決的bug。我是分析器組合器的新手,FParsec似乎依賴於我瞭解Parsec,但我發現parsec文檔不可思議。 任務紙張語言的規則很簡單(我忽略@tags現在) 項目「結尾:」 任務將開始「 - 」 任何其他行文本是項目或任務上的純文本註釋 因此,字

    4熱度

    1回答

    我試圖複製一個簡單的if語句的結構: if (paren) { block } [else ({ block } | rec if (paren)) ] 因爲如果(括號)塊,我創建了一個IfBlock AST節點。否則,它會遞歸地填充一個IfElseBlock節點。 我已經嘗試了不少替代結構 let parse_if = suffixparen .>>. suffixblock |>

    5熱度

    1回答

    我的AST模型需要攜帶位置信息(文件名,行,索引)。是否有內置的方式來訪問這些信息?從參考文檔看,這個流看起來像是支持這個位置,但我更喜歡我不必爲了保存位置而實現一個虛擬分析器,並且無處不在。 在此先感謝