OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 23:14

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 180 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 26 Январь, 2010 10:31 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Выделено: viewtopic.php?p=41049#p41049

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

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

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

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

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


Вложения:
Лексика.pdf [75.06 КБ]
Скачиваний: 635
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Лексические тонкости Оберонов
СообщениеДобавлено: Вторник, 26 Январь, 2010 11:02 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Код:
comment = “(*” {sym} “*)”.
Это неверно, комментарии могут быть вложенными.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 12:06 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Это неверно и без вложенности...
igor, вечером сделаю аккуратненький и полный разбор полета. Ибо с собой на работу книжку не взял


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Лексические тонкости Оберонов
СообщениеДобавлено: Вторник, 26 Январь, 2010 12:49 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 12:58 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Galkov писал(а):
igor, вечером сделаю аккуратненький и полный разбор полета.
Можно не торопиться. Если что, я подожду.
Главное, разбор полёта должен быть качественным :) .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Лексические тонкости Оберонов
СообщениеДобавлено: Вторник, 26 Январь, 2010 13:22 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Лексические тонкости Оберонов
СообщениеДобавлено: Вторник, 26 Январь, 2010 18:32 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Лексические тонкости Оберонов
СообщениеДобавлено: Вторник, 26 Январь, 2010 18:54 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
igor писал(а):
Потому что комментарии не являются лексемами, а спор касался именно лексики языка.
А зачем тогда писать это:
lexeme = (ident | number | string | “(” | “)” | “:=” | “*”) {blank | comment}.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Лексические тонкости Оберонов
СообщениеДобавлено: Вторник, 26 Январь, 2010 19:06 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Peter Almazov писал(а):
А зачем тогда писать это: ...
"Это" означает, что нетерминал lexeme обозначает саму лексему, а также разделитель, который может отделять следующую лексему от текущей.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 19:31 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Зря вы этот кусок добавили: {blank | comment}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 20:19 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 20:28 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Ну давайте чисто формально распишем, например:
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
Вам это нравится?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 21:02 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 21:19 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Так в том-то и дело, что "Между лексемами". А написано:
lexeme = ident blank comment blank blank blank blank blank blank blank blank blank blank blank comment
т.е.,
лексема равна <бред>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 09:19 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Peter Almazov писал(а):
... лексема равна <бред>
Не пытайтесь искать глубокий смысл в нетерминале lexeme. Это чисто формальная запись.

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 10:10 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
igor писал(а):
Я мог бы вместо "lexeme = ..." написать "blabla = ...".
Я разочарован.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 10:24 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 15:35 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
У Вас в формуле, описывающей идентификатор (к примеру), указывается набор допустимых символов для порождающей грамматики. То есть, с помощью формулы можно получить множество идентификаторов. Полное множество. Без лишних объектов, которые не являются идентификаторами.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 15:57 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 16:23 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Не понял.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 180 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB