Имя: Пароль:
 
1C
 
JFlex + CUP – генерация кода на 1С. Востребовано?
0 quest
 
15.03.19
14:29
1. Нет 71% (5)
2. Да 29% (2)
Всего мнений: 7

Предположим, есть нашлепка к jflex и cup позволяющая генерировать код на 1С. Потребуется ли такое кому?
1 Sysanin_1ц
 
15.03.19
14:34
(0) Мне кажется такая нашлепка уже используется 1с чтобы нашлепать типовые конфигурации :))

Нет
2 H A D G E H O G s
 
15.03.19
14:35
Предположим, 98% 1Сников не знает, что это такое.
3 Garykom
 
15.03.19
14:36
(0) Допустим если б не генерировать а разбирать и выполнять код на языке 1С было бы полезно.
Нечто вроде http://oscript.io/ только на java
4 Garykom
 
15.03.19
14:38
(3)+ Но только интерпретатор мало смысла голый, надо еще библиотеки писать базовые те что в 1С
5 Сияющий в темноте
 
15.03.19
14:42
Генератор кода-это мета язык,конечно,в определенных случаях это удобно,но,если механизм в конфигуратор не встроен,то с ним больше проблем,чем удобства.

другое дело,что в 1с код не главное,а всякие там реквизиты-формы-шаблоны.
6 Сияющий в темноте
 
15.03.19
14:45
(4) с учетом появления потоков и двоичных буферов язык вполне может рассматриваться отдельно от обьектов 1с,осталось дождаться появления сокетов и асинхронного HttpЗапроса.
7 ДенисЧ
 
15.03.19
14:45
Я не знаю этих слов. Поэтому мне не нужно
8 elCust
 
15.03.19
14:50
(7) +1
9 Сияющий в темноте
 
15.03.19
14:52
Опять же,все встроенные обьекты,создаваемые через новый хоть и встроенные,но к языку имеют достаточно опосредованное значение.

если бы не GoTo,то код на языке 1с можно было бы переводить на VbScript или JavaScript.
10 Garykom
 
15.03.19
14:57
(9) В моем коде goto нет в принципе.
В коде типовых конф тоже не встречал.
11 Вафель
 
15.03.19
15:12
jflex - это парсер кода чтоли?.
те ты парсер 1с прикрутил к jflex?
12 quest
 
15.03.19
15:59
(2) Может быть.
(3) а смысл
(7) учту
(9) бред
(11) jflex генератор лексических анализаторов , cup генератор синтаксических анализаторов. по грамматике можно сгенерировать код который будет по этим правилам разбирать входной поток.
13 Ботаник Гарден Меран
 
15.03.19
16:11
Нужно генерировать код, который будет решать задачи.
А если просто генерировать, то будет как у машинистки в анекдоте, а проверять и переписывать никто не хочет.
14 Cyberhawk
 
15.03.19
16:23
Хз о чем речь, поэтому )

Нет
15 mikecool
 
15.03.19
16:25
я не знаю ваших слов

Нет
16 Nyoko
 
15.03.19
16:27
нет, делал такую задачу через oscript и выгрузку загрузку конфигурации в файлы
всем документам при открытии добавлял один код, всем справочникам другой.

Нет
17 Patriot1C
 
15.03.19
17:09
(0) JFlex is a lexical analyzer generator (also known as scanner generator) for Java, written in Java.
Ты хотел сказать распознавать код 1С?
18 Patriot1C
 
15.03.19
17:14
Поддержу человека, а то одиноко ему как то.
Мы здесь кроме http://oscript.io/ плюшками балуемся на php http://php1c.ru

Да
19 ptiz
 
15.03.19
17:21
А помните Снегопат? Где он? Кто про него вспоминает?
Все сторонние костыли - нежизнеспособны: много возни и мало эффекта.

Нет
20 Sysanin_1ц
 
