OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 18 Июнь, 2019 01:39

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: Пятница, 25 Ноябрь, 2011 14:05 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2303
Откуда: Россия, Санкт-Петербург
Задумал написать консольную утилитку, преобразующую входной текстовый файл. Взялся за XDS, поскольку это самый простой на сегодня консольный инструмент среди Оберонов. Требование такое: на выходе могут быть файлы с Unix-овыми переводами строк (одиночный символ LF = 0AX).

Out.Ln выдаёт CRLF, это понятно. Настройки, чтобы задать LF - нету, это ладно.
Out.Char(0AX) выдаёт последовательность CRLF. Это уже странно.
Ладно, модуль Out - это надстройка над стандартной подсистемой работы с каналами ввода-вывода, написанной на Modula. Полезем в эту подсистему.

RawIO.Write(StdChans.OutChan(), 0AX); - выдаёт CRLF.
ch := 0AX; IOChan.RawWrite(StdChans.OutChan(), SYSTEM.ADR(ch), 1); - выдаёт CRLF.

Чувствую себя идиотом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Ноябрь, 2011 14:31 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2303
Откуда: Россия, Санкт-Петербург
Думаю, из чего мне теперь мою утилитку собирать. Неужели из ББ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Ноябрь, 2011 14:43 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2303
Откуда: Россия, Санкт-Петербург
А ещё выяснилось, что символ 09X (горизонтальная табуляция) при компиляции заменяется на восемь пробелов.
Вот так.
В исходнике символ табуляции, а в объектном файле - уже восемь пробелов. Безо всяких предупреждений, внезапно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Ноябрь, 2011 15:03 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Александр Ильин писал(а):
Неужели из ББ?
И на Марсе бывает жизнь! :)))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Ноябрь, 2011 15:39 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2303
Откуда: Россия, Санкт-Петербург
Иван Кузьмицкий писал(а):
Александр Ильин писал(а):
Неужели из ББ?
И на Марсе бывает жизнь! :)))
Попробовал воспользоваться консольным олимпиадным компилятором (подсистема Info21olimp). Всё работает, кроме одного: если в строковой константе встречается символ табуляции (09X), то в процессе работы компилятора этот символ заменяется на пять символов: " 09X ".
Подскажите, где наиболее актуальная версия подсистемы находится. Я слышал, там были доработки касательно положения маркеров ошибок в тексте и т.п.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Ноябрь, 2011 16:23 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Александр Ильин писал(а):
Out.Char(0AX) выдаёт последовательность CRLF. Это уже странно.
Модуль Out очень простой. Лучше его самому написать, без всяких странностей.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 26 Ноябрь, 2011 06:35 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8129
Откуда: Троицк, Москва
Александр Ильин писал(а):
Попробовал воспользоваться консольным олимпиадным компилятором (подсистема Info21olimp).
Всё работает, кроме одного: если в строковой константе встречается символ табуляции (09X), то в процессе работы компилятора этот символ заменяется на пять символов: " 09X ".
Подскажите, где наиболее актуальная версия подсистемы находится.
Я слышал, там были доработки касательно положения маркеров ошибок в тексте и т.п.
Версия не менялась.

Вставка маркеров ошибок -- в школьной и базовой сборках для обеспечения перевода русских слов на английские и обратно, i21sysLanguage и т.д.

Но сама проблема непонятна.
Был текстовый файл. Во что он преобразуется? Откуда взялась цепочка литер? Зачем компилятор?
Всё это непонятно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 26 Ноябрь, 2011 10:15 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2303
Откуда: Россия, Санкт-Петербург
Info21 писал(а):
Был текстовый файл. Во что он преобразуется? Откуда взялась цепочка литер? Зачем компилятор?
Текстовый файл превращается в исходный текст модуля на Обероне, который при запуске выдаёт этот текст. Затем для проверки модуль компилируется, запускается, и выдача сравнивается с первоначальным файлом. Вылезают отличия в переводах строк и табуляциях.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 26 Ноябрь, 2011 15:16 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8129
Откуда: Троицк, Москва
Александр Ильин писал(а):
Info21 писал(а):
Был текстовый файл. Во что он преобразуется? Откуда взялась цепочка литер? Зачем компилятор?
Текстовый файл превращается в исходный текст модуля на Обероне, который при запуске выдаёт этот текст. Затем для проверки модуль компилируется, запускается, и выдача сравнивается с первоначальным файлом. Вылезают отличия в переводах строк и табуляциях.
То есть нужно, чтобы модуль на Обероне выдавал плёвывал в точности этот текст?
Куда он его должен выдавать?

Если нужно зашить текст в виде цепочек литер, то опять же непонятно, в чем проблема: читая исходный тхт-файл мы же способны отфильтровать все спецсимволы, и зашить их в программу на Обероне соотв. образом. Не обязательно в виде литерных цепочек.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 26 Ноябрь, 2011 15:50 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2303
Откуда: Россия, Санкт-Петербург
Info21 писал(а):
То есть нужно, чтобы модуль на Обероне выдавал в точности этот текст?
Куда он его должен выдавать?
Вы правильно поняли.
Выдавать должен либо в файл, либо на стандартный вывод.
Info21 писал(а):
Если нужно зашить текст в виде цепочек литер, то опять же непонятно, в чем проблема: читая исходный тхт-файл мы же способны отфильтровать все спецсимволы, и зашить их в программу на Обероне соотв. образом. Не обязательно в виде литерных цепочек.
Тема была в связи с тем, что стандартный вывод на консоль в XDS работает неправильно.

Изначально был простой sed-скрипт, который читал файл и выдавал все строки с префиксом "Out.String(" и суффиксом ");". Плюс заголовок и хвост модуля. Оказалось, что отличается конец строк. Написал модуль-обёртку, в котором Out.Ln выдавал нужные символы. Выяснилось, что XDS вообще не дружит с LF. Тогда переориентировал на олимпиадный компилятор. Выяснилось, что требуется специальная обработка символов табуляции.

Вернулся на XDS и решил проблему написанием собственного модуля выдачи на консоль по совету igor. Всего 54 строчки.


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

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Александр Ильин писал(а):
решил проблему написанием собственного модуля выдачи на консоль
Я и сам так поступал. Считаю, что для небольшой утилиты, выполняющей простые вобщем-то действия, такой путь вполне оправдан. Это к вопросу об эффективности повторного использования кода.


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

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


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

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


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

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