Грамматика разделения и атрибуты грамматики (процедурное поколение зданий)

Я пытаюсь реализовать алгоритм для процедурной генерации зданий для моей диссертации. Я много читал о грамматике формы / разбиения. Вот ссылка на самую популярную статью, посвященную этой теме.
Мне удалось реализовать очень простую грамматику без атрибутов и охранных условий. Он может генерировать примитивы и выполнять геометрические преобразования. Я использую flex и bison для анализа файлов грамматики формы и создания объектов (символов, правил и т. Д.), Которые представляют данную грамматику объектно-ориентированным способом, который впоследствии может быть вызван для создания геометрии.
Но теперь я застрял с частью атрибута. Например:

fac(h) : h > 9; floor(h/3) floor(h/3) floor(h/3)   

Я не знаю, как представлять грамматику, содержащую информацию об атрибутах, как передавать значения в символы слева и как оценивать условие.
Кто-нибудь может мне помочь с этим, пожалуйста? Я использую C++.

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

0 ответов

Другие вопросы по тегам