Здравствуйте, WolfHound, Вы писали:
WH>В данном случае у нас первый IndentDec должен закрыть два IndentInc. А второй 3. WH>Это в нашу таблицу не записать никак.
А там не одинарные IndentDec'и, а несколько идущих подряд — как в примере выше:
Здравствуйте, WolfHound, Вы писали:
WH>В данном случае у нас первый IndentDec должен закрыть два IndentInc. А второй 3. WH>Это в нашу таблицу не записать никак.
Я же тебе говорил, что левая рекурсия получается.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Nitra] Парсинг языков базирующихся на отсупах
Здравствуйте, VladD2, Вы писали:
WH>> Не левая. И не рекурсия. VD>Результат тот же. Ты не можешь записать инфу о парсеинге одного и того же правила с одной позиции.
Не тот же. В данном случае даже в структуры Эрли парсера нельзя записать эту информацию.
При этом если добавить отдельный лексер или изменить строку, то и основной парсер справится с этой задачей.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: [Nitra] Парсинг языков базирующихся на отсупах
Здравствуйте, damir, Вы писали:
D>VladD2, есть ли новости по теме ?
По поводу поддержки отступных грамматик ничего не делалось, к сожалению. Единственное, что можно попробовать самому в режиме препроцессора парсить. Первым проходом вставить символы заменяющие скобки, а далее уже парсить результат. Потом, правда придется скорректировать позиции сообщений локейшонов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: [Nitra] Парсинг языков базирующихся на отсупах
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Как я понимаю, если парсеры Nemerle/Nitra настолько же мощны — то тоже должно получиться.
Все с точностью до наоборот. Чем мощнее алгоритмы, тем они хуже могут передавать состояние. Этот отступ нужно при каждом откате восстанавливать. Если у нас чистый LL(k) с этим проблем нет. Если обобщенный алгоритм, то это становится серьезной проблемой.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: [Nitra] Парсинг языков базирующихся на отсупах
Experiments on a Haskell parser using this formalism show that the parser runs between one and three times slower than a parser using traditional ad hoc techniques for handling indentation sensitivity.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: [Nitra] Парсинг языков базирующихся на отсупах
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Виртуальные скобки это просто виртуальный view оригинального текста, и через призму этого view видно текст со вставленными скобками (которые вообще не входят в оригинальный набор символов), хотя никаких inplace изменений не было. EP>В терминах C++ STL просто нужен адаптер для итератора, и никаких изменений в коде парсера
Согласен. Но не все так просто. Сквозь эту "призму" нужно пропускать много чего. Причем в обе стороны. Нужно сделать преобразование локейшонов по некой таблице виртуальных скобок.
Еще Нитра использует алгоритм которому нежен индексированный доступ. Причем максимально эффективный. Так что "виртуальный вью" здесь не подойдет. Придется материализовать его в строку. А вот локейшоны можно преобразовывать туда-сюда с помощью таблицы соответствий.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.