7

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

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

通过遵循这种方法,我将能够使用INDENTand作为andDEDENT的替代品,因为BEGINand标记END暗示了这两个标记。INDENTDEDENT

4

1 回答 1

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

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

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

于 2010-08-09T07:16:53.020 回答