OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 06:11

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 20 Ноябрь, 2018 14:04 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Потребовался готовый сканер в качестве которого TextMappers.Scanner подходит, и я уже не первый раз наткнулся на проблему распознавания идентификаторов. XXX должен отличаться от "XXX", а не проходить как цепочка. Решение простое: сделал копию модуля и допилил его, вернув (в этом уверен), тип name:
Код:
   CONST
      …
      (** Scanner.type **)
      char* = 1; name* = 2; string* = 3; int* = 4; real* = 5;
   …
   PROCEDURE Name (VAR s: Scanner);
      VAR max: INTEGER; ch: CHAR;
   BEGIN
      s.type := (*string*)name; s.len := 0; ch := s.rider.char; max := LEN(s.string);
      …

Попутно увидел фичу, которой тоже иногда не хватало при использовании сканера, когда надо было указывать произвольные литеры. Сканер при указании цепочки длины один в одиночных (!) кавычках опознает ее как литеру. В данном случае мне фича оказалась не нужна, убрал:
Код:
   PROCEDURE SingleQuotedString (VAR s: Scanner);
      …
   BEGIN
      …
      s.string[s.len] := 0X;
      (*IF s.len = 1 THEN s.type := char; s.char := s.string[0] END;*)

Я уверен, что Оминк убрали распознавание идентификаторов из сканера. Почему -- вопрос открытый.

Вопросы к аудитории. Кому-то приходилось тоже сталкиваться с необходимостью отличать идентификаторы от цепочек? В сканере есть опции -- распознавать/не распознавать множества, логические и т. п. Может быть стоит дополнить их -- распознавать идентификаторы (или читать как цепочки), трактовать цепочку длины один как литеру (или как цепочку)?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Декабрь, 2019 04:03 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Евгений, да, приходилось то и дело. Я был в шоке, когда узнал, что сканер распознает MODULE и "MODULE" как одну и ту же лексему - это же не одно и то же!! Даже не возьму в толк, в каком классе задач это одно и то же.
Я, как и вы, скопировал модуль и переделал.
Я занимался небольшими инструментами для себя-разработчика, поэтому сканировал тексты - программы на КП. Поэтому добавил еще лексему "комментарий". При желании их можно пропускать, а при желании - сканер их полноценно возвращает.

Я полагаю, для таких задач нужен сканер, который в принципе заточен под КП. Т.е. по сути лексический анализатор КП. И если обобщать - думаю, будет польза, если как-то особенно обрабатывать #2, давая возможность проанализировать, что там за встроенный вид.

Что скажете? В каком состоянии ваш модуль?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Декабрь, 2019 06:29 

Зарегистрирован: Суббота, 04 Май, 2019 10:21
Сообщения: 29
I dont like to use the TextMappers, customized a scanner module for own use.


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

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


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

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


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

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