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 найти не выходит. Кто-нибудь с подобным сталкивался?
|
Автор: | Иван Денисов [ Суббота, 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/ |