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

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    char prog[800],token[8];
    char ch;
    int syn,p,q,sum;
    char *rwtab[6]={"begin","if","then","while","do","end"};
    void scaner();
    main()
    {
        p=0;
        printf("
    please input the source code:
    ");
        do{
            ch=getchar();
            prog[p]=ch;
            p++;
        }while(ch!='#');
        p=0;
        do
        {
            scaner();
            switch(syn)
            {
                case 11:printf("
    (%d,%d)",syn,sum);break;
                case -1:printf("
    (%s,出错)",token);break;
                default:printf("
    (%d,%s)",syn,token);
            }
        }while(syn!=0);
    }
    
    
    void scaner()
    {
    
        int i;
        sum=0;
        for(q=0;q<8;q++)
            token[q]=NULL;
        ch=prog[p];
        q=0;
        while(ch==' '||ch=='
    ')
        {
            p++;
            ch=prog[p];    
        }
        if(('a'<=ch)&&(ch<='z')||('A'<=ch)&&(ch<='Z'))
        {
            while(('a'<=ch)&&(ch<='z')||('A'<=ch)&&(ch<='Z')||(ch>='0'&&ch<='9'))
            {
                token[q]=ch;
                p++;
                ch=prog[p];    
                
                q++;
            }
            syn=10;
            for(i=0;i<6;i++)
            {
                 if(strcmp(token,rwtab[i])==0)
                 {
                     syn=i+1;
                     break;
                 }    
            }
        }
        else if(ch>='0'&&ch<='9')
        {
            while((ch>='0')&&(ch<='9'))
            {
                sum=sum*10+ch-'0';
                p++;
                ch=prog[p];
            }
            syn=11;
        }
        else switch(ch)
        {
            case '+':
                 syn=13;
                 token[q++]=ch;
                 p++;
                 break;
            case '-':
                syn=14;
                 token[q++]=ch;
                 p++;
                 break;
            case '*':
                syn=15;
                 token[q++]=ch;
                 p++;
                 break;
            case '/':
                syn=16;
                 token[q++]=ch;
                 p++;
                 break;
            case ':':
                syn=17;
                 token[q++]=ch;
                 p++;
                 if(prog[p]=='=')
                 {
                     syn=18;
                     ch=prog[p];
                     token[q++]=ch;
                     p++;
                 }
                 break;
            case '<':
                syn=20;
                 token[q++]=ch;
                 p++;
                 if(prog[p]=='>')
                 {
                     syn=21;
                     ch=prog[p];
                     token[q++]=ch;
                     p++;
                 }
                 if(prog[p]=='=')
                 {
                     syn=22;
                     ch=prog[p];
                     token[q++]=ch;
                     p++;
                 }
                 break;
            case '>':
                syn=23;
                 token[q++]=ch;
                 p++;
                  if(prog[p]=='=')
                 {
                     syn=24;
                     ch=prog[p];
                     token[q++]=ch;
                     p++;
                 }
                 break;
            case '=':
                syn=25;
                 token[q++]=ch;
                 p++;
                 break;
            case ';':
                syn=26;
                 token[q++]=ch;
                 p++;
                 break;
            case '(':
                syn=27;
                 token[q++]=ch;
                 p++;
                 break;
            case ')':
                syn=28;
                 token[q++]=ch;
                 p++;
                 break;
              case '#':
                 syn=0;
                 token[q++]=ch;
                 break;
        }
    }
     
     
  • 相关阅读:
    Delphi中DLL初始化和退出处理
    03003_Http响应
    雷林鹏分享:CSS 属性 选择器
    雷林鹏分享:CSS 媒体类型
    雷林鹏分享:CSS 图像拼合技术
    雷林鹏分享:CSS 图像透明/不透明
    雷林鹏分享:CSS 图片廊
    雷林鹏分享:CSS 提示工具(Tooltip)
    雷林鹏分享:CSS 下拉菜单
    雷林鹏分享:CSS 导航栏
  • 原文地址:https://www.cnblogs.com/moliny/p/4827001.html
Copyright © 2011-2022 走看看