Я sh написать программу на C, которая читает ввод и печатает только определенный вывод (в частности, он пропускает комментарии).
Пояснение: я бы хотел, чтобы он вел себя точно так же, как C процессор. Я считаю, что C процессоры заменяют комментарии пробелами, поэтому, как только я обнаружу конец комментария, я могу просто заменить его пробелом.
Это означает, что эта программа должна правильно обрабатывать триграфы, экранированные кавычки, и другие вещи, которые могут повлиять на комментарии.
Функция игнорирует любые символы комментария при вводе. Например, за исключением ввода внутри строк, он игнорирует весь ввод в форме комментария C (например, ввод между /*
и */
и между //
и символом новой строки (\n
)).
Обратите внимание, что во втором случае печатается символ новой строки, тогда как в первом случае не печатаются ни /*
, ни */
.
Однако внутри строки (например, "hello //world"
) программа напечатает все, что следует после спецификаторов комментария (в этом случае будет напечатано "hello //world"
, даже если «миру» предшествует одиночный строка C - спецификатор комментария).
До сих пор я пытался рассмотреть несколько случаев. Я рассмотрел определение двух переменных sngl_line
и multi_line
, чтобы определить, когда ввод находится между a // и \ n (т. Е. Sngl_line имеет значение true) или когда ввод находится между /*
и */
(т. Е. Multi_line является правда). Я написал программу, которая игнорирует комментарии вне строк, но я считаю, что иметь дело с триграфами особенно проблематично c. Возможно, мне следует разобраться с ними позже?
Я также хотел бы, чтобы моя программа выдавала ошибки (например, если есть двойная кавычка или комментарий без конца, она выводит соответствующее сообщение об ошибке). Примечание. Я успешно написал программу, которая игнорирует комментарии, как и ожидалось (за исключением случаев, когда в строках присутствуют триграфы). Поэтому я не вижу sh никакого работающего C кода; Достаточно лишь нескольких общих советов о том, как создавать правильные ошибки.