Имя: Пароль:
1C
 
v8: Парсим язык запросов. GOLDParser из кода 1С
0 TormozIT
 
гуру
03.11.07
00:44
У меня есть текст запроса.
Хочу из 1С передать его КУДА ТО, чтобы мне вернули XML-файл синтаксического разбора.
Допустим грамматика уже есть.

Как сделать малой кровью?
1 TormozIT
 
гуру
03.11.07
00:45
Если кому интересно, вот родственная тема v8: Грамматика 8-ки. Кто-нить делал?
2 Immortal
 
03.11.07
04:49
да да , я тожа такое хочу=)
3 Jolly Roger
 
03.11.07
09:07
У автора голдпарсера есть движок в виде com-сервера. Жутко медленный, правда.
На выходе получишь AST, ну а из него - XML.
4 TormozIT
 
гуру
03.11.07
09:44
Ну вот эта dll http://www.devincook.com/goldparser/engine/vb6/cook-engine-dll-v3.0.0.zip
Как ее из 1С то заюзать?
5 TormozIT
 
гуру
03.11.07
09:49
Так вот щас допер уже до

GoldParser = Новый COMОбъект("GOLDParserEngine.GOLDParser");
6 Jolly Roger
 
03.11.07
10:05
(5) Там есть пример скрипта, который рисует дерево в текстововм режиме
7 TormozIT
 
гуру
03.11.07
16:56
Нашел пример скрипта, com-server.
Заюзал на готовой грамматике для встроенного языка 8.0.
Вроде все заработало, но очень медленно.
Дерево

Перем fdfsds;
Для каждого вапвап из выпвап цикл
   Солобщить(вапварва()+рвар[4]);
конеццикла;

на 3.3Core2Duo строится 0.3сек

А 500 строк строит целую секунду.

Есть ли альтернативы?
8 Jolly Roger
 
03.11.07
17:25
А я предупреждал, что медленный.
Есть, например, Calitha под .net - он довольно быстро работает. Он самый навороченый по функционалу. Есть полегче, например, by Vladimir Morozov - он еще быстрее должен работать.
9 Хранимая Процедура
 
03.11.07
17:42
Голд Парсер - гавно, на больших файлах тормозит.

Калита - говно, строит хреновые большие таблицы. Написана профессором-неучем.

Coco/R рулит. Быстрый, LL.
10 Хранимая Процедура
 
03.11.07
17:45
АНТЛР - тоже отстой. Че эти придуры LL-откаты на исключениях делают. Тормозня конченная.
11 TormozIT
 
гуру
03.11.07
19:40
ANTLR3 заюзал в самом начале.
Но закопался в C# с версиями рантайм библиотек для него.
Так и не смог заставить работать сгенеренный код по своей грамматике.
12 Хранимая Процедура
 
03.11.07
20:33
Юзай SharpCoco из SharpDevelop. Он быстрый, правда Lexer самому надо писать. Но там есть Lexer по С# и VB.NET. Если LR-грамматику больше любишь, то кроме GoldParser есть еще CSTools (http://cis.paisley.ac.uk/crow-ci0/), но он падла тормозит. Да и вообше какой-то он "непрофессиональный". А в ParserGenerator (http://www.bumblebeesoftware.com/features.htm) до сих пор для С# парсер не сделали, для Явы есть. А программа то шареварная, в общем, тоже придурки.
13 TormozIT
 
гуру
03.11.07
20:53
Спасибо за просвещение!
Раньше особо не интересовался подобным софтом настолько.
А щас смотрю - все инструменты какие то неудобные, убогие, доисторические, тормозные.
14 Худой
 
04.11.07
06:15
Вообще, по моему, формат XML говно. Поэтому, все что с ним связано, ессно, будет так же работать. На более менее больших объемах, именно, сама структура и дает тормоз. Чем его не крути. Надеюсь, с ним, когда нить(чем быстрее, тем лучше) будет покончено, как попытка в воспаленных умах теоретиков реализовать "красивость" на нескольких записях. Идея, вроде, красивая. Но реализация, формат...
Пардон за офф.
15 MMF
 
04.11.07
11:10
(13) интересено, чего ты ждал от реализации парсера в СОМ-виде?
16 quest
 
04.11.07
12:35
А flex/bison - не рулят? С выводом нужной ифы в XML вызовом из командной строки?
17 MMF
 
04.11.07
12:52
и кстати, нафига тут нужен этот самый xml? ИМХО, только для того, чтобы замедлить и без того медленный разбор.
18 trdm
 
04.11.07
13:16
(17) есть альтернатива для данной задачи?
19 TormozIT
 
гуру
04.11.07
14:33
Ну я уже без XML обошелся, т.к. com-server можно использовать прямо из 1с.
Прямо в 1С строю дерево и работаю с ним. Немного неудобно и медленно, но задача решена.

По поводу XML - согласен, с ним было бы вообще очень медленно, даже если сам парсер построит дерево быстро, то засовывание дерева в XML и потом поиск по этому дереву будут довольно медленными.

На скорость пока забил, но потом нужно будет что то придумывать дальше.
NET dll от Морозова для Gold parserа заюзать хотелось бы, но это сделать из 1С пока не представляю. Ковыряться MS VC# уже порядком поднадоело. Хочется готовый пример.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn