如何使用ocamllex实现字符串的lexing?

时间:2017-03-12 18:24:01

标签: string ocaml ocamllex

我是lexing概念的新手,我正试图在ocaml中编写词法分析器以阅读以下示例输入:

(blue, 4, dog, 15)

基本上输入是任意随机字符串或整数的列表。我已经找到了许多基于int的输入的例子,因为他们中的大多数都是计算器的模型,但是没有通过示例或lexing字符串的文档找到任何指导。以下是我的词法分析员所拥有的内容:

(* File lexer.mll *)
{

open Parser  

}

rule lexer_main = parse
      [' ' '\r' '\t']     { lexer_main lexbuf }     (* skip blanks *)
    | ['0'-'9']+ as lxm { INT(int_of_string lxm) }
    | '('      { LPAREN }
    | ')'      { RPAREN }
    | ','      { COMMA }
    | eof      { EOF }
    | _        { syntax_error "couldn't identify the token" }

正如您所看到的,我错过了解析字符串的能力。我知道字符串可以用['a'-'z']形式表示,所以它就像['a'-'z'] { STRING }一样简单 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

符号['a'-'z']表示单个字符,而不是字符串。所以字符串或多或少是一个或多个序列。我担心这是一个赋值,所以我只是说你可以使用你用于{{1的相同技术'将单个字符的模式扩展为相同类型字符序列的模式。 }}

然而,我想知道你是否真的希望你的字符串是如此限制。它们真的只需要由字母字符组成吗?