• 实验一 词法分析实验


    实验一、词法分析实验

     

    一、        实验目的

    编制一个词法分析程序

    二、        实验内容和要求

    输入:源程序字符串

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

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

     1.      源程序名:压缩包文件(rarzip)中源程序名×××.c可执行程序名:×××.exe

    2.      原理分析及流程图

    把输入的字符用链表进行存储,利用自己构造的一个判断函数,读取字符链表中存储的字符并进行判断处理,如果符合条件则输出,并继续判断直到链表为空则退出。

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

    typedef struct link          //字符链表

    {

        char data;               //存放字符

        struct link *next;       //指向下一个

    }Link;

    void specialchar(Link *charhead)   //判断字符函数

    {

        Link *q,*p;

        int i;

        q=charhead->next;

        while(q!=NULL)

        {

        switch(q->data)

        {

        case 'b':                       //判断是否是标识符begin

        special[0]=q->data;       //把待判断的字符存入数组

         q=q->next;

         if(q->data=='e')             //如果符合则继续进入判断

         {

            special[1]=q->data;    //把待判断的字符存入数组

            q=q->next;

            if(q->data=='g')

            {

                special[2]=q->data;

                q=q->next;

                if(q->data=='i')

                {

                    special[3]=q->data;

                    q=q->next;

                    if(q->data=='n')

                    {

                    special[4]=q->data;            //把符合文法的字符全部存入到一个数组里

                    printf("<标识符> ");

                    for(i=0;i<5;i++)                 //用for循环把数组输出 

                        printf("%c",special[i]);

                    printf(" ");

                    }

                }

            }

         }

         break;

    …………….

    1. 4.      运行结果及分析

    一般必须配运行结果截图,结果是否符合预期及其分析。

       (截图需根据实际,截取有代表性的测试例子)

     

    四、        实验总结

    程序能够把题目中给出的关键字begin、 if、 then、 while 、do、 end、 l(l|d)*、dd*,以及加减乘除,小括号,尖括号等于号 等判断出来。

    本程序使用的是链表进行存储,原因是链表具有灵活性,能够根据用户的输入情况来申请空间,而且所需的空间灵活,不像数组那样要求申请固定的空间导致空间的浪费。同时本程序也使用大量的判断符,利用数组把待判断的字符进行存储,一旦发现符合我们的文法规则就把数组进行输出。然后重复使用该数组。

    不足:进入判断后指针会指向下一个链表元素,当发现不符合这个单词的文法规则的时候就会退出switch循环,而退出switch循环时,会再一次指向下一个链表元素,因此产生,当不符合文法规则的时候,就会少判断到一个字符元素。

               

     

  • 相关阅读:
    xcode 查看stastic
    erlang 游戏服务器开发
    同一世界服务器架构--Erlang游戏服务器
    理解Erlang/OTP
    使用SecureCRT连接AWS的EC2
    redis单主机多实例
    Redis命令总结
    [redis] redis配置文件redis.conf的详细说明
    [转至云风的博客]开发笔记 (2) :redis 数据库结构设计
    Redis 集群方案
  • 原文地址:https://www.cnblogs.com/veol/p/5955880.html
Copyright © 2020-2023  润新知