zoukankan      html  css  js  c++  java
  • 作业9.30

    词法分析程序的功能

    1.完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器。 
    2.从左至右地对源程序进行扫描,按照语言的词法规则识别各类单词,并产生相应单词的属性字。

     
     

    #include<stdio.h>                  /*定义I/O库所用的某些宏和变量*/
    #include<string.h>               /*定义字符串库函数*/
    #include<conio.h>                  /*提供有关屏幕窗口操作函数*/
    #include<ctype.h>                  /*分类函数*/
    char prog[80]={''},
         token[8];                     /*存放构成单词符号的字符串*/
    char ch;
    int syn,                           /*存放单词字符的种别码*/
          n,
        sum,                           /*存放整数型单词*/
        m,p;                           /*p是缓冲区prog的指针,m是token的指针*/
    char *rwtab[6]={"begin","if","then","while","do","end"};
    void scaner(){
        m=0;
        sum=0;
        for(n=0;n<8;n++)
            token[n]='';
        ch=prog[p++];
        while(ch==' ')
            ch=prog[p++];
        if(isalpha(ch))    /*ch为字母字符*/
     {
            while(isalpha(ch)||isdigit(ch))    /*ch 为字母字符或者数字字符*/
      {
               token[m++]=ch;
               ch=prog[p++];}
            token[m++]='';
            ch=prog[p--];
            syn=10;
            for(n=0;n<6;n++)
                if(strcmp(token,rwtab[n])==0)    /*字符串的比较*/
       {
                    syn=n+1;
                    break;}}
        else
            if(isdigit(ch))    /*ch是数字字符*/
      {
                while(isdigit(ch))    /*ch是数字字符*/
       {
                    sum=sum*10+ch-'0';
                    ch=prog[p++];}
                ch=prog[p--];
                syn=11;}
            else
                switch(ch)
      {
                    case'<':m=0;token[m++]=ch;ch=prog[p++];
                            if(ch=='>'){
                                syn=21;
                                token[m++]=ch;}
                            else if(ch=='='){
                                syn=22;
                                token[m++]=ch;}
                                else{
                                     syn=20;
                                     ch=prog[p--];}
                            break;
                    case'>':m=0;token[m++]=ch;ch=prog[p++];
                            if(ch=='='){
                                syn=24;
                                token[m++]=ch;}
                            else{
                                syn=23;
                                ch=prog[p--];}
                            break;
                 case':':m=0;token[m++]=ch;ch=prog[p++];
                         if(ch=='='){
                             syn=18;
                             token[m++]=ch;}
                         else{
                             syn=17;
                             ch=prog[p--];}
                         break;
                 case'+':syn=13;token[0]=ch;break;
                 case'-':syn=14;token[0]=ch;break;
                 case'*':syn=15;token[0]=ch;break;
                 case'/':syn=16;token[0]=ch;break;
                 case'=':syn=25;token[0]=ch;break;
                 case';':syn=26;token[0]=ch;break;
                 case'(':syn=27;token[0]=ch;break;
                 case')':syn=28;token[0]=ch;break;
                 case'#':syn=0;token[0]=ch;break;
                 default:syn=-1;}}
    main()
    {

    p=0;
        printf("please input string: ");
        do {
               ch=getchar();
               prog[p++]=ch;
           }while(ch!='#');
        
    p=0;
        do{
            scaner();
            switch(syn){
                case 11: printf("(%d,%d) ",syn,sum);break;
              //  case -1: printf(" ERROR; ");break;
                default: printf("(%d,%s) ",syn,token);
    }
    }while(syn!=0);
        //getch();
    }

     

    用文法描述词法则

    <字母>:
    S→A
    A→a|b|c|……y|z

    <数字> :
    S→A|SA|SA0
    A→1|2|3|4|5|6|7|8|9

    <整数常数>:
    S→A|SA|SA0
    A→1|2|3|4|5|6|7|8|9

    <标识符>:
    S→A|SB
    A→a|b|c|……y|z
    B→0|1|2|3|4|5|6|7|8|9

    <关键字>:
    S→A
    A→if|else|while|do|for|int|char|……

    <运算符>:
    S→A
    A→+|-|x|/|=|#|<|>|<=|>=|:=

    <界符>:
    S→A
    A→(|)|,|;|.

     
     
     
  • 相关阅读:
    用 jQuery 实现表单验证(摘抄)——选自《锋利的jQuery》(第2版)第5章的例题 5.1.5 表单验证
    js内置对象
    浅析js中的堆和栈
    深入理解js立即执行函数
    Javascript 中 null、NaN和undefined的区别
    javasript
    关于HTTP协议,一篇就够了
    ssh_maven之controller层开发
    ssh_maven之service开发
    ssh_maven的搭建之dao层的开发
  • 原文地址:https://www.cnblogs.com/qq157049540/p/5924465.html
Copyright © 2011-2022 走看看