Parsing OCaml将字符串解析为字符串*Int列表

Parsing OCaml将字符串解析为字符串*Int列表,parsing,ocaml,lexer,Parsing,Ocaml,Lexer,我将如何创建一个表达式来将字符串解析为这种形式?我是否需要以parser.mly格式实现代码来处理这个问题?没有真正的方法给出详细的答案,因为您没有说明原始字符串应该如何对应于您的对列表 基于您的输出类型的简单性,我认为您可以在不调用ocamlyacc的完整机制的情况下实现这一点。也就是说,我怀疑您是否需要parser.mly文件。您可以使用ocamlex,也可以只应用Str模块中的一些正则表达式。这取决于您的解析实际需要做什么 这里有一种可能使用Str中的正则表达式: type unit_t

我将如何创建一个表达式来将字符串解析为这种形式?我是否需要以
parser.mly
格式实现代码来处理这个问题?

没有真正的方法给出详细的答案,因为您没有说明原始字符串应该如何对应于您的对列表

基于您的输出类型的简单性,我认为您可以在不调用ocamlyacc的完整机制的情况下实现这一点。也就是说,我怀疑您是否需要
parser.mly
文件。您可以使用ocamlex,也可以只应用
Str
模块中的一些正则表达式。这取决于您的解析实际需要做什么

这里有一种可能使用
Str
中的正则表达式:

type unit_t = (string * int) list
您可以这样运行它:

let p s =
    let fs = Str.full_split (Str.regexp "[0-9]+") s in
    let rec go = function
    | [] -> []
    | Str.Text s :: Str.Delim i :: rest -> (s, int_of_string i) :: go rest
    | Str.Text s :: rest -> (s, 0) :: go rest
    | Str.Delim i :: rest -> ("", int_of_string i) :: go rest
    in
    go fs
##加载“str.cma”;;
##使用“p.ml”;;
val p:string->(string*int)列表=
#p“123abc456def”;;
-:(string*int)list=[(“”,123);(“abc”,456);(“def”,0)]
#p“ghi789jkl100”;;
-:(string*int)list=[(“ghi”,789);(“jkl”,100)]
# #load "str.cma";;
# #use "p.ml";;
val p : string -> (string * int) list = <fun>
# p "123abc456def";;
- : (string * int) list = [("", 123); ("abc", 456); ("def", 0)]
# p "ghi789jkl100";;
- : (string * int) list = [("ghi", 789); ("jkl", 100)]