ocaml解析字符串“*”到* ocaml运算符?

时间:2015-08-02 21:47:30

标签: string ocaml

我有一个功能

 val do_math s : string -> int

调用如:

 do_math "3*4"

将返回int 12

给定字符串输入是否有办法用子或其他东西解析* out以便我可以给do_math其他字符串如“3-1”并返回int 2?

我正在努力避免编写所有额外的代码......

我在读完你的答案之后想出了类似的东西,但是它说的不是功能而且无法应用。并且没有使用变量op_match的事实,但是我不知道如何从该变量获取值作为返回值。

open String
let do_math s =
  let num1 = int_of_string (sub s 0 1) in
  let num2 = int_of_string (sub s (length s - 1)1) in
  let op = (sub s 1 2) in
  match op with
  | "+" -> num1 + num2
  | "-" -> num1 - num2
  | "*" -> num1 * num2
  | "/" -> num1 / num2
  | _ -> num1 + num2

2 个答案:

答案 0 :(得分:3)

您可以使用Genlex模块为表达式语言编写自己的解析器。它甚至还带有编写计算器的例子。 Genlex模块也包含在OCaml O'Reilly Book中。 manual本身可以帮助您编写实际的解释器。 另外,我曾经写过一个解析器和interpreter一点点丰富的表达式语言,所以如果你发现它有用,你可以查阅或使用它。

答案 1 :(得分:2)

查看此问题的最佳方法是OCaml是一种编译语言,因此它不具备用于解析和计算表达式的运行时工具。在解释型语言中,这些通常是“免费”提供的,因为解释器无论如何都在进行这些操作。

您最好的办法是找到一个可以链接到的表达式评估库。如果您不担心效率,可以运行命令进行计算。实际上你甚至可以运行OCaml解释器: - )

我见过的一个这样的图书馆是GNU matheval