char* getLexemeName(tokenInfo tokens) { if(tokens->token_name == STR || tokens->token_name == FUNID || tokens->token_name == ID || tokens->token_name == NUM || tokens->token_name == RNUM) { return tokens->token_value; } else return getTokenName(tokens->token_name); }
QString Token::info() const { QString ret(mCodePoint.toString()); ret += " "; ret += getTokenName(mType); ret += " \""; ret += toString(); ret += '"'; return ret; }
void startSyntaxTree() { int temp = 0; openLexFile(); getNextToken(); while(!matchToken(PROGRAM)) { getNextToken(); } temp = lookupNumber(PROGRAM); addTokens(hand.root, getTokenName(temp), getTokenType(temp)); }
/* // The main function of the lexer which is called by the parser. // params- // input: pointer to file. // output: header to the first token which forms a linked list. */ tokenInfo lexer(FILE *source, FILE* dest) { // FILE *source; // source = fopen("test.txt","r"); tokenInfo tokens; buffer firstBuff = malloc(sizeof(buffStruct)); firstBuff->curPointer = 0; firstBuff->fwdPointer = 0; firstBuff->charNumber = 1; firstBuff->lineNumber = 1; buffer secondBuff = malloc(sizeof(buffStruct)); secondBuff->curPointer = 0; secondBuff->fwdPointer = 0; secondBuff->charNumber = 1; secondBuff->lineNumber = 1; firstBuff->nextBuffer = secondBuff; secondBuff->nextBuffer = firstBuff; int lineNumber = 1; // Initialise the first buffer stream getStream(source, firstBuff, BUFFERSIZE); curBuff = firstBuff; // Current buffer being used. tokens = getNextToken(source,curBuff); tokenInfo head; if(tokens == NULL) { return NULL; } else{ head = tokens; printf("%s ",getTokenName(tokens->token_name)); if(tokens->token_name == ID || tokens->token_name == STR || tokens->token_name == FUNID || tokens->token_name == NUM || tokens->token_name == RNUM) { printf("(\x1b[37m%s\x1b[0m) ",tokens->token_value); } tokens->nextToken = NULL; } if(firstBuff->nextBuffer == NULL) { return 0; } while(curBuff->buff[curBuff->curPointer] != EOF) { tokenInfo nextTokens = getNextToken(source, curBuff); if(nextTokens == NULL) { // End of file reached. Stop here. break; } else { tokens->nextToken = nextTokens; if(nextTokens->lineNumber != lineNumber) { printf("\n"); //curBuff->lineNumber = tokens->lineNumber; ++lineNumber; } printf("%s ",getTokenName(nextTokens->token_name)); if(nextTokens->token_name == ID || nextTokens->token_name == STR || nextTokens->token_name == FUNID) { printf("(\x1b[37m%s\x1b[0m) ",nextTokens->token_value); } tokens = tokens->nextToken; tokens->nextToken = NULL; } } tokens = head; printf("\n"); fclose(source); return head; }
/** * Print the symbol table in the specified format. * @param list */ void printSymbolTable(STList list) { int a = 0; STList readList = list; while(readList != NULL) { STable entry = readList->table; while(entry->data != NULL) { printf("%20s%16s(%2d-%2d)%16s",entry->data->value,readList->functionName,readList->startLineNumber,readList->endLineNumber,getTokenName(entry->data->type)); if(entry->data->type == NUM || entry->data->type == INT) { printf("%s"," "); printf("%15d",a); a = a+2; } else if(entry->data->type == RNUM || entry->data->type == REAL) { printf("%s"," "); printf("%15d",a); a= a+4; } else if(entry->data->type == STR || entry->data->type == STRING) { printf("%s"," "); printf("%15d",a); a = a + findLength(entry->data->value,readList,0); } else if(entry->data->type == MATRIX) { matrixSizes mat = findMatrix(entry->data->value,readList); if(mat == NULL) { printf(",0,0"); } else { printf(",%d,%d",mat->rows,mat->columns); } } printf("\n"); entry = entry->nextEntry; } if(readList->childList != NULL) printSymbolTable(readList->childList); if(readList->sisterList != NULL) readList = readList->sisterList; else readList = NULL; } }
QString Token::typeToString() const { return getTokenName(mType); }