Blame


1 5dc21454 2023-07-14 jrmu /*
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.
3 5dc21454 2023-07-14 jrmu */
4 5dc21454 2023-07-14 jrmu
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
13 5dc21454 2023-07-14 jrmu
14 5dc21454 2023-07-14 jrmu int strln(char s[]);
15 5dc21454 2023-07-14 jrmu void copy(char to[], char from[]);
16 5dc21454 2023-07-14 jrmu
17 5dc21454 2023-07-14 jrmu main()
18 5dc21454 2023-07-14 jrmu {
19 5dc21454 2023-07-14 jrmu int c;
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;
25 5dc21454 2023-07-14 jrmu } else {
26 5dc21454 2023-07-14 jrmu printf("/");
27 5dc21454 2023-07-14 jrmu if (c != '/') {
28 5dc21454 2023-07-14 jrmu comment = NOTCOMMENT;
29 5dc21454 2023-07-14 jrmu }
30 5dc21454 2023-07-14 jrmu }
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;
34 5dc21454 2023-07-14 jrmu }
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;
40 5dc21454 2023-07-14 jrmu }
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;
44 5dc21454 2023-07-14 jrmu } else {
45 5dc21454 2023-07-14 jrmu printf("%c", c);
46 5dc21454 2023-07-14 jrmu }
47 5dc21454 2023-07-14 jrmu }
48 5dc21454 2023-07-14 jrmu }
49 5dc21454 2023-07-14 jrmu }
50 5dc21454 2023-07-14 jrmu int strln(char s[])
51 5dc21454 2023-07-14 jrmu {
52 5dc21454 2023-07-14 jrmu int i;
53 5dc21454 2023-07-14 jrmu for (i=0; s[i] != '\0'; ++i)
54 5dc21454 2023-07-14 jrmu ;
55 5dc21454 2023-07-14 jrmu return i;
56 5dc21454 2023-07-14 jrmu }
57 5dc21454 2023-07-14 jrmu void copy(char to[], char from[])
58 5dc21454 2023-07-14 jrmu {
59 5dc21454 2023-07-14 jrmu int i;
60 5dc21454 2023-07-14 jrmu i = 0;
61 5dc21454 2023-07-14 jrmu while ((to[i] = from[i]) != '\0')
62 5dc21454 2023-07-14 jrmu ++i;
63 5dc21454 2023-07-14 jrmu }