在ocamllex中返回多个标记

7
有没有办法在OCamlLex中返回多个标记?
我正在尝试编写一个缩进语言的词法分析器和解析器,当词法分析器发现缩进级别小于之前的级别时,我想让它返回多个“DEDENT”标记。这将使它能够在多个块结束时通知解析器。
通过这种方法,我将能够使用“INDENT”和“DEDENT”作为“BEGIN”和“END”的替代品,因为这两个标记将被“INDENT”和“DEDENT”标记隐含。
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 吗?


谢谢,我很快就会尝试一下,并看看是否可以让它对我有用。这可能有点烦人,因为DEDENT标记是唯一可以多次出现的标记,但我可以解决这个问题。 - Joe Bloggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接