![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
PenDaLegi |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.12.2010 Где: Москва Репутация: нет Всего: нет |
Всем доброго времени суток!
Используя ANTLR пытаюсь разработать лексер (для начала только лексер) для подсветки синтаксиса. Столкнулся с такой бедой. После генерации лексера почти все работает так как нужно, однако как только ввожу символы многострочного комментария валится экзепшн. Ниже определение комментариев в граммере:
Все это добро разрабатывается, как модуль к NetBeans. Вот вырезка кода лексера
Проблема, насколько мне удалось понять, связана с тем, что лексер фиксирует начало комментария, но не может найти его конец. в результате валится экзепшн:
При попытке ввести сочетание "(*" вот в этом коде
Если же предварительно где-то ввести символы закрывающие многострочный комментарий, то ошибки не возникает Ну а вопрос в том, можно ли как-то изменить определение многострочного комментария в граммере ANTLR чтобы не писать код обработки в классе лексера. Пересмотрел много буржуйных ресурсов, однако так и не удалось найти конкретного решения этой проблемы. Надеюсь, хотя и не сильно, что кто-то сталкивался с подобной ошибкой при разработкой синтаксических анализаторов используя ANTLR =) |
||||||||||
|
|||||||||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
глянь на определение для COMMENT_1/2 в pascal.g : http://www.antlr.org/grammar/1279217060704/pascal3.zip
Это сообщение отредактировал(а) dobrolub - 14.12.2010, 23:19 |
|||
|
||||
PenDaLegi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.12.2010 Где: Москва Репутация: нет Всего: нет |
Это уже пробовал =( Кроме того нынешняя мода ANTLR говорит что такие описания комментариев уже устарели вот тут
В выше приведенном мною примере убраны дополнительные опции. Но я пробовал всячески, пока для всех вариантов исход один и тот же - падает исключение. Проблему удалось временно решить доработав код лексера, но, на мой взгляд решение не очень правильное. Правильнее было бы корректно определить комментарии именно в граммере. Ниже используемая заглушка:
PS. Собственно вот тут есть туториал как добавить поддержку нового языка. Изначально код брал там. Это сообщение отредактировал(а) PenDaLegi - 15.12.2010, 00:06 |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
|
|||
|
||||
aleksandy |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 4 Всего: 5 |
Не знаю поможет или нет, но такой регэксп не учитывает много нюансов.
Вот так можно найти pascal-style комментарии.
Монстра взял из книжки Дж.Фридла "Регулярные выражения" Это сообщение отредактировал(а) aleksandy - 15.12.2010, 08:46 |
||||
|
|||||
PenDaLegi |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.12.2010 Где: Москва Репутация: нет Всего: нет |
aleksandy: спасибо, очень даже пригодится Добавлено через 4 минуты и 3 секунды
Да, определение данного токена не фиксирует конца кооментария. Лексер ищет символы конца комментария "*)" натыкается на EOF и вместо токена комментария регистрируется токен конца файла. |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |