Проблема:
У вас есть некоторые данные, и ваша программа требует определенного ввода. Например, строки, которые являются числами. Вы ищете способ преобразования исходных данных в нужный вам формат.
И проблема в том, что источником может быть что угодно. Это может быть XML, списки свойств, двоичные файлы, которые
содержит необходимые данные, глубоко внедренные в бинарный мусор. И ваш формат вывода может отличаться
также: это могут быть числовые строки, числа с плавающей запятой, двойные числа ...
Вы не хотите программировать. Вам нужны процедуры, которые дают вам команды, способные преобразовывать данные в желаемую форму. Конечно, он содержит регулярные выражения, но он очень хорошо спроектирован и предлагает возможности, которые иногда намного проще и мощнее.
Сложение:
Многие пользователи сталкиваются с этой проблемой и надеются, что их программы смогут конвертировать, читать и записывать данные, предоставленные другими источниками. Если это невозможно, они обречены или используют такие программы, как бизнес
интеллект. Это не проблема.
Я говорю об инструменте для разработчика , который знает, что он делает, но также недоволен тем, что каждый раз пишет подпрограммы на обычном языке. Профессиональный инструмент для манипулирования данными, что-то вроде шестнадцатеричного редактора, regex, vi, grep, parser, объединенного вместе
доступны подпрограммами или REPL.
Если у вас есть спецификация формата данных, вы можете получить доступ и преобразовать данные одновременно. Не нужно отлаживать или тщательно планировать, как запрограммировать преобразование. Я ищу решение, потому что не верю, что проблема новая.
Позволяет:
- объединение / группировка / объединение результатов
- вставка / удаление / вывод / замена
- написать макрос, который позволяет многократно выполнять цепочку команд
- метагруппировка (списки-> таблицы-> n-мерные таблицы)
Пример (Нет, я не ищу решение этой проблемы, это всего лишь пример):
Вы хотите прочитать строки XML, встроенные в двоичный файл с записями переменной длины. Ваш
Инструмент считывает длину записи и удаляет ненужную информацию, окружающую ваш текст. Теперь он распадается
XML и извлекает строки. Будучи символом индийских чисел и содержащим десятичные запятые вместо десятичных точек, ваш инструмент преобразует их в ASCII и заменяет запятые точками. Теперь результаты должны быть сохранены в матрицах переменной длины .... и т. Д. и т.д.
Я ищу хороший язык / языковой дизайн и, если возможно, реализацию.
Какой дизайн вам нравится или даже, если он не соответствует условиям, вы бы не хотели пропустить?
РЕДАКТИРОВАТЬ: Вопрос в том, существует ли решение проблемы и если да, какие реализации доступны. Вы НЕ реализуете свой собственный алгоритм сортировки, если доступны Quicksort, Mergesort и Heapsort. Вы НЕ изобретаете свой собственный анализ текста
метод, если у вас есть регулярные выражения. Вы НЕ изобретаете свой собственный 3D-язык для графики, если доступен OpenGL / Direct3D. Существуют существующие решения или, по крайней мере, документы с описанием проблемы и предложениями. И есть люди, которые, возможно, работали и испытывали такие проблемы, и которые могут дать идеи и предложения. Идея, что эта проблема является совершенно новой, и я должен решить и реализовать ее сам без фона
позвольте мне признать, что знание совершенно не соответствует действительности.
UPDATE:
К сожалению, у меня было меньше времени, чем предполагалось, чтобы углубиться в эту тему, потому что наша команда разработчиков в настоящее время находится в горячей фазе. Но я связался с автором TextTransformer, и он любезно ответил на мои вопросы.
Тем временем я исследовал TextTransformer (http://www.texttransformer.de)) и до сих пор вижу, что он предлагает полное и эффективное решение, если вы собираетесь анализировать символьные данные.
Для тех, кто попробует реализовать хороший язык синтаксического анализа, наименьший набор операторов для непосредственного преобразования любых входных данных в любые выходные данные, если (!) Они были достаточно мощными, кажется:
Вставить / удалить: самоочевидный
Group / Ungroup: разбить входные данные на набор токенов и организовать их в группы
и супергруппы (структуры данных, списки, таблицы и т. д.)
Преобразование
- Замена: изменить содержимое токенов (специальная операция: заменить)
- Транспонирование: изменение порядка жетонов (своп, слияние и т. Д.)