ВНИМАНИЕ:
Файлы из Базы знаний - это исходный код разработки.
Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы.
Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных.
Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Небольшой пример преобразования кода на языке 1С в XML.
Ограничения - не обрабатвает препроцессор, не распознает имена свойств если они совпадают с ключевыми словами, Не выделяет коментарий в отделььный узел.
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя.
Решение в Реестре отечественного ПО
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.
Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С.
Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.
Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!
Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.
{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(419)}: Значение не является значением объектного типа
(Переходы)
СостояниеРазбора = СтруктураГраматики.Переходы.Старт;
Задача (озвучивал в (5)): обработанный код вернуть в 1С. Если конвертер будет заодно кромсатором, то могут улететь пометки, временно сплошь закомментированные функции и заготовки. Да и код может быть чужой, составленный по индивидуальным соображениям, нехорошо его обрезать.
Полагаю, для задач, где комментарии всё же нужны (не компиляторы, не обфускаторы), лучше их выделить таки в токен. А при равноправных конфликтах уступать первому. :)
так из хмл ты можешь получить тект просто обойдя дерево и выводя его в поток. не вижу сложности
можешь попутно преобразовать его (например привести ключевые слова к каноническому виду)
хотя вот подумав пришел к выводу что по хмл однозначно не востановить текст программы - причина - не сохраняется информация о пробельных символах. то есть не ясно как интерпретировать разрыв между токенами - как пробелы или как табы. В случае если сделать предварительную замену табов на пробелы то код для генерации текста по дереву и его проверки - примитивен и внимания не заслуживает.
По факту да, но не смертельно, а вот комменты...
[QUOTE=so-quest]Не выделяет комментарий в отдельный узел.[/IS-QUOTE]Что-то я их вообще в выгрузке не наблюдаю ни в каком узле.
Не досмотрел наверное до сюда -
<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С эта вещь не имеет. Хотя для жругих грамматик - не вопрос - строиться все очень легко и быстро.
(14) Забрал. Ещё последние комменты куда-нибудь бы привязать (чтоб не пропадали):
Функция Три()
Возврат 1+1+1;
КонецФункции
//TODO: Оптимизировать
или
//{{здесь был Вася
<кучка дюже полезных блоков>
//ушёл, но обещал вернуться}}
Может под это дело создать токен "endModule" или "NullString" или сделать исключение и привязать к предыдущей строке с пометкой "basement"?:
commentString=//НадстрочныйКоммент //(basement)Финальный
(15) качни (можешь с гитхаба, там бесплатно), глянь. там одна кнопка и одно поле ввода. В общих чертах - это обработчик для таблиц сгенерированных голдпарсером, с выводом дерева в хмл, одновременным построением xdto пакета по граматике. В общем если слова gold parser, FSM (DFA, NFA), parser, lexer - не очень хорошо знакомы то описание не поможет, а если знакомы - то бессмысленно.
С коментами все же есть сложность - с одной стороны это токен, с другой - это нафиг не нужная инфа для компилятора. В формальной грамматике разрисовать место комментария - достаточно сложно (граматика становиться противоречивой из-за reduce-reduce конфиликтов) Ты объясни для каких задач тебе нужен этот комментарий - может есть решения проще, чем огород с автоматами городить.
AST освобождено от токенов. Не нужны они в дереве. То о чем ты говоришь - это токенизер, и это немного в стороне от моих планов. Если хочешь могу скинуть свой токенизер - пили до совершенства
все эти модификаторы - насервере, наклиенте и т.д. - препроцессор с областью действия следующей компилируемой единицы, а препроцессор - не поддерживается. если очень нужно - прикурить - вопрос 5 минут. Добавь нужное определение и собери по новой хмл файл граматики
Есть другой адрес - яндекс слать отказывается на него
Мыльный синоним на латинице: avoskaDOGpismorfDOTcom
В публикации про одинэсные инструкции препроцессору говорилось? А я до этого момента думал, что про какой-нибудь лексический препроцессор. :) Куда добавить нужные определения я пока не нашёл, проще закомментировать весь неформат.
ууууу.....
короче краткая инструкция - ставишь себе 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 в обработке. все.
если доделаешь грамматику под комментарии и препроцессор - поделись.
ЗЫ. а ведь по идее вопрос как править грамматику должен был возникнуть одним из первых
Так одно дело методом тыка, другое - обзор составлять (объяснить почему тыкать именно так). Не могу ж я учить, в чём сам не разбираюсь. Да и большинству будет интересна практическая сторона вопроса, так что лучше направить усилия в сторону создания инструмента, а не пережёвывания теории.
Ошибка преобразования данных XDTO:
Чтение объекта типа: {GoldParser}Grammar - [7,17]
Проверка дополнительного свойства:
форма: Элемент
имя: Parameters: Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {GoldParser}Grammar
Посмотри на объявление схемы, ты пропустил 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>
40.
sergey.s.betke@yandex.ru
411.12.17 22:52 Сейчас в теме
Коллеги, добрый день.
Репозиторий https://github.com/wwall/GPTemplate недоступен, найти нечто подобное на GitHub не получилось. Не подскажете, где искать актуальную редакцию GPTemplate для 1S BSL? Необходимо написать на 1С парсер своей грамматики...