XML + XDTO + Gold Parser = код в XML

24.12.14

Разработка - Инструментарий разработчика

Пример преобразования кода на языке 1С в XML

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример
.epf 61,43Kb
54
54 Скачать (1 SM) Купить за 1 850 руб.

Небольшой пример преобразования кода на языке 1С в XML.

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

 

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    172086    964    403    

924

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14659    109    46    

108

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    17346    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27370    96    48    

138

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11957    45    33    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191344    1153    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18117    7    32    

42

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1153    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. EliasShy 48 20.05.13 13:47 Сейчас в теме
Ошибка чтения грамматики 'd:\1\1C-BNF.xml'

{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(419)}: Значение не является значением объектного типа
(Переходы)
СостояниеРазбора = СтруктураГраматики.Переходы.Старт;
2. so-quest 140 20.05.13 15:00 Сейчас в теме
Спасибо за комментарий.
Обновления выкладываются здесь https://github.com/wwall/GPTemplate
3. Intervent 21.05.13 16:44 Сейчас в теме
Планируется ли создать пример обратного преобразования?
4. so-quest 140 21.05.13 17:09 Сейчас в теме
не понял, а зачем такое?
5. Intervent 21.05.13 18:22 Сейчас в теме
Чтобы изменённый код в XML отдать на выполнение:
  1. Код 1С → Код в XML
  2. Обработка кода XML
  3. Код в XML → Код 1С
Тестовое применение: убедиться в правильности преобразования (изначальный код 1С без обработки должен совпадать с конечным).

Твоя цель преобразования "код 1С → код в XML"?
19. Intervent 22.05.13 13:05 Сейчас в теме
Задача (озвучивал в (5)): обработанный код вернуть в 1С. Если конвертер будет заодно кромсатором, то могут улететь пометки, временно сплошь закомментированные функции и заготовки. Да и код может быть чужой, составленный по индивидуальным соображениям, нехорошо его обрезать.

Полагаю, для задач, где комментарии всё же нужны (не компиляторы, не обфускаторы), лучше их выделить таки в токен. А при равноправных конфликтах уступать первому. :)
6. so-quest 140 21.05.13 18:46 Сейчас в теме
так из хмл ты можешь получить тект просто обойдя дерево и выводя его в поток. не вижу сложности
можешь попутно преобразовать его (например привести ключевые слова к каноническому виду)

или я снова тебя не понял?
7. Intervent 21.05.13 19:38 Сейчас в теме
Согласен, дальше можно сделать всё/что-то/кое-что самостоятельно. Вопрос закрыт.
8. so-quest 140 21.05.13 21:56 Сейчас в теме
хотя вот подумав пришел к выводу что по хмл однозначно не востановить текст программы - причина - не сохраняется информация о пробельных символах. то есть не ясно как интерпретировать разрыв между токенами - как пробелы или как табы. В случае если сделать предварительную замену табов на пробелы то код для генерации текста по дереву и его проверки - примитивен и внимания не заслуживает.
9. Intervent 21.05.13 23:08 Сейчас в теме
По факту да, но не смертельно, а вот комменты...
[QUOTE=so-quest]Не выделяет комментарий в отдельный узел.[/IS-QUOTE]Что-то я их вообще в выгрузке не наблюдаю ни в каком узле.
10. so-quest 140 21.05.13 23:59 Сейчас в теме
Не досмотрел наверное до сюда -
<Identifier id="3401" line="298" column="2" symbol="32"><data>Action</data><commentString> Find the Token.СимволРазбора in the LALR table. */</commentString></Identifier>

