109 lines
2.1 KiB
C++
109 lines
2.1 KiB
C++
#ifndef __NASAL_TOKEN_CPP__
|
|
#define __NASAL_TOKEN_CPP__
|
|
|
|
#include "nasal_token.h"
|
|
#include "nasal_var_stack.h"
|
|
#include "nasal_func_stack.h"
|
|
|
|
token_list::token_list()
|
|
{
|
|
list_range=0;
|
|
head=new token_unit;
|
|
head->type=FUNC_BEGIN;
|
|
head->content="__process_begin";
|
|
head->line=0;
|
|
head->next=NULL;
|
|
}
|
|
token_list::~token_list()
|
|
{
|
|
token_unit *temp=head;
|
|
token_unit *this_node=NULL;
|
|
while(temp->next)
|
|
{
|
|
this_node=temp;
|
|
temp=temp->next;
|
|
delete this_node;
|
|
}
|
|
delete temp;
|
|
}
|
|
token_unit* token_list::get_head()
|
|
{
|
|
return head;
|
|
}
|
|
int token_list::get_list_range()
|
|
{
|
|
return list_range;
|
|
}
|
|
void token_list::print_line_token(const int _line)
|
|
{
|
|
std::cout<<"line "<<_line<<": ";
|
|
token_unit *temp=head;
|
|
while(temp->next)
|
|
{
|
|
temp=temp->next;
|
|
if(temp->line==_line)
|
|
std::cout<<temp->content<<" ";
|
|
else if(temp->line>_line)
|
|
break;
|
|
}
|
|
std::cout<<std::endl;
|
|
return;
|
|
}
|
|
void token_list::delete_all()
|
|
{
|
|
if(!head->next)
|
|
return;
|
|
token_unit *temp=head;
|
|
token_unit *this_node=NULL;
|
|
temp=temp->next;
|
|
head->next=NULL;
|
|
while(temp->next)
|
|
{
|
|
this_node=temp;
|
|
temp=temp->next;
|
|
delete this_node;
|
|
}
|
|
delete temp;
|
|
return;
|
|
}
|
|
void token_list::append(const int _line,const int _type,std::string &_content)
|
|
{
|
|
token_unit *temp=head;
|
|
while(temp->next)
|
|
temp=temp->next;
|
|
++list_range;
|
|
temp->next=new token_unit;
|
|
temp=temp->next;
|
|
temp->next=NULL;
|
|
temp->type=_type;
|
|
temp->line=_line;
|
|
temp->content=_content;
|
|
return;
|
|
}
|
|
void token_list::print()
|
|
{
|
|
token_unit *temp=head;
|
|
std::cout<<"line "<<temp->line<<": "<<"( ProcessBegin | "<<temp->content<<" )"<<std::endl;
|
|
if(!head->next)
|
|
return;
|
|
while(temp->next)
|
|
{
|
|
temp=temp->next;
|
|
std::cout<<"line "<<temp->line<<": ";
|
|
if(temp->type==OPERATOR)
|
|
std::cout<<"( Operator | ";
|
|
else if(temp->type==IDENTIFIER)
|
|
std::cout<<"( Identifier | ";
|
|
else if(temp->type==NUMBER)
|
|
std::cout<<"( Number | ";
|
|
else if(temp->type==RESERVEWORD)
|
|
std::cout<<"( ReserveWord | ";
|
|
else if(temp->type==STRING)
|
|
std::cout<<"( String | ";
|
|
std::cout<<temp->content<<" )"<<std::endl;
|
|
}
|
|
return;
|
|
}
|
|
|
|
#endif
|