zoukankan      html  css  js  c++  java
  • 词法分析

    # 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;
    }

  • 相关阅读:
    Java 默认修饰符
    大学生职业规划到底应该规划什么?
    IT就业攻略:看准趋势 选对行业
    积极推动校企深度合作 做好产学结合示范工作
    强化工程实践能力 提升就业核心竞争力
    大学生就业:以“硬”实力实现“软”着陆
    使用IDEA 创建SpringBoot项目
    项目记录随笔
    全国城市数据库sql
    xp win7共享
  • 原文地址:https://www.cnblogs.com/shuaibi/p/4898199.html
Copyright © 2011-2022 走看看