Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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(); */
      }
    }
  }

}
Ejemplo n.º 4
0
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 );
  }
}
Ejemplo n.º 5
0
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() );
}