OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 11 Декабрь, 2018 22:57

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 28 Сентябрь, 2013 15:21 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2538
Откуда: Россия, Ярославль
Третьего дня наткнулся на неожиданность.
В одном из моих компонентов реализован поиск слова 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 КБ]
Скачиваний: 120
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Сентябрь, 2013 18:32 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2231
Пётр, это из-за кавычки " перед
issues = ""


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Сентябрь, 2013 19:10 

Зарегистрирован: Четверг, 12 Июнь, 2008 17:30
Сообщения: 35
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 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2538
Откуда: Россия, Ярославль
Иван Денисов писал(а):
Пётр, это из-за кавычки " перед
issues = ""

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

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

Thanks, it's a kind of proper solution.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Сентябрь, 2013 19:51 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4487
Откуда: Россия, Орёл
Пётр Кушнир писал(а):
Иван Денисов писал(а):
Пётр, это из-за кавычки " перед
issues = ""

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


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


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

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2538
Откуда: Россия, Ярославль
Там нет указания, что текст внутри кавычек будет разобран по правилам описанным в Language Report.
То есть, кроме Lang. Report ничего не запрещает мне написать: "
Hello,

World!

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


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

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


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

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


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

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