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

modify

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