在ocamlex中返回多个令牌

在ocamlex中返回多个令牌,ocaml,lexical-analysis,ocamllex,ocamlyacc,Ocaml,Lexical Analysis,Ocamllex,Ocamlyacc,有没有办法在ocamlex中返回多个令牌 我正在尝试为基于缩进的语言编写一个lexer和解析器,我希望我的lexer在注意到缩进级别低于以前时返回多个DEDENT标记。这将允许它在多个块结束时通知解析器 通过使用此方法,我将能够使用INDENT和DEDENT作为BEGIN和END的插入式替换,因为这两个标记将由INDENT和DEDENT标记暗示。返回标记列表。如果解析器无法以本机方式处理(比如ocamlyacc)-只需在两者之间插入一个缓存: let cache = let l = ref

有没有办法在ocamlex中返回多个令牌

我正在尝试为基于缩进的语言编写一个lexer和解析器,我希望我的lexer在注意到缩进级别低于以前时返回多个
DEDENT
标记。这将允许它在多个块结束时通知解析器


通过使用此方法,我将能够使用
INDENT
DEDENT
作为
BEGIN
END
的插入式替换,因为这两个标记将由
INDENT
DEDENT
标记暗示。

返回标记列表。如果解析器无法以本机方式处理(比如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,然后在完整令牌流上运行解析器


顺便说一句,你看到了吗?

谢谢,我很快会试试看,看看我能不能让它对我有用。这可能有点烦人,因为DEDENT令牌是唯一可以多次出现的令牌,但我可以解决这个问题。