自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码农的理想国

用0和1去编织梦想

  • 博客(15)
  • 收藏
  • 关注

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

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

2013-06-19 13:04:41 2190

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

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

2013-06-19 00:17:14 1723 3

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

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

2013-06-18 13:29:11 1439

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

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

2013-06-18 11:50:25 1868

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

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

2013-06-17 13:17:45 1526

原创 基于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, and generates a parser for the inputted context

2013-06-14 12:16:47 1624

原创 基于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 component a Context-free Grammar Parser Generator,

2013-06-13 17:16:30 1488

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

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

2013-06-09 13:19:42 1655

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

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

2013-06-09 12:11:32 1472

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

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

2013-06-08 15:26:47 1743

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

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

2013-06-07 16:56:44 1834

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

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

2013-06-06 15:14:53 3011

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

下面根据ABNF的语法定义,逐条来定义ANBF语法元素类:(一)首先来看rulelist:rulelist = 1*( rule / (*c-wsp c-nl) )rulelist(规则列表)是ABNF语法的最顶层的符号,也就说一份符合ABNF规定的文法,它就是一个rulelist。rulelist至少由一个rule(规则)组成,在Java语言中,我们直接使用List来定

2013-06-06 13:30:08 1939

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

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

2013-06-06 10:33:34 3618

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

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

2013-06-05 11:39:23 2067

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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