2016-11-22 13 views
1

Я работаю над проектом для автоматизации диаграммы COBOL для класса. Я разрабатываю с помощью C# .net console application.please, помогаю мне отслеживать имя процедуры, где выполняется оператор выполнения в используемом ниже примере.чтение кода cobol с C# .net для генерации графа вызовов

**Z-POST-COPYRIGHT. 
     move 0 to RETURN-CODE 
     perform Z-WRITE-FILE** 

как отслеживать имя процедуры «Z-Post-COPYRIGHT», где процедура «Z-запись файл» называется? Единственная идея, которую я мог думать в терминах COBOL через отступ как процедура имена всегда имеют отступы. Пожалуйста, помогите.Идеально в базе данных код должен отслеживать имя процедуры после слова «выполнить» и процедуры, под которой он вызывается (в этом случае это Z-POST-COPYRIGHT).

+1

Существует вероятность того, что этот абзац фактически хранится в тетради. Если вы посмотрите на скомпилированную версию программы, вы сможете ее найти, даже если это копия. – SaggingRufus

+2

Непонятно из вашего вопроса, что вы хотите. Как предположил @SaggingRufus, и если вы говорите о MBB Mainframe, в списке компиляции (по параметру компилятора) есть перекрестные ссылки имен процедур/данных-имен. Итак, какой компилятор и ОС вы говорите о запуске COBOL? –

+0

@ Sandy, ответ или комментарий сработали для вас? Если да, пожалуйста, отметьте ответ, который сработал для вас, или укажите неясные точки. –

ответ

1

Я предполагаю, что вы хотите сделать это «самостоятельно» без внешних инструментов (более быстрый подход можно найти в конце).

Вы сначала должны «знать» свой источник:

  • который компилятор это скомпилирован с (получить пособие для этого компилятора)
  • , какие варианты были использованы

Тогда у вас есть для подготовки источника:

  • включают в себя тетради (выполняющие заданные правила REPLACING, если таковые имеются)
  • если источник находится в ссылочном формате свободной форме: сцепить содержимое последней строки и текущей строки, если вы нашли - в колонке 7
  • проверка для REPLACE и изменить результат соответственно
  • удалить все комментарии (возможно только * и \ в столбце 7 в формате фиксированной формы или аналогичных (расширения, такие как «переменный» формат/«терминальный» формат », ... существуют, может быть, только встроенные комментарии - когда в ссылочном формате свободной формы, в противном случае возможно встроенный комментарии *> или специальные расширения для компилятора, такие как |) - в зависимости от дальнейшей реорганизации, которую вы хотите сделать, может быть хорошей идеей извлечь их и сохранить они, по крайней мере, со ссылкой номер строки

вы, наконец, можно отслеживать имя процедуры со следующим правилом:

  • идут назад к последнему периоду сепаратора (есть несколько правил, но правило «в хотя бы один разрыв строки, другой период, пробел запятая или точка с запятой «[Я никогда не видел последних двух в реальном коде, но это возможно» должно быть достаточно)
  • проверить, существует ли только одно слово между этим разделителем период и следующий
  • если это слово не зарезервировано Слово COBOL (это зависит s на вашем компиляторе), скорее всего, это имя процедуры

Начните с этого момента и проверьте вывод, а затем оцените правильность правильных ложных срабатываний или отсутствующих записей.

Если вы хотите сделать больше, чем только извлечь процедурные имена PERFORM и GO TO (вы должны по крайней мере проверить источники для PERFROM ... THRU), то это может добраться до много работы ...


Faster подход с внешними инструментами:

  • Выполнить COBOL компилятор на полных источников и сказать ему, чтобы сделать preparsing только - таким образом, у вас есть большая вторая точка решена уже
  • если у вас есть возможность: сообщить компилятору или внешнему инструменту о создании таблицы символов/перекрестной ссылки - это скажет вам, в какой строке находится процедура, и ее имя (вы можете просто найти правильную процедуру, сравнив строку)

Только примечание: Вы можете проверить GnuCOBOL (formerly OpenCOBOL) для preparsing и/или генерации символов таблиц/перекрестные ссылки и/или printcbl для полного внешнего инструмента делает preparsing и/или cobxref для полной перекрестной ссылки поколение.

+0

Для IBM Enterprise COBOL также может возникнуть необходимость иметь дело с [BASIS] (http://www.ibm.com/support/knowledgecenter/SS6SG3_6.1.0/com.ibm.cobol61.ent.doc/PGandLR/ref /rlcdsbas.html) инструкции для составителя компилятора и ее братьев. – cschneid

+0

@cschneid: спасибо за комментарий и ссылку. Можете ли вы предоставить ссылку на образец? –

+0

Боюсь, у меня нет образца, извините. – cschneid

 Смежные вопросы

  • Нет связанных вопросов^_^