zoukankan      html  css  js  c++  java
  • 一个简单的词法分析程序

    这是我们的编译原理课程的第一个实验,蛮简单的,或者说我写得蛮简单。当然会有更好的实现方法呵呵~~
    实验名称:词法分析程序设计

    目的与要求:
    (1)掌握词法分析器的构造过程以及基本方法;
    (2)理解正规式、NFA、DFA及最小化DFA的转换过程和方法。

    实验内容要点:
    给定一个正规式R=XY*|YX*Y|XYX,(*号为上标)请先将此正规式转变为NFA、DFA、最小化,对你所完成最小化DFA进行编程,完成词法分析器工作。

    正规式化为最小化的DFA:


    程序源代码:
    #include<iostream>
    #include<string>
    using namespace std;

    void main()
    {
    string s;
    cout<<"请输入需要判断的字符串:"<<endl;
    cin>>s;
    s.resize(s.size()+1);
    s[s.size()-1]='\0';
    if(s[0]=='x')
    {
    if(s[1]=='\0')
    cout<<"能够识别"<<endl;
    else if(s[1]=='y')
    {
    if(s[2]=='y')
    {
    int j=3;
    while(s[j]=='y')
    j++;
    if(s[j]=='\0')
    cout>>"能够识别"<<endl;
    else
    cout<<"不能识别"<<endl;
    }
    else if(s[2]=='x')
    {
    if(s[3]=='\0')
    cout<<"能够识别"<<endl;
    else
    cout<<"不能识别"<<endl;
    }
    else if(s[2]=='\0')
    cout<<"能够识别"<<endl;
    else
    cout<<"不能识别"<<endl;
    }
    else
    cout<<"不能识别"<<endl;
    }
    else if (s[0]=='y')
    {
    int i=1;
    while(s[i]=='x')
    i++;
    if(s[i]=='y')
    {
    if(s[i+1]=='\0')
    cout<<"能够识别"<<endl;
    else
    cout<<"不能识别"<<endl;
    }
    else
    cout<<"不能识别"<<endl;
    }
    else
    cout<<"不能识别"<<endl;
    }

    测试用例:
    (1)输入x,输出为“能够识别”
    (2)输入a,输出为“不能识别”
    (3)输入xy,输出为“能够识别”
    (4)输入xa,输出为“不能识别”
    (5)输入xyyy,输出为“能够识别”
    (6)输入xyyya,输出为“不能识别”
    (7)输入xyx,输出为“能够识别”
    (8)输入yy,输出为“不能识别”
    (9)输入xya,输出为“不能识别”
    (10)输入yxxxx,输出为“能够识别”
    (11)输入ya,输出为“不能识别”
    (12)输入yxxxy,输出为“能够识别”
  • 相关阅读:
    selenium---常用元素等待的三种方法
    selenium---浏览器操作方法
    selenium---xpath轴定位
    requests---通过file_data方法请求yaml数据
    pywinauto客户端自动化---模拟键盘操作
    pywinauto客户端自动化---模拟鼠标操作
    开发摆摊网心理路程
    解决MVC提示未能加载文件或程序集“System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。
    ATH9K驱动支持2MHz,2.5Mhz,1Mhz等工作带宽
    javax.validation 参数验证
  • 原文地址:https://www.cnblogs.com/mazhuang/p/1641690.html
Copyright © 2011-2022 走看看