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,输出为“能够识别”
  • 相关阅读:
    Gothic Revival Portal
    通过CRM API for 3CXPhone与其他应用进行对接
    Asp.net Identity 2.0 作弊条
    ReportViewer作弊条
    定制与扩展Asp.NET 5 MVC内建身份验证机制
    在Dynamics CRM 2015中通过3CX插件(以及3CX windows phone)拨出电话
    在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证
    log4net资料收集
    jQuery 插件开发文章收集
    git &github 快速入门
  • 原文地址:https://www.cnblogs.com/mazhuang/p/1641690.html
Copyright © 2011-2022 走看看