Как передать блок компиляции, полученный из ceylon.ast, в компилятор Ceylon?

Следующий пример найден в ceylon/ceylon.ast В проекте показано, как программно построить AST и проверить его тип с помощью модуля проверки типов Ceylon (com.redhat.ceylon.compiler.typechecker.TypeChecker):

https://github.com/ceylon/ceylon.ast/blob/master/source/test/ceylon/ast/samples/turingMachine/powerOfTwo.ceylon

Что впоследствии будет рекомендованным методом для вызова дерева типизированного синтаксиса для компиляции дерева типизированного синтаксиса, учитывая, что единицы компиляции обычно задаются как файлы, а не как деревья типизированного синтаксиса (из ceylon.ast проект) на проверку типов?

Этот вопрос связан с этим: Цейлонский провайдер типов: Как получить типизированное синтаксическое дерево?,

1 ответ

Решение

Генерация AST, а затем компиляция его вне контекста реального проекта, кажется, не является жизнеспособным вариантом. Компилятору требуется больше информации, чем предоставляет только AST, и предоставление компилятору информации по умолчанию или поддельной информации (например, имен файлов) по-прежнему является сложной задачей.

С другой стороны, использование AST реальных блоков компиляции в контексте реального проекта в качестве некой макросистемы не имеет смысла, поскольку у цейлонских программ могут быть побочные эффекты, и трансформация должна учитывать это. Кроме того, правила преобразования должны быть завершающими и слитными и должны быть выражены в форме, которая упрощает их поддержание в отличие от процедурных преобразователей. Выражение Цейлона не подходит для этого. В худшем случае это будет процедурный преобразователь Ast, который преобразует процедурные преобразователи AST A la Groovy.

Исключением может стать преобразование декларативных древовидных структур на Цейлоне. И это именно то, о чем я думал в своем вопросе: чтение данных (необязательно в синтаксисе Цейлона) и предоставление их для оценки или, возможно, для компиляции.

Другие вопросы по тегам