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

    实验一词法分析实验

    商业软件工程2班  黄铭坤  201506110147

    一、        实验目的

           编制一个词法分析程序。

    二、        实验内容和要求

    输入:源程序字符串

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

    待分析语言的词法规则

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

     1.      源程序名:词法分析.c

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

        2.      原理分析及流程图

    (1)   关键字:

    begin  if  then  while  do  end

    (2)   运算符和界符:

    :  =  +  -  *  /  <   >  <=  < >  >=  ;  ( )  #

    (3)各种单词符号对应的种别码

    单词符号

    种别码

    单词符号

    种别码

    begin

    1

    :

    17

    if

    2

    :=

    18

    then

    3

    20

    while

    4

    <=

    21

    do

    5

    <> 

    22

    end

    6

    23

    l(l|d)*

    10

    >=

    24

    dd*

    11

    =

    25

    +

    13

    ;

    26

    -

    14

    (

    27

    *

    15

    )

    28

    /

    16

    #

    0

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

    void Analyse(char a[])//词法分析的主要函数

    {

        int i=0,j=0,n=0,m=0,temp=0;

        char b[N];//数组b存储数组a中除关键字外的其他字母

        while(a[i]!='$')//对输入的单词符号进行识别判断是否为关键字或标志符,若是则输出单词本身及其词法规则和种别码

        {

             if(a[i]>=65&&a[i]<=122)//判断每一个单词符号是否为字母

            {

                j=0;

                while((a[i]>=65&&a[i]<=122)||(a[i]>='0'&&a[i]<='9')||a[i]=='_')

                {

                    b[j]=a[i];

                    j++;

                    i++;

                }

                i--;

                b[j]='';

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

                {

                    if(strcmp(b,word[n])==0)

                    {

                                    printf("<关键字,%d,",n+1);

                                    while(word[n][m]!='')

                                    {

                                           printf("%c",word[n][m]);

                                           m++;

                                    }

                                    printf("> ");

                                    temp=1;

                    }

                      }

                      if(temp==0)

                             printf("<标识符,10,%s> ",b);

             }

             else

             {

                switch(a[i])//用switch结构实现对界符和运算符的识别和其词法规则和种别码的输出

                {

                      case '#': printf("<0,$> ");

                case '+': printf("<运算符,13,+> ");break;

                case '-': printf("<运算符,14,-> ");break;

                case '*': printf("<运算符,15,*> ");break;

                case '/': printf("<运算符,16,/> ");break;

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

                         {

                             printf("<运算符,18,:=> ");

                             i++;

                         }

                    else printf("<界符,17,:> ");

                    break;

                case '<': if(a[i+1]=='=')

                         {

                             printf("<运算符,21,<=> ");

                             i++;

                         }

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

                    {

                        printf("<运算符,22,<>> ");

                        i++;

                    }

                    else printf("<界符,20,<> ");

                    break;

                case '>': if(a[i+1]=='=')

                         {

                             printf("<运算符,24,>=> ");

                             i++;

                         }

                    else printf("<界符,23,>> ");

                    break;

                case '=': printf("<运算符,25,=> ");break;

                case ';': printf("<界符,26,;> ");break;

                case '(': printf("<界符,27,(> ");break;

                case ')': printf("<界符,28,)> ");break;

                case' ': break;

                case' ': break;

                default:

                    if(a[i]>='0'&&a[i]<='9')   

                        printf("<数字,%c> ",a[i]);

                    else

                        printf("'%c'输入错误! ",a[i]);//若输入的单词符号为其他,则输出“输入错误”

                        break;

                }

             }

             i++;

        }

    }

    4.      运行结果及分析

    四、        实验总结

  • 相关阅读:
    Linux文件权限管理
    Linux用户权限管理
    压缩,解压缩 和tar详细介绍
    grep基本详细使用
    Vim文本编辑器详细用法
    Linux命令查找文件目录
    Linux文件增删改
    Linux目录管理
    Linux修改主机名
    Linux创建高级用户并删除
  • 原文地址:https://www.cnblogs.com/hhmk/p/5962263.html
Copyright © 2011-2022 走看看