码农的理想国

用0和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

阅读数:1481

评论数:0

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

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

2013-06-19 00:17:14

阅读数:1490

评论数: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

阅读数:1247

评论数: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

阅读数:1521

评论数: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

阅读数:1239

评论数: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

阅读数:1433

评论数: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

阅读数:1191

评论数:0

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

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

2013-06-09 13:19:42

阅读数:1477

评论数:0

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

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

2013-06-09 12:11:32

阅读数:1294

评论数: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

阅读数:1471

评论数:0

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

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

2013-06-07 16:56:44

阅读数:1596

评论数:0

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

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

2013-06-06 15:14:53

阅读数:1929

评论数: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

阅读数:1576

评论数: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

阅读数:2839

评论数:0

关于开源+商业双授权软件项目的一知半解

收集了一些开源+商业双授权的软件项目: 原始表格请打开我的网上文档:双重授权 如果一个项目采用了GPL授权,那么所有对该项目进行的修改、调用,在重新发布的时候都必须使用GPL授权。从这一角度来看,GPL授权是对开发者有较强保护的:防止你的项目被用于闭源的项目。但GPL也是一个双刃剑,如...

2013-06-05 11:39:23

阅读数:1454

评论数:0

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