Я пишу интерфейс для языка (по ocamllex
и ocamlyacc
).Верно обрабатывать белый интервал в симпатичном принтере
Таким образом, frond-end может построить Abstract Syntax Tree (AST)
из программы. Затем мы часто пишем красивый принтер, который берет AST и печатает программу. Если позже мы просто хотим скомпилировать или проанализировать AST, большую часть времени нам не нужно, чтобы печатная программа была точно так же, как и исходная программа с точки зрения белого интервала. Однако на этот раз я хочу написать красивый принтер, который печатает точно той же программой, что и оригинальная, с точки зрения белого интервала.
Поэтому мой вопрос - это то, что лучше всего подходит для обработки белого интервала при попытке не изменять слишком много типов АСТ. Я действительно не хочу добавлять число (белых пробелов) к каждому типу в AST.
Например, это, как я в настоящее время иметь дело с (то есть, пропускаемого) белого интервала в lexer.mll
:
rule token = parse
...
| [' ' '\t'] { token lexbuf } (* skip blanks *)
| eof { EOF }
Кто-нибудь знает, как изменить это, а также другие части переднего конца к правильно ли учитывать пробелы во время последующей печати?
Если ваш симпатичный принтер никоим образом не изменяет пробелы, что именно он делает, что оправдывает слово «довольно»? :) Другими словами, почему бы вам просто не отрегулировать весь текст ввода? – rici
Я вижу ... это потому, что для некоторых частей программы я не хочу менять белые пробелы. Например, для вызова функции 'f (arg0, arg1, arg2, arg3)', я хочу сохранить как есть, вместо того, чтобы изменять его до довольно 'f (arg0, arg1, arg2, arg3)'. – SoftTimur