Название: QLALR Отправлено: SABROG от Май 17, 2009, 11:43 Увидел, что используя эту утилиту можно сгенерить парсер для xml файлов. Но встал вопрос с пониманием этой штуки.
Как я понял, правила для парсинга задаются в .g файле, который потом прогоняется утилитой qlalr и на выходе мы должны получить готовый исходник (.cpp) парсера xml. Правильно? Или qlalr может автоматический создать xml парсер для любого формата xml'я? И в некоторое замешательство меня привел такой кусок из примера dummy-xml: Код
Т.е. тут вообще не используется модуль QtXml, а разбор идет по-тексту... Может кто-нибудь подробней объяснить предназначение этой утилиты? Название: Re: QLALR Отправлено: lit-uriy от Май 17, 2009, 12:30 Я как-то тоже в неё сунулся, но снаскоку не понял. В лаборатории тролей написано, что руководство надо читать по оригинальной софтине, т.е. Lalr
Название: Re: QLALR Отправлено: SABROG от Май 17, 2009, 12:39 Я так понял это вообще алгоритм так называется. Пытался найти документацию, но что-то безуспешно. Рунет похоже вообще мало что о нем знает.
--- Хотя нет, знает. Но все абстрактно и поверхностно. А это вообще очень полезно: Цитировать -Как познакомиться с девушкой (советы хакера)- Не стоит начинать с демонстрации своих успехов в области построения таблиц для LALR(1)-компилятора - это понятно не всем девушкам. Для начала лучше ограничиться спокойными занятиями типа игры в "Lines" ("Шарики"). Можно показать, как вы разогнали свой Word и как он теперь не только исправляет ошибки, но и дописывает слова в процессе ввода. Совершенно исключен "Doom", так как даже самой терпеливой девушке уже после двух часов обычно надоедает смотреть, как вы в него играете, и после окончания уровня вас может ждать сюрприз похлеще босса - соседний стул окажется пуст. Во время игры в "Lines" несколько раз, как бы случайно, проведите мышкой не по столу, а по ее руке. Когда девушка привыкнет, замените мышку своей рукой. Далее обычно применяется нисходящий разбор с возвратами, неоднократно доказавший свою эффективность. После его окончания, когда у нее заблестят глаза и зарумянятся щеки, приступайте наконец к кульминационному моменту, ради которого, собственно, вы это все и затевали, - "Тетрису" в четыре руки! Название: Re: QLALR Отправлено: Rcus от Май 17, 2009, 12:46 Про LALR обычно рассказывают на 3-4 курсе, предмет "Теория языков программирования и методов трансляции" :)
Поскольку вспоминать это не хочется могу посоветовать Dragon Book (http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools#Second_edition), этой книгой можно убить (без шуток), но там полюбому есть нужная глава. :) А еще можно курить доки по flex/lex и bison/yacc ADD: Все же спрошу, чем не угодил QtXml и QXmlStreamReader? Название: Re: QLALR Отправлено: SABROG от Май 17, 2009, 12:53 Юр, как же так? http://www.forum.crossplatform.ru/index.php?showtopic=8
Сцылко не работаит :( -- Нашел http://horna.org.ua/books/compilers/Aho%20-%20compilers.djvu -- Rcus, ну дык погоня за скоростью, весом, автоматизацией, знаниями. А то как-то не правильно иметь папку utils в исходниках Qt и не понимать для чего там программы нужны. Название: Re: QLALR Отправлено: lit-uriy от Май 17, 2009, 13:28 >>Юр, как же так?
А я её не читал, она большая и в электронном виде. Я большие книги читаю только в бумажном. >>А то как-то не правильно иметь папку utils в исходниках Qt и не понимать для чего там программы нужны. помоему троли QLALR используют для создания парсера QtScript, где-то я такое читал. Название: Re: QLALR Отправлено: SABROG от Май 17, 2009, 14:44 Почитал я книжечку. Все-равно, что читать книгу на неизвестном тебе языке. Формулы какие-то, символы с закорючками, слова незнакомые с которыми ничего в мозгу не ассоциировано. Пример калькулятор даже понять не смог.
.g файл походу вообще самопридуманный Qtшниками. Из его структуры ничего не понятно. Например те же %decl, %impl, %parser. Название: Re: QLALR Отправлено: drsm от Май 19, 2009, 19:43 Синтаксический анализ (http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80)
LR-анализатор (http://ru.wikipedia.org/wiki/LR-%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80) LALR parser (http://en.wikipedia.org/wiki/LALR) |