vak: (бэсм-6)
[personal profile] vak
Грамматика языка Си хитро устроена: её невозможно однозначно распознать, не строя таблицу имён. Объясню на примере. Рассмотрим конструкцию:
foo bar : qux;
Как её должен интерпретировать парсер? Выглядит полной бессмыслицей. Однако же представим, что перед этим имелось:
typedef int foo;
enum { qux = 1 };
Тогда конструкция превращается в:
int bar : 1;
Честное определение поля структуры размером один бит.

То есть парсер во время разбора входного потока должен строить таблицу имён. Достаточно различать три категории: тайпдефы, именованные константы enum и всё остальное. Но надо отслеживать область действия. При выходе из блока имена, определённые в нём, следует забывать.

Я уже почти добил самопальный парсер Си, осталось добавить тайпдефы.

Date: 2025-05-23 15:49 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
нужно или расширение языка использовать

Да, C++ называется.

Date: 2025-05-24 00:11 (UTC)
archaicos: Шарж (Default)
From: [personal profile] archaicos
Нет, горшочек, не вари. :)