К вопросу о простоте лексера языка программирования Си.

Nov 26, 2012 16:46

В одной библиотеке нашёл вот такое:
#define BODY
#include
И ведь наверняка где-то используется в виде #include BODYВ GNU C используется преобразование содержимого определения в лексемы и простая подстановка списка лексем по месту. Это означает, что #include должна уметь собирать имя файла из лексем. Второй вариант - мы храним строку определения ( Read more... )

не нравится, c, языки программирования

Leave a comment

Comments 4

bitfield November 26 2012, 14:20:09 UTC
А причем тут лексер? Разрешением дефайнов (как и инклюдами) занимается препроцессор.
Считали строчку, разбили на пробелы и preprocessor tokens, подставили дефайны.
Если эта строчка #define, сохранили в список новый дефайн.
Если #include -- инклудим получившееся.
Если #if - включаем/выключаем обработку следующих строк.

А лексеру на вход идет уже результат.

Reply

thesz November 26 2012, 14:40:51 UTC
Лексер здесь причём потому, что в современных компиляторах обязанности препроцессора возложены на него.

Иначе нельзя показать сообщение с точностью до символа в строке.

К тому же, так быстрее получается.

Reply


kiryl November 26 2012, 22:41:20 UTC
В линуксовом ядре есть #define if() ..., который даже работает. ;)

Reply

thesz November 26 2012, 22:44:39 UTC
Это не так страшно.

Reply


Leave a comment

Up