Как я могу удалить многострочные комментарии в файле C, чтобы использовать Python? - PullRequest
0 голосов
/ 17 июня 2020

Я читаю файл C с помощью .readlines (), чтобы получить все отдельные строки файла кода C как элементы списка. Если какой-либо из элементов списка (например, C строка кода) является частью многострочного комментария, его необходимо заменить на '' (т.е. удалить его, но он будет занимать соответствующий индекс списка), чтобы индексация следующих строк была не изменено. Пожалуйста, проверьте мой код для деталей.

import re

#open and read sample.c so that code lines of sample.c are the element of list 'flist'

with open('sample.c',mode='r') as myfile: 
    flist = myfile.readlines() 


pattern1 = re.compile(r'\/{2}.*')         # to match //
pattern2 = re.compile('\/\*.*\*\/')       # to match /*......*/ in a single line or element of flist
pattern3 = re.compile('\/\*')             # to match /*
pattern4 = re.compile('\*\/')             # to match */ 

# to delete comments present in a single code line or can say in an individual element of 'flist', it's working fine.

for index,line in enumerate(flist):
    if pattern2.search(line):
       flist[index] = pattern2.sub("",line)
    if pattern1.search(line):
        flist[index] = pattern1.sub("",line)

# to delete comment starting in one line and ending in the subsequent line, **this following part is not working** 

cmnt_e = True
cmnt_s = False

for index,line in enumerate(flist):
    if pattern3.search(line) and cmnt_e == True:
        cmnt_s = True
        cmnt_e = False
    if pattern3.search(line) and cmnt_s == True:
        cmnt_e = True
        cmnt_s = False
    if cmnt_s == True and cmnt_e == False:
        flist[index] = ''

1 Ответ

0 голосов
/ 17 июня 2020

Я не особо вдавался в подробности, но вы используете pattern3 как для начала, так и для конца комментариев. Я думаю, это должно быть что-то вроде

    if pattern3.search(line) and cmnt_e == True:
        cmnt_s = True
        cmnt_e = False
    if pattern4.search(line) and cmnt_s == True:
        cmnt_e = True
        cmnt_s = False

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

//*
ACTIVE_CODE
/*/
INACTIVE_CODE
//*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...