Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #define MAXTOKEN 100
- #define BUFSIZE 100
- enum { NAME, PARENS, BRACKETS };
- void dcl(void);
- void dirdc1(void);
- int gettoken(void);
- int getch(void);
- void ungetch(int c);
- char buf[BUFSIZE]; /* buffer for ungetch */
- int bufp = 0;
- int tokentype; /*type of last token */
- char token[MAXTOKEN];/* last token string */
- char name[MAXTOKEN]; /* identifier name */
- char datatype[MAXTOKEN]; /* data type = char, int , etc */
- char out[1000]; /*output string */
- int main() /* convert declaration to words */
- {
- while (gettoken() != EOF){
- if((tokentype!=NAME)||(strcmp(token,"char")!=0&&strcmp(token,"int")!=0&&strcmp(token,"double")!=0&&strcmp(token,"float")!=0)){
- printf("please insert a valid type\n");
- for(;tokentype!='\n';gettoken());
- continue;
- }
- strcpy(datatype, token);
- out[0] = '\0';
- dcl();
- if(tokentype != '\n')
- printf("syntax error\n");
- printf("%s: %s %s\n",name,out,datatype);
- }
- return 0;
- }
- int gettoken(void)
- {
- int c, getch(void);
- void ungetch(int);
- char *p = token;
- while((c=getch())==' '|| c== '\t')
- ;
- if(c=='('){
- if((c = getch())==')'){
- strcpy(token, "()");
- return tokentype = PARENS;
- } else {
- ungetch(c);
- return tokentype = '(';
- }
- } else if (c == '['){
- for (*p++ = c; (*p++ = getch()) != ']'; )
- ;
- *p = '\0';
- return tokentype = BRACKETS;
- } else if (isalpha(c)) {
- for (*p++ = c; isalnum(c = getch()); )
- *p++ = c;
- *p = '\0';
- ungetch(c);
- return tokentype = NAME;
- } else
- return tokentype = c;
- }
- void dcl(void){
- int ns;
- for(ns = 0;gettoken() == '*';)
- ns++;
- dirdc1();
- while(ns-- > 0)
- strcat(out," pointer to");
- }
- void dirdc1(void){
- int type;
- if(tokentype == '(') {
- dcl();
- if(tokentype != ')')
- printf("error: missing )\n");
- }
- else if (tokentype == NAME)
- strcpy(name,token);
- else
- printf("error: expected name or (dcl)\n");
- while((type = gettoken()) == PARENS || type == BRACKETS)
- if(type == PARENS)
- strcat(out, " function returning");
- else {
- strcat(out, " array");
- strcat(out, token);
- strcat(out, " of");
- }
- }
- int getch(void) /* get a (possibly pushed-back) character */
- {
- return (bufp > 0) ? buf[--bufp] : getchar();
- }
- void ungetch(int c) /* push character back on input */
- {
- if (bufp >= BUFSIZE)
- printf("ungetch: too many characters\n");
- else
- buf[bufp++] = c;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement