Наш инструментарий реинжиниринга программного обеспечения DMS настаивает на том, чтобы парсеры и инверторы парсеров (называемые "prettyprinters") использовались как "покер-анте" для механической обработки (анализа / преобразования) произвольных языков. Они обеспечивают полный круговой переход: исходный текст в AST с захваченной информацией о положении (файл / строка / столбец) и комментариями, а также AST - с легальным исходным текстом, включая восстановление исходных позиций токена («печать с точностью») или с хорошим форматированием («prettyprinting») ) варианты, включая регенерацию комментариев.
Парсеры часто задаются комбинацией грамматик и лексических определений токенов; эти нотации обычно компилируются в эффективные механизмы синтаксического анализа, и DMS делает это для стороны «синтаксического анализатора», как и следовало ожидать. Другие люди здесь предполагают, что «посетитель» - это способ сделать красивую печать, и, как и ассемблерный код, это правильный способ реализовать красивую печать на самом низком уровне абстракции. Однако симпатичные принтеры DMS указываются в терминах языка текстового поля над грамматическими терминами, например, латекс, что позволяет контролировать размещение различных языковых элементов по горизонтали, вертикали, встраивать, размещать, объединять, ламинировать и т. Д. Компиляция DMS они превращаются в эффективных посетителей низкого уровня (как предлагают другие ответы), которые реализуют генерацию блоков. Но, как генератор парсера, вам не нужно видеть все ужасные детали.
DMS имеет около 30+ наборов этих языковых интерфейсов для различных языков программирования и формальных нотаций, начиная от C ++, C, Java, C #, COBOL и т. Д. До HTML, XML, языков ассемблера из некоторых машин, спецификации временных свойств, спецификации составных абстрактных алгебр и т. д.