提交 0d7e99c9 创建 作者: 宋海霞's avatar 宋海霞

modify

上级 a59c62ba
...@@ -6,24 +6,21 @@ ...@@ -6,24 +6,21 @@
// 在此处包含 C 标准库头文件 // 在此处包含 C 标准库头文件
// //
#include <stdio.h> #include <stdio.h>
// //
// 在此处包含其他头文件 // 在此处包含其他头文件
// //
// //
// 在此处定义数据结构 // 在此处定义数据结构
// //
#define MAX_STR_LENGTH 64 #define MAX_STR_LENGTH 64
#define BUCKET_SIZE 5 // 选择一个素数作为桶大小。 #define BUCKET_SIZE 5 // 选择一个素数作为桶大小。
typedef struct _Symbol{ typedef struct _Symbol
{
char SymbolName[MAX_STR_LENGTH]; // 符号名称 char SymbolName[MAX_STR_LENGTH]; // 符号名称
char SymbolType[MAX_STR_LENGTH]; // 符号类型 char SymbolType[MAX_STR_LENGTH]; // 符号类型
int ClashCount; // 冲突次数 int ClashCount; // 冲突次数
...@@ -31,18 +28,17 @@ typedef struct _Symbol{ ...@@ -31,18 +28,17 @@ typedef struct _Symbol{
struct _Symbol* pNext; // 指向下一个 Symbol struct _Symbol* pNext; // 指向下一个 Symbol
}Symbol; }Symbol;
typedef struct _SymbolTable{ typedef struct _SymbolTable
{
Symbol* Bucket[BUCKET_SIZE]; // 杂凑表(桶) Symbol* Bucket[BUCKET_SIZE]; // 杂凑表(桶)
int Invalid; // 作用域是否无效的标志。1 表示无效,0 表示有效 int Invalid; // 作用域是否无效的标志。1 表示无效,0 表示有效
struct _SymbolTable* pNext; // 指向下一个 SymbolTable struct _SymbolTable* pNext; // 指向下一个 SymbolTable
}SymboTable; }SymboTable;
// //
// 在此处声明函数 // 在此处声明函数
// //
Symbol* NewSymbol(); Symbol* NewSymbol();
SymboTable* NewSymbolTable(); SymboTable* NewSymbolTable();
void PushScope(); void PushScope();
......
没有这种文件类型的预览
...@@ -122,7 +122,7 @@ int Hush(const char* pSymbolName) ...@@ -122,7 +122,7 @@ int Hush(const char* pSymbolName)
{ {
int HashValue = 0, i; int HashValue = 0, i;
for(i = 0; pSymbolName[i] != '\0'; i++) for (i = 0; pSymbolName[i] != '\0'; i++)
{ {
HashValue = ((HashValue << 4) + pSymbolName[i]) % BUCKET_SIZE; HashValue = ((HashValue << 4) + pSymbolName[i]) % BUCKET_SIZE;
} }
...@@ -173,19 +173,19 @@ void CreateSymbolTable() ...@@ -173,19 +173,19 @@ void CreateSymbolTable()
*/ */
void CreateSymbolTable_CI() void CreateSymbolTable_CI()
{ {
for(int i = 0; i < 64; i++) for (int i = 0; i < 64; i++)
{ {
gets(symbleTableContent[i]); gets(symbleTableContent[i]);
int length = strlen(symbleTableContent[i]); int length = strlen(symbleTableContent[i]);
if(length == 0) if (length == 0)
{ {
break; break;
} }
if(strcmp(symbleTableContent[i], "pushscope") == 0) if (strcmp(symbleTableContent[i], "pushscope") == 0)
{ {
PushScope(); PushScope();
} }
else if(strcmp(symbleTableContent[i], "popscope") == 0) else if (strcmp(symbleTableContent[i], "popscope") == 0)
{ {
PopScope(); PopScope();
} }
...@@ -193,28 +193,28 @@ void CreateSymbolTable_CI() ...@@ -193,28 +193,28 @@ void CreateSymbolTable_CI()
{ {
int k = 0, m = 0; int k = 0, m = 0;
char symbolAR[2][128] = {0}; char symbolAR[2][128] = {0};
for(int j = 0; j < 128; j++) for (int j = 0; j < 128; j++)
{ {
if(symbleTableContent[i][j] == 32) if (symbleTableContent[i][j] == 32)
{ {
if(symbleTableContent[i][j + 1] != 32 && symbleTableContent[i][j] != '\0') if (symbleTableContent[i][j + 1] != 32 && symbleTableContent[i][j] != '\0')
{ {
k++; k++;
m = 0; m = 0;
} }
continue; continue;
} }
if(symbleTableContent[i][j] == '\0') if (symbleTableContent[i][j] == '\0')
{ {
break; break;
} }
symbolAR[k][m++] = symbleTableContent[i][j]; symbolAR[k][m++] = symbleTableContent[i][j];
} }
if(k == 0) if (k == 0)
{ {
RefSymbol(symbolAR[0]); RefSymbol(symbolAR[0]);
} }
else if(k == 1) else if (k == 1)
{ {
AddSymbol(symbolAR[0], symbolAR[1]); AddSymbol(symbolAR[0], symbolAR[1]);
} }
...@@ -230,30 +230,31 @@ void OutputResult() ...@@ -230,30 +230,31 @@ void OutputResult()
{ {
printf("RefErrorCount: %d\n", RefErrorCount); printf("RefErrorCount: %d\n", RefErrorCount);
printf("\nindex \"barrel\" ItemList(RefCount/ConflictCount)\n"); printf("\nindex \"barrel\" ItemList(RefCount/ConflictCount)\n");
for(int k = 0; k < 60; k++) for (int k = 0; k < 60; k++)
{ {
printf("%c", 45); printf("%c", 45);
} }
printf("\n"); printf("\n");
while(pHead != NULL) while (pHead != NULL)
{ {
printf("SymbolTableInvalid(Invalid = %d)\n", pHead->Invalid); printf("SymbolTableInvalid(Invalid = %d)\n", pHead->Invalid);
for(int i = 0; i < BUCKET_SIZE; i++) for (int i = 0; i < BUCKET_SIZE; i++)
{ {
Symbol* curSymbol = pHead->Bucket[i]; Symbol* curSymbol = pHead->Bucket[i];
int j = 0; int j = 0;
printf("%d ", i); printf("%d ", i);
while(curSymbol != NULL) while (curSymbol != NULL)
{ {
if(j == 0) if (j == 0)
{ {
for(int k = 0; k < 25; k++) for (int k = 0; k < 25; k++)
{ {
printf("%c", 32); printf("%c", 32);
} }
j = 1; j = 1;
} }
printf("-->%s(%s)%d/%d ",curSymbol->SymbolName,curSymbol->SymbolType,curSymbol->RefCount,curSymbol->ClashCount); printf("-->%s(%s)%d/%d ", curSymbol->SymbolName, curSymbol->SymbolType,
curSymbol->RefCount, curSymbol->ClashCount);
curSymbol = curSymbol->pNext; curSymbol = curSymbol->pNext;
} }
printf("\n"); printf("\n");
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论