Добрый день,
Подскажите где можно взять исходники LR(0) — SLR анализаторов на C++/C#/Java (желательно из dragon book)
или статьи, туториалы о их создании
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Ижиков Николай Владимирович, Вы писали:
ИНВ>http://java-source.net/open-source/parser-generators/antlr
LL(k) грамматики
а мне нужны LR(0)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Adopt, Вы писали:
A>Подскажите где можно взять исходники LR(0) — SLR анализаторов на C++/C#/Java (желательно из dragon book)
A>или статьи, туториалы о их создании
Поищи
здесь. Что-нибудь должно найтись. А вообще, лучше взять книжку УхоАльмана и реализовать самому напрямую. Что там такого сложного? Основная структура — это помеченное правило, т.е. правило грамматики с точкой в правой части. Учитывая, что все правила грамматики пронумерованы, имеем двойку <номер правила, номер позиции точки в правой части>. Итак, struct item{ unsigned int rule_num_, point_pos_;};. Далее, LR-состояние — это просто набор таких вот помеченных правил. Можно реализовать в виде списка, список сам сможешь написать? И грамматику лучше представлять как три вектора (массива): вектор нетерминальных символов (каждый элемент вектора — это просто указатель на строку — имя нетерминала), вектор терминальных символов и вектор правил грамматики. Вектор правил можно закодировать так: сначала идет номер номер нетерминала в левой части правила, затем идут номера символов правой части правила и затем, например, -1, чтобы отличить номер символа (это индекс, он всегда положительный) от конца правила. Конечно, надо как-то отличать нетерминалы от терминалов. Самое простое (и не очень эффективное) решение, это просто ввести дополнительный флаг — признак того, нетерминал это или нет. Типа такого: struct symbol{ int sym_num_; bool is_terminal_;} И вектор правил: symbol rules[(num_of_rules+1)*num_of_symbols]. Заполняешь сначала грамматику, затем заполняешь LR-состояния. Это будут просто алгоритмы над вектором правил и списками помеченных правил. Все это несложно, но чтобы разобраться надо раз самому сделать.
Здравствуйте, mefrill, Вы писали:
M>Здравствуйте, Adopt, Вы писали:
A>>Подскажите где можно взять исходники LR(0) — SLR анализаторов на C++/C#/Java (желательно из dragon book)
A>>или статьи, туториалы о их создании
M>Поищи здесь. Что-нибудь должно найтись. А вообще, лучше взять книжку УхоАльмана и реализовать самому напрямую.
А где можно ее взять в электронном виде?
google молчит...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Adopt, Вы писали:
A>А где можно ее взять в электронном виде?
A>google молчит...
Я тоже не зняю. Но вот
здесь фактически лежит ее краткое изложение. Так что вполне можно учиться по этой книжке.
Здравствуйте, Adopt, Вы писали:
M>>Поищи здесь. Что-нибудь должно найтись. А вообще, лучше взять книжку УхоАльмана и реализовать самому напрямую.
A>А где можно ее взять в электронном виде?
A>google молчит...
Полное название книги: "Компиляторы. Принципы, технологии, инструменты" (Ахо, Сети, Ульман). Google выдает то, что нужно, на первой странице.
... << RSDN@Home 1.1.4 stable rev. 510>>