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,输出为“能够识别”
  • 相关阅读:
    微服务简介
    Apache httpd.conf
    搭建PHP开发环境
    搭建Apache开发环境
    Swift 项目编译优化(一)
    用Flutter 写一个简单页面
    Sign In With Apple(一)(转)
    Xcode DeviceSupport
    MQTT初始篇笔记整理
    UITableView使用过程中可能遇到的问题
  • 原文地址:https://www.cnblogs.com/mazhuang/p/1641690.html
Copyright © 2011-2022 走看看