yyq

          問君...

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            98 隨筆 :: 1 文章 :: 42 評論 :: 0 Trackbacks

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

          因為只是自己做,基本上是有了想法就加進去,因此到了后來,和傳統的生成器是看上去是很不相像了,但Rsg確實有能力實現復雜掃描器(在examples中用Rsg實現了一個Java源程序掃描器)。主要的特點有:

          • 簡單。
          • 在代碼點上支持Unicode。

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


          http://www.aygfsteel.com/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 閱讀(2847) 評論(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可能會好了。  回復  更多評論
            

          主站蜘蛛池模板: 抚松县| 平远县| 治县。| 淮安市| 宣汉县| 广水市| 永城市| 万全县| 梁山县| 孟津县| 仪陇县| 汕头市| 华宁县| 吉木乃县| 明水县| 济南市| 灵璧县| 锡林郭勒盟| 红安县| 庆安县| 富蕴县| 女性| 衡东县| 常熟市| 板桥市| 新泰市| 台南县| 祁东县| 成安县| 武汉市| 井陉县| 色达县| 霍州市| 巫溪县| 乌拉特后旗| 朔州市| 锡林郭勒盟| 靖西县| 龙州县| 伽师县| 汤原县|