15.03.19
17:33
(19) Снегопат уже сдулся. А все потому что 1с закрытая коробочка сама в себе и тратить время на интеграционные библиотеки на уровне платформы и прочую мудистику для 1с бессмысленно. Если открытостью платформы (я не имею ввиду интеграционные сервисы типа вебсервисов, одата, и тому подобное) не озаботилось само 1с то инвестировать в эту область сторонними силами вообще бессмысленно.
21 Patriot1C
 
15.03.19
17:53
(20) Как раз картинка почему Снегопат уже не помогает https://ibb.co/NL3cMms
Прогресс VS Иновации - https://youtu.be/NxuoKspbdkk?t=1309
22 Вафель
 
15.03.19
17:56
(20) Король умер. Да здравствует король
23 Вафель
 
15.03.19
17:56
(0) покажи пример задачи, котору можно решить
24 quest
 
15.03.19
18:01
(17) Рассказываю по другому. Предположим у вас стоит задача - реализовать свой калькулятор. Т.е. вы хотите что бы вызов ВычислитьВыражение("1+2") вам возвращала число 3, ВычислитьВыражение("1/0") возвращаол строку "Болт". Как это реализовать? Надо разобрать строку, преобразовать ее в поток токенов (для вызова ВычислитьВыражение("1+2") это будет массив структур примерно такого типа ("Тип,Значение","ЧИсло","1"), ("Тип,Значение","Плюс","+"), ("Тип,Значение","ЧИсло","2")) Писать разбор руками - дело неблагодарное, поэтому обычно исползуют специальные программы, которые по описанию генерируют модуль реализующий необходимый интерфейс и рассчитывается конечный автомат для сканера. Т.е. вместо того что бы руками писать разбор (и бороться с ошибками кода), можно нарисовать сканер просто описывая регулярные выражения. Лексер может быть любым, генерация делается на язык 1С. Другими словами - если ваш лексер написан что бы распознавать арифметическое выражение то в результате вы получаете обработку с одним экспортным методом getToken() который и возвращает результат разбора (те самые структуры ("Тип,Значение","ЧИсло","1"))
Аналогично работает cup - на входе описание грамматики - на выходе обработка с экспортным методом parse() - возвращает результат вычисления
Менее сумбурно тут https://www.cs.auckland.ac.nz/courses/compsci330s1c/lectures/330ChaptersPDF/Chapt4.pdf
25 Вафель
 
15.03.19
18:03
(24) трассировку вычисления можно будет увидеть.
Например

x = 2+ 3;
y = x * 2;

Хочу после вычисления знать значение x
26 quest
 
15.03.19
18:03
ну и примеры использования -
https://github.com/jflex-de/jflex/tree/master/jflex/examples
27 Вафель
 
15.03.19
18:04
(26) так это все в 1с и так уже есть, а вот трассировки нет
28 quest
 
15.03.19
18:04
(25) можно, при условии что ты опишешь сто такое х, как с ним работать и т.д.
29 Вафель
 
15.03.19
18:05
(28) что значит онишешь?.
все описания - внутри кода. на выходе нужно знать всех промежуточных переменных
30 quest
 
15.03.19
18:05
(27) в (24) сказано - ВычислитьВыражение("1/0") возвращаол строку "Болт"- а в 1С такой функциональности нет
31 Вафель
 
15.03.19
18:06
(30) ну исключение и в 1с кинется
32 Sysanin_1ц
 
15.03.19
18:07
(24) Так надо не нашлепки к языку 1с придумывать а делать сам язык 1с полноценным. С использованием наследований, трассировок, лямбда функций, и прочей атрибутикой взрослого языка программирования.
33 quest
 
15.03.19
18:09
(29) https://github.com/jflex-de/jflex/blob/master/jflex/examples/cup-lcalc/src/main/jflex/lcalc.flex лексер для арифметического выражения, https://github.com/jflex-de/jflex/blob/master/jflex/examples/cup-lcalc/src/main/cup/ycalc.cup парсер - как видно в этом калькуляторе вообще нет понятия переменной, поэтому и говорю - если добавить и описать поддержку переменных, то да можно будет сказать чему что равно, но если грамматика изначально не поддерживает такого понятия - то как считать?
34 Вафель
 
