dfa

how can I write next table or next array using Knuth Morris Pratt algorithm

≡放荡痞女 提交于 2021-02-11 14:02:26
问题 I am trying to find the next table of the following DFA graph using knuth-morris-pratt (KMP).The DFA for searching for the string "cbcbca". I have seen some tutorials but didn't find a good one. Any help will be appreciatable about how to draw the table with step. Thanks. 来源: https://stackoverflow.com/questions/62496036/how-can-i-write-next-table-or-next-array-using-knuth-morris-pratt-algorithm

编译原理DFA(有限确定自动机)的构造

ε祈祈猫儿з 提交于 2020-03-18 06:49:57
CODE: https://github.com/pxjw/Principles-of-Compiler/tree/master/consDFA 原题: 1、自己定义一个简单语言或者一个右线性正规文法 示例如( 仅供参考 ) G[S]:S→aU|bV U→bV|aQ V→aU|bQ Q→aQ|bQ|e 2、构造其有穷确定自动机,如 3、利用有穷确定自动机M=(K,Σ,f, S,Z)行为模拟程序算法,来对于任意给定的串,若属于该语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是” K:=S; c:=getchar; while c<>eof do {K:=f(K,c); c:=getchar; }; if K is in Z then return (‘yes’) else return (‘no’) 开始编程! 1.状态转换式构造类: current——当前状态 next——下一状态 class TransTile { public: char current; char next; char input; TransTile(char C,char I,char Ne){ current = C; next = Ne; input = I; } }; 2.DFA的构造类 此处包括DFA的数据集,字母表,以及过程P的定义。 包括了初始化,遍历转换

DFA最小化,语法分析初步

亡梦爱人 提交于 2020-03-16 08:17:38
1.将DFA最小化:教材P65 第9题 Ⅰ {1,2,3,4,5} {6,7} {1,2}b→{1,2,3,4,5} {3,4}b→{6,7} {5}b→ε {1,2,3,4,5}可区别,划分 Ⅱ {1,2}{3,4}{5} {6,7} {1}a{3,4} {2}a{3,4} {1}b{1,2} {2}b{1,2} {1,2}不可区别,等价 {3}c{3,4}  {4}c{3,4} {3}d{5}   {4}d{5} {3,4}不可区别,等价 {6}b{6,7} {7}b{6,7} {6,7}不可区别,等价 Ⅲ {1,2}{3,4}{5} {6,7} 最小化: 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 正规式: 构造: 转化为DFA 0 1 a ε{x}={xad} {be} {cf} b {be} ε{ay}={ady} c {cf} ε{cf}={ady} d {ady} {be} {cf} 最小化: Ⅰ {a,b,c} {d} {a}0→{a,b,c} {b}0→ε {c}0→{d} {a,b,c}可区别,划分 不可区别 Ⅱ {a,b,c} {d} 3.自上而下语法分析,回溯产生的原因是什么? S -> AB S -> aAB S -> aaAB S -> aaaAB S -> aaaɛb S -> aaab 原因:反复提取公共左因子

编译原理——正规式转DFA算法概述

让人想犯罪 __ 提交于 2020-03-11 19:05:21
一、概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机(Finite Automata)。正规式是描述单词规则的工具,首先要明确的一点是所有单词组成的是一个无穷的集合,而正规式正是描述这种无穷集合的一个工具;有穷自动机则是识别正规式的一个有效的工具,它分为确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷自动机(Nondeterministic Finite Automata,NFA)。对于任意的一个单词,将其输入正规式的初始状态,自动机每次读入一个字母,根据单词的字母进行自动机中状态的转换,若其能够准确的到达自动机的终止状态,就说明该单词能够被自动机识别,也就满足了正规式所定义的规则。而DFA与NFA之间的差异就是对于某一个状态S,输入一个字符a,DFA能够到达的下一个状态有且仅有一个,即为确定的概念,而NFA所能到达的状态个数大于或等于一个,即不确定的概念。因为NFA为不确定的,我们无法准确的判断下一个状态是哪一个,因此识别一个正规式的最好的方式是DFA。那么,如何为一个正规式构造DFA就成了主要矛盾,解决了这个问题,词法分析器就已经构造完成。从正规式到DFA需要通过两个过程来完成:  

