我是Lexing概念的新手,并试图在OCAML中编写lexer来读取以下示例输入:
(blue, 4, dog, 15)
基本上,输入是任何随机字符串或整数的列表。我发现了许多基于INT的输入的示例,因为其中大多数是对计算器建模的,但没有通过示例或Lexing字符串的文档找到任何指导。就我的lexer而言,这是我所拥有的:
(* 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 }
一样简单感谢您的帮助。
符号['a'-'z']
代表一个字符,而不是字符串。因此,字符串或多或少是其中一个或多个的序列。我担心这是一个任务,所以我只想说,您可以使用与INT
相同的技术将单个字符的模式扩展到一个模式中的模式。<<<<<<<<<<<<<<<<
但是,我想知道您是否真的希望您的字符串如此限制。他们真的需要由字母字符组成吗?