Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- void skipcomment(void);
- void skipstring(void);
- int getnext(void);
- void readline(void);
- int matchbracket(char);
- int addbracket(char);
- int openbrackets(int);
- void cleanstack(void);
- #define MAXLINE 101
- #define START 1
- #define COMMENT_START '\'
- #define NEW_LINE '\n'
- #define STRING '"'
- #define END 2
- #define RUNNING 1
- int main(){
- while(c=getnext() != EOF)
- switch(c){
- case STRING:
- skipstring();
- break;
- case COMMENT_START:
- if((c=getnext()) == '*')
- skipcomment();
- break;
- case '{': case '(': case '[':
- addbracket(c);
- break;
- case '}': case ')': case ']':
- if(!bracketmatch(c))
- printerr();
- break;
- case NEW_LINE:
- if(openbrackets(RUNNING))
- printerr();
- cleanstack();
- break;
- }
- if(openbrackets(END))
- printerr();
- }
- char line[MAXLINE+1];
- int ind = START;
- char getnext(){
- if(ind==START || ind>MAXLINE || line[ind] == '\0')
- readline();
- return line[ind++];
- }
- void readline(){
- for(ind = START ; ind <= MAXLINE && (line[ind] = getchar()) != '\n' && line[ind] != EOF ; ind++)
- ;
- line[++ind] = '\0';
- ind = START;
- }
- void skipstring(){
- char c;
- while((c=getnext()) != '"')
- if(c=='\\' && (c=getnext()) == '"')
- continue;
- }
- void skipcomment(){
- char c;
- while((c=getnext()))
- if(c == '*'){
- while(c == '*') /* skip all asterisks */
- c = getnext();
- if(c == '/') /* if closed with an '/' thats the end of the comment */
- return;
- }
- }
- char brackstack[MAXLINE];
- int k = START;
- int c_bracket = 0; /* holds the amount of curly/round/square brackets */
- void addbracket(char brack){
- if(brack == '[')
- brackstack[k++] = ']';
- else if(brack == '(')
- brackstack[k++] = ')';
- else
- c_bracket++;
- }
- int matchbracket(char brack){
- if(k<START)
- return 0;
- if(brack == ']' || brack == ')')
- return brack == brackstack[k]?k--:FALSE;
- else if(c_bracket<=0)
- return 0;
- else {
- c_bracket++;
- return 1;
- }
- }
- void cleanstack(){
- k = START;
- }
- int openbrackets(int state){
- if(state == RUNNING)
- return k != START;
- else if(state == END)
- return k != START && c_bracket==0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement