| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Скрипт для конвертации select в queryRun
			 
			
			Топик про SQL PARSER SPLITTER напомнил.  
		
		
		
		
		
		
		
	Давным давно я сделал скрипт который конвертирует из axapta'овских select'ов в axapta'овскую же череду queryBuildDataSource и QueryBuildRange (писать select'ы легче и были задачи делать запросы где пользователь может использовать запятые и звездочки, что select'овский like не поддерживает) Он на питоне, так как парсить текст на х++ это то ещё удовольствие. Консольная версия : http://codepad.org/QeUzFAWw (построенный queryRun в конце после "Output") Могу скинуть версию с gui если интересно.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Stitch_MS (3), Pokersky09 (2), trud (3). | |
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Думаю будет полезно, если дополнить мануалом "как воспользоваться" всем этим 
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Если нет питона - codepad.org или ideone позволяют запускать код с интернета. Скрипт выдаст queryRun. В select правда ДАЛЕКО не всё поддерживается - скобок нет, join только inner и || тоже нет в явном виде (что не страшно, так как два && по одному полю создадут два queryRange'а, что по сути и является условием ИЛИ).Я тогда решил допиливать результат его работы руками легче чем доделывать полный парсер axapta'овских запросов, так как его основная цель - убрать рутину, нежели полностью всё конвертировать В аттаче версия с гуем. В левом окошке вводится select, внизу волшебная кнопка. Если на неё нажать, в правой части будет текст queryRun'ов или ошибка. Работает на python 3.5.1. Кстати, интересный факт про синтаксис аксапты. В ней нельзя делать array[x ? y : z], но можно array[(x ? y : z)]  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: belugin (5). | |
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну кстати X++ то парсить довольно просто, вот код который вернет вам выделенный фрагмент текста  в виде объектов во временной табличке(с типами и прочим).  
		
		
		
		
		
		
		
	если нужен просто лексический анализ, то можно использовать класс XppScanner X++: _treeMethodNode.AOTmakeXref(1);
    tmpxRefReferences = xRefCreate::makeTmp(appl.lastxRef());
    xppScanner::populateXRefTmpReferenceWithSymbols(tmpxRefReferences,origSource);
    while select tmpxRefReferences
        order by Line, Column
    { 
		 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (3), mayk (2). | |