Цель
 

fb.bas: Основной модуль для компилятора является родительским модулем для parser/lexer/AST/IR/emitters, обработка файла верхнего уровня или включаемого файла
parser*.bas: Функции Парсинга/компиляции: lexer tokens -> AST узлы
symb*.bas: Таблицы символов и поиск, обработка пространств имен / областей видимости.
rtl*.bas: Помощники при создании AST вызовов rtlib/gfxlib функций.

Структура парсера имеет очень близкое отношение к FreeBASIC грамматике. Существует функция разбора для каждого элемента грамматики.

Парсер получает маркеры от лексера и проверяет входной исходный код. Большинство сообщений об ошибках (помимо командной строки и ошибок доступа к файлу) прибывает отсюда. Дополнительные функции парсера создают соответствующий AST. Это - основа процесса компиляции.

Многие функции парсера (или скорее компилятора) (снабженные префиксом 'c') анализируют и пропускают элемент грамматики, который они представляют или показывают ошибку, если они не находят его. Парсер рекурсивный, главным образом из-за выражений парсера и парсинга #include.

От парсинга до выпуска

При парсинге кода соответствующий AST создается, чтобы представлять программу. AST используется, чтобы представлять исполняемый код, но также и для того, чтобы содержать временные выражения, например значения констант или инициализаторов описаний типа или описаний процедуры , найденных при парсинге . AST не содержит узлы для конструкций потока кода как, IF, DO/LOOP, GOTO, RETURN, EXIT DO, и т.д., но содержит метки и ответвления. Аналогично, несколько операций (как IIF (), ANDALSO, ORELSE, разыменовывание полей, задействованный доступ) заменены соответствующим набором операций низшего уровня в AST.

После парсинга, функции AST для этой функции оптимизированы, и затем выпущены рекурсивно через запросы astLoad*() к каждому узлу от вершины вниз. Обратите внимание на то, что у каждого узла AST есть своя собственная реализация astLoad ().