LR
От: Adopt  
Дата: 02.01.06 23:09
Оценка:
Добрый день,

Подскажите где можно взять исходники LR(0) — SLR анализаторов на C++/C#/Java (желательно из dragon book)
или статьи, туториалы о их создании
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: LR
От: Ижиков Николай Владимирович Россия  
Дата: 03.01.06 19:26
Оценка:
http://java-source.net/open-source/parser-generators/antlr
Re[2]: LR
От: Adopt  
Дата: 03.01.06 23:13
Оценка:
Здравствуйте, Ижиков Николай Владимирович, Вы писали:

ИНВ>http://java-source.net/open-source/parser-generators/antlr


LL(k) грамматики
а мне нужны LR(0)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: LR
От: mefrill Россия  
Дата: 04.01.06 12:03
Оценка: 3 (1)
Здравствуйте, 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-состояния. Это будут просто алгоритмы над вектором правил и списками помеченных правил. Все это несложно, но чтобы разобраться надо раз самому сделать.
Re[2]: LR
От: Adopt  
Дата: 04.01.06 23:05
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Здравствуйте, Adopt, Вы писали:


A>>Подскажите где можно взять исходники LR(0) — SLR анализаторов на C++/C#/Java (желательно из dragon book)

A>>или статьи, туториалы о их создании

M>Поищи здесь. Что-нибудь должно найтись. А вообще, лучше взять книжку УхоАльмана и реализовать самому напрямую.


А где можно ее взять в электронном виде?
google молчит...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: LR
От: mefrill Россия  
Дата: 05.01.06 06:45
Оценка:
Здравствуйте, Adopt, Вы писали:

A>А где можно ее взять в электронном виде?

A>google молчит...

Я тоже не зняю. Но вот здесь фактически лежит ее краткое изложение. Так что вполне можно учиться по этой книжке.
Re[3]: LR
От: the_void Швейцария  
Дата: 05.01.06 09:50
Оценка: 6 (1)
Здравствуйте, Adopt, Вы писали:

M>>Поищи здесь. Что-нибудь должно найтись. А вообще, лучше взять книжку УхоАльмана и реализовать самому напрямую.


A>А где можно ее взять в электронном виде?

A>google молчит...

Полное название книги: "Компиляторы. Принципы, технологии, инструменты" (Ахо, Сети, Ульман). Google выдает то, что нужно, на первой странице.
... << RSDN@Home 1.1.4 stable rev. 510>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.