Блог программиста

Cj. Двухпроходный парсер

Решили реализовать двухпроходный парсер. Что это такое и зачем это надо? Читайте далее...

Рассмотрим пример №10 на языке Cj (ссылка на Гитхаб: https://github.com/sitev/cj/tree/master/examples/10_webapp_shop). А конкретнее, файл проектов shop.pcj:

project = Project {
	sources: [ "shop.cj" ],
	includes: [],
	namespace: "cms",
	generator: CppGen
}

Итак, мы указываем список файлов проекта в sources.

Концеция языка Cj отказывается от подключения файлов в исходниках, такой конструкции #include "file.h" не будет. Если файл находится в проекте (то есть в списке sources), то каждый файл проекта должен знать о информации, расположенной в других файлах проекта.

В языке С++ могут применяются прототипы функций:

void func2();

void func1() {
	...
	func2();
	...
}

void func2() {
	...
}

или прототипы классов:

class Class2;

class Class1 {
	...
	Class2 *c2;
	...
};

clas Class2 {
	...
};

В языке Cj мы идём по пути отказа от прототипов.

В языке Cj не будет ни инклудов, ни прототипов. Круто! Ура! Давно бы так! ))

Для этого напишем двухпроходный парсер. Как он будет работать?

Всё просто.

Первым проходом мы собирает всю возможную информацию. Если парсер не смог собрать полную картину, запускаем второй проход. Этим проходом мы уже должны получить полную картину. Если это не так - значит ошибка.

Сейчас сосредоточимся на реализации двухпроходного парсера. Пока данная задача не будет реализована, что-то дальше каким-то образом развивать Cj имеет смысла.


Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Наши проекты
Контакты