在ocamllex中返回多个令牌

Joe*_*ggs 6 ocaml lexical-analysis ocamlyacc ocamllex

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

我正在尝试为基于缩进的语言编写词法分析器和解析器,并且当我DEDENT注意到缩进级别比以前更小时,我希望我的词法分析器返回多个标记.这将允许它在多个块结束时通知解析器.

按照此方法,我将能够使用INDENTDEDENT作为插入式替代BEGINEND,因为这两个标记将被暗示INDENTDEDENT令牌.

ygr*_*rek 7

返回令牌列表.如果解析器本身不能处理它(比如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
Run Code Online (Sandbox Code Playgroud)

或者,您可以在完整文档上运行词法分析器,然后在完整令牌流上运行解析器.

BTW你看到了ocaml + twt吗?