From 5018e06c580dd21c958ec1672c26a3448faf0c55 Mon Sep 17 00:00:00 2001 From: zlg Date: Wed, 13 Feb 2013 20:48:44 -0600 Subject: Add license file, reorganize project --- 1-23_decomment.c | 84 -------------------------------------------------------- 1 file changed, 84 deletions(-) delete mode 100644 1-23_decomment.c (limited to '1-23_decomment.c') diff --git a/1-23_decomment.c b/1-23_decomment.c deleted file mode 100644 index 63193cd..0000000 --- a/1-23_decomment.c +++ /dev/null @@ -1,84 +0,0 @@ -#include - -/* The C Programming Language: 2nd Edition - * Exercise 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." - * - * I'm not sure why the instructions tell the reader to account for quoted - * strings and character constants. Comments always begin with either // or - * /*, so that sets the boundary of state. - * - * The states for this program are IN_MULTI for a multi-line comment, - * IN_SINGLE for a single line comment, and OUT for being outside a comment. - * These three states are all I need to determine whether I should output the - * contents of the C file or not. Characters are only output when the state is - * OUT, and there are conditions for getting into and out of comment state. - * - * I don't know of any other way to do this without invoking some higher-level - * libraries. - */ - -#define IN_MULTI 1 -#define IN_SINGLE 2 -#define OUT 0 - -char c, p; -int status; - -int main() { - // Treat input like a stream, since that's all the K&R has explained so far. - while ((c = getchar()) != EOF) { - - // Check for the ways to open a comment, and set state accordingly - if (c == '/' && status == OUT) { - // Look ahead and store the character that's returned - p = getchar(); - - if (p == '*') { - status = IN_MULTI; - } else if (p == '/') { - status = IN_SINGLE; - } else { - putchar(c); - putchar(p); - continue; - } - } - - // Ignore everything in a single line comment until a newline - if (status == IN_SINGLE) { - - if (c == '\n') { - putchar(c); - status = OUT; - continue; - } - - } - - // Ignore everything until you reach the end of a multi comment - if (status == IN_MULTI && c == '*') { - p = getchar(); - - if (p == '/') { - status = OUT; - continue; - } - - } - - // Output everything when we're not in a comment! - if (status == OUT) { - putchar(c); - } - - } - - /* derpsauce - * - * - * Testing comment for the lulz. lolololol - */ -} -- cgit v1.2.3-54-g00ecf