• 词法分析


    实验一、词法分析实验

    专业:商业软件   姓名:韦兴纳  学号:201506110242

    一、        实验目的

     

    编写一个词法分析程序模拟编译器分析解释程序字符串的过程。

    二、        实验内容和要求

    输入:源程序字符串

    输出:二元组(种别,单词本身)

    各种单词符号对应的种别码

     

    单词符号

    种别码

    单词符号

    种别码

    Begin

    1

    :

    17

    If

    2

    :=

    18

    Then

    3

    20

    While

    4

    <=

    21

    Do

    5

    <> 

    22

    End

    6

    23

    |(||d)*

    10

    >=

    24

    Dd*

    11

    =

    25

    +

    13

    ;

    26

    -

    14

    (

    27

    *

    15

    )

    28

    /

    16

    #

    0

     

    三、        实验方法、步骤及结果测试

     

    1. 1.      源程序名:压缩包文件(rarzip)中源程序.c

    可执行程序名:词法分析.exe

    1. 2.       原理分析及流程图

     

     

    1. 3.      主要程序段及其解释:

    1、接收用户输入:getchar()和do…while循环的组合

        do{

               ch=getchar();

               prog[p++]=ch;

        }while(ch!='#');  //输入以#号键结束

    2、对输入的字符串进行数字字符和字母字符的分析判断,并保存相应单词的种别码

    void scaner(){

         int m=0;

         sum=0;

         char *keyword[7]={"begin","if","then","for","while","do","end"};//数组存放关键字

        for(n=0;n<9;n++)

            token[n]='\0';

        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++]='\0';

            ch=prog[p--];

            syn=10;

            for(n=0;n<7;n++)

                if(strcmp(token,keyword[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=29;token[0]=ch;

                              break;

                 case'#':

    syn=0;token[0]=ch;

                              break;

                 default:syn=-1;}

    }

    1. 4.      运行结果及分析

     

     

     

     

     

    四、        实验总结

    心得体会,实验过程的难点问题及其解决

        做词法分析程序时遇到了很多困难,因为其中涉及很多分析判断。编程之前必须对题目有清晰的思路。先用getchar()和do…while循环的组合接受用户输入的字符串,再用isalpha(ch)||isdigit(ch)对读取的字符串进行字母字符和数字字符的判断。接着逐个读取字符进行词法分析。

     

     

  • 相关阅读:
    2.5 整数和算法
    斑马问题
    计算机硬件操作
    幸福是什么
    英译汉技巧
    指令
    计算机性能
    硬盘容量的计算方法
    Symmetric Tree
    Same Tree
  • 原文地址:https://www.cnblogs.com/weixingna/p/5979849.html
Copyright © 2020-2023  润新知