[ create a new paste ] login | about

Link: http://codepad.org/VrAoN9Cf    [ raw code | fork ]

C, pasted on Oct 12:
#include <stdio.h>

/*
	現在の状態を示す定数
*/
enum{
	MODE_NORMAL,
	MODE_COMMENT_BLOCK,
	MODE_COMMENT_LINE,
	MODE_LITERAL,
	MODE_ESCAPE,
};

int main(void) // this is main function
{
	int c, c_prev=0;
	int mode=MODE_NORMAL;
	int line_no=1;
	int end_quote=0;

	while((c=getchar())!=EOF)
	{
		switch(mode)
		{
			case MODE_COMMENT_BLOCK:
				if(c_prev=='*' && c=='/')
				{
					mode=MODE_NORMAL;
					printf("/\n");
				}
				else
				{
					putchar(c);
				}
				break;
			case MODE_COMMENT_LINE:
				if(c=='\n')
				{
					mode=MODE_NORMAL;
					printf("\n");
				}
				else
				{
					putchar(c);
				}
				break;
			case MODE_ESCAPE:
				mode=MODE_LITERAL;
				break;
			case MODE_LITERAL:
				if(c==end_quote)
				{
					mode=MODE_NORMAL;
				}
				if(c=='\\')
				{
					mode=MODE_ESCAPE;
				}
				break;
			default:
				if(c_prev=='/' && c=='*')
				{
					mode=MODE_COMMENT_BLOCK;
					printf("Line:%d  /*", line_no);
				}
				if(c_prev=='/' && c=='/')
				{
					mode=MODE_COMMENT_LINE;
					printf("Line:%d  //", line_no);
				}
				if(c=='"' || c=='\'')
				{
					mode=MODE_LITERAL;
					end_quote=c;
				}
				break;
		}
		if(c=='\n') line_no++;
		c_prev=c;
	}

	return 0;
}


Create a new paste based on this one


Comments: