Re[18]: Опциональные типы
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.02.17 02:24
Оценка: +1
Здравствуйте, vdimas, Вы писали:

F>>Но по голому факту: мэйнстрим фронты используют ужаснейший recursice descent.


V>Это просто декомпозиция грамматик.


V>Очевиднейший пример такой декомпозиции: лексер+парсер.

V>Лексер всегда работает по восходящей грамматике, а парсер может работать по любой — восходящей, нисходящей или гибридной (есть и такие алгоритмы, угу).

V>recursice descent в этом смысле — это декомпозиция грамматики на несколько НЕЗАВИСИМЫХ областей.


Слушай, не нельзя такой бред нести на публике. "recursice descent" — это алгоритм. Лексер работает по регулярной грамматике, которая тупо переписывается в ДКА. Никаких рекурсий в лексере нет! Там тупое чтение по автомату.

Где ты такую кашу в мозг заложил то?

V>Простой пример: нет смысла парсить вычисления формул в синтаксисе объявлении класса или заголовков методов в C#. А вот внутри тел методов — есть, но зато внутри тел методов нельзя объявлять другие классы, поэтому эта часть грамматики внутри тел методов НЕ нужна. Вот тебе и декомпозиция.


Как этой банальностью можно оправдать заявление о том, что "recursice descent" — это не алгоритм, а способ декомпозиции?

Что ты несешь?

Что касается парсинга классов внутри методов, то в С++ именно так и происходит, а выражения встречаются в разных инициализаторах полей и конструкторах, которые тоже на топлевеле.

И вообще зачем парсеру какая-то декомпозиия, когда правила явно ссылаются друг на друга? Если правило не сослалось на другое, то оно его и не использует.

"recursice descent" — это просто самый быстрый и простой для ручной реализации алгоритм парсинга для однозначных грамматик. Проблес с ним масса. Но кода ты пишешь парсер руками — это самый логичный выбор.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.