когда говорят про AST — кажется, что разговор про какое-то совсем стандартизованное представление. Так ли это или все-таки разговор об идее, а детали реализации AST каждый раз свои?
2. Есть ли смысл строить AST по результатам чистого синтаксического анализа без проверки типов, в частности? Или лучше выполнять проверку соответствия типов уже в процессе построения AST?
Для вывода типов в общем случае нужно полностью знать код функции. Даже если языку достаточно простого вывода типов переменных вроде var x = f(); вам нужно знать тип функции f которая может быть определена ниже по коду
2. Проблема хорошо знакома тем, кто имеет дело с C++. Clang строит AST в явном виде. MSVC в явном виде AST не строит. В результате MSVC не способен поддерживать некоторые фичи последних стандартов (кажется, это какой-то вариант SFINAE on return type). Проблема очень большая. Лет 7 тому назад Микрософт даже нанимала специального человека, что-бы приделать Clang-front-end к своему компилятору, но это так ни чем и не закончилось.
<<<приделать Clang-front-end к своему компилятору>>> На этом месте я немного впал в смысловой ступор, если честно...
Parser and preprocessor.
Я - в том смысле, что артефакты на выходе Parser and preprocessor у МС и силанга, должны разниться. Тогда, если мы приводим силанга-фронт-энд к форматам ввода родного ядра МС-компилятора, то это уже не совсем силанг. Если наоборот - тогда - да.
Или сигнатуры. См С++.
Обсуждают сегодня