有穷自动机

#include<stdio.h>
#define MAX 100
typedef struct   //构造一个邻接表 用于存储NFA
{
char name;
char line[MAX];
 
}node;
 
 
void tran(){     //专门做语句的转换操作
 
 
 
}
 
void automata(char R[],int i){
int j = 0;
int n = i;
while(R[j] != ‘#‘){
if(R[i] == ‘(‘)
{
printf("//在这里是做把‘()‘里的字符串里的语句初步进行转换,进行递归分解");
//在这里是做把‘()‘里的字符串里的语句初步进行转换,进行递归分解
}
else if(R[i] == ‘|‘){
printf("//在这里就是把A和B两个状态节点分成  语句1 | 语句2 分成两路连接");
//在这里就是把A和B两个状态节点分成  语句1 | 语句2 分成两路连接
}
else if(R[i] == ‘*‘){
printf("//在这里就是把前一个状态节点进行自循环。");
//在这里就是把前一个状态节点进行自循环。
}
else{
//在这里进行一般的转换。
printf("//在这里进行一般的转换");
}
 
 
j++;
}
 
}
 
void main()
{
char R[MAX];
int i=0;
printf("请输入要转换的正规式:\n");
while(R[i-1] != ‘#‘){
scanf("%c",&R[i]);
i++;
}
automata(R,i);    //用于转换正规式。
}

时间: 2024-10-16 13:17:06

有穷自动机的相关文章

(1)从正则表达式到有穷自动机,识别字符串(算法思想及代码实现)

正则表达式: 正则表达式是当前主流的字符串识别机制之一,另外一种是文法识别. 和文法相比,正则表达式具有构造相对简单,运行效率较高的特点,所以一般的字符串识别会使用正则表达式. 正则表达式有三种主要运算符是我们在构造词法分析器生成器LEX需要用到的:*.|.连接 *代表闭包运算,假如有一个字符串a,那么a*就代表由任意个字符串a组合成的字符串,包括空串(0个字符串a组合成的字符串),如 *={空串,a,aa,aaa.....} |代表或运算,不同于*闭包运算,|是针对两个字符串的,假如有两个字符

什么是有穷自动机

有穷自动机的非形式化定义 非形式化定义,即非数学语言的定义. 自动机是一种抽象的机器,它有很多个状态,用圆圈来表示.状态与状态之间有箭头,箭头上有所需要的条件, 也即只有满足箭头上的条件时才能从一个状态走到另一个状态.状态的目的是记住系统历史的有关部分,也即记住所 输入的字符串都满足了自动机系统的哪些条件,这就是所说的记住历史.而有穷就是说这个自动机的状态是有限的, 这样才能够编程来实现它.下面是一个简单的有穷自动机,它扫描所给的字符串,判断其中是否包含字符串then. 有穷自动机的形式化定义

使用状态机(有穷自动机)实现 printf功能

有穷自动机是编译原理讲的,在词法分析中使用比较广泛.因为它仅仅能分析正则规则的语言,因此使用起来比较简单.现在我们使用它来实现printf printf 的原理是 输入: 一个格式串 不定个数的参数 在控制台上输出. 我们这里实现这个函数不在控制台输出,而是得到一个串,然后这个串可以任意的处理. char* myprint(char* format,...) 从状态0开始(初始状态) --->状态0 当遇到%,--->状态0--->状态1 这个时候处于接收后续的myprint的参数类型的

SCUT 2014 B题 Numbers (DFA有穷自动机)

题目链接:   SCUT 2014 题目大意:   判断给出的字符串中是否是正确的科学计数法 A+1.5Be+8C,可以是实数或者含有指数的实数,ABC三个部分表示空格,可有可无,正负号可有可无 指数部分只能是整数 解题思路:   建立有穷自动机状态转移表,一共是10种状态 -1表示无法不合法,最终状态为0 2 4 5 8 9五种状态均为合法,其余的都为非法 代码: #include <stdio.h> #include <stdlib.h> #include <string

有穷自动机(NFA、DFA)&amp;正规文法&amp;正规式之间的相互转化构造方法

在编译原理(第三版清华大学出版社出版)中第三章的词法分析中,3.4.3.5.3.6小节中分别讲解了 1.什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机) 2.如何将  不确定的有穷自动机(NFA)  转化为  确定的有穷自动机(DFA); 3.如何化简DFA; 4.正规式和有穷自动机的等价性(根据给出的正规式构造有穷自动机); 5.正规文法和有穷自动机的等价性(根据给出的正规式构建有穷自动机): 个人在开始学习这一章节的时候,课上听得有些迷惑,并且看书也是感觉没有头绪,后来花了一些

[Computation]有穷自动机

有穷自动机 *太简单辽,可以跳过* 有穷自动机:受到严格限制的实际计算机的模型 字符串被送入称作输入带的设备,带被划分成方格,每个方格写一个符号.机器的主要部分是一个带有内部结构的"黑盒子"(有穷控制器),在任一特定的时刻它处于有穷个不同的内部状态中的一个,通过可移动的读头能够了解输入带的任何位置上写着什么符号.开始时候,读头放在带的最左边的方格上,有穷控制器处于一个指定的初始状态.每隔一定时间有穷自动机从输入带上读一个符号,然后进入一个新的状态,与当前状态和刚读到的符号有关(确定型有

有穷自动机的转换

1 #include<stdio.h> 2 main() 3 { 4 int i=0,j=0,x=0,y; 5 int number=2; 6 int count=0; 7 char ch; 8 char a[100][100]; 9 printf("请输入正规式以#结束 :\n"); 10 printf("^代表空\n"); 11 printf("|代表或\n"); 12 ch=getchar(); 13 do 14 { 15 if

1203有穷自动机

#include<string.h>#include<stdio.h>#include<stdlib.h>int main(){    char p[30][30];//存放文法    char q[30][30];    int line=0;    int n;    int i,j;    int count=0;    int k,t=0;    int flag=0;    int l,m=0;    char VN[30]={'\0'};//存放非终结符号 

131-有确定性的有穷自动机

#include <stdio.h> //s为初态,z为终态 int in(int s,int z) { if(s == z) { printf("3\nlook!the last status belongs to Z"); return 1; } else { return 0; } } //s为状态,t为输入的字符 int step(int s,char t) { if(t == 'a') switch(s) { case 0:return 1; case 1:ret

有穷自动机()

#include <stdio.h> //s为初态,z为终态 int in(int s,int z) { if(s == z) { printf("\n这个状态属于 Z"); return 1; } else { return 0; } } //s为状态,t为输入的字符 int step(int s,char t) { if(t == 'a') switch(s) { case 0:return 1; case 1:return 3; case 2:return 1; ca