我試圖在Ocaml中實現一個詞法分析器。我最初需要做的一部分是取一個字符串並將它們分割成字符串列表,以便稍後「標記」它們並將其放入解析器中。它需要遵循基本的操作指南,忽略空格,製表符,換行符等。例如:OCaml中的語言詞法分析器
"1 + 25 *(6^2)"
應該返回
["1"; "+"; "25"; "*"; "("; "6"; "^"; "2"; ")"]
如果字符串的開頭可以是多件事情,最長的比賽應該是首選,例如:
"1-1" should be split as ["1"; "-1"] since "-1" is a longer match than just "-"
我試圖與Str.regex
做第一步,但它不足以完美分割它。我的代碼:
Str.split (Str.regexp "[ \t\n]+") input
需要input
並根據[ \t\n]+
分裂他們,所以這裏的問題是,如果我有像,它會返回["(5"; "+"; "6^8)"]
,而不是["("; "5"; "+"; "6"; "^"; "8"; ")"]
。
任何想法我怎麼能做得更好?
我不能使用'ocamllex' b/c這是項目的一部分來手動實現詞法分析器,解析器,和一名口譯員。 – thestateofmay
如果您允許使用'Str.string_match',您可以匹配您使用ocamllex指定的同一組正則表達式,然後花費最長的時間。 –