не выделеяет в отдельный узел наверное неправильно написал. Вернее было бы - не анализирует к какому правилу относиться комментарий (ведь по логике есть 2 аабсолютно разных комментария - тот что начинается с начала строки по идее комментирует идущую следом последовательность команд (например блок комментария перед объявлением функции), и тот который идет после команды, до конца строки. Он комментирует то что уже произошло в строке (например когда пишут мелкий коммент к строке что бы не забфть почему то или иное значение присвоили.)

опять же комменты это скорее здесь нужны http://infostart.ru/public/186086/, меня же интересовал голд парсер и его генерация шаблонов (было нужно для задачи разбора хитрого формата) - попутно что получилось оформил в хмлный преобразователь и выложил здесь, как пример. Никакого рабочего значения без нормальной граматики 1С эта вещь не имеет. Хотя для жругих грамматик - не вопрос - строиться все очень легко и быстро.
11. Intervent 22.05.13 07:07 Сейчас в теме
Действительно, недосмотрел. Посмотрел внимательнее, - комментарии сохраняются выборочно:
Код 1С
//Ниже пустой коммент, который не будет сохранён
//
Процедура ТестКомментариев()
//Комментарий1
//Комментарий2
Message("Hello, Gold Parser!"); //Комментарий3
//Комментарий4
//Комментарий5
КонецПроцедуры
Показать
Код в XML
...
Identifier=Message;commentString=Комментарий2
...	
endProc=КонецПроцедуры;commentString=Комментарий5
...

Т.е. сохраняется только одна непустая предшествующая строка комментариев.
14. so-quest 140 22.05.13 11:13 Сейчас в теме
(11) - Исправил. Если нужно забирай.
17. Intervent 22.05.13 12:04 Сейчас в теме
(14) Забрал. Ещё последние комменты куда-нибудь бы привязать (чтоб не пропадали):
Функция Три()
	Возврат 1+1+1;	
КонецФункции 
//TODO: Оптимизировать

или
//{{здесь был Вася
<кучка дюже полезных блоков>
//ушёл, но обещал вернуться}}

Может под это дело создать токен "endModule" или "NullString" или сделать исключение и привязать к предыдущей строке с пометкой "basement"?:
commentString=//НадстрочныйКоммент //(basement)Финальный

В общем, не суть куда, лишь бы был. :)
12. so-quest 140 22.05.13 10:21 Сейчас в теме
ок. спасибо за ошибку - гляну
13. diver.sun 21 22.05.13 10:29 Сейчас в теме
Ну первый шаг к интелектуальному, а не построчному сравнению кода сделан....:-) Великое ку
15. help1Ckr 22.05.13 11:23 Сейчас в теме
А можно описания для сего чуда, что оно и как? А то если честно ничего не понятно для тупого и жадного 1сника.
16. so-quest 140 22.05.13 11:33 Сейчас в теме
(15) качни (можешь с гитхаба, там бесплатно), глянь. там одна кнопка и одно поле ввода. В общих чертах - это обработчик для таблиц сгенерированных голдпарсером, с выводом дерева в хмл, одновременным построением xdto пакета по граматике. В общем если слова gold parser, FSM (DFA, NFA), parser, lexer - не очень хорошо знакомы то описание не поможет, а если знакомы - то бессмысленно.
18. so-quest 140 22.05.13 12:15 Сейчас в теме
С коментами все же есть сложность - с одной стороны это токен, с другой - это нафиг не нужная инфа для компилятора. В формальной грамматике разрисовать место комментария - достаточно сложно (граматика становиться противоречивой из-за reduce-reduce конфиликтов) Ты объясни для каких задач тебе нужен этот комментарий - может есть решения проще, чем огород с автоматами городить.
20. Intervent 22.05.13 13:30 Сейчас в теме
При указании директивы компиляции выгружается только чистый скелет (читай - ничего):
&НаКлиенте
Функция Пустышка()
КонецФункции 
Для управляемых форм не планировалось?
22. so-quest 140 22.05.13 13:39 Сейчас в теме
(20) Intervent, не. УФ не поддерживается.
21. so-quest 140 22.05.13 13:35 Сейчас в теме
AST освобождено от токенов. Не нужны они в дереве. То о чем ты говоришь - это токенизер, и это немного в стороне от моих планов. Если хочешь могу скинуть свой токенизер - пили до совершенства
23. Intervent 22.05.13 14:09 Сейчас в теме
(21) Был бы благодарен, в хозяйстве пригодится; вышли, пожалуйста, сюда: АвоськаСобакаПисьмоТочкаРФ
(22) Жаль, а я было навострил лыжи... (
24. so-quest 140 22.05.13 16:24 Сейчас в теме
все эти модификаторы - насервере, наклиенте и т.д. - препроцессор с областью действия следующей компилируемой единицы, а препроцессор - не поддерживается. если очень нужно - прикурить - вопрос 5 минут. Добавь нужное определение и собери по новой хмл файл граматики

Есть другой адрес - яндекс слать отказывается на него
25. Intervent 22.05.13 17:06 Сейчас в теме
Мыльный синоним на латинице: avoskaDOGpismorfDOTcom

В публикации про одинэсные инструкции препроцессору говорилось? А я до этого момента думал, что про какой-нибудь лексический препроцессор. :) Куда добавить нужные определения я пока не нашёл, проще закомментировать весь неформат.
26. so-quest 140 22.05.13 17:08 Сейчас в теме
хм... а подскажи - где ты ищешь куда добавить? я вроде grm не выкладывал
27. Intervent 22.05.13 17:39 Сейчас в теме
В макет xmlGrammar в SymbolTable добавил строку:
<gp:SymbolTable count="124">
...
<gp:Symbol name = "&AtClient" value = "AtClient" id = "123"  kind = "0" index= "123" description = "&AtClient"/>

