diff options
Diffstat (limited to 'src/vhdlscanner.h')
-rw-r--r-- | src/vhdlscanner.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/vhdlscanner.h b/src/vhdlscanner.h new file mode 100644 index 0000000..aea92f1 --- /dev/null +++ b/src/vhdlscanner.h @@ -0,0 +1,136 @@ +/****************************************************************************** + * + * $Id: vhdlscanner.h,v 1.9 2001/03/19 19:27:39 root Exp $ + * + * Copyright (C) 1997-2012 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef VHDLSCANNER_H +#define VHDLSCANNER_H + +#include "parserintf.h" +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <ctype.h> + +#include <qarray.h> +#include <unistd.h> +#include <qfile.h> +#include <qdict.h> + +#include "entry.h" +#include "memberlist.h" + +class Entry; +class ClassSDict; +class FileStorage; +class ClassDef; +class MemberDef; +class QStringList; + + +/** VHDL parser using state-based lexical scanning. + * + * This is the VHDL language parser for doxygen. + */ +class VHDLLanguageScanner : public ParserInterface +{ + public: + virtual ~VHDLLanguageScanner() {} + void parseInput(const char * fileName, + const char *fileBuf, + Entry *root); + bool needsPreprocessing(const QCString &extension); + void parseCode(CodeOutputInterface &codeOutIntf, + const char *scopeName, + const QCString &input, + bool isExampleBlock, + const char *exampleName=0, + FileDef *fileDef=0, + int startLine=-1, + int endLine=-1, + bool inlineFragment=FALSE, + MemberDef *memberDef=0, + bool showLineNumbers=TRUE, + Definition *searchCtx=0 + ); + void resetCodeParserState(); + void parsePrototype(const char *text); +}; + +/** Container for vhdlscanner */ +struct VhdlContainer +{ + int yyLineNr; // current line no + int iLine; // line no of last t_identifier + QCString qstr; // t_identifier + QCString fileName; // current file + Entry* root; // root +}; + +/** Configuation node for VHDL */ +struct VhdlConfNode +{ + VhdlConfNode *prevNode; + VhdlConfNode(const char* a,const char* b,const char* config) + { + arch=a; // architecture e.g. for iobuffer + binding=b; // binding e.g. use entiy work.xxx(bev) + confVhdl=config; // configuration foo is bar + isBind=false; + prevNode=NULL; + isRoot=false; + isInlineConf=false; // primary configuration? + }; + + QCString confVhdl; + QCString arch; + QCString binding; + QList<VhdlConfNode> confN; + bool isBind; + bool isInlineConf; + bool isRoot; + + void addNode(VhdlConfNode* n) { confN.append(n); } + bool isBinding() { return binding.isEmpty(); } +}; + +// returns the current conpound entity,architecture, package,package body +Entry* getVhdlCompound(); + +// return the current parsed entry +Entry* getCurrentVhdlEntry(); + +void newVhdlEntry(); + +void initVhdlParser(); + +struct VhdlContainer* getVhdlCont(); + +// returns the parsed line +// @ param object index of vhdl keyword like t_Identifier t_Entity +int getParsedLine(int object); + +void vhdlscanFreeScanner(); + +void vhdlParse(); + +// return the list of component instantiations e.g. foo: component bar +QList<Entry> & getVhdlInstList(); + +// returns the list of found configurations +QList<VhdlConfNode>& getVhdlConfiguration(); + +void isVhdlDocPending(); +#endif |