• <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>
            隨筆-341  評論-2670  文章-0  trackbacks-0
                整整寫了一天,終于基本寫完了CMinus的語義分析的代碼,只剩下一個檢查struct是否可以計算出長度的問題(環(huán)引用造成的)。下面貼出語義分析的結(jié)果,從結(jié)果中可以看出符號表的結(jié)構(gòu)以及構(gòu)造方法:

                結(jié)果分成兩部分,第一部分是格式化后的代碼,第二部分是符號表。
              1 開始語法分析
              2 void BubbleSort (int* Input, int Count)
              3 {
              4   int i = 0;
              5   while ((i < (Count - 1)))
              6   {
              7     int j = (Count - 2);
              8     while ((j >= i))
              9     {
             10       if ((Input[j] > Input[(j + 1)]))
             11       {
             12         int Temp = Input[j];
             13         Input[j] = Input[(j + 1)];
             14         Input[(j + 1)] = Temp;
             15       }
             16       j -= 1;
             17     }
             18     i += 1;
             19   }
             20 }
             21 
             22 int Fab (int Index)
             23 {
             24   if ((Index < 2))
             25     return 1;
             26   else
             27     return (Fab((Index - 1)) + Fab((Index - 2)));
             28 }
             29 
             30 typedef struct
             31 {
             32   int Data;
             33   Node* Next;
             34 } Node;
             35 
             36 extern void* malloc (int) alias "malloc";
             37 
             38 extern void free (void*) alias "free";
             39 
             40 Node* CreateNodes ()
             41 {
             42   Node* Head = (Node*)malloc(sizeof(Node));
             43   *Head = Node{0null};
             44   Node* Tail = Head;
             45   int Current = 1;
             46   do
             47   {
             48     Node* NewNode = (Node*)malloc(sizeof(Node));
             49     *NewNode = Node{Current, null};
             50     Tail->Next = NewNode;
             51     Tail = NewNode;
             52   }
             53   while ((Current <= 4));
             54   return Head;
             55 }
             56 
             57 void FreeNodes (Node* Head)
             58 {
             59   while ((Head != null))
             60   {
             61     Node* Next = Head->Next;
             62     free(Head);
             63     Head = Next;
             64   }
             65 }
             66 
             67 void CreateAndFreeNodes ()
             68 {
             69   FreeNodes(CreateNodes());
             70 }
             71 
             72 int SubRev (int A, int B)
             73 {
             74   return (-+ B);
             75 }
             76 
             77 int Sum ()
             78 {
             79   int[5] Number = int[]{12345};
             80   int Result = 0;
             81   int Index = 0;
             82   while (true)
             83   {
             84     Result += Number[Index];
             85     Index += 1;
             86     if ((Index == 5))
             87       break;
             88     else
             89       continue;
             90   }
             91   return Result;
             92 }
             93 
             94 int GlobalA;
             95 
             96 int GlobalB = 0;
             97 
             98 const int GlobalC = 0;
             99 
            100 const int GlobalD = 0;
            101 
            102 void Local ()
            103 {
            104   int LocalA;
            105   int LocalB = 0;
            106   const int LocalC = 0;
            107   const int LocalD = 0;
            108 }
            109 
            110 typedef int(intint) IntFunc;
            111 
            112 int Add (int a, int b)
            113 {
            114   return (a + b);
            115 }
            116 
            117 int Sub (int a, int b)
            118 {
            119   return (a - b);
            120 }
            121 
            122 void RunAll (int a, int b)
            123 {
            124   IntFunc[2] Funcs = IntFunc[]{Add, Sub};
            125   int[2] Nums;
            126   int Index = 0;
            127   while ((Index < 2))
            128   {
            129     Nums[Index] = Funcs[Index](a, b);
            130     Index += 1;
            131   }
            132 }
            133 
            134 void DifferentTypes ()
            135 {
            136   byte vbyte = 0;
            137   unsigned byte vubyte = 0;
            138   signed byte vsbyte = 0;
            139   short vshort = 0;
            140   unsigned short vushort = 0;
            141   signed short vsshort = 0;
            142   int vint = 0;
            143   unsigned int vuint = 0;
            144   signed int vsint = 0;
            145   char vchar = L'\0';
            146   wchar vwchar = L'\0';
            147   float vfloat = 0.0;
            148   double vdouble = 0.0;
            149   bool vbool = true;
            150 }
            151 開始語義分析
            152 語義分析完成。
            153 【CMINUS TYPE TABLE】
            154   TYPE<0> = signed __int8
            155   TYPE<1> = unsigned __int8
            156   TYPE<2> = signed __int16
            157   TYPE<3> = unsigned __int16
            158   TYPE<4> = signed __int32
            159   TYPE<5> = unsigned __int32
            160   TYPE<6> = float
            161   TYPE<7> = double
            162   TYPE<8> = void
            163   TYPE<9> = bool
            164   TYPE<10> = <WRONG-PRIMITIVE-TYPE>
            165   TYPE<11> = struct (TYPE<4> Data, TYPE<16> Next)
            166   TYPE<12> = function TYPE<4> (TYPE<4>, TYPE<4>)
            167   TYPE<13> = pointer of TYPE<4>
            168   TYPE<14> = function TYPE<8> (TYPE<13>, TYPE<4>)
            169   TYPE<15> = function TYPE<4> (TYPE<4>)
            170   TYPE<16> = pointer of TYPE<11>
            171   TYPE<17> = pointer of TYPE<8>
            172   TYPE<18> = function TYPE<17> (TYPE<4>)
            173   TYPE<19> = function TYPE<8> (TYPE<17>)
            174   TYPE<20> = function TYPE<16> ()
            175   TYPE<21> = function TYPE<8> (TYPE<16>)
            176   TYPE<22> = function TYPE<8> ()
            177   TYPE<23> = function TYPE<4> ()
            178   TYPE<24> = function TYPE<8> (TYPE<4>, TYPE<4>)
            179   TYPE<25> = array of TYPE<4> * 5
            180   TYPE<26> = array of TYPE<12> * 2
            181   TYPE<27> = array of TYPE<4> * 2
            182 
            183 【CMINUS SYMBOL TABLE 0
            184   root symbol
            185   SYMBOL<Add> = local function of TYPE<12>
            186   SYMBOL<BubbleSort> = local function of TYPE<14>
            187   SYMBOL<CreateAndFreeNodes> = local function of TYPE<22>
            188   SYMBOL<CreateNodes> = local function of TYPE<20>
            189   SYMBOL<DifferentTypes> = local function of TYPE<22>
            190   SYMBOL<Fab> = local function of TYPE<15>
            191   SYMBOL<FreeNodes> = local function of TYPE<21>
            192   SYMBOL<GlobalA> = global variable of TYPE<4>
            193   SYMBOL<GlobalB> = global variable of TYPE<4>
            194   SYMBOL<GlobalC> = global constant of TYPE<4>
            195   SYMBOL<GlobalD> = global constant of TYPE<4>
            196   SYMBOL<IntFunc> = type of TYPE<12>
            197   SYMBOL<Local> = local function of TYPE<22>
            198   SYMBOL<Node> = type of TYPE<11>
            199   SYMBOL<RunAll> = local function of TYPE<24>
            200   SYMBOL<Sub> = local function of TYPE<12>
            201   SYMBOL<SubRev> = local function of TYPE<12>
            202   SYMBOL<Sum> = local function of TYPE<23>
            203   SYMBOL<bool> = type of TYPE<9>
            204   SYMBOL<byte> = type of TYPE<0>
            205   SYMBOL<char> = type of TYPE<0>
            206   SYMBOL<double> = type of TYPE<7>
            207   SYMBOL<float> = type of TYPE<6>
            208   SYMBOL<free> = external function of TYPE<19>
            209   SYMBOL<int> = type of TYPE<4>
            210   SYMBOL<malloc> = external function of TYPE<18>
            211   SYMBOL<null> = type of TYPE<10>
            212   SYMBOL<short> = type of TYPE<2>
            213   SYMBOL<signed byte> = type of TYPE<0>
            214   SYMBOL<signed int> = type of TYPE<4>
            215   SYMBOL<signed short> = type of TYPE<2>
            216   SYMBOL<unsigned byte> = type of TYPE<1>
            217   SYMBOL<unsigned int> = type of TYPE<5>
            218   SYMBOL<unsigned short> = type of TYPE<3>
            219   SYMBOL<void> = type of TYPE<8>
            220   SYMBOL<wchar> = type of TYPE<3>
            221 
            222 【CMINUS SYMBOL TABLE 1
            223   previous symbol is 0
            224   associated function is BubbleSort
            225   SYMBOL<Count> = local 1th parameter of TYPE<4>
            226   SYMBOL<Input> = local 0th parameter of TYPE<13>
            227 
            228 【CMINUS SYMBOL TABLE 2
            229   previous symbol is 1
            230   associated function is BubbleSort
            231   SYMBOL<i> = local variable of TYPE<4>
            232 
            233 【CMINUS SYMBOL TABLE 3
            234   previous symbol is 2
            235   associated function is BubbleSort
            236 
            237 【CMINUS SYMBOL TABLE 4
            238   previous symbol is 3
            239   associated function is BubbleSort
            240   SYMBOL<j> = local variable of TYPE<4>
            241 
            242 【CMINUS SYMBOL TABLE 5
            243   previous symbol is 4
            244   associated function is BubbleSort
            245 
            246 【CMINUS SYMBOL TABLE 6
            247   previous symbol is 5
            248   associated function is BubbleSort
            249 
            250 【CMINUS SYMBOL TABLE 7
            251   previous symbol is 6
            252   associated function is BubbleSort
            253   SYMBOL<Temp> = local variable of TYPE<4>
            254 
            255 【CMINUS SYMBOL TABLE 8
            256   previous symbol is 0
            257   associated function is Fab
            258   SYMBOL<Index> = local 0th parameter of TYPE<4>
            259 
            260 【CMINUS SYMBOL TABLE 9
            261   previous symbol is 8
            262   associated function is Fab
            263 
            264 【CMINUS SYMBOL TABLE 10
            265   previous symbol is 0
            266   associated function is CreateNodes
            267 
            268 【CMINUS SYMBOL TABLE 11
            269   previous symbol is 10
            270   associated function is CreateNodes
            271   SYMBOL<Current> = local variable of TYPE<4>
            272   SYMBOL<Head> = local variable of TYPE<16>
            273   SYMBOL<Tail> = local variable of TYPE<16>
            274 
            275 【CMINUS SYMBOL TABLE 12
            276   previous symbol is 11
            277   associated function is CreateNodes
            278 
            279 【CMINUS SYMBOL TABLE 13
            280   previous symbol is 12
            281   associated function is CreateNodes
            282   SYMBOL<NewNode> = local variable of TYPE<16>
            283 
            284 【CMINUS SYMBOL TABLE 14
            285   previous symbol is 0
            286   associated function is FreeNodes
            287   SYMBOL<Head> = local 0th parameter of TYPE<16>
            288 
            289 【CMINUS SYMBOL TABLE 15
            290   previous symbol is 14
            291   associated function is FreeNodes
            292 
            293 【CMINUS SYMBOL TABLE 16
            294   previous symbol is 15
            295   associated function is FreeNodes
            296 
            297 【CMINUS SYMBOL TABLE 17
            298   previous symbol is 16
            299   associated function is FreeNodes
            300   SYMBOL<Next> = local variable of TYPE<16>
            301 
            302 【CMINUS SYMBOL TABLE 18
            303   previous symbol is 0
            304   associated function is CreateAndFreeNodes
            305 
            306 【CMINUS SYMBOL TABLE 19
            307   previous symbol is 18
            308   associated function is CreateAndFreeNodes
            309 
            310 【CMINUS SYMBOL TABLE 20
            311   previous symbol is 0
            312   associated function is SubRev
            313   SYMBOL<A> = local 0th parameter of TYPE<4>
            314   SYMBOL<B> = local 1th parameter of TYPE<4>
            315 
            316 【CMINUS SYMBOL TABLE 21
            317   previous symbol is 20
            318   associated function is SubRev
            319 
            320 【CMINUS SYMBOL TABLE 22
            321   previous symbol is 0
            322   associated function is Sum
            323 
            324 【CMINUS SYMBOL TABLE 23
            325   previous symbol is 22
            326   associated function is Sum
            327   SYMBOL<Index> = local variable of TYPE<4>
            328   SYMBOL<Number> = local variable of TYPE<25>
            329   SYMBOL<Result> = local variable of TYPE<4>
            330 
            331 【CMINUS SYMBOL TABLE 24
            332   previous symbol is 23
            333   associated function is Sum
            334 
            335 【CMINUS SYMBOL TABLE 25
            336   previous symbol is 24
            337   associated function is Sum
            338 
            339 【CMINUS SYMBOL TABLE 26
            340   previous symbol is 0
            341   associated function is Local
            342 
            343 【CMINUS SYMBOL TABLE 27
            344   previous symbol is 26
            345   associated function is Local
            346   SYMBOL<LocalA> = local variable of TYPE<4>
            347   SYMBOL<LocalB> = local variable of TYPE<4>
            348   SYMBOL<LocalC> = local constant of TYPE<4>
            349   SYMBOL<LocalD> = local constant of TYPE<4>
            350 
            351 【CMINUS SYMBOL TABLE 28
            352   previous symbol is 0
            353   associated function is Add
            354   SYMBOL<a> = local 0th parameter of TYPE<4>
            355   SYMBOL<b> = local 1th parameter of TYPE<4>
            356 
            357 【CMINUS SYMBOL TABLE 29
            358   previous symbol is 28
            359   associated function is Add
            360 
            361 【CMINUS SYMBOL TABLE 30
            362   previous symbol is 0
            363   associated function is Sub
            364   SYMBOL<a> = local 0th parameter of TYPE<4>
            365   SYMBOL<b> = local 1th parameter of TYPE<4>
            366 
            367 【CMINUS SYMBOL TABLE 31
            368   previous symbol is 30
            369   associated function is Sub
            370 
            371 【CMINUS SYMBOL TABLE 32
            372   previous symbol is 0
            373   associated function is RunAll
            374   SYMBOL<a> = local 0th parameter of TYPE<4>
            375   SYMBOL<b> = local 1th parameter of TYPE<4>
            376 
            377 【CMINUS SYMBOL TABLE 33
            378   previous symbol is 32
            379   associated function is RunAll
            380   SYMBOL<Funcs> = local variable of TYPE<26>
            381   SYMBOL<Index> = local variable of TYPE<4>
            382   SYMBOL<Nums> = local variable of TYPE<27>
            383 
            384 【CMINUS SYMBOL TABLE 34
            385   previous symbol is 33
            386   associated function is RunAll
            387 
            388 【CMINUS SYMBOL TABLE 35
            389   previous symbol is 34
            390   associated function is RunAll
            391 
            392 【CMINUS SYMBOL TABLE 36
            393   previous symbol is 0
            394   associated function is DifferentTypes
            395 
            396 【CMINUS SYMBOL TABLE 37
            397   previous symbol is 36
            398   associated function is DifferentTypes
            399   SYMBOL<vbool> = local variable of TYPE<9>
            400   SYMBOL<vbyte> = local variable of TYPE<0>
            401   SYMBOL<vchar> = local variable of TYPE<0>
            402   SYMBOL<vdouble> = local variable of TYPE<7>
            403   SYMBOL<vfloat> = local variable of TYPE<6>
            404   SYMBOL<vint> = local variable of TYPE<4>
            405   SYMBOL<vsbyte> = local variable of TYPE<0>
            406   SYMBOL<vshort> = local variable of TYPE<2>
            407   SYMBOL<vsint> = local variable of TYPE<4>
            408   SYMBOL<vsshort> = local variable of TYPE<2>
            409   SYMBOL<vubyte> = local variable of TYPE<1>
            410   SYMBOL<vuint> = local variable of TYPE<5>
            411   SYMBOL<vushort> = local variable of TYPE<3>
            412   SYMBOL<vwchar> = local variable of TYPE<3>
            413 
            posted on 2009-05-06 08:13 陳梓瀚(vczh) 閱讀(3031) 評論(4)  編輯 收藏 引用 所屬分類: JIT

            評論:
            # re: JIT腳本引擎:基本完成CMinus的語義分析 2009-05-06 19:05 | yindf
            很贊呀。

            不過輸出的話,你可不可以把查表以后的結(jié)果輸出來,比如TYPE<2> 寫成signed int16容易看嘛。我想查表的函數(shù)你肯定有的,調(diào)用下就好。  回復(fù)  更多評論
              
            # re: JIT腳本引擎:基本完成CMinus的語義分析 2009-05-06 19:24 | 陳梓瀚(vczh)
            @yindf
            我這么輸出是因為我的確是這么保存數(shù)據(jù)的。如果都換掉的話,有時候發(fā)生了什么小錯誤可能就會被掩蓋掉了。  回復(fù)  更多評論
              
            # re: JIT腳本引擎:基本完成CMinus的語義分析 2009-05-07 21:03 | yindf
            @陳梓瀚(vczh)

            還是很不錯的,全部變量的關(guān)系,作用域一目了然。  回復(fù)  更多評論
              
            # re: JIT腳本引擎:基本完成CMinus的語義分析 2009-05-08 20:31 | 妞妞
            一點看不懂,  回復(fù)  更多評論
              
            午夜精品久久久久久中宇| 久久本道久久综合伊人| 精品国产99久久久久久麻豆| 久久99精品久久久久久动态图| 亚洲狠狠综合久久| 亚洲精品无码久久久久久| 国产精品久久久久jk制服| 欧美与黑人午夜性猛交久久久 | 亚洲精品成人久久久| 精品多毛少妇人妻AV免费久久 | 婷婷久久综合九色综合九七| 精品久久久一二三区| 亚洲精品高清久久| 久久久久人妻一区二区三区vr| 久久精品夜色噜噜亚洲A∨| 久久不见久久见免费视频7| 人妻无码αv中文字幕久久琪琪布| 狠狠干狠狠久久| 久久久精品人妻一区二区三区四| 久久国产成人精品国产成人亚洲| 精品久久久久久久无码| 伊人久久精品无码av一区| 久久久久成人精品无码| 99麻豆久久久国产精品免费| 久久婷婷色综合一区二区| 四虎亚洲国产成人久久精品| 国产精品一区二区久久精品无码 | 色婷婷久久综合中文久久蜜桃av| 色诱久久av| 色综合久久88色综合天天 | 久久精品国产亚洲5555| 激情综合色综合久久综合| 97精品伊人久久久大香线蕉| 婷婷久久综合九色综合98| 欧美激情精品久久久久| 99久久免费国产精品| 99久久综合狠狠综合久久| 久久久免费观成人影院| 免费一级做a爰片久久毛片潮| 久久男人AV资源网站| 一个色综合久久|