struct token checkidErrors(char *lexeme){ //already checked for too-long id (in machine) //check if id is already in reserved, then symbol table struct token tok = isInTable(lexeme, reservedTable); if(tok.type != -1 && tok.attr != -1){ return tok; } else{ tok = isInTable(lexeme, symbolTable); if(tok.type != -1 && tok.attr != -1){ return tok; } else { //add new symbol to symbol table addToTable(lexeme, ID_TYPE, NO_ATTR, &symbolTable); (*symbolTable).attr = (long)&(*symbolTable); struct token a = {.type = ID_TYPE, .attr = (*symbolTable).attr}; return a; } } } int hasLeadingZeroes(char *lexeme){ char *charpointer = lexeme; if(*charpointer == '0'){ int length = 0; while(*charpointer != '\0'){ length++; charpointer += sizeof(char); if(length == 1 && *charpointer == '.') return 0; } if(length > 1) return 1; } return 0; }
/* putStringInWStringTable - This method is for adding elements to the wstring table. Since the wstring table only allows for single copies of each element, this method first checks to see if the key wstring is already inside. If it is, it simply returns its index. If it's not found, it adds it and returns the index of the location where it was added. */ unsigned int WStringTable::putWStringInTable(wstring key) { if (isInTable(key)) return getIndexOfWString(key); wStringTable.push_back(key); return wStringTable.size()-1; }
void run() { int i = 0; int pageNum; PagePointer cursor; PagePointer cursorPrev; for (; i < INSTRUCTIONSIZE; i++) { usleep(256000); pageNum = instructionArray[i] / PAGESIZE; if (isInTable(pageNum) == 1) { printf("[命中: address#%d\tin page#%d]\t", instructionArray[i], pageNum); printTable(); /*printf("Hit: address#%d\tin page#%d\t", instructionArray[i], pageNum); printTable(); */ } else { if (getTableLength() < 5) { cursor = pageTable->next; cursorPrev = pageTable; while (cursor != NULL) { cursor = cursor->next; cursorPrev = cursorPrev->next; } cursor = (PagePointer)malloc(sizeof(PageNode)); cursor->num = pageNum; cursor->next = NULL; cursorPrev->next = cursor; printf("[调入: address#%d\tin page#%d]\t", instructionArray[i], pageNum); printTable(); /*printf("In : address#%d\tin page#%d\t", instructionArray[i], pageNum); printTable(); */ } else { PagePointer out = pageTable->next; pageTable->next = out->next; printf("[换出: page#%d]\t", out->num); /*printf("Out: page#%d\t", out->num); */ out->num = pageNum; out->next = NULL; cursor = pageTable->next; cursorPrev = pageTable; while (cursor != NULL) { cursor = cursor->next; cursorPrev = cursorPrev->next; } cursorPrev->next = out; printf("[调入: address#%d\tin page#%d]\t", instructionArray[i], pageNum); printTable(); /*printf("In : address#%d\tin page#%d\t", instructionArray[i], pageNum); printTable(); */ } } } }
QWidget *QgsListWidgetWrapper::createWidget( QWidget *parent ) { if ( isInTable( parent ) ) { // if to be put in a table, draw a border and set a decent size QFrame *ret = new QFrame( parent ); ret->setFrameShape( QFrame::StyledPanel ); QHBoxLayout *layout = new QHBoxLayout( ret ); layout->addWidget( new QgsListWidget( field().subType(), ret ) ); ret->setMinimumSize( QSize( 320, 110 ) ); return ret; } else { return new QgsListWidget( field().subType(), parent ); } }
void enter(int kind, char *name, int l, int m, int val) { symbol tempSymbolHolder; tempSymbolHolder.kind = kind; strcpy(tempSymbolHolder.name, name); tempSymbolHolder.level = l; tempSymbolHolder.addr = m; tempSymbolHolder.val = val; //printf("The name that is being inputed is : %s", tempSymbolHolder.name); if(isInTable(tempSymbolHolder.name) == 0) { symbol_table[symbolSpot] = tempSymbolHolder; symbolSpot ++; symbolTableSize ++; //printf("The name that is being inputed is : %s\n", tempSymbolHolder.name); //printf("The table size is being increased\n"); } //update value if already in the table else { symbol_table[getSymbol(name)].val = val; // printf(" It is working for symbol %s and The value of the symbol is : %d\n", symbol_table[getSymbol(name)].name, symbol_table[getSymbol(name)].val); } }
bool QgsEditorWidgetWrapper::isInTable( const QWidget* parent ) { if ( !parent ) return false; if ( qobject_cast<const QTableView*>( parent ) ) return true; return isInTable( parent->parentWidget() ); }