• 0916 编程实验一 词法分析程序


    # include<stdio.h> # include<stdlib.h> # include<string.h>

    int panduan(char tmp[]) {  char b[6][10] = {"begin", "if", "then", "while", "do", "end", };  int k = 0;

     while(k < 6)     // 临时变量tmp 与 字符串b[k] 进行比较  {   if(strcmp(tmp, b[k]) == 0)   {    printf("<%s, %d> ", tmp, k+1);    return 0;   }   k++;  }  printf("<%s, 10> ", tmp);

     return 0; }

    void cifafenxi(char a[]) {  int i = 0, j = 0;  char tmp[10];  int flag = 0;

     while(a[i] != '')  {   if(a[i] >= 'a' && a[i] <= 'z')  // 判断标识符   {    tmp[j] = a[i];    j++;    while((a[i+1] >= 'a' && a[i+1] <= 'z') || (a[i+1] >= '0' && a[i+1] <= '9'))    {     i++;     tmp[j] = a[i];     j++;    }    tmp[j] = '';    j = panduan(tmp);   }

      if(a[i] >= '0' && a[i] <= '9')  // 判断数字   {    tmp[j] = a[i];        j++;    while(a[i+1] >= '0' && a[i+1] <= '9')    {     i++;     tmp[j] = a[i];     j++;    }    tmp[j] = '';    printf("<%s, 11> ", tmp);    j = 0;   }

      switch(a[i])  // 判断符号   {   case '+':printf("<+, 13> ");break;   case '-':printf("<-, 14> ");break;   case '*':printf("<*, 15> ");break;   case '/':printf("</, 16> ");break;   case ':':    {     if(a[i+1] == '=')      printf("<:=, 18> ");     else      printf("<:, 17> ");    }break;   case '<':    {     if(a[i+1] == '=')      printf("<<=, 21> ");     else if(a[i+1] == '>')      printf("<<>, 22> ");     else      printf("<<, 20> ");    }break;   case '>':    {     if(a[i+1] == '=')      printf("<>=, 24> ");     else      printf("<>, 23> ");    }break;   case '=':printf("<=, 25> ");break;   case ';':printf("<;, 26> ");break;   case '(':printf("<(, 27> ");break;   case ')':printf("<), 28> ");break;   case '#':printf("<#, 0> ");break;   }     i++;  } }

    int main(void) {  char a[300];

     printf("input : ");  gets(a);  cifafenxi(a);

     return 0; }

  • 相关阅读:
    python入门 类的继承和聚合(五)
    如何快速找到多个字典中的公共键(1.4)
    python输入输出(二)
    python入门 集合(四)
    LOJ 3093: 洛谷 P5323: 「BJOI2019」光线
    LOJ 3049: 洛谷 P5284: 「十二省联考 2019」字符串问题
    【比赛游记】FJOI2019瞎打记
    ICPC World Finals 2019 题解
    LOJ 3043: 洛谷 P5280: 「ZJOI2019」线段树
    LOJ 2483: 洛谷 P4655: 「CEOI2017」Building Bridges
  • 原文地址:https://www.cnblogs.com/qiuhuimin/p/4897545.html
Copyright © 2020-2023  润新知