有没有办法在OCamlLex中返回多个令牌?
我正在尝试为基于缩进的语言编写一个词法分析器和解析器,并且我希望我的词法分析器在注意到缩进级别比以前更低时返回多个DEDENT标记。这将允许它在多个块结束时通知解析器。
通过使用此方法,我将能够使用INDENT和DEDENT作为BEGIN和END的临时替代品,因为这两个令牌将由INDENT和DEDENT令牌隐含。
发布于 2010-08-09 15:16:53
返回令牌列表。如果解析器不能在本地处理它(比如ocamlyacc) --只需在其间插入一个缓存:
let cache =
let l = ref [] in
fun lexbuf ->
match !l with
| x::xs -> l := xs; x
| [] -> match Lexer.tokens lexbuf with
| [] -> failwith "oops"
| x::xs -> l := xs; x或者,您可以在整个文档上运行lexer,然后在整个令牌流上运行解析器。
顺便说一句,你看到ocaml+twt了吗?
https://stackoverflow.com/questions/3437841
复制相似问题