⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 参照清华大学《编译原理》写的cmm语言词法分析程序
💻 C
📖 第 1 页 / 共 2 页
字号:
            case ifsym:                  printf("ConditionStatement-->\n");                  printspace(lev+iden);                  printf("keyword:if\n");                  getsymdo;                  if (sym == lparen) {                        printspace(lev+iden);                        printf("lparen:(\n");                        getsymdo;                        condition(lev+iden);                        if (sym == rparen) {                              printspace(lev+iden);                              printf("rparen:)\n");                              getsymdo;                              statement(lev+iden);                              while (sym == elsesym) {                                    printspace(lev+iden);                                    printf("keyword:else\n");                                    getsymdo;                                    if (sym == ifsym) {                                          printspace(lev+iden);                                          printf("keyword:if\n");                                          getsymdo;                                          if (sym == lparen) {                                                printspace(lev+iden);                                                printf("lparen:(\n");                                                getsymdo;                                                condition(lev+iden);                                                if (sym == rparen) {                                                      printspace(lev+iden);                                                      printf("rparen:)\n");                                                      getsymdo;                                                      statement(lev+iden);                                                }                                          }                                    }                                    else {                                          statement(lev+iden);                                    }                              }                        }                  }                  break;            case whilesym:                  printf("WhileStatement-->\n");                  printspace(lev+iden);                  printf("keyword:while\n");                  getsymdo;                  if (sym == lparen) {                        printspace(lev+iden);                        printf("lparen:(\n");                        getsymdo;                        condition(lev+iden);                        if (sym == rparen) {                              printspace(lev+iden);                              printf("rparen:)\n");                              getsymdo;                              statement(lev+iden);                        }                  }                  break;            case readsym:                  printf("ReadStatement-->\n");                  printspace(lev+iden);                  printf("keyword:read\n");                  getsymdo;                  if (sym == lparen) {                        printspace(lev+iden);                        printf("lparen:(\n");                        getsymdo;                        if (sym == ident) {                              printspace(lev+iden);                              printf("identifier:%s\n",id);                              getsymdo;                        }                        while (sym == comma) {                              printspace(lev+iden);                              printf("comma:,\n");                              getsymdo;                              if (sym == ident) {                                    printspace(lev+iden);                                    printf("identifier:%s\n",id);                                    getsymdo;                              }                        }                         if (sym == rparen) {                              printspace(lev+iden);                              printf("rparen:)\n");                              getsymdo;                              if (sym == semicolon) {                                    printspace(lev+iden);                                    printf("semicolon:;\n");                                    getsymdo;                              }                        }                  }                  break;            case lbrace:                  printf("CompoundStatement-->\n");                  printspace(lev+iden);                  printf("lbrace:{\n");                  getsymdo;                  while (sym != rbrace) {                        statement(lev+iden);                  }                  if (sym == rbrace) {                        printspace(lev+iden);                        printf("rbrace:}\n");                        getsymdo;                  }                  break;            case writesym:                  printf("WriteStatement-->\n");                  printspace(lev+iden);                  printf("keyword:write\n");                  getsymdo;                  if (sym == lparen) {                        printspace(lev+iden);                        printf("lparen:(\n");                        getsymdo;                        expression(lev+iden);                        while(sym == comma) {                              printspace(lev+iden);                              printf("comma:,\n");                              getsymdo;                              expression(lev+iden);                        }                        if (sym == rparen) {                              printspace(lev+iden);                              printf("rparen:)\n");                              getsymdo;                              if (sym == semicolon) {                                    printspace(lev+iden);                                    printf("semicolon:;\n");                                    getsymdo;                              }                        }                  }            default:                  break;      }}int condition(int lev){      printspace(lev);      printf("Condition-->\n");      expression(lev+iden);      switch (sym) {            case eql:                  printspace(lev+iden);                  printf("equall: ==\n"); getsymdo; break;            case neq:                  printspace(lev+iden);                  printf("not equal: !=\n"); getsymdo; ;break;            case gtr:                  printspace(lev+iden);                  printf("greater than:>\n"); getsymdo; ;break;            case geq:                  printspace(lev+iden);                  printf("greater or equal:>=\n"); getsymdo; ;break;            case lss:                  printspace(lev+iden);                  printf("less than:<\n"); getsymdo; ;break;            case leq:                  printspace(lev+iden);                  printf("less or equal:<=\n"); getsymdo; ;break;            default:                  break;      }      expression(lev+iden);}int vardeclaration(int lev) {      printspace(lev);      printf("VarDeclaration-->\n");      printspace(lev+iden);      if (sym == intsym) printf("keyword:int\n");      else printf("keyword:real\n");      getsymdo;      while (sym != semicolon) {            vardeclarationid(lev+iden);            if (sym == assign) {                  printspace(lev+iden);                  printf("assign operator:=\n");                  getsymdo;                  varinitializer(lev+iden);                  if(sym == comma) {                        printspace(lev+iden);                        printf("comma:,\n");                        getsymdo;                  }            }      }      if (sym == semicolon) {            printspace(lev+iden);            printf("semicolon:;\n");            getsymdo;      }} int vardeclarationid(int lev){      printspace(lev);      printf("VarDeclarationid-->\n");      if (sym == ident) {            printspace(lev+iden);            printf("identifier:%s\n",id);            getsymdo;            while (sym == lbracket) {                  printspace(lev+iden);                  printf("lbracket:[\n");                  getsymdo;                  if (sym == rbracket) {                        printspace(lev+iden);                        printf("rbracket:]\n");                        getsymdo;                  }            }      }}int varinitializer(int lev){      printspace(lev);      printf("VarInitializer-->\n");      if (sym == lbrace) {            arrayinitializer(lev+iden);      }      else{            expression(lev+iden);      }}int arrayinitializer(int lev) {      printspace(lev);      printf("ArrayInitializer-->\n");      printspace(lev+iden);      printf("lbrace:{\n");      getsymdo;      while(sym != rbrace) {            varinitializer(lev+iden);            if (sym == comma) {                  printspace(lev+iden);                  printf("comma:,\n");                  getsymdo;            }      }      if (sym == rbrace) {            printspace(lev+iden);            printf("rbrace:}\n");            getsymdo;      }}int expression(int lev) {      printspace(lev);      printf("Expression-->\n");      item(lev+iden);      while (sym == plus || sym == minus) {            printspace(lev+iden);            if (sym == plus) printf("plus:+\n");            else printf("minus:-\n");            getsymdo;            item(lev+iden);      }}int item(int lev) {      printspace(lev);      printf("Item-->\n");      factor(lev+iden);      while (sym == times || sym == slash) {            printspace(lev+iden);            if (sym == times)  printf("times:*\n");            else printf("slash:/\n");            getsymdo;            factor(iden+lev);      }}int factor(int lev) {      printspace(lev);      printf("Factor-->\n");      printspace(lev+iden);      switch(sym) {            case ident:                  printf("identifier:%s\n",id); getsymdo; break;            case number:                  printf("number:%d\n",num); getsymdo; break;            case real:                  printf("real:%f\n",realvalue); getsymdo; break;            case minus:                  printf("minus:-\n");                  getsymdo;                  factor(lev+iden);                  break;            case lparen:                  printf("lparen:(\n");                  getsymdo;                  expression(lev+iden);                  if (sym == rparen) {                        printspace(lev+iden);                        printf("rparen:)\n");                        getsymdo;                  }                  break;            default:break;      }}int constdeclaration(int lev) {      printspace(lev);      printf("ConstDeclaration\n");      printspace(lev+iden);      printf("keyword:const\n");      getsymdo;      if (sym == intsym || sym == realsym) {            printspace(lev+iden);            if (sym == intsym) printf("keyword:int\n");            else printf("keyword:real\n");            getsymdo;            while (sym != semicolon) {                  if (sym == ident) {                        printspace(lev+iden);                        printf("identifier:%s\n",id);                        getsymdo;                        if (sym == assign) {                              printspace(lev+iden);                              printf("assign operator:=\n");                              getsymdo;                              printspace(lev+iden);                              if (sym == number) {                                    printf("number:%d\n",num);                              }                              else if (sym == real) {                                    printf("real:%f\n",realvalue);                              }                              getsymdo;                              if (sym == comma) {                                    printspace(lev+iden);                                    printf("comma:,\n");                                    getsymdo;                              }                        }                  }            }            if (sym == semicolon) {                  printspace(lev+iden);                  printf("semicolon:;\n");                  getsymdo;            }      }}int error(int eid){      switch(eid){      }}void printspace(int n) {      int i = n;      for (i = 0; i < n; i++) {            printf(" ");      }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -