Пример #1
0
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);
}
Пример #2
0
QString Token::info() const {
	QString ret(mCodePoint.toString());
	ret += " ";
	ret += getTokenName(mType);
	ret += "  \"";
	ret += toString();
	ret += '"';
	return ret;
}
Пример #3
0
void startSyntaxTree()
{
  int temp = 0;
  openLexFile();
  getNextToken();
  while(!matchToken(PROGRAM))
  {
    getNextToken();
  }
  temp = lookupNumber(PROGRAM);
  addTokens(hand.root, getTokenName(temp), getTokenType(temp));
}
Пример #4
0
/*
//	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;
}
Пример #5
0
/**
 * 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;
	}
}
Пример #6
0
QString Token::typeToString() const {
	return getTokenName(mType);
}