zoukankan      html  css  js  c++  java
  • 简单的词法分析程序

     词法分析程序完成的是编译第一阶段的工作,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析。

    我写的简单代码实现如下:

    #include<stdio.h>
    #include<string.h>
    #define N 80
    char word[6][10]={"begin","if","then","while","do","end"};
    void Analyse(char a[]);
    main()
    {
    int i;
    char a[N];
    printf("请输入源程序:(以$结束)\n");
    for(i=0;i<N;i++)
    {
    scanf("%c",&a[i]);
    if(a[i]=='$')
    break;
    }
    a[i+1]='\0';
    i=0;
    printf("词法分析结果为:\n");
    Analyse(a);
    }
    void Analyse(char a[])
    {
    int i=0,j=0,n=0,m=0,temp=0;
    char b[N];
    while(a[i]!='$')
    {
    if(a[i]>=65&&a[i]<=122)
    {
    j=0;
    while((a[i]>=65&&a[i]<=122)||(a[i]>='0'&&a[i]<='9')||a[i]=='_')
    {
    b[j]=a[i];
    j++;
    i++;
    }
    i--;
    b[j]='\0';
    for(n=0;n<6;n++)
    {
    if(strcmp(b,word[n])==0)
    {
    printf("<关键字,%d,",n+1);
    while(word[n][m]!='\0')
    {
    printf("%c",word[n][m]);
    m++;
    }
    printf(">\n");
    temp=1;
    }
    }
    if(temp==0)
    printf("<标识符,10,%s>\n",b);

    }
    else
    {
    switch(a[i])
    {
    case '#': printf("<0,$>\n");
    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");
    i++;
    }
    else printf("<界符,17,:>\n");
    break;
    case '<': if(a[i+1]=='=')
    {
    printf("<运算符,21,<=>\n");
    i++;
    }
    else if(a[i+1]=='>')
    {
    printf("<运算符,22,<>>\n");
    i++;
    }
    else printf("<界符,20,<>\n");
    break;
    case '>': if(a[i+1]=='=')
    {
    printf("<运算符,24,>=>\n");
    i++;
    }
    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' ': break;
    case'\n': break;
    default:
    if(a[i]>='0'&&a[i]<='9')
    printf("<数字,%c>\n",a[i]);
    else
    printf("'%c'输入错误!\n",a[i]);
    break;
    }
    }
    i++;
    }

    }

    运行结果如下:

  • 相关阅读:
    [python第七课]字符串和常用数据结构
    深浅拷贝与循环引用问题
    CSS居中总结
    CSS布局总结
    跨域
    函数节流与防抖
    浏览器渲染原理及渲染阻塞
    进程与线程
    前端之网络攻击
    前端之缓存
  • 原文地址:https://www.cnblogs.com/ffde/p/5924968.html
Copyright © 2011-2022 走看看