0

我是词法分析概念的新手,我正在尝试在 ocaml 中编写一个词法分析器来读取以下示例输入:

(blue, 4, dog, 15)

基本上输入是任何随机字符串或整数的列表。我发现了许多基于 int 的输入示例,因为它们中的大多数都模拟了计算器,但没有通过示例或词法字符串的文档找到任何指导。以下是我的词法分析器:

(* 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 } 感谢您的帮助一样简单。

4

1 回答 1

1

该符号['a'-'z']表示单个字符,而不是字符串。因此,字符串或多或少是其中一个或多个的序列。我担心这是一个赋值,所以我只想说,您可以使用与 for 相同的技术将单个字符的模式扩展为相同类型字符序列的模式INT

但是,我想知道您是否真的希望您的字符串如此严格。它们真的只需要由字母字符组成吗?

于 2017-03-12T18:46:04.777 回答