zoukankan      html  css  js  c++  java
  • 词法分析— 实验报告

    实验一.词法分析

    . 实验目的

    (1)  编译一个词法分析程序

    (2)  主要是从键盘输入一串字符,然后从左到右依次对字符进行识别,分成一个个独立的单词序列,并且进行词法分析。

    .实验内容

    (1)  输入:源程序字符串

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

    .实验要求

    1.对字符串表示的源程序 

    2.从左到右进行扫描和分解

    3.根据词法规则

    4.识别出一个一个具有独立意义的单词符号

    5.以供语法分析之用

     

    .实验方法,步骤及测试结果

    (1)流程图:

                                

                                        

     

    (2)主要代码:

    for(i=0;i<n;i++)
        {
            j=(int)n[i];
            n1[i]=n[M];
            if((j>=65)&&(j<=90)||(j>=90)&&(j<=122))
            {
                n1[i1]=n[i];
                i1++;
            }
            else{
                 while(i1!=0)
                {
                   n1[i1]='';
                   if(  strcmp(n1,"auto")==0||strcmp(n1,"int")==0||strcmp(n1,"double")==0||strcmp(n1,"long")==0
                      ||strcmp(n1,"char")==0||strcmp(n1,"float")==0||strcmp(n1,"short")==0||strcmp(n1,"signed")==0
                      ||strcmp(n1,"unsigned")==0||strcmp(n1,"struct")==0||strcmp(n1,"union")==0||strcmp(n1,"enum")==0
                      ||strcmp(n1,"static")==0||strcmp(n1,"switch")==0||strcmp(n1,"case")==0||strcmp(n1,"default")==0
                      ||strcmp(n1,"break")==0||strcmp(n1,"register")==0||strcmp(n1,"const")==0||strcmp(n1,"volatile")==0
                      ||strcmp(n1,"typedef")==0||strcmp(n1,"extern")==0||strcmp(n1,"return")==0||strcmp(n1,"void")==0
                      ||strcmp(n1,"continue")==0||strcmp(n1,"do")==0||strcmp(n1,"while ")==0||strcmp(n1,"if")==0
                      ||strcmp(n1,"else")==0||strcmp(n1,"for")==0||strcmp(n1,"goto")==0||strcmp(n1,"sizeof")==0)
                 {
                   n1[i1]=')';
                   printf("(1,");
                   puts(n1);
                   i1=0;
                   memset(n1,0,100);
                 }

    (3)测试结果

     五.实验心得

      这是我第一次接触关于编译原理的大实验,在这次实验里面,有很大的问题一直很困扰。
    (1)首先是词法分析的算法思想,不明白它的中心思想就无法下手,课本也没有太多关于这方面的知识,所以我只有向同学和网上寻找,在查找过程中也能大概了解了。
    (2)在定义的数组方面,一些代码很容易被混乱了,因为需要运行的变量比较多,所以经常有很多的错误提示。

     心得:虽然这次的实验总体来说不算良好,但是在老师,同学的帮助下还是能把它完成了,也让我明白了自己的问题所在,对于这门课程,需要花费更多的时间和精力才能更好的去理解它。当          然,程序中还是存在着很多的问题,希望各位能够积极指出,谢谢。

     

  • 相关阅读:
    C#数据类型
    面试常备题素数的判断
    Eclipse输入命令行参数
    Socket编程第一步PC上服务器回显客户端发送的字符串
    C# 格式化输出
    截止至2004年8月1日全球CCIE人数统计
    什么是3G?
    DoS 拒绝服务攻击专题
    我的Blog音乐版~~
    国庆啊~~累得我好苦啊~~~
  • 原文地址:https://www.cnblogs.com/wenjian1027/p/6002260.html
Copyright © 2011-2022 走看看