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

    实验一:词法分析

    专业:商业软件工程   姓名:陈锐  学号:201506110103

    一、        实验目的

          编制一个词法分析程序。

    二、        实验内容和要求

    1.输入:源程序字符串

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

    3.待分析语言的词法规则

    4.对字符串表示的源程序从左到右进行扫描和分解

    5.根据词法规则识别出一个一个具有独立意义的单词符号以供词法分析之用

    6.发现词法错误,则返回出错信息

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

    1.      源程序名:cifafenxi.c

    可执行程序名:cifafenxi.exe

    2.      原理分析及流程图

    主要就是利用for循环联合if语句判断来输出二元组

    流程图:

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

    #include<stdio.h>

    #include<stdlib.h>

    void main()

    {

    int i;

        char a[100];

        printf("请输入字符串:");

        scanf("%s",&a);

        for(i=0;i<100;i++)

        {

          if(a[i]=='b'&&a[i+1]=='e'&&a[i+2]=='g'&&a[i+3]=='i'&&a[i+4]=='n')

                 printf("<1\tbegin>\n");

          else if(a[i]=='i'&&a[i+1]=='f')

                 printf("<2\tif>\n");

          else if(a[i]=='t'&&a[i+1]=='h'&&a[i+2]=='e'&&a[i+3]=='n')

                 printf("<3\tthen>\n");

          else if(a[i]=='w'&&a[i+1]=='h'&&a[i+2]=='i'&&a[i+3]=='l'&&a[i+4]=='e')

                 printf("<4\twhile>\n");

          else if(a[i]=='d'&&a[i+1]=='o')

                 printf("<5\tdo>\n");

          else if(a[i]=='e'&&a[i+1]=='n'&&a[i+2]=='d')

                 printf("<6\tend>\n");

                  else if(a[i]=='|'&&a[i+1]=='('&&a[i+2]=='l'&&a[i+3]=='|'&&a[i+3]=='d'&&a[i+3]=='*')

              printf("<10\tl(l|d)*>\n");

          else if(a[i]=='d'&&a[i+1]=='d'&&a[i+2]=='*')

                 printf("<11\tdd*>\n");

          else if(a[i]=='-')

                 printf("<14\t->\n");

          else if(a[i]=='*')

                 printf("<15\t*>\n");

          else if(a[i]=='/')

                 printf("<16\t/>\n");

          else if(a[i]==':'&&a[i+1]!='=')

                 printf("<17\t:>\n");

          else if(a[i]==':'&&a[i+1]=='=')

                 printf("<18\t:=>\n");

          else if(a[i]=='<'&&a[i+1]!='='&&a[i+1]!='>')

                 printf("<20\t<>\n");

          else if(a[i]=='<'&&a[i+1]=='=')

                 printf("<21\t<=>\n");

          else if(a[i]=='<'&&a[i+1]=='>')

                 printf("<22\t<>>\n");

          else if(a[i]=='>'&&a[i+1]!='=')

                 printf("<23\t>>\n");

          else if(a[i]=='>'&&a[i+1]=='=')

                 printf("<24\t>=>\n");

          else if(a[i]=='=')

                 printf("<25\t=>\n");

          else if(a[i]==';')

                 printf("<26\t;>\n");

          else if(a[i]=='(')

                 printf("<27\t(>\n");

          else if(a[i]==')')

                 printf("<28\t)>\n");

          else if(a[i]=='#')

                 printf("<0\t#>\n");

        }}

    程序比较简单,基本上没有什么难点,就是把输入的字符串存放到字符数组里面,然后用for循环结合if-else语句使用。

    4.      运行结果及分析

     

    四、        实验总结

    1.程序做的比较简单,毕竟基础比较差,所以也就没什么大的问题。

    2.略微了解了一点词法

  • 相关阅读:
    弹出 提示窗口 背景显示灰色 可移动 模板
    rar文件的格式信息描述(中英文对照)
    android学习笔记48_实现软件国际化,实现文字国际化,和图片国际化
    php 7.2 安装 mcrypt 扩展
    laraveladmin 安装(总结)
    Laravel 精选资源大全
    Laravel 出现 No application encryption key has been specified
    Laravel5.5/6 报错call to undefined function openssl cipher iv length()
    一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单2 狼人:
    一起谈.NET技术,你应该知道的15个Silverlight诀窍 狼人:
  • 原文地址:https://www.cnblogs.com/18128319239F/p/5962133.html
Copyright © 2011-2022 走看看