正则基础教程一些冷门的知识

扶醉桌前 提交于 2020-02-29 19:30:41
正则基础教程一些冷门的知识 正则引擎 正则分几种引擎也从是本书获得的知识点之一。 DFA 传统型NFA POSIX NFA NFA范围更广,例如 JAVA, PHP, Ruby, .NET... 你是看不起我javascript所以才不列入的吗? 使用DFA的是flex, MySQL, lex, awk大部分版本… 实话说,除了mysql,都没听过。不过不用在意! 两个引擎的区: NFA 更注重表达式 DFA 文本主导   通过书中里例子说,NFA 用表达式来匹配文本,而 DFA 是文本来匹配文表达式。当写好一个正则之后,NFA 是先检查表达式,同时检查文本是否匹配这个表达式。而 DFA 则是先扫描文本,然后处理表达式中的所有匹配可能,如果匹配失败,就将这条可能的线,淘汰。所以这里衍生一个概念就是回溯,NFA 有回溯,而 DFA 没有。 知识点   作为一个菜鸟,正则表达式一直是书到用时方恨少的角色。平时都是能抄则抄,不能抄的时候干着急,只能用 substr, indexOf, chatAt等等的方法实现功能,既不优雅也不够装逼。上网学习也都是菜鸟教程,W3school。然后下面说一下以上两个基础教程里没说到的知识点。   括号捕获与反向引用   当你在正则表达式里使用了 (),在表达式匹配时,它能记住或者说缓存括号内匹配的结果,从而可以拿到括号内的结果

怎么设计高效的敏感词过滤系统(一)

落花浮王杯 提交于 2020-02-24 21:16:00
IM项目需要对上边传输的消息进行必要的过滤。如果总是对着某人输入f**k就显得不太文明了。 一个通用且简单的做法是,设定一批敏感词,如果消息中出现这些词,由系统进行必要的处理。怎么实现这个功能呢? 一、能够实现敏感词过滤功能的方法有很多 方法有很多,我简单罗列了几个。 1、直接将敏感词组织成String后,利用indexOf方法来查询。 2、传统的敏感词入库后SQL查询。 3、利用Lucene建立分词索引来查询。 4、利用DFA算法来进行。 显然,方法1和方法2在性能上基本无法满足IM系统高效处理消息的需求,放弃。 方法3,采用Lucene建立本地分词索引,将消息内容分词后,在索引库里搜索。这个方法较复杂,且分词效率也不会很高,放弃。 大多数的敏感词过滤系统采用的是方法4,DFA算法。 二、DFA简介 DFA是什么?这里有必要简单介绍一下这个概念(这部分看不懂没关系,可以跳过)。 1、DFA定义 DFA翻译成中文是“确定有穷自动机 ” 定义:一个确定有穷自动机(DFA)M是一个五元组:M=(K,Σ,f,S,Z)其中 ① K是一个有穷集,它的每个元素称为一个状态; ② Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ为输入符号字母表; ③ f是转换函数,是K×Σ→K上的映射(且可以是部分函数),即,如 f(ki,a)=kj,(ki∈K,kj∈K)就意味着,当前状态为ki

Is L = {a^n b^m | n>m} a regular or irregular language?

梦想与她 提交于 2020-02-10 09:30:20
问题 I have troubles in solving/proving this problem. Any ideas please? 回答1: L = {a n b m | n > m} is not regular language. Yes, the problem is tricky at first few try and deserve vote-up. Pumping Lemma a necessary property of regular language is tool for formal proof that language is not regular language. Formal definition: Pumping lemma for regular languages Let L be a regular language. Then there exists an integer p ≥ 1 depending only on L such that every string w in L of length at least p ( p

Is L = {a^n b^m | n>m} a regular or irregular language?

泪湿孤枕 提交于 2020-02-10 09:29:48
问题 I have troubles in solving/proving this problem. Any ideas please? 回答1: L = {a n b m | n > m} is not regular language. Yes, the problem is tricky at first few try and deserve vote-up. Pumping Lemma a necessary property of regular language is tool for formal proof that language is not regular language. Formal definition: Pumping lemma for regular languages Let L be a regular language. Then there exists an integer p ≥ 1 depending only on L such that every string w in L of length at least p ( p