文法
维基百科的解释:
在形式语言理论中,文法(为了避免歧义,常称作“形式文法”)是形式语言中字符串的一套产生式规则。这些规则描述了如何用语言的字母表生成符合语法的有效的字符串。文法不描述字符串的含义,也不描述在任何上下文中可以用它们做什么——只描述它们的形式。
我的理解:
其实就是语法,在有限的符号串集合上,定义一定的产生规则,用来生成无穷多的满足文法定义的句子。
几个关键概念
终结符、非终结符、产生式
- 非终结符:我觉得叫语法变量会更好理解点。在识别或者产生的过程中,如果该符号还未确定下来,还可以被继续推导,那么就是非终结符。例如<整数>。
- 终结符:和非终结符相对应,可以叫做是“语法常量”,已经被完全确定下来了。例如1,2,3…。
- 产生式:定义的推导规则,就是从非终结符出发去构造串的方法。说白了,我觉得这叫做一个分解规则会比较合适,他定义了非终结符的分解规则。
子集构造法
从NFA到DFA的构造算法:
- 计算NFA开始状态的状态闭包
- 枚举每个转移字符,求得新状态闭包。
- 检查新状态是否已经处理过,有则加入处理列表。
- 重复过程直到所有产生的新状态闭包都处理过
- 鉴别终止状态闭包,花对应的DFA
dfa的最小化
1.先划分,终止与否的等价类
2.根据字符表中的字符,进一步去划分等价类。
re转dfa的tips
- 子集构造法那儿会要看比较久,一般字母比较少的时候,从字母所在的边去看,I中有没有边的出发节点,有的话则在对应输出集合中写出对应的终点节点,以此类推把所有边遍历完。然后再对所有点,去写他们的空-闭包。
- 除了终结点对应构成的集合外,其他的节点是冗余的,看是哪个状态,一般就只看前者。
- 最小化DFA时,