OberonCore
https://forum.oberoncore.ru/

Детерминированность лексики Оберона
https://forum.oberoncore.ru/viewtopic.php?f=61&t=2279
Страница 1 из 9

Автор:  igor [ Вторник, 26 Январь, 2010 10:31 ]
Заголовок сообщения:  Детерминированность лексики Оберона

Выделено: viewtopic.php?p=41049#p41049

2Galkov: Для того, чтобы дальнейший разговор имел смысл, мы обязательно должны прийти к консенсусу по следующему принципиальному вопросу:
igor писал(а):
И сканер, и парсер во всех Оберонах работают с детерминированным синтаксисом.
Galkov писал(а):
Вот и славненько. Только лексика Оберонов, являясь регулярной, не является детерминированной
И так. Детерминированная ли лексика у Оберонов?

Предлагаю Вашему вниманию (и всем желающим) файл, который я специально подготовил для Вас.

Предлагаю Вам проделать следующее:
1. Внимательно изучите вложенный файл (одна страничка).
2. Откройте "Построение компиляторов" Вирта на странице 29 (где перечисленны три условия детерминированности синтаксиса).
3. Натыкайте меня носом :) в то место в моём файле, из которого следует, что хотя бы одно условие детерминированности нарушено.

Замечу, что этот пример (лексика урезанного Оберон-0) отличается от других Оберонов только количественно, но не качественно. Результат нашего исследования можно будет распространить на всю линейку Оберонов.

Виртовские продукции я немного изменил и дополнил с поправкой на Вашу дотошность. То есть постарался изгнать из описания "здравый смысл" и интуицию :D

Вложения:
Лексика.pdf [75.06 КБ]
Скачиваний: 635

Автор:  Peter Almazov [ Вторник, 26 Январь, 2010 11:02 ]
Заголовок сообщения:  Re: Лексические тонкости Оберонов

Код:
comment = “(*” {sym} “*)”.
Это неверно, комментарии могут быть вложенными.

