summaryrefslogtreecommitdiffstats
path: root/trunk/src/vhdlcode.l
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/vhdlcode.l')
-rw-r--r--trunk/src/vhdlcode.l1606
1 files changed, 0 insertions, 1606 deletions
diff --git a/trunk/src/vhdlcode.l b/trunk/src/vhdlcode.l
deleted file mode 100644
index 10b2018..0000000
--- a/trunk/src/vhdlcode.l
+++ /dev/null
@@ -1,1606 +0,0 @@
-/******************************************************************************
- *
- * 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.
- *
- */
-/******************************************************************************
- * Parser for syntax hightlighting and references for vhdl subset
- * written by M. Kreis
- * supports VHDL-87
- * does not support VHDL-AMS
- ******************************************************************************/
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-#include <qregexp.h>
-#include <qdir.h>
-#include <qstringlist.h>
-
-#include "qtbc.h"
-#include "entry.h"
-#include "doxygen.h"
-#include "message.h"
-#include "outputlist.h"
-#include "util.h"
-#include "membername.h"
-#include "searchindex.h"
-#include "vhdldocgen.h"
-#include "arguments.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-// Toggle for some debugging info
-//#define DBG_CTX(x) fprintf x
-#define DBG_CTX(x) do { } while(0)
-
-
-/* -----------------------------------------------------------------
- * statics
- */
-
-// ----------------- <vhdl> ----------------------------------
-
-//static bool isPackBody=FALSE;
-//static bool isStartMap;
-static bool isFuncProto=FALSE;
-static bool isComponent=FALSE;
-static bool isPackageBody=FALSE;
-static bool isProto = FALSE;
-
-static QCString g_PrevString;
-static QCString g_CurrClass;
-static QDict<QCString>g_vhdlKeyDict;
-static QCString g_tempClass;
-static QCString g_tempComp;
-static QCString g_PortMapComp;
-static MemberDef *g_vhdlMember;
-static QCString g_FuncProto;
-
-//-----------------------------------------------------------
-
-static CodeOutputInterface * g_code;
-static QCString g_curClassName;
-static QCString g_parmType;
-static QCString g_parmName;
-static const char * g_inputString; //!< the code fragment as text
-static int g_inputPosition; //!< read offset during parsing
-static int g_inputLines; //!< number of line in the code fragment
-static int g_yyLineNr; //!< current line number
-static bool g_needsTermination;
-
-static QCString g_exampleName;
-static QCString g_exampleFile;
-
-static QCString g_type;
-static QCString g_name;
-static QCString g_args;
-static QCString g_classScope;
-
-static QCString g_CurrScope;
-
-static FileDef * g_sourceFileDef;
-static Definition * g_currentDefinition;
-static MemberDef * g_currentMemberDef;
-static bool g_includeCodeFragment;
-static const char * g_currentFontClass;
-
-static bool g_lexInit = FALSE;
-static int g_braceCount=0;
-
-
-static void writeFont(const char *s,const char* text);
-static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName);
-static bool writeColoredWord(QCString& word );
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE);
-static void endFontClass();
-static void startFontClass(const char *s);
-//-------------------------------------------------------------------
-
-
-static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="")
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(name,base,anchor);
- }
-}
-
-static bool checkVhdlString(QCString &name)
-{
- if (name.isEmpty()) return FALSE;
- static QRegExp regg("[\\s\"]");
-
- int len=name.length();
- if (name.at(0)=='"' && name.at(len-1)=='"' && len > 2)
- {
- QStringList qrl=QStringList::split(regg,name,FALSE);
- if (VhdlDocGen::isNumber((QCString)qrl[0]))
- {
- g_code->codify("\"");
- startFontClass("vhdllogic");
- QCString mid=name.mid(1,len-2); //" 1223 "
- g_code->codify(mid.data());
- endFontClass();
- g_code->codify("\"");
- }
- else
- {
- startFontClass("keyword");
- g_code->codify(name.data());
- endFontClass();
- }
- return TRUE;
- }
-
- if (VhdlDocGen::isNumber(name))
- {
- startFontClass("vhdllogic");
- g_code->codify(name.data());
- endFontClass();
- return TRUE;
- }
- return FALSE;
-}
-
-static void addToSearchIndex(const char *text)
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->addWord(text,FALSE);
- }
-}
-
-
-/*! start a new line of code, inserting a line number if g_sourceFileDef
- * is TRUE. If a definition starts at the current line, then the line
- * number is linked to the documentation of that definition.
- */
-static void startCodeLine()
-{
- //if (g_currentFontClass) { g_code->endFontClass(); }
- if (g_sourceFileDef)
- {
- //QCString lineNumber,lineAnchor;
- //lineNumber.sprintf("%05d",g_yyLineNr);
- //lineAnchor.sprintf("l%05d",g_yyLineNr);
- // if ((g_yyLineNr % 500) == 0)
- // fprintf(stderr,"\n starting Line %d:",g_yyLineNr);
- Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
- //printf("startCodeLine %d d=%s\n", g_yyLineNr,d ? d->name().data() : "<null>");
- if (!g_includeCodeFragment && d)
- {
- g_currentDefinition = d;
- g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
- if (!g_tempComp.isEmpty() && g_currentMemberDef )
- {
- //ClassDef *cf=VhdlDocGen::getClass(g_tempComp.data());
- QCString nn=g_currentMemberDef->name();
- MemberDef* mdeff=VhdlDocGen::findMember(g_tempComp,nn);
- if (mdeff)
- {
- g_currentMemberDef=mdeff;
- }
- }
-
- g_parmType.resize(0);
- g_parmName.resize(0);
- QCString lineAnchor;
- lineAnchor.sprintf("l%05d",g_yyLineNr);
- if (g_currentMemberDef)
- {
- g_code->writeLineNumber(g_currentMemberDef->getReference(),
- g_currentMemberDef->getOutputFileBase(),
- g_currentMemberDef->anchor(),g_yyLineNr);
- setCurrentDoc(g_currentMemberDef->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- else if (d->isLinkableInProject())
- {
- g_code->writeLineNumber(d->getReference(),
- d->getOutputFileBase(),
- 0,g_yyLineNr);
- setCurrentDoc(d->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- }
- else
- {
- g_code->writeLineNumber(0,0,0,g_yyLineNr);
- }
- }
- g_code->startCodeLine();
- if (g_currentFontClass)
- {
- g_code->startFontClass(g_currentFontClass);
- }
-}
-
-static void endFontClass();
-static void endCodeLine()
-{
- endFontClass();
- g_code->endCodeLine();
-}
-
-static void nextCodeLine()
-{
- const char *fc = g_currentFontClass;
- endCodeLine();
- if (g_yyLineNr<g_inputLines)
- {
- g_currentFontClass = fc;
- startCodeLine();
- }
-}
-
-/*! writes a word to the output.
- * If curr_class is defined, the word belongs to a class
- * and will be linked.
- */
-
-static void writeWord(const char *word,const char* curr_class=0,bool classLink=FALSE)
-{
- bool found=FALSE;
- QCString temp;
- QCString tclass(curr_class);
- QCString ttt(word);
- if (ttt.isEmpty()) return;
- for (unsigned int j=0;j<ttt.length();j++)
- {
- char c=ttt.at(j);
- if (c==' '|| c==',' || c==';' || c==':' || c=='(' || c==')' || c=='\r' || c=='\t' || c=='.')
- {
- if (found)
- {
- if (!writeColoredWord(temp)) // is it a keyword ?
- {
- //if (VhdlDocGen::findKeyWord(temp))
- // writeFont("vhdlkeyword",temp.data());
- //printf("writeWord: %s\n",temp.data());
- if (!tclass.isEmpty())
- {
- if (!classLink)
- {
- generateMemLink(*g_code,tclass,temp);
- }
- else
- {
- generateClassOrGlobalLink(*g_code,temp);
- }
- }
- else
- {
- if (!checkVhdlString(temp))
- g_code->codify(temp.data());
- }
- }
- temp.resize(0);
- found=FALSE;
- }
-
- char cc[2];
- cc[0]=c;
- cc[1]=0;
- g_code->codify(cc);
- }
- else
- {
- found=TRUE;
- temp+=c;
- }
- } // for
-
- if (!temp.isEmpty())
- {
- if (!writeColoredWord(temp))
- {
- if (!tclass.isEmpty())
- {
- if (!classLink)
- {
- generateMemLink(*g_code,tclass,temp); // generateMemLink(*g_code,g_CurrClass,left);
- }
- else
- {
- generateClassOrGlobalLink(*g_code,temp);
- }
- }
- else
- {
- QCString qc(temp.data());
- if (VhdlDocGen::isNumber(qc)){
- startFontClass("vhdllogic");
- g_code->codify(temp.data());
- endFontClass();
- }
- else
- g_code->codify(temp.data());
- }
- }
- }
-}// writeWord
-
-
-/*! write a code fragment `text' that may span multiple lines, inserting
- * line numbers for each line.
- */
-static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE)
-{
- if (text==0) return;
- //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
- const char *p=text,*sp=p;
- char c;
- bool done=FALSE;
- while (!done)
- {
- sp=p;
- while ((c=*p++) && c!='\n') {}
- if (c=='\n')
- {
- g_yyLineNr++;
- QCString line = sp;
- line = line.left(p-sp-1);
- //*(p-1)='\0';
- //g_code->codify(sp);
- writeWord(line,cl,classlink);
- nextCodeLine();
- }
- else
- {
- //g_code->codify(sp);
- writeWord(sp,cl,classlink);
- done=TRUE;
- }
- }
-}
-
-/*! writes a link to a fragment \a text that may span multiple lines, inserting
- * line numbers for each line. If \a text contains newlines, the link will be
- * split into multiple links with the same destination, one for each line.
- */
-static void writeMultiLineCodeLink(CodeOutputInterface &ol,
- const char *ref,const char *file,
- const char *anchor,const char *text,
- const char *tooltip)
-{
- bool done=FALSE;
- char *p=(char *)text;
- while (!done)
- {
- char *sp=p;
- char c;
- while ((c=*p++) && c!='\n') {}
- if (c=='\n')
- {
- g_yyLineNr++;
- *(p-1)='\0';
- // printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
- ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- nextCodeLine();
- }
- else
- {
- ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- done=TRUE;
- }
- }
-}
-
-static void setParameterList(MemberDef *md)
-{
- g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
- LockingPtr<ArgumentList> al = md->argumentList();
- if (al==0) return;
- Argument *a = al->first();
- while (a)
- {
- g_parmName = a->name.copy();
- g_parmType = a->type.copy();
- int i = g_parmType.find('*');
- if (i!=-1) g_parmType = g_parmType.left(i);
- i = g_parmType.find('&');
- if (i!=-1) g_parmType = g_parmType.left(i);
- g_parmType.stripPrefix("const ");
- g_parmType=g_parmType.stripWhiteSpace();
- // g_theVarContext.addVariable(g_parmType,g_parmName);
- a = al->next();
- }
-}
-
-
-/*! writes a link to a function or procedure
- */
-
-static void generateFuncLink(CodeOutputInterface &ol,MemberDef* mdef)
-{
-
- //printf("generateFuncLink(FuncName=%s)\n",mdef->name().data());
- QCString memberName=mdef->name();
-
- if (mdef && mdef->isLinkable()) // is it a linkable class
- {
- writeMultiLineCodeLink(ol,mdef->getReference(),
- mdef->getOutputFileBase(),
- mdef->anchor(),
- mdef->name(),
- mdef->briefDescriptionAsTooltip());
- addToSearchIndex(memberName);
- return;
- }
- ol.linkableSymbol(g_yyLineNr,memberName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- codifyLines(memberName.data());
- addToSearchIndex(memberName);
-} // generateFuncLink
-
-
-static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName)
-{
- if (memberName.isEmpty()) return;
- if (clName.isEmpty())
- {
- codifyLines(memberName.data());
-
- return;
- }
-
- QCString className=clName;
-
- MemberDef *md=0;
- //MemberDef *comp=0;
- //bool isLocal=FALSE;
-
- md=VhdlDocGen::findMember(className,memberName);
- ClassDef *po=VhdlDocGen::getClass(className.data());
-
- if (md==0 && po && (VhdlDocGen::VhdlClasses)po->protection()==VhdlDocGen::PACKBODYCLASS)
- {
- QCString temp=className;//.stripPrefix("_");
- temp.stripPrefix("_");
- md=VhdlDocGen::findMember(temp,memberName);
- }
-
- if (md && md->isLinkable()) // is it a linkable class
- {
- writeMultiLineCodeLink(ol,md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),
- memberName,
- md->briefDescriptionAsTooltip());
- addToSearchIndex(memberName);
- return;
- }
- // nothing found, just write out the word
- ol.linkableSymbol(g_yyLineNr,memberName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- codifyLines(memberName.data());
- addToSearchIndex(memberName);
-}// generateMemLink
-
-
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/)
-{
- QCString className=clName;
-
- if (className.isEmpty()) return;
-
- ClassDef *cd=0;
- //MemberDef *md=0;
- //bool isLocal=FALSE;
- className.stripPrefix("_");
- cd = getClass(className.data());
- while (cd)
- {
- //className.stripPrefix("_");
- QCString temp(clName);
- temp.stripPrefix("_");
- if (cd && cd->isLinkable()) // is it a linkable class
- {
- //if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS)
- //{
- // temp=VhdlDocGen::getClassName(cd);
- //}
- ol.linkableSymbol(g_yyLineNr,temp,cd,
- g_currentMemberDef ?
- g_currentMemberDef :
- g_currentDefinition);
- writeMultiLineCodeLink(ol,cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- temp,
- cd->briefDescriptionAsTooltip());
- addToSearchIndex(className);
- return;
- }
- Definition *d = cd->getOuterScope();
- if (d && d->definitionType()==Definition::TypeClass)
- {
- cd = (ClassDef*)d;
- }
- else
- {
- cd = 0;
- }
- }
-
- // nothing found, just write out the word
- ol.linkableSymbol(g_yyLineNr,clName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- codifyLines(clName);
- addToSearchIndex(clName);
-}// generateClasss or global link
-
-
-/*! counts the number of lines in the input */
-static int countLines()
-{
- const char *p=g_inputString;
- char c;
- int count=1;
- while ((c=*p))
- {
- p++ ;
- if (c=='\n') count++;
- }
- if (p>g_inputString && *(p-1)!='\n')
- { // last line does not end with a \n, so we add an extra
- // line and explicitly terminate the line after parsing.
- count++,
- g_needsTermination=TRUE;
- }
- return count;
-}
-
-static void endFontClass()
-{
- if (g_currentFontClass)
- {
- g_code->endFontClass();
- g_currentFontClass=0;
- }
-}
-
-static void startFontClass(const char *s)
-{
- if (s==0) return;
- endFontClass();
- g_code->startFontClass(s);
- g_currentFontClass=s;
-}
-
-static void writeFont(const char *s,const char* text)
-{
- if (s==0 || text==0) return;
- //printf("writeFont(%d,\"%s\")\n",g_yyLineNr,text);
- g_code->startFontClass(s);
- g_code->codify(text);
- g_code->endFontClass();
-}
-
-//----------------------------------------------------------------------------
-
-static void appStringLower(QCString& qcs,const char* text)
-{
- qcs.resize(0);
- qcs.append(text);
- //qcs=qcs.lower();
- qcs=qcs.stripWhiteSpace();
-}
-
-//static void appString(QCString& qcs,const char* text)
-//{
-// qcs.resize(0);
-// qcs.append(text);
-//}
-
-static QCString g_temp;
-
-/* writes and links a port map statement */
-static void codifyMapLines(char *text)
-{
- if (text==0) return;
- g_temp.resize(0);
- //bool dot=FALSE;
- int wordCounter=0;
- QCString ctemp;
- //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
- char *p=text; //,*sp=p;
- char c;
- bool done=FALSE;
- while (!done)
- {
- //sp=p;
- while ((c=*p++) && c!='\n' && c!=':' && c != ' ' && c != '(' && c!='\0' && c!='\t')
- {
- if (c!=0x9)
- g_temp+=c;
- }
- if (c=='\0') return;
- if (!g_temp.isEmpty()) wordCounter++;
-
- if (!g_temp.isEmpty())
- {
- // different kinds of component instantiations
- // xxx:yyy (generic/port) map(
- // xxx:(entity/component/configuration) yyy (generic/port) map(
- // xxx: entity yyy(zzz) (generic/port) map(
- if (wordCounter==2 || wordCounter==3)
- {
- QCString q=g_temp.lower(); // consider (upper/lower) cases
- if (q=="entity" || q=="component" || q=="configuration" || q=="port" || q=="generic")
- {
- generateMemLink(*g_code,g_CurrClass,g_temp);
- }
- else
- {
- g_PortMapComp=g_temp;
- generateClassOrGlobalLink(*g_code,g_temp);
- }
- }
- else
- {
- generateMemLink(*g_code,g_CurrClass,g_temp);
- }
- }
- ctemp.fill(c,1);
- codifyLines(ctemp.data());
- ctemp.resize(0);
- g_temp.resize(0);
- }//while
-}//codifymaplines
-
-/*
-* writes a function|procedure prototype and links the function|procedure name
-*/
-
-static void writeFuncProto()
-{
- QList<Argument> ql;
- QCString name,ret;
- VhdlDocGen::parseFuncProto(g_FuncProto,ql,name,ret,FALSE);
-
- if (name.isEmpty())
- {
- codifyLines(g_FuncProto.data(),g_CurrClass.data());
- return;
- }
- QStringList qlist=QStringList::split(name,g_FuncProto,FALSE);
- QCString temp=(QCString)qlist[0];
- codifyLines(temp.data(),g_CurrClass.data());
- g_FuncProto.stripPrefix(temp.data());
- temp.resize(0);
- temp=g_CurrClass;
- if (isPackageBody)
- {
- temp.stripPrefix("_");// _{package body name}
- }
- MemberDef *mdef=VhdlDocGen::findFunction(ql,name,temp,FALSE);
-
- if (mdef)
- {
- generateFuncLink(*g_code,mdef);
- g_FuncProto.stripPrefix(name.data());
- codifyLines(g_FuncProto.data(),g_CurrClass.data());
- }
- else
- {
- codifyLines(g_FuncProto.data(),g_CurrClass.data());
- }
-}// writeFuncProto
-
-/* writes a process prototype to the ouput */
-
- static void writeProcessProto(){
- codifyLines(g_FuncProto.data(),g_CurrClass.data());
- g_vhdlKeyDict.clear();
-}// writeProcessProto
-
-/* writes a keyword */
-
-static bool writeColoredWord(QCString& word )
-{
- QCString qcs=word.lower();
- QCString *ss=VhdlDocGen::findKeyWord(qcs);
- if (ss)
- {
- writeFont(ss->data(),word.data());
- return TRUE;
- }
- return FALSE;
-}
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && g_inputString[g_inputPosition] )
- {
- *buf = g_inputString[g_inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-
-B [ \t]
-BN [ \t\n\r]
-STRING ["][^"\n]*["]
-NAME [a-z_A-Z][ a-z_A-Z0-9]*
-FUNCNAME [a-z_A-Z"][a-z_A-Z0-9+*"/=<>-]*
-ID "$"?[a-z_A-Z][a-z_A-Z0-9]*
-SPECSIGN [:;, +*&\/=<>'\t]*
-DIGITSS [0-9]+|[0-9]+("#")*[0-9_a-fA-F\+\.\-]+("#")*
-ALLTYPESMAP {B}*[_a-zA-Z0-9. ]+{BN}*
-ALLTYPESMAP1 {BN}*[_a-zA-Z0-9.() ]+{BN}*
-
-ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME}
-PROCESS ({BN}*{FUNCNAME}{BN}*[:]+{BN}*("process"){BN}*[(]*)|[^a-zA-Z]("process "|"process("){BN}*[ (]*|[^a-zA-Z]("process"){BN}+
-
-END1 {B}*("end "){BN}+("if"|"case"|"loop"|"generate"|"for")
-END2 [^a-zA-Z_]("end"){BN}*[;]
-END3 {BN}*[^a-zA-Z]("end"){BN}+{FUNCNAME}{BN}*[;]
-END4 {B}*("end"){BN}+"function"{BN}+{FUNCNAME}{BN}*[;]
-ENDEFUNC {END3}|{END4}|{END2}
-
-KEYWORD ("new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in")
-TYPEKW ^{B}*("type"|"subtype"|"constant"|"attribute"|"signal"|"variable","alias","configuration")
-FUNC ^{B}*("function"|"procedure"){BN}*{FUNCNAME}{BN}*("(")
-
-ARITHOP "+"|"-"|"/"|"*"|"%"|"/="|":="
-ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|="
-LOGICOP "=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!"
-BITOP "&"|"|"|"^"|"<<"|">>"|"~"
-OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
-
-PORT {B}*("port"){BN}*("(")
-GENERIC {B}*("generic"){BN}*("(")
-
-BRACEOPEN [(]{1}
-BRACECLOSE [)]{1}
-
-TEXTT {B}*"--"[^\n]*
-
-MAPCOMPONENT1 ({ALLTYPESMAP}[:]{ALLTYPESMAP}{TEXTT}*{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1})
-MAPCOMPONENT2 {BN}*("port"|"generic"){BN}+("map"){BN}*("("){1}
-MAPCOMPONENT3 ({ALLTYPESMAP}[:]{BN}*{ALLTYPESMAP1}{TEXTT}*{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1})
-MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{ALLTYPESMAP1}{TEXTT}*{BN}*("port"|"generic"){BN}*("map"){BN}*("("){1})
-
-XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFIG"|"CONFIG_MODE"|"COOL_CLK"|"DATA_GATE"|"DCI_VALUE"|"DISABLE"|"DRIVE"|"DROP_SPEC"|"ENABLE"|"FAST"|"FEEDBACK"|"FILE"|"FLOAT"|"FROM-THRU-TO"|"FROM-TO"|"HBLKNM"|"HU_SET"|"INREG"|"IOB"|"IOBDELAY"|"IOSTANDARD"|"KEEP"|"KEEPER"|"LOC"|"LOCATE"|"LOCK_PINS"|"MAP"|"MAXDELAY"|"MAXPT"|"MAXSKEW"|"NODELAY"|"NOREDUCE"|"OFFSET"|"OPEN_DRAIN"|"OPT_EFFORT"|"OPTIMIZE"|"PERIOD"|"PIN"|"PRIORITY"|"PROHIBIT"|"PULLDOWN"|"PULLUP"|"PWR_MODE"|"REG"|"RLOC"|"RLOC_ORIGIN"|"RLOC_RANGE"|"SAVE NET"|"FLAG"|"SYSTEM_JITTER"|"TEMPERATURE"|"TIMEGRP"|"TIMESPEC"|"VOLTAGE"
-
-%option noyywrap
-%option nounput
-
-%x Bases
-%x ParseType
-%x ParseFuncProto
-%x ParseComponent
-%x ParsePackage
-%x ParseProcessProto
-%x ClassName
-%x PackageName
-%x ClassVar
-%x ClassesName
-%x Map
-%x Body
-
-%%
-
-. {
- BEGIN(Bases);
- }
-
-<Map>{BRACEOPEN} {
- g_braceCount++;
- writeFont("vhdlchar",vhdlcodeYYtext);
- BEGIN(Map);
- }
-
-<Map>[^()\n,--]* { /* write and link a port map lines */
- QCString tt(vhdlcodeYYtext);
- VhdlDocGen::deleteAllChars(tt,',');
- QRegExp r("=>");
- QStringList ql=QStringList::split(r,tt,FALSE);
- if (ql.count()>=2)
- {
- unsigned int index=0;
- QCString t1=(QCString)ql[0];
- char cc=t1.at(index);
- while (cc==' ' || cc=='\t')
- {
- char c2[2];
- c2[0]=cc;
- c2[1]=0;
- g_code->codify(c2);
- index++;
- if (index>=t1.size()) break;
- cc=t1.at(index);
- }
-
- QCString s1=t1;
- s1=s1.stripWhiteSpace();
-
- // if (!g_PortMapComp.isEmpty())
- generateMemLink(*g_code,g_PortMapComp,s1);
- while (index++<t1.size())
- {
- char cc=t1.at(index);
- if (cc==' ' || cc=='\t')
- {
- char c2[2];
- c2[0]=cc;
- c2[1]=0;
- g_code->codify(c2);
- }
- }
- codifyLines("=>");
- index=0;
- QCString s2=(QCString)ql[1];
- t1=s2;
- cc=t1.at(index);
- while (cc==' ' || cc=='\t')
- {
- char c2[2];
- c2[0]=cc;
- c2[1]=0;
- g_code->codify(c2);
- index++;
- if (index>=t1.size()) break;
- cc=t1.at(index);
- }
- s2=s2.stripWhiteSpace();
- if (!checkVhdlString(s2))
- generateMemLink(*g_code,g_CurrClass,s2);
- while (index++<t1.size())
- {
- if (t1.at(index)==' ')
- {
- g_code->codify(" ");
- }
- }
- }
- else
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
- BEGIN(Map);
- }
-
-<Map>"\n"|"," {
- codifyLines(vhdlcodeYYtext);
- BEGIN(Map);
- }
-
-<Map>{BRACECLOSE} {
- g_braceCount--;
- writeFont("vhdlchar",vhdlcodeYYtext);
- if (g_braceCount==0)
- {
- BEGIN(Bases);
- }
- }
-
-<ParseFuncProto>{NAME} {
- QCString tmp(vhdlcodeYYtext);
- tmp=tmp.stripWhiteSpace();
- appStringLower(g_PrevString,vhdlcodeYYtext);
- g_vhdlKeyDict.insert(g_PrevString,new QCString(g_PrevString.data()));
- if (!writeColoredWord(tmp))
- {
- generateMemLink(*g_code,g_CurrClass,tmp);
- }
- BEGIN(Bases);
- }
-
-<ParseType>{STRING} {
- QCString qcs(vhdlcodeYYtext);
- VhdlDocGen::deleteAllChars(qcs,'"');
- VhdlDocGen::deleteAllChars(qcs,' ');
- if (VhdlDocGen::isNumber(qcs))
- writeFont("vhdllogic",vhdlcodeYYtext);
- else
- writeFont("keyword",vhdlcodeYYtext);
- }
-
-<ParseType>"\n" {
- g_FuncProto.append(vhdlcodeYYtext);
- if (isProto)
- {
- codifyLines(vhdlcodeYYtext);
- }
- BEGIN(ParseType);
- }
-
-
-<ParseType>{TEXTT} {
- g_FuncProto.append(vhdlcodeYYtext);
- if (isProto)
- {
- writeFont("keyword",vhdlcodeYYtext);
- }
- BEGIN(ParseType);
- }
-
-<ParseType>{ENDEFUNC} {
- QRegExp regg("[\\s]");
- QCString tt(vhdlcodeYYtext);
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- tt=tt.lower();
- VhdlDocGen::deleteAllChars(tt,';');
- tt.stripWhiteSpace();
- QStringList ql=QStringList::split(regg,tt,FALSE);
- int index=ql.findIndex(QCString("if"))+1;
- index+=ql.findIndex(QCString("case"))+1;
- index+=ql.findIndex(QCString("loop"))+1;
- index+=ql.findIndex(QCString("generate"))+1;
- if (index==0)
- {
- BEGIN(Bases);
- }
- else
- {
- BEGIN(ParseType);
- }
- }
-
-<ParseType>{END1} {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- g_vhdlKeyDict.clear();
- }
-
-<ParseType>^{B}*("begin "|"begin") {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- isFuncProto=FALSE;
- }
-
-<ParseType>{SPECSIGN} {
- g_FuncProto.append(vhdlcodeYYtext);
- if (isProto)
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
- }
-
-<ParseType>["_a-zA-Z0-9]* {
- QCString val(vhdlcodeYYtext);
- g_FuncProto.append(vhdlcodeYYtext);
- appStringLower(g_PrevString,vhdlcodeYYtext);
-
- if (isFuncProto && g_braceCount==0)
- {
- g_vhdlKeyDict.insert(g_PrevString,new QCString(g_PrevString.data()));
- }
-
- if (isProto)
- {
- if (!writeColoredWord(val))
- {
- if (!isFuncProto && !g_vhdlKeyDict.find(g_PrevString))
- {
- val=val.stripWhiteSpace();
- if (VhdlDocGen::isNumber(val))
- {
- startFontClass("vhdllogic");
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- endFontClass();
- }
- else
- generateMemLink(*g_code,g_CurrClass,val);
- }
- else
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
- }
- }
- BEGIN(ParseType);
- }
-
-<ParseType>{BRACEOPEN} {
- g_braceCount++;
- g_FuncProto+='(';
- if (isProto)
- {
- writeFont("vhdlchar",vhdlcodeYYtext);
- }
- BEGIN(ParseType);
- }
-
-<ParseType>{BRACECLOSE} {
- g_braceCount--;
- g_FuncProto+=')';
- if (isProto)
- {
- writeFont("vhdlchar",vhdlcodeYYtext);
- }
- if (g_braceCount==0 && !isProto)// && !isPackageBody)
- {
- isProto=TRUE;
- appStringLower(g_PrevString,vhdlcodeYYtext);
- writeFuncProto();
- BEGIN(Bases);
- }
- if (isPackageBody)
- {
- BEGIN(ParseType);
- }
- }
-
-
-<ClassesName>{FUNCNAME} {
- QDict<QCString> mem;
- appStringLower(g_PrevString,vhdlcodeYYtext);
- g_CurrClass.resize(0);
- g_CurrClass.append(vhdlcodeYYtext);
- g_CurrClass=g_CurrClass.stripWhiteSpace();
-
- if (!writeColoredWord(g_CurrScope))
- {
- generateClassOrGlobalLink(*g_code,vhdlcodeYYtext);
- }
- else
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
- BEGIN(Bases);
- }
-
-
-<ParseComponent>{BRACEOPEN} {
- g_braceCount++;
- g_code->codify(vhdlcodeYYtext);
- }
-
-
-<ParseComponent>{BRACECLOSE} {
- g_braceCount--;
- g_code->codify(vhdlcodeYYtext);
- if (g_braceCount==0 && !isComponent)
- {
- g_tempComp.resize(0);
- BEGIN(Bases);
- }
- else
- {
- BEGIN(ParseComponent);
- }
- }
-
-<ParseComponent>{B}*"-" {
- if (strlen(vhdlcodeYYtext)>=2) // found text ?
- {
- writeFont("keyword",vhdlcodeYYtext);
- }
- else
- {
- writeFont("vhdlchar",vhdlcodeYYtext);
- }
- }
-
-<ParseComponent>{SPECSIGN} {
- codifyLines(vhdlcodeYYtext);
- }
-
-
-
-<ParseComponent>"\n"|" " {
- codifyLines(vhdlcodeYYtext);
- }
-
-<ParseComponent>{DIGITSS} {
- startFontClass("vhdllogic");
- codifyLines(vhdlcodeYYtext);
- endFontClass();
- }
-
-<ParseComponent>{PORT} {
- codifyLines(vhdlcodeYYtext);
- g_braceCount=1;
- isComponent=FALSE;
- }
-
-<ParseComponent>{GENERIC} {
- codifyLines(vhdlcodeYYtext);
- g_braceCount=1;
- }
-
-<ParseComponent>[_a-zA_Z][_a-zA-Z0-9]* {
- QCString temp(vhdlcodeYYtext);
- appStringLower(g_PrevString,vhdlcodeYYtext);
- if (!checkVhdlString(temp)){
- if (!writeColoredWord(g_PrevString))
- {
- generateMemLink(*g_code,g_tempComp,temp);
- }
- }
- }
-
-<ParseComponent>{STRING} {
- QCString temp(vhdlcodeYYtext);
- if (!checkVhdlString(temp))
- codifyLines(vhdlcodeYYtext);
- }
-
-
-<ParseProcessProto>[^()]* {
- g_FuncProto.append(vhdlcodeYYtext);
- }
-
-
-
-<ParseProcessProto>{BRACEOPEN} {
- g_FuncProto.append(vhdlcodeYYtext);
- g_braceCount++;
- }
-
-<ParseProcessProto>{BRACECLOSE} {
- g_FuncProto.append(vhdlcodeYYtext);
- g_braceCount--;
- if (g_braceCount==0)
- {
- writeProcessProto();
- BEGIN(Bases);
- }
- }
-
-<ParsePackage>[^:;]* { //found package
- QCString temp(vhdlcodeYYtext);
- QStringList strl=QStringList::split(".",temp,FALSE);
-
- if (strl.count()>2)
- {
- QCString s1=(QCString)strl[0];
- QCString s2=(QCString)strl[1];
- QCString s3=(QCString)strl[2];
- s1.append(".");
- s3.prepend(".");
- codifyLines(s1.data(),g_CurrClass.data());
- ClassDef *cd=VhdlDocGen::getPackageName(s2);
- if (cd)
- {
- generateClassOrGlobalLink(*g_code,s2.data());
- }
- else
- {
- codifyLines(s2.data());
- }
- codifyLines(s3.data());
- }
- else
- {
- writeFont("keywordflow",vhdlcodeYYtext);
- }
- BEGIN(Bases);
- }
-
-<Bases>{MAPCOMPONENT1}|{MAPCOMPONENT2}|{MAPCOMPONENT3}|{MAPCOMPONENT4} { // found port or generic map
- QCString tt(vhdlcodeYYtext);
- /*
- if (tt.contains(':',FALSE))
- {
- isStartMap=TRUE;
- }
- else
- {
- isStartMap=FALSE;
- }
- */
- int j=tt.find('.');
-
- if (j>0)
- {
- QCString left=tt.left(j+1);
- codifyLines(left.data());
- tt=tt.right(tt.length()-j-1);
- left=VhdlDocGen::getIndexWord(tt.data(),0);
- if (!left.isEmpty())
- {
- if (left.contains('('))
- {
- j=left.find('(',FALSE);
- QCString name=left.left(j);
- generateClassOrGlobalLink(*g_code,name.data());
- g_PortMapComp=name;
- name=tt.right(tt.length()-name.length());
- codifyLines(name.data());
- }
- else
- {
- generateClassOrGlobalLink(*g_code,left.data());
- tt.stripPrefix(left.data()); //=tt.right(tt.length()-left.length()-1);
-
- g_PortMapComp=left;
- codifyLines(tt.data());
- }
- }
- }
- else
- {
- if (tt.contains(':',FALSE))
- codifyMapLines(tt.data());
- else
- codifyLines(tt.data());
- }
- g_braceCount=1;
- BEGIN(Map);
- }
-
-<Bases>^{B}*("component"){BN}+{FUNCNAME} { // found component
- appStringLower(g_PrevString,vhdlcodeYYtext);
- // writeFont("keywordflow",VhdlDocGen::getIndexWord(vhdlcodeYYtext,0).data());
- // writeFont("vhdlkeyword"," ");
- QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
- temp=temp.stripWhiteSpace();
- VhdlDocGen::deleteAllChars(temp,'\n');
- g_tempComp=temp;
- codifyLines(vhdlcodeYYtext,temp.data(),TRUE);
- g_braceCount=0;
-
- //if (getClass(temp.data()))
- // generateClassOrGlobalLink(*g_code,temp.data());
- //else
- // generateMemLink(*g_code,g_CurrClass,temp);
-
- isComponent=TRUE;
- BEGIN(ParseComponent);
- }
-
-
-
-<Bases>{ARCHITECTURE} { // found architecture
- g_PortMapComp.resize(0);
- // writeFont("vhdlkeyword",VhdlDocGen::getIndexWord(vhdlcodeYYtext,0).data());
- // writeFont("vhdlkeyword"," ");
- // writeFont("vhdlchar",VhdlDocGen::getIndexWord(vhdlcodeYYtext,1).data());
- // writeFont("vhdlkeyword"," ");
- // writeFont("vhdlkeyword",VhdlDocGen::getIndexWord(vhdlcodeYYtext,2).data());
- // writeFont("vhdlkeyword"," ");
- //QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
- //temp=temp.stripWhiteSpace();
- //temp+=("-");
- //temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
- QCString temp = VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
- temp+="::";
- temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
- g_CurrClass=temp;
- VhdlDocGen::deleteAllChars(temp,'\n');
- codifyLines(vhdlcodeYYtext,temp.data(),TRUE);
- //generateClassOrGlobalLink(*g_code,temp.data());
- isPackageBody=FALSE;
- BEGIN(ClassName);
- }
-
-
-<Bases>^{B}*("package "){BN}*("body"){BN}*{FUNCNAME} { // found package body
- QCString ss(vhdlcodeYYtext);
- QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,2);
- QStringList ql=QStringList::split(temp,ss,FALSE);
- QCString ll=(QCString)ql[0];
- codifyLines(ll.data(),g_CurrClass.data());
- temp=temp.stripWhiteSpace();
- temp.prepend("_");
- generateClassOrGlobalLink(*g_code,temp.data());
- g_CurrClass.resize(0);
- g_CurrClass=temp;
- isProto=FALSE;
- isPackageBody=TRUE;
- // BEGIN(ClassesName);
- }
-
-<Bases>{PROCESS} { // found process
- isFuncProto=TRUE;
- g_FuncProto.resize(0);
- g_FuncProto.append(vhdlcodeYYtext);
- g_vhdlKeyDict.clear();
- appStringLower(g_PrevString,vhdlcodeYYtext);
- if (g_PrevString.contains('('))
- {
- g_braceCount=1;
- BEGIN(ParseProcessProto);
- }
- else
- {
- writeProcessProto();
- }
- }
-
-<Bases>("end"){BN}+("process") { // end of process
- isFuncProto=FALSE;
- codifyLines(vhdlcodeYYtext);
- BEGIN(Bases);
- }
-
-
-<Bases>^{B}*("begin "|"begin") {
- isFuncProto=FALSE;
- writeFont("vhdlkeyword",vhdlcodeYYtext);
- }
-
-<Bases>^{B}*("use"|"library"){BN}+ { //found package or library
- writeFont("vhdlkeyword",vhdlcodeYYtext);
- BEGIN(ParsePackage);
- }
-
-
-<Bases>^{B}*("use"){BN}+("configuration")[^\n]* {
- codifyLines(vhdlcodeYYtext);
- }
-
-
-
-<Bases>{FUNC} { // found function|procedure
- g_vhdlKeyDict.clear();
- g_FuncProto.resize(0);
- isProto=FALSE;
- g_FuncProto.append(vhdlcodeYYtext);
- g_braceCount=1;
- BEGIN(ParseType);
- }
-
-
-
-<Bases>^{B}*("entity"|"package"){BN}+ {
- appStringLower(g_PrevString,vhdlcodeYYtext);
- writeFont("keywordflow",vhdlcodeYYtext);
- isPackageBody=FALSE;
- BEGIN(ClassesName);
- }
-
-
-<Bases>{KEYWORD} { // found keyword
- QCString qcs(vhdlcodeYYtext);
- if (!writeColoredWord(qcs))
- {
- startFontClass("vhdlchar");
- g_code->codify(vhdlcodeYYtext);
- endFontClass();
- }
- }
-
-
-<Bases>{ID} {
- appStringLower(g_PrevString,vhdlcodeYYtext);
- QCString temp(vhdlcodeYYtext);
- temp=temp.stripWhiteSpace();
-
- if (!writeColoredWord(temp))
- {
- startFontClass("vhdlchar");
- generateMemLink(*g_code,g_CurrClass,temp);
- endFontClass();
- }
- }
-
-<Bases,ParseComponent>{DIGITSS} {
- startFontClass("vhdllogic");
- codifyLines(vhdlcodeYYtext);
- endFontClass();
- }
-
-<Bases>^{B}*("use"){BN}+("entity"|"component")[^\n]* {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
- }
-
-
-<Bases>{TYPEKW} {
- codifyLines(vhdlcodeYYtext);
- if (isFuncProto)
- {
- BEGIN(ParseFuncProto);
- }
- else
- {
- BEGIN(Bases);
- }
- }
-
-<Bases>{OPERATOR} {
- startFontClass("vhdlchar");
- g_code->codify(vhdlcodeYYtext);
- endFontClass();
- }
-
-<Bases>","|"."|":"|"'"|"("|")" {
- startFontClass("vhdlchar");
- g_code->codify(vhdlcodeYYtext);
- endFontClass();
- }
-
-<Bases>{STRING} {
- QCString qcs(vhdlcodeYYtext);
- VhdlDocGen::deleteAllChars(qcs,'"');
- VhdlDocGen::deleteAllChars(qcs,' ');
-
- if (VhdlDocGen::isNumber(qcs))
- writeFont("vhdllogic",vhdlcodeYYtext);
- else
- writeFont("keyword",vhdlcodeYYtext);
- }
-
-<Bases>{B}*"#"[^\n]* {
- writeFont("keyword",vhdlcodeYYtext);
- }
-
-<Bases>^{B}*{XILINX}[^\n]* {
- writeWord(yytext);
- //codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
- }
-
-<Bases>^{B}*"set_"[^\n]* {
- writeWord(yytext);
- }
-
-<*>\n {
- codifyLines(vhdlcodeYYtext);
- BEGIN(Bases);
- }
-
-<*>. {
- g_code->codify(vhdlcodeYYtext);
- }
-
-<*>\n{TEXTT} { // found normal or special comment on its own line
- QCString text(vhdlcodeYYtext);
- int i=text.find("--");
- if (text.mid(i,3)=="--!" && // hide special comment
- Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_yyLineNr++; // skip complete line
- }
- else // normal comment
- {
- startFontClass("keyword");
- codifyLines(text);
- endFontClass();
- }
- }
-<*>{TEXTT} { // found normal or special comment after something
- QCString text(vhdlcodeYYtext);
- int i=text.find("--");
- if (text.mid(i,3)=="--!" &&
- Config_getBool("STRIP_CODE_COMMENTS"))
- {
- // hide special comment
- }
- else // normal comment
- {
- startFontClass("keyword");
- codifyLines(text);
- endFontClass();
- }
- }
-
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-void resetVhdlCodeParserState()
-{
- g_vhdlKeyDict.setAutoDelete(TRUE);
- g_vhdlKeyDict.clear();
-}
-
-void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s,
- bool exBlock, const char *exName,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- MemberDef *memberDef,bool)
-{
- //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd);
- if (s.isEmpty()) return;
- if (memberDef)
- {
- ClassDef *dd=memberDef->getClassDef();
- if (dd) g_CurrClass=dd->className();
- startLine--;
- }
- resetVhdlCodeParserState();
- g_code = &od;
- g_inputString = s;
- g_inputPosition = 0;
- g_currentFontClass = 0;
- g_needsTermination = FALSE;
-
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
- if (startLine!=-1)
- g_yyLineNr = startLine;
- else
- g_yyLineNr = 1;
-
-
- // g_theCallContext.clear();
- g_classScope = className;
- g_exampleName = exName;
- g_sourceFileDef = fd;
- if (exBlock && fd==0)
- {
- // create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",exName);
- }
- if (g_sourceFileDef)
- {
- setCurrentDoc(g_sourceFileDef->name(),g_sourceFileDef->getSourceFileBase());
- }
- g_currentDefinition = 0;
- g_currentMemberDef = 0;
- g_vhdlMember=0;
- if (!g_exampleName.isEmpty())
- {
- g_exampleFile = convertNameToFile(g_exampleName+"-example");
- }
- g_includeCodeFragment = inlineFragment;
- if (!memberDef)
- {
- startCodeLine();
- }
- // g_type.resize(0);
- // g_name.resize(0);
- // g_args.resize(0);
- g_parmName.resize(0);
- g_parmType.resize(0);
- if (memberDef)
- {
- setParameterList(memberDef);
- }
- int iLine=countLines();
- vhdlcodeYYrestart( vhdlcodeYYin );
- BEGIN( Bases );
- vhdlcodeYYlex();
- g_lexInit=TRUE;
- if (g_needsTermination)
- {
- endCodeLine();
- }
- if (exBlock && g_sourceFileDef)
- {
- // delete the temporary file definition used for this example
- delete g_sourceFileDef;
- g_sourceFileDef=0;
- }
- assert(g_yyLineNr==iLine);
- return;
-}
-
-void codeFreeVhdlScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- vhdlcodeYYlex_destroy();
- }
-#endif
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void vhdlcodeYYdummy() { yy_flex_realloc(0,0); }
-}
-#elif YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!"
-#endif
-
-
-
-