Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2013-11-11 21:57:12 ЛС | профиль | цитата
Дык, собственно, все текстовые языки программирования занимаются очень похожей фигней...
Есть входной длинный текст из буковок, и они на этапе лексического анализа разбивают его совершенно однозначно на логические фрагменты, называемые лексемами.
Далее есть разница: ЯВУ передают эти лексемы на синтаксический анализ, а мы (к примеру) делаем "замены"

Наверное, можно предположить, что эти правила однозначного разбиения являются неким стандартом. Потому что вообще все ЯВУ так делают де-факто (может быть кроме фортрана и форта - эти языки появились исторически вообще раньше понятия лексический анализ)

А про правила я уже говорил. Левая часть является определением лексемы (в ЯВУ там стоит более общее регулярное выражение), и выбирается лексема МАКСИМАЛЬНОЙ длины (т.е., для ELSEIF стопудово принимается именно он, а не ELSE). При одинаковой длине лексем (в нашем упрощенном случае - совершенно не актуально) - первый в списке.

Если исходить из этих правил, тогда 153215 -> (153)2(15) -> Тьма2Мало
Смотрится не очень умно... Дык и конкретные "определения лексем" особо умными не назовешь.
Но на абсолютно любой бред всегда есть совершенно однозначный ответ.

BTW: обычно в описаниях ЯВУ лексический анализ (в отличие от синтаксиса) сопровождают кучей словесной шелухи... А вот в стандарте C – правило «самой длинной лексемы» написано прямым текстом.
карма: 9

0