為了生成編譯器的代碼,對(duì)語(yǔ)法樹(shù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行定義是必不可少的一項(xiàng)工作。在這里我設(shè)計(jì)了一套用于生成C++代碼的數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)定義文件的格式。
這份定義支持enum、class和typedef三種命名方法,支持基本類(lèi)型、C++類(lèi)型、列表、映射、指針以及智能指針等。因?yàn)榻Y(jié)構(gòu)簡(jiǎn)單,所以我直接貼一份示例出來(lái)。這份示例用于代表
這篇文章里的科學(xué)計(jì)算器表達(dá)式文法對(duì)應(yīng)的語(yǔ)法樹(shù)的結(jié)構(gòu)。Expression本應(yīng)是空的,為了對(duì)上述的例子進(jìn)行說(shuō)明,所以那些沒(méi)用上的功能就全部加在Expression里面了。
1 enum BinopType
2 {
3 Plus
4 Minus
5 Mul
6 Div
7 }
8 enum SinopType
9 {
10 Negative
11 }
12
13 class Expression
14 {
15 list<int> IntList
16 map<string,int> IntMap
17 Expression^ Autoptr
18 Expression* Pointer
19 "CustomType" Custom
20 }
21 typedef Expression^ ExpPtr
22 class Number
23 {
24 double Number
25 }
26 class Binop
27 {
28 BinopType Operator
29 ExpPtr LeftOp
30 ExpPtr RightOp
31 }
32 class Sinop
33 {
34 SinopType Operator
35 ExpPtr Operand
36 }
列表、映射和智能指針在Vczh Library++ 2.0里都有對(duì)應(yīng)的工具來(lái)表達(dá),將來(lái)生成的編譯器的代碼數(shù)據(jù)結(jié)構(gòu)將依賴(lài)于Vczh Library++ 2.0,而語(yǔ)法分析部分則直接使用庫(kù)中的Syngram。
posted on 2008-09-12 05:49
陳梓瀚(vczh) 閱讀(1233)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
腳本技術(shù)