ocamlyacc

    4熱度

    1回答

    是否有任何方法可以在OCamlLex中返回多個標記? 我正在嘗試爲基於縮進的語言編寫詞法分析器和解析器,並且我希望我的詞法分析器在注意到縮進級別小於之前的值時返回多個DEDENT標記。這將允許它在多個塊結束時通知解析器。 通過以下這種方法,我將能夠使用INDENT和DEDENT作爲直接替代了BEGIN和END,因爲這兩個標記將由INDENT和DEDENT令牌暗示。

    0熱度

    1回答

    我完全沒有想法。我今天花了每一分鐘的時間,但我完全沒有想法。 這是我Ocamlyacc語法: input: /* empty */ { } | input stmt { } stmt: extern { print_endline "Got an extern import" } | func { print_endline "Got function defin

    5熱度

    1回答

    我試圖解析語言,其中的運營商有一個動態屬性(優先級和優先級)用巨石解析器(類似於Ocamlyacc)。在詞法階段,所有的運營商填充OP:string令牌(從而「+」變成(OP "+")等)。 運算符屬性是在解析時確定的,並填充一個關聯運算符及其屬性的表。鑑於此表,我如何指示Menhir根據此表的數據動態更改解析運算符的規則的優先級? 感謝, CharlieP。

    2熱度

    2回答

    我有一些代碼,包括用於域特定語言(邏輯)一個menhir基於解析器。對於我的理智,而調試的緣故,這將是巨大的,可以直接在像這樣的頂級鍵入(公式)這種語言的實例: # f = << P(x,y) & x!=y >> 是campl4/5我唯一的選擇?如果是的話,我覺得文件相當嚇人。是否有一個示例/教程與我的用例非常接近,我可以想象適應嗎? (例如,引入新關鍵字的語法擴展似乎不相關)。謝謝!

    8熱度

    3回答

    我在expr.ml文件中有一個類型expr。在parser.mly(OCamlyacc文件),我定義使expr規則,並給予類型: %start expr %type <expr> expr 不過,我得到: File "parser.mli", line 34, characters 48-52: Error: Unbound type constructor expr

    8熱度

    3回答

    我是OCaml新手,我正在嘗試編寫一個簡單的OCaml類語法,而我無法弄清楚這一點。我的語法允許這樣的事情: let sub = fun x -> fun y -> x - y;; 但是,如果我想使用這樣定義的功能,我可以這樣寫:(sub 7) 3但我不能寫sub 7 3,這真讓我心煩。出於某種原因,它被解釋爲好像我寫了sub (7 3)(這將把7作爲函數與參數3)。相關章節有: /* oth

    4熱度

    3回答

    是否可以爲OCamlYacc生成的解析器提供一個明確的標記列表供分析? 我想使用OCamlLex顯式生成一個令牌列表,然後我使用Yacc生成的分析器進行分析。但是,標準用例會生成一個分析器,爲下一個標記隱式調用詞法分析器。這裏的令牌是在yacc分析期間而不是之前計算的。從概念上講,解析器只能處理令牌,但是Yacc生成的解析器提供了一個依賴於詞法分析器的接口,這在我的情況下並不需要。

    4熱度

    1回答

    我有一個解析器和詞法分析器,用ocamlyacc和ocamllex編寫。如果要解析的文件過早結束,如我在行尾忘記了分號,則應用程序不會引發語法錯誤。我意識到這是因爲我正在提高和捕捉EOF,這使得詞法分析器忽略了未完成的規則​​,但是我應該怎樣做才能引發語法錯誤? 這是我的當前解析器(簡化的), %{ let parse_error s = Printf.ksprinf failwith

    0熱度

    1回答

    我想知道如何使用ocamllex和ocamlyacc編寫三個地址代碼? 我搜索了很多關於這個,但我無法找到任何使用ocamlyacc。 我有我的解析器和我的詞法分析器工作(都使用ocamlyacc和ocamllex),但現在我必須寫一個三地址碼發生器使用它們。 例如,假設我有這個解析器(計算器): 我應該如何編寫這三個地址代碼? 分析器: input: /* empty */ { } |