用C语言米用模拟DFA算法编写一个扫描器

/*

第一章:相关知识

DFA定义:一个确定的有穷自动机(DFA) M是一个五元组:M= ( K,厶f, S, Z)其中

0K是一个有穷集,它的每个元素称为一个状态;

工是一个有穷字母表,它的每个元素称为一个输入符号,所以也称工为输入符号字母

表;

f是转换函数,是 KX》tK的映射,即,如 f (ki, a) =kj,

(ki € K, kj € K)就意味着,当前状态为ki,输入符为a时,将转换为下一个状态 kj,

我们把kj称作ki的一个后继状态;

S € K是唯一的一个初态;

Z??K是一个终态集,终态也称可接受状态或结束状态。

第二章:题目

用C语言米用模拟DFA算法编写一个扫描器(词法分析器)用来识别:

由任意个a或b开始后接aa再自加或自减1的字符串,即正规式r=(a|b)*aa(+|-)1描述的语 言 L (r)

该词法分析器的任务:

滤掉源程序中的无用成分,如空格;

识别正规式r=(a|b)*aa(+|-)1描述的字符串。

从键盘读入或打开文件读入字符串,词法分析器读入字符ywe串后扫描源字符串,

若发现符合符合正规式r描述的字符串时,输出“ye或”可接受”或可识别”

否则输出“ n或'不可识别”。

第三章:分析

第一节?

K有10个状态,也就是10个元素: 0,也就是开始状态'a',转到状态 s1'b',转到状态 s2

K有10个状态,也就是10个元素: 0,也就是开始状态

'a',转到状态 s1

'b',转到状态 s2

状态S3:从s2开始接受了一个字母'a',转到状态S3

状态s4:从s3开始接受了一个字母'a',转到状态s4

状态S5:如果s1已经连续接受了至少两个字母'a',从s4开始接受一个符号 '+',转到状

态s5。

从s4开始接受了一个符号'+',转到状态S5。

状态S6:如果s1已经连续接受了至少两个字母’a',从s4开始接受一个符号'-',转到状

态s6。

从S4开始接受了一个符号'-',转到状态s6。

状态S7:从S5或S6开始接受了一个数字'1',转到S7。

状态S8:从S7开始接受了一个字符串结束符号'\0',转到状态S8。【这是成功状态】

状态s9:【这是出错状态】 第二节 .

根据正规式(a|b)*aa(+|-)1 ,我们可以分析出 习包含的字母有:a,b,+,-,1 第三节 .

根据正规式 (a|b)*aa(+|-)1 ,我们分析出转换函数 f 有:

F[0]. s0 --(输入一个字母 'a') --> s1

F[1]. s0 --(输入一个字母 'b') --> s2

F[2]. s1 --(输入一个字母 'a') --> s1

F[3]. s2 --(输入一个字母 'b') --> s2

F[4]. s2 --(输入一个字母 'a') --> s3

F[5]. s3 --(输入一个字母 'a') --> s4

F[6]. 如果状态 s1 中已经累积有至少两个字母 'a'

s1 --(输入一个符号 '+') --> s5

F[7]h. s4 --(输入一个字母 '+') --> s5

F[8]. 如果状态 s1 中已经累积有至少两个字母 'a'

s1 --(输入一个符号 '-') --> s6

F[9]. s4 --(输入一个字母 '-') --> s6

F[10]. s5 --(输入一个数字 '1') --> s7

F[11]. s6 --(输入一个数字 '1') --> s7

F[12]. s7 --(输入一个字符串结束符’\0') --> s8(成功状态)

F[13].其他情况,统一进入状态s9(出错状态)

第四节 .

根据正规式(a|b)*aa(+|-)1 ,我们分析出【唯一的】初态 S即K中的s0

第五节 .

,s9(出根据正规式(a|b)*aa(+|-)1,我们分析出结束状态有两个,即K中的s8(

,s9(出

错状态 ) */

#include /* 下面的一组全局参数是作为自动机的参数 */

// 正则式

const char regex[]="(a|b)*aa(+|-)1";

// 状态集合

int states[10]={0};

// 状态总数

const int statesAmount = sizeof(states)/sizeof(int);

// 可接受的字符集合

const char letterSet[]="ab+-1";

// 开始状态

const int startStateId=0;

// 可接受的结束状态集 const int endStateIds[]={8,9};

// 可接受的结束状态总数

const int endStates

