2 5dc21454 2023-07-14 jrmu * 1-23. Write a program to remove all comments from a C program. Don't forget to handle quoted strings and character constants properly. C comments do not nest.
5 5dc21454 2023-07-14 jrmu #include <stdio.h>
6 5dc21454 2023-07-14 jrmu #define WIDTH 80
7 5dc21454 2023-07-14 jrmu #define TABSTOP 8
8 5dc21454 2023-07-14 jrmu #define BEGINSLASH 0
9 5dc21454 2023-07-14 jrmu #define COMMENT 1
10 5dc21454 2023-07-14 jrmu #define ENDSTAR 2
11 5dc21454 2023-07-14 jrmu #define NOTCOMMENT 3
12 5dc21454 2023-07-14 jrmu #define QUOTE 4
14 5dc21454 2023-07-14 jrmu int strln(char s[]);
15 5dc21454 2023-07-14 jrmu void copy(char to[], char from[]);
20 5dc21454 2023-07-14 jrmu int comment = NOTCOMMENT;
21 5dc21454 2023-07-14 jrmu while ((c = getchar())!=EOF) {
22 5dc21454 2023-07-14 jrmu if (comment == BEGINSLASH) {
23 5dc21454 2023-07-14 jrmu if (c == '*') {
24 5dc21454 2023-07-14 jrmu comment = COMMENT;
26 5dc21454 2023-07-14 jrmu printf("/");
27 5dc21454 2023-07-14 jrmu if (c != '/') {
28 5dc21454 2023-07-14 jrmu comment = NOTCOMMENT;
31 5dc21454 2023-07-14 jrmu } else if (comment == COMMENT) {
32 5dc21454 2023-07-14 jrmu if (c == '*') {
33 5dc21454 2023-07-14 jrmu comment = ENDSTAR;
35 5dc21454 2023-07-14 jrmu } else if (comment == ENDSTAR) {
36 5dc21454 2023-07-14 jrmu if (c == '/') {
37 5dc21454 2023-07-14 jrmu comment = NOTCOMMENT;
38 5dc21454 2023-07-14 jrmu } else if (c != '*') {
39 5dc21454 2023-07-14 jrmu comment = COMMENT;
41 5dc21454 2023-07-14 jrmu } else if (comment == NOTCOMMENT) {
42 5dc21454 2023-07-14 jrmu if (c == '/') {
43 5dc21454 2023-07-14 jrmu comment = BEGINSLASH;
45 5dc21454 2023-07-14 jrmu printf("%c", c);
50 5dc21454 2023-07-14 jrmu int strln(char s[])
53 5dc21454 2023-07-14 jrmu for (i=0; s[i] != '\0'; ++i)
57 5dc21454 2023-07-14 jrmu void copy(char to[], char from[])
61 5dc21454 2023-07-14 jrmu while ((to[i] = from[i]) != '\0')