zoukankan      html  css  js  c++  java
  • 实验一、词法分析实验

    实验一、词法分析实验

    商业软件工程   苏伟祥  201506110160

    一、实验目的

    编制一个此法分析程序

    二、实验内容需求

    输入源程序字符串

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

    待分析语言的词法规则

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

    1.源文件名:

    2.原理分析及流程图

    3.主要程序及解释

    do{
            scanf("%c",&ch);
            prog[p++]=ch;
        }while(ch!='#');
        p=0;
        printf("词法分析结果如下:
    ");
        do{
            sum=0;
            for(m=0;m<8;m++)
                token[m++]= NULL;
            ch=prog[p++];
            m=0;
            while((ch==' ')||(ch=='
    '))
                ch=prog[p++];
            if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
            {
                while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
                {
                    token[m++]=ch;
                    ch=prog[p++];
                }
                p--;
                syn=10;
                for(n=0;n<6;n++)
                    if(strcmp(token,rwtab[n])==0)
                    {
                        syn=n+1;
                        break;
                    }
            }
            else if((ch>='0')&&(ch<='9'))
            {
                while((ch>='0')&&(ch<='9'))
                {
                    sum=sum*10+ch-'0';
                    ch=prog[p++];
                }
                p--;
                syn=11;
            }
            else
            {
                switch(ch)
                {
                case '<':
                    token[m++]=ch;
                    ch=prog[p++];
                    if(ch=='=')
                    {
                        syn=22;
                        token[m++]=ch;
                    }
                    else
                    {
                        syn=20;
                        p--;
                    }
                    break;
                case '>':
                    token[m++]=ch;
                    ch=prog[p++];
                    if(ch=='=')
                    {
                        syn=24;
                        token[m++]=ch;
                    }
                    else
                    {
                        syn=23;
                        p--;
                    }
                    break;
                case '+':
                    token[m++]=ch;
                    ch=prog[p++];
                    if(ch=='+')
                    {
                        syn=17;
                        token[m++]=ch;
                    }
                    else
                    {
                        syn=13;
                        p--;
                    }
                    break;
    
                case '-':
                    token[m++]=ch;
                    ch=prog[p++];
                    if(ch=='-')
                    {
                        syn=29;
                        token[m++]=ch;
                    }
                    else
                    {
                        syn=14;
                        p--;
                    }
                    break;
    
                case '!':
                    ch=prog[p++];
                    if(ch=='=')
                    {
                        syn=21;
                        token[m++]=ch;
                    }
                    else
                    {
                        syn=31;
                        p--;
                    }
                    break;
    
                case '=':
                    token[m++]=ch;
                    ch=prog[p++];
                    if(ch=='=')
                    {
                        syn=25;
                        token[m++]=ch;
                    }
                    else
                    {
                        syn=18;
                        p--;
                    }
                    break;
    
                case '*':
                    syn=15;
                    token[m++]=ch;
                    break;
    
                case '/':
                    syn=16;
                    token[m++]=ch;
                    break;
    
                case '(':
                    syn=27;
                    token[m++]=ch;
                    break;
    
                case ')':
                    syn=28;
                    token[m++]=ch;
                    break;
    
                case '{':
                    syn=5;
                    token[m++]=ch;
                    break;
    
                case '}':
                    syn=6;
                    token[m++]=ch;
                    break;
    
                case ';':
                    syn=26;
                    token[m++]=ch;
                    break;
    
                case '"':
                    syn=30;
                    token[m++]=ch;
                    break;
    
                case '#':
                    syn=0;
                    token[m++]=ch;
                    break;
    
                case ':':
                    syn=17;
                    token[m++]=ch;
                    break;
    
                default:
                    syn=-1;
                    break;
                }
    
                token[m++]='';
            }

    4.运行结果及分析

    还是比较符合预期的,但是偶尔会出现意外情况 比如说输入x,输出的却是xf,种别码也不对。

    原因可能是读取的时候出现了一些小错,但是检查很多遍后代码也没有错。

    四、实验总结

    通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,使用某种高级语言直接编写此法分析程序。另外,也让我重新熟悉了C语言的相关内容,加深了对C语言的用途的理解。

  • 相关阅读:
    asp.net中3个常用的功能,直接上代码
    看WEB 2.0实战书中的部分技术资料 引用 很随笔,很杂乱
    Building a Web 2.0 Portal with ASP.NET 3.5(DropThings实例教学)
    如何防治猪流感!猪流感!?会像SARS那样爆发吗?我们能作的就是预防。
    招聘!北京 DNN程序员 5K7K
    国外的机器人爱好者使用C#等研发的一种家庭灭火机器人
    OLAP与OLTP的区别 及 什么是数据仓库
    动态绑定数据源的ReportViewer终于搞定了
    牛奶再次出事?!算了,我还是自己榨豆浆吧。中国人喝豆浆!
    c#遍历HashTable
  • 原文地址:https://www.cnblogs.com/swxvico/p/5943715.html
Copyright © 2011-2022 走看看