yyq

问君...

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  98 随笔 :: 1 文章 :: 42 评论 :: 0 Trackbacks

一直想拥有一个属于自己的词法分析器(扫描器)生成器,本来想在一些现成的开源项目JLex、JFlex上修改,但感觉它们的代码实在难于下手,于是开始自己写,中间停停改改,也不记得做了多久了,现在算是基本成型了。

因为只是自己做,基本上是有了想法就加进去,因此到了后来,和传统的生成器是看上去是很不相像了,但Rsg确实有能力实现复杂扫描器(在examples中用Rsg实现了一个Java源程序扫描器)。主要的特点有:

  • 简单。
  • 在代码点上支持Unicode。

有兴趣者可到这里去下载试用:


http://www.blogjava.net/Files/20070716/rsg-1_0B.zip

下面是一个简单扫描器的Rsg描述文件实例,它实现了一个能识别标识符、整数、简单的字符串、字符并忽略空白和注释的扫描器(取自《Rsg使用指南》):

/**
* 这是一个简单的Rsg示例。
*/



regexp LineTerminator = "\r" | "\n" | "\r\n" ;
regexp WhiteSpace = LineTerminator | [' ', '\t', '\f'] ;
regexp Comment = "/*" % "*/" ;
regexp Letter = ['a'-'z', 'A'-'Z'];
regexp Digit = ['0'-'9'] ;
regexp Identifier = Letter (Letter | Digit) * ;
regexp Integer = Digit + ;
regexp StringCharacter = ~['\r', '\n', '\"'] ;
regexp SingleCharacter = ~['\r', '\n', '\''] ;

scanner RsgQs {
'"' StringCharacter * '"' : return STRING; /* 字符串 */
'\'' SingleCharacter '\'' : return CHARACTER; /* 字符 */
Identifier : return IDENTIFIER; /* 标识符 */
Integer : return INTEGER; /* 整数 */
Comment : skip; /* 注释 */
WhiteSpace :skip;

eoi : return EOI;
}
posted on 2007-09-02 01:14 yyq 阅读(2828) 评论(4)  编辑  收藏 所属分类: 编程

评论

# re: 终于拥有属于自己的Java扫描器生成器了[未登录] 2007-09-02 09:07 hiswing
想法不错。  回复  更多评论
  

# re: 终于拥有属于自己的Java扫描器生成器了 2008-06-08 14:05 chen_chirs
用 ant 去运行时会出现 NoSuchFieldException  回复  更多评论
  

# re: 终于拥有属于自己的Java扫描器生成器了 2008-06-08 14:06 chen_chirs
用 ant 去运行时会出现 UnsupportedClassVersionErro  回复  更多评论
  

# re: 终于拥有属于自己的Java扫描器生成器了 2008-07-28 00:33 yyq
@chen_chirs
应该是JDK的版本太低吧,用1.6可能会好了。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: