515.44K
Category: programmingprogramming

Реализация программы по удалению комментариев из кода на языке Си

1.

Министерство науки и высшего образования Российской Федерации
Санкт-Петербургский политехнический университет Петра Великого
Институт кибербезопасности и защиты информации
Реализация программы по удалению комментариев из кода на
языке Си.
Выполнил
студент группы
И. Г. Белокопытов
Руководитель
доцент ИКиЗИ,
к.т.н.
П. В. Семьянов
Санкт-Петербург 2022

2.

Цель и задачи
Цель работы – Реализовать алгоритм удаления комментариев из кода на языке Си и проверить
его применимость к конкретной задаче.
Задачи:
1. Исследовать виды комментариев на языке Си.
2. Провести анализ взаимодействия комментариев с другими символами на языке Си.
3. Разработать алгоритм для удаления комментариев из кода на языке Си.
4. Реализовать алгоритм для удаления комментариев из кода на языке Си.
5. Проверить применимость алгоритма к конкретной задаче.
6. Оценить время работы алгоритма.
2

3.

Актуальность
Когда создается большой проект где задействовано много программистов, комментарии в
коде это неотъемлемая часть в реализации проекта. Ведь очень трудно написать код так,
чтоб его поняли без дополнительной информации. Однако в реальности, большинство
комментариев несут в себе только проблемы. Например:
• Комментарии захламляют непосредственный код, ухудшают его читаемость.
• Комментарии требуют время на написание и поддержку.
• Комментарии написаны криво и только путают.
Именно из-за этого, есть потребность в удалении комментариев из кода. Но когда файл
на более чем 1000 строк, необходимо делать это с помощью программы по удалению
комментариев.
3

4.

Решение задачи 1
В Си комментарии возможно осуществить одним из двух способов.
1. Символы /* начинают комментарий, который заканчивается символами */. Вся данная
последовательность символов эквивалентна символу пропуска. Это очень полезно для
многострочных комментариев и изъятия частей программы в процессе редактирования.
2. Символы // начинают комментарий, заканчивающийся в конце строки, на которой они
появились. Как и в предыдущем случае, вся последовательность символов соответствует
пропуску. Однако если поставить \ в конце строки, то комментарий продлится до конца
следующей строки.
4

5.

Решение задачи 2
В Си строковые данные возможно осуществить одним из двух способов:
1. Символ “ начинает строку, которая заканчивается символом “ или концом строки.
Однако если поставить \ в конце строки, то комментарий продлится до конца
следующей строки или символом “ на следующей строке.
2. Символ ‘ начинает строку, которая заканчивается символом ‘ или концом строки.
Если поставить \ в конце строки, то комментарий не продлится до конца
следующей строки.
Так же существуют специальные символы которые используются для конкретного
обозначения данных в строках на Си.
● \” - знак “
● \’ – знак ‘
● \\ - символ нулевого элемента
Такие наборы знаков при обозначении в строковых константах не влияют на открытие,
закрытие или перенос.
5

6.

Решение задачи 3
Будет храниться два последовательных элемента файла и для каждого случая будет
условие его обработки.
1. Если символ “ и до этого не было строки то все что будет идти до следующего “ (но не
\”) или до конца строки, или символа \ в конце строки(но не символа \\ в конце строки)
и последующей строки, будет записываться в новых файл.
2. Если символ ‘ и до этого не было строки то все что будет идти до следующего ‘ (но не
\’) или до конца строки, будет записываться в новых файл.
3. Если нет строки то при паре символов /* не записываем в новый файл до того
момента, когда не увидим пару символов */.
4. Если нет строки то при паре символов // не записываем в новый файл до того
момента, когда не увидим конец строки или если видим символ \ в конце строки то и
следующую строку не записываем.
5. Если же ничего из пунктов 1 – 4 то просто записываем в новый файл.
6

7.

Решение задачи 4
1.
2.
3.
4.
5.
6.
Будем находиться в цикле while пока !feof(test.c)
(пока не конец исходного файла) и две
переменные cp и cp1 будут хранить два подряд
идущих символа из test.c.
Заведем две переменные kav1 и kav2 которые
будут обозначать являемся мы в строке или нет.
Если kav1 = 1 записываем все в новый файл пока
не увидим конец строки (\n) или кавычку ‘(но не \’),
потом обнуляем kav1.
Если kav2 = 1 записываем все в новый файл пока
не увидим конец строки (\n) или кавычку “(но не \”)
или знак \ в конце строки(но не \\), но тогда
выполняем все из пункта 4 еще раз, потом
обнуляем kav2.
Если kav1 + kav2 = 0 и есть пара символов /* то не
записываем ничего в файл до момента конца
файла или пар символов */.
Если kav1 + kav2 = 0 и есть пара символов // то не
записываем ничего в файл до момента конца
строки или знак \ в конце строки(но не \\), тогда
все из пункта 6 еще раз.
7

8.

Решение задачи 5
После реализации алгоритма следует применить его к решению конкретной задачи а именно
убрать комментарии из файла test.c и записать новый результат в файл test.wc.
test.c
test.wc
Как видно из файла полностью удалились комментарии, а значит программа работает.
8

9.

Решение задачи 6
Так как мы идем по исходному файлу и циклы в программе итерируются по файлу то
итоговая сложность алгоритма составляет O(количество символов в исходном файле).
9

10.

Результаты
1.
Изучено виды специальных символов и комментариев на языке Си.
2.
Установлена влияние и взаимодействие комментариев и специальных символов на языке Си.
3.
Разработан алгоритм по удаление комментариев из кода на языке Си.
4.
Был реализован алгоритм по удаление комментариев из кода на языке Си.
10

11.

Заключение
Был Реализован алгоритм удаления комментариев из кода на языке Си.
Так же была проверена его работоспособность на конкретных примерах.
11
English     Русский Rules