/******************************************************
KnR 1-24
--------
Write a program to check the syntax of a C program
for matching {} () "" '' []
******************************************************/
#include
#define MAXLINE 1000 /* max input line size */
char line[MAXLINE]; /*current input line*/
int getline(void); /* taken from the KnR book. */
int main()
{
int len=0;//输入的长度
int t=0;
int brace=0;//方括号的个数,'['加1,']'减1
int bracket=0;//大括号的个数,'['加1,']'减1
int parenthesis=0;//小括号的个数,'['加1,']'减1
int s_quote=1;//单引号奇偶标志
int d_quote=1;//双引号奇偶标志
while ((len = getline()) > 0 )
{
t=0;
while(t < len)
{
if( line[t] == '[')
{
brace++;
}
if( line[t] == ']')
{
brace--;
}
if( line[t] == '{')
{
bracket++;
}
if( line[t] == '}')
{
bracket--;
}
if( line[t] == '(')
{
parenthesis++;
}
if( line[t] == ')')
{
parenthesis--;
}
if( line[t] == '\'')
{
s_quote *= -1;
}
if( line[t] == '"')
{
d_quote *= -1;
}
t++;
}
}
if(d_quote !=1)
printf ("Mismatching double quote mark\n");
if(s_quote !=1)
printf ("Mismatching single quote mark\n");
if(parenthesis != 0)
printf ("Mismatching parenthesis\n");
if(brace != 0)
printf ("Mismatching brace mark\n");
if(bracket != 0)
printf ("Mismatching bracket mark\n");
if( bracket==0 && brace==0 && parenthesis==0 && s_quote == 1 && d_quote == 1)
printf ("Syntax appears to be correct.\n");
return 0;
}
int getline(void)
{
int c, i;
extern char line[];
for ( i=0;i
line[i] = c;
if(c == '\n')
line[i++] = c;
line[i] = '\0';
return i;
}