Antlr
将C语言Header文件转换为Delphi接口定义的自动程序
Submitted by hubdog on Tue, 2009-04-21 21:08这个程序可以将C语言的头文件转换成Delphi的接口定义。目前支持简单的宏定义,结构体,枚举,函数定义。
目前用Firefox访问时,gwt对换行的处理有些问题,无法正确解析头文件,暂时请用IE访问。
另外,目前程序对于数组指针,函数指针的处理还有问题。
比如转换前
AntlrMorph和gDiff
Submitted by hubdog on Thu, 2009-04-16 20:40一个关于Antlr的不错的Blog
Submitted by hubdog on Tue, 2009-02-03 18:16Antlr 3.1beta1 终于发布了
Submitted by hubdog on Thu, 2008-05-22 07:48Antlr3.1 beta1终于发布了,增加了一些新特性,但是我更感兴趣的Bug修正不是很多。接下来的一两个月里面有空会去研究一下。不过很可能没什么时间
Antlr的错误恢复机制
Submitted by gougou on Thu, 2006-10-12 00:32Antlr的错误恢复机制很重要,有利于写出很健壮的Parser,比如一般的单行注释需要有回车符号,但是有时用户在程序的最后会输入没有回车符号的单行注释,我们的Parser也要考虑这种情况
可以使用状态维护方式来处理这类不完整的Token,在Lexer中添加下列方法。
int state;
int getState() {
return state;
}
void resetState() {
state = 0;
}
将单行注释的语法由原来的
Antlr中的Semantic Predicates
Submitted by gougou on Fri, 2006-09-15 19:56有些时候由于Antlr不是真正的LL(K)算法,会产生二义性的代码,这时需要我们手工来编写LookAhead的判断语句。这就用到了Semantic Predicates
语法结构为{XXXX}?,示意如下
如何区分关键字和普通标示符号
Submitted by gougou on Sun, 2006-07-02 18:03大部分语言都提供了标示符号的词法规则,而关键字是特殊的标示符号,一个典型的标示符号的词法规则如下 ID : LETTER (LETTER | DIGIT)*; 但是按照上面的词法规则,没办法区分标示符号和关键字,Antlr允许我们创建一个关键字哈希表来解决这个问题。通常来说,当我们在文法中输入用双引号标示的关键字的时候,antlr生成代码时会自动创建相应的关键字哈希表。
不能在Parser部分对Rule使用~操作符号
Submitted by gougou on Tue, 2005-10-04 22:35不能在Parser部分对Rule使用~操作符号
对于Parser Rule,只能使用+, *, ?
但是可以对Lexer Rule使用~操作符号
antlr的缺点之一
Submitted by gougou on Sat, 2005-09-24 15:14出于性能的考虑,Antlr没有实现完全的LL(K)解析,而是用了线性的LL(K),但是线性LLK会产生很多的不确定性。经常导致你需要将自然的Parser Rule改写为不自然的形式。
不过据说Antlr 3将提供完全的LL(K)实现,不过从目前的进度来看,感觉要到2007年能推出就不错了:(
Antlr的贪婪模式语法
Submitted by gougou on Mon, 2005-08-29 09:43.-noscript-blocked { border: 1px solid red !important; background: white url("chrome://noscript/skin/icon32.png") no-repeat left top !important; opacity: 0.6 !important; }
下面的规则是非贪婪模式的语法,它会匹配{之后的任意字符而不会匹配}符号,
CURLY_BLOCK_SCARF
: '{' (.)* '}'
;
要想让Antlr能够匹配},我们需要将规则改为