![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
smartchecker |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 83 Регистрация: 7.9.2011 Пользователь №: 2853 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Грамматика выглядит так:
Допустимые лексемы языка - Идентификаторы и hex-числа. Не могу сочинить правила для парсера. Правила для лексера.
Конечная задача - сделать дерево вывода. Сообщение отредактировал smartchecker - 21.12.2012, 15:55 |
|
|
Iron Bug |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
парсер от лексера ничем не отличается, по сути. просто лексемы - более простые элементы. а парсер работает не с символами, а уже с лексемами.
если тебе нужно дерево, то копай в сторону ANTLR AST (abstract syntax tree): http://www.antlr.org/wiki/display/ANTLR3/Tree+construction то есть, он сам умеет эти деревья строить. и потом остаётся их только заюзать. генерится дерево точно так же, из парсера. там пара параметров указывается в заголовках, что нужно на выходе дерево выдать и после создания парсера в программе ещё вызываются команды для создания дерева. это всё есть в документации подробно, я пару раз работала с деревьями, это элементарно, просто мне редко нужно и нет смысла всё это запоминать. на сайте есть отличная документация, с примерами. по сути, если ты будешь просто выводить найденные элементы при разборе выражения, то ты и получишь дерево. но для удобства можно сразу дерево получить. можно их даже комбинировать, проходя по дереву второй раз с каким-то новым парсером и т.д. |
|
|
smartchecker |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 83 Регистрация: 7.9.2011 Пользователь №: 2853 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Про генерацию дерева я прочитал.
У меня с правилами проблема. Я туплю. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 27.2.2025, 13:44 |