Как передать блок компиляции, полученный из ceylon.ast, в компилятор Ceylon?
Следующий пример найден в ceylon/ceylon.ast
В проекте показано, как программно построить AST и проверить его тип с помощью модуля проверки типов Ceylon (com.redhat.ceylon.compiler.typechecker.TypeChecker
):
Что впоследствии будет рекомендованным методом для вызова дерева типизированного синтаксиса для компиляции дерева типизированного синтаксиса, учитывая, что единицы компиляции обычно задаются как файлы, а не как деревья типизированного синтаксиса (из ceylon.ast
проект) на проверку типов?
Этот вопрос связан с этим: Цейлонский провайдер типов: Как получить типизированное синтаксическое дерево?,
1 ответ
Генерация AST, а затем компиляция его вне контекста реального проекта, кажется, не является жизнеспособным вариантом. Компилятору требуется больше информации, чем предоставляет только AST, и предоставление компилятору информации по умолчанию или поддельной информации (например, имен файлов) по-прежнему является сложной задачей.
С другой стороны, использование AST реальных блоков компиляции в контексте реального проекта в качестве некой макросистемы не имеет смысла, поскольку у цейлонских программ могут быть побочные эффекты, и трансформация должна учитывать это. Кроме того, правила преобразования должны быть завершающими и слитными и должны быть выражены в форме, которая упрощает их поддержание в отличие от процедурных преобразователей. Выражение Цейлона не подходит для этого. В худшем случае это будет процедурный преобразователь Ast, который преобразует процедурные преобразователи AST A la Groovy.
Исключением может стать преобразование декларативных древовидных структур на Цейлоне. И это именно то, о чем я думал в своем вопросе: чтение данных (необязательно в синтаксисе Цейлона) и предоставление их для оценки или, возможно, для компиляции.