在ocamlex中返回多个令牌
有没有办法在ocamlex中返回多个令牌 我正在尝试为基于缩进的语言编写一个lexer和解析器,我希望我的lexer在注意到缩进级别低于以前时返回多个在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
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令牌是唯一可以多次出现的令牌,但我可以解决这个问题。