15.03.19
18:11
(33) можешь пример кода для задачи из (25) привести
35 quest
 
15.03.19
18:11
(32) Это не к языку 1с, 1с - просто целевая машина на которую описывается лексер и сканер (как lex генерирует код на С, paslex на паскале и т.д.). Результат работы - тупо 2 обработки и спокойные нервы при разработке dsl
36 quest
 
15.03.19
18:13
(34) нет. я примерно могу догадаться о чем ты (либо отладка, либо статический анализ), но это другие задчи. К генерации кода не имеют отношения
37 Ник080808
 
15.03.19
18:15
(32) назачем в 1с наследование? ты представляешь во что превратится код с наследованием в 1с?
38 Вафель
 
15.03.19
18:15
(36) тогда приведи пример задачи, котору можно решить.
Не нужно кидать ссылки на мануалы
39 Patriot1C
 
15.03.19
18:28
(35) Буду разочаровывать молодых товарищей.
Специфика 1С состоит в том, что она считает результат операции по типу первого аргумента. Если число то 1С второй аргумент переводит к числу (Результат = 1 + "01";) - работает. Если первый параметр строка то все остальное соединяется в строку (Результат = "01" + 1;) то специфика 1С в реализации даже базовых операторов.
40 quest
 
15.03.19
18:28
(38)По lex. Смотри, у тебя есть файл в котором вперемешку символы из русского и греческого алфавита. Задача - выдать список греческих слов в файл1, список русских слов в файл2
Пишем простой лексер
///
///Тут реализация функции ВывестиВФайл
///

(\p{Block:Greek})+ { ВывестиВФайл("файл1",text()) }
(\p{Block:Cyrillic})+ { ВывестиВФайл("файл2",text()) }

генерируем по нему обработку. Задача решена.

По cup - реально лучше мануал прочесть. в двух словах не рассказать.
41 quest
 
15.03.19
18:29
(39) это то здесь к чему?
42 quest
 
15.03.19
18:30
Всем участникам спасибо. То что не востребовано - стало ясно.
43 Garykom
 
15.03.19
18:42
(42) Лично я не понял зачем "генерировать код на 1С"

Нечто вроде https://ru.wikipedia.org/wiki/Haxe ?

Дык http://yoksel.net.ru/haxe1s
44 quest
 
15.03.19
19:50
Более узкая задача - представь ocamllex не на ocml генерирует код, а на 1С Только и всего.
45 Sysanin_1ц
 
15.03.19
20:22
(37) Код станет чище и меньше. Механизм расширения в 1с лишь это лишь небольшой пример что может сделать механизм наследования.
46 Garykom
 
15.03.19
20:22
(44) В смысле можно взять код на некоем языке (например на pascal, c++, java) и преобразовать его в код на ЯП 1С ?

Я реально не представляю нафига это надо, потому что оно будет дико не оптимально без использования встроенных в платформу 1С типов данных.
47 Patriot1C
 
15.03.19
20:50
(46) Так я и пытаюсь втолковать товарищу, что 1С это не язык - это экосистема. Из которой можно что брать, а не в которую что-то впихивать
48 Сияющий в темноте
 
15.03.19
21:02
(46)опять же,если к транслятору подойти с умом,то получится достаточно терпимо.
просто,например,код с той же java просто так не перевести,т.к.java без классов не бывает.
1с скриптоподобный язык и на другие такие же языки в принципе переводится,например,в тот же всеми любимый php можно перевести,а если потом еще через comconnector подключиться к базе 1с,то будет работать.
49 v77
 
15.03.19
22:28
(46) В смысле автор придумал способ генерировать парсеры и лексеры на языке 1с. Будешь нажимать на кнопку и получать готовый код на языке 1с, который, например, распарсит тебе какой нибудь текст. Можешь теперь написать на 1с компилятор Си.
Может заканать как решение проблемы с отсутствием регулярных выражений в 1с.

