📄 symtable.cpp
字号:
// SymTable.cpp: Implementierung der Klasse CSymTable.
//
//////////////////////////////////////////////////////////////////////
#include "SymTable.h"
#include <string.h>
#include <stdlib.h>
//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////
CSymTable::CSymTable()
{
}
CSymTable::~CSymTable()
{
}
void CSymTable::PrepareSymTable( char *symbols )
{
int i = 0, nchars = 1;
memset( table, 0, 256 * sizeof(SymbolRec*) );
while (*symbols) {
if (*symbols=='\033') {
nchars = *++symbols;
++symbols;
} else {
SymbolRec **RecList = &table [*symbols];
SymbolRec *Rec = *RecList;
int count = 0;
while ( Rec ) {
++count;
if ( Rec->More )
++Rec;
else
break;
}
if ( Rec ) {
*RecList = (SymbolRec*)
realloc( *RecList, (count+1)*sizeof(SymbolRec) );
Rec = *RecList + count;
(Rec-1)->More = 1;
} else {
SymbolRec* R = (SymbolRec*) malloc( 7 );
*RecList=R;
Rec = *RecList;
}
strncpy( Rec->Sym, symbols, 4 );
Rec->Len = (char) nchars;
Rec->Index = (char) i;
Rec->More = 0;
symbols += nchars;
++i;
}
}
}
int CSymTable::FindSymbol( char *str, int *nchars )
{
SymbolRec *Rec = table[ (int)*str ];
while ( Rec ) {
if ( (Rec->Len == 1 && Rec->Sym[0] == str[0])
||
(Rec->Len == 2 && Rec->Sym[0] == str[0] && Rec->Sym[1] == str[1])
||
(Rec->Len == 3 && Rec->Sym[0] == str[0] && Rec->Sym[1] == str[1]
&& Rec->Sym[2] == str[2])
) {
*nchars = Rec->Len;
return Rec->Index;
}
Rec = ( Rec->More ) ? Rec + 1 : NULL;
}
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -