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

隨筆-91  評(píng)論-137  文章-0  trackbacks-0
 
首先生成抽象語法樹,方法如下:
1.根節(jié)點(diǎn)為0時(shí)表示沒有default標(biāo)簽,為1時(shí)表示有default標(biāo)簽
2.第0個(gè)根節(jié)點(diǎn)表示switch里的條件
3.若有default標(biāo)簽,則最后一個(gè)根節(jié)點(diǎn)為default子樹
4.每個(gè)根節(jié)點(diǎn)為0時(shí)表示在此標(biāo)簽下沒有stmt_list語句塊,這個(gè)節(jié)點(diǎn)的唯一孩子為要匹配的表達(dá)式;為1時(shí)表示有語句塊,根節(jié)點(diǎn)的左孩子表示要匹配的表達(dá)式,右孩子為要執(zhí)行的語句塊
注意:Equal指令會(huì)彈出兩操作數(shù),應(yīng)此在Equal指令執(zhí)行之前必須先保留switch里exp的副本(即Push一次),最后彈出副本
測試代碼:
 1 integer aaa,bbb
 2 
 3 function ccc()
 4     switch aaa + 1 do
 5         default:
 6             aaa = 123
 7         case 123:
 8             do
 9                 aaa = aaa + 1
10             while aaa < 789 end
11         case 456:
12             aaa = 123
13     end switch
14 end function
生成虛擬機(jī)代碼:
posted @ 2010-09-29 15:55 lwch 閱讀(1300) | 評(píng)論 (0)編輯 收藏
For語句的翻譯比較復(fù)雜,有3個(gè)前置條件和運(yùn)行代碼,1個(gè)語句塊,也就有4*3*2*1=24種情況.應(yīng)此在生成抽象語法樹的時(shí)候我采用的是2進(jìn)制位來表示當(dāng)前塊是否存在,其中最底位表示stmt_list語句塊,倒數(shù)第2位表示by之后的語句是否存在,倒數(shù)第3位表示to之后的表達(dá)式是否存在,倒數(shù)第4位表示for之后的語句是否存在.
代碼:
 1 integer aaa,bbb
 2 
 3 function ccc()
 4     do
 5         for aaa = 456 to by do
 6             if aaa == 456 then
 7                 aaa = 789
 8             end if
 9         next
10         aaa = 123
11     while aaa == 123 end
12 end function
翻譯結(jié)果:
posted @ 2010-09-22 12:20 lwch 閱讀(1640) | 評(píng)論 (0)編輯 收藏
已實(shí)現(xiàn)do,while,if和賦值語句的語法制導(dǎo)翻譯,這次將他們逐層嵌套起來看看翻譯結(jié)果是否正確.
代碼:
 1 integer aaa
 2 
 3 function ccc()
 4     while aaa == 123 do
 5         do
 6             if aaa == 123 then
 7                 if aaa == 456 then aaa = 123
 8                 else aaa = 456
 9                 end if
10             end if
11         while aaa == 123 end
12     end while
13     aaa = 456
14 end function
翻譯結(jié)果:
posted @ 2010-09-20 22:29 lwch 閱讀(1621) | 評(píng)論 (2)編輯 收藏
1 integer aaa
2 
3 function ccc()
4     if aaa and true then
5     end if
6 end function



1 integer aaa
2 
3 function ccc()
4     if aaa and true then
5         aaa = 123
6     end if
7 end function



1 integer aaa
2 
3 function ccc()
4     if aaa and true then
5     else
6     end if
7 end function



1 integer aaa
2 
3 function ccc()
4     if aaa and true then
5         aaa = 123
6     else
7     end if
8 end function



1 integer aaa
2 
3 function ccc()
4     if aaa and true then
5     else
6         aaa = 123
7     end if
8 end function



1 integer aaa
2 
3 function ccc()
4     if aaa and true then
5         aaa = 123
6     else
7         aaa = 456
8     end if
9 end function

posted @ 2010-09-19 07:27 lwch 閱讀(1652) | 評(píng)論 (0)編輯 收藏
首先生成抽象語法樹(AST)
生成方法:
1.移進(jìn)時(shí)將Number,String或Symbol分別加入對(duì)應(yīng)集合
2.歸約時(shí)從集合中取出對(duì)應(yīng)的成員,并刪除這條產(chǎn)生式里的所有終結(jié)符
3.將產(chǎn)生的語法樹節(jié)點(diǎn)壓入棧中
4.當(dāng)遇到產(chǎn)生式item_list->item_list item或stmt_list->stmt_list stmt時(shí)從棧中彈出兩顆語法樹并按順序連接起來
5.當(dāng)遇到非終結(jié)符時(shí)彈出相應(yīng)數(shù)量的語法樹節(jié)點(diǎn),生成新的根節(jié)點(diǎn)并把彈出的語法樹節(jié)點(diǎn)都連接到這個(gè)新的根節(jié)點(diǎn)上
6.當(dāng)歸約到第0條產(chǎn)生式時(shí)檢查棧的元素?cái)?shù)量,1為正常值,然后對(duì)抽象語法樹進(jìn)行前序遍歷并生成虛擬機(jī)代碼

posted @ 2010-09-17 22:21 lwch 閱讀(763) | 評(píng)論 (0)編輯 收藏
     摘要:   1 %token "function" "as" "end";  2 %token "integer" "string" "bool" "pointer";  3 %token "if" "then" "e...  閱讀全文
posted @ 2010-09-17 22:04 lwch 閱讀(1090) | 評(píng)論 (0)編輯 收藏
輸入文件:
 1 string abc,def;
 2 
 3 void main()
 4 {
 5     int abc,def;
 6     read(abc);
 7     write(abc);
 8     write("aaa");
 9 }
10 
11 void aaa()
12 {
13     int abc;
14 }
15 
16 int ddd,fff;

生成虛擬機(jī)代碼為:


賦值語句邏輯比較復(fù)雜還未完成..
posted @ 2010-09-01 16:09 lwch 閱讀(1435) | 評(píng)論 (0)編輯 收藏

分析文件:

 1 string abc;
 2 
 3 void main()
 4 {
 5     int a,b,c;
 6     read(a);
 7     write("aaa");
 8     write(a);
 9     b = 10;
10     c = 100;
11 }
12 
13 int cc()
14 {
15 }

結(jié)果:


下面的工作則是大量的語義處理...
posted @ 2010-08-31 23:27 lwch 閱讀(651) | 評(píng)論 (0)編輯 收藏

分析器文法:

 1 %token    "%token" "%start"                ;
 2 %token    ";" "->" "|"                    ;
 3 
 4 %start program                        ;
 5 
 6 program        ->    item_list
 7         ;
 8 
 9 item_list    ->    item_list item
10         |    item
11         ;
12 
13 item        ->    token_def ";"
14         |    start_def ";"
15         |    rule_def ";"
16         |    ";"
17         ;
18 
19 token_def    ->    token_def "{String}"
20         |    "%token" "{String}"
21         ;
22 
23 start_def    ->    "%start" "{Symbol}"
24         ;
25 
26 rule_def    ->    "{Symbol}" "->" rhs_list
27         ;
28 
29 rhs_list    ->    rhs_list "|" rhs
30         |    rhs
31         ;
32 
33 rhs        ->    rhs "{String}"
34         |    rhs "{Symbol}"
35         |    "{String}"
36         |    "{Symbol}"
37         ;
38 
NScriptMacro
主要用來將給定的文法文件轉(zhuǎn)化為LALR(1)分析表,生成的cpp和h文件可使用分析器分析,out文件是語法分析表
里面有個(gè)簡單的CMinus的例子
posted @ 2010-08-30 17:29 lwch 閱讀(1508) | 評(píng)論 (1)編輯 收藏
對(duì)于給定文法文件:
 1 %token "if" "then" "else" "end" ;
 2 %token "st" ;
 3 %token "+" "*" ;
 4 
 5 %start program ;
 6 
 7 program        ->    if_stmt
 8         ;
 9 
10 if_stmt        ->    "if" exp "then" stmt "end"
11         |    "if" exp "then" stmt "else" stmt "end"
12         ;
13 
14 exp        ->    exp1
15         ;
16 
17 exp1        ->    exp1 "+" exp2
18         |    exp2
19         ;
20 
21 exp2        ->    exp2 "*" exp3
22         |    exp3
23         ;
24 
25 exp3        ->    "{LQ}" exp1 "{RQ}"
26         |    "{digit}"
27         ;
28 
29 stmt        ->    "st"
30         ;
生成分析表得:
posted @ 2010-08-28 15:28 lwch 閱讀(289) | 評(píng)論 (0)編輯 收藏
 1 %token    "%token" "%start"                ;
 2 %token    ";" "->" "|"                    ;
 3 
 4 %start program                        ;
 5 
 6 program        ->    item_list
 7         ;
 8 
 9 item_list    ->    item_list item
