OberonCore
https://forum.oberoncore.ru/

TextMappers.Scanner: опознание ид-в КП и литер - опция?
https://forum.oberoncore.ru/viewtopic.php?f=23&t=6313
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Вторник, 20 Ноябрь, 2018 14:04 ]
Заголовок сообщения:  TextMappers.Scanner: опознание ид-в КП и литер - опция?

Потребовался готовый сканер в качестве которого 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;*)

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

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

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