Ничего не изменилось, куда ещё можно что-то прописать, - непонятно.
28. so-quest 140 22.05.13 17:51 Сейчас в теме
ууууу.....
короче краткая инструкция - ставишь себе Gold parser (качать здесь http://www.goldparser.org/) берешь шаблон хмл отсюда https://github.com/wwall/GPTemplate файл XML.pgt кладешь его ко всем шабллонам голдпарсера (каталог template там где ставил голдпарсер) - берешь граматику оттуда же где и ХМЛ (файл 1C-BNF.grm)
правишь как тебе надо и перегенерируешь таблицы лексера и парсера (в годпарсере меню project - create sceleton programm выбираешь Text - XML 5.0) получившийся хмл вносишь вместо моего макета граматики xmlGrammar в обработке. все.

если доделаешь грамматику под комментарии и препроцессор - поделись.

ЗЫ. а ведь по идее вопрос как править грамматику должен был возникнуть одним из первых
29. Intervent 22.05.13 19:00 Сейчас в теме
Прошёлся по инструкции, - всё ОК: теперь знаю где править, будем на досуге пробовать...
30. so-quest 140 22.05.13 20:21 Сейчас в теме
вот ты бы это ву виде статьи расписал бы что ли? со скриншотами
31. Intervent 22.05.13 22:28 Сейчас в теме
Так одно дело методом тыка, другое - обзор составлять (объяснить почему тыкать именно так). Не могу ж я учить, в чём сам не разбираюсь. Да и большинству будет интересна практическая сторона вопроса, так что лучше направить усилия в сторону создания инструмента, а не пережёвывания теории.
32. so-quest 140 22.05.13 22:49 Сейчас в теме
так хоть заскриншоть что делал по тому что я тебе писал - и тебе плюс и ссылку на мою поделку там дашь.
Это реклама называется.

А насчет теории - не прав ты. Без нее в компиляции делать нечего.
33. tormozit 7250 08.07.13 00:20 Сейчас в теме
У тебя есть аналог TrimReductions из родного парсера GoldParser?
34. so-quest 140 08.07.13 09:07 Сейчас в теме
да. в модуле объекта переменную trim выставить в истину
35. tormozit 7250 09.02.14 00:07 Сейчас в теме
Попробовал в макет "xmlGrammar" поместить текст таблиц парсинга
<?GOLDParserTables version="1.0"?>
<Tables>
        <Parameters>
                <Parameter Name="Case Sensitive" Value="False"/>
                <Parameter Name="Start Symbol" Value="<Packet>"/>
        </Parameters>
        <SymbolTable Count="267">
                <Symbol Index="0" Name="EOF" Kind="3"/>
                <Symbol Index="1" Name="Error" Kind="7"/>
...
Показать

Получил ошибку
Ошибка преобразования данных XDTO:
Чтение объекта типа: {GoldParser}Grammar - [7,17]
Проверка дополнительного свойства:
форма: Элемент
имя: Parameters: Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {GoldParser}Grammar
36. so-quest 140 09.02.14 11:04 Сейчас в теме
Посмотри на объявление схемы, ты пропустил Actions и SymbolKinds

<?xml version="1.0" encoding="UTF-8"?>
<gp:Grammar xsi:schemaLocation="GoldParser sq12.xsd" xmlns:gp="GoldParser" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gp:Actions>
<gp:Action id="1" value="Shift"/>
<gp:Action id="2" value="Reduce Rule"/>
<gp:Action id="3" value="Goto"/>
<gp:Action id="4" value="Accept"/>
</gp:Actions>
<gp:SymbolKinds>
<gp:Kind id="0" value="Normal Nonterminal" />
<gp:Kind id="1" value="Normal Terminal" />
<gp:Kind id="2" value="Whitespace Terminal" />
<gp:Kind id="3" value="End Character - End of File. This symbol is used to represent the end of the file or the end of the source input." />
<gp:Kind id="4" value="Start of a block quote" />
<gp:Kind id="5" value="End of a block quote" />
<gp:Kind id="6" value="Line Comment Terminal" />
<gp:Kind id="7" value="Error Terminal. If the parser encounters an error reading a token, this kind of symbol can used to differentiate it from other terminal types." />
</gp:SymbolKinds>
<gp:Parameters>
<gp:Parameter name="About" value="" />
<gp:Parameter name="Author" value="(Unknown)" />
<gp:Parameter name="CaseSensitive" value="" />
<gp:Parameter name="Name" value="1C:Enterprise 8.0" />
<gp:Parameter name="StartSymbol" value="" />
<gp:Parameter name="Version" value="(Not Specified)" />
</gp:Parameters>

37. so-quest 140 09.02.14 12:20 Сейчас в теме
Глянул сейчас, это не от моего pgt файл. Попробуй мой взять. Должно получиться.
38. tormozit 7250 10.02.14 20:51 Сейчас в теме
(37) Объясни, как мне свою грамматику подключить. С разбега не вышло как видишь.
39. пользователь 11.02.14 00:35
Сообщение было скрыто модератором.
...
40. sergey.s.betke@yandex.ru 4 11.12.17 22:52 Сейчас в теме
Коллеги, добрый день.

Репозиторий https://github.com/wwall/GPTemplate недоступен, найти нечто подобное на GitHub не получилось. Не подскажете, где искать актуальную редакцию GPTemplate для 1S BSL? Необходимо написать на 1С парсер своей грамматики...
romankoav; +1 Ответить
Оставьте свое сообщение