Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Скрипт для поиска необъявленных переменных (число прочтений - 2147 )
rt001
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Зарегистрирован: 31. Января 2013
Скрипт для поиска необъявленных переменных
31. Января 2013 :: 09:37
Печать  
Нужна функция, которая бы вывела список не объявленных переменных через Перем

к примеру
Код
Выбрать все
Процедура Имя()
...
Стр = "";
Для Сч = 1 По 10 Цикл
...
КонецЦикла;
...
КонецПроцедуры 



требуется получить список всех переменных, которые не объявлены через Перем; в данном случае Сч и Стр

в какую сторону копать, есть ли методы в "стандартных" скриптах чтобы получить список переменных внутри процедуры?
  
Наверх
 
IP записан
 
kuntashov
Full Member
***
Отсутствует


1С:Специалист

Сообщений: 130
Местоположение: Саратов
Зарегистрирован: 13. Июня 2006
Пол: Мужской
Re: Скрипт для поиска необъявленных переменных
Ответ #1 - 31. Января 2013 :: 12:59
Печать  
SyntaxAnalysis.wsc, который в составе ОпенКонфа точно позволяет это сделать.

Его можно сделать независимым от ОпенКонфа, как WSC, который как COM-объект можно было бы использовать из 1С (7.7 и 8.0), не очень сложно в принципе. Возможно для этих целей даже лучше будет использовать не SyntaxAnalysis.wsc из ОпенКонфа, а https://snegopat.ru/scripts/finfo?fco=0&name=Libs/SyntaxAnalysis.js из состава скриптов для Снегопата, там код более независим от окружения (пару раз Message используется и все) - обернуть его обратно в WSC - и COM-объект готов.
  

С уважением, &&Александр Кунташов&&http://kuntashov.ru/
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Скрипт для поиска необъявленных переменных
Ответ #2 - 31. Января 2013 :: 16:21
Печать  
Возможно в помощь будут такие регулярки:
Код
Выбрать все
\s*(?:(?:procedure)|(?:function)|(?:процедура)|(?:функция))[\s\S]*?(?:(?:endprocedure)|(?:endfunction)|(?:конецпроцедуры)|(?:конецфункции)) - находим процедуру
(?:перем|var)\s[^;]*?;	   - поиск строк объявления Переменных;
\s*([\wА-яёЁ\d]+)\s*[,;]	   - поиск названий переменных в строке объявлений
(?:^|;)\s*?([\wА-яёЁ\d]+)\s*?=   - поиск всех переменных в функции/процедуре 



Т.е.:
1. Сначала ищем процедуру/функцию.
2. Ищем названия переменных в найденной функции;
3. Ищем строки определения переменных.
4. Ищем названия переменных в строках определения
5. сравниваем списки того, что используется и того, что определено
« Последняя редакция: 31. Января 2013 :: 22:23 - alyuev »  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
rt001
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Зарегистрирован: 31. Января 2013
Re: Скрипт для поиска необъявленных переменных
Ответ #3 - 31. Января 2013 :: 20:49
Печать  
благодарствую, друзья! Очень довольный

бум разбираццо Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать