青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0

除了錯誤處理文件還沒有定義好以外,現(xiàn)在語法定義跟語法樹的數(shù)據(jù)結(jié)構(gòu)定義以及分析器都完成了!有了這兩個文件,我的工具就可以替你生成一個函數(shù)和一堆類,讓你使用這個函數(shù)就可以將一份代碼轉(zhuǎn)換為一顆語法樹啦。娃哈哈……

 

現(xiàn)在讓我們來看一個例子,這個例子展示了一個科學計算器的表達式的結(jié)構(gòu)定義以及語法定義。首先是數(shù)據(jù)結(jié)構(gòu)的定義:

enum BinopType

{

  Plus

  Minus

  Mul

  Div

}

enum SinopType

{

  Negative

}

 

class Expression

{

}

class Number Expression

{

  double                              Number

}

class Binop Expression

{

  BinopType                      Operator

  Expression^                   LeftOp

  Expression^                   RightOp

}

class Sinop Expression

{

  SinopType                       Operator

  Expression^                   Operand

}

class Invoke Expression

{

  string                               Name;

  list<Expression^>         Parameters;

}

 

Type^的意思是autoptr<Type>。因為語義已經(jīng)決定了這玩意兒是生成樹的,所以我們不需要考慮循環(huán)引用的問題。如果你不改動這個樹的話,你可以不必刪除,autoptr自己會將這些問題處理掉的。內(nèi)存管理是一件多么麻煩的事情啊,于是我解決掉了。class后面的第一個名稱是類名,如果第二個名稱存在的話則代表父類的類名,可以用來表達繼承關(guān)系。

 

那么現(xiàn)在看看語法的定義:

num                   ="\d+(.\d+)?"            ;

ident                  ="[a-zA-Z_]\w*"       ;

plus                    ="\+"                           ;

minus                ="\-"                                     ;

mul                    ="\*"                           ;

div                      ="/"                             ;

leftbrace           ="\("                                     ;

rightbrace        ="\)"                                     ;

comma              =","                             ;

discard              ="\s+"                         ;

 

Number^                    factor=num{Number};

Sinop^                         factor=minus{Operator=Negative} factor{Operand};

Expression^               factor=leftbrace exp{#result} rightbrace;

Invoke^                       factor=ident{Name}[leftbrace param_list{Parameters} rightbrace];

Expression^               term =factor{#result};

Binop^                       term=term{LeftOp} (mul{Operator=Mul}|div{Operator=Div}) factor{RightOp};

Expression^               exp=term{#result};

Binop^                        exp=exp{LeftOp} (plus{Operator=Plus}|minus{Operator=Minus}) term{RightOp};

list<Expression^>    param_list=exp{#insert} [comma param_list{#result}];

Expression^               program=exp{#result};

 

我們來看其中的兩條文法。第一條文法:list<Expression^>param_list=exp{#insert}[comma param_list{#result}];。文法推導(dǎo)式子返回list<Expression^>類型的對象。如果param_list存在那么將param_list當成當前的列表,否則創(chuàng)建一個新列表。然后將exp使用insert方法插入列表的頭部。最后返回列表。

 

第二條文法:Binop^ exp=exp{LeftOp} (plus{Operator=Plus}|minus{Operator=Minus}) term{RightOp};。文法推導(dǎo)式子返回Binop^類型的對象。將exp放入成員LeftOp,將term放入成員RightOp,如果遇到plus則將Operator設(shè)置為BinopType::Plus,否則設(shè)置為BinopType::Minus。參考一下前面對于類Binop以及枚舉類型BinopType的定義就知道了。

 

文法從program開始,分析器檢查輸入的字符串,得到一個正確的推倒之后,就是用這些語義命令來構(gòu)造所需的數(shù)據(jù)結(jié)構(gòu)。當整個過程被生成為C++代碼之后,一切都變得非常的方便。等代碼生成部分完成之后(這一部分由于將產(chǎn)生基于我半年前做的Syngram庫的代碼,由于Syngram支持在C++里面直接寫文法,所以代碼生成是沒有什么難度的,而且做起來很快)就算不會處理字符串也可以寫文法分析器啦!

posted on 2008-09-14 00:53 陳梓瀚(vczh) 閱讀(1434) 評論(3)  編輯 收藏 引用 所屬分類: 腳本技術(shù)

評論:
# re: 語法分析器定義接近完成! 2008-09-14 00:56 | Real
博主辛苦了,那么多作品。  回復(fù)  更多評論
  
# re: 語法分析器定義接近完成! 2008-09-14 02:23 | jx
您可真是個強人,不知道你考研不?  回復(fù)  更多評論
  
# re: 語法分析器定義接近完成! 2008-09-14 03:14 | 陳梓瀚(vczh)
不考  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美主播一区二区三区美女 久久精品人 | 欧美一区二区三区四区夜夜大片| 欧美日韩国产精品专区| 亚洲综合国产| 亚洲人成网站在线播| 亚洲视频中文| 国产欧美日韩视频一区二区| 欧美在线播放| 夜夜精品视频一区二区| 久久免费少妇高潮久久精品99| 亚洲电影免费在线| 国产亚洲永久域名| 欧美久久久久久久| 狂野欧美激情性xxxx欧美| 狠狠色综合色区| 国内精品久久国产| 国产精品视频大全| 欧美日韩国产大片| 欧美freesex8一10精品| 久久精品中文字幕一区二区三区| 一区二区三区黄色| 日韩天堂av| 亚洲乱码一区二区| 99视频有精品| 亚洲一区二区av电影| aa级大片欧美三级| 一区二区三区日韩欧美精品| 欧美黄色一区| 亚洲国产欧美国产综合一区| 亚洲电影免费观看高清完整版在线| 久久男人资源视频| 欧美成人亚洲成人日韩成人| 欧美电影免费观看大全| 亚洲第一二三四五区| 亚洲精品国产系列| 亚洲影院一区| 免费成人网www| 国产精品黄页免费高清在线观看| 国产精品毛片一区二区三区| 国产一区二区精品久久91| 精品动漫3d一区二区三区| 亚洲国产精品va在线看黑人动漫| 亚洲美女视频在线免费观看| 午夜视频精品| 91久久久久久| 久久久亚洲影院你懂的| 国产精品福利久久久| 在线看成人片| 午夜一区不卡| 国产欧美日韩一区二区三区| 最新亚洲一区| 久久久国产一区二区三区| 91久久久在线| 免费成人激情视频| 国产在线观看91精品一区| 一区二区三区产品免费精品久久75 | 国产酒店精品激情| 亚洲欧美日韩国产成人| 欧美色123| 亚洲激情在线视频| 欧美成在线观看| 久久亚洲一区二区| 樱桃成人精品视频在线播放| 亚洲欧美精品| 亚洲影视综合| 韩国v欧美v日本v亚洲v| 久久在线视频| 久久天天躁狠狠躁夜夜av| 国产亚洲欧美日韩美女| 久久精品亚洲热| 久久成人资源| 亚洲国产欧美在线人成| 亚洲国产一区二区三区在线播| 久久久久久久综合色一本| 国产综合香蕉五月婷在线| 久久综合给合| 欧美日韩一区二区免费在线观看| 中文一区在线| 性娇小13――14欧美| 激情五月婷婷综合| 亚洲精品久久久久久久久久久| 欧美日韩一区二区在线观看| 亚洲欧美99| 久久婷婷影院| 午夜精品久久久99热福利| 欧美自拍偷拍| 亚洲一区二区伦理| 久久久亚洲综合| 欧美亚洲一区三区| 欧美电影免费观看大全| 久久超碰97中文字幕| 欧美激情导航| 久热精品视频在线| 国产日韩欧美综合一区| 亚洲高清激情| 影音国产精品| 久久影视三级福利片| 欧美在线观看网站| 欧美日韩精品免费观看视一区二区| 久久精品亚洲| 国产欧美综合一区二区三区| 亚洲欧洲另类国产综合| 黄色精品一二区| 久久国产欧美精品| 久久精品九九| 狠狠色狠狠色综合日日91app| 亚洲视频在线观看一区| 亚欧成人精品| 国产亚洲综合精品| 久久精品国产成人| 久久夜色精品国产欧美乱| 国产精品一二三视频| 欧美一区二区三区另类| 久久久久女教师免费一区| 国产欧美日韩在线视频| 亚洲影视综合| 久久亚洲欧美国产精品乐播| 国产视频自拍一区| 嫩草影视亚洲| 一区二区三区产品免费精品久久75 | 激情欧美一区二区三区| 麻豆成人综合网| 99精品国产一区二区青青牛奶 | 国产一区二区三区在线观看免费| 久久综合五月| 亚洲一区精彩视频| 美女精品网站| 午夜精品久久久久久久99热浪潮| 国产亚洲美州欧州综合国| 欧美激情中文字幕乱码免费| 亚洲美女中文字幕| 欧美高清视频一区| 久久激情五月丁香伊人| 亚洲精品色图| 亚洲福利视频在线| 国产精品欧美久久| 欧美日韩久久久久久| 久久在线免费视频| 欧美在线不卡| 性娇小13――14欧美| 亚洲一区二区在线| 亚洲美女av电影| 亚洲国产成人av| 女主播福利一区| 欧美成人精品1314www| 老司机免费视频一区二区| 香蕉av福利精品导航| 亚洲网站在线播放| 一区二区精品在线| 亚洲精品在线观| 夜夜嗨一区二区三区| 亚洲伦伦在线| 亚洲午夜电影网| 欧美在线不卡| 久久视频在线视频| 欧美不卡视频一区发布| 欧美激情中文字幕乱码免费| 免费在线观看精品| 亚洲欧洲精品一区二区| 一区二区三区四区国产精品| 亚洲综合色丁香婷婷六月图片| 午夜国产精品视频免费体验区| 亚洲欧美日韩在线播放| 久久久久久一区二区三区| 免费在线播放第一区高清av| 欧美成人激情在线| 欧美午夜www高清视频| 国产欧美日韩一级| 亚洲精品影院| 久久精品主播| 亚洲精品影视在线观看| 亚洲综合第一| 欧美高清视频一区二区| 国产精品亚洲综合一区在线观看| 国内精品伊人久久久久av一坑| 91久久精品国产91性色| 先锋影音一区二区三区| 亚洲国产日韩欧美一区二区三区| 夜夜嗨网站十八久久| 欧美a级在线| 好吊一区二区三区| 亚洲欧美日韩精品久久奇米色影视| 久久亚洲国产成人| 亚洲欧美在线网| 国产精品啊啊啊| 亚洲精品偷拍| 亚洲国产成人在线视频| 久久一综合视频| 一区二区在线视频播放| 久久大综合网| 久久成人免费网| 一区二区在线免费观看| 麻豆九一精品爱看视频在线观看免费| 99在线精品免费视频九九视| 欧美精品日韩三级| 在线一区二区三区做爰视频网站 | 欧美深夜影院| 久久成人免费电影| 欧美影院久久久| 91久久久久久国产精品|