![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Грамматика языка Си хитро устроена: её невозможно однозначно распознать, не строя таблицу имён. Объясню на примере. Рассмотрим конструкцию:
То есть парсер во время разбора входного потока должен строить таблицу имён. Достаточно различать три категории: тайпдефы, именованные константы enum и всё остальное. Но надо отслеживать область действия. При выходе из блока имена, определённые в нём, следует забывать.
Я уже почти добил самопальный парсер Си, осталось добавить тайпдефы.
Как её должен интерпретировать парсер? Выглядит полной бессмыслицей. Однако же представим, что перед этим имелось:foo bar : qux;
Тогда конструкция превращается в:typedef int foo; enum { qux = 1 };
Честное определение поля структуры размером один бит.int bar : 1;
То есть парсер во время разбора входного потока должен строить таблицу имён. Достаточно различать три категории: тайпдефы, именованные константы enum и всё остальное. Но надо отслеживать область действия. При выходе из блока имена, определённые в нём, следует забывать.
Я уже почти добил самопальный парсер Си, осталось добавить тайпдефы.
no subject
Date: 2025-05-19 04:51 (UTC)Бо в Сі ж, крім чисто мовних структур, є мої улюблені precompil'и....
Раптом згадав: 20 з гаком років тому бібліотека для обслуговування MRI сканерів компанії Дженерал Електрік мала свою власну "мову" (ну, не мову, а набір команд для керування всім) у вигляді .h файлів. Сам по собі Сі код обробки картинок був глибоко секретний і стороннім очам не завжди доступний, але оці хедери можна було редагувати, потім воно десь якось компілювалося, ти отримував бінарник з потрібними властивостями....
no subject
Date: 2025-05-19 04:55 (UTC)no subject
Date: 2025-05-19 06:56 (UTC)no subject
Date: 2025-05-19 15:35 (UTC)no subject
Date: 2025-05-19 15:45 (UTC)Как говорится, какое слово из "const" и "int" ты не понимаешь?
no subject
Date: 2025-05-19 22:32 (UTC)no subject
Date: 2025-05-20 03:38 (UTC)no subject
Date: 2025-05-20 04:42 (UTC)В следующий раз надо будет заняться парсером Rust. Возможно, он проще.
no subject
Date: 2025-05-19 16:48 (UTC)