#include "wordanalyse.h"
/*******************************************************
作用: 开始进行词法扫描
参数: @ _file: 文件指针
@ _linebuf: 字符缓冲区
@ _file: 文件长度
返回值:无
*******************************************************/
wordanalyse::wordanalyse( FILE *_file ,
char *_linebuf,
int _filelen )
{
linepos=0; //在bufline中的位置
bufsize=0; //目前buffer中字符串的大小
EOF_flag=false; //是否已到文件尾
EchoSource=true;
TraceScan=true;
lineno=0;//幕前的行数
file=_file; //获取文件指针
linebuf=_linebuf; //字符缓冲区
filelen=_filelen; //文件的长度
}
wordanalyse::~wordanalyse()
{
}
/*******************************************************
作用: 开始进行词法扫描
参数: 无
返回值:无
*******************************************************/
void wordanalyse::beginScan()
{
while( currentToken!=ENDOFFILE )
{
getToken();
}
}
/*******************************************************
作用: 输出相关的信息
参数: @ token:字符的类型
@ tokenString[]:当前输出的字符串部分
返回值:无
*******************************************************/
void wordanalyse::printToken(TokenType token, char tokenString[] )
{
//根据token输出相关的内容
switch( token )
{
case ELSE:
case IF:
case INT :
case RETURN:
case WHILE:
printKeyWord( lineno, m_path, "reserved word: ", tokenString );
break;
case VO:
printKeyWord( lineno, m_path, "reserved word: ", "void");
break;
case comma:
printPunctuation( lineno, m_path, "," );
break;
case leftcurly:
printPunctuation( lineno, m_path, "{" );
break;
case rightcurly:
printPunctuation( lineno, m_path, "}" );
break;
case leftparen:
printPunctuation( lineno, m_path, "(" );
break;
case semicolon:
printPunctuation( lineno, m_path, ";" );
break;
case rightparen:
printPunctuation( lineno, m_path, ")" );
break;
case lessequal:
printPunctuation( lineno, m_path, "<=" );
break;
case eq:
printPunctuation( lineno, m_path, "==" );
break;
case noequal:
printPunctuation( lineno, m_path, "!=" );
break;
case leftbracket:
printPunctuation( lineno, m_path, "[" );
break;
case plus:
printPunctuation( lineno, m_path, "+" );
break;
case minus:
printPunctuation( lineno, m_path, "-" );
break;
case multiply:
printPunctuation( lineno, m_path, "*" );
break;
case divided:
printPunctuation( lineno, m_path, "/" );
break;
case evaluation:
printPunctuation( lineno, m_path, "=" );
break;
case less:
printPunctuation( lineno, m_path, "<" );
break;
case more:
printPunctuation( lineno, m_path, ">" );
break;
case NUM:
printKeyWord( lineno, m_path, "NUM, val= ", tokenString );
break;
case ID:
printKeyWord( lineno, m_path, "ID, name= ", tokenString );
break;
case ERROROFFILE:
printKeyWord( lineno, m_path, "ERROR ", tokenString );
break;
case ENDOFFILE:
printKeyWord( lineno, m_path, "EOF ", tokenString );
break;
default:
printKeyWord( lineno, m_path, "Unknown token= ", tokenString );
break;
}
}