menhir

    2熱度

    1回答

    在實現真實世界(TM)的語言,我經常遇到這樣的情況: (* language Foo *) type A = ... (* parsed by parse_A *) type B = ... (* parsed by parse_B *) type collection = { as : A list ; bs : B list } (* parser ParseFoo.mly *)

    0熱度

    1回答

    我一直在努力通過「現代編譯器在ML中的實現」,我將SML轉換爲OCaml。本書定義了一種名爲Tiger的語言,該語言有一個let ... in ... end語法用於爲給定表達式聲明範圍內的類型,變量和函數。此外,相同類型的相鄰聲明應該組合在一起以允許相互遞歸。 我試圖代表這是巨石與下面的文法片段: %right FUNCTION TYPE . . . decs: l = list(d

    1熱度

    2回答

    我使用Menhir創建一個解析器,並且存在一種總是跳到我的行爲,我不理解它。我創建了以下最小的示例來演示它;這是接收機的說法在Go語言的方法聲明的聲明(http://golang.org/ref/spec#Method_declarations): %{ %} %token <string> T_identifier %token T_star %start <unit> demo

    1熱度

    2回答

    我正在爲分配語言構建一個小型編譯器。 考慮以下規則: var_block : | LPAREN var_decl+ RPAREN { var_scope := var_scope + 1 }; 是當var_block最初識別語義動作觸發,或者它觸發一次生產結束時達到(在這種情況下,RPAREN)?

    0熱度

    1回答

    寫lambda表達式解析器的序列, data expr = Symbol of string | Lambda of string * expr | App of expr * expr 當寫.mly文件裏如何表達的想法,表達序列 e1 e2 e3 e4 應被解析爲 App ((App (App e1 e2) e3) e4) 使用規則: %public expr_expr:

    0熱度

    1回答

    我有下面的代碼也有更多像expr:int {} |布爾{}等,但我不知道什麼是我應該寫在這種解析器的類型,我有一個計算器的例子,與int一起工作,類型是int,但在我的程序中我有浮動字符串等。 %{ dont know what to write here %} %token <int> INT %token <float> FLOAT %token <char> CHAR %to

    5熱度

    1回答

    我寫一個小解析器與巨石+ Ocamllex和我有兩個要求,我似乎無法滿足的同時 我想保持一個錯誤之後解析(報告更多的錯誤)。 我想打印發生錯誤的令牌。 我可以很容易地通過使用error令牌。我也可以使用this question建議的方法輕鬆完成2) 。但是,我不知道一個簡單的方法來實現這兩個。 我處理錯誤的方式,現在是這樣的: pair: | left = prodA SEPARATOR ri

    2熱度

    1回答

    我使用的巨石定義在ML現代編譯器實現所描述的老虎語言,here是手動: exp: | lv = lvalue { Lvalue lv } | i = INT { Int i } | s = STRING { String s } ...... lvalue: | i = ID { Id i } | lv = lvalue D

    2熱度

    1回答

    我想改變menhir輸出的行爲: 我希望它查找所有語法替代品,如果它找到任何,並將它們放在一個列表中,並讓我回到這ambigouus解釋。它不應該減少衝突,只是存儲它們。 在menhir的源代碼中,在我看來,我必須查看「Engine.ml」。得到的語法確定的標記作爲語法自動機的檢查點的狀態出現在變體類型項「Accepted v」中。這個內容是通過一個函數「accept env prod」找到的,它

    0熱度

    2回答

    我使用--compile-errors功能menhir,我很滿意。我還使用ocamlbuild來管理我的項目的編譯。由於該項目非常基礎,迄今爲止,構建基礎設施仍然微不足道。 我有一個_tags文件和一個簡單的Makefile在項目的根。我還沒有myocamlbuild.ml文件。該_tags文件只包含一個行: <src/*>: package(ppx_deriving.std) 在Makefi