• 实验一 词法分析程序


    实验一词法分析程序实验

    专业 商软2班   姓名 邝启彬  学号 201506110165

    一、        实验目的

         编制一个词法分析程序。

    二、        实验内容和要求

         输入:源程序字符串

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

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

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

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

    1. 2.      原理分析及流程图

    1. 3.      主要程序段及其解释:
    #include<stdio.h>
    
    #include<stdlib.h>
    
    #include<string.h>
    
    char *word[6]={"begin","if","then","while","do","end"};
    
    char *word2[18]={"|","dd*","+","-","*","/",":",":=","<","<=","<>",">",">=","=",";","(",")","#"};
    
    void words(char ch[]);
    
    void signs(char ch[]);
    
    main()
    
    {
    
        char ch[10];
    
        do
    
        {
    
               printf("
    请输入保留字(输入##时结束):");
    
               scanf("%s",ch);
    
               if(ch==" "||ch=="
    ")
    
                      getchar();
    
               words(ch);
    
               signs(ch);
    
        }while(ch!="##");
    
    }
    
    void words(char ch[])  //输入的保留字是关键字
    
    {
    
        if(strcmp(ch,word[0])==0)
    
               printf("%s,1",ch);
    
        else if(strcmp(ch,word[1])==0)
    
               printf("%s,2",ch);
    
        else if(strcmp(ch,word[2])==0)
    
               printf("%s,3",ch);
    
        else if(strcmp(ch,word[3])==0)
    
               printf("%s,4",ch);
    
        else if(strcmp(ch,word[4])==0)
    
               printf("%s,5",ch);
    
        else if(strcmp(ch,word[5])==0)
    
               printf("%s,6",ch);
    
    }                             
    
    void signs(char ch[])  //输入的保留字是标识符
    
    {
    
        int sum;
    
        if(strcmp(ch,word2[0])==0)
    
               printf("%s,10",ch);
    
        if(strcmp(ch,word2[1])==0)
    
               printf("%s,11",ch);
    
        if(strcmp(ch,word2[2])==0)
    
               printf("%s,13",ch);
    
        if(strcmp(ch,word2[3])==0)
    
               printf("%s,14",ch);
    
        if(strcmp(ch,word2[4])==0)
    
               printf("%s,15",ch);
    
        if(strcmp(ch,word2[5])==0)
    
               printf("%s,16",ch);
    
        if(strcmp(ch,word2[6])==0)
    
               printf("%s,17",ch);
    
        if(strcmp(ch,word2[7])==0)
    
               printf("%s,18",ch);
    
        if(strcmp(ch,word2[8])==0)
    
               printf("%s,20",ch);
    
        if(strcmp(ch,word2[9])==0)
    
               printf("%s,21",ch);
    
        if(strcmp(ch,word2[10])==0)
    
               printf("%s,22",ch);
    
        if(strcmp(ch,word2[11])==0)
    
               printf("%s,23",ch);
    
        if(strcmp(ch,word2[12])==0)
    
               printf("%s,24",ch);
    
        if(strcmp(ch,word2[13])==0)
    
               printf("%s,25",ch);
    
        if(strcmp(ch,word2[14])==0)
    
               printf("%s,26",ch);
    
        if(strcmp(ch,word2[15])==0)
    
               printf("%s,27",ch);
    
        if(strcmp(ch,word2[16])==0)
    
               printf("%s,28",ch);
    
        if(strcmp(ch,word2[17])==0)
    
               printf("%s,0",ch);  
    
    }
    

      

    1. 4.      运行结果及分析

     

    四、        实验总结

    通过这个实验,使我了解了编译器词法分析的过程。虽然在做这个程序的时候曾经没有思路,在编写的时候出现很多错误,但是我耐心的一一解决,终于完成这个程序,感觉比较满意。

     

     

     

     

     

     

     

  • 相关阅读:
    HVR数据复制软件部署之(一)--HUB端部署
    LeetCode 169:Majority Element
    [LeetCode][Java] Trapping Rain Water
    跨平台C、C++代码注意的事项
    Delphi通过查找字符定位TADOQuery数据的位置
    ADOquery属性中cursortype,LockType属性
    delphi ADOQuery 开启本地缓存
    如何判断一个事务是否已开始?
    SQL Server 取日期时间部分
    delphi中怎么获取服务器的时间
  • 原文地址:https://www.cnblogs.com/BennyKuang/p/5960524.html
Copyright © 2020-2023  润新知