首页 > 其他 > 详细

词法分析

时间:2015-10-21 17:25:52      阅读:101      评论:0      收藏:0      [点我收藏+]

# 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>\n", tmp, k+1);
      return 0;
    }
    k++;
  }
  printf("<%s, 10>\n", tmp);

  return 0;
}

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

  while(a[i] != ‘\0‘)
  {
  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] = ‘\0‘;
    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] = ‘\0‘;
    printf("<%s, 11>\n", tmp);
    j = 0;
  }

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

  i++;
  }
}

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

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

  return 0;
}

词法分析

原文:http://www.cnblogs.com/shuaibi/p/4898199.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!