OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: Четверг, 25 Март, 2010 08:57 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Евгений Темиргалеев писал(а):
В Coco/R сканер определяется декларативно
Увы, не понял

Евгений Темиргалеев писал(а):
Лексема=регулярное выражение;
За это никто не спорит.
Регулярное выражение - математически точное понятие. Интерпретатор этого регулярного выражения - тоже математически точен (и это вовсе не код, например для "числа", который приводится в букварях).
Но дело в том, что нас не устраивает этот интерпретатор в качестве сканера. Нам нужен некий демон, который после каждого символа в исходнике, анализирует состояние интерпретатора регулярных выражений, и принимает решение по результатам (например, говорит интерпретатору Reset, посылает сообщение парсеру с конкретным токеном, и т.п.). Должностная инструкция для этого демона - и мы дали определение сканеру. Которое математически не выводится.
И, следовательно, приходится наблюдать жизнь, чтобы написать адекватную инструкцию.
И писать это инструкцию лучше по правилу "make it simple as possible, but not simpler".

Евгений Темиргалеев писал(а):
комментарий=особая конструкция, т.к. регулярным выражением невложенный комментарий описать сложно, вложенный невозможно
Угу.
Если захочется сделать строки в C-стиле - тоже будет невозможно. Поэтому сначала спросим "а надо ли...", и если деваться будет уж некуда - введем еще одну особую конструкцию.
Вот в том же языке Coco понадобился ArbitraryText, ввели особую конструкцию - ANY в режиме парсера. А куда деваться-то.
Между прочим, это ведь все "наблюдения за жизнью". А в ней еще столько такого...

Евгений Темиргалеев писал(а):
Если я Вас понял, такое положение дел Вас не устраивает
Если сказать точнее, меня шокирует несоответствие между потерянными возможностями, и не очень большими трудозатратами по их восстановлению.
Если говорить образно, то на нашем мопеде при сборке потеряли блочек регулировки угла зажигания в зависимости от скорости. И начали лепить всякие довески (особые конструкции), чтобы его езда хоть как-то соответствовала практическим потребностям.
Мое предложение - выкинуть все эти "навески", и поставить штатный блок регулировки угла зажигания (да, в зависимости от скорости).
Не, делать Харлея не предлагается. Он и так будет вдвое быстрее ездить. Будет.

Евгений Темиргалеев писал(а):
И сделает описание сканера более сложным, т.к. действия пользователь должен описать сам.
Побойтесь бога, Евгений :!:
Вот "описать сам" он может целый компилятор, а комментарий от него - уже непосильная задача, так что ли ???
Дельфячий комментарий - это одноходовая шахматная задача. Более сложные (Оберон, C...) - двухходовая.
Предлагается дать возможность пользователю решать задачи на любое количество ходов, а не считать его настолько тупым, что более чем одноходовка - "особая конструкция", его пониманию недоступная.
Насчет сложности - ВСЕ НАОБОРОТ.
Чем больше сущностей - тем больше вопросов возникает про их взаимодействие.
Например: если у меня два вложенных комментария, то вкладывают ли они друг-друга ???
А если я заменю литерал на эквивалентное определение: lexBEG = "BEGIN". - чего будет (у меня, вообще-то, просто падает нафиг - так что все равно разбираться) ???
А если с символа из IGNORE начинается лексема ??? а если этот символ в середине ??? а почему ???
Да только начни копаться, вопросов будет - мало не покажется
Потому-что это закон природы такой: больше сущностей - больше заморочек.
А я предлагаю (в смысле - пытаюсь) схему, в которой на все вопросы уже дан ответ - в приведенной выше цитате "How the input is matched"

Евгений Темиргалеев писал(а):
Почему же автор не сделал так?
Не знаю.
Может - шибко давно это было, может еще почему.
А все магические слова по простоту - это про парсер. Ну и ладно, пусть это будет сверх-простой рекурсивный сверху.
Правда, я бы "семантический хак" заменил на некое служебное слово... Типа SELECT(. BooleanExpression .)... Но это - после.