Да
50 v77
 
15.03.19
22:34
Правда разбираться с этим JFlex никто не будет. Ибо одинесники получают свои деньги совсем за другое.
51 Garykom
 
15.03.19
22:44
(49) Реализация регулярок на языке 1С это лютый ахтунг по быстродействию же.
52 bolder
 
15.03.19
22:48
(2) +1
53 v77
 
15.03.19
22:48
(51) зато на родном языке 1с и без всяких фокусов
54 quest
 
15.03.19
23:08
(49) +100500.... Я так понимаю ты из тех 2% о которых ежик говорил в (2)
(51) Нормальный это ахтунг.. Лучше чем всякие СтрНайти, ОбработатьСтрокиЭмуляцияRegExp и прочие радости - по крайней мере точно знаешь что ожидать и в какие сроки
55 v77
 
15.03.19
23:17
(54) напиши статью на инфостарте. с примерчиком
56 Garykom
 
15.03.19
23:21
Хмм подумалось а можно ли это допилить не до простейшего транслятора из одного языка в другой а нечто более.

Ну вот скажем есть мечтающие о полноценном ООП. Ваяем некое расширения языка 1С с наличием оного (классов и прочего), далее пишем на нем код (причем с использованием доступа к метаданным как обычно на 1С) а затем оно превращается в нативный код 1С.

Этакий "Выполнить()" или "Вычислить()", только на вход подаются набор файлов-классов.
57 Garykom
 
15.03.19
23:23
(56) Ближе всего это как Scala и Java или Kotlin и JS
58 v77
 
15.03.19
23:30
(56)задолбаешься отлаживать этот свой сгенерированый чудо-код
59 Garykom
 
15.03.19
23:31
(58) Да это основная проблема почему я бросил скалу )) И даже не стал браться за котлин.
60 Сергиус
 
15.03.19
23:39
Сержиньо с нетом не что-то подобное предлагал?
61 v77
 
15.03.19
23:39
(59) Котлин же вроде сам по себе язык. Там с отладкой вроде всё нормально. А скалу ты бросил потому что она тебе нах не нужна, как и котлин :)) Одинеснику зачем эти погремушки. За них деньги не платят.
62 v77
 
15.03.19
23:40
(60) чота он пропал. за ум взялся чтоли
63 Garykom
 
15.03.19
23:48
(60) Неа он просто предлагал объекты/классы/типы .Net юзать в готовом виде, вызывая их через свою обертку Ъ в виде ВК для 1С.
Это далеко от предложенного ТС.

Но при совмещении можно было бы получить офуительный результат.

Когда пишем на нативном языке 1С со слитным/нативным использованием допустим .Net, а не так как там извращенно.
А после натравливания получается готовое с нужными вставками нужных вызовов через ВК.
64 Garykom
 
15.03.19
23:49
(61) Ну я когда скалу бросил был программером на яве для десктопа считай. И осваивал EE с JSP заодно.
65 Garykom
 
15.03.19
23:53
(64)+ Кстати опыт предыдущий опыт на 1С весьма помогал в написании, вместо того чтобы каждый раз пилить формочки с нуля, я тогда нечто вроде форм по умолчанию как в 1С (для справочников и документов) придумал и реализовал.
С возможностью допиливания до как надо.

Т.е. если наследоваться от нужного класса то сразу появлялись и работали как нуна элементы по умолчанию для "формы списка" и "формы объекта".
Поиск по подстроке (в форме списка) понятно дело был в отдельном контроле (куда искомая строка вводилась), как это 1С уже в УФ пришлось сделать.
66 Aleksey
 
16.03.19
01:14
(10) у тебя устаревшие данные. Советую ознакомиться к примеру с отчетом РегламентированныйОтчетПрибыльИностраннойОрганизации из типовой БП 3.0 или ERP. Там этих goto (перейти) можно 24 штуки найти
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс