為了生成編譯器的代碼,對語法樹的數據結構進行定義是必不可少的一項工作。在這里我設計了一套用于生成C++代碼的數據結構的數據結構定義文件的格式。
這份定義支持enum、class和typedef三種命名方法,支持基本類型、C++類型、列表、映射、指針以及智能指針等。因為結構簡單,所以我直接貼一份示例出來。這份示例用于代表
這篇文章里的科學計算器表達式文法對應的語法樹的結構。Expression本應是空的,為了對上述的例子進行說明,所以那些沒用上的功能就全部加在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里都有對應的工具來表達,將來生成的編譯器的代碼數據結構將依賴于Vczh Library++ 2.0,而語法分析部分則直接使用庫中的Syngram。
posted on 2008-09-12 05:49
陳梓瀚(vczh) 閱讀(1227)
評論(0) 編輯 收藏 引用 所屬分類:
腳本技術