yyq

          問君...

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            98 隨筆 :: 1 文章 :: 42 評(píng)論 :: 0 Trackbacks

          一直想擁有一個(gè)屬于自己的詞法分析器(掃描器)生成器,本來想在一些現(xiàn)成的開源項(xiàng)目JLex、JFlex上修改,但感覺它們的代碼實(shí)在難于下手,于是開始自己寫,中間停停改改,也不記得做了多久了,現(xiàn)在算是基本成型了。

          因?yàn)橹皇亲约鹤觯旧鲜怯辛讼敕ň图舆M(jìn)去,因此到了后來,和傳統(tǒng)的生成器是看上去是很不相像了,但Rsg確實(shí)有能力實(shí)現(xiàn)復(fù)雜掃描器(在examples中用Rsg實(shí)現(xiàn)了一個(gè)Java源程序掃描器)。主要的特點(diǎn)有:

          • 簡(jiǎn)單。
          • 在代碼點(diǎn)上支持Unicode。

          有興趣者可到這里去下載試用:


          http://www.aygfsteel.com/Files/20070716/rsg-1_0B.zip

          下面是一個(gè)簡(jiǎn)單掃描器的Rsg描述文件實(shí)例,它實(shí)現(xiàn)了一個(gè)能識(shí)別標(biāo)識(shí)符、整數(shù)、簡(jiǎn)單的字符串、字符并忽略空白和注釋的掃描器(取自《Rsg使用指南》):

          /**
          * 這是一個(gè)簡(jiǎn)單的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; /* 標(biāo)識(shí)符 */
          Integer : return INTEGER; /* 整數(shù) */
          Comment : skip; /* 注釋 */
          WhiteSpace :skip;

          eoi : return EOI;
          }
          posted on 2007-09-02 01:14 yyq 閱讀(2847) 評(píng)論(4)  編輯  收藏 所屬分類: 編程

          評(píng)論

          # re: 終于擁有屬于自己的Java掃描器生成器了[未登錄] 2007-09-02 09:07 hiswing
          想法不錯(cuò)。  回復(fù)  更多評(píng)論
            

          # re: 終于擁有屬于自己的Java掃描器生成器了 2008-06-08 14:05 chen_chirs
          用 ant 去運(yùn)行時(shí)會(huì)出現(xiàn) NoSuchFieldException  回復(fù)  更多評(píng)論
            

          # re: 終于擁有屬于自己的Java掃描器生成器了 2008-06-08 14:06 chen_chirs
          用 ant 去運(yùn)行時(shí)會(huì)出現(xiàn) UnsupportedClassVersionErro  回復(fù)  更多評(píng)論
            

          # re: 終于擁有屬于自己的Java掃描器生成器了 2008-07-28 00:33 yyq
          @chen_chirs
          應(yīng)該是JDK的版本太低吧,用1.6可能會(huì)好了。  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 扎兰屯市| 高清| 长顺县| 介休市| 且末县| 琼海市| 博爱县| 东乡族自治县| 榆林市| 阜阳市| 内乡县| 英德市| 定日县| 江油市| 桂东县| 湘潭市| 凤阳县| 保德县| 玉树县| 赤水市| 龙山县| 泰来县| 怀来县| 隆昌县| 武平县| 梁河县| 奉新县| 宝鸡市| 建德市| 积石山| 德安县| 揭阳市| 德令哈市| 湘阴县| 石嘴山市| 高邑县| 清流县| 广水市| 阳西县| 增城市| 新干县|