OberonCore
https://forum.oberoncore.ru/

Неожиданные управляющие символы в TextMappers.Scanner.string
https://forum.oberoncore.ru/viewtopic.php?f=23&t=4513
Страница 1 из 1

Автор:  Пётр Кушнир [ Суббота, 28 Сентябрь, 2013 15:21 ]
Заголовок сообщения:  Неожиданные управляющие символы в TextMappers.Scanner.string

Третьего дня наткнулся на неожиданность.
В одном из моих компонентов реализован поиск слова IMPORT в тексте исходника.
Ищу это слово с помощью TextMappers.Scanner, опираясь на получаемые при сканировании значения поля .string. При этом, в 90% случаев поиск проходит успешно, а вот недавно я обнаружил, что в строке мне приходит совсем не то, что могло бы быть словом "IMPORT".
Тестовый модуль
Код:
MODULE PrivMappers;

   IMPORT
      Views, Files, TextMappers, TextViews, Log;
      
   PROCEDURE Do*;
      VAR v: Views.View; sc: TextMappers.Scanner;
   BEGIN
      v:=Views.OldView(Files.dir.This(''), 'Spouts.odc');
      ASSERT(v#NIL, 40);
      WITH v: TextViews.View DO
         sc.ConnectTo(v.ThisModel());
         REPEAT
            sc.Scan;
            IF sc.type=TextMappers.string THEN
               Log.String(sc.string)
            END;
         UNTIL sc.rider.eot;
      ELSE END;
   END Do;
   
BEGIN

END PrivMappers.

PrivMappers.Do


при натравливании его на файл из аттача выдаёт вокруг слова IMPORT какие-то безумные строки.
Цитата:
kia
0DX 09X issues 09X =
0DX **) 0DX 0DX 09X IMPORT 0DX 09X 09X kiaLog, StdLog; 0DX 0DX 09X TYPE 0DX 09X 09X (* вывод в стандартный лог *) 0DX 09X 09X StdLogSpout* = RECORD 0DX 09X 09X 09X on*: BOOLEAN 0DX 09X 09X END; 0DX 0DX 09X (* 05.10.2011 16:35:53
PROCEDURE
VAR

Ну и понятно, никакого слова IMPORT найти не выходит.
Кто-нибудь с подобным сталкивался?

Вложения:
Spouts.odc [5.1 КБ]
Скачиваний: 742

Автор:  Иван Денисов [ Суббота, 28 Сентябрь, 2013 18:32 ]
Заголовок сообщения:  Re: Неожиданные управляющие символы в TextMappers.Scanner.st

Пётр, это из-за кавычки " перед
issues = ""

Автор:  maliya [ Суббота, 28 Сентябрь, 2013 19:10 ]
Заголовок сообщения:  Re: Неожиданные управляющие символы в TextMappers.Scanner.st

maybe skip comment is more robust .
Код:
   PROCEDURE Scan (VAR s: TextMappers.Scanner);(* skip comment*)
      VAR
      level:INTEGER;
   BEGIN
      s.Scan;
      IF s.type = TextMappers.char THEN
         IF s.char = "(" THEN
            IF s.rider.char = "*" THEN
               s.rider.Read;
               level:=1;s.rider.Read;
               REPEAT
                  IF s.rider.char = '(' THEN  s.rider.Read; IF s.rider.char = '*' THEN INC(level); s.rider.Read; END;
                  ELSIF s.rider.char = '*' THEN s.rider.Read; IF s.rider.char = ')' THEN DEC(level);s.rider.Read; END;
                  ELSE s.rider.Read
                  END;
               UNTIL (level = 0) OR s.rider.eot;
               Scan(s)
            END
         END
      END   
   END Scan;


Автор:  Пётр Кушнир [ Суббота, 28 Сентябрь, 2013 19:25 ]
Заголовок сообщения:  Re: Неожиданные управляющие символы в TextMappers.Scanner.st

Иван Денисов писал(а):
Пётр, это из-за кавычки " перед
issues = ""

Неожиданно. Выходит, что кавычки разбираются по правилам языка, а комменты в то же самое время не разбираются по правилам языка.

maliya писал(а):
maybe skip comment is more robust .

Thanks, it's a kind of proper solution.

Автор:  Евгений Темиргалеев [ Суббота, 28 Сентябрь, 2013 19:51 ]
Заголовок сообщения:  Re: Неожиданные управляющие символы в TextMappers.Scanner.st

Пётр Кушнир писал(а):
Иван Денисов писал(а):
Пётр, это из-за кавычки " перед
issues = ""

Неожиданно. Выходит, что кавычки разбираются по правилам языка, а комменты в то же самое время не разбираются по правилам языка.


Неожиданно? А в документации что написано?

Автор:  Пётр Кушнир [ Суббота, 28 Сентябрь, 2013 20:13 ]
Заголовок сообщения:  Re: Неожиданные управляющие символы в TextMappers.Scanner.st

Там нет указания, что текст внутри кавычек будет разобран по правилам описанным в Language Report.
То есть, кроме Lang. Report ничего не запрещает мне написать: "
Hello,

World!

"
А если сканнер изначально про разбор языка КП, то почему он не понимает комментарии.

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