camlp4

    6熱度

    4回答

    我已經看到有 let rec parse_document = parser | [< len = parse_int32; st; >] -> parse_list [] (ES.take_int32 len st) | [< >] -> malformed "parse_document" 我能知道什麼是[< >]裏面的一些源代碼?谷歌這種跡象太難了。

    2熱度

    1回答

    我在使用我的camlp4解析器中的deriving-ocsigen語法擴展時遇到問題。我的解析器被稱爲pa_debug.ml 這裏的標籤文件: <pa_debug.ml>: pp(camlp4orf.opt), package(deriving-ocsigen.syntax), syntax(camlp4o) 當 ocamlbuild -libs dynlink,camlp4lib,deriv

    5熱度

    1回答

    我有這段包含camlp4引用的代碼。 let f_name = "my_func" <:str_item< value $lid:f_name$ a = a * 2 >> 通過camlp4of運行此之後,它會產生這樣的: Ast.StExp (_loc, (Ast.ExApp (_loc, (Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.

    5熱度

    2回答

    我正在使用camlp4.macro啓用條件編譯。我有 問題通知OCamlbuild某些標記爲「use_jscore」 的文件必須使用給定的camlp4選項進行預處理。這是我目前有的: let _ = dispatch begin function | After_rules -> flag ["ocaml"; "use_jscore"] (S[A"-package"; A"ca

    2熱度

    1回答

    使用sexplib語法擴展來自動生成序列化代碼用於一個類型,如圖許多簡單的例子在線: open Sexplib type t = { foo : int; bar : string; } with sexp let v = { foo = 3; bar = "baz"; } in sexp_of_t v 編譯失敗,與Error: Unbound value int_of_sexp。

    1熱度

    2回答

    在香草OCaml中,(or)是一個二元函數就像(+)和所有其它的,所以像這樣的代碼工作正常: let any (truths:bool list) = List.fold_left (or) false truths 但在camlp4o加載任何環境中,失敗與解析: Error: Parse error: ")" or "module" or [expr] expected after "("

    0熱度

    2回答

    我正在探索Camlp4,後面有this有用的一系列博客文章,但我遇到了編譯問題。 這是我test.ml文件的代碼: open Camlp4.PreCast let _loc = Loc.ghost in let cons = let rec loop() = try match read_line() with | "" -> [] | c -

    2熱度

    1回答

    提交補丁並等待INRIA合併需要很長時間,我的工作總是延遲。所以我做了camlp4的一個分支。但每次我做了一點改動,我都需要編譯整個編譯器,這需要很長時間。你最好的做法是什麼? (很抱歉,如果我犯了一個愚蠢的錯誤) (我認爲分支camlp4是比較安全的,至少,你放心二進制兼容)

    0熱度

    1回答

    我寫在OCaml的一個程序,給予相同的1 + 2的中綴表達式,輸出前綴表示法:+ 1 2 我的問題是我沒有找到一種方法,使規則例如:所有的值,運算符和括號至少應該由一個空格隔開:1 + 1將是錯誤的1 + 1。我想不使用ocamlp4語法。 這裏是代碼: open Genlex type tree = |

    1熱度

    1回答

    _loc變量作爲參數傳遞給mk_sequence函數,在match ... with表達式的語法規則中出現在here中。 | "match"; e = sequence; "with"; a = match_case -> <:expr< match $mksequence' _loc e$ with [ $a$ ] >> 但它不使用的mksequence的function bod