##// END OF EJS Templates
Work in progress.
Work in progress.

File last commit:

r2:f40b36fd7205 tip default
r2:f40b36fd7205 tip default
Show More
vhdl_file.cpp
87 lines | 2.0 KiB | text/x-c | CppLexer
First Init, flexer seems ok -> it generates a flat list of tokens.
r0 #include "vhdl_file.h"
Work in progess.
r1 #include <QDebug>
First Init, flexer seems ok -> it generates a flat list of tokens.
r0
VHDL_Tools::VHDL_File::VHDL_File()
{
this->scanner = NULL;
}
Work in progess.
r1
bool VHDL_Tools::VHDL_File::parseFile(const QString &file, bool trashPreviousTree)
First Init, flexer seems ok -> it generates a flat list of tokens.
r0 {
std::ifstream in_file( file.toStdString().c_str() );
if( ! in_file.good() ) return false;
Work in progess.
r1 if(scanner==NULL)
First Init, flexer seems ok -> it generates a flat list of tokens.
r0 {
Work in progess.
r1 try
{
scanner = new VHDL_Tools::vhdl_Scanner( &in_file ,file);
}
catch( std::bad_alloc &ba )
{
std::cerr << "Failed to allocate scanner: (" <<
ba.what() << ")\n";
return false;
}
First Init, flexer seems ok -> it generates a flat list of tokens.
r0 }
Work in progress.
r2 qDebug()<<"Parsing File "<<file<<"\n";
Work in progess.
r1 scanner->newFile(&in_file,file,trashPreviousTree);
First Init, flexer seems ok -> it generates a flat list of tokens.
r0 while (scanner->scan()!=0);
Work in progess.
r1 makeParseTree(scanner->getScanTree());
First Init, flexer seems ok -> it generates a flat list of tokens.
r0 return false;
}
Work in progess.
r1
VHDL_Tools::VHDL_AST_Node *VHDL_Tools::VHDL_File::getParseTree()
{
return rootNode;
}
int VHDL_Tools::VHDL_File::makeParseTree(VHDL_AST_Node *rootNode)
{
this->rootNode = rootNode;
VHDL_AST_Node *currentNode=rootNode;
QStack<VHDL_AST_Node*> openBlocks;
openBlocks.push(rootNode);
Work in progress.
r2 do
{
parseNext(&currentNode,&openBlocks);
}while(currentNode->childs.count());
return 0;
}
int VHDL_Tools::VHDL_File::parseNext(VHDL_Tools::VHDL_AST_Node **rootNode, QStack<VHDL_Tools::VHDL_AST_Node *> *openBlocksContext)
{
VHDL_AST_Node *currentNode=*rootNode;
if(currentNode)
Work in progess.
r1 {
switch (currentNode->type)
{
case entity:
Work in progress.
r2 parse_Entity(&currentNode,openBlocksContext);
Work in progess.
r1 break;
Work in progress.
r2 case architecture:
parse_Architecture(&currentNode,openBlocksContext);
Work in progess.
r1 break;
case clause:
Work in progress.
r2 parse_Clause(&currentNode,openBlocksContext);
Work in progess.
r1 break;
Work in progress.
r2 case package:
parse_Package(&currentNode,openBlocksContext);
Work in progess.
r1 break;
default:
Work in progress.
r2 walk_forward(&currentNode,0);
Work in progess.
r1 break;
}
}
Work in progress.
r2 *rootNode =currentNode;
Work in progess.
r1 return 0;
}
Work in progress.
r2