dfa算法c语言,用c语言采用模拟dfa算法编写一个扫描器.docx相关推荐

  1. c语言编程改变旅馆价格,模拟旅馆管理系统的一个功能——床位的分配与回收(c语言编程)...

    模拟旅馆管理系统的一个功能--床位的分配与回收 题目:模拟旅馆管理系统的一个功能--床位的分配与回收 ⒈问题描述: 某旅馆有n个等级的房间,第I等级有 个房间,每个等级有个床位(1≤I≤n).试模拟旅 ...

  2. 用c语言设计一个年历系统流程图,用C语言编写一个年历.docx

    黑龙江八一农垦大学理学院 <C 程序设计>课程设计报告 2011-2012 学年第二学期 设计题目: 指导教师: 用 C 语言设计一个年历系统 魏老师 完成时间:2012 年 6 月 13 ...

  3. c语言编写一个四舍五入的函数,C语言题指教关于四舍五入的问题请编写一个函 – 手机爱问...

    2017-10-18 C语言中math.h定义了哪些函数 //1.三角函数 double sin(double); //1.1.正弦 double cos(double); //1.2.余弦 doub ...

  4. c语言实现4x4随机字母,求用C++编写一个4x4矩阵运算类(元素float),实现转置和相乘,具体见补充,在线等!谢谢啦~...

    满意答案 onem827047 2013.07.03 采纳率:56%    等级:13 已帮助:12013人 刚写好 的 #include using namespace std; class CMy ...

  5. c语言变量值与数组元素值交换,编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素值。要求尽量用指针的方法实现。数组a...

    满意答案 a810693885 推荐于 2016.01.08 采纳率:59%    等级:12 已帮助:5204人 #include void main() { int a[10],b[10]; vo ...

  6. c语言 运算符op,1 简单计算器。请编写一个程序计算表达式:datal op data2的值。其中op为运算符+、—、*、/。...

    满意答案 770vivozf 2013.03.02 采纳率:43%    等级:9 已帮助:769人 1.简单计算器.请编写一个程序计算表达式:datal op data2的值.其中op为运算符+.- ...

  7. c语言画bmp五星红旗图片,用asp程序编写一个bmp图片格式的五星红旗

    用asp程序编写一个bmp图片格式的五星红旗 搜索 今天看到一个用asp程序编写一个bmp图片格式的五星红旗,像手绘的一样,很好,把它转过来和大家分享    view sourceprint?001 ...

  8. em算法的java实现_机器学习——python模拟EM算法

    <统计学习方法> 李航著 第九章 EM算法 我是小白一个:本文代码转载地址文末有注释:除代码和部分注释外大部分自己书写,有问题请多指教 模拟课本第一个例子,即用EM算法估计三个硬币模型的参 ...

  9. POJ 2069最小球覆盖 HDU3007最小圆覆盖【模拟淬火算法】

    POJ 2069最小球覆盖 1.给定N个三维点,要求覆盖这些点的最小球半径: 2.采用模拟淬火算法,随机选取一个点作为初始解,然后不断向当前最远的点靠近: 3.这是一个不断调整的过程,对应模拟淬火算法 ...

最新文章

  1. 用python画烟花-如何用python画烟花
  2. java case when用法_关于oracle case when的多种用法
  3. 计算机网络实验仿真系统设计,计算机网络实验课程仿真系统平台的研究与设计...
  4. Echarts后台option对象
  5. 【转】C++/CLI入门系列 第二篇:封装C++ dll库,提供接口给C#调用
  6. 动态生成lookup字段
  7. MaxCompute中如何通过logview诊断慢作业
  8. java orcl自动_Oracle自动生成编号
  9. 还在用 Random生成随机数了?试试 ThreadLocalRandom,好用!
  10. linux rdma测试,硬件RDMA的驱动配置和测试
  11. Spring Boot初识(2)- Spring Boot整合Mybaties
  12. java关键字 final static
  13. 1一10到时的英文单词_[1-10的英语单词读音]1到10的英语单词
  14. SVN创建分支及合并
  15. 循环中使用switch在执行条件后使用break和continue的区别
  16. excel Cell函数
  17. (构造笔记)GRASP学习心得
  18. 云服务优缺点_云服务器优点和缺点
  19. MNE预处理脑电数据
  20. OSChina 周四乱弹 ——因为女同事衣服穿的薄 所以老板发现我没上班?

热门文章

  1. jtag keil v11驱动_Keil for ARM/ Realview MDK 中用JTAG调试的方法
  2. Word文档如何去除页眉中的横线
  3. ThinkPHP 3.2.3图片处理
  4. oled电视和led电视的区别 oled电视和led电视哪个好
  5. 【JZOJ 省选模拟】人生(life)
  6. 将经纬度数字形转换为时分秒形式
  7. html选择定位位置,html5的地理位置定位
  8. 会议的区别(seminar,symposium,conference,meeting,congress,assembly等)
  9. OSChina 周三乱弹 ——复制过去,成就未来
  10. python读取文件第一行_python读取文件首行和最后一行