Автор:  Galkov [ Вторник, 26 Январь, 2010 12:06 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Это неверно и без вложенности...
igor, вечером сделаю аккуратненький и полный разбор полета. Ибо с собой на работу книжку не взял

Автор:  igor [ Вторник, 26 Январь, 2010 12:49 ]
Заголовок сообщения:  Re: Лексические тонкости Оберонов

Peter Almazov писал(а):
Код:
comment = “(*” {sym} “*)”.
Это неверно, комментарии могут быть вложенными.
В каком языке?

Автор:  igor [ Вторник, 26 Январь, 2010 12:58 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Galkov писал(а):
igor, вечером сделаю аккуратненький и полный разбор полета.
Можно не торопиться. Если что, я подожду.
Главное, разбор полёта должен быть качественным :) .

Автор:  Peter Almazov [ Вторник, 26 Январь, 2010 13:22 ]
Заголовок сообщения:  Re: Лексические тонкости Оберонов

igor писал(а):
Peter Almazov писал(а):
Код:
comment = “(*” {sym} “*)”.
Это неверно, комментарии могут быть вложенными.
В каком языке?
В Oberon-0. Ну, и всех остальных Оберонах и КП.

Автор:  igor [ Вторник, 26 Январь, 2010 18:32 ]
Заголовок сообщения:  Re: Лексические тонкости Оберонов

Peter Almazov писал(а):
igor писал(а):
В каком языке?
В Oberon-0. Ну, и всех остальных Оберонах и КП.
Мой пример относится к подмножеству языка Оберон-0. Об этом сказано в первой же строке моего файла. И в этом моём учебном языке нет вложенных комментариев, так как я сам определил.

Можно было бы определить вложенные комментарии. Но это усложнило бы пример, но не приблизило бы нас к разрешению спора. Потому что комментарии не являются лексемами, а спор касался именно лексики языка.

Автор:  Peter Almazov [ Вторник, 26 Январь, 2010 18:54 ]
Заголовок сообщения:  Re: Лексические тонкости Оберонов

igor писал(а):
Потому что комментарии не являются лексемами, а спор касался именно лексики языка.
А зачем тогда писать это:
lexeme = (ident | number | string | “(” | “)” | “:=” | “*”) {blank | comment}.

Автор:  igor [ Вторник, 26 Январь, 2010 19:06 ]
Заголовок сообщения:  Re: Лексические тонкости Оберонов

Peter Almazov писал(а):
А зачем тогда писать это: ...
"Это" означает, что нетерминал lexeme обозначает саму лексему, а также разделитель, который может отделять следующую лексему от текущей.

Для того, чтобы понять, что комментарий не может быть лексемой, можете применить такие рассуждения. Лексемы по определению не могут быть вложенными, а комментарии (в принципе) могут. Значит комментарии - это не лексемы.

Автор:  Peter Almazov [ Вторник, 26 Январь, 2010 19:31 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Зря вы этот кусок добавили: {blank | comment}

Автор:  igor [ Вторник, 26 Январь, 2010 20:19 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Peter Almazov писал(а):
Зря вы этот кусок добавили: {blank | comment}
Нет, не зря. Он имеет прямое отношение к третьему условию детерминированности синтаксиса (по Вирту).

Автор:  Peter Almazov [ Вторник, 26 Январь, 2010 20:28 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Ну давайте чисто формально распишем, например:
lexeme = ident
lexeme = ident blank
lexeme = ident blank comment
lexeme = ident blank comment blank blank blank blank blank blank blank blank blank blank blank comment
Вам это нравится?

Автор:  igor [ Вторник, 26 Январь, 2010 21:02 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Peter Almazov писал(а):
Вам это нравится?
Да, очень :) . Между лексемами может быть произвольное число (включая ноль) пробельных символов и (или) комментариев.
Без куска {blank | comment} синтаксис был бы недетерминированным, из-за нарушения третьего условия.

Приведу пример. Допустим, в тексте следуют друг за другом две лексемы: "name" и "56". Если убрать {blank | comment}, то Вы сможете их записать только так: ...name56...
Как по Вашему сканер должен понять что это две лексемы "name" и "56", а не одна лексема "name56"? Пробельный символ между "name" и "56" устраняет неопределённость, делает синтаксис детерминированным. Теперь Вы можете писать любые из лексем "name", "56" и "name56", и сканер не запутается.

Автор:  Peter Almazov [ Вторник, 26 Январь, 2010 21:19 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Так в том-то и дело, что "Между лексемами". А написано:
lexeme = ident blank comment blank blank blank blank blank blank blank blank blank blank blank comment
т.е.,
лексема равна <бред>

Автор:  igor [ Среда, 27 Январь, 2010 09:19 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Peter Almazov писал(а):
... лексема равна <бред>
Не пытайтесь искать глубокий смысл в нетерминале lexeme. Это чисто формальная запись.

Я мог бы вместо "lexeme = ..." написать "blabla = ...". И это был бы тот же самый язык! Полностью эквивалентный исходному.

Смыслом синтаксических конструкций заведует другая часть языка - семантика. В этой теме мы не рассматриваем семантику синтаксических конструкций.

Синтаксис описывает формальный язык. Формальные языки лишены смысла :!:

Автор:  Peter Almazov [ Среда, 27 Январь, 2010 10:10 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

igor писал(а):
Я мог бы вместо "lexeme = ..." написать "blabla = ...".
Я разочарован.

Автор:  igor [ Среда, 27 Январь, 2010 10:24 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Peter Almazov писал(а):
Я разочарован.
Сочувствую :) . Но я бы мог Вам подсказать как вернуться к жизни.
Попробуйте написать лексический анализатор, но только без {blank | comment}.
Желаю удачи!

Автор:  Valery Solovey [ Среда, 27 Январь, 2010 15:35 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

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

Пробел в формулу не входит, значит при построении идентификатора использовать его нельзя. Значит, лексический анализатор, наткнувшись на пробел, будет знать, что этот символ не является частью текущей лексемы. Значит, текущая лексема закончилась.

P.S. Если формальные языки лишены смысла, то их использование и результат их использования тоже лишены смысла.

Автор:  Galkov [ Среда, 27 Январь, 2010 15:57 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Valery Solovey писал(а):
Значит, лексический анализатор, наткнувшись на пробел, будет знать, что этот символ не является частью текущей лексемы. Значит, текущая лексема закончилась
А если не наткнулся :?: :lol:

Автор:  Valery Solovey [ Среда, 27 Январь, 2010 16:23 ]
Заголовок сообщения:  Re: Строгое определение лексики Оберона

Не понял.

Если символ в правиле не описан, значит текущая лексема закончилась. Если символ в правиле описан, значит обрабатываем продолжаем искать конец.

Страница 1 из 9 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/