【发布时间】:2017-05-07 23:29:55
【问题描述】:
我正在尝试在 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)"] 而不是["("; "5"; "+"; "6"; "^"; "8"; ")"]。
知道如何才能做得更好吗?
【问题讨论】: