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

    #include<stdio.h>
    #include<string.h>//strcmp()
    #include<conio.h>//getch()
    #define max 200
    char pro[max], lin[20];
    int n,i,syn;
    char *word[6]={ "begin", "if" , "then", "while", "do" ,"end" }; // 关键字,特殊标识符
    char ch ;
    scaner( )//扫描
    {
    int j=0;
    for ( n=0; n<20; n++ )
    lin[n]=NULL; //临时数组初始化
    ch=pro[i++];//读取字符串
    while (ch==' ') //判断,跳过空字符
    ch=pro[i++];//读取整个单词
    if ((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||(ch>=48&&ch<=57)) //判断是否是字母或数字
    {
    if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')) //判断标示符和特殊关键字
    {
    lin[j++]=ch;
    ch=pro[i++];//pro[i++]空,关键字
    while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||(ch>=48&&ch<=57))//判断标识符
    {
    lin[j++]=ch;
    ch=pro[i++];
    }
    lin[j]='';//结束标志,回车
    i--;
    syn=10;//单词种别码
    for (n=0;n<6 ;n++ )
    if(strcmp(lin,word[n])==0)//查找关键字表是否符合
    {
    syn=n+1;
    break ;
    }
    }
    else //判断数字
    {
    while (ch>=48&&ch<=57)
    {
    lin[j++]=ch;
    ch=pro[i++];
    }
    i--;
    lin[j]='';
    syn=11;
    }
    }
    else //判断其它符号
    {
    /////////判断<,<=,<>


    if(ch=='<')
    {
    lin[j++]=ch;
    ch=pro[i++];
    if (ch=='=')
    {
    syn=21;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch=='>')
    {
    syn=22;
    lin[j++]=ch;
    lin[j]='';
    }
    else
    {
    syn=20;
    lin[j]='';
    i--;
    }
    }
    ///////////判断>,>=
    else if(ch=='>')
    {
    lin[j++]=ch;
    ch=pro[i++];
    if (ch=='=')
    {
    syn=24;
    lin[j++]=ch;
    lin[j]='';
    }
    else
    {
    syn=23;
    lin[j]='';
    i--;
    }
    }
    ////////////判断 :,:=
    else if(ch==':')
    {
    lin[j++]=ch;
    ch=pro[i++];
    if (ch=='=')
    {
    syn=18;
    lin[j++]=ch;
    lin[j]='';
    }
    else
    {
    syn=17;
    lin[j]='';
    i--;
    }
    }
    //////////判断其它符号
    else if(ch=='+')
    {
    syn=13;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch=='-')
    {
    syn=14;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch=='*')
    {
    syn=15;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch=='/')
    {
    syn=16;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch=='=')
    {
    syn=25;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch==';')
    {
    syn=26;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch=='(')
    {
    syn=27;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch==')')
    {
    syn=28;
    lin[j++]=ch;
    lin[j]='';
    }
    else if(ch=='#')
    {
    syn=0;
    lin[j++]=ch;
    lin[j]='';
    }
    else
    syn=-1;
    }
    return syn;
    }

    void main()

    {
    int i=0;
    printf( "Please input source code: " );
    do{
    ch=getchar();//读入字符串
    pro[i++]=ch;
    }while(ch!='#');
    i=0;

    do
    {
    scaner();
    switch(syn)
    {
    case 11: printf ("(%d,%s) ",syn,lin);
    break;
    case -1: printf("错误符号 ");
    break;
    default: printf ("(%d,%s) ",syn,lin);
    }
    } while (syn!=0);
    getch();
    }

  • 相关阅读:
    算法总结--排序(快排未写)
    关于我,至目前的总结与展望
    二 python之数据类型和字符编码
    三 python之文件处理
    一 python编程基础
    markdown语法
    规模-复杂世界的简单法则---熵
    块级元素display:inline-block 在IE6 IE7无效
    CSS3 文本超出后显示省略号...
    让nodejs在iis上运行
  • 原文地址:https://www.cnblogs.com/xiaochenxi/p/4880902.html
Copyright © 2011-2022 走看看