Евгений Темиргалеев писал(а):
Coco/R - инструмент для создания компилятора ЯП, не сканера.
Но сканер он создает.
Отдельным модулем (правда, не совсем). С точным интерфейсом.
Евгений, элементарная же вещь: помните ошибки в автоматном комментарии? Ну так пусть Инструмент создаст эти злосчастные три состояния.
Без ошибок. А мы, со своей стороны, без ошибок напишем для этого три патерна из одного-двух символов. Не, это не будет для нас сложно :)

Евгений Темиргалеев писал(а):
Вы называете лишними для определения сканера сущности

CHARACTERS множества литер алфавита регулярных грамматик токенов
TOKENS нелитеральные терминалы грамматики парсера
COMMENTS комментарии
IGNORE множества игнорируемых литер
PRAGMAS обычно, особые указания компилятору

Насколько эти сущности излишни для определения языка программирования?
Скажем так:
1) CHARACTERS - может трогать и не следует... Тут принципиальная только одна заморочка - разная семантика литерала, в сравнении с регулярными выраженими... может какие иные скобки придумать, что ли... Думать надо.
Служебное слово CHR - лишнее вроде... number и CHR только вместе используются, и никак иначе. В КП же для CharConstant не требуется же такое служебное слово...
2) Все остальное - к чертовой бабушке. Пока я думаю за такой стиль:
Код:
TokenDecl = "TOKENS" ["<" StartName { "," StartName } ">"]
            {
               TokenExpr "." [ "(." ANY ".)" ] [ "SEND(" TokenName ")" ]
            } .
И все, написанное в любой из сущностей выше - имеет простое зеркало здесь в одном месте.
Описание - вон цитата про "How the input is matched". Не, ну слово "flex" оттуда выкинем, естественно.
Ни добавить, ни прибавить... Вроде бы


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Март, 2010 09:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Galkov писал(а):
Евгений Темиргалеев писал(а):
В Coco/R сканер определяется декларативно
Увы, не понял
Мы описываем свойства лексики языка. И получаем сканер. Без необходимости указывать какие-либо "должностные инструкции".

P.S. Тут просто информация; "хорошо" или "плохо" с моей стороны не прикладываются.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Март, 2010 09:53 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Galkov писал(а):
Евгений Темиргалеев писал(а):
Насколько эти сущности излишни для определения языка программирования?
...
Пока я думаю за такой стиль:
Код:
TokenDecl = "TOKENS" ["<" StartName { "," StartName } ">"]
            {
               TokenExpr "." [ "(." ANY ".)" ] [ "SEND(" TokenName ")" ]
            } .
И все, написанное в любой из сущностей выше - имеет простое зеркало здесь в одном месте.
На вопрос Вы так и не ответили. Вы когда ЯП будете определять (репорт для людей писать), его лексику будете описывать этой одной сущностью? Или скорее теми пятью?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Март, 2010 13:40 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Дык я рассчитываю на обыкновенную раскрутку....
Начало - на "тех пяти".
Потом переписываю на "себе одном", так, чтобы оно само себя и собирало.
А когда дело доходит до "репорта людям" - про "те пять" уже давно напрочь и забыто. Как бы...

Или опять не понял вопроса :?:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Март, 2010 14:42 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Galkov писал(а):
Начало - на "тех пяти".
Потом переписываю на "себе одном", так, чтобы оно само себя и собирало.
А когда дело доходит до "репорта людям" - про "те пять" уже давно напрочь и забыто. Как бы...

1) Определение ЯП.
2) Реализация.
3) Сообщение о ЯП. Например: http://oberoncore.ru/wiki/lang/start - см. Оберон, Оберон2, Компонентный паскаль.

Как язык будет описан в 3?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Март, 2010 15:35 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Евгений Темиргалеев писал(а):
Как язык будет описан в 3?
Последний, естественно.
В котором вместо "5 сущностей" используется только одна - TokenDecl (не более чем рабочее описание которой и было приведено).
И совершенно обязательно там же должен быть русский аналог описания "How the input is matched".

А как по-другому-то :shock:


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

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


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

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


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

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