我是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 }
一样简单
谢谢你的帮助。
答案 0 :(得分:1)
符号['a'-'z']
表示单个字符,而不是字符串。所以字符串或多或少是一个或多个序列。我担心这是一个赋值,所以我只是说你可以使用你用于{{1的相同技术'将单个字符的模式扩展为相同类型字符序列的模式。 }}
然而,我想知道你是否真的希望你的字符串是如此限制。它们真的只需要由字母字符组成吗?