• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Выбрать вхождения строк в секции с помощью grep (связь между процедурами и функциями в файла с кодом)

zenechka

New member
04.03.2020
2
0
BIT
0
Есть куча файлов с кодом.

Задача: определить взаимосвязь между процедурами / функциями..

Т.е. на входе файлы вида:

Код:
FileName1

Procedure NameProcedure2

NameProcedure1

NameFunction1

EndProcedure

Procedure NameProcedure1

NameFunction2

EndProcedure

Function NameFunction1

EndFunction

Function NameFunction2

EndFunction

Надо получить следующую информацию:

Код:
FileName1.NameProcedure2|FileName1.NameProcedure1

FileName1.NameProcedure2|FileName1.NameFunction1

FileName1.NameProcedure1|FileName1.NameFunction2

Можно ли эту задачу решить с помощью grep или есть другие инструменты для подобных задач?
 

f22

Codeby Academy
Gold Team
05.05.2019
1 921
226
BIT
1 657
Задача: определить взаимосвязь между процедурами / функциями..
А чем определяется взаимосвязь?

Можно ли эту задачу решить с помощью grep или есть другие инструменты для подобных задач?
Скорее тут нужен не grep, а , но боюсь, я не до конца понял твою задачу.
 

zenechka

New member
04.03.2020
2
0
BIT
0
Смысл следующий...

На входе есть файлы с кодом, текстовые файлы с процедурами и функциями. Каждый файл - это именованный модуль.
Процедуры начинаются определенным ключевым словом и заканчиваются ключевым словом (Procedure ... EndProcedure или Function ... EndFunction).
Внутри каждой процедуры(функции) возможны вызовы других процедур и функций.

На выходе нужно получить информацию "Какие функции и процедуры вызываются из других функций и поцедур" (call graph)

Вызов процедуры(функции) из другого модуля происходит по названию модуля и названию самой процедуры (функции), разделенной точкой, т.е. FileName1.NameProcedure1
 

f22

Codeby Academy
Gold Team
05.05.2019
1 921
226
BIT
1 657
На входе есть файлы с кодом, текстовые файлы с процедурами и функциями. Каждый файл - это именованный модуль.
На выходе нужно получить информацию "Какие функции и процедуры вызываются из других функций и поцедур" (call graph)
Самый простой способ, который будет работать, если код отформатирован
Bash:
for file in `/bin/ls`; do
    cat $file | grep -Eo "\s{1,}Procedure.[0-9a-zA-Z\-\_]{1,}$" | xargs -i echo "${file}.{}" >> Procedure_output.txt;
done
Bash:
for file in `/bin/ls`; do
    cat $file | grep -Eo "\s{1,}Function.[0-9a-zA-Z\-\_]{1,}$" | xargs -i echo "${file}.{}" >> Procedure_output.txt;
done

Можно в одну строку
for file in `/bin/ls`; do cat $file | grep -Eo "\s{1,}Procedure.[0-9a-zA-Z\-\_]{1,}$" | xargs -i echo "${file}.{}" >> Procedure_output.txt; done
for file in `/bin/ls`; do cat $file | grep -Eo "\s{1,}Function.[0-9a-zA-Z\-\_]{1,}$" | xargs -i echo "${file}.{}" >> Function_output.txt; done
Если файл к примеру выглядит вот так
cat 001.txt
Код:
Procedure 123
askjfhd
askljdfh
        Procedure 456
                call()
                Procedure 789
                        fill()
                EndProcedure
                back()
        EndProcedure

EndProcedure
То на выходе получим
cat Procedure_output.txt 001.txt.Procedure 456 001.txt.Procedure 789

То есть тут банально проверяется, есть ли знак табуляции или пробела перед Procedure или Function
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!