10         |    item
11         ;
12 
13 item        ->    token_def ";"
14         |    start_def ";"
15         |    rule_def ";"
16         |    ";"
17         ;
18 
19 token_def    ->    token_def "{String}"
20         |    "%token" "{String}"
21         ;
22 
23 start_def    ->    "%start" "{Symbol}"
24         ;
25 
26 rule_def    ->    "{Symbol}" "->" rhs_list
27         ;
28 
29 rhs_list    ->    rhs_list "|" rhs
30         |    rhs
31         ;
32 
33 rhs        ->    rhs "{String}"
34         |    rhs "{Symbol}"
35         |    "{String}"
36         |    "{Symbol}"
37         ;
38 
去除了letter定義,暫時(shí)還不支持正則表達(dá)式..
posted @ 2010-08-28 15:23 lwch 閱讀(241) | 評(píng)論 (0)編輯 收藏
  1 #include <iostream>
  2 
  3 template <typename _Type>
  4 class HashTable
  5 {
  6 public:
  7     HashTable(int Length)
  8     {
  9         Element = new _Type[Length];
 10         for(int i=0;i<Length;i++)
 11             Element[i] = -1;
 12         this->Length = Length;
 13         Count = 0;
 14     }
 15     
 16     ~HashTable()
 17     {
 18         delete[] Element;
 19     }
 20     
 21     // Hash函數(shù)
 22     virtual int Hash(_Type Data)
 23     {
 24         return Data % Length;
 25     }
 26     
 27     // 再散列法
 28     virtual int ReHash(int Index,int Count)
 29     {
 30         return (Index + Count) % Length;
 31     }
 32     
 33     // 查找某個(gè)元素是否在表中
 34     virtual bool SerachHash(_Type Data,int& Index)
 35     {
 36         Index = Hash(Data);
 37         int Count = 0;
 38         while(Element[Index] != -1 && Element[Index] != Data)
 39             Index = ReHash(Index,++Count);
 40         return Data == Element[Index] ? true : false;
 41     }
 42     
 43     virtual int SerachHash(_Type Data)
 44     {
 45         int Index = 0;
 46         if(SerachHash(Data,Index)) return Index;
 47         else return -1;
 48     }
 49     
 50     // 插入元素
 51     bool InsertHash(_Type Data)
 52     {
 53         int Index = 0;
 54         if(Count < Length && !SerachHash(Data,Index))
 55         {
 56             Element[Index] = Data;
 57             Count++;
 58             return true;
 59         }
 60         return false;
 61     }
 62     
 63     // 設(shè)置Hash表長度
 64     void SetLength(int Length)
 65     {
 66         delete[] Element;
 67         Element = new _Type[Length];
 68         for(int i=0;i<Length;i++)
 69             Element[i] = -1;
 70         this->Length = Length;
 71     }
 72     
 73     // 刪除某個(gè)元素
 74     void Remove(_Type Data)
 75     {
 76         int Index = SerachHash(Data);
 77         if(Index != -1)
 78         {
 79             Element[Index] = -1;
 80             Count--;
 81         }
 82     }
 83     
 84     // 刪除所有元素
 85     void RemoveAll()
 86     {
 87         for(int i=0;i<Length;i++)
 88             Element[i] = -1;
 89         Count = 0;
 90     }
 91     
 92     void Print()
 93     {
 94         for(int i=0;i<Length;i++)
 95             printf("%d ",Element[i]);
 96         printf("\n");
 97     }
 98 protected:
 99     _Type* Element;        // Hash表
100     int Length;                // Hash表大小
101     int Count;                // Hash表當(dāng)前大小
102 };
103 
104 void main()
105 {
106     HashTable<int> H(10);
107     printf("Hash Length(10) Test:\n");
108     int Array[6= {49,38,65,97,13,49};
109     for(int i=0;i<6;i++)
110         printf("%d\n",H.InsertHash(Array[i]));
111     H.Print();
112     printf("Find(97):%d\n",H.SerachHash(97));
113     printf("Find(49):%d\n",H.SerachHash(49));
114     H.RemoveAll();
115     H.SetLength(30);
116     printf("Hash Length(30) Test:\n");
117     for(int i=0;i<6;i++)
118         printf("%d\n",H.InsertHash(Array[i]));
119     H.Print();
120     printf("Find(97):%d\n",H.SerachHash(97));
121     printf("Find(49):%d\n",H.SerachHash(49));
122     system("pause");
123 }


運(yùn)行結(jié)果:


由上圖可知給定的Hash表長度越長越不容易產(chǎn)生沖突,性能也就越高.

posted @ 2010-08-10 23:37 lwch 閱讀(580) | 評(píng)論 (1)編輯 收藏

基本語法:

 1 %token    "%token" "%letter" "%start"            ;
 2 %token    ":" ";" "->" "|"                ;
 3 
 4 %letter string    :    "{string}"            ;
 5 %letter symbol    :    "{symbol}"            ;
 6 
 7 %start program                        ;
 8 
 9 string_list    ->    string_list string
10         |    string
11         ;
12 
13 symbol_list    ->    symbol_list symbol
14         |    symbol
15         ;
16 
17 program        ->    item_list
18         ;
19 
20 item_list    ->    item_list item
21         |    item
22         ;
23 
24 item        ->    token_def ";"
25         |    letter_def ";"
26         |    start_def ";"
27         |    rule_def ";"
28         |    ";"
29         ;
30 
31 token_def    ->    "%token" string_list
32         ;
33 
34 letter_def    ->    "%letter" symbol ":" string_list
35         ;
36 
37 start_def    ->    "%start" symbol
38         ;
39 
40 rule_def    ->    symbol "->" rhs_list
41         ;
42 
43 rhs_list    ->    rhs_list "|" rhs
44         |    rhs
45         ;
46 
47 rhs        ->    term_list
48         ;
49 
50 term_list    ->    term_list string
51         |    term_list symbol
52         |    string
53         |    symbol
54         ;


生成的分析表:
由于狀態(tài)數(shù)量和非終結(jié)符數(shù)量過多,所以給出文件《分析表》

下面是四則混合運(yùn)算的文法文件:
 1 %token "+" "-"                ;
 2 %token "*" "/"                ;
 3 %token "(" ")"                ;
 4 
 5 %letter AddOp    :    "+" "-"        ;
 6 %letter MulOp    :    "*" "/"        ;
 7 %letter ID    :    "{digit}"    ;
 8 %letter LQ    :    "("        ;
 9 %letter RQ    :    ")"        ;
10 
11 %start Program                ;
12 
13 Program        ->    Exp
14         ;
15 
16 Exp        ->    Exp AddOp Term
17         |    Term
18         ;
19 
20 Term        ->    Term MulOp Factor
21         |    Factor
22         ;
23 
24 Factor        ->    LQ Exp RQ
25         |    ID
26         ;
posted @ 2010-08-03 20:21 lwch 閱讀(319) | 評(píng)論 (0)編輯 收藏
對(duì)于給定表達(dá)式:
123 * 567 + 456 * (789 + 456)
生成四元碼得:


對(duì)于表達(dá)式:
123 + 456 * (789 + 456) / 123 + 789
生成四元碼得:
posted @ 2010-08-01 01:05 lwch 閱讀(455) | 評(píng)論 (0)編輯 收藏
對(duì)于式子:10 + (5 + 9) / 3 - 7 * 3
求解過程如下:
 

主要在規(guī)約過程中增加了調(diào)用相關(guān)語義處理函數(shù)來實(shí)現(xiàn)計(jì)算.
posted @ 2010-07-26 11:41 lwch 閱讀(386) | 評(píng)論 (0)編輯 收藏
僅列出標(biāo)題
共7頁: 1 2 3 4 5 6 7 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久久有精品国产| 亚洲乱码一区二区| 欧美一区二区三区视频免费播放| 日韩系列在线| 欧美日韩视频在线| 亚洲欧美日韩人成在线播放| 在线午夜精品自拍| 国产日产亚洲精品系列| 久久久久久久久久久久久女国产乱| 欧美一级免费视频| 在线成人h网| 亚洲精品精选| 欧美日韩亚洲网| 久久精品观看| 久久久一二三| 亚洲一区二区三区四区在线观看| 亚洲无亚洲人成网站77777| 国产亚洲福利社区一区| 欧美激情aⅴ一区二区三区| 欧美区二区三区| 欧美在线电影| 欧美成在线观看| 亚洲综合成人婷婷小说| 欧美尤物巨大精品爽| 亚洲精品一区在线观看| 亚洲尤物在线视频观看| 在线日本成人| 亚洲午夜伦理| 亚洲三级免费观看| 午夜精品久久久久久久久久久久| 91久久精品国产91久久性色| 一二三区精品| 亚洲激情在线激情| 欧美一级二级三级蜜桃| 亚洲看片免费| 久久久精品国产一区二区三区| 一区二区日韩欧美| 久久在线视频在线| 欧美一级淫片播放口| 欧美激情一区| 欧美aa国产视频| 国产日韩欧美亚洲一区| 99精品欧美一区| 亚洲欧洲在线视频| 久久精品免费看| 欧美在线网址| 国产精品久久久久久久久久免费看 | 亚洲欧美制服另类日韩| 一本久久综合亚洲鲁鲁| 久久婷婷久久| 久久成人在线| 国产精品人人做人人爽| 亚洲日本中文字幕免费在线不卡| 伊人狠狠色j香婷婷综合| 亚洲欧美日韩在线| 亚洲欧美日韩国产一区二区三区| 欧美激情麻豆| 亚洲第一网站免费视频| 影音先锋日韩有码| 久久精品72免费观看| 欧美有码在线观看视频| 国产精品国产精品| 亚洲视屏一区| 亚洲综合另类| 国产精品美女诱惑| 亚洲深夜影院| 香蕉久久国产| 国产精品三级视频| 亚洲欧美视频| 久久久精品性| 伊人成人在线| 欧美成人视屏| 亚洲日本va午夜在线影院| 亚洲乱码国产乱码精品精98午夜| 欧美r片在线| 亚洲精品一区二区三区在线观看| 日韩午夜av在线| 欧美午夜激情在线| 亚洲视频综合在线| 久久国产精品99久久久久久老狼| 国产女主播视频一区二区| 亚洲免费网站| 久久手机免费观看| 亚洲国产精品专区久久| 欧美 日韩 国产 一区| 亚洲精选国产| 欧美一区二区三区四区在线| 国产一区二区三区免费在线观看| 久久久国产午夜精品| 亚洲成人中文| 午夜精品www| 精品电影在线观看| 欧美精品一区二区三区在线看午夜| 99这里只有精品| 久久成人人人人精品欧| 亚洲国产精品久久| 国产精品r级在线| 久久久精品久久久久| 日韩视频免费在线观看| 午夜欧美精品| 亚洲人成啪啪网站| 国产乱肥老妇国产一区二 | 欧美成熟视频| 亚洲综合色激情五月| 精品成人国产| 欧美视频一区二区三区在线观看 | 欧美一区永久视频免费观看| 欧美激情一区三区| 欧美亚洲一区| 日韩亚洲综合在线| 狠狠色伊人亚洲综合网站色| 欧美日韩在线播放| 久久精品理论片| 亚洲综合久久久久| 亚洲欧洲一区二区天堂久久 | 久久婷婷麻豆| 亚洲欧美国产精品桃花| 亚洲国产欧美不卡在线观看| 国产精品一区免费视频| 欧美电影免费观看| 久久久91精品| 亚洲一区二区三区色| 亚洲人成人77777线观看| 久久亚洲不卡| 久久经典综合| 亚洲综合欧美| 亚洲新中文字幕| 亚洲精品一二区| 亚洲大片av| 影视先锋久久| 国产一区二区中文| 国产日韩欧美二区| 国产精品久久久久久久久久久久| 欧美极品在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 午夜视频一区在线观看| 亚洲一级在线| 亚洲永久字幕| 亚洲一区免费在线观看| 在线视频精品一区| 一区二区三区高清视频在线观看| 91久久亚洲| 亚洲三级毛片| 日韩午夜在线视频| 一本色道久久综合亚洲精品按摩| 亚洲激情影院| 亚洲九九九在线观看| 亚洲理论在线观看| 99精品欧美一区二区三区| 亚洲精品四区| 中文精品一区二区三区| 亚洲午夜日本在线观看| 亚洲网站在线观看| 欧美一区二区三区婷婷月色 | 蜜桃av一区| 欧美国产日韩视频| 欧美日韩成人一区二区| 欧美视频在线观看| 国产日韩欧美一区二区三区四区| 国产三级欧美三级| 亚洲高清免费在线| 亚洲精品一区二区三区不| 亚洲作爱视频| 欧美亚洲视频在线看网址| 久久久久久久久久久久久9999| 久久综合五月天婷婷伊人| 欧美aa在线视频| 99成人在线| 亚洲欧美日本视频在线观看| 久久国产天堂福利天堂| 免费人成网站在线观看欧美高清| 欧美人与性动交cc0o| 国产精品久久久久久久久久ktv| 国产性猛交xxxx免费看久久| 亚洲国产成人午夜在线一区| 亚洲乱码视频| 欧美一进一出视频| 蜜桃av一区| 在线亚洲欧美专区二区| 性色av一区二区三区在线观看| 毛片一区二区三区| 国产精品毛片a∨一区二区三区|国| 国模一区二区三区| 99国产精品久久久久老师| 欧美专区在线| 欧美日韩在线大尺度| 国产精品视频精品视频| 亚洲欧洲视频| 久久久青草青青国产亚洲免观| 91久久国产综合久久| 欧美在线视频免费| 欧美日韩一区二区国产| 极品少妇一区二区| 亚洲在线免费视频| 欧美激情成人在线| 午夜国产精品视频免费体验区| 欧美精品福利| 在线电影一区| 久久精品国产清高在天天线| 日韩视频欧美视频|