今天写了一些CMinus程序供语法分析器分析,然后程序从语法树重新生成格式化后的代码,两边比较检查优先级什么的是否正确处理。下面是CMinus写的冒泡排序、菲薄纳气数列、链表操作函数以及其他程序:
下面的代码旨在测试所有种类的类型、表达式、语句和声明。
1 void BubbleSort(int* Input , int Count)
2 {
3 int i=0;
4 while(i<Count-1)
5 {
6 int j=Count-2;
7 while(j>=i)
8 {
9 if(Input[j]>Input[j+1])
10 {
11 int Temp=Input[j];
12 Input[j]=Input[j+1];
13 Input[j+1]=Temp;
14 }
15 j-=1;
16 }
17 i+=1;
18 }
19 }
20
21 int Fab(int Index)
22 {
23 if(Index<2)return 1;
24 else return Fab(Index-1)+Fab(Index-2);
25 }
26
27 typedef struct
28 {
29 int Data;
30 Node* Next;
31 } Node;
32
33 extern void* malloc(int) alias "malloc";
34 extern void free(void*) alias "free";
35
36 Node* CreateNodes()
37 {
38 Node* Head=(Node*)malloc(sizeof(Node));
39 *Head=Node{0,null};
40 Node* Tail=Head;
41 int Current=1;
42 do{
43 Node* NewNode=(Node*)malloc(sizeof(Node));
44 *NewNode=Node{Current,null};
45 Tail->Next=NewNode;
46 Tail=NewNode;
47 }while(Current<=4);
48 return Head;
49 }
50
51 void FreeNodes(Node* Head)
52 {
53 while(Head!=null)
54 {
55 Node* Next=Head->Next;
56 free(Head);
57 Head=Next;
58 }
59 }
60
61 void CreateAndFreeNodes()
62 {
63 FreeNodes(CreateNodes());
64 }
65
66 int SubRev(int A , int B)
67 {
68 return -A+B;
69 }
70
71 int Sum()
72 {
73 int[5] Number=int[]{1,2,3,4,5};
74 int Result=0;
75 int Index=0;
76 while(true)
77 {
78 Result+=Number[Index];
79 Index+=1;
80 if(Index==5)break;
81 else continue;
82 }
83 return Result;
84 }
85
86 int GlobalA;
87 int GlobalB=0;
88 const int GlobalC;
89 const int GlobalD=0;
90
91 void Local()
92 {
93 int LocalA;
94 int LocalB=0;
95 const int LocalC;
96 const int LocalD=0;
97 }
98
99 typedef int(int,int) IntFunc;
100
101 int Add(int a,int b)
102 {
103 return a+b;
104 }
105
106 int Sub(int a,int b)
107 {
108 return a-b;
109 }
110
111 void RunAll(int a,int b)
112 {
113 IntFunc[2] Funcs=IntFunc[]{&Add,&Sub};
114 int[2] Nums;
115 int Index=0;
116 while(Index<2)
117 {
118 Nums[Index]=Funcs[Index](a,b);
119 Index+=1;
120 }
121 }
下面是格式化的结果:
1 void BubbleSort (int* Input, int Count)
2 {
3 int i = 0;
4 while ((i < (Count - 1)))
5 {
6 int j = (Count - 2);
7 while ((j >= i))
8 {
9 if ((Input[j] > Input[(j + 1)]))
10 {
11 int Temp = Input[j];
12 Input[j] = Input[(j + 1)];
13 Input[(j + 1)] = Temp;
14 }
15 j -= 1;
16 }
17 i += 1;
18 }
19 }
20
21 int Fab (int Index)
22 {
23 if ((Index < 2))
24 return 1;
25 else
26 return (Fab((Index - 1)) + Fab((Index - 2)));
27 }
28
29 typedef struct
30 {
31 int Data;
32 Node* Next;
33 } Node;
34
35 extern void* malloc (int) alias "malloc";
36
37 extern void free (void*) alias "free";
38
39 Node* CreateNodes ()
40 {
41 Node* Head = (Node*)malloc(sizeof(Node));
42 *Head = Node{0, null};
43 Node* Tail = Head;
44 int Current = 1;
45 do
46 {
47 Node* NewNode = (Node*)malloc(sizeof(Node));
48 *NewNode = Node{Current, null};
49 Tail->Next = NewNode;
50 Tail = NewNode;
51 }
52 while ((Current <= 4));
53 return Head;
54 }
55
56 void FreeNodes (Node* Head)
57 {
58 while ((Head != null))
59 {
60 Node* Next = Head->Next;
61 free(Head);
62 Head = Next;
63 }
64 }
65
66 void CreateAndFreeNodes ()
67 {
68 FreeNodes(CreateNodes());
69 }
70
71 int SubRev (int A, int B)
72 {
73 return (-A + B);
74 }
75
76 int Sum ()
77 {
78 int[5] Number = int[]{1, 2, 3, 4, 5};
79 int Result = 0;
80 int Index = 0;
81 while (true)
82 {
83 Result += Number[Index];
84 Index += 1;
85 if ((Index == 5))
86 break;
87 else
88 continue;
89 }
90 return Result;
91 }
92
93 int GlobalA;
94
95 int GlobalB = 0;
96
97 const int GlobalC;
98
99 const int GlobalD = 0;
100
101 void Local ()
102 {
103 int LocalA;
104 int LocalB = 0;
105 const int LocalC;
106 const int LocalD = 0;
107 }
108
109 typedef int(int, int) IntFunc;
110
111 int Add (int a, int b)
112 {
113 return (a + b);
114 }
115
116 int Sub (int a, int b)
117 {
118 return (a - b);
119 }
120
121 void RunAll (int a, int b)
122 {
123 IntFunc[2] Funcs = IntFunc[]{&Add, &Sub};
124 int[2] Nums;
125 int Index = 0;
126 while ((Index < 2))
127 {
128 Nums[Index] = Funcs[Index](a, b);
129 Index += 1;
130 }
131 }
posted on 2009-05-04 19:44
陈梓瀚(vczh) 阅读(1954)
评论(1) 编辑 收藏 引用 所属分类:
JIT