|
JFlex + CUP – генерация кода на 1С. Востребовано? | ☑ | ||||||
---|---|---|---|---|---|---|---|---|
0
quest
15.03.19
✎
14:29
|
Предположим, есть нашлепка к 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 |
|||||||
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 штуки найти
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |