我正在为一种语言编写前端(by ocamllex
and ocamlyacc
)。
所以前端可以Abstract Syntax Tree (AST)
从一个程序构建一个。然后我们经常写一个漂亮的打印机,它接受一个 AST 并打印一个程序。如果稍后我们只想编译或分析 AST,大多数时候,我们不需要打印的程序与原始程序在空白方面完全相同。但是,这一次,我想编写一个漂亮的打印机,它打印的程序与原始程序完全相同,就白间距而言。
因此,我的问题是在尽量不修改太多 AST 类型的同时处理空白的最佳实践是什么。我真的不想为 AST 中的每种类型添加一些(空格)。
例如,这就是我目前处理(即跳过)空白的方式lexer.mll
:
rule token = parse
...
| [' ' '\t'] { token lexbuf } (* skip blanks *)
| eof { EOF }
有谁知道如何更改此以及前端的其他部分以正确考虑空白以供以后打印?