先来看看上下文无关文法, 总的来说上下文无关文法的定义如图 : BNF范式(Backus-Naur Form)经常用来表示上下文无关文法... 接下来提出一个概念叫推导 : 推导有两种, 最左推倒和最右推倒 : 那么其实词法分析的目的就可以用这个上面我们所提到的上下文无关文法来描述了 : 下面是一道 ...
分类:
其他好文 时间:
2016-05-12 01:26:46
阅读次数:
355
首先我们来分析一下语法分析器的任务 : 将由词法分析器返回的Tokens(记号流)经过检查和处理生成根据规定的语法规则来生成抽象语法树... 最终大概是这样 (两个输入 一个输出): 然后是语法树, 大概是这样 : 那么接下来看看在这一阶段所需要学习的内容 : 大概就是这样... ...
分类:
其他好文 时间:
2016-05-11 23:20:14
阅读次数:
159
今天撸了一个晚上终于完成了, 感觉还是要说一下体会吧... 其实之前课程本身已经提供了相关的算法伪代码, 那么在思路上应该没有问题, 那么最后我却用了一个晚上才完成最后的hopcroft 算法呢... 其实难点在于数据结构的运用, 这边图论算法熟悉的话应该会感觉轻松一些...(不幸的是我还没有系统的 ...
分类:
其他好文 时间:
2016-05-11 01:14:29
阅读次数:
167
今天AI考的还算顺利, 没有不会做的, 目前也没发现错的, 在这里顺便也谈谈AI吧, 我之所以不选AI, 总感觉理论性太强, 学起来不来劲, 经历了大二这一个学期的理论学习, 这AI简直是神课啊, 真是怕了, 大三到英国肯定不选AI... 其实就算在今天下午在考试我也是一直惦记着我的词法生成器... ...
分类:
其他好文 时间:
2016-05-10 02:13:13
阅读次数:
228
相关定义: 识别器:可以在字符流中识别特定单词的程序。 有限自动机(FA):识别器的一种形式化方法,包含一个有限状态集,一个字母表,一个转移函数,一个起始状态和一个或多个接受状态。 正则表达式:有限自动机所接受的单词的集合,形成的语言。eg:n(ew|ot) RE--NFA--DFA--最小DFA- ...
分类:
其他好文 时间:
2016-05-09 23:37:54
阅读次数:
389
今天来讲第一部分Scanner,俗称扫描器,也叫词法分析器。想要了解Scanner究竟做了什么,我们要从整个流程讲起。 首先,计算器得到的输入的是一串字符,如 ”1 + 2“。 如果不学编译原理,应该如何计算出结果呢?可能会利用栈,一个数字栈一个符号栈云云,但这样处理简单运算还好,如果有大于10的数 ...
分类:
其他好文 时间:
2016-05-07 23:34:19
阅读次数:
957
简介本章依然专注于使用yacc实现计算器,主要的特点是给算术运算增加变量支持。模块拆分它主要分为3个模块
1. lex词法分析器
2. yacc语法分析器
3. 符号表功能描述1. lex词法分析器正规式的定义如下:delim [ \t]
ws {delim}+
letter [a-zA-Z]
digit [0-9]
id {letter}({letter}|{digit})*
/...
分类:
其他好文 时间:
2016-05-07 09:52:10
阅读次数:
252
本文的Demo的运行环境为nodeJS, 参考:让nodeJS支持ES6的词法 babel的安装和使用 ; 解构赋值是一种表达式, 利用这种新语法, 可以直接从数组或者对象中快速提取值 赋值给不同的变量, 利用这种写法的好处是减少了代码量, 一定程度优化了代码, 也有一点缺点就是阅读代码不再那么直观 ...
分类:
其他好文 时间:
2016-05-07 06:35:06
阅读次数:
4353
最后是一个小作业 : 给定如下的正则表达式 (a|b)((c|d)*),请完成如下练习: (1)使用Thompson算法,将该正则表达式转换成非确定状态有限自动机(NFA); (2)使用子集构造算法,将该上述的非确定有限状态自动机(NFA)转换成确定状态有限自动机(DFA); (3)使用Hopcro ...
分类:
其他好文 时间:
2016-05-07 06:34:48
阅读次数:
448
最后是最小化算法, 它的目的其实在于通过合并的方式, 减少状态数, 然后使得最终生成的代码中用来表示状态转移的数据结构尽量小, 以此节约空间和时间. DFA中运用最广泛的算法是hopcroft算法, 接下来就是对该算法的简要介绍... 这个算法的第一步是将所有的状态(也就是代码中的nodes) 划分 ...
分类:
其他好文 时间:
2016-05-07 01:00:43
阅读次数:
114