ocamllex

    4熱度

    1回答

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

    1熱度

    1回答

    當我詞法分析器的定義部分定義了一些標識符(截至here描述的),我試着寫形式的東西: let op_char = ['+' '-' '*' '/'] let id_char = [^ ' ' '\r' '\n' '\t' op_char] 定義id_char爲每燒焦不是一個空字符或一個op_char。但是,我在第二行的「op_char」上出現語法錯誤。我應該如何寫這個?謝謝。

    6熱度

    1回答

    我試圖按照Appel的「現代編譯器在ML中的實現」,並使用Ocamllex編寫詞法分析器。 規範要求詞法分析器返回字符串後翻譯轉義序列。 下面的代碼是從ocamllex輸入文件的摘錄: rule tiger = parse ... | '"' { let buffer = Buffer.create 1 in STRING (stringl buffer lexbuf)

    0熱度

    1回答

    該理論說關於lex工具(我讀ocamllex)它會將正則表達式集合轉換爲DFA(實際上在NFA和NFA2DFA中)的C(OCaml)代碼。 DFA M的正式定義是一個5元組M = {Q,Sigma,transition_function,q0,F}。我在生成的文件中找到如下: 記錄稱爲__ocaml_lex_tables從詞法模塊 遞歸函數 領域有一個DFA的對象/結構之間的映射和ocamllex

    0熱度

    1回答

    我有一個奇怪的字符串語法,其中 分隔符的含義取決於上下文。在下面的示例 輸入: ((foo) (bar)) 結果是兩個串["foo"; "bar"]的列表。 外部括號對進入列表模式。 然後,下一對括號分隔字符串。 在內部字符串中,平衡的括號對將被作爲字符串的一部分處理爲 。 現在詞法分析器根據全局變量inside決定返回什麼取決於 。 { open Sample_parser

    6熱度

    1回答

    我在業餘時間使用ocamllex手冊作爲參考,一直在研究Lua fslex詞法分析器。 我在嘗試正確標記長字符串時遇到了一些問題。 「長串」由'[' ('=')* '['和']' ('=')* ']'標記分隔; =標誌的數量必須相同。 在第一次執行,詞法分析器似乎哪裏正確識別無法識別[[模式,產生兩個LBRACKET令牌儘管最長匹配,而[=[和變化。此外,正則表達式無法確保使用正確的結束標記,無論

    2熱度

    1回答

    { } rule translate = parse | "current_directory" { print_string (Sys.getcwd()) } | _ as c { print_char c } | eof { exit 0 } { let main() = let lexbuf = Lexing.from_channel stdin in while true

    2熱度

    2回答

    我已經實現了用於在我的代碼中讀入/打印類型的詞法分析器/分析器/漂亮打印機的常用組合。當涉及到普通字符串正則表達式時,我發現在詞法分析器和漂亮打印機之間存在冗餘,通常用於符號,標點符號或分隔符。 比如我現在有 rule token = parse | "|-" { TURNSTILE } 在我lexer.mll文件,並像一個函數: let pp fmt (l,r) = Fo

    5熱度

    4回答

    我在這裏結束了我的繩索。我無法在ocamllex中獲得任何工作,並且這讓我瘋狂。這是我的.mll文件: { open Parser } rule next = parse | (['a'-'z'] ['a'-'z']*) as id { Identifier id } | '=' { EqualsSign } | ';' { Semicolon }

    0熱度

    1回答

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