码农的理想国

用0和1去编织梦想

非确定有限状态自动机的构建(二)——将CharVal转换为NFA

保留版权,转载注明出处:潘军彪的个人博客(http://blog.csdn.net/panjunbiao) 将上下文无关文法读入内存之后,可以将它转换成非确定有限状态自动机。当然,不是所有的上下文无关文法都能够转换成自动机的,前提条件是这个上下文无关文法能够与正则定义等价。因此,在进行转换之前,我...

2013-07-19 13:03:37

阅读数:1448

评论数:0

正则表达式与上下文无关文法

保留版权,转载需注明出处(潘军彪的CSDN博客http://blog.csdn.net/panjunbiao) 正则表达式 正则表达式在日常开发中时不时都会遇到,我们先来看看正则表达式( Regular Expression)的定义(参考龙书英文第2版121页): ε是一个正则表达式,它生成的...

2013-07-18 13:07:54

阅读数:5594

评论数:0

非确定有限状态自动机的构建(一)——NFA的定义和实现

保留版权,转载需注明出处(http://blog.csdn.net/panjunbiao)。 非确定有限状态自动机(Nondeterministic Finite Automata,NFA)由以下元素组成: 一个有限的状态集合S一个输入符号集合Sigma,并且架设空字符epsilon不属于...

2013-07-17 15:16:59

阅读数:6447

评论数:1

开源啦!我的Compiler-Construction项目

前段时间的一些代码已经上传到GitHub,有兴趣的同学请移步https://github.com/panjunbiao/compiler-construction。 这个项目刚刚起步,还达不到实用的程度,只是和大家分享、交流。 前段时间写的一些文章,其中的代码全部都可以在这个项目中找到。

2013-07-08 15:21:49

阅读数:1261

评论数:2

到底什么是上下文无关文法?

在龙书Compilers - Principles, Techniques, & Tools英文版第2版42页中,提到上下文无关文法有以下的特点: 一个终结符的有限集(A set of terminal symbols),构成文法的最基本的字符就是这个文法的终结符,例如一个能够产生个位...

2013-07-08 10:23:38

阅读数:5308

评论数:0

基于Predictive Parsing的ABNF语法分析器(十四)——RFC2234文法解析实战

现在开始,我们的解析器要进入实战阶段了,首先来看看,能不能直接分析ABNF文法本身呢? 先把RFC2234上面关于自身的文法定义的片段copy下来,保存成文件,例如文件名RFC2234.Demo.1.txt ALPHA = %x41-5A / %x61-7A ...

2013-07-02 17:32:38

阅读数:1570

评论数:1

基于Predictive Parsing的ABNF语法分析器(十三)——rulelist、rule、rulename、define-as和elements

我们来看看rulelist,它是整个ABNF文法的入口,就是说一个ABNF文法就是一个规则列表rulelist。一个rulelist由若干个rule规则组成,每个rule由规则名rulename、定义方式define-as和元素elements构成。 先来看解析代码: /* Thi...

2013-06-19 13:04:41

阅读数:1497

评论数:0

我的编译原理系列笔记(索引)

基于Predictive Parsing的ABNF文法分析器 手工打造一个自顶向下、递归的ABNF文法分析器。 ABNF文法分析器(十三)——rulelist、rule、rulename、define-as和elementsABNF文法分析器(十二)——alternation、concate...

2013-06-19 00:17:14

阅读数:1502

评论数:3

基于Predictive Parsing的ABNF语法分析器(十二)——alternation、concatenation、group和option

今天一鼓作气再写多点东西吧,这个题目差不多接近尾声了。来看看alternation、concatenation、group和option的解析代码: /* This file is one of the component a Context-free Grammar Parser ...

2013-06-18 13:29:11

阅读数:1261

评论数:0

基于Predictive Parsing的ABNF语法分析器(十一)——AbnfParser文法解析器之重复文法(repetition)

今天写的是关于重复文法的解析,ABNF和BNF相比,一个明显的差异就是引入了重复语法,使得我们可以方便的让一个文法元素重复若干次。 例如30"B"表示30个字母B,30*60表示最少30个,最多60个字母B,等等。 先来看看解析部分的代码: /* This f...

2013-06-18 11:50:25

阅读数:1538

评论数:0

基于Predictive Parsing的ABNF语法分析器(十)——AbnfParser文法解析器之数值类型(num-val)

ANBF语法中的数值类型有3种:二进制、十进制和十六进制,可以是一个以点号分隔的数列,也可以是一个数值的范围。例如,%d11.22.33.44.55表示五个有次序的十进制数字“11、22、33、44、55”,而%x80-ff表示一个字节,这个字节的数值可以是在0x80至0xff之间。 我把以点号...

2013-06-17 13:17:45

阅读数:1244

评论数:0

基于Predictive Parsing的ABNF语法分析器(九)——AbnfParser文法解析器之带星号的情形(c-wsp和comment)

直接上代码吧,都写到注释里面了。 /* This file is one of the component a Context-free Grammar Parser Generator, which accept a piece of text as the input, ...

2013-06-14 12:16:47

阅读数:1443

评论数:0

基于Predictive Parsing的ABNF语法分析器(八)——AbnfParser文法解析器之带星号的情形(如char-val, prose-val)

带星号*表示重复的次数,例如*A表示A可以重复0至任意多次,*3A表示A可以重复0次、1次、2次或3次,4*A表示A至少要重复4次。我们先来看最简单的情形*A,ABNF的语法定义中char-val和prose-val都属于这种。 /* This file is one of the co...

2013-06-13 17:16:30

阅读数:1198

评论数:0

基于Predictive Parsing的ABNF语法分析器(七)——AbnfParser文法解析器之多个选项的情形(如WSP、c-nl和element)

现在来看看对于产生式有多个选项的情形,例如WSP可以是空格SP或者跳格HTAB。对于这种情况,一般是向前看一个字符,根据这个字符来选择产生式。当然,如果两个产生式的起始字符都一样,那么只向前看一个字符就不够了,这种情况下需要向前看2个或者更多。 WSP、c-nl和element的文法解析程序: ...

2013-06-09 13:19:42

阅读数:1481

评论数:0

基于Predictive Parsing的ABNF语法分析器(六)——AbnfParser文法解析器之多个符号连接的情形(如rule和CRLF)

基于预测的文法分析器,一个明显的特点就是将非终结符定义为解析函数(方法),当非终结符号可以派生为其他非终结符号时,在解析函数中递归调用即可。这种方法的一个缺点,是难以处理需要回溯的情形,后面我们再详细分析。上次我们研究了诸如CR、LF、HTAB等单个字符的解析,这一篇来看看稍微复杂一点的多个符号连...

2013-06-09 12:11:32

阅读数:1302

评论数:0

基于Predictive Parsing的ABNF语法分析器(五)——AbnfParser文法解析器之单字符的情形(如HTAB、LF、CR、SP)

先来看看AbnfParser类如何对ABNF文法中最简单的一些单字节符号如何进行解析,这些单字节符号包括跳格、换行、回车和空格: /* This file is one of the component a Context-free Grammar Parser Generator, ...

2013-06-08 15:26:47

阅读数:1480

评论数:0

基于Predictive Parsing的ABNF语法分析器(四)——准备单元测试代码

单元测试的重要性是不言而喻的,对于ABNF的例子来说,通过单元测试除了可以发现程序的BUG之外,还可以发现预测解析器能够支持哪些情况下的文法,以及那些情况下解析器无能为力(所谓FEATURE,嘿嘿)。 我在这个项目中使用JUnit来做单元测试,先来看一段最简单的测试代码: /* T...

2013-06-07 16:56:44

阅读数:1604

评论数:0

基于Predictive Parsing的ABNF语法分析器(三)——ABNF语法解析器的基本框架

前面说过,一个能够识别ABNF文法并且自动构造ABNF文法解析器的生成器(parser generator),它首先要能够识别ABNF文法,即把ABNF读入内存并结构化之后,才能进行后续的生成解析器的步骤。我把这个读入ABNF文法的模块称为AbnfParser类。下面先来看看这个类的基本结构: ...

2013-06-06 15:14:53

阅读数:1946

评论数:0

基于Predictive Parsing的ABNF语法分析器(二)——ABNF语法元素的类定义

下面根据ABNF的语法定义,逐条来定义ANBF语法元素类: (一)首先来看rulelist: rulelist = 1*( rule / (*c-wsp c-nl) )rulelist(规则列表)是ABNF语法的最顶层的符号,也就说一份符合ABNF规定的文法,它就是一个rul...

2013-06-06 13:30:08

阅读数:1588

评论数:0

基于Predictive Parsing的ABNF语法分析器(一)——ABNF语法介绍

最近一直在做Session Initiation Protocol (SIP)协议方面的开发,SIP在电信VoIP领域应用非常广泛,是一个基于文本语法的协议。SIP的语法规范是使用ABNF来定义的。对SIP语法有兴趣的同学请移步其Augmented BNF for the SIP Protocol...

2013-06-06 10:33:34

阅读数:2868

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