From 36122e49ed1d9e640b1ceca52536ec7c55e10474 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 27 Jul 2014 16:31:34 +0200 Subject: New VHDL parser implementation --- .gitignore | 2 + Makefile.in | 7 +- configure | 6 +- src/docparser.cpp | 1 + src/doxygen.cpp | 2 +- src/doxygen.pro.in | 12 +- src/htmldocvisitor.cpp | 25 +- src/libdoxygen.pro.in | 13 +- src/libdoxygen.t.in | 3 +- src/memberdef.cpp | 2 +- src/outputlist.cpp | 1 + src/vhdlcode.l | 2 + src/vhdldocgen.cpp | 3622 +++++++-- src/vhdldocgen.h | 300 +- src/vhdljjparser.cpp | 608 ++ src/vhdljjparser.h | 98 + src/vhdlscanner.h | 82 - src/vhdlscanner.l | 2052 ----- vhdlparser/CharStream.cc | 212 + vhdlparser/CharStream.h | 257 + vhdlparser/ErrorHandler.h | 43 + vhdlparser/JavaCC.h | 51 + vhdlparser/JavaCC.h.in | 51 + vhdlparser/Makefile.in | 40 + vhdlparser/ParseException.cc | 186 + vhdlparser/ParseException.h | 99 + vhdlparser/Token.cc | 92 + vhdlparser/Token.h | 116 + vhdlparser/TokenManager.h | 33 + vhdlparser/TokenMgrError.cc | 121 + vhdlparser/TokenMgrError.h | 90 + vhdlparser/VhdlParser.cc | 13051 ++++++++++++++++++++++++++++++++ vhdlparser/VhdlParser.h | 8944 ++++++++++++++++++++++ vhdlparser/VhdlParserConstants.h | 944 +++ vhdlparser/VhdlParserErrorHandler.hpp | 39 + vhdlparser/VhdlParserIF.cpp | 56 + vhdlparser/VhdlParserIF.h | 12 + vhdlparser/VhdlParserTokenManager.cc | 3497 +++++++++ vhdlparser/VhdlParserTokenManager.h | 133 + vhdlparser/vhdlparser.jj | 2758 +++++++ vhdlparser/vhdlparser.patch | 10 + vhdlparser/vhdlparser.pro.in | 33 + vhdlparser/vhdlstring.h | 100 + winbuild/Doxygen.vcproj | 128 +- 44 files changed, 34788 insertions(+), 3146 deletions(-) create mode 100644 src/vhdljjparser.cpp create mode 100644 src/vhdljjparser.h delete mode 100644 src/vhdlscanner.h delete mode 100644 src/vhdlscanner.l create mode 100644 vhdlparser/CharStream.cc create mode 100644 vhdlparser/CharStream.h create mode 100644 vhdlparser/ErrorHandler.h create mode 100644 vhdlparser/JavaCC.h create mode 100644 vhdlparser/JavaCC.h.in create mode 100644 vhdlparser/Makefile.in create mode 100644 vhdlparser/ParseException.cc create mode 100644 vhdlparser/ParseException.h create mode 100644 vhdlparser/Token.cc create mode 100644 vhdlparser/Token.h create mode 100644 vhdlparser/TokenManager.h create mode 100644 vhdlparser/TokenMgrError.cc create mode 100644 vhdlparser/TokenMgrError.h create mode 100644 vhdlparser/VhdlParser.cc create mode 100644 vhdlparser/VhdlParser.h create mode 100644 vhdlparser/VhdlParserConstants.h create mode 100644 vhdlparser/VhdlParserErrorHandler.hpp create mode 100644 vhdlparser/VhdlParserIF.cpp create mode 100644 vhdlparser/VhdlParserIF.h create mode 100644 vhdlparser/VhdlParserTokenManager.cc create mode 100644 vhdlparser/VhdlParserTokenManager.h create mode 100644 vhdlparser/vhdlparser.jj create mode 100644 vhdlparser/vhdlparser.patch create mode 100644 vhdlparser/vhdlparser.pro.in create mode 100644 vhdlparser/vhdlstring.h diff --git a/.gitignore b/.gitignore index 6abfaa8..0894b42 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,8 @@ /libmd5/Makefile.libmd5 /qtools/Makefile /qtools/Makefile.qtools +/vhdlparser/Makefile +/vhdlparser/Makefile.vhdlparser /src/Makefile.doxygen /src/Makefile.libdoxycfg /src/Makefile.libdoxygen diff --git a/Makefile.in b/Makefile.in index b5918ba..a83f08b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -21,6 +21,7 @@ clean: FORCE - cd qtools ; $(MAKE) clean - cd src ; $(MAKE) clean - cd libmd5 ; $(MAKE) clean + - cd vhdlparser ; $(MAKE) clean -cd addon/doxywizard ; $(MAKE) clean -cd addon/doxysearch ; $(MAKE) clean -cd addon/doxyapp ; $(MAKE) clean @@ -33,6 +34,7 @@ clean: FORCE distclean: clean -cd src ; $(MAKE) distclean -cd libmd5 ; $(MAKE) distclean + -cd vhdlparser ; $(MAKE) distclean -cd addon/doxywizard ; $(MAKE) distclean -cd addon/doxysearch ; $(MAKE) distclean -cd addon/doxyapp ; $(MAKE) distclean @@ -52,8 +54,9 @@ distclean: clean -rm -f src/Makefile.doxygen src/Makefile.libdoxygen -rm -f src/Makefile.libdoxycfg src/libdoxycfg.t src/libdoxygen.t -rm -f libmd5/Makefile.libmd5 + -rm -f vhdlparser/Makefile.vhdlparser -rm -f .makeconfig .tmakeconfig - -rm -f src/doxygen.pro src/libdoxygen.pro qtools/qtools.pro src/libdoxycfg.pro libmd5/libmd5.pro + -rm -f src/doxygen.pro src/libdoxygen.pro qtools/qtools.pro src/libdoxycfg.pro libmd5/libmd5.pro vhdlparser/vhdlparser.pro -rm -rf generated_src -rm -f addon/doxywizard/doxywizard.pro -rm -f VERSION @@ -95,7 +98,7 @@ docs: FORCE pdf: docs cd latex ; $(MAKE) -DISTFILES = Doxyfile libmd5 addon tmake doc examples bin lib objects testing \ +DISTFILES = Doxyfile vhdlparser libmd5 addon tmake doc examples bin lib objects testing \ qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \ Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \ VERSION README.md packages winbuild jquery diff --git a/configure b/configure index 0b0d6fb..8e92dc7 100755 --- a/configure +++ b/configure @@ -868,7 +868,7 @@ INCLUDEPATH += $XAPIAN/include EOF fi -f_inmakefiles="Makefile.in qtools/Makefile.in src/Makefile.in examples/Makefile.in doc/Makefile.in addon/doxywizard/Makefile.in addon/doxmlparser/src/Makefile.in addon/doxmlparser/test/Makefile.in addon/doxmlparser/examples/metrics/Makefile.in libmd5/Makefile.in addon/doxyapp/Makefile.in addon/doxysearch/Makefile.in" +f_inmakefiles="Makefile.in qtools/Makefile.in src/Makefile.in examples/Makefile.in doc/Makefile.in addon/doxywizard/Makefile.in addon/doxmlparser/src/Makefile.in addon/doxmlparser/test/Makefile.in addon/doxmlparser/examples/metrics/Makefile.in libmd5/Makefile.in addon/doxyapp/Makefile.in addon/doxysearch/Makefile.in vhdlparser/Makefile.in" for i in $f_inmakefiles ; do SRC=$i @@ -893,7 +893,9 @@ EOF echo "all: generated_src/doxygen/version.cpp $EXTRADEPS" >> $DST echo " \$(MAKE) -C qtools" >> $DST echo " \$(MAKE) -C libmd5" >> $DST + echo " \$(MAKE) -C vhdlparser" >> $DST echo " \$(MAKE) -C src" >> $DST + if test $f_wizard = YES; then echo " \$(MAKE) MAN1DIR=\$(MAN1DIR) -C addon/doxywizard" >> $DST fi @@ -930,7 +932,7 @@ done cat src/libdoxycfg.t.in | sed -e "s|%%FLEX%%|$f_flex|g" -e "s|%%BISON%%|$f_bison|g" -e "s|%%PYTHON%%|$f_python|g" > src/libdoxycfg.t cat src/libdoxygen.t.in | sed -e "s|%%FLEX%%|$f_flex|g" -e "s|%%BISON%%|$f_bison|g" -e "s|%%PYTHON%%|$f_python|g" > src/libdoxygen.t -f_inprofiles="qtools/qtools.pro.in src/libdoxygen.pro.in src/libdoxycfg.pro.in src/doxygen.pro.in addon/doxywizard/doxywizard.pro.in addon/doxmlparser/src/doxmlparser.pro.in addon/doxmlparser/test/xmlparse.pro.in addon/doxmlparser/examples/metrics/metrics.pro.in libmd5/libmd5.pro.in addon/doxyapp/doxyapp.pro.in addon/doxysearch/doxysearch.pro.in addon/doxysearch/doxyindexer.pro.in" +f_inprofiles="qtools/qtools.pro.in src/libdoxygen.pro.in src/libdoxycfg.pro.in src/doxygen.pro.in addon/doxywizard/doxywizard.pro.in addon/doxmlparser/src/doxmlparser.pro.in addon/doxmlparser/test/xmlparse.pro.in addon/doxmlparser/examples/metrics/metrics.pro.in libmd5/libmd5.pro.in addon/doxyapp/doxyapp.pro.in addon/doxysearch/doxysearch.pro.in addon/doxysearch/doxyindexer.pro.in vhdlparser/vhdlparser.pro.in" for i in $f_inprofiles ; do SRC=$i diff --git a/src/docparser.cpp b/src/docparser.cpp index 13d333f..6d788fd 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -2908,6 +2908,7 @@ void DocVhdlFlow::parse() DBG(("DocVhdlFlow::parse() end\n")); DocNode *n=g_nodeStack.pop(); ASSERT(n==this); + VhdlDocGen::createFlowChart(g_memberDef); } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index bc080a2..df67fd1 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -79,7 +79,7 @@ #include "store.h" #include "marshal.h" #include "portable.h" -#include "vhdlscanner.h" +#include "vhdljjparser.h" #include "vhdldocgen.h" #include "eclipsehelp.h" #include "cite.h" diff --git a/src/doxygen.pro.in b/src/doxygen.pro.in index 8bca741..4f05a35 100644 --- a/src/doxygen.pro.in +++ b/src/doxygen.pro.in @@ -18,18 +18,18 @@ TEMPLATE = app.t CONFIG = console warn_on $extraopts HEADERS = doxygen.h SOURCES = main.cpp -unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% +unix:LIBS += -L../lib -ldoxygen -lvhdlparser -ldoxycfg -lqtools -lmd5 -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% win32:INCLUDEPATH += . -win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread -llibiconv -lole32 %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% -win32-msvc:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib +win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lvhdlparser -lqtools -lmd5 -lpthread -llibiconv -lole32 %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% +win32-msvc:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib vhdlparser.lib shell32.lib iconv.lib win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\lib -win32-borland:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib +win32-borland:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib vhdlparser.lib shell32.lib iconv.lib win32-borland:TMAKE_LFLAGS += -L..\lib -L$(BCB)\lib\psdk win32:TMAKE_CXXFLAGS += -DQT_NODLL -win32-g++:LIBS = -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -liconv -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% -Wl,--as-needed -lole32 +win32-g++:LIBS = -L../lib -ldoxygen -ldoxycfg -lvhdlparser -lqtools -lmd5 -liconv -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% -Wl,--as-needed -lole32 win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti DEPENDPATH += ../generated_src/doxygen -INCLUDEPATH += ../qtools ../libmd5 . +INCLUDEPATH += ../qtools ../libmd5 . ../vhdlparser DESTDIR = ../bin TARGET = doxygen unix:TARGETDEPS = ../lib/libdoxygen.a ../lib/libdoxycfg.a diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 372bb93..bd94232 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -1773,14 +1773,35 @@ void HtmlDocVisitor::visitPost(DocHtmlBlockQuote *b) forceStartParagraph(b); } -void HtmlDocVisitor::visitPre(DocVhdlFlow *) +void HtmlDocVisitor::visitPre(DocVhdlFlow *vf) { if (m_hide) return; + if (VhdlDocGen::getFlowMember()) // use VHDL flow chart creator + { + forceEndParagraph(vf); + QCString fname=FlowChart::convertNameToFileName(); + m_t << "

"; + m_t << "flowchart: " ; // TODO: translate me + m_t << ""; + m_t << VhdlDocGen::getFlowMember()->name().data(); + m_t << ""; + if (vf->hasCaption()) + { + m_t << "
"; + } + } } -void HtmlDocVisitor::visitPost(DocVhdlFlow *) +void HtmlDocVisitor::visitPost(DocVhdlFlow *vf) { if (m_hide) return; + if (VhdlDocGen::getFlowMember()) // use VHDL flow chart creator + { + m_t << "

"; + forceStartParagraph(vf); + } } void HtmlDocVisitor::visitPre(DocParBlock *) diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in index e33b643..435a4c5 100644 --- a/src/libdoxygen.pro.in +++ b/src/libdoxygen.pro.in @@ -115,11 +115,12 @@ HEADERS = arguments.h \ version.h \ vhdlcode.h \ vhdldocgen.h \ - vhdlscanner.h \ xmldocvisitor.h \ xmlgen.h \ docbookvisitor.h \ docbookgen.h \ + vhdljjparser.h + SOURCES = arguments.cpp \ cite.cpp \ @@ -198,10 +199,10 @@ SOURCES = arguments.cpp \ xmlgen.cpp \ docbookvisitor.cpp \ docbookgen.cpp \ - ../generated_src/doxygen/ce_parse.cpp \ + vhdljjparser.cpp \ + ../generated_src/doxygen/ce_parse.cpp \ ../generated_src/doxygen/constexp.cpp \ ../generated_src/doxygen/vhdlcode.cpp \ - ../generated_src/doxygen/vhdlscanner.cpp \ ../generated_src/doxygen/code.cpp \ ../generated_src/doxygen/commentcnv.cpp \ ../generated_src/doxygen/commentscan.cpp \ @@ -215,13 +216,15 @@ SOURCES = arguments.cpp \ ../generated_src/doxygen/tclscanner.cpp \ ../generated_src/doxygen/fortrancode.cpp \ ../generated_src/doxygen/fortranscanner.cpp \ - ../generated_src/doxygen/version.cpp + ../generated_src/doxygen/version.cpp + + win32:TMAKE_CXXFLAGS += -DQT_NODLL win32-msvc:TMAKE_CXXFLAGS += -Zm200 win32-g++:TMAKE_CXXFLAGS += -fno-exceptions linux-g++:TMAKE_CXXFLAGS += -fno-exceptions -INCLUDEPATH += ../generated_src/doxygen ../src ../qtools ../libmd5 +INCLUDEPATH += ../generated_src/doxygen ../src ../qtools ../libmd5 ../vhdlparser INCLUDEPATH += %%SQLITE3_INC%% DEPENDPATH += ../generated_src/doxygen win32:INCLUDEPATH += . diff --git a/src/libdoxygen.t.in b/src/libdoxygen.t.in index 6edd8b7..314e94c 100644 --- a/src/libdoxygen.t.in +++ b/src/libdoxygen.t.in @@ -111,8 +111,7 @@ sub GenerateLex { $(YACC) -l -d -p ce_parsexpYY constexp.y -o \$(GENERATED_SRC)/ce_parse.c -rm $(GENERATED_SRC)/ce_parse.c -#$ GenerateDep("\$(GENERATED_SRC)/vhdlscanner.cpp","vhdlscanner.l"); -#$ GenerateLex("vhdlscanner",1); + TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@ diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 1069b3b..bfa975a 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -37,7 +37,7 @@ #include "parserintf.h" #include "marshal.h" #include "objcache.h" -#include "vhdlscanner.h" + #include "vhdldocgen.h" #include "arguments.h" #include "memberlist.h" diff --git a/src/outputlist.cpp b/src/outputlist.cpp index bfd0e40..754ee7c 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -169,6 +169,7 @@ void OutputList::writeDoc(DocRoot *root,Definition *ctx,MemberDef *md) // ctx?ctx->getDefFileExtension().data():""); if (og->isEnabled()) og->writeDoc(root,ctx,md); } + VhdlDocGen::setFlowMember(0); } bool OutputList::parseText(const QCString &textStr) diff --git a/src/vhdlcode.l b/src/vhdlcode.l index d8586ab..fa199d1 100644 --- a/src/vhdlcode.l +++ b/src/vhdlcode.l @@ -1576,6 +1576,8 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString // g_args.resize(0); g_parmName.resize(0); g_parmType.resize(0); + if(!g_lexInit) + VhdlDocGen::init(); if (memberDef) { setParameterList(memberDef); diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index 8eb4c5e..9c3dc07 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -15,7 +15,7 @@ /****************************************************************************** * Parser for VHDL subset * written by M. Kreis - * supports VHDL-87 + * supports VHDL-87/93/2008 * does not support VHDL-AMS ******************************************************************************/ @@ -28,6 +28,10 @@ #include #include +#ifdef DEBUGFLOW +#include +#endif + /* --------------------------------------------------------------- */ // local includes @@ -43,56 +47,518 @@ #include "searchindex.h" #include "outputlist.h" #include "parserintf.h" -#include "classlist.h" -#include "entry.h" + +#include "layout.h" #include "arguments.h" +#include "portable.h" +#include "memberlist.h" +#include "memberdef.h" #include "groupdef.h" +#include "classlist.h" #include "namespacedef.h" -/* --------------------------------------------------------------- */ +#include "filename.h" +#include "membergroup.h" -//#define theTranslator_vhdlType theTranslator->trVhdlType +#include "VhdlParser.h" + +#include "vhdlcode.h" #define theTranslator_vhdlType VhdlDocGen::trVhdlType static QDict g_vhdlKeyDict0(17,FALSE); static QDict g_vhdlKeyDict1(17,FALSE); static QDict g_vhdlKeyDict2(17,FALSE); +static QDict g_vhdlKeyDict3(17,FALSE); +static QDict g_xilinxUcfDict(17,FALSE); + +static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCString & fileName,QCString & brief); +static void writeUCFLink(const MemberDef* mdef,OutputList &ol); +static void assignBinding(VhdlConfNode* conf); +static void addInstance(ClassDef* entity, ClassDef* arch, ClassDef *inst,Entry *cur,ClassDef* archBind=NULL); + +//---------- create svg ------------------------------------------------------------- +static void createSVG(); +static void startDot(FTextStream &t); +static void startTable(FTextStream &t,const QCString &className); +static QList* getPorts(ClassDef *cd); +static void writeVhdlEntityToolTip(FTextStream& t,ClassDef *cd); +static void endDot(FTextStream &t); +static void writeTable(QList* port,FTextStream & t); +static void endTabel(FTextStream &t); +static void writeClassToDot(FTextStream &t,ClassDef* cd); +static void writeVhdlDotLink(FTextStream &t,const QCString &a,const QCString &b,const QCString &style); +//static void writeVhdlPortToolTip(FTextStream& t,QList* port,ClassDef *cd); +static const MemberDef *flowMember=0; + +void VhdlDocGen::setFlowMember( const MemberDef* mem) +{ + flowMember=mem; +} -// keywords -static const char* g_vhdlKeyWordMap0[] = -{ - "std","ieee","work","standard","textio","std_logic_1164", - "std_logic_arith","std_logic_misc","std_logic_signed","std_logic_textio", - "std_logic_unsigned","numeric_bit","numeric_std","math_complex","math_real", - "vital_primitives","vital_timing","severity_level","time","delay_length", - "natural", "positive", "bit_vector","file_open_kind","file_open_status", - "line","text","side", "width","event","rising_edge", "falling_edge", - "access","after","alias", "all","architecture","array", "assert","attribute", - "begin","block","body", "buffer", "bus", "case", "component", "configuration", - "constant", "disconnect", "downto", "else", "elsif", "end", "entity", "exit", - "file", "for", "function", "generate", "generic", "group", "guarded", "if", - "impure", "in", "inertial", "inout", "is","label", "library", "linkage", - "literal", "loop","map", "new", "next", "null", "of", "on", "open", "others", - "out", "package", "port", "postponed", "procedure", "process", "pure", - "range", "record", "register", "reject", "report", "return","select", - "severity", "shared", "signal", "subtype", "then", "to", "transport", - "type","unaffected", "units", "until", "use","variable", "wait", "when", - "while", "with","true","false","protected",0 -}; +const MemberDef* VhdlDocGen::getFlowMember() +{ + return flowMember; +} -// type -static const char* g_vhdlKeyWordMap1[] = + + +//-------------------------------------------------------------------------------------------------- +static void codify(FTextStream &t,const char *str) { - "natural","unsigned","signed","string","boolean", "bit","character", - "std_ulogic","std_ulogic_vector","sTd_logic","std_logic_vector","integer", - "real","zzz",0 -}; + if (str) + { + const char *p=str; + char c; + while (*p) + { + c=*p++; + switch(c) + { + case '<': t << "<"; + break; + case '>': t << ">"; + break; + case '&': t << "&"; + break; + case '\'': t << "'"; + break; + case '"': t << """; + break; + default: t << c; + break; + } + } + } +} -// logic -static const char* g_vhdlKeyWordMap2[] = +static void writeLink(const MemberDef* mdef,OutputList &ol) { - "abs","and","or","not","mod", "xor","rem","xnor","ror","rol","sla", - "sll",0 -}; + ol.writeObjectLink(mdef->getReference(), + mdef->getOutputFileBase(), + mdef->anchor(), + mdef->name()); +} + +static void startFonts(const QCString& q, const char *keyword,OutputList& ol) +{ + ol.startFontClass(keyword); + ol.docify(q.data()); + ol.endFontClass(); +} + +static QCString splitString(QCString& str,char c) +{ + QCString n=str; + int i=str.find(c); + if (i>0) + { + n=str.left(i); + str=str.remove(0,i+1); + } + return n; +} + +static int compareString(const QCString& s1,const QCString& s2) +{ + return qstricmp(s1.stripWhiteSpace(),s2.stripWhiteSpace()); +} + +static void createSVG() +{ + QCString ov =Config_getString("HTML_OUTPUT"); + QCString dir="-o \""+ov+"/vhdl_design_overview.html\""; + ov+="/vhdl_design.dot"; + + QRegExp ep("[\\s]"); + QCString vlargs="-Tsvg \""+ov+"\" "+dir ; + + if (portable_system("dot",vlargs)!=0) + { + err("could not create dot file"); + } +} + +// Creates a svg image. All in/out/inout ports are shown with brief description and direction. +// Brief descriptions for entities are shown too. +void VhdlDocGen::writeOverview() +{ + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd; + bool found=FALSE; + for ( ; (cd=cli.current()) ; ++cli ) + { + if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ENTITYCLASS ) + { + found=TRUE; + break; + } + } + + if (!found) return; + + QCString ov =Config_getString("HTML_OUTPUT"); + QCString fileName=ov+"/vhdl_design.dot"; + QFile f(fileName); + QStringList qli; + FTextStream t(&f); + + if (!f.open(IO_WriteOnly)) + { + fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data()); + return; + } + + startDot(t); + + for (cli.toFirst() ; (cd=cli.current()) ; ++cli ) + { + if ((VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS ) + { + continue; + } + + QList* port= getPorts(cd); + if (port==0) + { + continue; + } + if (port->count()==0) + { + delete port; + port=NULL; + continue; + } + + startTable(t,cd->name()); + writeClassToDot(t,cd); + writeTable(port,t); + endTabel(t); + + // writeVhdlPortToolTip(t,port,cd); + writeVhdlEntityToolTip(t,cd); + delete port; + + BaseClassList *bl=cd->baseClasses(); + if (bl) + { + BaseClassListIterator bcli(*bl); + BaseClassDef *bcd; + for ( ; (bcd=bcli.current()) ; ++bcli ) + { + ClassDef *bClass=bcd->classDef; + QCString dotn=cd->name()+":"; + dotn+=cd->name(); + QCString csc=bClass->name()+":"; + csc+=bClass->name(); + // fprintf(stderr,"\n <%s| %s>",dotn.data(),csc.data()); + writeVhdlDotLink(t,dotn,csc,0); + } + }// if bl + }// for + + endDot(t); + // writePortLinks(t); + f.close(); + createSVG(); +} + +//------------------------------------------------------------------------------------------------------------------------------------------------------ + +static void startDot(FTextStream &t) +{ + t << " digraph G { \n"; + t << "rankdir=LR \n"; + t << "concentrate=TRUE\n"; + t << "stylesheet=\"doxygen.css\"\n"; +} + +static void endDot(FTextStream &t) +{ + t <<" } \n"; +} + +static void startTable(FTextStream &t,const QCString &className) +{ + t << className <<" [ shape=none , fontname=\"arial\", fontcolor=\"blue\" , \n"; + t << "label=<\n"; +} + +static void writeVhdlDotLink(FTextStream &t, + const QCString &a,const QCString &b,const QCString &style) +{ + t << a << "->" << b; + if (!style.isEmpty()) + { + t << "[style=" << style << "];\n"; + } + t << "\n"; +} + + +static QCString formatBriefNote(const QCString &brief,ClassDef * cd) +{ + QRegExp ep("[\n]"); + QCString vForm; + QCString repl("
"); + QCString file=cd->getDefFileName(); + + int k=cd->briefLine(); + + QStringList qsl=QStringList::split(ep,brief); + for(uint j=0;j* port,ClassDef *cd) +{ +/* + uint len=port->count(); + MemberDef *md; + + for (uint j=0;jat(j); + QCString brief=md->briefDescriptionAsTooltip(); + if (brief.isEmpty()) continue; + + QCString node="node"; + node+=VhdlDocGen::getRecordNumber(); + t << node <<"[shape=box margin=0.1, label=<\n"; + t<<"
\n "; + t<<"
"; + t<
>];"; + QCString dotn=cd->name()+":"; + dotn+=md->name(); + // writeVhdlDotLink(t,dotn,node,"dotted"); + } +*/ +} +#endif + +static void writeVhdlEntityToolTip(FTextStream& t,ClassDef *cd) +{ + + QCString brief=cd->briefDescription(); + + if (brief.isEmpty()) return; + + brief=formatBriefNote(brief,cd); + + QCString node="node"; + node+=VhdlDocGen::getRecordNumber(); + t << node <<"[shape=none margin=0.1, label=<\n"; + t << "\n "; + t << "
"; + t << brief; + t << "
>];"; + QCString dotn=cd->name()+":"; + dotn+=cd->name(); + writeVhdlDotLink(t,dotn,node,"dotted"); +} + +static void writeColumn(FTextStream &t,MemberDef *md,bool start) +{ + QCString toolTip; + + static QRegExp reg("[%]"); + bool bidir=(md!=0 &&( qstricmp(md->typeString(),"inout")==0)); + + if (md) + { + toolTip=md->briefDescriptionAsTooltip(); + if (!toolTip.isEmpty()) + { + QCString largs = md->argsString(); + if (!largs.isEmpty()) + largs=largs.replace(reg," "); + toolTip+=" ["; + toolTip+=largs; + toolTip+="]"; + } + } + if (start) + { + t <<"\n"; + } + + t << "getOutputFileBase()<< Doxygen::htmlFileExtension; + t << "#" << md->anchor(); + t<<"\" "; + + t<<" TOOLTIP=\""; + if (!toolTip.isEmpty()) + { + codify(t,toolTip.data()); + } + else + { + QCString largs = md->argsString(); + if (!largs.isEmpty()) + { + largs=largs.replace(reg," "); + codify(t,largs.data()); + } + } + t << "\" "; + + t << " PORT=\""; + t << md->name(); + t << "\" "; + } + if (!toolTip.isEmpty()) + { + // if (!toolTip.isEmpty()) + + if (bidir) + t << "BGCOLOR=\"orange\">"; + else + t << "BGCOLOR=\"azure\">"; + } + else if (bidir) + { + t << "BGCOLOR=\"pink\">"; + } + else + { + t << "BGCOLOR=\"lightgrey\">"; + } + if (md) + { + t << md->name(); + } + else + { + t << " \n"; + } + t << "\n"; + + if (!start) + { + t << "\n"; + } +} + +static void endTabel(FTextStream &t) +{ + t << ">\n"; + t << "] \n"; +} + +static void writeClassToDot(FTextStream &t,ClassDef* cd) +{ + t << "name(); + t << "\" "; + t << "href=\""; + t << cd->getOutputFileBase() << Doxygen::htmlFileExtension; + t << "\" "; + t << ">"; + t << cd->name(); + t << " \n"; +} + +static QList* getPorts(ClassDef *cd) +{ + MemberDef* md; + QList *portList=new QList; + MemberList *ml=cd->getMemberList(MemberListType_variableMembers); + + if (ml==0) return NULL; + + MemberListIterator fmni(*ml); + + for (fmni.toFirst();(md=fmni.current());++fmni) + { + if (md->getMemberSpecifiers()==VhdlDocGen::PORT) + { + portList->append(md); + } + } + + return portList; +} + +//writeColumn(FTextStream &t,QCString name,bool start) + +static void writeTable(QList* port,FTextStream & t) +{ + QCString space(" "); + MemberDef *md; + uint len=port->count(); + + QList inPorts; + QList outPorts; + + uint j; + for (j=0;jat(j); + QCString qc=md->typeString(); + if(qc=="in") + { + inPorts.append(md); + } + else + { + outPorts.append(md); + } + } + + int inp = inPorts.count(); + int outp = outPorts.count(); + int maxLen; + + if (inp>=outp) + { + maxLen=inp; + } + else + { + maxLen=outp; + } + + int i; + for(i=0;iname().data()); - if (cd->getLanguage()==SrcLangExt_VHDL && - ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS || - (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS - ) - ) - { - QCString bName=cd->name(); - int i=bName.find("::"); - if (i>0) - { - QCString entityName=bName.left(i); - entityName.stripPrefix("_"); - ClassDef *classEntity=Doxygen::classSDict->find(entityName); - printf(" entity=%s p=%p\n",entityName.data(),classEntity); - // entity for architecutre ? - if (classEntity) - { - MemberList *ml = cd->getMemberList(MemberListType_pubAttribs); - //printf(" found %d members\n",ml->count()); - if (ml) - { - MemberListIterator mli(*ml); - MemberDef *md; - for (mli.toFirst();(md=mli.current());++mli) - { - int spec=md->getMemberSpecifiers(); - if (spec==VhdlDocGen::COMPONENT) - { - printf(" name %s\n",md->name().data()); - ClassDef *baseEntity=Doxygen::classSDict->find(md->name()); - if (baseEntity) - { - classEntity->insertBaseClass(baseEntity,baseEntity->name(),Public,Normal,0); - baseEntity->insertSubClass(classEntity,Public,Normal,0); - } - } - } - } - } - } - } - } -} // computeVhdlComponentRelations - - -/* - * returns a reference, if one class [package(body),entity or an architecture is found] - */ - -ClassDef* VhdlDocGen::findComponent(int type) -{ - ClassSDict::Iterator cli(*Doxygen::classSDict); - ClassDef *cd=0; - - for ( ; (cd=cli.current()) ; ++cli ) - { - if (cd->protection()==type) - return cd; - } - return cd; -} - -ClassDef* VhdlDocGen::getPackageName(const QCString & name) +ClassDef* VhdlDocGen::getPackageName(const QCString & name) { ClassDef* cd=0; QStringList ql=QStringList::split(".",name,FALSE); @@ -277,7 +735,7 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS) { Definition *d = cd->getOuterScope(); - // searching upper/lower case names + // searching upper/lower case names QCString tt=d->name(); ClassDef *ecd =getClass(tt); @@ -297,8 +755,8 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem //ClassDef *ecd = (ClassDef*)d; mdef=VhdlDocGen::findMemberDef(ecd,memName,MemberListType_variableMembers); if (mdef) return mdef; - mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType_pubMethods); - if (mdef) return mdef; + mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType_pubMethods); + if (mdef) return mdef; } //cd=getClass(getClassName(cd)); //if (!cd) return 0; @@ -376,8 +834,10 @@ MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberList for (fmni.toFirst();(md=fmni.current());++fmni) { - if (qstricmp(key.data(),md->name().data())==0) + if (qstricmp(key,md->name())==0) + { return md; + } } return 0; }//findMemberDef @@ -399,26 +859,26 @@ void VhdlDocGen::findAllPackages(const QCString& className,QDict& qdic MemberListIterator fmni(*mem); for (fmni.toFirst();(md=fmni.current());++fmni) { - if (VhdlDocGen::isPackage(md)) - { - QCString *temp1=new QCString(md->name().data()); - //*temp1=temp1->lower(); - QCString p(md->name().data()); - //p=p.lower(); - ClassDef* cd=VhdlDocGen::getPackageName(*temp1); - if (cd) - { - QCString *ss=qdict.find(*temp1); - if (ss==0) - { - qdict.insert(p,temp1); - QCString tmp=cd->className(); - VhdlDocGen::findAllPackages(tmp,qdict); - } - else delete temp1; - } - else delete temp1; - } + if (VhdlDocGen::isPackage(md)) + { + QCString *temp1=new QCString(md->name().data()); + //*temp1=temp1->lower(); + QCString p(md->name().data()); + //p=p.lower(); + ClassDef* cd=VhdlDocGen::getPackageName(*temp1); + if (cd) + { + QCString *ss=qdict.find(*temp1); + if (ss==0) + { + qdict.insert(p,temp1); + QCString tmp=cd->className(); + VhdlDocGen::findAllPackages(tmp,qdict); + } + else delete temp1; + } + else delete temp1; + } }//for }//if }//cdef @@ -430,19 +890,14 @@ void VhdlDocGen::findAllPackages(const QCString& className,QDict& qdic */ MemberDef* VhdlDocGen::findFunction(const QList &ql, - const QCString& funcname, - const QCString& package, bool type) + const QCString& funcname, + const QCString& package, bool /*type*/) { MemberDef* mdef=0; - int funcType; + //int funcType; ClassDef *cdef=getClass(package.data()); if (cdef==0) return 0; - if (type) - funcType=VhdlDocGen::PROCEDURE; - else - funcType=VhdlDocGen::FUNCTION; - MemberList *mem=cdef->getMemberList(MemberListType_pubMethods); if (mem) @@ -451,174 +906,47 @@ MemberDef* VhdlDocGen::findFunction(const QList &ql, for (fmni.toFirst();(mdef=fmni.current());++fmni) { QCString mname=mdef->name(); - if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (VhdlDocGen::compareString(funcname,mname)==0)) + if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (compareString(funcname,mname)==0)) { - ArgumentList *alp = mdef->argumentList(); + ArgumentList *alp = mdef->argumentList(); - // ArgumentList* arg2=mdef->getArgumentList(); - if (alp==0) break; + // ArgumentList* arg2=mdef->getArgumentList(); + if (alp==0) break; ArgumentListIterator ali(*alp); ArgumentListIterator ali1(ql); - if (ali.count() != ali1.count()) break; - - Argument *arg,*arg1; - int equ=0; - - for (;(arg=ali.current());++ali) - { - arg1=ali1.current(); ++ali1; - equ+=abs(VhdlDocGen::compareString(arg->type,arg1->type)); - - QCString s1=arg->type; - QCString s2=arg1->type; - VhdlDocGen::deleteAllChars(s1,' '); - VhdlDocGen::deleteAllChars(s2,' '); - equ+=abs(VhdlDocGen::compareString(s1,s2)); - s1=arg->attrib; - s2=arg1->attrib; - VhdlDocGen::deleteAllChars(s1,' '); - VhdlDocGen::deleteAllChars(s2,' '); - equ+=abs(VhdlDocGen::compareString(s1,s2)); - // printf("\n 1. type [%s] name [%s] attrib [%s]",arg->type,arg->name,arg->attrib); - // printf("\n 2. type [%s] name [%s] attrib [%s]",arg1->type,arg1->name,arg1->attrib); - } // for - if (equ==0) return mdef; + if (ali.count() != ali1.count()) break; + + Argument *arg,*arg1; + int equ=0; + + for (;(arg=ali.current());++ali) + { + arg1=ali1.current(); ++ali1; + equ+=abs(compareString(arg->type,arg1->type)); + + QCString s1=arg->type; + QCString s2=arg1->type; + VhdlDocGen::deleteAllChars(s1,' '); + VhdlDocGen::deleteAllChars(s2,' '); + equ+=abs(compareString(s1,s2)); + s1=arg->attrib; + s2=arg1->attrib; + VhdlDocGen::deleteAllChars(s1,' '); + VhdlDocGen::deleteAllChars(s2,' '); + equ+=abs(compareString(s1,s2)); + // printf("\n 1. type [%s] name [%s] attrib [%s]",arg->type,arg->name,arg->attrib); + // printf("\n 2. type [%s] name [%s] attrib [%s]",arg1->type,arg1->name,arg1->attrib); + } // for + if (equ==0) return mdef; }//if }//for }//if return mdef; } //findFunction -/*! - * returns the function with the matching argument list - * is called in vhdscan.l - */ - -Entry* VhdlDocGen::findFunction( Entry* root, Entry* func) -{ - //bool found=FALSE; - Entry *found=0; - uint64 functype=func->spec; - EntryListIterator eli(*root->children()); - Entry *rt; - for (;(rt=eli.current());++eli) - { - if (rt->spec==functype && VhdlDocGen::compareString(rt->name,func->name)==0 && rt!=func ) - { - if (VhdlDocGen::compareArgList(func->argList,rt->argList)) - { - found=rt; - return found; - } - }//if1 - if (!found) - { - found = VhdlDocGen::findFunction(rt,func); - } - } // for - return found; -}// findFunction - -/* - * compares two argument list of a fuction|procedure - */ - -bool VhdlDocGen::compareArgList(ArgumentList* l1,ArgumentList* l2) -{ - if (l1== 0 || l2== 0) return FALSE; - - ArgumentListIterator ali(*l1); - ArgumentListIterator ali1(*l2); - - if (ali.count() != ali1.count()) return FALSE; - - Argument *arg,*arg1; - int equ=0; - for (;(arg=ali.current());++ali) - { - bool found = FALSE; - for (ali1.toFirst();(arg1=ali1.current());++ali1) - { - equ=0; - QCString s1=arg->type; - QCString s2=arg1->type; - VhdlDocGen::deleteAllChars(s1,' '); // remove whitespaces - VhdlDocGen::deleteAllChars(s2,' '); - equ+=abs(VhdlDocGen::compareString(s1,s2)); - s1=arg->attrib; - s2=arg1->attrib; - VhdlDocGen::deleteAllChars(s1,' '); - VhdlDocGen::deleteAllChars(s2,' '); - equ+=abs(VhdlDocGen::compareString(s1,s2)); - if (equ==0) found=TRUE; - } - if (!found) return FALSE; - } - return TRUE; -}// compareArgList - -/* - * finds a matching prototype for a function description - */ - -Entry* VhdlDocGen::findFunction(Entry* func) -{ - ClassSDict::Iterator cli(*Doxygen::classSDict); - ClassDef *cd; - for (;(cd=cli.current());++cli) - { - MemberList *mf = cd->getMemberList (MemberListType_pubMethods); - if (mf) - { - MemberListIterator fmni(*mf); - MemberDef *mdd; - for (fmni.toFirst();(mdd=fmni.current());++fmni) - { - int type=mdd->getMemberSpecifiers(); - if (type==VhdlDocGen::PROCEDURE || type==VhdlDocGen::FUNCTION) - { - QCString nnk=mdd->name(); - QCString ff=func->name; - - if (qstricmp(mdd->name(),ff.data())==0) - { - ArgumentList *l=mdd->argumentList(); - if (VhdlDocGen::compareArgList(l,func->argList)) - { - mdd->setDocumentation(func->doc.data(),func->docFile.data(),func->docLine,TRUE); - mdd->setBriefDescription(func->brief,func->briefFile,func->briefLine); - addMemberToGroups(func,mdd);// do not forget grouping! - return func; - } - } - } - } - }// if - }//for - return 0; -}// findFunction -/* - * adds the documentation for a function|procedure - */ - -void VhdlDocGen::addFuncDoc(EntryNav* rootNav) -{ - Entry *root = rootNav->entry(); - if (root && root->spec==VhdlDocGen::DOCUMENT) - { - Entry *func=VhdlDocGen::findFunction(root); - if (!func && Config_getBool("WARNINGS")) - { - warn(root->fileName,root->docLine, - "warning: documentation for unknown function %s found.\n", - root->name.data() - ); - } - } -}// AddFuncDoc /*! * returns the class title+ref @@ -650,13 +978,7 @@ QCString VhdlDocGen::getClassName(const ClassDef* cd) temp.stripPrefix("_"); return temp; } - //if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS) - //{ - // QStringList qlist=QStringList::split("-",cd->className(),FALSE); - // if (qlist.count()>1) - // return (QCString)qlist[1]; - // return ""; - //} + return substitute(cd->className(),"::","."); } @@ -673,13 +995,15 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol) QCString type; if (ii==VhdlDocGen::ENTITY) - type=theTranslator_vhdlType(VhdlDocGen::ARCHITECTURE,TRUE); + type+=theTranslator_vhdlType(VhdlDocGen::ARCHITECTURE,TRUE); else if (ii==VhdlDocGen::ARCHITECTURE) - type=theTranslator_vhdlType(VhdlDocGen::ENTITY,TRUE); + type+=theTranslator_vhdlType(VhdlDocGen::ENTITY,TRUE); else if (ii==VhdlDocGen::PACKAGE_BODY) - type=theTranslator_vhdlType(VhdlDocGen::PACKAGE,TRUE); + type+=theTranslator_vhdlType(VhdlDocGen::PACKAGE,TRUE); else if (ii==VhdlDocGen::PACKAGE) - type=theTranslator_vhdlType(VhdlDocGen::PACKAGE_BODY,TRUE); + type+=theTranslator_vhdlType(VhdlDocGen::PACKAGE_BODY,TRUE); + else + type+=""; //type=type.lower(); type+=" >> "; @@ -712,14 +1036,14 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol) { QCString *temp=ql.at(i); QStringList qlist=QStringList::split("-",*temp,FALSE); - QCString s1=(QCString)qlist[0].utf8(); - QCString s2=(QCString)qlist[1].utf8(); + QCString s1=qlist[0].utf8(); + QCString s2=qlist[1].utf8(); s1.stripPrefix("_"); if (j==1) s1.resize(0); ClassDef*cc = getClass(temp->data()); if (cc) { - VhdlDocGen::writeVhdlLink(cc,ol,type,s2,s1); + VhdlDocGen::writeVhdlLink(cc,ol,type,s2,s1); } } } @@ -746,16 +1070,36 @@ void VhdlDocGen::findAllArchitectures(QList& qll,const ClassDef *cd) if (cd != citer && jj.contains('-')!=-1) { QStringList ql=QStringList::split("-",jj,FALSE); - QCString temp=(QCString)ql[1].utf8(); - if (qstricmp(cd->className().data(),temp.data())==0) + QCString temp=ql[1].utf8(); + if (qstricmp(cd->className(),temp)==0) { - QCString *cl=new QCString(jj.data()); - qll.insert(0,cl); + QCString *cl=new QCString(jj); + qll.insert(0,cl); } } }// for }//findAllArchitectures +ClassDef* VhdlDocGen::findArchitecture(const ClassDef *cd) +{ + ClassDef *citer; + QCString nn=cd->name(); + ClassSDict::Iterator cli(*Doxygen::classSDict); + + for ( ; (citer=cli.current()) ; ++cli ) + { + QCString jj=citer->name(); + QStringList ql=QStringList::split(":",jj,FALSE); + if (ql.count()>1) + { + if (ql[0].utf8()==nn ) + { + return citer; + } + } + } + return 0; +} /* * writes the link entity >> .... or architecture >> ... */ @@ -768,7 +1112,7 @@ void VhdlDocGen::writeVhdlLink(const ClassDef* ccd ,OutputList& ol,QCString& typ ol.docify(type.data()); ol.endBold(); nn.stripPrefix("_"); - ol.writeObjectLink(ccd->getReference(),ccd->getOutputFileBase(),ccd->anchor(),nn.data()); + ol.writeObjectLink(ccd->getReference(),ccd->getOutputFileBase(),0,nn.data()); if (!behav.isEmpty()) { @@ -777,205 +1121,24 @@ void VhdlDocGen::writeVhdlLink(const ClassDef* ccd ,OutputList& ol,QCString& typ ol.docify(behav.data()); ol.endBold(); } - /* - if (Config_getBool("SOURCE_BROWSER")) { // writes a source link for latex docu - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Latex); - ol.docify(" | "); - ol.startEmphasis(); - FileDef* fd=ccd->getFileDef(); - if (fd) - ol.writeObjectLink(0,fd->getSourceFileBase(),0,theTranslator->trGotoSourceCode().data()); - ol.endEmphasis(); - ol.popGeneratorState(); - } - */ - ol.lineBreak(); -} - -bool VhdlDocGen::compareString(const QCString& s1,const QCString& s2) -{ - QCString str1=s1.stripWhiteSpace(); - QCString str2=s2.stripWhiteSpace(); - - return qstricmp(str1.data(),str2.data()); -} - -bool VhdlDocGen::getSigTypeName(QList& ql, const char* str,QCString& buffer) -{ - //QCString temp(str); - //QStringList qlist=QStringList::split(" is ",temp,FALSE); - //if (qlist.count()!=2) return FALSE; - //temp.resize(0); - //temp+=(QCString)qlist[0]+":"+(QCString)qlist[1]; - //return VhdlDocGen::getSigName(ql,temp.data(),buffer); - return VhdlDocGen::getSigName(ql,str,buffer); -} - -/*! - * divides a port input in its name,direction and type - * @param ql stores the input name(s) - * @param str input string - * @param buffer stores the input direction - * @returns FALSE if it is a port - */ - -bool VhdlDocGen::getSigName(QList& ql, - const char* str,QCString& buffer) -{ - int j,ll,index; - const char *signal = "signal "; - QCString qmem; - QCString temp(str); - QCString st(str); - - //QRegExp semi(","); - //QRegExp r(":"); - - // colon position - j = temp.find(':'); - if (j < 0) return FALSE; // no input definition - st=st.left(j); // name only - index=st.find(signal,0,FALSE); - if (index > -1) // found "signal " - { - qmem=st.remove(index,strlen(signal)); // strip it - temp=qmem; - st=qmem; - } - else - { - qmem=temp; - } - - ll=st.find(','); - - if (ll>0) // multiple names - { - while (TRUE) - { - st=st.left(ll).stripWhiteSpace(); // one name - - QCString *sig =new QCString(st); - ql.insert(0,sig); - qmem=qmem.right(qmem.length()-ll-1); // strip from list - st=qmem; // remainder - ll=st.find(','); - if (ll<0) // last name - { - ll = st.find(':'); - st=st.left(ll).stripWhiteSpace(); - ql.insert(0,new QCString(st)); - break; - } - } - } - else // single name - { - st=st.stripWhiteSpace(); - ql.insert(0,new QCString(st)); - } - QCString *qdir=new QCString(str); - st=qdir->mid(j+1); // part after : - st=st.lower().stripWhiteSpace(); - *qdir=st; - ql.insert(0,qdir); - - if (st.stripPrefix("inout")) - { - buffer+="inout"; - return TRUE; - } - if (st.stripPrefix("INOUT")) - { - buffer+="inout"; - return TRUE; - } - - if (st.stripPrefix("out")) - { - buffer+="out"; - return TRUE; - } - if (st.stripPrefix("OUT")) - { - buffer+="out"; - return TRUE; - } - if (st.stripPrefix("in")) - { - buffer+="in"; - return TRUE; - } - if (st.stripPrefix("IN")) - { - buffer+="in"; - return TRUE; - } - return FALSE; + ol.lineBreak(); } -/*! - * divides a process string in its name and types - * @param text process text - * @param name points to the process name - * @param ql stores the process types - */ - -void VhdlDocGen::parseProcessProto(const char* text, - QCString& name,QStringList& ql) -{ - int index,end; - const char *s=":"; - QCString temp; - QCString s1(text); - index=s1.find(s,0,FALSE); - if (index >=0) - { - name=s1.left(index); - // strcpy(name,tt.data()); - } - - index=s1.find("(",0,FALSE); - end=s1.findRev(")",s1.length(),FALSE); - // end=s1.find(")",0,FALSE); - - if ((end-index)>1) - { - temp=s1.mid(index+1,(end-index-1)); - ql=QStringList::split(",",temp,FALSE); - } -}//parseProcessProto /*! * strips the "--" prefixes of vhdl comments */ void VhdlDocGen::prepareComment(QCString& qcs) { - QCString temp; const char* s="--!"; - //const char *start="--!{"; - //const char *end="--!}"; int index=0; -#if 0 - index=qcs.find(start,0,TRUE); - if (index>0) - temp=qcs.remove(index,strlen(start)); - qcs=temp; - - index=qcs.find(end,0,TRUE); - if (index>0) - temp=qcs.remove(index,strlen(end)); - qcs=temp; -#endif while (TRUE) { index=qcs.find(s,0,TRUE); if (index<0) break; - temp=qcs.remove(index,strlen(s)); - qcs=temp; + qcs=qcs.remove(index,qstrlen(s)); } qcs=qcs.stripWhiteSpace(); } @@ -990,7 +1153,7 @@ void VhdlDocGen::prepareComment(QCString& qcs) * @param doc ??? */ void VhdlDocGen::parseFuncProto(const char* text,QList& qlist, - QCString& name,QCString& ret,bool doc) + QCString& name,QCString& ret,bool doc) { (void)qlist; //unused int index,end; @@ -1046,7 +1209,7 @@ QCString VhdlDocGen::getIndexWord(const char* c,int index) { QStringList ql; QCString temp(c); - QRegExp reg("[\\s]"); + QRegExp reg("[\\s:|]"); ql=QStringList::split(reg,temp,FALSE); @@ -1095,16 +1258,16 @@ QCString VhdlDocGen::trTypeString(uint64 type) case VhdlDocGen::PROCESS: return "Process"; case VhdlDocGen::PORT: return "Port"; case VhdlDocGen::GENERIC: return "Generic"; - case VhdlDocGen::DOCUMENT: return "Doc"; case VhdlDocGen::UNITS: return "Units"; - //case VhdlDocGen::PORTMAP: return "Port Map"; + //case VhdlDocGen::PORTMAP: return "Port Map"; case VhdlDocGen::SHAREDVARIABLE: return "Shared Variable"; case VhdlDocGen::GROUP: return "Group"; case VhdlDocGen::VFILE: return "File"; - case VhdlDocGen::COMPONENT_INST: return "Component Instantiation"; + case VhdlDocGen::INSTANTIATION: return "Instantiation"; case VhdlDocGen::ALIAS: return "Alias"; case VhdlDocGen::CONFIG: return "Configuration"; case VhdlDocGen::MISCELLANEOUS: return "Miscellaneous"; + case VhdlDocGen::UCF_CONST: return "Constraints"; default: return ""; } } // convertType @@ -1171,7 +1334,7 @@ QCString VhdlDocGen::getProcessNumber() void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberDef* mdef) { - QRegExp reg("[\\/\\:\\<\\>\\:\\s\\,\\;\\'\\+\\-\\*\\|\\&\\=\\(\\)\"]"); + QRegExp reg("[\\[\\]\\.\\/\\:\\<\\>\\:\\s\\,\\;\\'\\+\\-\\*\\|\\&\\=\\(\\)\"]"); QCString qcs = s; qcs+=QCString(" ");// parsing the last sign QCString *ss; @@ -1192,35 +1355,48 @@ void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberD find=find.left(j); buf[0]=temp[j]; ss=VhdlDocGen::findKeyWord(find); - bool k=VhdlDocGen::isNumber(find); // is this a number + bool k=isNumber(find); // is this a number if (k) { ol.docify(" "); - VhdlDocGen::startFonts(find,"vhdldigit",ol); + startFonts(find,"vhdldigit",ol); ol.docify(" "); } else if (j != 0 && ss) { - VhdlDocGen::startFonts(find,ss->data(),ol); + startFonts(find,ss->data(),ol); } else { - if (j>0) - { - VhdlDocGen::writeStringLink(mdef,find,ol); - } + if (j>0) + { + VhdlDocGen::writeStringLink(mdef,find,ol); + } } - VhdlDocGen::startFonts(&buf[0],"vhdlchar",ol); + startFonts(&buf[0],"vhdlchar",ol); QCString st=temp.remove(0,j+1); find=st; - temp=st; + if (!find.isEmpty() && find.at(0)=='"') + { + int ii=find.find('"',2); + if (ii>1) + { + QCString com=find.left(ii+1); + startFonts(com,"keyword",ol); + temp=find.remove(0,ii+1); + } + } + else + { + temp=st; + } j = reg.match(temp.data(),0,&len); }//while }//if else { - VhdlDocGen::startFonts(find,"vhdlchar",ol); + startFonts(find,"vhdlchar",ol); } ol.endBold(); }// writeFormatString @@ -1228,10 +1404,9 @@ void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberD /*! * returns TRUE if this string is a number */ - bool VhdlDocGen::isNumber(const QCString& s) { - static QRegExp regg("[0-9][0-9eEfFbBcCdDaA_.#-]*"); + static QRegExp regg("[0-9][0-9eEfFbBcCdDaA_.#-+?xXzZ]*"); if (s.isEmpty()) return FALSE; int j,len; @@ -1239,32 +1414,17 @@ bool VhdlDocGen::isNumber(const QCString& s) if ((j==0) && (len==(int)s.length())) return TRUE; return FALSE; - #if 0 - int len=s.length(); - if (len==0) return FALSE; - for (int j=0;j0) b=qcs[j-1]; - if (c=='"' || c==',' || c==';' || c=='\''|| c=='(' || c==')' || c==':' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>')) + if (c=='"' || c==',' || c=='\''|| c=='(' || c==')' || c==':' || c=='[' || c==']' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>')) { if (temp.at(index-1) != ' ') { - temp+=" "; + temp+=" "; } temp+=c; temp+=" "; @@ -1295,14 +1455,14 @@ void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* md { if (b==':') // := operator { - temp.replace(index-1,1,"="); - temp+=" "; + temp.replace(index-1,1,"="); + temp+=" "; } else // = operator { - temp+=" "; - temp+=c; - temp+=" "; + temp+=" "; + temp+=c; + temp+=" "; } } else @@ -1345,17 +1505,17 @@ void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const arg->defval+=" "; if (str) { - VhdlDocGen::startFonts(arg->defval,str->data(),ol); + startFonts(arg->defval,str->data(),ol); } else { - VhdlDocGen::startFonts(arg->defval,"vhdlchar",ol); // write type (variable,constant etc.) + startFonts(arg->defval,"vhdlchar",ol); // write type (variable,constant etc.) } - VhdlDocGen::startFonts(nn,"vhdlchar",ol); // write name - if (qstricmp(arg->attrib.data(),arg->type.data()) != 0) + startFonts(nn,"vhdlchar",ol); // write name + if (qstricmp(arg->attrib,arg->type) != 0) { - VhdlDocGen::startFonts(arg->attrib.lower(),"stringliteral",ol); // write in|out + startFonts(arg->attrib.lower(),"stringliteral",ol); // write in|out } ol.docify(" "); VhdlDocGen::formatString(arg->type,ol,mdef); @@ -1394,32 +1554,43 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const for (;(arg=ali.current());++ali) { ol.startBold(); + QCString att=arg->defval; + bool bGen=att.stripPrefix("gen!"); + if (sem && len < 3) { ol.docify(" , "); } - QCString att=arg->defval; + + if (bGen) + { + VhdlDocGen::formatString(QCString("generic "),ol,mdef); + } if (!att.isEmpty()) { QCString *str=VhdlDocGen::findKeyWord(att); att+=" "; if (str) - VhdlDocGen::formatString(att,ol,mdef); + VhdlDocGen::formatString(att,ol,mdef); else - VhdlDocGen::startFonts(att,"vhdlchar",ol); + startFonts(att,"vhdlchar",ol); } QCString nn=arg->name; nn+=": "; - QCString ss=arg->type; //.lower(); - QCString w=ss;//.upper(); - VhdlDocGen::startFonts(nn,"vhdlchar",ol); - VhdlDocGen::startFonts("in ","stringliteral",ol); + QCString ss=arg->type.stripWhiteSpace(); //.lower(); + QCString w=ss.stripWhiteSpace();//.upper(); + startFonts(nn,"vhdlchar",ol); + startFonts("in ","stringliteral",ol); QCString *str=VhdlDocGen::findKeyWord(ss); if (str) VhdlDocGen::formatString(w,ol,mdef); else - VhdlDocGen::startFonts(w,"vhdlchar",ol); + startFonts(w,"vhdlchar",ol); + + if (arg->attrib) + startFonts(arg->attrib,"vhdlchar",ol); + sem=TRUE; ol.endBold(); @@ -1434,9 +1605,11 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const if (exp) { ol.insertMemberAlign(); + ol.startBold(); ol.docify("[ "); ol.docify(exp); ol.docify(" ]"); + ol.endBold(); } ol.endBold(); } @@ -1456,9 +1629,11 @@ void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList* al,const M for (;(arg=ali.current());++ali) { if (sem) + { ol.docify(" , "); + } QCString nn=arg->name; - // VhdlDocGen::startFonts(nn,"vhdlchar",ol); + // startFonts(nn,"vhdlchar",ol); VhdlDocGen::writeFormatString(nn,ol,mdef); sem=TRUE; } @@ -1490,17 +1665,19 @@ bool VhdlDocGen::writeFuncProcDocu( } ol.endMemberDocName(); ol.startParameterList(TRUE); + //ol.startParameterName(FALSE); Argument *arg; bool first=TRUE; for (;(arg=ali.current());++ali) { ol.startParameterType(first,""); - //if (first) ol.writeChar('('); + // if (first) ol.writeChar('('); QCString attl=arg->defval; bool bGen=attl.stripPrefix("gen!"); if (bGen) VhdlDocGen::writeFormatString(QCString("generic "),ol,md); + if (VhdlDocGen::isProcedure(md)) { startFonts(arg->defval,"keywordtype",ol); @@ -1526,7 +1703,8 @@ bool VhdlDocGen::writeFuncProcDocu( ol.enable(OutputGenerator::Man); if (!VhdlDocGen::isProcess(md)) { - VhdlDocGen::writeFormatString(arg->type,ol,md); + // startFonts(arg->type,"vhdlkeyword",ol); + VhdlDocGen::writeFormatString(arg->type,ol,md); } ol.disable(OutputGenerator::Man); ol.endEmphasis(); @@ -1538,9 +1716,9 @@ bool VhdlDocGen::writeFuncProcDocu( } else { + // ol.docify(" ) "); ol.endParameterName(TRUE,FALSE,TRUE); break; - //ol.docify(" ) "); } ol.endParameterName(FALSE,FALSE,FALSE); @@ -1552,38 +1730,8 @@ bool VhdlDocGen::writeFuncProcDocu( } // writeDocFunProc -/*! - * returns TRUE if this string is a function prototype or - * FALSE if this is a procedure - */ - -bool VhdlDocGen::isFunctionProto(QCString& ss) -{ - QCString name=ss; - QCString proc("procedure"); - QCString func("function"); - name=name.stripWhiteSpace(); - QStringList ql=QStringList::split(QRegExp("[\\s]"),name,FALSE); - int j=ql.count(); - if (j<2) return FALSE; - QCString tt=ql[0].utf8().lower(); - if (tt=="impure" || tt=="pure") tt=ql[1].utf8(); - if (VhdlDocGen::compareString(tt,proc)!=0 && VhdlDocGen::compareString(tt,func)!=0) - return FALSE; - - QCString temp=ql[j-1].utf8(); - temp=temp.stripWhiteSpace(); - if (qstricmp(temp.data(),"is")==0) - { - VhdlDocGen::deleteCharRev(name,'s'); - VhdlDocGen::deleteCharRev(name,'i'); - ss=name; - return TRUE; - } - return FALSE; -} QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool func) { @@ -1615,7 +1763,7 @@ QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool fun void VhdlDocGen::writeVhdlDeclarations(MemberList* ml, - OutputList& ol,GroupDef* gd,ClassDef* cd,FileDef *fd,NamespaceDef *nd) + OutputList& ol,GroupDef* gd,ClassDef* cd,FileDef *fd,NamespaceDef* nd) { static ClassDef *cdef; //static GroupDef* gdef; @@ -1626,12 +1774,12 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml, } /* - if (gd && gdef==gd) return; - if (gd && gdef!=gd) - { - gdef=gd; - } -*/ + if (gd && gdef==gd) return; + if (gd && gdef!=gd) + { + gdef=gd; + } + */ VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::LIBRARY,FALSE),0,FALSE,VhdlDocGen::LIBRARY); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::USE,FALSE),0,FALSE,VhdlDocGen::USE); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::FUNCTION,FALSE),0,FALSE,VhdlDocGen::FUNCTION); @@ -1650,12 +1798,14 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml, VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::SHAREDVARIABLE,FALSE),0,FALSE,VhdlDocGen::SHAREDVARIABLE); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::VFILE,FALSE),0,FALSE,VhdlDocGen::VFILE); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::GROUP,FALSE),0,FALSE,VhdlDocGen::GROUP); - VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::COMPONENT_INST,FALSE),0,FALSE,VhdlDocGen::COMPONENT_INST); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::INSTANTIATION,FALSE),0,FALSE,VhdlDocGen::INSTANTIATION); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::ALIAS,FALSE),0,FALSE,VhdlDocGen::ALIAS); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS),0,FALSE,VhdlDocGen::MISCELLANEOUS); // configurations must be added to global file definitions. VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::CONFIG,FALSE),0,FALSE,VhdlDocGen::CONFIG); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::UCF_CONST,FALSE),0,FALSE,VhdlDocGen::UCF_CONST); + } static void setGlobalType(MemberList *ml) @@ -1665,15 +1815,21 @@ static void setGlobalType(MemberList *ml) MemberListIterator mmli(*ml); for ( ; (mdd=mmli.current()); ++mmli ) { - if (qstricmp(mdd->argsString(),"configuration")==0) + QCString l=mdd->typeString(); + + if (qstrcmp(mdd->argsString(),"package")==0) + { + mdd->setMemberSpecifiers(VhdlDocGen::INSTANTIATION); + } + else if (qstrcmp(mdd->argsString(),"configuration")==0) { mdd->setMemberSpecifiers(VhdlDocGen::CONFIG); } - else if (qstricmp(mdd->typeString(),"library")==0) + else if (qstrcmp(mdd->typeString(),"library")==0) { mdd->setMemberSpecifiers(VhdlDocGen::LIBRARY); } - else if (qstricmp(mdd->typeString(),"package")==0) + else if (qstrcmp(mdd->typeString(),"use")==0) { mdd->setMemberSpecifiers(VhdlDocGen::USE); } @@ -1681,6 +1837,10 @@ static void setGlobalType(MemberList *ml) { mdd->setMemberSpecifiers(VhdlDocGen::MISCELLANEOUS); } + else if (qstricmp(mdd->typeString(),"ucf_const")==0) + { + mdd->setMemberSpecifiers(VhdlDocGen::UCF_CONST); + } } } @@ -1689,7 +1849,12 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit { ClassDef *cd=(ClassDef*)d; bool hasParams = FALSE; + if (cd==0) return hasParams; + + QCString ttype=mdef->typeString(); + QCString largs=mdef->argsString(); + if ((VhdlDocGen::isVhdlFunction(mdef) || VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isProcess(mdef))) { QCString nn=mdef->typeString(); @@ -1699,6 +1864,7 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit if (memdef && memdef->isLinkable()) { ol.docify(" "); + ol.startBold(); writeLink(memdef,ol); ol.endBold(); @@ -1707,7 +1873,6 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit else { ol.docify(" "); - QCString ttype=mdef->typeString(); VhdlDocGen::formatString(ttype,ol,mdef); ol.docify(" "); } @@ -1715,27 +1880,54 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit hasParams = VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList()); } - if (VhdlDocGen::isMisc(mdef)) - { - writeLink(mdef,ol); - return hasParams; - } + if (mdef->isVariable()) { - writeLink(mdef,ol); - ol.docify(" "); - QCString ttype=mdef->typeString(); - VhdlDocGen::formatString(ttype,ol,mdef); - ol.docify(" "); - if (VhdlDocGen::isPort(mdef)) + if (VhdlDocGen::isConstraint(mdef)) { - QCString largs=mdef->argsString(); - VhdlDocGen::formatString(largs,ol,mdef); + writeLink(mdef,ol); ol.docify(" "); - } - } - return hasParams; -} + + largs=largs.replace(QRegExp("#")," "); + VhdlDocGen::formatString(largs,ol,mdef); + return hasParams; + } + else + { + writeLink(mdef,ol); + if (VhdlDocGen::isLibrary(mdef) || VhdlDocGen::isPackage(mdef)) + { + return hasParams; + } + ol.docify(" "); + } + + // QCString largs=mdef->argsString(); + + bool c=largs=="context"; + bool brec=largs.stripPrefix("record") ; + + if (!brec && !c) + VhdlDocGen::formatString(ttype,ol,mdef); + + if (c || brec || largs.stripPrefix("units")) + { + if (c) + largs=ttype; + VhdlDocGen::writeRecUnitDocu(mdef,ol,largs); + return hasParams; + } + + ol.docify(" "); + if (VhdlDocGen::isPort(mdef) || VhdlDocGen::isGeneric(mdef)) + { + // QCString largs=mdef->argsString(); + VhdlDocGen::formatString(largs,ol,mdef); + ol.docify(" "); + } + } + return hasParams; +} /* writes a vhdl type declaration */ @@ -1743,6 +1935,8 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, bool /*inGroup*/) { + static QRegExp reg("[%]"); + Definition *d=0; /* some vhdl files contain only a configuration description @@ -1758,9 +1952,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, */ ASSERT(cd!=0 || nd!=0 || fd!=0 || gd!=0 || - mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY || - mdef->getMemberSpecifiers()==VhdlDocGen::USE - ); // member should belong to something + mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY || + mdef->getMemberSpecifiers()==VhdlDocGen::USE + ); // member should belong to something if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; @@ -1771,27 +1965,27 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { Doxygen::tagFile << " " << endl; Doxygen::tagFile << " " << convertToXML(mdef->typeString()) << "" << endl; @@ -1820,7 +2014,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, } QCString cname = d->name(); - QCString cfname = mdef->getOutputFileBase(); + QCString cfname = d->getOutputFileBase(); //HtmlHelp *htmlHelp=0; // bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); @@ -1832,10 +2026,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, // start a new member declaration bool isAnonymous = annoClassDef; // || m_impl->annMemb || m_impl->annEnumType; ///printf("startMemberItem for %s\n",name().data()); - int mm=mdef->getMemberSpecifiers(); if (mm==VhdlDocGen::MISCELLANEOUS) - isAnonymous=TRUE; + isAnonymous=TRUE; ol.startMemberItem( mdef->anchor(), isAnonymous ); //? 1 : m_impl->tArgList ? 3 : 0); @@ -1859,21 +2052,21 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, /*VHDL CHANGE */ bool bRec,bUnit; QCString ltype(mdef->typeString()); + // ltype=ltype.replace(reg," "); QCString largs(mdef->argsString()); + // largs=largs.replace(reg," "); mdef->setType(ltype.data()); mdef->setArgsString(largs.data()); - //printf(":: ltype=%s largs=%s name=%s mm=%d\n", - // ltype.data(),largs.data(),mdef->name().data(),mm); - + //ClassDef * plo=mdef->getClassDef(); ClassDef *kl=0; - //FileDef *fdd=0; ArgumentList *alp = mdef->argumentList(); QCString nn; + //VhdlDocGen::adjustRecordMember(mdef); if (gd) gd=0; switch (mm) { case VhdlDocGen::MISCELLANEOUS: - VhdlDocGen::writeCodeFragment(mdef,ol); + VhdlDocGen::writeSource(mdef,ol,nn); break; case VhdlDocGen::PROCEDURE: case VhdlDocGen::FUNCTION: @@ -1885,10 +2078,10 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, writeLink(mdef,ol); if (alp!=0 && mm==VhdlDocGen::FUNCTION) - VhdlDocGen::writeFunctionProto(ol,alp,mdef); + VhdlDocGen::writeFunctionProto(ol,alp,mdef); if (alp!=0 && mm==VhdlDocGen::PROCEDURE) - VhdlDocGen::writeProcedureProto(ol,alp,mdef); + VhdlDocGen::writeProcedureProto(ol,alp,mdef); break; case VhdlDocGen::USE: @@ -1912,7 +2105,6 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, name+=" <"+mdef->name()+">"; ol.startEmphasis(); ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),0,name.data()); - ol.endEmphasis(); ol.popGeneratorState(); } break; @@ -1923,7 +2115,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, { VhdlDocGen::writeRecorUnit(ltype,ol,mdef); } + break; + case VhdlDocGen::GENERIC: case VhdlDocGen::PORT: case VhdlDocGen::ALIAS: @@ -1933,18 +2127,18 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, ol.insertMemberAlign(); if (mm==VhdlDocGen::GENERIC) { - ol.startBold(); - VhdlDocGen::formatString(largs,ol,mdef); - ol.endBold(); + ol.startBold(); + VhdlDocGen::formatString(largs,ol,mdef); + ol.endBold(); } else { - ol.docify(" "); - ol.startBold(); - VhdlDocGen::formatString(ltype,ol,mdef); - ol.endBold(); - ol.docify(" "); - VhdlDocGen::formatString(largs,ol,mdef); + ol.docify(" "); + ol.startBold(); + VhdlDocGen::formatString(ltype,ol,mdef); + ol.endBold(); + ol.docify(" "); + VhdlDocGen::formatString(largs,ol,mdef); } break; case VhdlDocGen::PROCESS: @@ -1955,7 +2149,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, case VhdlDocGen::PACKAGE: case VhdlDocGen::ENTITY: case VhdlDocGen::COMPONENT: - case VhdlDocGen::COMPONENT_INST: + case VhdlDocGen::INSTANTIATION: case VhdlDocGen::CONFIG: if (VhdlDocGen::isCompInst(mdef) ) { @@ -1971,16 +2165,15 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, } largs.prepend("::"); - largs.prepend(mdef->name()); + largs.prepend(mdef->name().data()); ol.writeObjectLink(mdef->getReference(), cfname, mdef->anchor(), mdef->name()); } else - { writeLink(mdef,ol); - } + ol.insertMemberAlign(); ol.docify(" "); @@ -1994,19 +2187,20 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, { if (VhdlDocGen::isConfig(mdef) || VhdlDocGen::isCompInst(mdef)) { + nn=mdef->getOutputFileBase(); nn=ltype; } else { - nn=mdef->name(); + nn=mdef->name(); } - kl=getClass(nn.data()); - if (kl) - { - nn=kl->getOutputFileBase(); - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Html); - ol.startEmphasis(); + kl=getClass(nn.data()); + if (kl) + { + nn=kl->getOutputFileBase(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.startEmphasis(); QCString name("name()+"> "; } - ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),0,name.data()); - ol.endEmphasis(); - ol.popGeneratorState(); - } + ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),0,name.data()); + ol.endEmphasis(); + ol.popGeneratorState(); + } + } + break; + case VhdlDocGen::UCF_CONST: + mm=mdef->name().findRev('_'); + if (mm>0) + { + mdef->setName(mdef->name().left(mm)); } + writeUCFLink(mdef,ol); break; case VhdlDocGen::SIGNAL: case VhdlDocGen::ATTRIBUTE: @@ -2042,16 +2244,21 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, if (bUnit) ol.docify("units: "); writeLink(mdef,ol); ol.insertMemberAlign(); - if (!bRec) VhdlDocGen::formatString(ltype,ol,mdef); + if (!bRec && !bUnit) VhdlDocGen::formatString(ltype,ol,mdef); if (bUnit) ol.lineBreak(); - if (bRec || bUnit) writeRecorUnit(largs,ol,mdef); + if (bRec || bUnit) + { + writeRecorUnit(largs,ol,mdef); + mdef->setType(""); + } ol.endBold(); break; + default: break; } bool htmlOn = ol.isEnabled(OutputGenerator::Html); - if (htmlOn && !ltype.isEmpty()) + if (htmlOn && /*Config_getBool("HTML_ALIGN_MEMBERS") &&*/ !ltype.isEmpty()) { ol.disable(OutputGenerator::Html); } @@ -2074,8 +2281,8 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, { ol.startMemberDescription(mdef->anchor()); ol.generateDoc(mdef->briefFile(),mdef->briefLine(), - mdef->getOuterScope()?mdef->getOuterScope():d, - mdef,mdef->briefDescription(),TRUE,FALSE,0,TRUE,FALSE); + mdef->getOuterScope()?mdef->getOuterScope():d, + mdef,mdef->briefDescription(),TRUE,FALSE,0,TRUE,FALSE); if (detailsVisible) { ol.pushGeneratorState(); @@ -2084,11 +2291,11 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, ol.docify(" "); if (mdef->getGroupDef()!=0 && gd==0) // forward link to the group { - ol.startTextLink(mdef->getOutputFileBase(),mdef->anchor()); + ol.startTextLink(mdef->getOutputFileBase(),mdef->anchor()); } else // local link { - ol.startTextLink(0,mdef->anchor()); + ol.startTextLink(0,mdef->anchor()); } ol.endTextLink(); //ol.startEmphasis(); @@ -2101,25 +2308,6 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, }// end writeVhdlDeclaration -void VhdlDocGen::writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef) -{ - QStringList ql=QStringList::split("#",largs,FALSE); - uint len=ql.count(); - for(uint i=0;i1) ol.lineBreak(); - } -} - -void VhdlDocGen::writeLink(const MemberDef* mdef,OutputList &ol) -{ - ol.writeObjectLink(mdef->getReference(), - mdef->getOutputFileBase(), - mdef->anchor(), - mdef->name()); -} void VhdlDocGen::writePlainVHDLDeclarations( MemberList* mlist,OutputList &ol, @@ -2128,8 +2316,6 @@ void VhdlDocGen::writePlainVHDLDeclarations( SDict pack(1009); - ol.pushGeneratorState(); - bool first=TRUE; MemberDef *md; MemberListIterator mli(*mlist); @@ -2138,16 +2324,16 @@ void VhdlDocGen::writePlainVHDLDeclarations( int mems=md->getMemberSpecifiers(); if (md->isBriefSectionVisible() && (mems==specifier) && (mems!=VhdlDocGen::LIBRARY) ) { - if (first) {ol.startMemberList();first=FALSE;} + if (first) { ol.startMemberList();first=FALSE; } VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,FALSE); } //if else if (md->isBriefSectionVisible() && (mems==specifier)) { if (!pack.find(md->name().data())) { - if (first) ol.startMemberList(),first=FALSE; - VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,FALSE); - pack.append(md->name().data(),new QCString(md->name().data())); + if (first) ol.startMemberList(),first=FALSE; + VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,FALSE); + pack.append(md->name().data(),new QCString(md->name().data())); } } //if } //for @@ -2155,7 +2341,7 @@ void VhdlDocGen::writePlainVHDLDeclarations( pack.clear(); }//plainDeclaration -bool VhdlDocGen::membersHaveSpecificType(MemberList *ml,uint64 type) +static bool membersHaveSpecificType(MemberList *ml,uint64 type) { if (ml==0) return FALSE; MemberDef *mdd=0; @@ -2239,23 +2425,9 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol, } }// writeVHDLDeclarations -/* strips the prefix for record and unit members*/ -void VhdlDocGen::adjustRecordMember(MemberDef *mdef) -{ //,OutputList & ol) { - QRegExp regg("[_a-zA-Z]"); - QCString nn=mdef->name(); - int j=nn.find(regg,0); - if (j>0) - { - nn=nn.mid(j,nn.length()); - mdef->setName(nn.data()); - } -}//adjustRecordMember -/* strips the prefix for package and package body */ - -bool VhdlDocGen::writeClassType( ClassDef * cd, - OutputList &ol ,QCString & cname) +bool VhdlDocGen::writeClassType( ClassDef *& cd, + OutputList &ol ,QCString & cname) { int id=cd->protection(); QCString qcs = VhdlDocGen::trTypeString(id+2); @@ -2264,6 +2436,7 @@ bool VhdlDocGen::writeClassType( ClassDef * cd, ol.writeString(qcs.data()); ol.writeString(" "); ol.endBold(); + //ol.insertMemberAlign(); return FALSE; }// writeClassLink @@ -2317,15 +2490,13 @@ QCString VhdlDocGen::trVhdlType(uint64 type,bool sing) if (sing) return "Port"; else return "Ports"; case VhdlDocGen::USE: - if (sing) return "Package"; - else return "Packages"; + if (sing) return "use clause"; + else return "Use Clauses"; case VhdlDocGen::GENERIC: if (sing) return "Generic"; else return "Generics"; case VhdlDocGen::PACKAGE_BODY: return "Package Body"; - case VhdlDocGen::DOCUMENT: - return "Doc"; case VhdlDocGen::UNITS: return "Units"; case VhdlDocGen::SHAREDVARIABLE: @@ -2337,17 +2508,19 @@ QCString VhdlDocGen::trVhdlType(uint64 type,bool sing) case VhdlDocGen::GROUP: if (sing) return "Group"; return "Groups"; - case VhdlDocGen::COMPONENT_INST: - if (sing) return "Component Instantiation"; - else return "Component Instantiations"; + case VhdlDocGen::INSTANTIATION: + if (sing) return "Instantiation"; + else return "Instantiations"; case VhdlDocGen::ALIAS: if (sing) return "Alias"; return "Aliases"; case VhdlDocGen::CONFIG: if (sing) return "Configuration"; return "Configurations"; - case VhdlDocGen::MISCELLANEOUS: + case VhdlDocGen::MISCELLANEOUS: return "Miscellaneous"; + case VhdlDocGen::UCF_CONST: + return "Constraints"; default: return "Class"; } @@ -2371,7 +2544,7 @@ QCString VhdlDocGen::trDesignUnitMembers() QCString VhdlDocGen::trDesignUnitListDescription() { return "Here is a list of all design unit members with links to " - "the Entities and Packages they belong to:"; + "the Entities they belong to:"; } QCString VhdlDocGen::trDesignUnitIndex() @@ -2390,127 +2563,1908 @@ QCString VhdlDocGen::trFunctionAndProc() } +/*! writes a link if the string is linkable else a formatted string */ -/*! adds documentation to a function/procedure */ -bool VhdlDocGen::writeDoc(EntryNav* rootNav) +void VhdlDocGen::writeStringLink(const MemberDef *mdef,QCString mem, OutputList& ol) { - Entry *e=rootNav->entry(); - //if (e->section==Entry::Entry::OVERLOADDOC_SEC) - if (qstricmp(e->type.data(),"function")==0) + if (mdef) { - VhdlDocGen::addFuncDoc(rootNav); + ClassDef *cd=mdef->getClassDef(); + if (cd) + { + QCString n=cd->name(); + MemberDef* memdef=VhdlDocGen::findMember(n,mem); + if (memdef && memdef->isLinkable()) + { + ol.startBold(); + writeLink(memdef,ol); + ol.endBold(); + ol.docify(" "); + return; + } + } } - - return FALSE; -}// writeDoc + startFonts(mem,"vhdlchar",ol); +}// found component -/* do not insert the same component twice */ -bool VhdlDocGen::foundInsertedComponent(const QCString & name,Entry* root) +void VhdlDocGen::writeSource(MemberDef *mdef,OutputList& ol,QCString & cname) { - QListIterator bii(*root->extends); - BaseInfo *bi=0; - for (bii.toFirst();(bi=bii.current());++bii) + ParserInterface *pIntf = Doxygen::parserManager->getParser(".vhd"); + pIntf->resetCodeParserState(); + + QCString codeFragment=mdef->documentation(); + + if (cname.isEmpty()) { - if (bi->name==name) + writeLink(mdef,ol); + int fi=0; + int j=0; + do + { + fi=codeFragment.find("\n",++fi); + } while(fi>=0 && j++ <3); + + // show only the first four lines + if (j==4) { - return TRUE; // + codeFragment=codeFragment.left(fi); + codeFragment.append("\n .... "); } } - return FALSE; -}// found component + codeFragment.prepend("\n"); + ol.pushGeneratorState(); + ol.startCodeFragment(); + pIntf->parseCode(ol, // codeOutIntf + 0, // scope + codeFragment, // input + SrcLangExt_VHDL, // lang + FALSE, // isExample + 0, // exampleName + mdef->getFileDef(), // fileDef + mdef->getStartBodyLine(), // startLine + mdef->getEndBodyLine(), // endLine + TRUE, // inlineFragment + mdef, // memberDef + TRUE // show line numbers + ); -/*! writes a link if the string is linkable else a formatted string */ + ol.endCodeFragment(); + ol.popGeneratorState(); -void VhdlDocGen::writeStringLink(const MemberDef *mdef,QCString mem, OutputList& ol) + if (cname.isEmpty()) return; + + mdef->writeSourceDef(ol,cname); + mdef->writeSourceRefs(ol,cname); + mdef->writeSourceReffedBy(ol,cname); +} + + + +QCString VhdlDocGen::convertFileNameToClassName(QCString name) { - if (mdef) + + QCString n=name; + n=n.remove(0,6); + + int i=0; + + while((i=n.find("__"))>0) { - ClassDef *cd=mdef->getClassDef(); - if (cd) + n=n.remove(i,1); + } + + while((i=n.find("_1"))>0) + { + n=n.replace(i,2,":"); + } + + return n; +} + +void VhdlDocGen::parseUCF(const char* input, Entry* entity,QCString fileName,bool altera) +{ + QCString ucFile(input); + int lineNo=0; + QCString newLine="\n"; + QCString comment("#!"); + QCString brief; + + while (!ucFile.isEmpty()) + { + int i=ucFile.find("\n"); + if (i<0) break; + lineNo++; + QCString temp=ucFile.left(i); + temp=temp.stripWhiteSpace(); + bool bb=temp.stripPrefix("//"); + + if (!temp.isEmpty()) { - QCString n=cd->name(); - MemberDef* memdef=VhdlDocGen::findMember(n,mem); - if (memdef && memdef->isLinkable()) + if (temp.stripPrefix(comment) ) { - ol.startBold(); - writeLink(memdef,ol); - ol.endBold(); - ol.docify(" "); - return; + brief+=temp; + brief.append("\\n"); } - } + else if (!temp.stripPrefix("#") && !bb) + { + if (altera) + { + int i=temp.find("-name"); + if (i>0) + { + temp=temp.remove(0,i+5); + } + + temp.stripPrefix("set_location_assignment"); + + initUCF(entity,0,temp,lineNo,fileName,brief); + } + else + { + QRegExp ee("[\\s=]"); + int i=temp.find(ee); + QCString ff=temp.left(i); + temp.stripPrefix(ff.data()); + ff.append("#"); + if (!temp.isEmpty()) + { + initUCF(entity,ff.data(),temp,lineNo,fileName,brief); + } + } + } + }//temp + + ucFile=ucFile.remove(0,i+1); + }// while +} + +static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCString & fileName,QCString & brief) +{ + if (qcs.isEmpty())return; + QRegExp sp("\\s"); + QRegExp reg("[\\s=]"); + QCString n; + // bool bo=(qstricmp(type,qcs.data())==0); + + VhdlDocGen::deleteAllChars(qcs,';'); + qcs=qcs.stripWhiteSpace(); + + int i= qcs.find(reg); + if (i<0) return; + if (i==0) + { + n=type; + VhdlDocGen::deleteAllChars(n,'#'); + type=""; } - VhdlDocGen::startFonts(mem,"vhdlchar",ol); -}// found component + else + { + n=qcs.left(i); + } + qcs=qcs.remove(0,i+1); + // qcs.prepend("|"); + + qcs.stripPrefix("="); + + Entry* current=new Entry; + current->spec=VhdlDocGen::UCF_CONST; + current->section=Entry::VARIABLE_SEC; + current->bodyLine=line; + current->fileName=fileName; + current->type="ucf_const"; + current->args+=qcs; + current->lang= SrcLangExt_VHDL ; + + // adding dummy name for constraints like VOLTAGE=5,TEMPERATURE=20 C + if (n.isEmpty()) + { + n="dummy"; + n+=VhdlDocGen::getRecordNumber(); + } + + current->name= n+"_"; + current->name.append(VhdlDocGen::getRecordNumber().data()); + + if (!brief.isEmpty()) + { + current->brief=brief; + current->briefLine=line; + current->briefFile=fileName; + brief.resize(0); + } + + root->addSubEntry(current); +} -void VhdlDocGen::writeCodeFragment( MemberDef *mdef,OutputList& ol) + +static void writeUCFLink(const MemberDef* mdef,OutputList &ol) { - // Definition d=(Definition)mdef; - // QCString fdd=mdef->getDefFileExtension(); - // QCString scope=mdef->getScopeString(); - QCString codeFragment=mdef->documentation(); - //FileDef *fd=mdef->getFileDef(); - //int start=mdef->getStartBodyLine(); - //int end=mdef->getEndBodyLine(); - QStringList qsl=QStringList::split("\n",codeFragment); + QCString largs(mdef->argsString()); + QCString n= splitString(largs, '#'); + // VhdlDocGen::adjustRecordMember(mdef); + bool equ=(n.length()==largs.length()); + + if (!equ) + { + ol.writeString(n.data()); + ol.docify(" "); + ol.insertMemberAlign(); + } - writeLink(mdef,ol); + if (mdef->name().contains("dummy")==0) + { + writeLink(mdef,ol); + } + if (equ) + { + ol.insertMemberAlign(); + } ol.docify(" "); - ol.insertMemberAlign(); - int len = qsl.count(); - int j; - for (j=0;jgetFirst(); + //LayoutNavEntry *cc = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files); + uint count=Doxygen::inputNameList->count(); + LayoutNavEntry *kk = lne->parent();// find(LayoutNavEntry::Files); + // LayoutNavEntry *kks = kk->parent();// find(LayoutNavEntry::Files); + QCString file; + QCString co("Constraints"); + + if (Config_getBool("HAVE_DOT") && Config_getEnum("DOT_IMAGE_FORMAT")=="svg") { - QCString q=qsl[j].utf8(); - VhdlDocGen::writeFormatString(q,ol,mdef); - ol.lineBreak(); - if (j==2) // only the first three lines are shown + QCString ov = theTranslator->trDesignOverview(); + QCString ofile("vhdl_design_overview"); + LayoutNavEntry *oo=new LayoutNavEntry( lne,LayoutNavEntry::MainPage,TRUE,ofile,ov,""); + kk->addChild(oo); + } + + uint i=0; + while (iat(i); + if (fd->name().contains(".ucf") || fd->name().contains(".qsf")) { - q="..."; - VhdlDocGen::writeFormatString(q,ol,mdef); + file = convertNameToFile(fd->name().data(),FALSE,FALSE); + LayoutNavEntry *ucf=new LayoutNavEntry(lne,LayoutNavEntry::MainPage,TRUE,file,co,""); + kk->addChild(ucf); break; } + i++; } + return FALSE; } -void VhdlDocGen::writeSource(MemberDef *mdef,OutputList& ol,QCString & cname) + +// for cell_inst : [entity] work.proto [ (label|expr) ] +QCString VhdlDocGen::parseForConfig(QCString & entity,QCString & arch) { - // Definition d=(Definition)mdef; - QCString fdd=mdef->getDefFileExtension(); - QCString scope=mdef->getScopeString(); - QCString codeFragment=mdef->documentation(); - FileDef *fd=mdef->getFileDef(); - int start=mdef->getStartBodyLine(); - int end=mdef->getEndBodyLine(); - QStringList qsl=QStringList::split("\n",codeFragment); + int index; + QCString label; + QCString ent("entity"); + if (!entity.contains(":")) return ""; + + QRegExp exp("[:()\\s]"); + QStringList ql=QStringList::split(exp,entity,FALSE); + //int ii=ql.findIndex(ent); + assert(ql.count()>=2); + label = ql[0].utf8(); + entity = ql[1].utf8(); + if ((index=entity.findRev("."))>=0) + { + entity.remove(0,index+1); + } - ParserInterface *pIntf = Doxygen::parserManager->getParser(fdd.data()); - pIntf->resetCodeParserState(); + if (ql.count()==3) + { + arch= ql[2].utf8(); + ql=QStringList::split(exp,arch,FALSE); + if (ql.count()>1) // expression + { + arch=""; + } + } + return label; // label +} - ol.startParagraph(); - ol.startCodeFragment(); - pIntf->parseCode(ol, // codeOutIntf - scope, // scope - codeFragment, // input - SrcLangExt_VHDL, // lang - FALSE, // isExample - 0, // exampleName - fd, // fileDef - start, // startLine - end, // endLine - TRUE, // inlineFragment - mdef, // memberDef - FALSE // show line numbers - ); - ol.endCodeFragment(); - ol.endParagraph(); +// use (configuration|entity|open) work.test [(cellfor)]; - mdef->writeSourceDef(ol,cname); - mdef->writeSourceRefs(ol,cname); - mdef->writeSourceReffedBy(ol,cname); +QCString VhdlDocGen::parseForBinding(QCString & entity,QCString & arch) +{ + int index; + QRegExp exp("[()\\s]"); + + QCString label=""; + QStringList ql=QStringList::split(exp,entity,FALSE); + + if (ql.contains("open")) + { + return "open"; + } + + label=ql[0].utf8(); + + entity = ql[1].utf8(); + if ((index=entity.findRev("."))>=0) + { + entity.remove(0,index+1); + } + + if (ql.count()==3) + { + arch=ql[2].utf8(); + } + return label; } + + + // find class with upper/lower letters + ClassDef* VhdlDocGen::findVhdlClass(const char *className ) + { + + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd; + for (;(cd=cli.current());++cli) + { + if (qstricmp(className,cd->name().data())==0) + { + return cd; + } + } + return 0; + } + + +//@param arch bit0:flipflop +//@param binding e.g entity work.foo(bar) +//@param label |label0|label1 +// label0:architecture name +//@param confVhdl of configuration file (identifier::entity_name) or +// the architecture if isInlineConf TRUE +//@param isInlineConf +//@param confN List of configurations + +void assignBinding(VhdlConfNode * conf) +{ + QList instList=getVhdlInstList(); + QListIterator eli(instList); + Entry *cur=0; + ClassDef *archClass=0,*entClass=0; + QCString archName,entityName; + QCString arcBind,entBind; + + bool others,all; + entBind=conf->binding; + QCString conf2=VhdlDocGen::parseForBinding(entBind,arcBind); + + if (qstricmp(conf2,"configuration")==0) + { + QList confList = getVhdlConfiguration(); + VhdlConfNode* vconf; + // bool found=false; + for (uint iter=0;iterconfVhdl.data(),0); + if (n==entBind) + { + // found=true; + entBind=VhdlDocGen::getIndexWord(vconf->confVhdl.data(),1); + QCString a=VhdlDocGen::getIndexWord(conf->compSpec.data(),0); + QCString e=VhdlDocGen::getIndexWord(conf->confVhdl.data(),1); + a=e+"::"+a; + archClass= VhdlDocGen::findVhdlClass(a.data());//Doxygen::classSDict->find(a.data()); + entClass= VhdlDocGen::findVhdlClass(e.data());//Doxygen::classSDict->find(e.data()); + break; + } + } + } + else // conf2!=configuration + { + QCString a,c,e; + if (conf->isInlineConf) + { + c=conf->confVhdl; + e=VhdlDocGen::getIndexWord(conf->confVhdl.data(),0); + } + else + { + a=VhdlDocGen::getIndexWord(conf->compSpec.data(),0); + e=VhdlDocGen::getIndexWord(conf->confVhdl.data(),1); + c=e+"::"+a; + } + archClass= VhdlDocGen::findVhdlClass(c.data());//Doxygen::classSDict->find(a.data()); + entClass= VhdlDocGen::findVhdlClass(e.data()); //Doxygen::classSDict->find(e.data()); + } + + QCString label=conf->compSpec.lower(); + //label.prepend("|"); + + if (!archClass) + { + // err("architecture %s not found ! ",conf->confVhdl.data()); + return; + } + + archName=archClass->name(); + QCString allOt=VhdlDocGen::getIndexWord(conf->arch.data(),0); + all=allOt.lower()=="all" ; + others= allOt.lower()=="others"; + + for (;(cur=eli.current());++eli) + { + if (cur->exception.lower()==label || conf->isInlineConf) + { + QCString sign,archy; + + if (all || others) + { + archy=VhdlDocGen::getIndexWord(conf->arch.data(),1); + } + else + { + archy=conf->arch; + } + + QCString inst1=VhdlDocGen::getIndexWord(archy.data(),0).lower(); + QCString comp=VhdlDocGen::getIndexWord(archy.data(),1).lower(); + + QStringList ql=QStringList::split(",",inst1); + + for (uint j=0;jarch.data(),1); + sign1=cur->type; + } + else + { + archy1=comp+":"+ql[j].utf8(); + sign1=cur->type+":"+cur->name; + } + + if (archy1==sign1.lower() && !cur->stat) + { + // fprintf(stderr," \n label [%s] [%s] [%s]",cur->exception.data(),cur->type.data(),cur->name.data()); + ClassDef *ent= VhdlDocGen::findVhdlClass(entBind.data());//Doxygen::classSDict->find(entBind.data()); + + if (entClass==0 || ent==0) + { + continue; + } + + addInstance(ent,archClass,entClass,cur); + cur->stat=TRUE; + break; + } + }// for + } + }//for each element in instList + +}//assignBinding + +/* + +// file foo.vhd +// enitity foo +// ..... +// end entity + +// file foo_arch.vhd +// architecture xxx of foo is +// ........ +// end architecture + +*/ +void VhdlDocGen::computeVhdlComponentRelations() +{ + + QCString entity,arch,inst; + QList confList = getVhdlConfiguration(); + + for (uint iter=0;iterisInlineConf || conf->isLeaf)) + { + continue; + } + assignBinding(conf); + } + + QList qsl= getVhdlInstList(); + QListIterator eli(qsl); + Entry *cur; + + for (eli.toFirst();(cur=eli.current());++eli) + { + if (cur->stat ) // was bind + { + continue; + } + + if (cur->includeName=="entity" || cur->includeName=="component" ) + { + entity=cur->includeName+" "+cur->type; + QCString rr=VhdlDocGen::parseForBinding(entity,arch); + } + else if (cur->includeName.isEmpty()) + { + entity=cur->type; + } + + ClassDef *classEntity= VhdlDocGen::findVhdlClass(entity.data());//Doxygen::classSDict->find(entity); + inst=VhdlDocGen::getIndexWord(cur->args.data(),0); + ClassDef *cd=Doxygen::classSDict->find(inst); + ClassDef *ar=Doxygen::classSDict->find(cur->args); + + if (cd==0) + { + continue; + } + + // if (classEntity==0) + // err("%s:%d:Entity:%s%s",cur->fileName.data(),cur->startLine,entity.data()," could not be found"); + + addInstance(classEntity,ar,cd,cur); + } + +} + +static void addInstance(ClassDef* classEntity, ClassDef* ar, + ClassDef *cd , Entry *cur,ClassDef* /*archBind*/) +{ + + QCString bName,n1; + if (ar==0) return; + + if (classEntity==0) + { + //add component inst + n1=cur->type; + goto ferr; + } + + if (classEntity==cd) return; + + bName=classEntity->name(); + // fprintf(stderr,"\naddInstance %s to %s %s %s\n", classEntity->name().data(),cd->name().data(),ar->name().data(),cur->name); + n1=classEntity->name().data(); + + if (!cd->isBaseClass(classEntity, true, 0)) + { + cd->insertBaseClass(classEntity,n1,Public,Normal,0); + } + else + { + VhdlDocGen::addBaseClass(cd,classEntity); + } + + if (!VhdlDocGen::isSubClass(classEntity,cd,true,0)) + { + classEntity->insertSubClass(cd,Public,Normal,0); + classEntity->setLanguage(SrcLangExt_VHDL); + } + +ferr: + QCString uu=cur->name; + MemberDef *md=new MemberDef( + ar->getDefFileName(), cur->startLine,cur->startColumn, + n1,uu,uu, 0, + Public, Normal, cur->stat,Member, + MemberType_Variable, + 0, + 0); + + if (ar->getOutputFileBase()) + { + TagInfo tg; + tg.anchor = 0; + tg.fileName = ar->getOutputFileBase(); + tg.tagName = 0; + md->setTagInfo(&tg); + } + + //fprintf(stderr,"\n%s%s%s\n",md->name().data(),cur->brief.data(),cur->doc.data()); + + md->setLanguage(SrcLangExt_VHDL); + md->setMemberSpecifiers(VhdlDocGen::INSTANTIATION); + md->setBriefDescription(cur->brief,cur->briefFile,cur->briefLine); + md->setBodySegment(cur->startLine,-1) ; + md->setDocumentation(cur->doc.data(),cur->docFile.data(),cur->docLine); + FileDef *fd=ar->getFileDef(); + md->setBodyDef(fd); + + + QCString info="Info: Elaborating entity "+n1; + fd=ar->getFileDef(); + info+=" for hierarchy "; + QRegExp epr("[|]"); + QCString label=cur->type+":"+cur->write+":"+cur->name; + label.replace(epr,":"); + info+=label; + fprintf(stderr,"\n[%s:%d:%s]\n",fd->fileName().data(),cur->startLine,info.data()); + + + ar->insertMember(md); + +} + + +void VhdlDocGen::writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef) +{ + QStringList ql=QStringList::split("#",largs,FALSE); + uint len=ql.count(); + for(uint i=0;i1) ol.lineBreak(); + } +} + + +void VhdlDocGen::writeRecUnitDocu( + const MemberDef *md, + OutputList& ol, + QCString largs) +{ + + QStringList ql=QStringList::split("#",largs,FALSE); + uint len=ql.count(); + ol.startParameterList(TRUE); + bool first=TRUE; + + for(uint i=0;i1) + { + ol.endParameterName(FALSE,FALSE,FALSE); + } + else + { + ol.endParameterName(TRUE,FALSE,TRUE); + } + + first=FALSE; + } + +}//# + + + +bool VhdlDocGen::isSubClass(ClassDef* cd,ClassDef *scd, bool followInstances,int level) +{ + bool found=FALSE; + //printf("isBaseClass(cd=%s) looking for %s\n",name().data(),bcd->name().data()); + if (level>255) + { + err("Possible recursive class relation while inside %s and looking for %s\n",qPrint(cd->name()),qPrint(scd->name())); + abort(); + return FALSE; + } + + if (cd->subClasses()) + { + BaseClassListIterator bcli(*cd->subClasses()); + for ( ; bcli.current() && !found ; ++bcli) + { + ClassDef *ccd=bcli.current()->classDef; + if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster(); + //printf("isSubClass() subclass %s\n",ccd->name().data()); + if (ccd==scd) + { + found=TRUE; + } + else + { + if (level <256) + { + found=ccd->isBaseClass(scd,followInstances,level+1); + } + } + } + } + return found; +} + +void VhdlDocGen::addBaseClass(ClassDef* cd,ClassDef *ent) +{ + if (cd->baseClasses()) + { + BaseClassListIterator bcli(*cd->baseClasses()); + for ( ; bcli.current() ; ++bcli) + { + ClassDef *ccd=bcli.current()->classDef; + if (ccd==ent) + { + QCString n = bcli.current()->usedName; + int i = n.find('('); + if(i<0) + { + bcli.current()->usedName.append("(2)"); + return; + } + static QRegExp reg("[0-9]+"); + QCString s=n.left(i); + QCString r=n.right(n.length()-i); + QCString t=r; + VhdlDocGen::deleteAllChars(r,')'); + VhdlDocGen::deleteAllChars(r,'('); + r.setNum(r.toInt()+1); + t.replace(reg,r.data()); + s.append(t.data()); + bcli.current()->usedName=s; + bcli.current()->templSpecifiers=t; + } + } + } +} + + +static QList mdList; + +static MemberDef* findMemFlow(const MemberDef* mdef) +{ + for(uint j=0;jname()==mdef->name() && md->getStartBodyLine()==mdef->getStartBodyLine()) + return md; + } + return 0; +} + +void VhdlDocGen::createFlowChart(const MemberDef *mdef) +{ + if (mdef==0) return; + + QCString codeFragment; + MemberDef* mm=0; + if((mm=findMemFlow(mdef))!=0) + { + // don't create the same flowchart twice + VhdlDocGen::setFlowMember(mm); + return; + } + else + { + mdList.append(mdef); + } + + //fprintf(stderr,"\n create flow mem %s %p\n",mdef->name().data(),mdef); + + int actualStart= mdef->getStartBodyLine(); + int actualEnd=mdef->getEndBodyLine(); + FileDef* fd=mdef->getFileDef(); + bool b=readCodeFragment( fd->absFilePath().data(), actualStart,actualEnd,codeFragment); + if (!b) return; + + VHDLLanguageScanner *pIntf =(VHDLLanguageScanner*) Doxygen::parserManager->getParser(".vhd"); + VhdlDocGen::setFlowMember(mdef); + Entry root; + QStrList filesInSameTu; + pIntf->startTranslationUnit(""); + pIntf->parseInput("",codeFragment.data(),&root,FALSE,filesInSameTu); + pIntf->finishTranslationUnit(); +} + +bool VhdlDocGen::isConstraint(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::UCF_CONST; } +bool VhdlDocGen::isConfig(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::CONFIG; } +bool VhdlDocGen::isAlias(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::ALIAS; } +bool VhdlDocGen::isLibrary(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY; } +bool VhdlDocGen::isGeneric(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::GENERIC; } +bool VhdlDocGen::isPort(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::PORT; } +bool VhdlDocGen::isComponent(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::COMPONENT; } +bool VhdlDocGen::isPackage(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::USE; } +bool VhdlDocGen::isEntity(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::ENTITY; } +bool VhdlDocGen::isConstant(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::CONSTANT; } +bool VhdlDocGen::isVType(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::TYPE; } +bool VhdlDocGen::isSubType(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::SUBTYPE; } +bool VhdlDocGen::isVhdlFunction(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::FUNCTION; } +bool VhdlDocGen::isProcess(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::PROCESS; } +bool VhdlDocGen::isSignal(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::SIGNAL; } +bool VhdlDocGen::isAttribute(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::ATTRIBUTE; } +bool VhdlDocGen::isSignals(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::SIGNAL; } +bool VhdlDocGen::isProcedure(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::PROCEDURE; } +bool VhdlDocGen::isRecord(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::RECORD; } +bool VhdlDocGen::isArchitecture(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::ARCHITECTURE; } +bool VhdlDocGen::isUnit(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::UNITS; } +bool VhdlDocGen::isPackageBody(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::PACKAGE_BODY; } +bool VhdlDocGen::isVariable(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::SHAREDVARIABLE; } +bool VhdlDocGen::isFile(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::VFILE; } +bool VhdlDocGen::isGroup(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::GROUP; } +bool VhdlDocGen::isCompInst(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::INSTANTIATION; } +bool VhdlDocGen::isMisc(const MemberDef *mdef) +{ return mdef->getMemberSpecifiers()==VhdlDocGen::MISCELLANEOUS; } + + + +//############################## Flowcharts ################################################# + +#define STARTL (FlowChart::WHILE_NO | FlowChart::IF_NO | \ + FlowChart::FOR_NO | FlowChart::CASE_NO | \ + FlowChart::LOOP_NO | WHEN_NO) +#define DECLN (FlowChart::WHEN_NO | \ + FlowChart::ELSIF_NO | FlowChart::IF_NO | \ + FlowChart::FOR_NO | FlowChart::WHILE_NO | \ + FlowChart::CASE_NO | FlowChart::LOOP_NO ) +#define STARTFIN (FlowChart::START_NO | FlowChart::END_NO) +#define LOOP (FlowChart::FOR_NO | FlowChart::WHILE_NO | \ + FlowChart::LOOP_NO ) +#define ENDCL (FlowChart::END_CASE | FlowChart::END_LOOP) +#define EEND (FlowChart::ENDIF_NO | FlowChart::ELSE_NO ) +#define IFF (FlowChart::ELSIF_NO | FlowChart::IF_NO) +#define EXITNEXT (FlowChart::EXIT_NO | FlowChart::NEXT_NO ) +#define EMPTY (EEND | FlowChart::ELSIF_NO) +#define EE (FlowChart::ELSE_NO | FlowChart::ELSIF_NO) +#define EMPTNODE (ENDCL | EEND | FlowChart::ELSIF_NO) +#define FLOWLEN (flowList.count()-1) + +static int ifcounter=0; +static int nodeCounter=0; + +static struct +{ + // link colors + const char *textNodeLink; + const char *yesNodeLink; + const char *noNodeLink; + + // node colors + const char* comment; + const char* decisionNode; + const char* varNode; + const char *startEndNode; + const char* textNode; +} flowCol = +{ "green", // textNodeLink + "red", // yesNodeLink + "black", // noNodeLink + "khaki", // comment + "0.7 0.3 1.0", // decisionNode + "lightyellow", // varNode + "white", // startEndNode + "lightcyan" // textNode +}; + +QList FlowChart::flowList; + +#ifdef DEBUGFLOW +static QMap keyMap; +#endif + +void alignText(QCString & q) +{ + if (q.length()<=80) return; + + if (q.length()>200) + { + q.resize(200); + } + + q.append(" ..."); + + QRegExp reg("[\\s|]"); + QCString str(q.data()); + QCString temp; + + while (str.length()>80) + { + int j=str.findRev(reg,80); + if (j<=0) + { + temp+=str; + q=temp; + return; + } + else + { + QCString qcs=str.left(j); + temp+=qcs+"\\"; + temp+="n"; + str.remove(0,j); + } + }//while + + q=temp+str; +// #endif +} + +void FlowChart::printNode(const FlowChart* flo) +{ + if (flo==0) return; + QCString ui="-"; + QCString q,t; + QRegExp ep("[\t\n\r]"); + + ui.fill('-',255); + + if (flo->type & STARTL) + { + if (flo->stamp>0) + { + q=ui.left(2*flo->stamp); + } + else + { + q=" "; + } + QCString nn=flo->exp.stripWhiteSpace(); + printf("\nYES: %s%s[%d,%d]",q.data(),nn.data(),flo->stamp,flo->id); + } + else + { + if (flo->type & COMMENT_NO) + { + t=flo->label; + } + else + { + t=flo->text; + } + t=t.replace(ep,""); + if (t.isEmpty()) + { + t=" "; + } + if (flo->stamp>0) + { + q=ui.left(2*flo->stamp); + } + else + { + q=" "; + } + if (flo->type & EMPTNODE) + { + printf("\n NO: %s%s[%d,%d]",q.data(),FlowChart::getNodeType(flo->type),flo->stamp,flo->id); + } + else if (flo->type & COMMENT_NO) + { + printf("\n NO: %s%s[%d,%d]",t.data(),FlowChart::getNodeType(flo->type),flo->stamp,flo->id); + } + else + { + printf("\n NO: %s%s[%d,%d]",q.data(),t.data(),flo->stamp,flo->id); + } + } +} + +void FlowChart::printFlowTree() +{ + uint size=flowList.count(); + for (uint j=0;jtype&TEXT_NO) + { + text+=flo->text+'\n'; + if (!found) + { + flno=flo; + } + if (found) + { + flno->text+=flo->text; + flowList.remove(flo); + if (j>0) j=j-1; + } + found=TRUE; + } + else + found=FALSE; + } + + // find if..endif without text + // if..elseif without text + for (uint j=0;jtype; + if ( (kind & IFF) || (flo->type & ELSE_NO)) + { + FlowChart *ftemp=flowList.at(j+1); + if (ftemp->type & EMPTY) + { + FlowChart *fNew = new FlowChart(TEXT_NO,"empty ",0); + fNew->stamp=flo->stamp; + flowList.insert(j+1,fNew); + } + } + } + +}// colTextNode + +QCString FlowChart::getNodeName(int n) +{ + QCString node; + node.setNum(n); + return node.prepend("node"); +} + +void FlowChart::delFlowList() +{ + ifcounter=0; + nodeCounter=0; + uint size=flowList.count(); + + for (uint j=0;j 0) + { + n.fill(' ',2*diff); + n.append("."); + s+=n; + ql.remove(ql.last()); + ql.append(s); + } + + for (uint j=0;jtype & COMMENT_NO) + { + FlowChart* to=flowList.at(j+1); + if (to->type & COMMENT_NO) + { + fll->label+="\n"; + QCString temp=fll->label+to->label; + to->label=temp; + flowList.remove(j); + size--; + if (j>0) j--; + } + } + }// for + + for (uint j=0;j type & BEGIN_NO) + { + begin = true; + continue; + } + + if (fll->type & COMMENT_NO) + { + FlowChart* to; + if (!begin) + { + // comment between function/process .. begin is linked to start node + to=flowList.at(0); + } + else + { + if (j>0 && flowList.at(j-1)->line==fll->line) + to=flowList.at(j-1); + else + to=flowList.at(j+1); + } + t << getNodeName(fll->id); + t << "[shape=none, label=<\n"; + t << "\n "; + t << "
"; + + FlowChart::alignCommentNode(t,fll->label); + t << "
>];"; + writeEdge(t,fll->id,to->id,2); + } + }// for + + // delete comment nodes; + size=flowList.count(); + for (uint j=0;j < size;j++) + { + FlowChart *fll=flowList.at(j); + if (fll->type & (COMMENT_NO | BEGIN_NO)) + { + flowList.remove(j); + delete fll; + fll=0; + size--; + if (j>0) j--; + } + }// for; +} + +void FlowChart::codify(FTextStream &t,const char *str) +{ + if (str) + { + const char *p=str; + char c; + while (*p) + { + c=*p++; + switch(c) + { + case '<': t << "<"; break; + case '>': t << ">"; break; + case '&': t << "&"; break; + case '\'': t << "'"; break; + case '"': t << """; break; + case '\n': t <<"
"; break; + default: t << c; break; + } + } + } +}//codify + +FlowChart::~FlowChart() +{ +} + +FlowChart::FlowChart(int typ,const char * t,const char* ex,const char* lab) +{ + stamp=ifcounter; + + if (typ & STARTL) + { + ifcounter++; + } + + text=t; + exp=ex; + type=typ; + label=lab; + + if (typ & (ELSE_NO | ELSIF_NO)) + { + stamp--; + } + + if (typ & (START_NO | END_NO | VARIABLE_NO)) + { + stamp=0; + } + + id=nodeCounter++; +} + +void FlowChart::addFlowChart(int type,const char* text,const char* exp, const char *label) +{ + static QRegExp reg("[;]"); + static QRegExp reg1("[\"]"); + + if (!VhdlDocGen::getFlowMember()) return; + + QCString typeString(text); + QCString expression(exp); + + + if (text) + { + typeString=typeString.replace(reg,"\n"); + } + + if (exp) + { + expression=expression.replace(reg1,"\\\""); + } + + FlowChart *fl=new FlowChart(type,typeString.data(),expression.data(),label); + + fl->line=vhdl::parser::VhdlParser::getLine(); + + if (type & (START_NO | VARIABLE_NO)) + { + flowList.prepend(fl); + } + else + { + flowList.append(fl); + } + +} + +void FlowChart::moveToPrevLevel() +{ + if (!VhdlDocGen::getFlowMember()) return; + ifcounter--; +} + + +QCString FlowChart::convertNameToFileName() +{ + static QRegExp exp ("[^][a-z_A-Z0-9]"); + QCString temp,qcs; + const MemberDef* md=VhdlDocGen::getFlowMember(); + + temp.sprintf("%p",md); + qcs=md->name(); + + if (qcs.find(exp,0)>=0) + { + qcs.prepend("Z"); + qcs=qcs.replace(exp,"_"); + } + + return qcs+temp; +} + +const char* FlowChart::getNodeType(int c) +{ + switch(c) + { + case IF_NO: return "if "; + case ELSIF_NO: return "elsif "; + case ELSE_NO: return "else "; + case CASE_NO: return "case "; + case WHEN_NO: return "when "; + case EXIT_NO: return "exit "; + case END_NO: return "end "; + case TEXT_NO: return "text "; + case START_NO: return "start "; + case ENDIF_NO: return "endif "; + case FOR_NO: return "for "; + case WHILE_NO: return "while "; + case END_LOOP: return "end_loop "; + case END_CASE: return "end_case "; + case VARIABLE_NO: return "variable_decl "; + case RETURN_NO: return "return "; + case LOOP_NO: return "infinte loop "; + case NEXT_NO: return "next "; + case COMMENT_NO: return "comment "; + case EMPTY_NO: return "empty "; + case BEGIN_NO: return " "; + default: return "--failure--"; + } +} + +void FlowChart::createSVG() +{ + QCString qcs("/"); + QCString ov = Config_getString("HTML_OUTPUT"); + + qcs+=FlowChart::convertNameToFileName()+".svg"; + + //const MemberDef *m=VhdlDocGen::getFlowMember(); + //if (m) + // fprintf(stderr,"\n creating flowchart : %s %s in file %s \n",VhdlDocGen::trTypeString(m->getMemberSpecifiers()),m->name().data(),m->getFileDef()->name().data()); + + QCString dir=" -o "+ov+qcs; + ov+="/flow_design.dot"; + + QCString vlargs="-Tsvg "+ov+dir ; + + if (portable_system("dot",vlargs)!=0) + { + err("could not create dot file"); + } +} + +void FlowChart::startDot(FTextStream &t) +{ + t << " digraph G { \n"; + t << "rankdir=TB \n"; + t << "concentrate=true\n"; + t << "stylesheet=\"doxygen.css\"\n"; +} + +void FlowChart::endDot(FTextStream &t) +{ + t << " } \n"; +} + +void FlowChart::writeFlowChart() +{ + // assert(VhdlDocGen::flowMember); + + QCString ov = Config_getString("HTML_OUTPUT"); + QCString fileName = ov+"/flow_design.dot"; + QFile f(fileName); + FTextStream t(&f); + + if (!f.open(IO_WriteOnly)) + { + err("Cannot open file %s for writing\n",fileName.data()); + return; + } + + colTextNodes(); + +#ifdef DEBUGFLOW + printFlowTree(); +#endif + + startDot(t); + buildCommentNodes(t); + + uint size=flowList.count(); + + for (uint j=0;j type & EEND) return; + QCString var; + if (fl->type & LOOP) + { + var=" loop"; + } + else if (fl->type & IFF) + { + var=" then"; + } + else + { + var=""; + } + + t<id).data(); + QCString q=getNodeType(fl->type); + +#ifdef DEBUGFLOW + QCString qq(getNodeName(fl->id).data()); + keyMap.insert(qq,fl->id); +#endif + + bool dec=(fl->type & DECLN); + bool exit=(fl->type & EXITNEXT); + if (exit && !fl->exp.isEmpty()) + { + dec=TRUE; + } + if (dec) + { + QCString exp=fl->exp; + alignText(exp); + + t << " [shape=diamond,style=filled,color=\""; + t << flowCol.decisionNode; + t << "\",label=\" "; + QCString kl; + if (exit) kl=fl->text+" "; + + if (fl->label) + { + kl+=fl->label+":"+exp+var; + } + else + { + kl+=exp+var; + } + + FlowChart::alignCommentNode(t,kl); + t << "\"]\n"; + } + else if (fl->type & ENDCL) + { + QCString val=fl->text; + t << " [shape=ellipse ,label=\""+val+"\"]\n"; + } + else if (fl->type & STARTFIN) + { + QCString val=fl->text; + t << "[shape=box , style=rounded label=<\n"; + t << "\n "; + t << "
"; + FlowChart::alignCommentNode(t,val); + t << "
>];"; + } + else + { + if (fl->text.isEmpty()) return; + bool var=(fl->type & FlowChart::VARIABLE_NO); + QCString repl("
"); + QCString q=fl->text; + + if (exit) + { + q+=" "+fl->label; + } + + int z=q.findRev("\n"); + + if (z==(int)q.length()-1) + { + q=q.remove(z,2); + } + t << "[shape=none margin=0.1, label=<\n"; + t << "\n "; + if (var) + { + t << "
"; + } + else + { + t << "
"; + } + FlowChart::alignCommentNode(t,q); + t << "
>];"; + } +} + + +void FlowChart::writeEdge(FTextStream &t,const FlowChart* fl_from,const FlowChart* fl_to,int i) +{ + bool b=fl_from->type & STARTL; + bool c=fl_to->type & STARTL; + +#ifdef DEBUGFLOW + QCString s1(getNodeName(fl_from->id).data()); + QCString s2(getNodeName(fl_to->id).data()); + QMap::Iterator it = keyMap.find(s1); + QMap::Iterator it1 = keyMap.find(s2); + // checks if the link is connected to a valid node + assert(it.key()); + assert(it1.key()); +#endif + + writeEdge(t,fl_from->id,fl_to->id,i,b,c); +} + +void FlowChart::writeEdge(FTextStream &t,int fl_from,int fl_to,int i,bool bFrom,bool bTo) +{ + QCString label,col; + + if (i==0) + { + col=flowCol.yesNodeLink; + label="yes"; + } + else if (i==1) + { + col=flowCol.noNodeLink; + label="no"; + } + else + { + col=flowCol.textNodeLink; + label=""; + } + + t << "edge [color=\""+col+"\",label=\""+label+"\"]\n"; + t << getNodeName(fl_from).data(); + if (bFrom) t << ":s"; + t << "->"; + t << getNodeName(fl_to).data(); + if (bTo) t << ":n"; + t << "\n"; +} + +void FlowChart::alignFuncProc( QCString & q,const ArgumentList* al,bool isFunc) +{ + if (al==0) return; + + ArgumentListIterator ali(*al); + int index=ali.count(); + if (index==0) return; + + int len=q.length()+VhdlDocGen::getFlowMember()->name().length(); + QCString prev,temp; + prev.fill(' ',len+1); + + Argument *arg; + q+="\n"; + for (;(arg=ali.current());++ali) + { + QCString attl=arg->defval+" "; + attl+=arg->name+" "; + + if (!isFunc) + { + attl+=arg->attrib+" "; + } + else + { + attl+=" in "; + } + attl+=arg->type; + if (--index) attl+=",\n"; else attl+="\n"; + + attl.prepend(prev.data()); + temp+=attl; + } + + q+=temp; +} + +int FlowChart::findNextLoop(int index,int stamp) +{ + for (uint j=index+1;jstamp==stamp) + { + continue; + } + if (flo->type&END_LOOP) + { + return j; + } + } + return flowList.count()-1; +} + +int FlowChart::findPrevLoop(int index,int stamp,bool endif) +{ + for (uint j=index;j>0;j--) + { + FlowChart *flo=flowList.at(j); + if (flo->type & LOOP) + { + if (flo->stamp==stamp && endif) + { + return j; + } + else + { + if (flo->stamp0;j--) + { + FlowChart *flo=flowList.at(j); + if ((flo->type & LOOP) && !flo->label.isEmpty() && qstricmp(flo->label,label)==0) + { + return j; + } + } + err("could not find label: ",label.data()); + return 0; +} + +int FlowChart::findNode(int index,int stamp,int type) +{ + for (uint j=index+1;jtype==type && flo->stamp==stamp) + { + return j; + } + } + return 0; +}// findNode + +int FlowChart::getNextNode(int index,int stamp) +{ + for (uint j=index+1;jtype; + int s=flo->stamp; + if (s>stamp) + { + continue; + } + if (kind & ENDIF_NO) + { + if (s0) + { + stamp--; + continue; + } + } + if (kind & (ELSE_NO | ELSIF_NO)) + { + if (s0) + { + stamp--; + } + j=findNode(j,stamp,ENDIF_NO); + continue; + } + if (kind & WHEN_NO) + { + if (s0) + { + stamp--; + } + return findNode(j,stamp-1,END_CASE); + } + return j; + } + return FLOWLEN; +} + +int FlowChart::getNextIfLink(const FlowChart* fl,uint index) +{ + int stamp=fl->stamp; + uint start = index+1; + int endifNode = findNode(start,stamp,ENDIF_NO); + int elseifNode = findNode(start,stamp,ELSIF_NO); + int elseNode = findNode(start,stamp,ELSE_NO); + + assert(endifNode>-1); + + if (elseifNode>0 && elseifNode0 && elseNodestamp; + return getNextNode(endifNode,stamp); +} + +void FlowChart::writeFlowLinks(FTextStream &t) +{ + uint size=flowList.count(); + if (size<2) return; + + // write start link + writeEdge(t,flowList.at(0),flowList.at(1),2); + + for (uint j=0;jtype; + int stamp=fll->stamp; + if (kind & EEND) + { + continue; + } + + if (kind & IFF) + { + writeEdge(t,fll,flowList.at(j+1),0); + int z=getNextIfLink(fll,j); + // assert(z>-1); + writeEdge(t,fll,flowList.at(z),1); + } + else if (kind & LOOP_NO) + { + writeEdge(t,fll,flowList.at(j+1),2); + continue; + } + else if (kind & (CASE_NO | FOR_NO | WHILE_NO)) + { + if (kind & CASE_NO) + { + writeEdge(t,fll,flowList.at(j+1),2); + continue; + } + else + { + writeEdge(t,fll,flowList.at(j+1),0); + } + + kind=END_LOOP; + int z=findNode(j+1,fll->stamp,kind); + z=getNextNode(z,flowList.at(z)->stamp); + + // assert(z>-1); + writeEdge(t,fll,flowList.at(z),1); + continue; + } + else if (kind & (TEXT_NO | VARIABLE_NO)) + { + int z=getNextNode(j,stamp); + writeEdge(t,fll,flowList.at(z),2); + } + else if (kind & WHEN_NO) + { + // default value + if (qstricmp(fll->text.simplifyWhiteSpace().data(),"others")==0) + { + writeEdge(t,fll,flowList.at(j+1),2); + continue; + } + + + writeEdge(t,fll,flowList.at(j+1),0); + int u=findNode(j,stamp,WHEN_NO); + int v=findNode(j,stamp-1,END_CASE); + + if (u>0 && ustamp); + writeEdge(t,fll,flowList.at(z),2); + } + else if (kind & END_LOOP) + { + int z=findPrevLoop(j,fll->stamp,true); + writeEdge(t,fll,flowList.at(z),2); + } + else if (kind & RETURN_NO) + { + writeEdge(t,fll,FlowChart::flowList.at(size-1),2); + } + else if (kind & (EXIT_NO | NEXT_NO)) + { + int z; + bool b = kind==NEXT_NO; + if (fll->exp) + { + writeEdge(t,fll,flowList.at(j+1),1); + } + if (!fll->label.isEmpty()) + { + z=findLabel(j,fll->label); + if (b) + { + writeEdge(t,fll,flowList.at(z),0); + } + else + { + z=findNode(z,flowList.at(z)->stamp,END_LOOP); + z=getNextNode(z,flowList.at(z)->stamp); + writeEdge(t,fll,flowList.at(z),0); + } + continue; + } + else + { + if (b) + { + z=findPrevLoop(j,fll->stamp); + writeEdge(t,fll,flowList.at(z),0); + continue; + } + else + { + z =findNextLoop(j,fll->stamp-1); + } + z=getNextNode(z,flowList.at(z)->stamp); + } + writeEdge(t,fll,flowList.at(z),0); + } + } //for +} //writeFlowLinks + + +void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf, + const char *scopeName, + const QCString &input, + SrcLangExt , + bool isExampleBlock, + const char *exampleName, + FileDef *fileDef, + int startLine, + int endLine, + bool inlineFragment, + MemberDef *memberDef, + bool showLineNumbers, + Definition *searchCtx, + bool collectXRefs + ) +{ + +parseVhdlCode(codeOutIntf, + scopeName, + input, + isExampleBlock, + exampleName, + fileDef, + startLine, + endLine, + inlineFragment, + memberDef, + showLineNumbers, + searchCtx, + collectXRefs + +); + +} diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h index 5b09bae..7c78373 100644 --- a/src/vhdldocgen.h +++ b/src/vhdldocgen.h @@ -1,12 +1,10 @@ /****************************************************************************** * - * - * - * Copyright (C) 1997-2014 by Dimitri van Heesch. + * Copyright (C) 1997-2013 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 + * 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. * @@ -18,27 +16,31 @@ #ifndef VHDLDOCGEN_H #define VHDLDOCGEN_H -/** - * This class implements functions for parsing and generating +/** + * This class implements functions for parsing and generating * vhdl documents */ #include -#include #include +#include "layout.h" +#include "arguments.h" +#include "entry.h" -#include "memberlist.h" - -class QStringList; class Entry; -class ClassSDict; -class FileStorage; -class EntryNav; class ClassDef; +class MemberList; class MemberDef; +class FTextStream; +class OutputList; +class Definition; +class GroupDef; +class FileDef; +class NamespaceDef; struct Argument; -class VhdlDocGen +/** Class for generating documentation specific for VHDL */ +class VhdlDocGen { public: @@ -49,6 +51,7 @@ class VhdlDocGen ARCHITECTURECLASS, // Overlays: Private PACKAGECLASS // Overlays: Package }; + enum VhdlKeyWords { LIBRARY=1, @@ -68,12 +71,11 @@ class VhdlDocGen USE, PROCESS, PORT, - DOCUMENT, //18 0x12 - UNITS, + UNITS, GENERIC, - COMPONENT_INST, + INSTANTIATION, GROUP, - VFILE, + VFILE, SHAREDVARIABLE, CONFIG, ALIAS, @@ -84,18 +86,16 @@ class VhdlDocGen VhdlDocGen(); virtual ~VhdlDocGen(); static void init(); - + static QCString convertFileNameToClassName(QCString name); // --- used by vhdlscanner.l ----------- + + static bool isSubClass(ClassDef* cd,ClassDef *scd, bool followInstances,int level); + static QCString getIndexWord(const char* ,int index); - static bool foundInsertedComponent(const QCString& name,Entry* root); static bool deleteCharRev(QCString &s,char c); - static bool isFunctionProto(QCString& ss); - static Entry* findFunction(Entry* func); static void deleteAllChars(QCString &s,char c); - static bool getSigName(QList& ql, const char* str,QCString& buffer); - static bool getSigTypeName(QList& ql,const char* str,QCString& buffer); static void parseFuncProto(const char* text, - QList& , + QList& , QCString& name, QCString& ret, bool doc=false); @@ -104,15 +104,9 @@ class VhdlDocGen static void computeVhdlComponentRelations(); static QCString* findKeyWord(const QCString& word); - static void addFuncDoc(EntryNav* root); - - //static void MapArchitecturesToEntity(Entry* cur_root); - - //static void MapComponentToEntity(const ClassSDict*); - static ClassDef* findComponent(int type); static ClassDef* getPackageName(const QCString& name); - static MemberDef* findMember(const QCString& className, + static MemberDef* findMember(const QCString& className, const QCString& memName); static void findAllPackages(const QCString& className, QDict&); @@ -120,73 +114,44 @@ class VhdlDocGen const QCString& key, MemberListType type); static ClassDef *getClass(const char *name); - static Entry* findFunction(Entry* root,Entry* func); static MemberDef* findFunction(const QList &ql, const QCString& name, const QCString& package, bool type); - static bool compareString(const QCString& s1, - const QCString& s2); static QCString getClassTitle(const ClassDef*); static void writeInlineClassLink(const ClassDef*, OutputList &ol); - //static void writeVhdlComponentList(OutputList &ol,int type); - static bool isMisc(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::MISCELLANEOUS; } - static bool isConfig(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::CONFIG; } - static bool isAlias(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::ALIAS; } - static bool isLibrary(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY; } - static bool isGeneric(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::GENERIC; } - static bool isPort(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::PORT; } - static bool isComponent(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::COMPONENT; } - static bool isPackage(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::USE; } - static bool isEntity(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::ENTITY; } - static bool isConstant(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::CONSTANT; } - static bool isVType(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::TYPE; } - static bool isSubType(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::SUBTYPE; } - static bool isVhdlFunction(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::FUNCTION; } - static bool isProcess(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::PROCESS; } - static bool isSignal(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::SIGNAL; } - static bool isAttribute(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::ATTRIBUTE; } - static bool isSignals(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::SIGNAL; } - static bool isProcedure(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::PROCEDURE; } - static bool isRecord(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::RECORD; } - static bool isArchitecture(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::ARCHITECTURE; } - static bool isUnit(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::UNITS; } - static bool isPackageBody(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::PACKAGE_BODY; } - static bool isVariable(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::SHAREDVARIABLE; } - static bool isFile(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::VFILE; } - static bool isGroup(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::GROUP; } - static bool isCompInst(const MemberDef *mdef) - { return mdef->getMemberSpecifiers()==VhdlDocGen::COMPONENT_INST; } + static bool isConstraint(const MemberDef *mdef); + static bool isConfig(const MemberDef *mdef); + static bool isAlias(const MemberDef *mdef); + static bool isLibrary(const MemberDef *mdef); + static bool isGeneric(const MemberDef *mdef); + static bool isPort(const MemberDef *mdef); + static bool isComponent(const MemberDef *mdef); + static bool isPackage(const MemberDef *mdef); + static bool isEntity(const MemberDef *mdef); + static bool isConstant(const MemberDef *mdef); + static bool isVType(const MemberDef *mdef); + static bool isSubType(const MemberDef *mdef); + static bool isVhdlFunction(const MemberDef *mdef); + static bool isProcess(const MemberDef *mdef); + static bool isSignal(const MemberDef *mdef); + static bool isAttribute(const MemberDef *mdef); + static bool isSignals(const MemberDef *mdef); + static bool isProcedure(const MemberDef *mdef); + static bool isRecord(const MemberDef *mdef); + static bool isArchitecture(const MemberDef *mdef); + static bool isUnit(const MemberDef *mdef); + static bool isPackageBody(const MemberDef *mdef); + static bool isVariable(const MemberDef *mdef); + static bool isFile(const MemberDef *mdef); + static bool isGroup(const MemberDef *mdef); + static bool isCompInst(const MemberDef *mdef); + static bool isMisc(const MemberDef *mdef); //----------------------------------------------------- // translatable items - + static QCString trTypeString(uint64 type); static QCString trVhdlType(uint64 type,bool sing=true); @@ -211,17 +176,10 @@ class VhdlDocGen // trFunctions static QCString trFunctionAndProc(); - //----------------------------------------------------- static void prepareComment(QCString&); - static QCString getpackname(const char* text, - const char* word, - const char* patter); - static void parseProcessProto(const char* text, - QCString&, - QStringList&); - static void formatString(QCString&,OutputList& ol,const MemberDef*); + static void formatString(const QCString&,OutputList& ol,const MemberDef*); static void writeFormatString(const QCString&,OutputList& ol,const MemberDef*); static void writeFunctionProto(OutputList& ol,const ArgumentList *al,const MemberDef*); @@ -230,10 +188,6 @@ class VhdlDocGen static bool writeFuncProcDocu(const MemberDef *mdef, OutputList& ol,const ArgumentList* al,bool type=false); static void writeRecordProto(const MemberDef *mdef, OutputList& ol,const ArgumentList *al); - static QCString convertArgumentListToString(const ArgumentList* al,bool f); - static QCString getProcessNumber(); - static QCString getRecordNumber(); - static bool writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition* d, OutputList &ol); static void writeVhdlDeclarations(MemberList*,OutputList&,GroupDef*,ClassDef*,FileDef*,NamespaceDef*); @@ -249,28 +203,144 @@ class VhdlDocGen ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, const char *title,const char *subtitle,bool showEnumValues,int type); + static bool writeClassType(ClassDef *&,OutputList &ol ,QCString & cname); + + static QCString convertArgumentListToString(const ArgumentList* al,bool f); + static QCString getProcessNumber(); + static QCString getRecordNumber(); + static QCString getClassName(const ClassDef*); - static bool writeClassType(ClassDef *,OutputList &ol ,QCString & cname); - static void adjustRecordMember(MemberDef *mdef); - static bool writeDoc(EntryNav* rootNav); - - static void writeLink(const MemberDef* mdef,OutputList &ol); - static void adjustMemberName(QCString& nn); - static bool membersHaveSpecificType(MemberList *ml,uint64 type); - static void startFonts(const QCString& q, const char *keyword,OutputList& ol); static bool isNumber(const QCString& s); static QCString getProtectionName(int prot); - static void writeSource(MemberDef *mdef,OutputList& ol,QCString &); - static void writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef); + + static void parseUCF(const char* input,Entry* entity,QCString f,bool vendor); + static bool findConstraintFile( LayoutNavEntry *lne); + + static ClassDef* findArchitecture(const ClassDef *cd); + static ClassDef* findArchitecture(QCString identifier, QCString entity_name); + + + static void writeSource(MemberDef *mdef,OutputList& ol,QCString & cname); + static void writeAlphbeticalClass(OutputList& ol,const ClassDef* cd,const QCString &); + + static QCString parseForConfig(QCString & entity,QCString & arch); + static QCString parseForBinding(QCString & entity,QCString & arch); + static void addBaseClass(ClassDef* cd,ClassDef *ent); + static ClassDef* findVhdlClass(const char *className ); + + static void writeOverview(OutputList &ol); + static void writeOverview(); + + // flowcharts + static void createFlowChart(const MemberDef*); + //static void addFlowImage(const FTextStream &,const QCString &); + + static void setFlowMember( const MemberDef *flowMember); + static const MemberDef *getFlowMember(); + + static bool isVhdlClass (const Entry *cu) + { + return cu->spec==VhdlDocGen::ENTITY || + cu->spec==VhdlDocGen::PACKAGE || + cu->spec==VhdlDocGen::ARCHITECTURE || + cu->spec==VhdlDocGen::PACKAGE_BODY; + } + + private: - static void getFuncParams(QList&, const char* str); + static void findAllArchitectures(QList& ql,const ClassDef *cd); static bool compareArgList(ArgumentList*,ArgumentList*); static void writeVhdlLink(const ClassDef* cdd ,OutputList& ol,QCString& type,QCString& name,QCString& beh); - static void findAllArchitectures(QList& ql,const ClassDef *cd); static void writeStringLink(const MemberDef *mdef,QCString mem,OutputList& ol); - static void writeCodeFragment(MemberDef *mdef,OutputList& ol); + static void writeRecUnitDocu( const MemberDef *md, OutputList& ol,QCString largs); + static void writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef); +}; + +//------------------------------------------------------------------------------------------------------------------- +//-------------- VHDL Flowcharts ------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------------------------- + + +//#define DEBUGFLOW + +class FlowChart +{ + public: + enum nodeTypes { + IF_NO = 1<<1, + ELSIF_NO = 1<<2, + ELSE_NO = 1<<3, + CASE_NO = 1<<4, + WHEN_NO = 1<<5, + EXIT_NO = 1<<6, + END_NO = 1<<7, + TEXT_NO = 1<<8, + START_NO = 1<<9, + ENDIF_NO = 1<<10, + FOR_NO = 1<<11, + WHILE_NO = 1<<12, + END_LOOP = 1<<13, + END_CASE = 1<<14, + VARIABLE_NO = 1<<15, + RETURN_NO = 1<<16, + LOOP_NO = 1<<17, + NEXT_NO = 1<<18, + EMPTY_NO = 1<<19, + COMMENT_NO = 1<<20, + BEGIN_NO = 1<<21 + }; + //---------- create svg ------------------------------------------------------------- + static void createSVG(); + static void startDot(FTextStream &t); + static void endDot(FTextStream &t); + static void codify(FTextStream &t,const char *str); + static void writeShape(FTextStream &t,const FlowChart* fl); + static void writeEdge(FTextStream &t,int fl_from,int fl_to,int i,bool bFrom=FALSE,bool bTo=FALSE); + static void writeEdge(FTextStream &t,const FlowChart* fl_from,const FlowChart* fl_to,int i); + static void writeFlowLinks(FTextStream &t); + + static QCString getNodeName(int n); + static void colTextNodes(); + + static int getNextTextLink(const FlowChart* fl,uint index); + static int getNextIfLink(const FlowChart*,uint); + static int getNextNode(int,int); + static int findNode(int index,int stamp,int type); + static int findNode(int index,int type); + static int findNextLoop(int j,int stamp); + static int findPrevLoop(int j,int stamp,bool endif=FALSE); + static int findLabel(int j,QCString &); + static void delFlowList(); + static const char* getNodeType(int c); + + static void addFlowChart(int type,const char* text,const char* exp,const char * label=NULL); + static void moveToPrevLevel(); + static int getTimeStamp(); + static void writeFlowChart(); + static void alignFuncProc(QCString & q,const ArgumentList* al,bool isFunc); + static QCString convertNameToFileName(); + static void printNode(const FlowChart* n); + static void printFlowTree(); + static void buildCommentNodes(FTextStream &t); + static void alignCommentNode(FTextStream &t,QCString com); + + static QList flowList; + + FlowChart(int typ,const char* t,const char* ex,const char* label=0); + ~FlowChart(); + +private: + int id; + int stamp; + int type; + + int line; + + QCString label; + QCString text; + QCString exp; }; #endif diff --git a/src/vhdljjparser.cpp b/src/vhdljjparser.cpp new file mode 100644 index 0000000..cee6837 --- /dev/null +++ b/src/vhdljjparser.cpp @@ -0,0 +1,608 @@ +/****************************************************************************** + * + * Copyright (C) 2014 by M. Kreis + * + * 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. + * + */ + +#include +#include +#include +#include "vhdljjparser.h" +#include "vhdlcode.h" +#include "vhdldocgen.h" +#include "message.h" +#include "config.h" +#include "doxygen.h" +#include "util.h" +#include "language.h" +#include "commentscan.h" +#include "index.h" +#include "definition.h" +#include "searchindex.h" +#include "outputlist.h" +#include "arguments.h" +#include "types.h" + +#include "VhdlParserIF.h" + +using namespace vhdl::parser; +using namespace std; + +static ParserInterface *g_thisParser; + +static QCString yyFileName; +static int yyLineNr = 1; +static bool docBlockAutoBrief = FALSE; +static char docBlockTerm = FALSE; +static int iDocLine = -1; +static int lineParseSize = 200; +static int* lineParse; +//------------------------------------------------------- + +static QList instFiles; +static QList libUse; + +Entry* VhdlParser::currentCompound=0; +Entry* VhdlParser::tempEntry=0; +Entry* VhdlParser::lastEntity=0 ; +Entry* VhdlParser::lastCompound=0 ; +Entry* VhdlParser::current=0; +Entry* VhdlParser::current_root = 0; +QCString VhdlParser::compSpec; +QCString VhdlParser::currName; +QCString VhdlParser::confName; +QCString VhdlParser::genLabels; +QCString VhdlParser::lab; +QCString VhdlParser::forL; + +int VhdlParser::param_sec = 0; +int VhdlParser::parse_sec=0; +int VhdlParser::currP=0; +int VhdlParser::levelCounter; + +static QList configL; + +//------------------------------------- + +QList& getVhdlConfiguration() { return configL; } +QList& getVhdlInstList() { return instFiles; } + +bool isConstraintFile(const QCString &fileName,const QCString &ext) +{ + return fileName.right(ext.length())==ext; +} + +void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root, + bool ,QStrList&) +{ + bool inLine=false; + + if (strlen(fileName)==0) + { + inLine=true; + } + + yyFileName+=fileName; + + bool xilinx_ucf=isConstraintFile(yyFileName,".ucf"); + bool altera_qsf=isConstraintFile(yyFileName,".qsf"); + + // support XILINX(ucf) and ALTERA (qsf) file + + if (xilinx_ucf) + { + VhdlDocGen::parseUCF(fileBuf,root,yyFileName,FALSE); + return; + } + if (altera_qsf) + { + VhdlDocGen::parseUCF(fileBuf,root,yyFileName,TRUE); + return; + } + libUse.setAutoDelete(true); + yyLineNr=1; + VhdlParser::current_root=root; + VhdlParser::lastCompound=0; + VhdlParser::lastEntity=0; + VhdlParser::currentCompound=0; + VhdlParser::lastEntity=0; + VhdlParser::current=new Entry(); + VhdlParser::initEntry(VhdlParser::current); + groupEnterFile(fileName,yyLineNr); + lineParse=new int[lineParseSize]; + VhdlParserIF::parseVhdlfile(fileBuf,inLine); + + delete VhdlParser::current; + VhdlParser::current=0; + + if (!inLine) + { + VhdlParser::mapLibPackage(root); + } + + delete lineParse; + yyFileName.resize(0); + libUse.clear(); +} + + +void VhdlParser::lineCount() +{ + yyLineNr++; +} + +void VhdlParser::lineCount(const char* text) +{ + for (const char* c=text ; *c ; ++c ) + { + yyLineNr += (*c == '\n') ; + } +} + +void VhdlParser::initEntry(Entry *e) +{ + e->fileName = yyFileName; + e->lang = SrcLangExt_VHDL; + initGroupInfo(e); +} + +void VhdlParser::newEntry() +{ + if (current->spec==VhdlDocGen::ENTITY || + current->spec==VhdlDocGen::PACKAGE || + current->spec==VhdlDocGen::ARCHITECTURE || + current->spec==VhdlDocGen::PACKAGE_BODY) + { + current_root->addSubEntry(current); + } + else + { + if (lastCompound) + { + lastCompound->addSubEntry(current); + } + else + { + if (lastEntity) + { + lastEntity->addSubEntry(current); + } + else + { + current_root->addSubEntry(current); + } + } + } + //previous = current; + current = new Entry ; + initEntry(current); +} + +void VhdlParser::handleCommentBlock(const char* doc1,bool brief) +{ + int position=0; + QCString doc(doc1); + VhdlDocGen::prepareComment(doc); + bool needsEntry=FALSE; + Protection protection=Public; + int lineNr = iDocLine; + if (brief) + current->briefLine = yyLineNr; + else + current->docLine = yyLineNr; + + //printf("parseCommentBlock %p [%s]\n",current,doc.data()); + while (parseCommentBlock( + g_thisParser, + current, + doc, // text + yyFileName, // file + lineNr, // line of block start + brief, + docBlockAutoBrief, + FALSE, + protection, + position, + needsEntry + ) + ) + { + //printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position); + if (needsEntry) newEntry(); + } + if (needsEntry) + { + newEntry(); + } + + if (docBlockTerm) + { + // unput(docBlockTerm); + docBlockTerm=0; + } + lineCount(doc1); +} + +void VhdlParser::addCompInst(char *n, char* instName, char* comp,int iLine) +{ + + current->spec=VhdlDocGen::INSTANTIATION; + current->section=Entry::VARIABLE_SEC; + current->startLine=iLine; + current->bodyLine=iLine; + current->type=instName; // foo:instname e.g proto or work. proto(ttt) + current->exception=genLabels.lower(); // |arch|label1:label2... + current->name=n; // foo + current->args=lastCompound->name; // architecture name + current->includeName=comp; // component/enity/configuration + int u=genLabels.find("|",1); + if (u>0) + { + current->write=genLabels.right(genLabels.length()-u); + current->read=genLabels.left(u); + } + //printf (" \n genlable: [%s] inst: [%s] name: [%s] %d\n",n,instName,comp,iLine); + + if (lastCompound) + { + current->args=lastCompound->name; + if (true) // !findInstant(current->type)) + { + initEntry(current); + instFiles.append(new Entry(*current)); + } + + Entry *temp=current; // hold current pointer (temp=oldEntry) + current=new Entry; // (oldEntry != current) + delete temp; + } + else + { + newEntry(); + } +} + +void VhdlParser::addVhdlType(const char *n,int startLine,int section, + uint64 spec,const char* args,const char* type,Protection prot) +{ + static QRegExp reg("[\\s]"); + QCString name(n); + if (isFuncProcProced() || VhdlDocGen::getFlowMember()) return; + + if (parse_sec==GEN_SEC) + spec= VhdlDocGen::GENERIC; + + QStringList ql=QStringList::split(",",name,FALSE); + + for (uint u=0;uname=ql[u].utf8(); + current->startLine=startLine; + current->bodyLine=startLine; + current->section=section; + current->spec=spec; + current->fileName=yyFileName; + if (current->args.isEmpty()) + { + current->args=args; + } + current->type=type; + current->protection=prot; + + if (!lastCompound && (section==Entry::VARIABLE_SEC) && (spec == VhdlDocGen::USE || spec == VhdlDocGen::LIBRARY) ) + { + libUse.append(new Entry(*current)); + current->reset(); + } + newEntry(); + } +} + +void VhdlParser::createFunction(const char *imp,uint64 spec, + const char *fn) +{ + + QCString impure(imp); + QCString fname(fn); + current->spec=spec; + current->section=Entry::FUNCTION_SEC; + + if (impure=="impure" || impure=="pure") + { + current->exception=impure; + } + + if (parse_sec==GEN_SEC) + { + current->spec= VhdlDocGen::GENERIC; + current->section=Entry::FUNCTION_SEC; + } + + if (currP==VhdlDocGen::PROCEDURE) + { + current->name=impure; + current->exception=""; + } + else + { + current->name=fname; + } + + if (spec==VhdlDocGen::PROCESS) + { + + current->args=fname; + current->name=impure; + VhdlDocGen::deleteAllChars(current->args,' '); + if (!fname.isEmpty()) + { + QStringList q1=QStringList::split(",",fname); + for (uint ii=0;iiname=q1[ii].utf8(); + current->argList->append(arg); + } + } + return; + } + } + + +bool VhdlParser::isFuncProcProced() +{ + if (currP==VhdlDocGen::FUNCTION || + currP==VhdlDocGen::PROCEDURE || + currP==VhdlDocGen::PROCESS + ) + { + return TRUE; + } + return FALSE; +} + +void VhdlParser::pushLabel( QCString &label,QCString & val) +{ + label+="|"; + label+=val; +} + + QCString VhdlParser::popLabel(QCString & q) +{ + QCString u=q; + int i=q.findRev("|"); + if (i<0) return ""; + q = q.left(i); + return q; +} + +void VhdlParser::addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf) +{ + VhdlConfNode* co=0; + QCString ent,arch,lab; + QCString l=genLabels; + ent=a; + // lab = VhdlDocGen::parseForConfig(ent,arch); + + if (b) + { + ent=b; + // lab=VhdlDocGen::parseForBinding(ent,arch); + } + int level=0; + + if(!configL.isEmpty()) + { + VhdlConfNode* vc=configL.getLast(); + level=vc->level; + if (levelCounter==0) + pushLabel(forL,ent); + else if (levellevelCounter) + { + forL=popLabel(forL); + } + } + else + { + pushLabel(forL,ent); + + } + + + if (inlineConf) + { + confName=lastCompound->name; + } + + //fprintf(stderr,"\n[%s %d %d]\n",forL.data(),levelCounter,level); + co=new VhdlConfNode(a,b,confName.lower().data(),forL.lower().data(),isLeaf); + + if (inlineConf) + { + co->isInlineConf=TRUE; + } + + configL.append(co); + +}// addConfigure + + +void VhdlParser::addProto(const char *s1,const char *s2,const char *s3, + const char *s4,const char *s5,const char *s6) +{ + (void)s5; // avoid unused warning + static QRegExp reg("[\\s]"); + QCString name=s2; + QStringList ql=QStringList::split(",",name,FALSE); + + for (uint u=0;uname=ql[u].utf8(); + if (s3) + { + arg->type=s3; + } + arg->type+=" "; + arg->type+=s4; + if (s6) + { + arg->type+=s6; + } + if (parse_sec==GEN_SEC && param_sec==0) + { + arg->defval="gen!"; + } + + if (parse_sec==PARAM_SEC) + { + // assert(false); + } + + arg->defval+=s1; + arg->attrib="";//s6; + + current->argList->append(arg); + current->args+=s2; + current->args+=","; + } +} + + +/* + * adds the library|use statements to the next class (entity|package|architecture|package body + * library ieee + * entity xxx + * ..... + * library + * package + * enity zzz + * ..... + * and so on.. + */ +void VhdlParser::mapLibPackage( Entry* root) +{ + QList epp=libUse; + EntryListIterator eli(epp); + Entry *rt; + for (;(rt=eli.current());++eli) + { + if (addLibUseClause(rt->name)) + { + Entry *current; + EntryListIterator eLib(*root->children()); + bool bFound=FALSE; + for (eLib.toFirst();(current=eLib.current());++eLib) + { + if (VhdlDocGen::isVhdlClass(current)) + if (current->startLine > rt->startLine) + { + bFound=TRUE; + current->addSubEntry(new Entry(*rt)); + break; + } + }//for + if (!bFound) + { + root->addSubEntry(new Entry(*rt)); + + } + } //if + }// for +}//MapLib + +bool VhdlParser::addLibUseClause(const QCString &type) +{ + static bool showIEEESTD=Config_getBool("FORCE_LOCAL_INCLUDES"); + + if (showIEEESTD) // all standard packages and libraries will not be shown + { + if (type.lower().stripPrefix("ieee")) return FALSE; + if (type.lower().stripPrefix("std")) return FALSE; + } + return TRUE; +} + +int VhdlParser::getLine() +{ + return yyLineNr; +} + +void VhdlParser::setLineParsed(int tok) +{ + if (tok=0 && val<=yyLineNr); + + return val; +} + + +void VhdlParser::createFlow() +{ + if (!VhdlDocGen::getFlowMember()) + { + return; + } + QCString q,ret; + + if (currP==VhdlDocGen::FUNCTION) + { + q=":function( "; + FlowChart::alignFuncProc(q,tempEntry->argList,true); + q+=")"; + } + else if (currP==VhdlDocGen::PROCEDURE) + { + q=":procedure ("; + FlowChart::alignFuncProc(q,tempEntry->argList,false); + q+=")"; + } + else + { + q=":process( "+tempEntry->args; + q+=")"; + } + + q.prepend(VhdlDocGen::getFlowMember()->name().data()); + + FlowChart::addFlowChart(FlowChart::START_NO,q,0); + + if (currP==VhdlDocGen::FUNCTION) + { + ret="end function "; + } + else if (currP==VhdlDocGen::PROCEDURE) + { + ret="end procedure"; + } + else + { + ret="end process "; + } + + FlowChart::addFlowChart(FlowChart::END_NO,ret,0); + // FlowChart::printFlowList(); + FlowChart::writeFlowChart(); + currP=0; +} + + diff --git a/src/vhdljjparser.h b/src/vhdljjparser.h new file mode 100644 index 0000000..7ecf297 --- /dev/null +++ b/src/vhdljjparser.h @@ -0,0 +1,98 @@ +#ifndef VHDLJJPARSER_H +#define VHDLJJPARSER_H + +#include "parserintf.h" +#include +#include +#include +#include +#include + +#include +#include +#include +#include "memberlist.h" +#include "types.h" +#include "entry.h" + +#include "vhdldocgen.h" +#include "qstringlist.h" +#include "vhdlcode.h" +#include "config.h" + +enum { GEN_SEC=0x1, PARAM_SEC,CONTEXT_SEC,PROTECTED_SEC } ; +void parserVhdlfile(const char* inputBuffer); + +class Entry; +class ClassSDict; +class FileStorage; +class ClassDef; +class MemberDef; +class QStringList; +class VhdlConfNode; + +/** \brief VHDL parser using state-based lexical scanning. + * + * This is the VHDL language parser for doxygen. + */ +class VHDLLanguageScanner : public ParserInterface +{ + public: + virtual ~VHDLLanguageScanner() {} + void startTranslationUnit(const char *) {} + void finishTranslationUnit() {} + void parseInput(const char * fileName, + const char *fileBuf, + Entry *root, + bool sameTranslationUnit, + QStrList &filesInSameTranslationUnit); + + void parseCode(CodeOutputInterface &codeOutIntf, + const char *scopeName, + const QCString &input, + SrcLangExt lang, + 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, + bool collectXRefs=TRUE); + + bool needsPreprocessing(const QCString &) { return TRUE; } + void resetCodeParserState() {} + void parsePrototype(const char *) {} +}; + +class VhdlConfNode +{ + public: + VhdlConfNode(const char* a,const char* b,const char* config,const char* cs,bool leaf) + { + arch=a; // architecture e.g. for iobuffer + arch=arch.lower(); + binding=b; // binding e.g. use entiy work.xxx(bev) + binding=binding.lower(); + confVhdl=config; // configuration foo is bar + compSpec=cs; + isInlineConf=false; // primary configuration? + isLeaf=leaf; + }; + + QCString confVhdl; + QCString arch; + QCString binding; + QCString compSpec; + int level; + bool isLeaf; + bool isInlineConf; +}; + +void vhdlscanFreeScanner(); +QList& getVhdlConfiguration(); +QList& getVhdlInstList(); + +#endif diff --git a/src/vhdlscanner.h b/src/vhdlscanner.h deleted file mode 100644 index 9c98087..0000000 --- a/src/vhdlscanner.h +++ /dev/null @@ -1,82 +0,0 @@ -/****************************************************************************** - * - * - * - * Copyright (C) 1997-2014 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 -#include -#include -#include - -#include -#include -#include -#include - -#include "entry.h" -#include "memberlist.h" - -class Entry; -class ClassSDict; -class FileStorage; -class ClassDef; -class MemberDef; -class QStringList; - - -/** \brief VHDL parser using state-based lexical scanning. - * - * This is the VHDL language parser for doxygen. - */ -class VHDLLanguageScanner : public ParserInterface -{ - public: - virtual ~VHDLLanguageScanner() {} - void startTranslationUnit(const char *) {} - void finishTranslationUnit() {} - void parseInput(const char * fileName, - const char *fileBuf, - Entry *root, - bool sameTranslationUnit, - QStrList &filesInSameTranslationUnit); - bool needsPreprocessing(const QCString &extension); - void parseCode(CodeOutputInterface &codeOutIntf, - const char *scopeName, - const QCString &input, - SrcLangExt lang, - 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, - bool collectXRefs=TRUE - ); - void resetCodeParserState(); - void parsePrototype(const char *text); -}; - -void vhdlscanFreeScanner(); - -//--------------------------------------------------------------------------------- - -#endif diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l deleted file mode 100644 index d411325..0000000 --- a/src/vhdlscanner.l +++ /dev/null @@ -1,2052 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 1997-2014 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 VHDL subset - * written by M. Kreis - * supports VHDL-87/93 - * does not support VHDL-AMS - ******************************************************************************/ -%{ - - -// global includes -#include -#include -#include -#include -#include -#include -#include - -/* --------------------------------------------------------------- */ - -// local includes -#include "vhdlscanner.h" -#include "vhdlcode.h" -#include "vhdldocgen.h" -#include "message.h" -#include "config.h" -#include "doxygen.h" -#include "util.h" -#include "language.h" -#include "commentscan.h" -#include "index.h" -#include "definition.h" -#include "searchindex.h" -#include "outputlist.h" -#include "arguments.h" -/* --------------------------------------------------------------- */ - -#define YY_NEVER_INTERACTIVE 1 -#define YY_NO_INPUT 1 - -//#define theTranslator_vhdlType theTranslator->trVhdlType -#define theTranslator_vhdlType VhdlDocGen::getVhdlType - -static QStringList qrl; -static int openGroups; -static ParserInterface *g_thisParser; -static const char * inputString; -static int inputPosition; -static int inputLen; -static int startComment = 0; -static QFile inputFile; -static QCString inbuf; -static Entry* global_root = 0; -static Entry* current_root = 0; -static Entry* current = 0; -static Entry* previous = 0; -static Entry* functionEntry = 0; -static Entry* lastEntity = 0; -static Entry* lastCompound = 0; -static int genPort = 0; -static QCString yyFileName; -static int iFuncLine = 1; -static bool g_inputFromFile ; -static bool g_lexInit = FALSE; -static int isBody=0; -static int isFunc=0; -static int yyLineNr = 1; -static char * g_buf = 0; -static uint g_bufSize = 0; -static int iTextCounter = 0; -static int iCounter = 0; -static int bropen = 0; -static int scantype = 0; -static int g_lastCommentContext = 0; -static bool docBlockAutoBrief; -static char docBlockTerm; -static int iDocLine = -1; -static Entry gBlock; -static int num_chars; - -//#define YY_A_INTERACTIVE 1 -#define YY_NEVER_INTERACTIVE 1 -//----------------------------------------------------------------------------- -#define YY_USER_ACTION num_chars += yyleng; -static void parserInit(); -static void deleteSpecChars(char* str,char *buf); -static void handleCommentBlock(const QCString &doc,bool brief); -static void newEntry(); -static void initEntry(Entry *e); - -static int iCodeLen; - -static void makeInline() -{ - int diff=num_chars-iCodeLen; - assert(inputLen>iCodeLen+diff); - QCString par(&inputString[iCodeLen],diff); - int index=par.findRev("\\endcode"); - int tt=par.length()-par.find("\n",index); - QCString qc(&inputString[iCodeLen-tt],diff); - index=qc.findRev("--!"); - if (index<=0) return; - par=qc.left(index); - /* - fprintf(stderr,"\n-------------------------------------------------------------------------------- "); - fprintf(stderr,"\n bytes since %d %d \n %s",num_chars,iCodeLen,par.data()); - fprintf(stderr,"\n-------------------------------------------------------------------------------- "); - */ - gBlock.doc=par; - gBlock.section=Entry::VARIABLE_SEC; - gBlock.spec=VhdlDocGen::MISCELLANEOUS; - gBlock.fileName = yyFileName; - gBlock.endBodyLine=yyLineNr-1; - Entry *temp=new Entry(gBlock); - if (lastCompound) - lastCompound->addSubEntry(temp); - else if (lastEntity) - lastEntity->addSubEntry(temp); - else - { - temp->type="misc"; // global code - current_root->addSubEntry(temp); - } - - gBlock.reset(); - -}// makeInline - -static void addSubEntry(Entry* root, Entry* e) -{ - if (e==0 || root==0) return; - //if (isPrevDoc) - //{ - // e->brief=prevDocEntry.brief; - // e->briefLine=prevDocEntry.briefLine; - // prevDocEntry.reset(); - // isPrevDoc=FALSE; - //} - root->addSubEntry(e); -} - -static void bufferClear() -{ - int j; - for (j=0;j g_bufSize) - { - char *pTmp = (char*)realloc(g_buf,iCounter+llen+2048); - if (pTmp) - { - g_buf = pTmp; - } - else - { - fprintf(stderr,"\n not enough memory for realloc\n"); - return; - } - } - while (llen>0) - { - g_buf[iCounter]=*word++; - iCounter++; - llen--; - } - g_buf[iCounter]='\0'; -} - -static void getBufText(QCString& qc,int start) -{ - while (start < iCounter) - { - qc+=(g_buf[start]); - start++; - } -} - -static void lineCount() -{ - for ( const char* c = yytext ; *c ; ++c ) - { - yyLineNr += (*c == '\n') ; - } -} - -static void deleteSpecChars(char* str,char *buf) -{ - while (*str) - { - if ((*str == '\t') || (*str == '\n') || (*str == '\r') || (*str == ' ')) - { - str++; - } - else - { - *buf++ = *str++; - } - } - *buf='\0'; -} - -static void getType(Entry* p,char* text) -{ - QCString name(text); - name=name.stripWhiteSpace(); - if (qstricmp(name.data(),"signal" )==0) - { - p->spec=VhdlDocGen::SIGNAL; - } - else if (qstricmp(name.data(),"type" )==0) - { - p->spec=VhdlDocGen::TYPE; - } - else if (qstricmp(name.data(),"subtype" )==0) - { - p->spec=VhdlDocGen::SUBTYPE; - } - else if (qstricmp(name.data(),"constant" )==0) - { - p->spec=VhdlDocGen::CONSTANT; - } - else if (qstricmp(name.data(),"attribute" )==0) - { - p->spec=VhdlDocGen::ATTRIBUTE; - } - else if (qstricmp(name.data(),"function" )==0) - { - p->spec=VhdlDocGen::FUNCTION; - } - else if (qstricmp(name.data(),"procedure" )==0) - { - p->spec=VhdlDocGen::PROCEDURE; - } - else if (qstricmp(name.data(),"units" )==0) - { - p->spec=VhdlDocGen::UNITS; - } - else if (name.contains("shared",false) && name.contains("variable",false)) - { - p->spec=VhdlDocGen::SHAREDVARIABLE; - } - else if (qstricmp(name.data(),"file" )==0) - { - p->spec=VhdlDocGen::VFILE; - } - else if (qstricmp(name.data(),"group" )==0) - { - p->spec=VhdlDocGen::GROUP; - } - else if (qstricmp(name.data(),"alias" )==0) - { - p->spec=VhdlDocGen::ALIAS; - } - else - { - err("wrong type"); - } - p->section=Entry::VARIABLE_SEC; -} - -//------------------------------------------------------------------------- - -/* - * adds signals found in entities|records|units - */ - -static void addSignals(const char* str,int line, Entry *e,const char *comment=0) -{ - //printf("===> addSignals (%s) comment='%s'\n",str,comment); - QList ql; - QCString bufio; - ql.setAutoDelete(TRUE); - - VhdlDocGen::getSigName(ql,str,bufio); - int count = ql.count(); - - QCString brief = current->brief; - QCString doc = current->doc; - Entry *tmpEntry = current; - current = new Entry; - initEntry(current); - handleCommentBlock(comment,TRUE); - if (!current->brief.isEmpty()) - { - if (doc.isEmpty()) - { - doc = brief; - } - else if (!brief.isEmpty()) - { - doc = brief + "

" + doc; - } - brief = current->brief; - } - delete current; - current = tmpEntry; - current->brief.resize(0); - current->doc.resize(0); - - if (genPort!=3) // not a unit - { - for (int k=1;kdata(),ql.at(k)->data()); - Entry *pTemp=new Entry; - initEntry(pTemp); - pTemp->startLine = line; - pTemp->bodyLine = line; - pTemp->name = ql.at(k)->data(); - pTemp->section = Entry::VARIABLE_SEC; - pTemp->brief = brief; - pTemp->doc = doc; - pTemp->mGrpId = current->mGrpId; // copy member group id - QCString stSpec = ql.at(0)->data(); - if (genPort==1) // found port - { - pTemp->spec = VhdlDocGen::PORT; - stSpec.stripPrefix(bufio.data()); - stSpec=stSpec.stripWhiteSpace(); - pTemp->args = stSpec; - pTemp->type = bufio; - addSubEntry(e,pTemp); - } - else if (genPort==2) // found record - { - pTemp->spec = VhdlDocGen::RECORD; - pTemp->type = stSpec; - pTemp->name.prepend(VhdlDocGen::getRecordNumber()); - delete current; - current = new Entry(*pTemp); // make a deep copy of pTemp - newEntry(); // add it to lastCompound and make a new current - delete pTemp; - } - else - { - pTemp->spec = VhdlDocGen::GENERIC; - pTemp->type = stSpec; - addSubEntry(e,pTemp); - } - }// for - } - else // found a unit - { - Entry *pTemp=new Entry; - initEntry(pTemp); - QCString tt(str); - QStringList ql=QStringList::split("=",tt,FALSE); - pTemp->spec = VhdlDocGen::UNITS; - pTemp->section = Entry::VARIABLE_SEC; - pTemp->startLine = line; - pTemp->bodyLine = line; - pTemp->brief = brief; // adds brief description to the unit member - pTemp->doc = doc; // adds doc to the unit member - pTemp->type = ql[1].utf8(); - pTemp->name = ql[0].utf8().stripWhiteSpace(); - pTemp->name.prepend(VhdlDocGen::getRecordNumber()); - delete current; - current = new Entry(*pTemp); // make a deep copy - newEntry(); // add it to lastCompound - delete pTemp; - } -} - -/* - * this function parses a process prototype - * and adds the signal to the process - */ - -static void parseProcessProto() -{ - QStringList ql; - QCString qcs; - bool sem=FALSE; - //Entry* ppEntry=new Entry; - //ppEntry->fileName=yyFileName; - //processEntry=ppEntry; - QCString name; - scantype=0; - getBufText(qcs,0); - if (qcs.contains('(') != qcs.contains(')')) return; - VhdlDocGen::deleteAllChars(qcs,'\n'); - VhdlDocGen::parseProcessProto(qcs,name,ql); - current->section=Entry::FUNCTION_SEC; - //current->stat=TRUE; - current->spec=VhdlDocGen::PROCESS; - current->startLine=iFuncLine; - current->bodyLine=iFuncLine; - current->fileName=yyFileName; - if (!name.isEmpty()) - { - current->name=name.stripWhiteSpace(); - } - else // found an anonymous process, so we add a generated name - { - current->name=VhdlDocGen::getProcessNumber(); - } - - current->args+=" ( "; - if (!ql.isEmpty()) - { - QValueList::Iterator iter = ql.begin(); - for ( ; iter != ql.end(); ++iter) - { - if (sem) - { - current->args+=','; - } - Argument *arg=new Argument; - arg->name=(*iter).utf8().stripWhiteSpace(); - current->argList->append(arg); - current->args+=(*iter).utf8(); - sem = TRUE; - } - } - current->args+=" ) "; - bufferClear(); -}//parseProcessProto - - -/* - * parses a function|procedure protoype - */ - -static void parseFunctionProto() -{ - QCString name,ret,qcs,temp; - bool sem=FALSE; - QList ql; - ql.setAutoDelete(TRUE); - getBufText(qcs,0); - if (qcs.contains('(') != qcs.contains(')')) - return; // function without a prototype - if (qcs.contains("function",FALSE)==0 && qcs.contains("procedure",FALSE)==0) - return; - qcs=qcs.stripWhiteSpace(); - temp=qcs.lower(); - if (temp.stripPrefix("impure")) - { - current->exception="impure"; - qcs=qcs.remove(0,6); - } - else if (temp.stripPrefix("pure")) - { - current->exception="pure"; - qcs=qcs.remove(0,4); - } - - VhdlDocGen::parseFuncProto(qcs.data(),ql,name,ret); - //printf("parseFuncProto(%s)=%s,%s\n",qcs.data(),name.data(),ret.data()); - VhdlDocGen::deleteAllChars(name,';'); - current->name=name; - current->startLine=iFuncLine; - current->bodyLine=iFuncLine; - - int count = ql.count(); - - current->args+" ( "; - for (int k=0;kargs+=","; - } - Argument *arg=new Argument; - Argument *hh=(Argument*)ql.at(k); - arg->name=hh->name; - arg->type=hh->type; - arg->defval=hh->defval; - arg->attrib=hh->attrib; - current->argList->append(arg); - current->args+=hh->name; - sem=TRUE; - } - current->args+" )"; - - if (!ret.isEmpty()) - current->spec=VhdlDocGen::FUNCTION; - else - current->spec=VhdlDocGen::PROCEDURE; - - current->section=Entry::FUNCTION_SEC; - current->type=ret; - //addSubEntry(ee,ppEntry); - if (lastCompound) - { - lastCompound->addSubEntry(current); - current = new Entry; - initEntry(current); - } - else - { - newEntry(); - } - bufferClear(); -}//parseFunctionProto - -static Entry* getEntryAtLine(const Entry* ce,int line) -{ - EntryListIterator eli(*ce->children()); - Entry *found=0; - Entry *rt; - for (;(rt=eli.current());++eli) - { - if (rt->bodyLine==line) - { - found=rt; - } // if - if (!found) - { - found=getEntryAtLine(rt,line); - } - } - return found; -}// getEntryAtLine - -//------------------------------------------------------------------------- - -static void parserInit() -{ - iCounter=0; - iTextCounter=0; - yyLineNr=1; - current=0; - previous=0; - isFunc=0; - isBody=0; - scantype=0; - lastCompound=0; - lastEntity=0; - bropen=0; - openGroups=0; - iDocLine=-1; - qrl.clear(); - num_chars=0; - - if (!g_lexInit) - { - VhdlDocGen::init(); - } - - g_bufSize=inputFile.size()+1024; - if (g_buf==0) free(g_buf); - g_buf=(char*)(calloc(g_bufSize,sizeof(char))); - - if (g_buf==0) - { - fprintf(stderr,"\n not enough memory"); - return; - } - g_buf[g_bufSize-1]='\0'; -} - -bool VHDLLanguageScanner::needsPreprocessing(const QCString &) -{ - return FALSE; -} - - -void VHDLLanguageScanner::resetCodeParserState() -{ - -} - -#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; - if (g_inputFromFile) - { - c = inputFile.readBlock(buf,max_size); - if (c==-1) yy_fatal_error("input in flex scanner failed"); - } - else - { - while ( c < max_size && inputString[inputPosition] ) - { - *buf = inputString[inputPosition++] ; - c++; - buf++; - } - } - return c; -} - - - -%} - - - /* start command character */ - /* -------------- VHDL SECTION -----------------------------------*/ - -B [ \t] -CR [\r\n] -BR [ \t\n\r] -DIGIT [0-9] -LOWER_CASE_LETTER [a-z] -UPPER_CASE_LETTER [A-Z] -LETTER [a-zA-Z_0-9] -SPACE_CHARACTER [ \t] -SPECIAL_CHARACTER [#&'()*+,\-\./:;<=>_|] -OTHER_SPECIAL_CHARACTER [~!$§%?@\[\\\]^{}] -BASIC_GRAPHIC_CHARACTER {UPPER_CASE_LETTER}|{DIGIT}|{SPECIAL_CHARACTER}|{SPACE_CHARACTER} -GRAPHIC_CHARACTER {BASIC_GRAPHIC_CHARACTER}|{LOWER_CASE_LETTER}|{OTHER_SPECIAL_CHARACTER} -EXTENDED_CHARACTER [\\]{GRAPHIC_CHARACTER}*[\\] - -NAME ({LETTER}[a-zA-Z0-9_.]*)|{EXTENDED_CHARACTER} -STRING_LITERAL \"{GRAPHIC_CHARACTER}*\" -FUNCNAME ([a-zA-Z"][*+\-_a-zA-Z0-9"\/=<>]*)|{EXTENDED_CHARACTER} -DIGITS [0-9]+|[0-9]+"."[0-9]+|[0-9]+"#"[0-9_a-fA-F\+\.]+"#" -COMMENT "--"[^\n]* -LABELID [a-z_A-Z][^\;]*";"({B}*{COMMENT})* -PROTO [ (]* -TEXTT "--"[^\/\@\*\#][^\n]* -PROC ("function"|"procedure") -ENDE ({BR}*("end"){BR}*{PROC}*{BR}*[;]{1}) -ENDEFF ("if"|"case"|"loop"|"generate"){BR}*[;] -ENDE3 ({BR}*("end"){BR}*{PROC}*{BR}*{FUNCNAME}{BR}*[;])|{ENDE} -ENDFUNC {B}*"end"{BR}*{PROC}*{BR}*{FUNCNAME}{BR}*[;] -FUNCIMPURE "impure"|"pure" -FUNCPROC ^{B}*{FUNCIMPURE}*{BR}*("function"|"procedure"){B}* -ARCHITECTURE ("architecture"){BR}+{NAME}{BR}*("of") - /* Removed due to bug 538239 - POST "postponed" - PROCESS ({BR}*{FUNCNAME}{B}*[:]{BR}*({POST}{BR}+)?("process"){BR}*{PROTO})|("process"){BR}*("("){BR}*{PROTO}|[^a-zA-Z]("process"){CR}|[^a-zA-Z]("process"){BR}+("is") - */ -PROCESS ({B}*{FUNCNAME}{B}*:{BR}*)?({B}*("postponed"){BR}+)?{B}*("process"){BR}*{PROTO} - -ENDPROCESS ("end"){BR}*("postponed")*("process"){BR}*{FUNCNAME}*{BR}*[;] -LIBUSE ^{B}*("use"|"library"){BR}+ -ENTITY ^{B}*("component"|"entity"|"package"){BR}+ -PBODY ("package"){B}+("body"){BR}+{NAME} -SHARED ("shared"){BR}+("variable") -SIGTYPES ^{B}*({SHARED}|"alias"|"file"|"group"|"subtype"|"type"|"constant"|"attribute"|"signal"|"units"){BR}+ -CONFIG ("configuration"){BR}+{NAME}{BR}*("of"){BR}+{NAME}{BR}+"is" - -ALLTYPESMAP {B}*[_a-zA-ZA_Z0-9.() ]*{B}* -MAPCOMPONENT ({ALLTYPESMAP}{BR}*[:]{BR}*("component"|"configuration")*{ALLTYPESMAP}{BR}*{TEXTT}*{BR}*("port"|"generic"){BR}*("map"){BR}*("("){1}) -MAPCOMPONENT1 ({ALLTYPESMAP}{BR}*[:]{BR}*("entity"){BR}*{ALLTYPESMAP}{BR}*("port"|"generic"){BR}*("map"){BR}*("("){1}) - -BRACEOPEN [(]{1} -BRACECLOSE [)]{1} - -ALLID [^;()\t ] - -/* VHDL 2001 */ -ENDPROTECTED ("end"{BR}+"protected"{BR}+{NAME}{BR}*";")|("end"{BR}+"protected"{BR}*";") -ENDPROTECEDBODY "end"{BR}+"protected"{BR}+"body"{BR}+{NAME} - - -%option noyywrap - - /* language parsing states */ - -%x Start -%x Comment -%x FindTypeName -%x ParseType -%x ParseRecord -%x ParseUnits -%x ParseProcess -%x ParseFunc -%x FindName -%x FindEntityName -%x FindGenPort -%x FindTypes -%x FindSigName -%x FindFuncName -%x FindBegin - -%% - -{ENDPROTECTED}|{ENDPROTECEDBODY} { - lineCount(); -} - - - -{CONFIG} { // found configuration - - QCString qcs(vhdlscannerYYtext); - current->name=VhdlDocGen::getIndexWord(qcs,1); - current->type=VhdlDocGen::getIndexWord(qcs,3); - current->startLine=yyLineNr; - current->bodyLine=yyLineNr; - current->section=Entry::VARIABLE_SEC; - current->spec=VhdlDocGen::CONFIG; - current->args="configuration"; - newEntry(); - BEGIN(Start); -} - -{SIGTYPES} { // found type constant|type|attribute and so on.. - bropen=0; - lineCount(); - - bufferClear(); - //pEntry=current; - getType(current,yytext); - current->bodyLine=yyLineNr; - if (current->spec==VhdlDocGen::UNITS) - { - //addSubEntry(current,pEntry); - current->startLine=yyLineNr; - current->bodyLine=yyLineNr; - newEntry(); // adds the unit to the lastCompound - genPort=3; - BEGIN(ParseRecord); - } - else - { - BEGIN(FindTypeName); - } - } - -{ARCHITECTURE} { //found architecure - lineCount(); - bropen=0; - bufferClear(); - isBody=0; - lastCompound = current; - QCString curName=VhdlDocGen::getIndexWord(yytext,1); - current->section=Entry::CLASS_SEC; //Entry::CLASS_SEC; - current->spec=VhdlDocGen::ARCHITECTURE; - current->protection=Private; - current->name=curName; - current->fileName=yyFileName; - current->startLine=yyLineNr; - current->bodyLine=yyLineNr; - //printf("-> Architecture at line %d\n",yyLineNr); - BEGIN(FindName); -} - - -{PROCESS} { //found process - lineCount(); - iFuncLine=yyLineNr; - bropen=0; - //printf("--> Process: line=%d\n",yyLineNr); - bufferClear(); - addText(yytext,yyleng); - QCString qcs(yytext); - if (qcs.contains('(')) - { - bropen=1; - scantype=2; - BEGIN(ParseType); - } - else - { - // iFuncLine--; - parseProcessProto(); - BEGIN(ParseProcess); - } -} - -{LIBUSE}{BR}* { // found library or package - bropen=0; - bufferClear(); - isBody=0; - QCString qcs=QCString(yytext); - // lowerString(qcs); - qcs=qcs.stripWhiteSpace(); - if (qstricmp(qcs.data(),"use")==0) - { - current->spec=VhdlDocGen::USE; - current->type="package"; - } - else - { - current->spec=VhdlDocGen::LIBRARY; - current->type="library"; - } - current->section=Entry::VARIABLE_SEC; - current->bodyLine=yyLineNr; - lineCount(); - BEGIN(FindName); -} - -{FUNCPROC} { // found a new function|procedure - lineCount(); - iFuncLine=yyLineNr; - bropen=0; - bufferClear(); - isFunc=1; - addText(yytext,yyleng); - BEGIN(FindFuncName); -} - -{ENTITY} { // found entity|component|package - lineCount(); - //printf("--> Entity at line %d\n",yyLineNr); - - bropen=0; - bufferClear(); - QCString word = QCString(yytext).lower().stripWhiteSpace(); - - if (word=="entity") - { - isBody=0; - scantype=0; - lastCompound=0; - current->section=Entry::CLASS_SEC; - current->spec=VhdlDocGen::ENTITY; - current->protection=Public; - current->bodyLine=yyLineNr; - current->fileName=yyFileName; - lastEntity = current; - } - else if (word=="component") - { - current->section=Entry::VARIABLE_SEC; - // current->stat=TRUE; - current->spec=VhdlDocGen::COMPONENT; - current->bodyLine=yyLineNr; - scantype=1; - } - else if (word=="package") - { - isBody=0; - scantype=0; - lastCompound = current; - current->section=Entry::NAMESPACE_SEC; - current->spec=VhdlDocGen::PACKAGE; - current->protection=Package; //VhdlDocGen::PACKAGE; - current->bodyLine=yyLineNr; - current->fileName=yyFileName; - } - else - err("\n found wrong component at line [%d]",yyLineNr); - - BEGIN(FindEntityName); -} - -{MAPCOMPONENT}|{MAPCOMPONENT1} { // found component instantiation - - // lineCount(); - QCString type; - QCString tt(yytext); - QRegExp regg("[\\s:.()-]"); - QStringList qsl=QStringList::split(regg,tt,false); - - // consider upper/lower-case letters - QStringList qsltemp=QStringList::split(regg,tt.lower(),false); - int index=qsltemp.findIndex(QCString("entity"))+1; - index+=qsltemp.findIndex(QCString("component"))+1; - index+=qsltemp.findIndex(QCString("configuration"))+1; - int len=qsltemp.count(); - - current->spec=VhdlDocGen::COMPONENT_INST; - current->section=Entry::VARIABLE_SEC; - current->startLine=yyLineNr; - current->bodyLine=yyLineNr; - - if (index!=0 && tt.contains(')')==0) // found component instantiation xxx: configuration/component/entity yyy - { - current->type=qsl[len-3].utf8(); - } - else if (index!=0 && tt.contains(')')) // found component instantiation xxx: entity www.yyy(zzz) - { - current->type=qsl[len-4].utf8(); - } - else - { - current->type=qsl[1].utf8(); // found component instantiation xxx:yyy - } - - current->name=qsl[0].utf8(); -#if 0 - if (lastCompound) - { - if (!VhdlDocGen::foundInsertedComponent(current->type,lastCompound)) - { - printf("** %s: new BaseInfo(%s)\n",lastCompound->name.data(),current->type.data()); - BaseInfo *bb=new BaseInfo(current->type,Public,Normal); - lastCompound->extends->append(bb); - } - lastCompound->addSubEntry(current); - current = new Entry; - initEntry(current); - } - else -#endif - { - newEntry(); - } - lineCount(); - -} - -{CR}* { - lineCount(); - addText(yytext,yyleng); - BEGIN(Start); -} - -[^;()] { - // eat process body - lineCount(); - BEGIN(ParseProcess); -} - -{ENDPROCESS} { // find end of process - lineCount(); - current->endBodyLine=yyLineNr; - //printf("Process: start=%d end=%d\n",current->bodyLine,current->endBodyLine); - if (lastCompound) - { - lastCompound->addSubEntry(current); - current = new Entry; - initEntry(current); - } - else - { - newEntry(); - } - BEGIN(Start); -} - - -{BR}* { - lineCount(); -} - -{B}*[a-z_][^\n;]* { // parse record|unit body - lineCount(); - QCString zz(yytext); - addSignals(zz.data(),yyLineNr,current); - BEGIN(ParseUnits); -} - -{NAME} { // found entity|architecture|component name - lineCount(); - - QCString qcs(yytext); - qcs=qcs.stripWhiteSpace(); - if (current->spec==VhdlDocGen::USE || current->spec==VhdlDocGen::LIBRARY) - { - int j=qcs.length(); - int i=qcs.find("."); - if (i>0) - qcs=qcs.right(j-i-1); - i=qcs.find("."); - if (i>0) - qcs=qcs.left(i); - /* - -- Consider the case we have more than one entity in one file.Each entity has its own package/library - -- declaration. In this case package yyy will be added [with newEntry()] to architecture aaa !! instead to entity - -- bbb. We must place these constructs to current_root and the function mapLibPackage() will finish the rest. - - -- package xxx; - -- entity aaa - -- .... - -- end entity aaa; - -- architecture aaa - -- ... - -- end architecture aaa; - -- package yyy; - -- entity bbb; - */ - - current->name=qcs; - Entry *copy=new Entry(*current); - current->reset(); - addSubEntry(current_root,copy); // insert into entry list with mapLibPackage() - } - else if (current->spec==VhdlDocGen::ARCHITECTURE) - { - //current->name+=qcs.lower(); - current->name.prepend(qcs+"::"); - - //if (lastEntity) - //{ - // inherit private inheritance relation between entity and architecture - //if (!VhdlDocGen::foundInsertedComponent(current->name,lastEntity)) - //{ - // BaseInfo *bb=new BaseInfo(current->name,Private,Normal); - // lastEntity->extends->append(bb); - //} - //} - - } - else if (current->spec==VhdlDocGen::PACKAGE_BODY) - { - current->name+=qcs; - } - else - { - current->name+=qcs; - } - if (!(current->spec==VhdlDocGen::USE || current->spec==VhdlDocGen::LIBRARY)) - newEntry(); - - BEGIN(Start); -} - -{FUNCNAME} { // found name of a process|function|procedure - lineCount(); - - addText(yytext,yyleng); - BEGIN(ParseType); -} - -{NAME}{BR}* { - lineCount(); - current->name=QCString(yytext); - BEGIN(ParseType); -} - - -("is"){BR}+("protected"){BR}+("body") {lineCount(); BEGIN(Start); } - -("is"){BR}+("protected"){BR}+ { - lineCount(); - current->section=Entry::VARIABLE_SEC; - current->spec=VhdlDocGen::TYPE; - current->type="protected"; - newEntry(); - BEGIN(Start); -} - - - - -("is"){BR}*("record") { // find record - lineCount(); - if (isFunc) - { - BEGIN(Start); - } - - genPort=2; - current->section=Entry::VARIABLE_SEC; - current->spec=VhdlDocGen::RECORD; - addText(yytext,yyleng); - newEntry(); // adds the record to the last compound - BEGIN(ParseRecord); -} - -{BR}* { - lineCount(); - } - -("end"){BR}*("record"){BR}*{LETTER}*{BR}*[;]|("end"){BR}*("units"){BR}*[;] { - lineCount(); - genPort=0; - bufferClear(); - BEGIN(Start); -} - -[a-z_A-Z0-9][^\n;]*";"({B}*{COMMENT})* { // parse record body - lineCount(); - QCString comment; - QCString zz(yytext); - VhdlDocGen::deleteAllChars(zz,';'); //delete ; in unit construct - if (zz.contains("--!")) - { - QStringList ql=QStringList::split("--!",zz,FALSE); - comment = ql[1].utf8(); - zz = ql[0].utf8(); - } - else if (zz.contains("--")) - { - QStringList ql=QStringList::split("--",zz,FALSE); - zz = ql[0].utf8(); - } - initEntry(current); - addSignals(zz,yyLineNr,current,comment); - addText(yytext,yyleng); - BEGIN(ParseRecord); -} - -{BR}+("is"){BR}+|{BR}+("is"){B}*"--" { // found a new function in an architecture ? - addText(yytext,yyleng); - lineCount(); - QCString ttt; - bool bb=TRUE; - getBufText(ttt,0); - if (ttt.contains("--")) - { - unput('-');unput('-'); - VhdlDocGen::deleteCharRev(ttt,'-'); - VhdlDocGen::deleteCharRev(ttt,'-'); - } - if (ttt.contains('(') != ttt.contains(')')) - { - bb=FALSE; - } - bool ss = VhdlDocGen::isFunctionProto(ttt); - //printf("VhdlDocGen::isFunctionProto(%s)=%d\n",ttt.data(),ss); - if (ss && bb) - { - bufferClear(); - addText(ttt.data(),ttt.length()); - functionEntry=0; - //eFuncBody=new Entry; - ::parseFunctionProto(); - } - bufferClear(); - BEGIN(ParseType); -} - - -[^;()\t ] { - lineCount(); - addText(yytext,yyleng); - BEGIN(ParseType); -} - -{BRACEOPEN} { - lineCount(); - bropen++; - addText(yytext,yyleng); - BEGIN(ParseType); -} - -{BRACECLOSE} { - lineCount(); - bropen--; - addText(yytext,yyleng); - if (bropen==0 && scantype==2) // process - { - ::parseProcessProto(); - BEGIN(ParseProcess); - } // if - else - { - BEGIN(ParseType); - } -} - - -{ENDE}|{ENDFUNC} { // found end of function|process - QRegExp regg("[\\s;]"); - lineCount(); - QCString tt(yytext); - tt=tt.lower(); - 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; - bufferClear(); - if (index==0) - { - if (isFunc) - { - Entry* pFunc=getEntryAtLine(current_root,iFuncLine); - if (pFunc && pFunc->section==Entry::FUNCTION_SEC) - { - pFunc->endBodyLine=yyLineNr; - } - isFunc=0; - BEGIN(Start); - } - } -} - -[^;()] { - // eat process body - lineCount(); - BEGIN(ParseFunc); - } - -{ENDE3} { - QRegExp regg("[\\s;]"); - lineCount(); - QCString tt(yytext); - tt=tt.lower(); - 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; - bufferClear(); - if (index==0 && isFunc) - { - Entry* pFunc=getEntryAtLine(current_root,iFuncLine); - if (pFunc && pFunc->section==Entry::FUNCTION_SEC) - { - pFunc->endBodyLine=yyLineNr; - } - isFunc=0; - BEGIN(Start); - } -} - -";" { - lineCount(); - addText(yytext,yyleng); - if (bropen==0 && !(isFunc==1 && isBody==1) ) - { - if (isFunc) - { - parseFunctionProto(); - bufferClear(); - if (lastCompound && lastCompound->spec==VhdlDocGen::PACKAGE) - { - isFunc=0; - BEGIN(Start); - } - else - { - BEGIN(ParseFunc); - } - }//if - else - { - QCString qcs; - getBufText(qcs,0); - qcs=qcs.stripWhiteSpace(); - current->section=Entry::VARIABLE_SEC; - current->type+=qcs.data(); - - if ((current->spec==VhdlDocGen::SIGNAL || - current->spec==VhdlDocGen::CONSTANT || - current->spec==VhdlDocGen::TYPE || - current->spec==VhdlDocGen::SUBTYPE || - current->spec==VhdlDocGen::SHAREDVARIABLE - ) && - qcs.stripPrefix(",")) - { - QList ql; - ql.setAutoDelete(TRUE); - QCString buffer; - if (current->spec==VhdlDocGen::SUBTYPE || - current->spec==VhdlDocGen::TYPE - ) - { - VhdlDocGen::getSigTypeName(ql,qcs.data(),buffer); - } - else - { - VhdlDocGen::getSigName(ql,qcs.data(),buffer); - } - QCString doc = current->doc; - QCString brief = current->brief; - if (ql.count()>0) - { - for (uint j=1;jtype += ql.at(0)->data(); - ppt->section = Entry::VARIABLE_SEC; - ppt->spec = current->spec; - ppt->name += ql.at(j)->data(); - ppt->bodyLine = yyLineNr; - ppt->startLine = yyLineNr; - ppt->brief = brief; - ppt->doc = doc; - if (lastCompound) - { - lastCompound->addSubEntry(ppt); - } - else - { - current->addSubEntry(ppt); - } - } - current->type=ql.at(0)->data(); - ql.clear(); - } - } - if (lastCompound) - { - lastCompound->addSubEntry(current); - current = new Entry; - initEntry(current); - } - else - { - newEntry(); - } - isFunc=0; - bufferClear(); - BEGIN(Start); - } - } - else - { - BEGIN(ParseType); - } -} - -{BR}* { - lineCount(); - addText(yytext,yyleng); - BEGIN(ParseType); -} - -{NAME} { // found name of an entity/architecture/package - lineCount(); - QCString qcs(yytext); - qcs=qcs.stripWhiteSpace(); - qcs=qcs.lower(); - if (qcs=="body") // found package body - { - current->spec=VhdlDocGen::PACKAGE_BODY; - current->section=Entry::CLASS_SEC; - current->protection=Protected; - current->name+=QCString("_"); - isBody=1; - BEGIN(FindName); - } - else if (scantype==1) // found a component - { - QCString qq(yytext); - qq=qq.stripWhiteSpace(); - //qq=qq.lower(); - - current->name=qq; - qq=qq.lower(); - if (lastCompound) - { - if (lastCompound->spec==VhdlDocGen::PACKAGE) - { - if (!VhdlDocGen::foundInsertedComponent(qq,lastCompound)) - { - BaseInfo *bb=new BaseInfo(qq,Private,Normal); - lastCompound->extends->append(bb); - } - } - - lastCompound->addSubEntry(current); - current = new Entry; - initEntry(current); - } - else - { - newEntry(); - } - BEGIN(Start); - } - else - { - QCString qq(yytext); - qq=qq.stripWhiteSpace(); - current->name=qq; - newEntry(); - //QCString qreal=QCString(yytext); - BEGIN(Start); - } -} - -{B}*("generic"|"port"){BR}*[(]+ { // found generic|port in entity - QCString genp(yyleng+1); - deleteSpecChars(yytext,genp.data()); - VhdlDocGen::deleteCharRev(genp,'('); - - if (qstricmp(genp.data(),"port" )==0) - { - genPort=1; - } - else - { - genPort=0; - } - - bropen=1; - bufferClear(); - lineCount(); - BEGIN(FindSigName); -} - -{BRACECLOSE} { - lineCount(); - bropen--; - addText(yytext,yyleng); - if (bropen==0) - { - bufferClear(); - BEGIN(Start); - } - else - { - BEGIN(FindSigName); - } -} - -{LABELID} { // found signals in entity - QCString line(yytext); - - // note that line can be something like: - // "var1, var2, var3 : in std_logic_vector(8 downto 0); --! Some comment" - - // but also - // "var4 --! Some comment - // );" - // which marks the end of a port - - // and also - // "-- Some comment - // var1 : in std_logic;" - - //printf("--> labelid='%s'\n",line.data()); - QStringList ql; - QCString comment; - int openCount=line.contains('('); - int closeCount=line.contains(')'); - int semi = line.find(';'); - int pos = line.find("--"); - int pos1 = line.find("--!"); - if (pos!=-1 && pos signal: line='%s'\n",line.data()); - if (semi!=-1 && pos!=-1) - { - int eol = line.findRev('\n'); - //printf("pos=%d eol=%d\n",pos,eol); - if (eol>=pos+2) - { - QRegExp re("\\n[\\s]*--!"); // comment continuation - comment=line.mid(pos+2,eol-pos-2); - //printf("Comment: '%s'\n",comment.data()); - int p,l; - while ((p=re.match(comment,0,&l))!=-1) - { - comment.remove(p,l); - } - line=line.left(pos)+line.right(line.length()-eol); - } - else - { - comment=line.mid(pos+2); - line=line.left(pos); - } - comment.stripWhiteSpace(); - // must subtract "(" and ")" in comments because they are used for determining the - // end of a port/generic construct - openCount-=comment.contains('('); - closeCount-=comment.contains(')'); - if (!comment.stripPrefix("!")) // not a special comment - { - comment.resize(0); - } - } - else - { - //printf("no ; or --: pos=%d semi=%d\n",pos,semi); - } - int diff=openCount-closeCount; - if (diff<0) - { - VhdlDocGen::deleteCharRev(line,')'); - } - - if (scantype!=1) // not a component - { - addText(yytext,yyleng); - addSignals(line,yyLineNr,lastEntity,comment); - } - - lineCount(); - - if ((bropen+openCount-closeCount)==0) - { - bufferClear(); - BEGIN(Start); - } -} - - -{BRACEOPEN} { - lineCount(); - bropen++; - addText(yytext,yyleng); -} - - -{CR} { - lineCount(); - addText(yytext,yyleng); - //BEGIN(FindSigName); -} - - -<*>^{B}*("for ")[^;]* { - //printf("\n found for[%s] [%d]",yytext,yyLineNr); - lineCount(); -} - -<*>{DIGITS} { // found digit - addText(yytext,yyleng); - lineCount(); -} - -<*>{STRING_LITERAL} { - // Make sure string literals get transfered to the output - // We have to match these because the comment characters (--) - // can exist inside a string literal. - // We shouldn't have to call lineCount because newlines - // are not allowed inside string literals - addText(yytext,yyleng); -} - - /* -<*>{BR}*"--!"{B}*"@}" { // end group - if (current) - { - Entry *pg=new Entry; - addSubEntry(current,pg); - pg->startLine=yyLineNr; - pg->name="endgroup"; - } - lineCount(); -} - -<*>{BR}*"--!"{B}*"@{" { // start group - if (current) - { - Entry *pg=new Entry; - addSubEntry(current,pg); - pg->startLine=yyLineNr; - pg->name="startgroup"; - } - lineCount(); -} - */ - -<*>{BR}*"--!"[^{}\n][^\n]*\n/{B}*"--!" { // multi line comment - if (iDocLine==-1) iDocLine=yyLineNr; - // signal clk :in std_logic; --!@brief global clock - // --!@brief global reset - // signal reset:in std_logic; - // these two comments are detected as a multi line comment - QCString qc(yytext); - int len=qc.contains('\n')+yyLineNr-1; - - if (YY_START!=Comment) // Start of the comment block - { - bufferClear(); - iTextCounter=0; - startComment=yyLineNr; - g_lastCommentContext=YY_START; - } - - Entry* pTemp=getEntryAtLine(current_root,len); - if (pTemp) - { // found one line comment, add it to the entry on this line - pTemp->briefLine=yyLineNr; - pTemp->brief+=yytext; - VhdlDocGen::prepareComment(pTemp->brief); - } - else - { - addText(yytext,yyleng); - } - lineCount(); - BEGIN(Comment); -} - -^{B}*"--!"[^\n]* { - if (iDocLine==-1) iDocLine=yyLineNr; - addText(yytext,yyleng); - lineCount(); -} - -.|\n { - // found end of comment block - QCString qcs; - getBufText(qcs,iTextCounter); - VhdlDocGen::prepareComment(qcs); - int ii =qcs.find("\\code"); - if (ii>0) - { - iCodeLen=num_chars; - - gBlock.reset(); - int len=qcs.length(); - QCString name=qcs.right(len-ii); - name=VhdlDocGen::getIndexWord(name.data(),1); - if (!name) - gBlock.name="misc"+ VhdlDocGen::getRecordNumber(); - else - gBlock.name=name; - qcs=qcs.left(ii); - gBlock.startLine=yyLineNr+1; - gBlock.bodyLine=yyLineNr+1; - gBlock.brief+=qcs; - iTextCounter=0; - } - - if (ii==-1) - { - handleCommentBlock(qcs,FALSE); - } - bufferClear(); - unput(*yytext); - BEGIN(g_lastCommentContext); -} - -<*>"--!"[^\n]* { // one line comment - if (iDocLine==-1) iDocLine=yyLineNr; - QCString qcs(yytext); - int j=qcs.find("--!"); - qcs=qcs.right(qcs.length()-3-j); - bool isEndCode=qcs.contains("\\endcode"); - - if (isEndCode) - makeInline(); - //printf("--> handleCommentBlock line %d\n",yyLineNr); - Entry* pTemp=getEntryAtLine(current_root,yyLineNr); - - if (!isEndCode) - { - if (pTemp) - { - pTemp->briefLine=yyLineNr; - pTemp->brief+=qcs; - iDocLine=-1; - } - else - { - handleCommentBlock(qcs,TRUE); - } - } - - bufferClear(); -}// one line - - -<*>{COMMENT} { -} - -<*>\n { - lineCount(); - addText(yytext,yyleng); - // printf("\n new-line [%d]",yyLineNr); - BEGIN(Start); -} - -<*>{NAME} { - addText(yytext,yyleng); - lineCount(); -} - -<*>{B}* { - addText(yytext,yyleng); - lineCount(); -} - -<*>. { - addText(yytext,yyleng); - lineCount(); -} - - -%% - -static void initEntry(Entry *e) -{ - e->fileName = yyFileName; - e->lang = SrcLangExt_VHDL; - initGroupInfo(e); -} - -static void newEntry() -{ - // Add only enties/architectures/packages to root - // and signals to classes where they were found - // ENTITY dlatch_93 IS -- VHDL'93-Syntax !!! - // PORT (d, clk : IN bit; - // q, qbar : OUT bit); - // GROUP path IS (SIGNAL, SIGNAL); - // GROUP d_to_q : path (d, q); - // ATTRIBUTE propagation : time; - // END dlatch_93; - - if (current->spec==VhdlDocGen::ENTITY || - current->spec==VhdlDocGen::PACKAGE || - current->spec==VhdlDocGen::ARCHITECTURE || - current->spec==VhdlDocGen::PACKAGE_BODY) - { - current_root->addSubEntry(current); - } - else - { - if (lastCompound) - { - lastCompound->addSubEntry(current); - } - else - { - if (lastEntity) - { - lastEntity->addSubEntry(current); - } - else - { - current_root->addSubEntry(current); // should not happen! - } - } - } - previous = current; - current = new Entry ; - initEntry(current); -} - -static void handleCommentBlock(const QCString &doc,bool brief) -{ - int position=0; - bool needsEntry=FALSE; - Protection protection=Public; - int lineNr = iDocLine; - if (brief) - current->briefLine = iDocLine; - else - current->docLine = iDocLine; - - //printf("parseCommentBlock %p [%s]\n",current,doc.data()); - while (parseCommentBlock( - g_thisParser, - current, - doc, // text - yyFileName, // file - lineNr, // line of block start - brief, - docBlockAutoBrief, - FALSE, - protection, - position, - needsEntry - ) - ) - { - //printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position); - if (needsEntry) newEntry(); - } - if (needsEntry) - { - newEntry(); - } - - if (docBlockTerm) - { - unput(docBlockTerm); - docBlockTerm=0; - } - iDocLine=-1; -} - -#if 0 -/*! - * adds grouping to the entries - */ -static void mergeGrouping(const Entry* ce,int) -{ - EntryListIterator eli(*ce->children()); - Entry *rt; - for (;(rt=eli.current());++eli) - { - if (rt->section==Entry::GROUPDOC_SEC) - { - if (openGroups) - { - QCString tt=(QCString)qrl.last(); - if (!tt.isEmpty()) - { - rt->groups->append(new Grouping(tt.data(),Grouping::GROUPING_LOWEST)); - } - } - qrl.append(rt->name); - } - - if ((strcmp(rt->name.data(),"endgroup")==0) && !qrl.isEmpty()) - { - qrl.remove((QCString)qrl.last()); - openGroups--; - } - - if ((strcmp(rt->name.data(),"startgroup")==0)) - { - openGroups++; - } - - if (rt->section!=Entry::GROUPDOC_SEC && openGroups && !qrl.isEmpty()) - { - rt->groups->append(new Grouping(qrl.last().data(),Grouping::GROUPING_LOWEST)); - } - - mergeGrouping(rt,openGroups); - } -} -#endif - -/* - * adds the library|use statements to the next class (entity|package|architecture|package body - * library ieee - * entity xxx - * ..... - * library - * package - * enity zzz - * ..... - * and so on.. - */ - -static void mapLibPackage(const Entry* ce) -{ - Entry *lastComp=0; - while (TRUE) - { - bool found = FALSE; - Entry *rt=0; - //const QList *epp=ce->children(); - EntryListIterator eli(*ce->children()); - EntryListIterator eli1=eli; - for (;(rt=eli.current()),eli1=eli;++eli) - { - if (rt->spec==VhdlDocGen::LIBRARY || rt->spec==VhdlDocGen::USE) - // top level library or use statement - { - Entry *temp=0; - for (;(temp=eli1.current());++eli1) // find next entity - { - if (temp->spec==VhdlDocGen::ENTITY || temp->spec==VhdlDocGen::PACKAGE || temp->spec==VhdlDocGen::ARCHITECTURE || temp->spec==VhdlDocGen::PACKAGE_BODY) - { - Entry *ee=new Entry(*rt); //append a copy to entries sublist - temp->addSubEntry(ee); - found=TRUE; - rt->spec=-1; //nullify entry - rt->section=0; - lastComp=temp; - break; - } - }//for - if (lastComp && rt->spec) - { - Entry *ee=new Entry(*rt); //append a copy to entries sublist - lastComp->addSubEntry(ee); - found=TRUE; - rt->spec=-1; //nullify entry - rt->section=0; - } - }//if - }//for - if (!found) // nothing left to do - { - return; - } - }//while -}//MapLib - -#if 0 -/*! - * merges a brief descriptions to the next entry - */ -void mergeBrief(const Entry* ce) -{ - EntryListIterator eli(*ce->children()); - Entry *rt; - for (;(rt=eli.current());++eli) - { - - if (found && (!eMerge.brief.isEmpty() || !eMerge.doc.isEmpty())) - { - rt->doc+=eMerge.doc.data(); - rt->docLine=eMerge.docLine; - rt->brief+=eMerge.brief.data(); - rt->briefLine=eMerge.briefLine; - found=FALSE; - } - - if ((strcmp(rt->name.data(),"string")==0)) - { - eMerge.reset(); - eMerge.doc+=rt->doc.data(); - eMerge.docLine=rt->docLine; - eMerge.brief+=rt->brief.data(); - eMerge.briefLine=rt->briefLine; - - found=TRUE; - } - MergeBrief(rt); - } -} -#endif - - - -void vhdlscanFreeScanner() -{ -#if defined(YY_FLEX_SUBMINOR_VERSION) - if (g_lexInit) - { - vhdlscannerYYlex_destroy(); - } - - if (g_buf) - { - free(g_buf); - } - - g_buf=0; -#endif - -} - -void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root, - bool,QStrList&) -{ - inputFile.setName(fileName); - //uint jfile=inputFile.size(); - ::parserInit(); - yyFileName=QCString(fileName); - groupEnterFile(fileName,yyLineNr); - g_thisParser = this; - g_inputFromFile = FALSE; - inputPosition = 0; - assert(root!=0); - - inputString=fileBuf; - inputLen=strlen(fileBuf); - current_root = root; - global_root = root; - current=new Entry; - initEntry(current); - //current_root->name=QCString("XXX"); // dummy name for root - if (!inputFile.open(IO_ReadOnly)) - { - err("\n\n could not open file: %s !!\n\n",yyFileName.data()); - return ; - } - - if (g_lexInit) - { - vhdlscannerYYrestart(vhdlscannerYYin); - unput(' '); - BEGIN(Start); - } - vhdlscannerYYlex(); - g_lexInit=TRUE; - - free(g_buf); - g_buf=0; - - delete current; - current=0; - - groupLeaveFile(yyFileName,yyLineNr); - inputFile.close(); - - //mergeBrief(current_root); - //mergeGrouping(current_root,0); - mapLibPackage(current_root); -} - - -void VHDLLanguageScanner::parsePrototype(const char *text) -{ - // will be called when a \fn command is found in a comment block - - QCString ss,ret; - bool sem=FALSE; - bool func=FALSE; - QList qs; - qs.setAutoDelete(TRUE); - VhdlDocGen::parseFuncProto(text,qs,ss,ret,TRUE); - int count=qs.count(); - if (qstricmp(ret.data(),"function")==0) - { - func=TRUE; - } - if (count<1 && !func) - { - return; - } - Entry *pp = new Entry; - initEntry(pp); - pp->name=ss.stripWhiteSpace(); - pp->args+='('; - for (int j=0;jargs+=','; - } - - Argument *ars=(Argument*)(qs.at(j)); - Argument *arg=new Argument; - arg->attrib = ars->attrib; - arg->name = ars->name; - arg->type = ars->type; - pp->args+=ars->name.data(); - pp->args+=" "; - pp->args+=ars->type.data(); - pp->argList->append(arg); - sem=TRUE; - } - pp->args+=')'; - - if (!ret.isEmpty()) - pp->spec=VhdlDocGen::FUNCTION; - else - pp->spec=VhdlDocGen::PROCEDURE; - - if (pp->section == Entry::MEMBERDOC_SEC && pp->args.isEmpty()) - pp->section = Entry::VARIABLEDOC_SEC; - - pp->type=ret; - current_root->addSubEntry(pp); -} - -void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf, - const char *scopeName, - const QCString &input, - SrcLangExt lang, - bool isExampleBlock, - const char *exampleName, - FileDef *fileDef, - int startLine, - int endLine, - bool inlineFragment, - MemberDef *memberDef, - bool showLineNumbers, - Definition *searchCtx, - bool collectXRefs - ) -{ - (void)lang; - ::parseVhdlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName, - fileDef,startLine,endLine,inlineFragment,memberDef, - showLineNumbers,searchCtx,collectXRefs); -} - diff --git a/vhdlparser/CharStream.cc b/vhdlparser/CharStream.cc new file mode 100644 index 0000000..8cc17c3 --- /dev/null +++ b/vhdlparser/CharStream.cc @@ -0,0 +1,212 @@ +/* Generated By:JavaCC: Do not edit this line. CharStream.cc Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#include "CharStream.h" + +namespace { +template +void ArrayCopy(T* src, int src_offset, T* dest, int dest_offset, int len) { + for (int i = 0; i < len; i++) { + dest[dest_offset + i] = src[src_offset + i]; + } +} + +class StringReaderStream : public ReaderStream { + public: + StringReaderStream(const JAVACC_STRING_TYPE& str) : str_(str), cur_(0), max_(str.size()) {} + virtual size_t read(JAVACC_CHAR_TYPE *bufptr, int offset, size_t len) { + size_t count = str_.copy(bufptr + offset, len > max_ ? max_ : len, cur_); + cur_ += count; + max_ -= count; + return count; + } + virtual ~StringReaderStream() {} + virtual bool endOfInput() { + return max_ == 0; + } + + private: + const JAVACC_STRING_TYPE str_; + size_t cur_; + size_t max_; +}; +} + +namespace vhdl { +namespace parser { +void CharStream::ReInit(const JAVACC_STRING_TYPE& str, int startline, + int startcolumn, int buffersize) { + StringReaderStream *stream = new StringReaderStream(str); + ReInit(stream, startline, startcolumn, buffersize); + deleteStream = true; +} + +void CharStream::ReInit(ReaderStream *input_stream, int startline, + int startcolumn, int buffersize) { + if (deleteStream) { + delete inputStream; + } + + if (buffer != NULL) { + DeleteBuffers(); + } + + available = bufsize = buffersize; + buffer = new JAVACC_CHAR_TYPE[buffersize]; + bufline = new int[buffersize]; + bufcolumn = new int[buffersize]; + + column = startcolumn - 1; + inputStream = input_stream; + line = startline; + prevCharIsLF = prevCharIsCR = false; + tokenBegin = inBuf = maxNextCharInd = 0; + bufpos = -1; + deleteStream = false; +} + +void CharStream::DeleteBuffers() { + delete[] buffer; + delete[] bufline; + delete[] bufcolumn; +} + +void CharStream::adjustBeginLineColumn(int newLine, int newCol) { + int start = tokenBegin; + int len; + + if (bufpos >= tokenBegin) { + len = bufpos - tokenBegin + inBuf + 1; + } else { + len = bufsize - tokenBegin + bufpos + 1 + inBuf; + } + + int i = 0, j = 0, k = 0; + int nextColDiff = 0, columnDiff = 0; + + while (i < len && bufline[j = start % bufsize] == + bufline[k = (start + 1) % bufsize]) { + bufline[j] = newLine; + nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; + bufcolumn[j] = newCol + columnDiff; + columnDiff = nextColDiff; + i++; + start++; + } + + if (i < len) { + bufline[j] = newLine++; + bufcolumn[j] = newCol + columnDiff; + + while (i++ < len) { + if (bufline[j = start % bufsize] != bufline[(start + 1) % bufsize]) + bufline[j] = newLine++; + else + bufline[j] = newLine; + start++; + } + } + + line = bufline[j]; + column = bufcolumn[j]; +} + +void CharStream::ExpandBuff(bool wrapAround) { + JAVACC_CHAR_TYPE *newbuffer = new JAVACC_CHAR_TYPE[bufsize + 2048]; + int *newbufline = new int[bufsize + 2048]; + int *newbufcolumn = new int[bufsize + 2048]; + + if (wrapAround) { + ArrayCopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); + ArrayCopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos); + ArrayCopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); + ArrayCopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); + ArrayCopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); + ArrayCopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); + bufpos += (bufsize - tokenBegin); + } else { + ArrayCopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); + ArrayCopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); + ArrayCopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); + bufpos -= tokenBegin; + } + + maxNextCharInd = bufpos; + DeleteBuffers(); + buffer = newbuffer; + bufline = newbufline; + bufcolumn = newbufcolumn; + bufsize += 2048; + available = bufsize; + tokenBegin = 0; +} + +void CharStream::FillBuff() { + if (maxNextCharInd == available) { + if (available == bufsize) { + if (tokenBegin > 2048) { + bufpos = maxNextCharInd = 0; + available = tokenBegin; + } else if (tokenBegin < 0) { + bufpos = maxNextCharInd = 0; + } else { + ExpandBuff(false); + } + } else if (available > tokenBegin) { + available = bufsize; + } else if ((tokenBegin - available) < 2048) { + ExpandBuff(true); + } else { + available = tokenBegin; + } + } + + int i = inputStream->read(buffer, maxNextCharInd, available - maxNextCharInd); + if (i > 0) { + maxNextCharInd += i; + } else { + --bufpos; + backup(0); + if (tokenBegin == -1) { + tokenBegin = bufpos; + } + } +} + +void CharStream::UpdateLineColumn(JAVACC_CHAR_TYPE c) { + column++; + if (prevCharIsLF) { + prevCharIsLF = false; + column = 1; + line++; + } else if (prevCharIsCR) { + prevCharIsCR = false; + if (c == '\n') { + prevCharIsLF = true; + } else { + column = 1; + line++; + } + } + + switch (c) { + case '\r' : + prevCharIsCR = true; + break; + case '\n' : + prevCharIsLF = true; + break; + case '\t' : + column--; + column += (tabSize - (column % tabSize)); + break; + default : + break; + } + + bufline[bufpos] = line; + bufcolumn[bufpos] = column; +} + +} +} +/* JavaCC - OriginalChecksum=e709b9ee1adf0fcb6b1c5e1641f10348 (do not edit this line) */ diff --git a/vhdlparser/CharStream.h b/vhdlparser/CharStream.h new file mode 100644 index 0000000..b0e74b6 --- /dev/null +++ b/vhdlparser/CharStream.h @@ -0,0 +1,257 @@ +/* Generated By:JavaCC: Do not edit this line. CharStream.h Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#ifndef CHARSTREAM_H +#define CHARSTREAM_H +#include "JavaCC.h" + +#ifndef INITIAL_BUFFER_SIZE +#define INITIAL_BUFFER_SIZE 4096 +#endif + +namespace vhdl { +namespace parser { + +/** + * This class describes a character stream that maintains line and + * column number positions of the characters. It also has the capability + * to backup the stream to some extent. An implementation of this + * class is used in the TokenManager implementation generated by + * JavaCCParser. + * + * All the methods except backup can be implemented in any fashion. backup + * needs to be implemented correctly for the correct operation of the lexer. + * Rest of the methods are all used to get information like line number, + * column number and the string that constitutes a token and are not used + * by the lexer. Hence their implementation won't affect the generated lexer's + * operation. + */ + + +class CharStream { + public: + void setTabSize(int i) { tabSize = i; } + int getTabSize(int) { return tabSize; } + virtual int getColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; } + virtual int getLine() { return trackLineColumn ? bufline[bufpos] : -1; } + virtual int getEndColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; } + virtual int getEndLine() { return trackLineColumn ? bufline[bufpos] : -1; } + virtual int getBeginColumn() { return trackLineColumn ? bufcolumn[tokenBegin] : -1; } + virtual int getBeginLine() { return trackLineColumn ? bufline[tokenBegin] : -1; } + + virtual bool getTrackLineColumn() { return trackLineColumn; } + virtual void setTrackLineColumn(bool val) { trackLineColumn = val; } + +/** + * Backs up the input stream by amount steps. Lexer calls this method if it + * had already read some characters, but could not use them to match a + * (longer) token. So, they will be used again as the prefix of the next + * token and it is the implemetation's responsibility to do this right. + */ +virtual inline void backup(int amount) { + inBuf += amount; + bufpos -= amount; + if (bufpos < 0) { + bufpos += bufsize; + } +} + +/** + * Returns the next character that marks the beginning of the next token. + * All characters must remain in the buffer between two successive calls + * to this method to implement backup correctly. + */ +virtual inline JAVACC_CHAR_TYPE BeginToken() { + tokenBegin = -1; + JAVACC_CHAR_TYPE c = readChar(); + tokenBegin = bufpos; + return c; +} + + +/** + * Returns the next character from the selected input. The method + * of selecting the input is the responsibility of the class + * implementing this class. + */ +virtual inline JAVACC_CHAR_TYPE readChar() { + if (inBuf > 0) { + --inBuf; + ++bufpos; + if (bufpos == bufsize) { + bufpos = 0; + } + + return buffer[bufpos]; + } + + ++bufpos; + if (bufpos >= maxNextCharInd) { + FillBuff(); + } + + JAVACC_CHAR_TYPE c = buffer[bufpos]; + + if (trackLineColumn) { + UpdateLineColumn(c); + } + + return c; +} + + + virtual void ExpandBuff(bool wrapAround); + virtual void FillBuff(); + + /** + * Returns a string made up of characters from the marked token beginning + * to the current buffer position. Implementations can return + * anything that they want to. For example, for efficiency, one might decide + * to just return NULL, which is a valid implementation. + */ + virtual JAVACC_STRING_TYPE GetImage() { + if (bufpos >= tokenBegin) + return JAVACC_STRING_TYPE(buffer + tokenBegin, bufpos - tokenBegin + 1); + else + return JAVACC_STRING_TYPE(buffer + tokenBegin, bufsize - tokenBegin) + .append(buffer, bufpos + 1); + } + + /** + * Returns an array of characters that make up the suffix of length 'len' for + * the currently matched token. This is used to build up the matched string + * for use in actions in the case of MORE. A simple and inefficient + * implementation of this is as follows : + */ + virtual JAVACC_STRING_TYPE GetSuffix(int len) { + if ((bufpos + 1) >= len) { + return JAVACC_STRING_TYPE(buffer + bufpos - len + 1, len); + } + return JAVACC_STRING_TYPE(buffer + bufsize - (len - bufpos - 1), len - bufpos - 1) + .append(buffer, bufpos + 1); + } + + /** + * The lexer calls this function to indicate that it is done with the stream + * and hence implementations can free any resources held by this class. + */ + virtual void DeleteBuffers(); + + virtual ~CharStream() { + if (deleteStream) { + delete inputStream; + } + DeleteBuffers(); + } + + bool endOfInput() { + return inBuf == 0 && bufpos + 1 >= maxNextCharInd && + inputStream->endOfInput(); + } + + CharStream(const JAVACC_CHAR_TYPE *buf, int sz, int startline, + int startcolumn, int buffersize) : + bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false), + buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0), + prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0), + inBuf(0),tabSize(8), trackLineColumn(true) { + ReInit(JAVACC_STRING_TYPE(buf, sz), startline, startcolumn, buffersize); + } + + CharStream(const JAVACC_CHAR_TYPE *buf, int sz, int startline, int startcolumn) : + bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false), + buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0), + prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0), + inBuf(0),tabSize(8), trackLineColumn(true) { + ReInit(JAVACC_STRING_TYPE(buf, sz), startline, startcolumn, INITIAL_BUFFER_SIZE); + } + + CharStream(const JAVACC_STRING_TYPE& str, int startline, + int startcolumn, int buffersize) : + bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false), + buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0), + prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0), + inBuf(0),tabSize(8), trackLineColumn(true) { + ReInit(str, startline, startcolumn, buffersize); + } + + CharStream(const JAVACC_STRING_TYPE& str, int startline, int startcolumn) : + bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false), + buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0), + prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0), + inBuf(0) ,tabSize(8), trackLineColumn(true){ + ReInit(str, startline, startcolumn, INITIAL_BUFFER_SIZE); + } + + CharStream(ReaderStream *input_stream, int startline, + int startcolumn, int) : + bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false), + buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0), + prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0), + inBuf(0),tabSize(8), trackLineColumn(true) { + ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE); + } + + CharStream(ReaderStream *input_stream, int startline, int startcolumn) : + bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false), + buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0), + prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0), + inBuf(0),tabSize(8), trackLineColumn(true) { + ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE); + } + + CharStream(ReaderStream *input_stream) : + bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false), + buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0), + prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0), + inBuf(0),tabSize(8), trackLineColumn(true) { + ReInit(input_stream, 1, 1, INITIAL_BUFFER_SIZE); + } + + virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn, + int buffersize); + + virtual void ReInit(ReaderStream *input_stream, int startline, + int startcolumn) { + ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE); + } + + virtual void ReInit(ReaderStream *input_stream) { + ReInit(input_stream, 1, 1, INITIAL_BUFFER_SIZE); + } + + virtual void ReInit(const JAVACC_STRING_TYPE& str, int startline, + int startcolumn, int buffersize); + + virtual void ReInit(const JAVACC_STRING_TYPE& str, int startline, + int startcolumn) { + ReInit(str, startline, startcolumn, INITIAL_BUFFER_SIZE); + } + + virtual void adjustBeginLineColumn(int newLine, int newCol); + + protected: + virtual void UpdateLineColumn(JAVACC_CHAR_TYPE c); + + int *bufline; + int *bufcolumn; + ReaderStream *inputStream; + bool deleteStream; + JAVACC_CHAR_TYPE * buffer; + int bufpos; + int bufsize; + int tokenBegin; + int column; + int line; + bool prevCharIsCR ; + bool prevCharIsLF ; + int available; + int maxNextCharInd; + int inBuf ; + int tabSize ; + bool trackLineColumn; +}; + +} +} +#endif +/* JavaCC - OriginalChecksum=5eaf75ef6a2c7859369c80cf6fd037e0 (do not edit this line) */ diff --git a/vhdlparser/ErrorHandler.h b/vhdlparser/ErrorHandler.h new file mode 100644 index 0000000..9f0d38c --- /dev/null +++ b/vhdlparser/ErrorHandler.h @@ -0,0 +1,43 @@ +/* Generated By:JavaCC: Do not edit this line. ErrorHandler.h Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#ifndef ERRORHANDLER_H +#define ERRORHANDLER_H +#include +#include "JavaCC.h" +#include "Token.h" + +namespace vhdl { +namespace parser { +class VhdlParser; + class ErrorHandler { + protected: + int error_count; + public: + // Called when the parser encounters a different token when expecting to + // consume a specific kind of token. + // expectedKind - token kind that the parser was trying to consume. + // expectedToken - the image of the token - tokenImages[expectedKind]. + // actual - the actual token that the parser got instead. + virtual void handleUnexpectedToken(int, JAVACC_STRING_TYPE expectedToken, Token *actual, VhdlParser *) { + error_count++; + fprintf(stderr, "Expecting %s at: %d:%d but got %s\n", addUnicodeEscapes(expectedToken).c_str(), actual->beginLine, actual->beginColumn, addUnicodeEscapes(actual->image).c_str()); + } + // Called when the parser cannot continue parsing. + // last - the last token successfully parsed. + // unexpected - the token at which the error occurs. + // production - the production in which this error occurrs. + virtual void handleParseError(Token *, Token *unexpected, JAVACC_SIMPLE_STRING production, VhdlParser *) { + error_count++; + fprintf(stderr, "Encountered: %s at: %d:%d while parsing: %s\n", addUnicodeEscapes(unexpected->image).c_str(), unexpected->beginLine, unexpected->beginColumn, production.c_str()); + } + virtual int getErrorCount() { + return error_count; + } + virtual ~ErrorHandler() {} + ErrorHandler() { error_count = 0; } + }; +} +} + +#endif +/* JavaCC - OriginalChecksum=282223c3bcb53b7ff385aed35944d185 (do not edit this line) */ diff --git a/vhdlparser/JavaCC.h b/vhdlparser/JavaCC.h new file mode 100644 index 0000000..9504168 --- /dev/null +++ b/vhdlparser/JavaCC.h @@ -0,0 +1,51 @@ +/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#ifndef __JAVACC_H +#define __JAVACC_H +#include +#include +#include +#include +#include + +#include "vhdlstring.h" + +#ifndef JAVACC_CHAR_TYPE +#define JAVACC_CHAR_TYPE char +#endif + +#ifndef JAVACC_STRING_TYPE +#define JAVACC_STRING_TYPE VhdlString +#endif + +#define finally // TODO(Sreeni): Get rid of when we fix jjtree + +#define JAVACC_SIMPLE_STRING VhdlString + +JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str); + +typedef JAVACC_STRING_TYPE StringBuffer; +typedef JAVACC_STRING_TYPE String; + +// Abstraction on stream classes to read a block of data into a buffer. +class ReaderStream { + public: + // Read block of data into a buffer and return the actual number read. + virtual size_t read(JAVACC_CHAR_TYPE *, int, size_t) { + return 0; + } + virtual bool endOfInput() { return true; } + virtual ~ReaderStream() {} +}; + +const JAVACC_CHAR_TYPE EMPTY[] = { 0 }; + +#ifndef MAX +#define MAX(a,b) ((a)>(b)?(a):(b)) +#endif +#ifndef MIN +#define MIN(a,b) ((a)<(b)?(a):(b)) +#endif + +#endif +/* JavaCC - OriginalChecksum=775c677272b259e2a33aac80851ba9f1 (do not edit this line) */ diff --git a/vhdlparser/JavaCC.h.in b/vhdlparser/JavaCC.h.in new file mode 100644 index 0000000..9504168 --- /dev/null +++ b/vhdlparser/JavaCC.h.in @@ -0,0 +1,51 @@ +/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#ifndef __JAVACC_H +#define __JAVACC_H +#include +#include +#include +#include +#include + +#include "vhdlstring.h" + +#ifndef JAVACC_CHAR_TYPE +#define JAVACC_CHAR_TYPE char +#endif + +#ifndef JAVACC_STRING_TYPE +#define JAVACC_STRING_TYPE VhdlString +#endif + +#define finally // TODO(Sreeni): Get rid of when we fix jjtree + +#define JAVACC_SIMPLE_STRING VhdlString + +JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str); + +typedef JAVACC_STRING_TYPE StringBuffer; +typedef JAVACC_STRING_TYPE String; + +// Abstraction on stream classes to read a block of data into a buffer. +class ReaderStream { + public: + // Read block of data into a buffer and return the actual number read. + virtual size_t read(JAVACC_CHAR_TYPE *, int, size_t) { + return 0; + } + virtual bool endOfInput() { return true; } + virtual ~ReaderStream() {} +}; + +const JAVACC_CHAR_TYPE EMPTY[] = { 0 }; + +#ifndef MAX +#define MAX(a,b) ((a)>(b)?(a):(b)) +#endif +#ifndef MIN +#define MIN(a,b) ((a)<(b)?(a):(b)) +#endif + +#endif +/* JavaCC - OriginalChecksum=775c677272b259e2a33aac80851ba9f1 (do not edit this line) */ diff --git a/vhdlparser/Makefile.in b/vhdlparser/Makefile.in new file mode 100644 index 0000000..2838700 --- /dev/null +++ b/vhdlparser/Makefile.in @@ -0,0 +1,40 @@ +# +# +# +# Copyright (C) 1997-2000 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. +# + +all: Makefile.vhdlparser Makefile + $(MAKE) -f Makefile.vhdlparser $@ + +Makefile.vhdlparser: vhdlparser.pro + $(ENV) $(PERL) "$(TMAKE)" vhdlparser.pro >Makefile.vhdlparser + +tmake: + $(ENV) $(PERL) "$(TMAKE)" vhdlparser.pro >Makefile.vhdlparser + +clean: Makefile.vhdlparser + $(MAKE) -f Makefile.vhdlparser clean + +regenerate: + $(RM) CharStream.cc CharStream.h ErrorHandler.h ParseException.cc ParseException.h \ + Token.cc Token.h TokenManager.h TokenMgrError.cc TokenMgrError.h VhdlParser.cc VhdlParser.h \ + VhdlParserConstants.h VhdlParserTokenManager.cc VhdlParserTokenManager.h \ + JavaCC.h + javacc vhdlparser.jj + patch 0x7e) { + JAVACC_STRING_TYPE s = "0000" + Integer.toString(ch, 16); + retval.append("\\u" + s.substring(s.length() - 4, s.length())); + } else { + retval.append(ch); + } + continue; + } + } + return retval.toString(); +*/ return str; + } + +} +} +/* JavaCC - OriginalChecksum=99d488e13335cf377284c90700f070ed (do not edit this line) */ diff --git a/vhdlparser/ParseException.h b/vhdlparser/ParseException.h new file mode 100644 index 0000000..1f3a3dc --- /dev/null +++ b/vhdlparser/ParseException.h @@ -0,0 +1,99 @@ +/* Generated By:JavaCC: Do not edit this line. ParseException.h Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#ifndef _PARSE_EXCEPTION_H +#define _PARSE_EXCEPTION_H +#include "JavaCC.h" +#include "Token.h" + + +namespace vhdl { +namespace parser { +/** + * This exception is thrown when parse errors are encountered. + * You can explicitly create objects of this exception type by + * calling the method generateParseException in the generated + * parser. + * + * You can modify this class to customize your error reporting + * mechanisms so long as you retain the fields. + */ +class ParseException { + public: + + /** + * This constructor is used by the method "generateParseException" + * in the generated parser. Calling this constructor generates + * a new object of this type with the fields "currentToken", + * "expectedTokenSequences", and "tokenImage" set. + */ + ParseException(Token currentTokenVal, + int** expectedTokenSequencesVal, + JAVACC_STRING_TYPE* tokenImageVal + ); + + /** + * The following constructors are for use by you for whatever + * purpose you can think of. Constructing the exception in this + * manner makes the exception behave in the normal way - i.e., as + * documented in the class "Throwable". The fields "errorToken", + * "expectedTokenSequences", and "tokenImage" do not contain + * relevant information. The JavaCC generated code does not use + * these constructors. + */ + + ParseException(); + + /** Constructor with message. */ + ParseException(JAVACC_STRING_TYPE message); + + + /** + * This is the last token that has been consumed successfully. If + * this object has been created due to a parse error, the token + * followng this token will (therefore) be the first error token. + */ + Token currentToken; + + /** + * Each entry in this array is an array of integers. Each array + * of integers represents a sequence of tokens (by their ordinal + * values) that is expected at this point of the parse. + */ + int** expectedTokenSequences; + + /** + * This is a reference to the "tokenImage" array of the generated + * parser within which the parse error occurred. This array is + * defined in the generated ...Constants class. + */ + JAVACC_STRING_TYPE* tokenImage; + + /** + * It uses "currentToken" and "expectedTokenSequences" to generate a parse + * error message and returns it. If this object has been created + * due to a parse error, and you do not catch it (it gets thrown + * from the parser) the correct error message + * gets displayed. + */ + private: JAVACC_STRING_TYPE initialise(Token currentToken, + int** expectedTokenSequences, + JAVACC_STRING_TYPE* tokenImage); + + /** + * The end of line string for this machine. + */ +#define eol "\n" + + /** + * Used to convert raw characters to their escaped version + * when these raw version cannot be used as part of an ASCII + * string literal. + */ + JAVACC_STRING_TYPE add_escapes(JAVACC_STRING_TYPE str); + +}; + +} +} +#endif +/* JavaCC - OriginalChecksum=8c47c56fc2030f05b43e20cae6ca5d66 (do not edit this line) */ diff --git a/vhdlparser/Token.cc b/vhdlparser/Token.cc new file mode 100644 index 0000000..62a8169 --- /dev/null +++ b/vhdlparser/Token.cc @@ -0,0 +1,92 @@ +/* Generated By:JavaCC: Do not edit this line. Token.cc Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,TOKEN_INCLUDES=,TOKEN_EXTENDS= */ +#include "Token.h" + +namespace vhdl { +namespace parser { + +/** + * Describes the input token stream. + */ + + /** + * An optional attribute value of the Token. + * Tokens which are not used as syntactic sugar will often contain + * meaningful values that will be used later on by the compiler or + * interpreter. This attribute value is often different from the image. + * Any subclass of Token that actually wants to return a non-NULL value can + * override this method as appropriate. + */ + void * Token::getValue() { + return NULL; + } + + /** + * No-argument constructor + */ + Token::Token() { + this->next = NULL; + this->specialToken = NULL; + } + + /** + * Constructs a new token for the specified Image. + */ + Token::Token(int kind) + { + this->kind = kind; + this->next = NULL; + this->specialToken = NULL; + } + + /** + * Constructs a new token for the specified Image and Kind. + */ + Token::Token(int kind, JAVACC_STRING_TYPE image) + { + this->kind = kind; + this->image = image; + this->next = NULL; + this->specialToken = NULL; + } + + /** + * Returns the image. + */ + JAVACC_STRING_TYPE Token::toString() + { + return image; + } + + /** + * Returns a new Token object, by default. However, if you want, you + * can create and return subclass objects based on the value of ofKind. + * Simply add the cases to the switch for all those special cases. + * For example, if you have a subclass of Token called IDToken that + * you want to create if ofKind is ID, simply add something like : + * + * case MyParserConstants.ID : return new IDToken(ofKind, image); + * + * to the following switch statement. Then you can cast matchedToken + * variable to the appropriate type and use sit in your lexical actions. + */ + Token *Token::newToken(int ofKind, JAVACC_STRING_TYPE image) + { + switch(ofKind) + { + default : return new Token(ofKind, image); + } + } + + Token *Token::newToken(int ofKind) + { + return newToken(ofKind, JAVACC_STRING_TYPE((JAVACC_CHAR_TYPE*)"")); + } + + Token::~Token() { + if (specialToken) delete specialToken; + } + +} +} +/* JavaCC - OriginalChecksum=9db9ca693072c4c37bb7cc933c0c5e35 (do not edit this line) */ diff --git a/vhdlparser/Token.h b/vhdlparser/Token.h new file mode 100644 index 0000000..5fce69f --- /dev/null +++ b/vhdlparser/Token.h @@ -0,0 +1,116 @@ +/* Generated By:JavaCC: Do not edit this line. Token.h Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,TOKEN_INCLUDES=,TOKEN_EXTENDS= */ +#ifndef TOKEN_H +#define TOKEN_H +#include "JavaCC.h" + + +namespace vhdl { +namespace parser { + +/** + * Describes the input token stream. + */ + +class Token +{ + public: + + /** + * An integer that describes the kind of this token. This numbering + * system is determined by JavaCCParser, and a table of these numbers is + * stored in the file ...Constants.java. + */ + int kind; + + /** The line number of the first character of this Token. */ + int beginLine; + /** The column number of the first character of this Token. */ + int beginColumn; + /** The line number of the last character of this Token. */ + int endLine; + /** The column number of the last character of this Token. */ + int endColumn; + + /** + * The string image of the token. + */ + JAVACC_STRING_TYPE image; + + /** + * A reference to the next regular (non-special) token from the input + * stream. If this is the last token from the input stream, or if the + * token manager has not read tokens beyond this one, this field is + * set to NULL. This is true only if this token is also a regular + * token. Otherwise, see below for a description of the contents of + * this field. + */ + Token *next; + + /** + * This field is used to access special tokens that occur prior to this + * token, but after the immediately preceding regular (non-special) token. + * If there are no such special tokens, this field is set to NULL. + * When there are more than one such special token, this field refers + * to the last of these special tokens, which in turn refers to the next + * previous special token through its specialToken field, and so on + * until the first special token (whose specialToke_ field is NULL). + * The next fields of special tokens refer to other special tokens that + * immediately follow it (without an intervening regular token). If there + * is no such token, this field is NULL. + */ + Token *specialToken; + + /** + * An optional attribute value of the Token. + * Tokens which are not used as syntactic sugar will often contain + * meaningful values that will be used later on by the compiler or + * interpreter. This attribute value is often different from the image. + * Any subclass of Token that actually wants to return a non-NULL value can + * override this method as appropriate. + */ + void * getValue(); + + /** + * No-argument constructor + */ + Token(); + + /** + * Constructs a new token for the specified Image. + */ + Token(int kind); + + /** + * Constructs a new token for the specified Image and Kind. + */ + Token(int kind, JAVACC_STRING_TYPE image); + + /** + * Returns the image. + */ + JAVACC_STRING_TYPE toString(); + + public: virtual ~Token(); + + /** + * Returns a new Token void *, by default. However, if you want, you + * can create and return subclass objects based on the value of ofKind. + * Simply add the cases to the switch for all those special cases. + * For example, if you have a subclass of Token called IDToken that + * you want to create if ofKind is ID, simply add something like : + * + * case MyParserConstants.ID : return new IDToken(ofKind, image); + * + * to the following switch statement. Then you can cast matchedToken + * variable to the appropriate type and use sit in your lexical actions. + */ + static Token *newToken(int ofKind, JAVACC_STRING_TYPE image); + + static Token *newToken(int ofKind); +}; + +} +} +#endif +/* JavaCC - OriginalChecksum=2f5eb1c937adc983dfa2008c4fe383a7 (do not edit this line) */ diff --git a/vhdlparser/TokenManager.h b/vhdlparser/TokenManager.h new file mode 100644 index 0000000..efffce6 --- /dev/null +++ b/vhdlparser/TokenManager.h @@ -0,0 +1,33 @@ +/* Generated By:JavaCC: Do not edit this line. TokenManager.h Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#ifndef TOKENMANAGER_H +#define TOKENMANAGER_H +#include "JavaCC.h" +#include "Token.h" + + +namespace vhdl { +namespace parser { +/** + * An implementation for this interface is generated by + * JavaCCParser. The user is free to use any implementation + * of their choice. + */ + +class TokenManager { +public: + /** This gets the next token from the input stream. + * A token of kind 0 () should be returned on EOF. + */ + public: virtual Token *getNextToken() = 0; + public: virtual ~TokenManager() { } + public: virtual void lexicalError() { + fprintf(stderr, "Lexical error encountered\n"); + } + +}; + +} +} +#endif +/* JavaCC - OriginalChecksum=d4725ee75465725057819b3b07fadaa7 (do not edit this line) */ diff --git a/vhdlparser/TokenMgrError.cc b/vhdlparser/TokenMgrError.cc new file mode 100644 index 0000000..0be1213 --- /dev/null +++ b/vhdlparser/TokenMgrError.cc @@ -0,0 +1,121 @@ +/* Generated By:JavaCC: Do not edit this line. TokenMgrError.cc Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#include "TokenMgrError.h" + +namespace vhdl { +namespace parser { + + /** + * Returns a detailed message for the Error when it is thrown by the + * token manager to indicate a lexical error. + * Parameters : + * EOFSeen : indicates if EOF caused the lexical error + * curLexState : lexical state in which this error occurred + * errorLine : line number when the error occurred + * errorColumn : column number when the error occurred + * errorAfter : prefix that was seen before this error occurred + * curJAVACC_CHAR_TYPE : the offending character + * Note: You can customize the lexical error message by modifying this method. + */ + JAVACC_STRING_TYPE TokenMgrError::LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar) { +#if 0 + JAVACC_STRING_TYPE s; + stringstream ss; + ss << "Lexical error at line " << errorLine << " column " << errorColumn + << ". Encountered: " << curChar << "(" << (int)curChar + << ") after : \"" << errorAfter.c_str() << "\""; + return (JAVACC_STRING_TYPE)ss.rdbuf()->str(); +#endif + return EMPTY; + } + + /** + * You can also modify the body of this method to customize your error messages. + * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not + * of end-users concern, so you can return something like : + * + * "Internal Error : Please file a bug report .... " + * + * from this method for such cases in the release version of your parser. + */ + JAVACC_STRING_TYPE TokenMgrError::getMessage() { + return message; + } + + /* + * Constructors of various flavors follow. + */ + + /** No arg constructor. */ + TokenMgrError::TokenMgrError() { + } + + /** Constructor with message and reason. */ + TokenMgrError::TokenMgrError(JAVACC_STRING_TYPE message, int reason) { + errorCode = reason; + } + + /** Full Constructor. */ + TokenMgrError::TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, int reason) { + message = LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar); + errorCode = reason; + } + +} +} + +// i < 16 - guaranteed +static char hexChar(int i) { + if (i < 10) { + return i - '0'; + } + return 'a' + (i - 10); +} + +/** + * Replaces unprintable characters by their escaped (or unicode escaped) + * equivalents in the given string + */ +JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str) { + JAVACC_SIMPLE_STRING retval; + for (size_t i = 0; i < str.size(); i++) { + JAVACC_CHAR_TYPE ch = str[i]; + switch (ch) + { + case 0 : + retval += EMPTY[0]; + continue; + case '\b': + retval.append("\\b"); + continue; + case '\t': + retval.append("\\t"); + continue; + case '\n': + retval.append("\\n"); + continue; + case '\f': + retval.append("\\f"); + continue; + case '\r': + retval.append("\\r"); + continue; + case '\\': + retval.append("\\\\"); + continue; + default: + if (ch < 0xff) { + retval += ch; + continue; + } + retval.append("\\u"); + retval += (hexChar(ch >> 12)); + retval += (hexChar((ch & 0x0f00) >> 8)); + retval += (hexChar((ch & 0x00f0) >> 4)); + retval += (hexChar(ch & 0x000f)); + continue; + } + } + return retval; +} +/* JavaCC - OriginalChecksum=7f80e3c4eac120168f5e81d4ddb72e4b (do not edit this line) */ diff --git a/vhdlparser/TokenMgrError.h b/vhdlparser/TokenMgrError.h new file mode 100644 index 0000000..2702b29 --- /dev/null +++ b/vhdlparser/TokenMgrError.h @@ -0,0 +1,90 @@ +/* Generated By:JavaCC: Do not edit this line. TokenMgrError.h Version 6.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +#ifndef _TOKENMGRERROR_H +#define _TOKENMGRERROR_H +#include "JavaCC.h" + + +namespace vhdl { +namespace parser { + + enum LexerErrors { + /** + * Lexical error occurred. + */ + LEXICAL_ERROR = 0, + + /** + * An attempt was made to create a second instance of a token manager. + */ + STATIC_LEXER_ERROR = 1, + + /** + * Tried to change to an invalid lexical state. + */ + INVALID_LEXICAL_STATE = 2, + + /** + * Detected (and bailed out of) an infinite loop in the token manager. + */ + LOOP_DETECTED = 3, + }; + +class TokenMgrError +{ + public: + /* + * Ordinals for various reasons why an Error of this type can be thrown. + */ + + /** + * Indicates the reason why the exception is thrown. It will have + * one of the above 4 values. + */ + int errorCode; + + /** + * Returns a detailed message for the Error when it is thrown by the + * token manager to indicate a lexical error. + * Parameters : + * EOFSeen : indicates if EOF caused the lexical error + * curLexState : lexical state in which this error occurred + * errorLine : line number when the error occurred + * errorColumn : column number when the error occurred + * errorAfter : prefix that was seen before this error occurred + * curchar : the offending character + * Note: You can customize the lexical error message by modifying this method. + */ + JAVACC_STRING_TYPE LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar); + + private: JAVACC_STRING_TYPE message; + + /** + * You can also modify the body of this method to customize your error messages. + * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not + * of end-users concern, so you can return something like : + * + * "Internal Error : Please file a bug report .... " + * + * from this method for such cases in the release version of your parser. + */ + JAVACC_STRING_TYPE getMessage() ; + + /* + * Constructors of various flavors follow. + */ + + /** No arg constructor. */ + public: TokenMgrError() ; + + /** Constructor with message and reason. */ + public: TokenMgrError(JAVACC_STRING_TYPE message, int reason) ; + + /** Full Constructor. */ + public: TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, int reason) ; +}; + +} +} +#endif +/* JavaCC - OriginalChecksum=c7d825cb4d037b031ae43569d383f738 (do not edit this line) */ diff --git a/vhdlparser/VhdlParser.cc b/vhdlparser/VhdlParser.cc new file mode 100644 index 0000000..6555320 --- /dev/null +++ b/vhdlparser/VhdlParser.cc @@ -0,0 +1,13051 @@ +/* VhdlParser.cc */ +#include "./VhdlParser.h" +namespace vhdl { +namespace parser { + unsigned int jj_la1_0[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x0,0x48202000,0x10040000,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48002000,0x200000,0x0,0x48202000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x10000000,0x0,0x20000000,0x0,0x200000,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0xa0010000,0xa0010001,0x0,0x0,0x0,0x20000000,0x68010000,0x0,0x0,0x400000,0x0,0x0,0x40002000,0x200000,0x0,0x0,0x40202000,0x0,0x0,0x0,0x0,0x4000,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x8000,0x0,0x400,0x0,0x0,0x0,0x0,0x48202000,0x48602000,0x10040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x8000000,0x0,0x28000000,0x4000,0x0,0x40000000,0x0,0x40000000,0x40000000,0x2000000,0x4000000,0x0,0x0,0x80010000,0x0,0x0,0x0,0x0,0x400,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x40002000,0x0,0x40002000,0x0,0x0,0x0,0x0,0x48002000,0x200000,0x0,0x0,0x48202000,0x0,0x0,0x0,0x20000000,0x0,0x0,0x40002000,0x200000,0x0,0x40202000,0x0,0x0,0x4000,0x0,0x0,0x0,0x0,0x10040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x0,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x4000000,0x0,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40002000,0x200000,0x0,0x40202000,0x0,0x0,0x0,0x0,0x0,0x0,0x10040000,0x4000,0x0,0x0,0x20800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x1000,0x0,0x40002000,0x200000,0x0,0x40202000,0x0,0x200000,0x200000,0x80000000,0x80000000,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x48602000,0x10040000,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; + unsigned int jj_la1_1[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x92c04,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x0,0x0,0x800,0x82400,0x804,0x10000,0x92c04,0x8000,0x0,0x0,0x0,0x0,0x800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x800,0x800000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x10000,0x800,0x0,0x2000000,0x2000000,0x0,0x200000,0x2000080,0x2000080,0x0,0x8,0x0,0x80,0x9012480,0x0,0x0,0x0,0x80,0x0,0x82400,0x4,0x10000,0x0,0x92404,0x0,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x0,0x0,0x800000,0x0,0x0,0x0,0x92c04,0x92c04,0x0,0x0,0x40800,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x400,0x0,0x0,0x0,0x4500000,0x0,0x0,0x800,0x0,0x0,0x0,0x800,0x0,0x0,0x4500000,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x20000,0x200000,0x0,0x0,0x82400,0x10000,0x92400,0x0,0x0,0x8000,0x8000,0x82400,0x4,0x10000,0x0,0x92404,0x0,0x0,0x0,0x80,0x0,0x0,0x82400,0x0,0x10000,0x92400,0x0,0x0,0x0,0x0,0x800000,0x0,0x0,0x10040900,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000,0x0,0x82000,0x800000,0x882400,0x0,0x10000,0x892400,0x2000,0x0,0x80000,0x80000,0x0,0x82000,0x10040900,0x0,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x882400,0x0,0x10000,0x892400,0x0,0x82000,0x82000,0x2000000,0x0,0x0,0x2000000,0x8000,0x8000,0x8000,0x0,0x0,0x92c04,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x10,0x0,0x100000,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x100000,0x0,0x0,0x0,0x100000,0x0,0x10,0x82000,0x80000,0x80000,0x0,0x800000,0x0,0x0,0x82000,}; + unsigned int jj_la1_2[] = { +0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x88000,0x14000,0x0,0x10000000,0x0,0x0,0x0,0x100000,0x0,0x0,0x0,0x2000,0x0,0x0,0x88000,0x0,0x0,0x88000,0x0,0x2000,0x2000,0x0,0x0,0x0,0x0,0x14000,0x0,0x0,0x0,0x200,0x0,0x2000,0x0,0x0,0x0,0x2000,0x0,0x2000,0x200000,0x4000,0x4000,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x800000,0x800,0x800,0x0,0x0,0x0,0x80,0x8800,0x0,0x0,0x0,0x0,0x0,0x88000,0x0,0x0,0x800,0x88800,0x0,0x0,0x2000,0x0,0x200,0x4000,0x14000,0x0,0x0,0x0,0x0,0x0,0x0,0x104,0x104,0x0,0x19,0x80,0x80,0x0,0x0,0x88000,0x88000,0x14000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x200,0x800,0x0,0x0,0x0,0x0,0x400,0x0,0x0,0x0,0x800,0x10,0x0,0x0,0x0,0x8,0x400,0x8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x800,0x0,0x88000,0x0,0x88000,0x800,0x0,0x0,0x0,0x88000,0x0,0x0,0x800,0x88800,0x0,0x0,0x1,0x0,0x800,0x0,0x88000,0x0,0x0,0x88000,0x0,0x4000,0x0,0x0,0x0,0x4000,0x0,0x90000012,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x19,0x100000,0x800,0x0,0x0,0x10,0x60000000,0x60000000,0x0,0x800000,0x0,0x400000,0x0,0x400000,0x0,0x200,0x0,0x0,0x80000000,0x0,0x8000,0x0,0x88000,0x0,0x88000,0x0,0x0,0x88000,0x8000,0x0,0x80000,0x80000,0x0,0x88000,0x90000012,0x0,0x0,0x0,0x300000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x19,0x0,0x0,0x88000,0x0,0x0,0x88000,0x0,0x88000,0x88000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x88000,0x14000,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x0,0x0,0x400,0x19,0x0,0x0,0x0,0x0,0x800000,0x0,0x400,0x0,0x0,0x0,0x400,0x0,0x0,0x88000,0x80000,0x80000,0x0,0x0,0x1000,0x0,0x9c000,}; + unsigned int jj_la1_3[] = { +0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc4418,0x84000000,0x0,0x0,0x4,0x0,0x0,0x0,0x80000000,0x40000,0x0,0x0,0x40000,0x0,0x84418,0x40000,0x0,0xc4418,0x0,0x0,0x0,0x80000000,0x80000000,0x0,0x0,0x84000000,0x0,0x1000000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x1000000,0x0,0x0,0x40000,0x40000,0x0,0x0,0x40000,0x40000,0x0,0x2000,0x40000,0x40000,0x0,0x1000,0x80000000,0x0,0x94408,0x0,0x0,0x0,0x0,0x0,0x84418,0x40000,0x0,0x0,0xc4418,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x18000000,0x18000000,0x0,0x80000000,0x0,0x0,0x0,0x80000000,0xc4418,0xc4418,0x84000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x80000000,0x0,0x0,0x0,0x84018,0x0,0x80018,0x80018,0x0,0x0,0x0,0x2000000,0x0,0x0,0x0,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x1000000,0x0,0x0,0x84018,0x0,0x2000,0x0,0x0,0xc4410,0x0,0xc4410,0x0,0x0,0x0,0x0,0x84418,0x40000,0x0,0x0,0xc4418,0x0,0x0,0x80000000,0x0,0x0,0x80000000,0x84410,0x40000,0x0,0xc4410,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x86800000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x80000000,0x80000000,0x0,0x0,0x0,0x0,0x1e0,0x1e0,0x0,0x2000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x84410,0x40000,0x0,0xc4410,0x0,0x80000000,0x0,0x0,0x80000000,0x0,0x86800000,0x0,0x80000000,0x4000,0x80000000,0x0,0x0,0x0,0x84000000,0x10,0x0,0x0,0x0,0x20000,0x0,0x0,0x80008000,0x0,0x0,0x84410,0x40000,0x0,0xc4410,0x0,0x40000,0x40000,0x40000,0x0,0x0,0x40000,0x0,0x0,0x0,0x1000000,0x0,0xc4418,0x84000000,0x80008,0x0,0x0,0x0,0x80000000,0x80000000,0x2000,0x0,0x1000000,0x0,0x80000000,0x4000000,0x0,0x0,0x0,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,}; + unsigned int jj_la1_4[] = { +0x0,0x0,0x30000,0x18,0x20,0x80,0x0,0x0,0x0,0x0,0x20000,0x0,0x20000,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x8000000,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x20,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x20000,0x20000,0x20000,0x20000,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x2,0x20000,0x0,0x0,0x20000,0x0,0x0,0x0,0x20000,0x0,0x0,0x20000,0x20,0x0,0x20,0x0,0x0,0x0,0x0,0x20,0x20018,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x20000004,0x20000,0x20,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x20000,0x7e00,0x7e00,0x0,0x0,0x0,0x20018,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x18,0x0,0x20000,0x0,0x40,0x0,0x20,0x20000,0x20,0x20000,0x0,0x18,0x0,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x20000,0x0,0x0,0x0,0x20,0x20,0x20000,0x0,0x40,0x0,0x0,0x0,0x0,0x20,0x20018,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0xd0000000,0x10000000,0x80000000,0x0,0x20000,0x0,0x0,0x0,0x0,0x20018,0x0,0x4000000,0x20000,0x4000000,0x0,0x4000000,0x0,0x120,0x120,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x0,0x0,0x0,0x0,}; + unsigned int jj_la1_5[] = { +0xa10,0x0,0xe0,0x0,0x0,0x0,0x1,0x1e0,0x0,0x0,0xe0,0x0,0xe0,0x0,0x0,0x0,0xc0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xe0,0xc0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1e0,0x1e0,0xe0,0xe0,0x1e0,0x1c0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x40bf0,0x0,0x0,0xf0,0x0,0x0,0x0,0xe0,0xc0,0x0,0x1e0,0x0,0xc0,0x0,0xc0,0x0,0x0,0xc0,0x0,0x40bf0,0x0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xc0,0x0,0xc0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0xc0,0xc0,0x0,0xc0,0xa10,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0xe0,0x0,0x0,0x0,0xc0,0xe0,0x0,0xc0,0xe0,0x0,0x0,0xc0,0x0,0xc0,0x40bf0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0xe0,0x0,0xe0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x120,0xe0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x40bf0,0x0,0xc0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x40bf0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0xc0,}; + + /** Constructor with user supplied TokenManager. */ + + + + +QCString VhdlParser::abstract_literal() {Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case DECIMAL_LITERAL:{if (!hasError) { + + tok = jj_consume_token(DECIMAL_LITERAL); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case INTEGER:{if (!hasError) { + + tok = jj_consume_token(INTEGER); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case BASED_LITERAL:{if (!hasError) { + + tok = jj_consume_token(BASED_LITERAL); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + default: + jj_la1[0] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::access_type_definition() {Token *tok;QCString str,str1;if (!hasError) { + + tok = jj_consume_token(ACCESS_T); + } + if (!hasError) { + + str1 = subtype_indication(); + } + +str=tok->image.c_str(); return str+str1; +assert(false); + } + + +QCString VhdlParser::actual_designator() {QCString str;Token *t; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case OPEN_T:{if (!hasError) { + + t = jj_consume_token(OPEN_T); + } + if (!hasError) { + +return t->image.c_str(); + } + + break; + } + default: + jj_la1[1] = jj_gen; + if (jj_2_1(2147483647)) {if (!hasError) { + + str = expression(); + } + if (!hasError) { + +return str; + } + + } else if (jj_2_2(2147483647)) {if (!hasError) { + + str = name(); + } + if (!hasError) { + +return str; + } + + } else { + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::actual_parameter_part() {QCString s;if (!hasError) { + + s = association_list(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::actual_part() {QCString s,s1; + if (jj_2_3(2147483647)) {if (!hasError) { + + s = actual_designator(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BOX_T:{if (!hasError) { + + jj_consume_token(BOX_T); + } + if (!hasError) { + +return "<>"; + } + + break; + } + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = name(); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = actual_designator(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+="(";s+=s1+")";return s; + } + + break; + } + default: + jj_la1[2] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::adding_operator() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PLUS_T:{if (!hasError) { + + jj_consume_token(PLUS_T); + } + if (!hasError) { + +return "+"; + } + + break; + } + case MINUS_T:{if (!hasError) { + + jj_consume_token(MINUS_T); + } + if (!hasError) { + +return "-"; + } + + break; + } + case AMPERSAND_T:{if (!hasError) { + + jj_consume_token(AMPERSAND_T); + } + if (!hasError) { + +return "&"; + } + + break; + } + default: + jj_la1[3] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::aggregate() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s = element_association(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[4] = jj_gen; + goto end_label_1; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = element_association(); + } + if (!hasError) { + +s+=","+s1; + } + + } + end_label_1: ; + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + +return s; +assert(false); + } + + +QCString VhdlParser::alias_declaration() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(ALIAS_T); + } + if (!hasError) { + + s2 = alias_designator(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COLON_T:{if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + +s+=":"; + } + if (!hasError) { + + s1 = subtype_indication(); + } + if (!hasError) { + +s+=s1; + } + + break; + } + default: + jj_la1[5] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + +s+=" is "; + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + +s+=s1; + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LBRACKET_T:{if (!hasError) { + + s1 = signature(); + } + if (!hasError) { + +s+=s1; + } + + break; + } + default: + jj_la1[6] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +addVhdlType(s2.data(),getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data(),Public); + + return s2+" "+s+";"; +assert(false); + } + + +QCString VhdlParser::alias_designator() {Token *tok=0;QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + +return s; + } + + break; + } + case CHARACTER_LITERAL:{if (!hasError) { + + tok = jj_consume_token(CHARACTER_LITERAL); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case STRINGLITERAL:{if (!hasError) { + + s = operator_symbol(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[7] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +void VhdlParser::allocator() { + if (jj_2_4(3)) {if (!hasError) { + + jj_consume_token(NEW_T); + } + if (!hasError) { + + qualified_expression(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case NEW_T:{if (!hasError) { + + jj_consume_token(NEW_T); + } + if (!hasError) { + + subtype_indication(); + } + + break; + } + default: + jj_la1[8] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + +void VhdlParser::architecture_body() {QCString s,s1;if (!hasError) { + + jj_consume_token(ARCHITECTURE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(OF_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + +QCString t=s1+"::"+s; + genLabels.resize(0); + pushLabel(genLabels,s1); + lastCompound=current; + addVhdlType(t,getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private); + } + if (!hasError) { + + try {if (!hasError) { + + architecture_declarative_part(); + } + + } catch ( ...) { +error_skipto(BEGIN_T); + } + } + if (!hasError) { + + jj_consume_token(BEGIN_T); + } + if (!hasError) { + + architecture_statement_part(); + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ARCHITECTURE_T:{if (!hasError) { + + jj_consume_token(ARCHITECTURE_T); + } + + break; + } + default: + jj_la1[9] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + name(); + } + + break; + } + default: + jj_la1[10] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +lastEntity=0;lastCompound=0; genLabels.resize(0); + } + + +void VhdlParser::architecture_declarative_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case COMPONENT_T: + case CONSTANT_T: + case DISCONNECT_T: + case FILE_T: + case FOR_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T: + case SIGNAL_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[11] = jj_gen; + goto end_label_2; + }if (!hasError) { + + block_declarative_item(); + } + + } + end_label_2: ; + } + + } + + +void VhdlParser::architecture_statement_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ASSERT_T: + case CASE_T: + case POSTPONED_T: + case PROCESS_T: + case WITH_T: + case LPAREN_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[12] = jj_gen; + goto end_label_3; + }if (!hasError) { + + concurrent_statement(); + } + + } + end_label_3: ; + } + + } + + +QCString VhdlParser::array_type_definition() {QCString s; + if (jj_2_5(2147483647)) {if (!hasError) { + + s = unconstraint_array_definition(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ARRAY_T:{if (!hasError) { + + s = constraint_array_definition(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[13] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::assertion() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) { + + jj_consume_token(ASSERT_T); + } + if (!hasError) { + + s = condition(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case REPORT_T:{if (!hasError) { + + t = jj_consume_token(REPORT_T); + } + if (!hasError) { + + s1 = expression(); + } + + break; + } + default: + jj_la1[14] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SEVERITY_T:{if (!hasError) { + + t1 = jj_consume_token(SEVERITY_T); + } + if (!hasError) { + + s2 = expression(); + } + + break; + } + default: + jj_la1[15] = jj_gen; + ; + } + } + +s.prepend("assert "); + if(t) s1.prepend(" report "); + if(t1) s2.prepend(" report "); + return s+s1+s2; +assert(false); + } + + +QCString VhdlParser::assertion_statement() {QCString s,s1,s2;Token *t=0;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = label(); + } + if (!hasError) { + + t = jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[16] = jj_gen; + ; + } + } + if (!hasError) { + + s1 = assertion(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +if(t) s+=":"; + return s+s1+";"; +assert(false); + } + + +QCString VhdlParser::association_element() {if (!hasError) { + + if (jj_2_6(2147483647)) {if (!hasError) { + + formal_part(); + } + if (!hasError) { + + jj_consume_token(ARROW_T); + } + + } else { + ; + } + } + if (!hasError) { + + actual_part(); + } + +return " "; +assert(false); + } + + +QCString VhdlParser::association_list() {QCString s,s1;if (!hasError) { + + s = association_element(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[17] = jj_gen; + goto end_label_4; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = association_element(); + } + if (!hasError) { + +s+=","+s1; + } + + } + end_label_4: ; + } + +return s; +assert(false); + } + + +QCString VhdlParser::attribute_declaration() {QCString s,s1;if (!hasError) { + + jj_consume_token(ATTRIBUTE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = type_mark(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public); + return " attribute "+s+":"+s1+";"; +assert(false); + } + + +QCString VhdlParser::attribute_designator() {QCString s;Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + +return s; + } + + break; + } + case RANGE_T:{if (!hasError) { + + tok = jj_consume_token(RANGE_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + default: + jj_la1[18] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::attribute_name() {QCString s,s1;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(APOSTROPHE_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + +s+="'"+s1; + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+"("+s1+")"; + } + + break; + } + default: + jj_la1[19] = jj_gen; + ; + } + } + +return s; +assert(false); + } + + +QCString VhdlParser::attribute_specification() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(ATTRIBUTE_T); + } + if (!hasError) { + + s = attribute_designator(); + } + if (!hasError) { + + jj_consume_token(OF_T); + } + if (!hasError) { + + s1 = entity_specification(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + s2 = expression(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +QCString t= s1+" is "+s2; + addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public); + return " attribute "+s+" of "+s1+ " is "+s2+";"; +assert(false); + } + + +QCString VhdlParser::base() {Token *tok;if (!hasError) { + + tok = jj_consume_token(INTEGER); + } + +return tok->image.c_str(); +assert(false); + } + + +QCString VhdlParser::base_specifier() {Token *tok;if (!hasError) { + + tok = jj_consume_token(BASIC_IDENTIFIER); + } + +return tok->image.c_str(); +assert(false); + } + + +QCString VhdlParser::base_unit_declaration() {QCString s;if (!hasError) { + + s = identifier(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::based_integer() {Token *tok;if (!hasError) { + + tok = jj_consume_token(BASIC_IDENTIFIER); + } + +return tok->image.c_str(); +assert(false); + } + + +QCString VhdlParser::based_literal() {Token *tok;if (!hasError) { + + tok = jj_consume_token(BASED_LITERAL); + } + +return tok->image.c_str(); +assert(false); + } + + +QCString VhdlParser::basic_identifier() {Token *tok;if (!hasError) { + + tok = jj_consume_token(BASIC_IDENTIFIER); + } + +return tok->image.c_str(); +assert(false); + } + + +void VhdlParser::binding_indication() {if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case USE_T:{if (!hasError) { + + jj_consume_token(USE_T); + } + if (!hasError) { + + entity_aspect(); + } + + break; + } + default: + jj_la1[20] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + + generic_map_aspect(); + } + + break; + } + default: + jj_la1[21] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PORT_T:{if (!hasError) { + + port_map_aspect(); + } + + break; + } + default: + jj_la1[22] = jj_gen; + ; + } + } + + } + + +QCString VhdlParser::bit_string_literal() {Token *tok;if (!hasError) { + + tok = jj_consume_token(BIT_STRING_LITERAL); + } + +return tok->image.c_str(); +assert(false); + } + + +QCString VhdlParser::bit_value() {Token *tok;if (!hasError) { + + tok = jj_consume_token(BASIC_IDENTIFIER); + } + +return tok->image.c_str(); +assert(false); + } + + +void VhdlParser::block_configuration() {if (!hasError) { + + jj_consume_token(FOR_T); + } + if (!hasError) { + + block_specification(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case USE_T:{ + ; + break; + } + default: + jj_la1[23] = jj_gen; + goto end_label_5; + }if (!hasError) { + + use_clause(); + } + + } + end_label_5: ; + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FOR_T:{ + ; + break; + } + default: + jj_la1[24] = jj_gen; + goto end_label_6; + }if (!hasError) { + + configuration_item(); + } + + } + end_label_6: ; + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(FOR_T); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::block_declarative_item() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_declaration(); + } + + break; + } + case TYPE_T:{if (!hasError) { + + type_declaration(); + } + + break; + } + case SUBTYPE_T:{if (!hasError) { + + subtype_declaration(); + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + constant_declaration(); + } + + break; + } + case SIGNAL_T:{if (!hasError) { + + signal_declaration(); + } + + break; + } + case SHARED_T: + case VARIABLE_T:{if (!hasError) { + + variable_declaration(); + } + + break; + } + case FILE_T:{if (!hasError) { + + file_declaration(); + } + + break; + } + case ALIAS_T:{if (!hasError) { + + alias_declaration(); + } + + break; + } + case COMPONENT_T:{if (!hasError) { + + component_declaration(); + } + + break; + } + default: + jj_la1[25] = jj_gen; + if (jj_2_7(2147483647)) {if (!hasError) { + + attribute_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ATTRIBUTE_T:{if (!hasError) { + + attribute_specification(); + } + + break; + } + case FOR_T:{if (!hasError) { + + configuration_specification(); + } + + break; + } + case DISCONNECT_T:{if (!hasError) { + + disconnection_specification(); + } + + break; + } + case USE_T:{if (!hasError) { + + use_clause(); + } + + break; + } + default: + jj_la1[26] = jj_gen; + if (jj_2_8(3)) {if (!hasError) { + + group_template_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GROUP_T:{if (!hasError) { + + group_declaration(); + } + + break; + } + default: + jj_la1[27] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + } + } + + +void VhdlParser::block_declarative_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case COMPONENT_T: + case CONSTANT_T: + case DISCONNECT_T: + case FILE_T: + case FOR_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T: + case SIGNAL_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[28] = jj_gen; + goto end_label_7; + }if (!hasError) { + + block_declarative_item(); + } + + } + end_label_7: ; + } + + } + + +void VhdlParser::block_header() {if (!hasError) { + + if (jj_2_9(2147483647)) {if (!hasError) { + + generic_clause(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + + generic_map_aspect(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + break; + } + default: + jj_la1[29] = jj_gen; + ; + } + } + + } else { + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PORT_T:{if (!hasError) { + + port_clause(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PORT_T:{if (!hasError) { + + port_map_aspect(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + break; + } + default: + jj_la1[30] = jj_gen; + ; + } + } + + break; + } + default: + jj_la1[31] = jj_gen; + ; + } + } + + } + + +void VhdlParser::block_specification() {if (!hasError) { + + name(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + index_specification(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + break; + } + default: + jj_la1[32] = jj_gen; + ; + } + } + + } + + +void VhdlParser::block_statement() {QCString s;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + jj_consume_token(BLOCK_T); + } + if (!hasError) { + +pushLabel(genLabels,s); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + break; + } + default: + jj_la1[33] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IS_T:{if (!hasError) { + + jj_consume_token(IS_T); + } + + break; + } + default: + jj_la1[34] = jj_gen; + ; + } + } + if (!hasError) { + + block_header(); + } + if (!hasError) { + + block_declarative_part(); + } + if (!hasError) { + + jj_consume_token(BEGIN_T); + } + if (!hasError) { + + block_statement_part(); + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(BLOCK_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[35] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +genLabels=popLabel(genLabels); + } + + +void VhdlParser::block_statement_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ASSERT_T: + case CASE_T: + case POSTPONED_T: + case PROCESS_T: + case WITH_T: + case LPAREN_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[36] = jj_gen; + goto end_label_8; + }if (!hasError) { + + concurrent_statement(); + } + + } + end_label_8: ; + } + + } + + +void VhdlParser::case_statement() {QCString s;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[37] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(CASE_T); + } + if (!hasError) { + + s = expression(); + } + if (!hasError) { + +QCString ca="case "+s; + FlowChart::addFlowChart(FlowChart::CASE_NO,0,ca); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + case_statement_alternative(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WHEN_T:{ + ; + break; + } + default: + jj_la1[38] = jj_gen; + goto end_label_9; + }if (!hasError) { + + case_statement_alternative(); + } + + } + end_label_9: ; + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(CASE_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[39] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +FlowChart::moveToPrevLevel(); + FlowChart::addFlowChart(FlowChart::END_CASE,0,0); + } + + +void VhdlParser::case_statement_alternative() {QCString s;if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + s = choices(); + } + if (!hasError) { + + jj_consume_token(ARROW_T); + } + if (!hasError) { + +QCString t="when "; + t+=s+"=> "; + FlowChart::addFlowChart(FlowChart::WHEN_NO,s.data(),t); + } + if (!hasError) { + + sequence_of_statement(); + } + +FlowChart::moveToPrevLevel(); + } + + +QCString VhdlParser::character_literal() {Token *tok;if (!hasError) { + + tok = jj_consume_token(CHARACTER_LITERAL); + } + +return tok->image.c_str(); +assert(false); + } + + +QCString VhdlParser::choice() {QCString s; + if (jj_2_10(2147483647)) {if (!hasError) { + + s = discrete_range(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_11(2147483647)) {if (!hasError) { + + s = simple_expression(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + +return s; + } + + break; + } + case OTHER_T:{if (!hasError) { + + jj_consume_token(OTHER_T); + } + if (!hasError) { + +return " others "; + } + + break; + } + default: + jj_la1[40] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::choices() {QCString s,s1;if (!hasError) { + + s = choice(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BAR_T:{ + ; + break; + } + default: + jj_la1[41] = jj_gen; + goto end_label_10; + }if (!hasError) { + + jj_consume_token(BAR_T); + } + if (!hasError) { + + choice(); + } + if (!hasError) { + +s+="|";s+=s1; + } + + } + end_label_10: ; + } + +return s; +assert(false); + } + + +void VhdlParser::component_configuration() {if (!hasError) { + + jj_consume_token(FOR_T); + } + if (!hasError) { + + component_specification(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T: + case PORT_T: + case USE_T: + case SEMI_T:{if (!hasError) { + + binding_indication(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + break; + } + default: + jj_la1[42] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FOR_T:{if (!hasError) { + + block_configuration(); + } + + break; + } + default: + jj_la1[43] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(FOR_T); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::component_declaration() {QCString s;if (!hasError) { + + jj_consume_token(COMPONENT_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IS_T:{if (!hasError) { + + jj_consume_token(IS_T); + } + + break; + } + default: + jj_la1[44] = jj_gen; + ; + } + } + if (!hasError) { + +currP=VhdlDocGen::COMPONENT; + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + + generic_clause(); + } + + break; + } + default: + jj_la1[45] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PORT_T:{if (!hasError) { + + port_clause(); + } + + break; + } + default: + jj_la1[46] = jj_gen; + ; + } + } + if (!hasError) { + +addVhdlType(s.data(),getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0,Public); + currP=0; + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(COMPONENT_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[47] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::component_instantiation_statement() {QCString s,s1;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = instantiation_unit(); + } + if (!hasError) { + +addCompInst(s.lower().data(),s1.lower().data(),0,getLine()); + } + if (!hasError) { + + if (jj_2_12(2147483647)) {if (!hasError) { + + generic_map_aspect(); + } + + } else { + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PORT_T:{if (!hasError) { + + port_map_aspect(); + } + + break; + } + default: + jj_la1[48] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::component_specification() {if (!hasError) { + + instantiation_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + name(); + } + + } + + +QCString VhdlParser::composite_type_definition() {QCString s,s1; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ARRAY_T:{if (!hasError) { + + s = array_type_definition(); + } + if (!hasError) { + +return s; + } + + break; + } + case RECORD_T:{if (!hasError) { + + record_type_definition(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[49] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +void VhdlParser::concurrent_assertion_statement() {if (!hasError) { + + if (jj_2_13(2)) {if (!hasError) { + + identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + } else { + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case POSTPONED_T:{if (!hasError) { + + jj_consume_token(POSTPONED_T); + } + + break; + } + default: + jj_la1[50] = jj_gen; + ; + } + } + if (!hasError) { + + assertion(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::concurrent_procedure_call_statement() {if (!hasError) { + + if (jj_2_14(2)) {if (!hasError) { + + identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + } else { + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case POSTPONED_T:{if (!hasError) { + + jj_consume_token(POSTPONED_T); + } + + break; + } + default: + jj_la1[51] = jj_gen; + ; + } + } + if (!hasError) { + + procedure_call(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::concurrent_signal_assignment_statement() {if (!hasError) { + + if (jj_2_15(2)) {if (!hasError) { + + identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + } else { + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case POSTPONED_T:{if (!hasError) { + + jj_consume_token(POSTPONED_T); + } + + break; + } + default: + jj_la1[52] = jj_gen; + ; + } + } + if (!hasError) { + + if (jj_2_16(2147483647)) {if (!hasError) { + + conditional_signal_assignment(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WITH_T:{if (!hasError) { + + selected_signal_assignment(); + } + + break; + } + default: + jj_la1[53] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + } + + +void VhdlParser::concurrent_statement() { + if (jj_2_17(2147483647)) {if (!hasError) { + + block_statement(); + } + + } else if (jj_2_18(2147483647)) {if (!hasError) { + + process_statement(); + } + + } else if (jj_2_19(2147483647)) {if (!hasError) { + + generate_statement(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CASE_T:{if (!hasError) { + + case_scheme(); + } + + break; + } + default: + jj_la1[54] = jj_gen; + if (jj_2_20(2147483647)) {if (!hasError) { + + concurrent_assertion_statement(); + } + + } else if (jj_2_21(2147483647)) {if (!hasError) { + + concurrent_signal_assignment_statement(); + } + + } else if (jj_2_22(2147483647)) {if (!hasError) { + + component_instantiation_statement(); + } + + } else if (jj_2_23(2147483647)) {if (!hasError) { + + concurrent_procedure_call_statement(); + } + + } else { + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + + +QCString VhdlParser::condition() {QCString s;if (!hasError) { + + s = expression(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::condition_clause() {QCString s;if (!hasError) { + + jj_consume_token(UNTIL_T); + } + if (!hasError) { + + s = condition(); + } + +return " until "+s; +assert(false); + } + + +void VhdlParser::conditional_signal_assignment() {if (!hasError) { + + target(); + } + if (!hasError) { + + jj_consume_token(LESSTHAN_T); + } + if (!hasError) { + + options(); + } + if (!hasError) { + + conditional_waveforms(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::conditional_waveforms() {if (!hasError) { + + waveform(); + } + if (!hasError) { + + while (!hasError) { + if (jj_2_24(2147483647)) { + ; + } else { + goto end_label_11; + }if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + condition(); + } + if (!hasError) { + + jj_consume_token(ELSE_T); + } + if (!hasError) { + + waveform(); + } + + } + end_label_11: ; + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WHEN_T:{if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + condition(); + } + + break; + } + default: + jj_la1[55] = jj_gen; + ; + } + } + + } + + +void VhdlParser::configuration_declaration() {QCString s,s1;if (!hasError) { + + jj_consume_token(CONFIGURATION_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(OF_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + +confName=s+"::"+s1; + addVhdlType(s.data(),getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public); + } + if (!hasError) { + + configuration_declarative_part(); + } + if (!hasError) { + + block_configuration(); + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CONFIGURATION_T:{if (!hasError) { + + jj_consume_token(CONFIGURATION_T); + } + + break; + } + default: + jj_la1[56] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + name(); + } + + break; + } + default: + jj_la1[57] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +genLabels.resize(0); confName=""; + } + + +void VhdlParser::configuration_declarative_item() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case USE_T:{if (!hasError) { + + use_clause(); + } + + break; + } + case ATTRIBUTE_T:{if (!hasError) { + + attribute_specification(); + } + + break; + } + case GROUP_T:{if (!hasError) { + + group_declaration(); + } + + break; + } + default: + jj_la1[58] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +void VhdlParser::configuration_declarative_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ATTRIBUTE_T: + case GROUP_T: + case USE_T:{ + ; + break; + } + default: + jj_la1[59] = jj_gen; + goto end_label_12; + }if (!hasError) { + + configuration_declarative_item(); + } + + } + end_label_12: ; + } + + } + + +void VhdlParser::configuration_item() { + if (jj_2_25(2147483647)) {if (!hasError) { + + component_configuration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FOR_T:{if (!hasError) { + + block_configuration(); + } + + break; + } + default: + jj_la1[60] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + +void VhdlParser::configuration_specification() {if (!hasError) { + + jj_consume_token(FOR_T); + } + if (!hasError) { + + component_specification(); + } + if (!hasError) { + + binding_indication(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +QCString VhdlParser::constant_declaration() {QCString s,s1,s2;Token *t=0;if (!hasError) { + + jj_consume_token(CONSTANT_T); + } + if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = subtype_indication(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case VARASSIGN_T:{if (!hasError) { + + t = jj_consume_token(VARASSIGN_T); + } + if (!hasError) { + + s2 = expression(); + } + + break; + } + default: + jj_la1[61] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +if(t) + s2.prepend(":="); + QCString it=s1+s2; + addVhdlType(s.data(),getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public); + it.prepend("constant "); + return it; +assert(false); + } + + +QCString VhdlParser::constraint_array_definition() {QCString s,s1;if (!hasError) { + + jj_consume_token(ARRAY_T); + } + if (!hasError) { + + s = index_constraint(); + } + if (!hasError) { + + jj_consume_token(OF_T); + } + if (!hasError) { + + s1 = subtype_indication(); + } + +return s+" "+s1; +assert(false); + } + + +void VhdlParser::context_clause() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LIBRARY_T: + case USE_T:{ + ; + break; + } + default: + jj_la1[62] = jj_gen; + goto end_label_13; + }if (!hasError) { + + context_item(); + } + + } + end_label_13: ; + } + + } + + +QCString VhdlParser::constraint() {QCString s; + if (jj_2_26(2147483647)) {if (!hasError) { + + s = range_constraint(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_27(2147483647)) {if (!hasError) { + + s = index_constraint(); + } + if (!hasError) { + +return s; + } + + } else { + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +void VhdlParser::context_item() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LIBRARY_T:{if (!hasError) { + + library_clause(); + } + + break; + } + case USE_T:{if (!hasError) { + + use_clause(); + } + + break; + } + default: + jj_la1[63] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +QCString VhdlParser::decimal_literal() {Token *tok;if (!hasError) { + + tok = jj_consume_token(DECIMAL_LITERAL); + } + +return tok->image.c_str(); +assert(false); + } + + +QCString VhdlParser::delay_mechanism() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case TRANSPORT_T:{if (!hasError) { + + jj_consume_token(TRANSPORT_T); + } + if (!hasError) { + +return " transport "; + } + + break; + } + case INERTIAL_T: + case REJECT_T:{if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case REJECT_T:{if (!hasError) { + + jj_consume_token(REJECT_T); + } + if (!hasError) { + + s = expression(); + } + if (!hasError) { + +s.prepend(" reject "); + } + + break; + } + default: + jj_la1[64] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(INERTIAL_T); + } + if (!hasError) { + +return s+" inertial "; + } + + break; + } + default: + jj_la1[65] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +void VhdlParser::design_file() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ARCHITECTURE_T: + case CONFIGURATION_T: + case CONTEXT_T: + case ENTITY_T: + case LIBRARY_T: + case PACKAGE_T: + case USE_T:{if (!hasError) { + + while (!hasError) {if (!hasError) { + + design_unit(); + } + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ARCHITECTURE_T: + case CONFIGURATION_T: + case CONTEXT_T: + case ENTITY_T: + case LIBRARY_T: + case PACKAGE_T: + case USE_T:{ + ; + break; + } + default: + jj_la1[66] = jj_gen; + goto end_label_14; + } + } + end_label_14: ; + } + if (!hasError) { + + + } + + break; + } + case 0:{if (!hasError) { + + jj_consume_token(0); + } + + break; + } + default: + jj_la1[67] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +void VhdlParser::design_unit() {if (!hasError) { + + context_clause(); + } + if (!hasError) { + + library_unit(); + } + + } + + +QCString VhdlParser::designator() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + +return s; + } + + break; + } + case STRINGLITERAL:{if (!hasError) { + + s = operator_symbol(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[68] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::direction() {Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case TO_T:{if (!hasError) { + + tok = jj_consume_token(TO_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case DOWNTO_T:{if (!hasError) { + + tok = jj_consume_token(DOWNTO_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + default: + jj_la1[69] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +void VhdlParser::disconnection_specification() {if (!hasError) { + + jj_consume_token(DISCONNECT_T); + } + if (!hasError) { + + guarded_signal_specificatio(); + } + if (!hasError) { + + jj_consume_token(AFTER_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::guarded_signal_specificatio() {if (!hasError) { + + signal_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + name(); + } + + } + + +QCString VhdlParser::discrete_range() {QCString s; + if (jj_2_28(2147483647)) {if (!hasError) { + + s = range(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_29(2147483647)) {if (!hasError) { + + s = subtype_indication(); + } + if (!hasError) { + +return s; + } + + } else { + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::element_association() {QCString s,s1;if (!hasError) { + + if (jj_2_30(2147483647)) {if (!hasError) { + + choices(); + } + if (!hasError) { + + jj_consume_token(ARROW_T); + } + + } else { + ; + } + } + if (!hasError) { + + s1 = expression(); + } + +return s1; +assert(false); + } + + +QCString VhdlParser::element_declaration() {QCString s,s1;if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = subtype_indication(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return s+":"+s1; +assert(false); + } + + +QCString VhdlParser::entity_aspect() {Token *tok;QCString s,s1; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ENTITY_T:{if (!hasError) { + + tok = jj_consume_token(ENTITY_T); + } + if (!hasError) { + + s = name(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = identifier(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+="("+s1+")"; + } + + break; + } + default: + jj_la1[70] = jj_gen; + ; + } + } + if (!hasError) { + +return s; + } + + break; + } + case CONFIGURATION_T:{if (!hasError) { + + tok = jj_consume_token(CONFIGURATION_T); + } + if (!hasError) { + + s = name(); + } + if (!hasError) { + +return tok->image.c_str()+s; + } + + break; + } + case OPEN_T:{if (!hasError) { + + tok = jj_consume_token(OPEN_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + default: + jj_la1[71] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::entity_class() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ENTITY_T:{if (!hasError) { + + jj_consume_token(ENTITY_T); + } + if (!hasError) { + +return "entity"; + } + + break; + } + case ARCHITECTURE_T:{if (!hasError) { + + jj_consume_token(ARCHITECTURE_T); + } + if (!hasError) { + +return "architecture"; + } + + break; + } + case CONFIGURATION_T:{if (!hasError) { + + jj_consume_token(CONFIGURATION_T); + } + if (!hasError) { + +return "configuration"; + } + + break; + } + case PROCEDURE_T:{if (!hasError) { + + jj_consume_token(PROCEDURE_T); + } + if (!hasError) { + +return "procedure"; + } + + break; + } + case FUNCTION_T:{if (!hasError) { + + jj_consume_token(FUNCTION_T); + } + if (!hasError) { + +return "function"; + } + + break; + } + case PACKAGE_T:{if (!hasError) { + + jj_consume_token(PACKAGE_T); + } + if (!hasError) { + +return "package"; + } + + break; + } + case TYPE_T:{if (!hasError) { + + jj_consume_token(TYPE_T); + } + if (!hasError) { + +return "type"; + } + + break; + } + case SUBTYPE_T:{if (!hasError) { + + jj_consume_token(SUBTYPE_T); + } + if (!hasError) { + +return "subtype"; + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + jj_consume_token(CONSTANT_T); + } + if (!hasError) { + +return "constant"; + } + + break; + } + case SIGNAL_T:{if (!hasError) { + + jj_consume_token(SIGNAL_T); + } + if (!hasError) { + +return "signal"; + } + + break; + } + case VARIABLE_T:{if (!hasError) { + + jj_consume_token(VARIABLE_T); + } + if (!hasError) { + +return "variable"; + } + + break; + } + case COMPONENT_T:{if (!hasError) { + + jj_consume_token(COMPONENT_T); + } + if (!hasError) { + +return "component"; + } + + break; + } + case LABEL_T:{if (!hasError) { + + jj_consume_token(LABEL_T); + } + if (!hasError) { + +return "label"; + } + + break; + } + case LITERAL_T:{if (!hasError) { + + jj_consume_token(LITERAL_T); + } + if (!hasError) { + +return "literal"; + } + + break; + } + case UNITS_T:{if (!hasError) { + + jj_consume_token(UNITS_T); + } + if (!hasError) { + +return "units"; + } + + break; + } + case GROUP_T:{if (!hasError) { + + jj_consume_token(GROUP_T); + } + if (!hasError) { + +return "group"; + } + + break; + } + case FILE_T:{if (!hasError) { + + jj_consume_token(FILE_T); + } + if (!hasError) { + +return "file"; + } + + break; + } + default: + jj_la1[72] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::entity_class_entry() {QCString s;if (!hasError) { + + s = entity_class(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BOX_T:{if (!hasError) { + + jj_consume_token(BOX_T); + } + if (!hasError) { + +s+="<>"; + } + + break; + } + default: + jj_la1[73] = jj_gen; + ; + } + } + +return s; +assert(false); + } + + +QCString VhdlParser::entity_class_entry_list() {QCString s,s1,s2;if (!hasError) { + if (!hasError) { + + s1 = entity_class_entry(); + } + if (!hasError) { + +s+=s1; + } + + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[74] = jj_gen; + goto end_label_15; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s = entity_class_entry(); + } + if (!hasError) { + +s2+=",";s2+=s; + } + + } + end_label_15: ; + } + +return s1+s2; +assert(false); + } + + +void VhdlParser::entity_declaration() {QCString s;if (!hasError) { + + try {if (!hasError) { + + jj_consume_token(ENTITY_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + +lastEntity=current; + lastCompound=0; + addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public); + } + if (!hasError) { + + entity_header(); + } + if (!hasError) { + + entity_declarative_part(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BEGIN_T:{if (!hasError) { + + jj_consume_token(BEGIN_T); + } + if (!hasError) { + + entity_statement_part(); + } + + break; + } + default: + jj_la1[75] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ENTITY_T:{if (!hasError) { + + jj_consume_token(ENTITY_T); + } + + break; + } + default: + jj_la1[76] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + name(); + } + + break; + } + default: + jj_la1[77] = jj_gen; + ; + } + } + + } catch ( ...) { +error_skipto(SEMI_T); + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +lastEntity=0;lastCompound=0; genLabels.resize(0); + } + + +void VhdlParser::entity_declarative_item() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_declaration(); + } + + break; + } + case TYPE_T:{if (!hasError) { + + type_declaration(); + } + + break; + } + case SUBTYPE_T:{if (!hasError) { + + subtype_declaration(); + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + constant_declaration(); + } + + break; + } + case SIGNAL_T:{if (!hasError) { + + signal_declaration(); + } + + break; + } + case SHARED_T: + case VARIABLE_T:{if (!hasError) { + + variable_declaration(); + } + + break; + } + case FILE_T:{if (!hasError) { + + file_declaration(); + } + + break; + } + case ALIAS_T:{if (!hasError) { + + alias_declaration(); + } + + break; + } + default: + jj_la1[78] = jj_gen; + if (jj_2_31(2147483647)) {if (!hasError) { + + attribute_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ATTRIBUTE_T:{if (!hasError) { + + attribute_specification(); + } + + break; + } + case DISCONNECT_T:{if (!hasError) { + + disconnection_specification(); + } + + break; + } + case USE_T:{if (!hasError) { + + use_clause(); + } + + break; + } + default: + jj_la1[79] = jj_gen; + if (jj_2_32(3)) {if (!hasError) { + + group_template_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GROUP_T:{if (!hasError) { + + group_declaration(); + } + + break; + } + default: + jj_la1[80] = jj_gen; + if (jj_2_33(5)) {if (!hasError) { + + package_instantiation_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PACKAGE_T:{if (!hasError) { + + package_declaration(); + } + + break; + } + default: + jj_la1[81] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + } + } + } + } + + +void VhdlParser::entity_declarative_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case CONSTANT_T: + case DISCONNECT_T: + case FILE_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PACKAGE_T: + case PROCEDURE_T: + case PURE_T: + case SIGNAL_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[82] = jj_gen; + goto end_label_16; + }if (!hasError) { + + entity_declarative_item(); + } + + } + end_label_16: ; + } + + } + + +QCString VhdlParser::entity_designator() {QCString s,s1;if (!hasError) { + + s = entity_tag(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LBRACKET_T:{if (!hasError) { + + s1 = signature(); + } + + break; + } + default: + jj_la1[83] = jj_gen; + ; + } + } + +return s+s1; +assert(false); + } + + +void VhdlParser::entity_header() {if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + +currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC; + } + if (!hasError) { + + generic_clause(); + } + + break; + } + default: + jj_la1[84] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PORT_T:{if (!hasError) { + +currP=VhdlDocGen::PORT; + } + if (!hasError) { + + port_clause(); + } + + break; + } + default: + jj_la1[85] = jj_gen; + ; + } + } + + } + + +QCString VhdlParser::entity_name_list() {QCString s,s1; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER: + case CHARACTER_LITERAL:{if (!hasError) { + + while (!hasError) {if (!hasError) { + + s1 = entity_designator(); + } + if (!hasError) { + +s+=s1; + } + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER: + case CHARACTER_LITERAL:{ + ; + break; + } + default: + jj_la1[86] = jj_gen; + goto end_label_17; + } + } + end_label_17: ; + } + if (!hasError) { + +return s; + } + + break; + } + case OTHER_T:{if (!hasError) { + + jj_consume_token(OTHER_T); + } + if (!hasError) { + +return "other"; + } + + break; + } + case ALL_T:{if (!hasError) { + + jj_consume_token(ALL_T); + } + if (!hasError) { + +return "all"; + } + + break; + } + default: + jj_la1[87] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::entity_specification() {QCString s,s1;if (!hasError) { + + s = entity_name_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = entity_class(); + } + +return s+":"+s1; +assert(false); + } + + +void VhdlParser::entity_statement() { + if (jj_2_34(2147483647)) {if (!hasError) { + + concurrent_assertion_statement(); + } + + } else if (jj_2_35(2147483647)) {if (!hasError) { + + process_statement(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case POSTPONED_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + concurrent_procedure_call_statement(); + } + + break; + } + default: + jj_la1[88] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + +void VhdlParser::entity_statement_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ASSERT_T: + case POSTPONED_T: + case PROCESS_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[89] = jj_gen; + goto end_label_18; + }if (!hasError) { + + entity_statement(); + } + + } + end_label_18: ; + } + + } + + +QCString VhdlParser::entity_tag() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = name(); + } + if (!hasError) { + +return s; + } + + break; + } + case CHARACTER_LITERAL:{if (!hasError) { + + s = character_literal(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[90] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::enumeration_literal() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + +return s; + } + + break; + } + case CHARACTER_LITERAL:{if (!hasError) { + + s = character_literal(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[91] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::enumeration_type_definition() {QCString s,s1;if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s = enumeration_literal(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[92] = jj_gen; + goto end_label_19; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = enumeration_literal(); + } + if (!hasError) { + +s+=",";s+=s1; + } + + } + end_label_19: ; + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + +return "("+s+")"; +assert(false); + } + + +QCString VhdlParser::exit_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + t = jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[93] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(EXIT_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s1 = identifier(); + } + + break; + } + default: + jj_la1[94] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WHEN_T:{if (!hasError) { + + t1 = jj_consume_token(WHEN_T); + } + if (!hasError) { + + s2 = condition(); + } + + break; + } + default: + jj_la1[95] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +if(t) s+=":"; + if(t1) s2.prepend(" when "); + return s+s1+s2+";"; +assert(false); + } + + +QCString VhdlParser::expression() {QCString s,s1,s2;if (!hasError) { + + s = relation(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case AND_T: + case NAND_T: + case NOR_T: + case OR_T: + case XOR_T: + case XNOR_T:{ + ; + break; + } + default: + jj_la1[96] = jj_gen; + goto end_label_20; + }if (!hasError) { + + s1 = logop(); + } + if (!hasError) { + + s2 = relation(); + } + if (!hasError) { + +s+=s1;s+=s2; + } + + } + end_label_20: ; + } + +return s; +assert(false); + } + + +QCString VhdlParser::logop() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case AND_T:{if (!hasError) { + + jj_consume_token(AND_T); + } + if (!hasError) { + +return "and" ; + } + + break; + } + case NAND_T:{if (!hasError) { + + jj_consume_token(NAND_T); + } + if (!hasError) { + +return "nand" ; + } + + break; + } + case NOR_T:{if (!hasError) { + + jj_consume_token(NOR_T); + } + if (!hasError) { + +return "nor" ; + } + + break; + } + case XNOR_T:{if (!hasError) { + + jj_consume_token(XNOR_T); + } + if (!hasError) { + +return "xnor" ; + } + + break; + } + case XOR_T:{if (!hasError) { + + jj_consume_token(XOR_T); + } + if (!hasError) { + +return "xor" ; + } + + break; + } + case OR_T:{if (!hasError) { + + jj_consume_token(OR_T); + } + if (!hasError) { + +return "or" ; + } + + break; + } + default: + jj_la1[97] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::extended_identifier() {Token *t;if (!hasError) { + + t = jj_consume_token(EXTENDED_CHARACTER); + } + +return t->image.c_str(); +assert(false); + } + + +QCString VhdlParser::factor() {QCString s,s1; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case NEW_T: + case NULL_T: + case LPAREN_T: + case SLSL_T: + case INTEGER: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER: + case CHARACTER_LITERAL: + case DECIMAL_LITERAL: + case BASED_LITERAL: + case BIT_STRING_LITERAL:{if (!hasError) { + + s = primary(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case DOUBLEMULT_T:{if (!hasError) { + + jj_consume_token(DOUBLEMULT_T); + } + if (!hasError) { + + s1 = primary(); + } + if (!hasError) { + +s+="**";s+=s1; + } + + break; + } + default: + jj_la1[98] = jj_gen; + ; + } + } + if (!hasError) { + +return s; + } + + break; + } + case ABS_T:{if (!hasError) { + + jj_consume_token(ABS_T); + } + if (!hasError) { + + s = primary(); + } + if (!hasError) { + +s1 = "abs "; return s1+s; + } + + break; + } + case NOT_T:{if (!hasError) { + + jj_consume_token(NOT_T); + } + if (!hasError) { + + s = primary(); + } + if (!hasError) { + +s1="not ";return s1+s; + } + + break; + } + default: + jj_la1[99] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::file_declaration() {QCString s,s1,s2,s3;if (!hasError) { + + jj_consume_token(FILE_T); + } + if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s2 = subtype_indication(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IS_T: + case OPEN_T:{if (!hasError) { + + s3 = file_open_information(); + } + + break; + } + default: + jj_la1[100] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +QCString t1=s2+" "+s3; + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public); + return " file "+s+":"+s2+" "+s3+";"; +assert(false); + } + + +QCString VhdlParser::file_logical_name() {QCString s;if (!hasError) { + + s = expression(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::file_open_information() {QCString s,s1,s2;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case OPEN_T:{if (!hasError) { + + jj_consume_token(OPEN_T); + } + if (!hasError) { + + s = expression(); + } + + break; + } + default: + jj_la1[101] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + s1 = file_logical_name(); + } + +s2="open "+s+" is "+s1; return s2; +assert(false); + } + + +QCString VhdlParser::file_type_definition() {QCString s,s1;if (!hasError) { + + jj_consume_token(FILE_T); + } + if (!hasError) { + + jj_consume_token(OF_T); + } + if (!hasError) { + + s = type_mark(); + } + +s1=" file of "+s; return s1; +assert(false); + } + + +QCString VhdlParser::floating_type_definition() {QCString s;if (!hasError) { + + s = range_constraint(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::formal_designator() {QCString s;Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = name(); + } + if (!hasError) { + +return s; + } + + break; + } + case INTEGER:{if (!hasError) { + + tok = jj_consume_token(INTEGER); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + default: + jj_la1[102] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::formal_parameter_list() {QCString s;if (!hasError) { + + s = interface_list(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::formal_part() {QCString s,s1;if (!hasError) { + + s = name(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + formal_designator(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+"("+s1+")"; + } + + break; + } + default: + jj_la1[103] = jj_gen; + ; + } + } + +return s; +assert(false); + } + + +QCString VhdlParser::full_type_declaration() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(TYPE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + try {if (!hasError) { + + s2 = type_definition(); + } + + } catch ( ...) { +error_skipto(SEMI_T); + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public); + return "type "+s+" is "+s2+";"; +assert(false); + } + + +QCString VhdlParser::function_call() {QCString s,s1;if (!hasError) { + + s = name(); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = actual_parameter_part(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + +return s+"("+s1+")"; +assert(false); + } + + +void VhdlParser::generate_statement() {QCString s;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + try {if (!hasError) { + + generate_scheme(); + } + if (!hasError) { + + jj_consume_token(GENERATE_T); + } + if (!hasError) { + +pushLabel(genLabels,s); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case BEGIN_T: + case COMPONENT_T: + case CONSTANT_T: + case DISCONNECT_T: + case FILE_T: + case FOR_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T: + case SIGNAL_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case COMPONENT_T: + case CONSTANT_T: + case DISCONNECT_T: + case FILE_T: + case FOR_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T: + case SIGNAL_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[104] = jj_gen; + goto end_label_21; + }if (!hasError) { + + block_declarative_item(); + } + + } + end_label_21: ; + } + if (!hasError) { + + jj_consume_token(BEGIN_T); + } + + break; + } + default: + jj_la1[105] = jj_gen; + ; + } + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ASSERT_T: + case CASE_T: + case POSTPONED_T: + case PROCESS_T: + case WITH_T: + case LPAREN_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[106] = jj_gen; + goto end_label_22; + }if (!hasError) { + + concurrent_statement(); + } + + } + end_label_22: ; + } + if (!hasError) { + + jj_consume_token(END_T); + } + + } catch ( ...) { +error_skipto(GENERATE_T); + } + } + if (!hasError) { + + jj_consume_token(GENERATE_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[107] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +genLabels=popLabel(genLabels); + } + + +void VhdlParser::generate_scheme() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FOR_T:{if (!hasError) { + + jj_consume_token(FOR_T); + } + if (!hasError) { + + parameter_specification(); + } + + break; + } + case IF_T:{if (!hasError) { + + jj_consume_token(IF_T); + } + if (!hasError) { + + condition(); + } + + break; + } + default: + jj_la1[108] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +void VhdlParser::generic_clause() {QCString s;if (!hasError) { + + jj_consume_token(GENERIC_T); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + +parse_sec=GEN_SEC; + } + if (!hasError) { + + s = generic_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +parse_sec=0; + } + + +QCString VhdlParser::generic_list() {QCString s;if (!hasError) { + + s = interface_list(); + } + +return s; +assert(false); + } + + +void VhdlParser::generic_map_aspect() {if (!hasError) { + + jj_consume_token(GENERIC_T); + } + if (!hasError) { + + jj_consume_token(MAP_T); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + association_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + } + + +QCString VhdlParser::group_constituent() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = name(); + } + if (!hasError) { + +return s; + } + + break; + } + case CHARACTER_LITERAL:{if (!hasError) { + + s = character_literal(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[109] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::group_constituent_list() {QCString s,s1,s2;if (!hasError) { + if (!hasError) { + + s1 = group_constituent(); + } + + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[110] = jj_gen; + goto end_label_23; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s = group_constituent(); + } + if (!hasError) { + +s2+=",";s2+=s1; + } + + } + end_label_23: ; + } + +return s+s2; +assert(false); + } + + +QCString VhdlParser::group_declaration() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(GROUP_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = identifier(); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s2 = group_constituent_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return "group "+s+":"+s1+"("+s2+");"; +assert(false); + } + + +QCString VhdlParser::group_template_declaration() {QCString s,s1;if (!hasError) { + + jj_consume_token(GROUP_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = entity_class_entry_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return "group "+s+ "is ("+s1+");"; +assert(false); + } + + +void VhdlParser::guarded_signal_specification() {if (!hasError) { + + signal_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + type_mark(); + } + + } + + +QCString VhdlParser::identifier() {Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case EXTENDED_CHARACTER:{if (!hasError) { + + tok = jj_consume_token(EXTENDED_CHARACTER); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case BASIC_IDENTIFIER:{if (!hasError) { + + tok = jj_consume_token(BASIC_IDENTIFIER); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + default: + jj_la1[111] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::identifier_list() {QCString str,str1;if (!hasError) { + + str = identifier(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[112] = jj_gen; + goto end_label_24; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + str1 = identifier(); + } + if (!hasError) { + +str+=",";str+=str1; + } + + } + end_label_24: ; + } + +return str; +assert(false); + } + + +void VhdlParser::if_statement() {QCString s,s1;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[113] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(IF_T); + } + if (!hasError) { + + s = condition(); + } + if (!hasError) { + + jj_consume_token(THEN_T); + } + if (!hasError) { + +s.prepend("if "); + FlowChart::addFlowChart(FlowChart::IF_NO,0,s); + } + if (!hasError) { + + sequence_of_statement(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ELSIF_T:{ + ; + break; + } + default: + jj_la1[114] = jj_gen; + goto end_label_25; + }if (!hasError) { + + jj_consume_token(ELSIF_T); + } + if (!hasError) { + + s1 = condition(); + } + if (!hasError) { + + jj_consume_token(THEN_T); + } + if (!hasError) { + +s1.prepend("elsif "); + FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data()); + } + if (!hasError) { + + sequence_of_statement(); + } + + } + end_label_25: ; + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ELSE_T:{if (!hasError) { + + jj_consume_token(ELSE_T); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0); + } + if (!hasError) { + + sequence_of_statement(); + } + + break; + } + default: + jj_la1[115] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(IF_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[116] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +FlowChart::moveToPrevLevel(); + FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0); + } + + +QCString VhdlParser::incomplete_type_declaration() {QCString s;if (!hasError) { + + jj_consume_token(TYPE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return "type "+s+";"; +assert(false); + } + + +QCString VhdlParser::index_constraint() {QCString s="("; QCString s1,s2;if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s2 = discrete_range(); + } + if (!hasError) { + +s+=s2; + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[117] = jj_gen; + goto end_label_26; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = discrete_range(); + } + if (!hasError) { + +s+=",";s+=s1; + } + + } + end_label_26: ; + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + +return s+")"; +assert(false); + } + + +QCString VhdlParser::index_specification() {QCString s; + if (jj_2_36(2147483647)) {if (!hasError) { + + s = discrete_range(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ABS_T: + case NEW_T: + case NOT_T: + case NULL_T: + case LPAREN_T: + case PLUS_T: + case MINUS_T: + case SLSL_T: + case INTEGER: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER: + case CHARACTER_LITERAL: + case DECIMAL_LITERAL: + case BASED_LITERAL: + case BIT_STRING_LITERAL:{if (!hasError) { + + s = expression(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[118] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::index_subtype_definition() {QCString s;if (!hasError) { + + s = type_mark(); + } + if (!hasError) { + + jj_consume_token(RANGE_T); + } + if (!hasError) { + + jj_consume_token(BOX_T); + } + +return s+" range <> "; +assert(false); + } + + +QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMPONENT_T: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMPONENT_T:{if (!hasError) { + + tok = jj_consume_token(COMPONENT_T); + } + + break; + } + default: + jj_la1[119] = jj_gen; + ; + } + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + +s1="component"; return s; + } + + break; + } + case ENTITY_T:{if (!hasError) { + + tok = jj_consume_token(ENTITY_T); + } + if (!hasError) { + + s2 = name(); + } + if (!hasError) { + +s=tok->image.c_str()+s2; + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = identifier(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+="(";s+=s1;s+=")" ; + } + + break; + } + default: + jj_la1[120] = jj_gen; + ; + } + } + if (!hasError) { + +return s; + } + + break; + } + case CONFIGURATION_T:{if (!hasError) { + + jj_consume_token(CONFIGURATION_T); + } + if (!hasError) { + + s = name(); + } + if (!hasError) { + +s1="configuration ";return s; + } + + break; + } + default: + jj_la1[121] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::instantiation_list() {QCString s;Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + +return s; + } + + break; + } + case OTHER_T:{if (!hasError) { + + tok = jj_consume_token(OTHER_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case ALL_T:{if (!hasError) { + + tok = jj_consume_token(ALL_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + default: + jj_la1[122] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::integer() {Token *t;if (!hasError) { + + t = jj_consume_token(INTEGER); + } + +return t->image.c_str(); +assert(false); + } + + +QCString VhdlParser::integer_type_definition() {QCString s;if (!hasError) { + + s = range_constraint(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::interface_declaration() {QCString s,s1; + if (jj_2_37(5)) {if (!hasError) { + + s = interface_subprogram_declaration(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PACKAGE_T:{if (!hasError) { + + interface_package_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[123] = jj_gen; + if (jj_2_38(5)) {if (!hasError) { + + s = interface_variable_declaration(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_39(5)) {if (!hasError) { + + interface_file_declaration(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_40(2147483647)) {if (!hasError) { + + subprogram_declaration(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CONSTANT_T: + case FILE_T: + case SIGNAL_T: + case SHARED_T: + case TYPE_T: + case VARIABLE_T:{if (!hasError) { + + s = object_class(); + } + if (!hasError) { + + s1 = identifier(); + } + if (!hasError) { + +if (parse_sec==GEN_SEC) + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public); + return s; + } + + break; + } + default: + jj_la1[124] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } +assert(false); + } + + +QCString VhdlParser::interface_element() {QCString s;if (!hasError) { + + s = interface_declaration(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::interface_file_declaration() {QCString s,s1;if (!hasError) { + + jj_consume_token(FILE_T); + } + if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = subtype_indication(); + } + +addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public); + return " file "+s+":"+s1; +assert(false); + } + + +QCString VhdlParser::interface_list() {QCString s,s1,s2;if (!hasError) { + + s = interface_element(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SEMI_T:{ + ; + break; + } + default: + jj_la1[125] = jj_gen; + goto end_label_27; + }if (!hasError) { + + jj_consume_token(SEMI_T); + } + if (!hasError) { + + s1 = interface_element(); + } + if (!hasError) { + +s2+=";";s2+=s1; + } + + } + end_label_27: ; + } + +return s+s2; +assert(false); + } + + +QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CONSTANT_T: + case SIGNAL_T: + case SHARED_T: + case VARIABLE_T:{if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case VARIABLE_T:{if (!hasError) { + + tok = jj_consume_token(VARIABLE_T); + } + + break; + } + case SIGNAL_T:{if (!hasError) { + + tok = jj_consume_token(SIGNAL_T); + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + tok = jj_consume_token(CONSTANT_T); + } + + break; + } + case SHARED_T:{if (!hasError) { + + tok = jj_consume_token(SHARED_T); + } + + break; + } + default: + jj_la1[126] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + break; + } + default: + jj_la1[127] = jj_gen; + ; + } + } + if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BUFFER_T: + case IN_T: + case INOUT_T: + case LINKAGE_T: + case OUT_T:{if (!hasError) { + + s1 = mode(); + } + + break; + } + default: + jj_la1[128] = jj_gen; + ; + } + } + if (!hasError) { + + s2 = subtype_indication(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BUS_T:{if (!hasError) { + + tok1 = jj_consume_token(BUS_T); + } + + break; + } + default: + jj_la1[129] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case VARASSIGN_T:{if (!hasError) { + + tok2 = jj_consume_token(VARASSIGN_T); + } + if (!hasError) { + + s4 = expression(); + } + + break; + } + default: + jj_la1[130] = jj_gen; + ; + } + } + +if(tok) + s5=tok->image.c_str(); + + if(tok1) + s3=tok->image.data(); + + if(tok2) + s3+=":="; + + QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4; + if (currP!=VhdlDocGen::COMPONENT) + { + if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE) + { + addProto(s5.data(),s.data(),s2.data(),s3.data(),0,s4.data()); + } + else + { + QCString i=s2+s3+s4; + if (currP==VhdlDocGen::GENERIC && param_sec==0) + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,i.data(),s1.data(),Public); + else if(parse_sec != GEN_SEC) + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,i.data(),s1.data(),Public); + } + // fprintf(stderr,"\n\n <>\n",$$.data()); + } // if component + return it; +assert(false); + } + + +void VhdlParser::iteration_scheme() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WHILE_T:{if (!hasError) { + + jj_consume_token(WHILE_T); + } + if (!hasError) { + + condition(); + } + + break; + } + case FOR_T:{if (!hasError) { + + jj_consume_token(FOR_T); + } + if (!hasError) { + + parameter_specification(); + } + + break; + } + default: + jj_la1[131] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +QCString VhdlParser::label() {QCString s;if (!hasError) { + + s = identifier(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::library_clause() {QCString s;if (!hasError) { + if (!hasError) { + + jj_consume_token(LIBRARY_T); + } + if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + +if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") ) + { + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public); + } + QCString s1="library "+s; + return s1; +assert(false); + } + + +QCString VhdlParser::library_unit() {QCString s; + if (jj_2_41(2)) {if (!hasError) { + + primary_unit(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ARCHITECTURE_T: + case PACKAGE_T:{if (!hasError) { + + secondary_unit(); + } + if (!hasError) { + +return s; + } + + break; + } + case CONTEXT_T:{if (!hasError) { + + context_declaration(); + } + + break; + } + default: + jj_la1[132] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::literal() {QCString s; + if (jj_2_42(2147483647)) {if (!hasError) { + + s = bit_string_literal(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_43(2147483647)) {if (!hasError) { + + s = numeric_literal(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_44(2147483647)) {if (!hasError) { + + s = enumeration_literal(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case STRINGLITERAL:{if (!hasError) { + + s = string_literal(); + } + if (!hasError) { + +return s; + } + + break; + } + case NULL_T:{if (!hasError) { + + jj_consume_token(NULL_T); + } + if (!hasError) { + +return "null"; + } + + break; + } + default: + jj_la1[133] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::logical_operator() {QCString s;if (!hasError) { + + s = logop(); + } + +return s; +assert(false); + } + + +void VhdlParser::loop_statement() {if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[134] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FOR_T: + case WHILE_T:{if (!hasError) { + + iteration_scheme(); + } + + break; + } + default: + jj_la1[135] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(LOOP_T); + } + if (!hasError) { + + sequence_of_statement(); + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(LOOP_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[136] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +QCString VhdlParser::miscellaneous_operator() {Token *t=0; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case DOUBLEMULT_T:{if (!hasError) { + + jj_consume_token(DOUBLEMULT_T); + } + if (!hasError) { + +return "**"; + } + + break; + } + case ABS_T:{if (!hasError) { + + jj_consume_token(ABS_T); + } + if (!hasError) { + +return "abs"; + } + + break; + } + case NOT_T:{if (!hasError) { + + jj_consume_token(NOT_T); + } + if (!hasError) { + +return "not"; + } + + break; + } + default: + jj_la1[137] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::mode() {Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IN_T:{if (!hasError) { + + tok = jj_consume_token(IN_T); + } + if (!hasError) { + +return "in"; + } + + break; + } + case OUT_T:{if (!hasError) { + + tok = jj_consume_token(OUT_T); + } + if (!hasError) { + +return "out"; + } + + break; + } + case INOUT_T:{if (!hasError) { + + tok = jj_consume_token(INOUT_T); + } + if (!hasError) { + +return "inout"; + } + + break; + } + case BUFFER_T:{if (!hasError) { + + tok = jj_consume_token(BUFFER_T); + } + if (!hasError) { + +return "buffer"; + } + + break; + } + case LINKAGE_T:{if (!hasError) { + + tok = jj_consume_token(LINKAGE_T); + } + if (!hasError) { + +return "linkage"; + } + + break; + } + default: + jj_la1[138] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::multiplying_operation() {Token *tok; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case MULT_T:{if (!hasError) { + + tok = jj_consume_token(MULT_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case SLASH_T:{if (!hasError) { + + tok = jj_consume_token(SLASH_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case MOD_T:{if (!hasError) { + + tok = jj_consume_token(MOD_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + case REM_T:{if (!hasError) { + + tok = jj_consume_token(REM_T); + } + if (!hasError) { + +return tok->image.c_str(); + } + + break; + } + default: + jj_la1[139] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::name() {QCString s,s1;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case STRINGLITERAL:{if (!hasError) { + + s = operator_symbol(); + } + + break; + } + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + + break; + } + case SLSL_T:{if (!hasError) { + + s = external_name(); + } + + break; + } + default: + jj_la1[140] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + if (!hasError) { + + if (jj_2_45(2147483647)) {if (!hasError) { + + s1 = name_ext1(); + } + if (!hasError) { + +s+=s1; + } + + } else { + ; + } + } + +return s; +assert(false); + } + + +QCString VhdlParser::name_ext1() {QCString s,s1,s2;if (!hasError) { + + s = name_ext(); + } + if (!hasError) { + + while (!hasError) { + if (jj_2_46(2147483647)) { + ; + } else { + goto end_label_28; + }if (!hasError) { + + s1 = name_ext(); + } + if (!hasError) { + +s+=s1; + } + + } + end_label_28: ; + } + +return s; +assert(false); + } + + +QCString VhdlParser::name_ext() {QCString s,s1,s2;if (!hasError) { + + if (jj_2_47(2147483647)) {if (!hasError) { + + jj_consume_token(DOT_T); + } + if (!hasError) { + + s1 = suffix(); + } + if (!hasError) { + +s+=".";s+=s1; + } + + } else if (jj_2_48(2147483647)) {if (!hasError) { + + s1 = test_att_name(); + } + if (!hasError) { + +s+=s1; + } + + } else if (jj_2_49(2147483647)) {if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = discrete_range(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+="(";s+=s1;s+=")"; + } + + } else if (jj_2_50(2147483647)) {if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + +s+="(";s+=s1; + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[141] = jj_gen; + goto end_label_29; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + +s+=",";s+=s1; + } + + } + end_label_29: ; + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+=")"; + } + + } else { + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + +return s; +assert(false); + } + + +QCString VhdlParser::test_att_name() {QCString s,s1;if (!hasError) { + + if (jj_2_51(2147483647)) {if (!hasError) { + + s1 = signature(); + } + if (!hasError) { + +s=s1; + } + + } else { + ; + } + } + if (!hasError) { + + jj_consume_token(APOSTROPHE_T); + } + if (!hasError) { + + s1 = attribute_designator(); + } + if (!hasError) { + +s+="'";s+=s1; + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+="(";s+=s1;s+=")"; + } + + break; + } + default: + jj_la1[142] = jj_gen; + ; + } + } + +return s; +assert(false); + } + + +QCString VhdlParser::indexed_name() {QCString s,s1,s2;if (!hasError) { + + s2 = identifier(); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + +s=s2+"("+s1; + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[143] = jj_gen; + goto end_label_30; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + +s+=",";s+=s1; + } + + } + end_label_30: ; + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + +return s+")"; +assert(false); + } + + +QCString VhdlParser::next_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + t = jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[144] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(NEXT_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s1 = identifier(); + } + + break; + } + default: + jj_la1[145] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WHEN_T:{if (!hasError) { + + t1 = jj_consume_token(WHEN_T); + } + if (!hasError) { + + s2 = condition(); + } + + break; + } + default: + jj_la1[146] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +if(t) s+=":"; + if(t1) s2.prepend("when "); + return s+s1+s2+";"; +assert(false); + } + + +QCString VhdlParser::null_statement() {QCString s;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + +s+=":"; + } + + break; + } + default: + jj_la1[147] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(NULL_T); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return s+="null"; +assert(false); + } + + +QCString VhdlParser::numeric_literal() {QCString s; + if (jj_2_52(2147483647)) {if (!hasError) { + + s = physical_literal(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case INTEGER: + case DECIMAL_LITERAL: + case BASED_LITERAL:{if (!hasError) { + + s = abstract_literal(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[148] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::object_class() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CONSTANT_T:{if (!hasError) { + + jj_consume_token(CONSTANT_T); + } + if (!hasError) { + +return "constant"; + } + + break; + } + case SIGNAL_T:{if (!hasError) { + + jj_consume_token(SIGNAL_T); + } + if (!hasError) { + +return "signal"; + } + + break; + } + case VARIABLE_T:{if (!hasError) { + + jj_consume_token(VARIABLE_T); + } + if (!hasError) { + +return "variable"; + } + + break; + } + case SHARED_T:{if (!hasError) { + + jj_consume_token(SHARED_T); + } + if (!hasError) { + + jj_consume_token(VARIABLE_T); + } + if (!hasError) { + +return "shared variable"; + } + + break; + } + case FILE_T:{if (!hasError) { + + jj_consume_token(FILE_T); + } + if (!hasError) { + +return "file"; + } + + break; + } + case TYPE_T:{if (!hasError) { + + jj_consume_token(TYPE_T); + } + if (!hasError) { + +return "type"; + } + + break; + } + default: + jj_la1[149] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::operator_symbol() {Token *tok;if (!hasError) { + + tok = jj_consume_token(STRINGLITERAL); + } + +return tok->image.c_str(); +assert(false); + } + + +void VhdlParser::options() {if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GUARDED_T:{if (!hasError) { + + jj_consume_token(GUARDED_T); + } + + break; + } + default: + jj_la1[150] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case INERTIAL_T: + case REJECT_T: + case TRANSPORT_T:{if (!hasError) { + + delay_mechanism(); + } + + break; + } + default: + jj_la1[151] = jj_gen; + ; + } + } + + } + + +void VhdlParser::package_body() {QCString s;if (!hasError) { + + jj_consume_token(PACKAGE_T); + } + if (!hasError) { + + jj_consume_token(BODY_T); + } + if (!hasError) { + + s = name(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + +lastCompound=current; + s.prepend("_"); + addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected); + } + if (!hasError) { + + package_body_declarative_part(); + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PACKAGE_T:{if (!hasError) { + + jj_consume_token(PACKAGE_T); + } + if (!hasError) { + + jj_consume_token(BODY_T); + } + + break; + } + default: + jj_la1[152] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + name(); + } + + break; + } + default: + jj_la1[153] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +lastCompound=0; genLabels.resize(0); + } + + +void VhdlParser::package_body_declarative_item() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_declaration(); + } + + break; + } + case TYPE_T:{if (!hasError) { + + type_declaration(); + } + + break; + } + case SUBTYPE_T:{if (!hasError) { + + subtype_declaration(); + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + constant_declaration(); + } + + break; + } + case SHARED_T: + case VARIABLE_T:{if (!hasError) { + + variable_declaration(); + } + + break; + } + case FILE_T:{if (!hasError) { + + file_declaration(); + } + + break; + } + case ALIAS_T:{if (!hasError) { + + alias_declaration(); + } + + break; + } + case USE_T:{if (!hasError) { + + use_clause(); + } + + break; + } + default: + jj_la1[154] = jj_gen; + if (jj_2_53(3)) {if (!hasError) { + + group_template_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GROUP_T:{if (!hasError) { + + group_declaration(); + } + + break; + } + default: + jj_la1[155] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + + +void VhdlParser::package_body_declarative_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case CONSTANT_T: + case FILE_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[156] = jj_gen; + goto end_label_31; + }if (!hasError) { + + package_body_declarative_item(); + } + + } + end_label_31: ; + } + + } + + +void VhdlParser::package_declaration() {QCString s;if (!hasError) { + + jj_consume_token(PACKAGE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + +lastCompound=current; + Entry *clone=new Entry(*current); + clone->section=Entry::NAMESPACE_SEC; + clone->spec=VhdlDocGen::PACKAGE; + clone->name=s; + clone->startLine=getLine(); + clone->bodyLine=getLine(); + clone->protection=Package; + current_root->addSubEntry(clone); + addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package); + } + if (!hasError) { + + package_declarative_part(); + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PACKAGE_T:{if (!hasError) { + + jj_consume_token(PACKAGE_T); + } + + break; + } + default: + jj_la1[157] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + name(); + } + + break; + } + default: + jj_la1[158] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +lastEntity=0;lastCompound=0; genLabels.resize(0); + } + + +void VhdlParser::geninter() {if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + + gen_interface_list(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + + gen_assoc_list(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + break; + } + default: + jj_la1[159] = jj_gen; + ; + } + } + + break; + } + default: + jj_la1[160] = jj_gen; + ; + } + } + + } + + +void VhdlParser::package_declarative_item() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_declaration(); + } + + break; + } + case TYPE_T:{if (!hasError) { + + type_declaration(); + } + + break; + } + case SUBTYPE_T:{if (!hasError) { + + subtype_declaration(); + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + constant_declaration(); + } + + break; + } + case SIGNAL_T:{if (!hasError) { + + signal_declaration(); + } + + break; + } + case SHARED_T: + case VARIABLE_T:{if (!hasError) { + + variable_declaration(); + } + + break; + } + case FILE_T:{if (!hasError) { + + file_declaration(); + } + + break; + } + case ALIAS_T:{if (!hasError) { + + alias_declaration(); + } + + break; + } + case COMPONENT_T:{if (!hasError) { + + component_declaration(); + } + + break; + } + default: + jj_la1[161] = jj_gen; + if (jj_2_54(2147483647)) {if (!hasError) { + + attribute_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ATTRIBUTE_T:{if (!hasError) { + + attribute_specification(); + } + + break; + } + case DISCONNECT_T:{if (!hasError) { + + disconnection_specification(); + } + + break; + } + case USE_T:{if (!hasError) { + + use_clause(); + } + + break; + } + default: + jj_la1[162] = jj_gen; + if (jj_2_55(3)) {if (!hasError) { + + group_template_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GROUP_T:{if (!hasError) { + + group_declaration(); + } + + break; + } + default: + jj_la1[163] = jj_gen; + if (jj_2_56(5)) {if (!hasError) { + + package_instantiation_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PACKAGE_T:{if (!hasError) { + + package_declaration(); + } + + break; + } + default: + jj_la1[164] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + } + } + } + } + + +void VhdlParser::package_declarative_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case COMPONENT_T: + case CONSTANT_T: + case DISCONNECT_T: + case FILE_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PACKAGE_T: + case PROCEDURE_T: + case PURE_T: + case SIGNAL_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[165] = jj_gen; + goto end_label_32; + }if (!hasError) { + + package_declarative_item(); + } + + } + end_label_32: ; + } + + } + + +QCString VhdlParser::parameter_specification() {QCString s,s1;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IN_T); + } + if (!hasError) { + + s1 = discrete_range(); + } + +return s+" in "+s1; +assert(false); + } + + +QCString VhdlParser::physical_literal() {QCString s,s1;if (!hasError) { + + if (jj_2_57(2147483647)) {if (!hasError) { + + s = abstract_literal(); + } + + } else { + ; + } + } + if (!hasError) { + + s1 = name(); + } + +s+=" ";s+=s1;s.prepend(" "); return s; +assert(false); + } + + +QCString VhdlParser::physical_type_definition() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(UNITS_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[166] = jj_gen; + goto end_label_33; + }if (!hasError) { + + s1 = secondary_unit_declaration(); + } + if (!hasError) { + +s2+=s1;s2+="#"; + } + + } + end_label_33: ; + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(UNITS_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + name(); + } + + break; + } + default: + jj_la1[167] = jj_gen; + ; + } + } + +current->args=s2; + current->args.prepend("units"); + current->spec=VhdlDocGen::UNITS; + return s2; +assert(false); + } + + +void VhdlParser::port_clause() {if (!hasError) { + + jj_consume_token(PORT_T); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + port_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +currP=0; + } + + +QCString VhdlParser::port_list() {QCString s;if (!hasError) { + + s = interface_list(); + } + +return s; +assert(false); + } + + +void VhdlParser::port_map_aspect() {if (!hasError) { + + jj_consume_token(PORT_T); + } + if (!hasError) { + + jj_consume_token(MAP_T); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + association_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + } + + +QCString VhdlParser::primary() {QCString s,s1; + if (jj_2_58(2147483647)) {if (!hasError) { + + s = function_call(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_59(2147483647)) {if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s="("+s1+")"; return s; + } + + } else if (jj_2_60(2147483647)) {if (!hasError) { + + s = qualified_expression(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_61(2147483647)) {if (!hasError) { + + s = type_conversion(); + } + if (!hasError) { + +return s; + } + + } else if (jj_2_62(2147483647)) {if (!hasError) { + + s = literal(); + } + if (!hasError) { + +s.prepend(" ");return s; + } + + } else if (jj_2_63(2147483647)) {if (!hasError) { + + s = name(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case NEW_T:{if (!hasError) { + + allocator(); + } + if (!hasError) { + +return ""; + } + + break; + } + case LPAREN_T:{if (!hasError) { + + s = aggregate(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[168] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +void VhdlParser::primary_unit() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ENTITY_T:{if (!hasError) { + + entity_declaration(); + } + + break; + } + case CONFIGURATION_T:{if (!hasError) { + + configuration_declaration(); + } + + break; + } + default: + jj_la1[169] = jj_gen; + if (jj_2_64(2147483647)) {if (!hasError) { + + package_instantiation_declaration(); + } + + } else if (jj_2_65(4)) {if (!hasError) { + + interface_package_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PACKAGE_T:{if (!hasError) { + + package_declaration(); + } + + break; + } + default: + jj_la1[170] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + + +QCString VhdlParser::procedure_call() {QCString s,s1;if (!hasError) { + + s = name(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = actual_parameter_part(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s1.prepend("("); s1.append(")"); + } + + break; + } + default: + jj_la1[171] = jj_gen; + ; + } + } + +return s+s1; +assert(false); + } + + +QCString VhdlParser::procedure_call_statement() {QCString s,s1;if (!hasError) { + + if (jj_2_66(2)) {if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + +s+=":"; + } + + } else { + ; + } + } + if (!hasError) { + + s1 = procedure_call(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return s+s1+";"; +assert(false); + } + + +QCString VhdlParser::process_declarative_item() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_declaration(); + } + if (!hasError) { + +return ""; + } + + break; + } + case TYPE_T:{if (!hasError) { + + s = type_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case SUBTYPE_T:{if (!hasError) { + + s = subtype_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + s = constant_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case SHARED_T: + case VARIABLE_T:{if (!hasError) { + + s = variable_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case FILE_T:{if (!hasError) { + + s = file_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case ALIAS_T:{if (!hasError) { + + s = alias_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[172] = jj_gen; + if (jj_2_67(3)) {if (!hasError) { + + s = attribute_declaration(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ATTRIBUTE_T:{if (!hasError) { + + s = attribute_specification(); + } + if (!hasError) { + +return s; + } + + break; + } + case USE_T:{if (!hasError) { + + s = use_clause(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[173] = jj_gen; + if (jj_2_68(3)) {if (!hasError) { + + s = group_template_declaration(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GROUP_T:{if (!hasError) { + + s = group_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[174] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + } +assert(false); + } + + +QCString VhdlParser::process_declarative_part() {QCString s,s1;if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case CONSTANT_T: + case FILE_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[175] = jj_gen; + goto end_label_34; + }if (!hasError) { + + s1 = process_declarative_item(); + } + if (!hasError) { + +s+=s1; + } + + } + end_label_34: ; + } + +return s; +assert(false); + } + + +void VhdlParser::process_statement() {QCString s,s1,s2;Token *tok=0;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[176] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case POSTPONED_T:{if (!hasError) { + + jj_consume_token(POSTPONED_T); + } + + break; + } + default: + jj_la1[177] = jj_gen; + ; + } + } + if (!hasError) { + +currP=VhdlDocGen::PROCESS; + current->startLine=getLine(); + current->bodyLine=getLine(); + } + if (!hasError) { + + jj_consume_token(PROCESS_T); + } + if (!hasError) { + + try {if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALL_T:{if (!hasError) { + + tok = jj_consume_token(ALL_T); + } + + break; + } + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s1 = sensitivity_list(); + } + + break; + } + default: + jj_la1[178] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + break; + } + default: + jj_la1[179] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IS_T:{if (!hasError) { + + jj_consume_token(IS_T); + } + + break; + } + default: + jj_la1[180] = jj_gen; + ; + } + } + if (!hasError) { + + s2 = process_declarative_part(); + } + if (!hasError) { + +if (s2.data()) + FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s2.data(),0); + FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0); + } + if (!hasError) { + + jj_consume_token(BEGIN_T); + } + if (!hasError) { + + process_statement_part(); + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case POSTPONED_T:{if (!hasError) { + + jj_consume_token(POSTPONED_T); + } + + break; + } + default: + jj_la1[181] = jj_gen; + ; + } + } + + } catch ( ...) { +error_skipto(PROCESS_T); + } + } + if (!hasError) { + + jj_consume_token(PROCESS_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[182] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +if(s.isEmpty()) + currName=VhdlDocGen::getProcessNumber(); + else + currName=s; + + current->name=currName; + tempEntry=current; + current->endBodyLine=getLine(); + currP=0; + if(tok) + s1=tok->image.data(); + createFunction(currName,VhdlDocGen::PROCESS,s1.data()); + createFlow(); + currName=""; + newEntry(); + } + + +void VhdlParser::process_statement_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ASSERT_T: + case CASE_T: + case EXIT_T: + case FOR_T: + case IF_T: + case LOOP_T: + case NEXT_T: + case NULL_T: + case REPORT_T: + case RETURN_T: + case WAIT_T: + case WHILE_T: + case WITH_T: + case LPAREN_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[183] = jj_gen; + goto end_label_35; + }if (!hasError) { + + sequential_statement(); + } + + } + end_label_35: ; + } + + } + + +QCString VhdlParser::qualified_expression() {QCString s,s1;if (!hasError) { + + s1 = identifier(); + } + if (!hasError) { + + jj_consume_token(APOSTROPHE_T); + } + if (!hasError) { + +s=s1+"'"; + } + if (!hasError) { + + if (jj_2_69(2147483647)) {if (!hasError) { + + s1 = aggregate(); + } + if (!hasError) { + +s+=s1; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +s+="(";s+=s1;s+=")"; + } + + break; + } + default: + jj_la1[184] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + +return s; +assert(false); + } + + +QCString VhdlParser::range() {QCString s,s1,s2; + if (jj_2_70(2147483647)) {if (!hasError) { + + s = simple_expression(); + } + if (!hasError) { + + s1 = direction(); + } + if (!hasError) { + + s2 = simple_expression(); + } + if (!hasError) { + +return s+" "+s1+" "+s2; + } + + } else if (jj_2_71(2147483647)) {if (!hasError) { + + s = attribute_name(); + } + if (!hasError) { + +return s; + } + + } else { + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::range_constraint() {QCString s,s1;if (!hasError) { + + jj_consume_token(RANGE_T); + } + if (!hasError) { + + s = range(); + } + +return " range "+s; +assert(false); + } + + +void VhdlParser::record_type_definition() {if (!hasError) { + + jj_consume_token(RECORD_T); + } + if (!hasError) { + + try {if (!hasError) { + + while (!hasError) {if (!hasError) { + + element_declaration(); + } + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[185] = jj_gen; + goto end_label_36; + } + } + end_label_36: ; + } + + } catch ( ...) { +error_skipto(END_T); + } + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(RECORD_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + name(); + } + + break; + } + default: + jj_la1[186] = jj_gen; + ; + } + } + + } + + +QCString VhdlParser::relation() {QCString s,s1,s2;if (!hasError) { + + s = shift_expression(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LESSTHAN_T: + case GREATERTHAN_T: + case LT_T: + case GT_T: + case EQU_T: + case NOTEQU_T:{if (!hasError) { + + s1 = relation_operator(); + } + if (!hasError) { + + s2 = shift_expression(); + } + + break; + } + default: + jj_la1[187] = jj_gen; + ; + } + } + +return s+s1+s2; +assert(false); + } + + +QCString VhdlParser::relation_operator() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LT_T:{if (!hasError) { + + jj_consume_token(LT_T); + } + if (!hasError) { + +return "<"; + } + + break; + } + case GT_T:{if (!hasError) { + + jj_consume_token(GT_T); + } + if (!hasError) { + +return ">"; + } + + break; + } + case EQU_T:{if (!hasError) { + + jj_consume_token(EQU_T); + } + if (!hasError) { + +return "="; + } + + break; + } + case GREATERTHAN_T:{if (!hasError) { + + jj_consume_token(GREATERTHAN_T); + } + if (!hasError) { + +return ">="; + } + + break; + } + case LESSTHAN_T:{if (!hasError) { + + jj_consume_token(LESSTHAN_T); + } + if (!hasError) { + +return "<="; + } + + break; + } + case NOTEQU_T:{if (!hasError) { + + jj_consume_token(NOTEQU_T); + } + if (!hasError) { + +return "/="; + } + + break; + } + default: + jj_la1[188] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::report_statement() {Token *t=0;Token *t1=0;QCString s,s1,s2;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + t = jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[189] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(REPORT_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SEVERITY_T:{if (!hasError) { + + t1 = jj_consume_token(SEVERITY_T); + } + if (!hasError) { + + s2 = expression(); + } + + break; + } + default: + jj_la1[190] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +if(t) s.append(":"); + s1.prepend(" report "); + if(t1) s2.prepend(" severity "); + return s+s1+s2+";"; +assert(false); + } + + +QCString VhdlParser::return_statement() {QCString s,s1;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + +s+=":"; + } + + break; + } + default: + jj_la1[191] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(RETURN_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ABS_T: + case NEW_T: + case NOT_T: + case NULL_T: + case LPAREN_T: + case PLUS_T: + case MINUS_T: + case SLSL_T: + case INTEGER: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER: + case CHARACTER_LITERAL: + case DECIMAL_LITERAL: + case BASED_LITERAL: + case BIT_STRING_LITERAL:{if (!hasError) { + + s1 = expression(); + } + + break; + } + default: + jj_la1[192] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return s+" return "+s1+";"; +assert(false); + } + + +QCString VhdlParser::scalar_type_definition() {QCString s,s1; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + s = enumeration_type_definition(); + } + if (!hasError) { + +return s; + } + + break; + } + case RANGE_T:{if (!hasError) { + + s = range_constraint(); + } + if (!hasError) { + + if (jj_2_72(2147483647)) {if (!hasError) { + + s1 = physical_type_definition(); + } + + } else { + ; + } + } + if (!hasError) { + +s+=" ";s+=s1;return s; + } + + break; + } + default: + jj_la1[193] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +void VhdlParser::secondary_unit() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ARCHITECTURE_T:{if (!hasError) { + + architecture_body(); + } + + break; + } + case PACKAGE_T:{if (!hasError) { + + package_body(); + } + + break; + } + default: + jj_la1[194] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +QCString VhdlParser::secondary_unit_declaration() {QCString s,s1;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(EQU_T); + } + if (!hasError) { + + s1 = physical_literal(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return s+"="+s1; +assert(false); + } + + +QCString VhdlParser::selected_name() {QCString s,s1;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(DOT_T); + } + if (!hasError) { + + s1 = suffix(); + } + +return s+"."+s1; +assert(false); + } + + +void VhdlParser::selected_signal_assignment() {if (!hasError) { + + jj_consume_token(WITH_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(SELECT_T); + } + if (!hasError) { + + target(); + } + if (!hasError) { + + jj_consume_token(LESSTHAN_T); + } + if (!hasError) { + + options(); + } + if (!hasError) { + + selected_waveforms(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::selected_waveforms() {if (!hasError) { + + waveform(); + } + if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + choices(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[195] = jj_gen; + goto end_label_37; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + waveform(); + } + if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + choices(); + } + + } + end_label_37: ; + } + + } + + +QCString VhdlParser::sensitivity_clause() {QCString s;if (!hasError) { + + jj_consume_token(ON_T); + } + if (!hasError) { + + s = sensitivity_list(); + } + +s.prepend(" on "); + return s; +assert(false); + } + + +QCString VhdlParser::sensitivity_list() {QCString s,s1;if (!hasError) { + + s = name(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[196] = jj_gen; + goto end_label_38; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + +s+=",";s+=s1; + } + + } + end_label_38: ; + } + +return s; +assert(false); + } + + +void VhdlParser::sequence_of_statement() {if (!hasError) { + + while (!hasError) { + if (jj_2_73(3)) { + ; + } else { + goto end_label_39; + }if (!hasError) { + + sequential_statement(); + } + + } + end_label_39: ; + } + + } + + +void VhdlParser::sequential_statement() {QCString s; + if (jj_2_74(2147483647)) {if (!hasError) { + + s = signal_assignment_statement(); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0); + } + + } else if (jj_2_75(3)) {if (!hasError) { + + s = assertion_statement(); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0); + } + + } else if (jj_2_76(3)) {if (!hasError) { + + s = report_statement(); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0); + } + + } else if (jj_2_77(3)) {if (!hasError) { + + s = wait_statement(); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0); + } + + } else if (jj_2_78(2147483647)) {if (!hasError) { + + s = variable_assignment_statement(); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0); + } + + } else if (jj_2_79(3)) {if (!hasError) { + + s = procedure_call_statement(); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0); + } + + } else if (jj_2_80(3)) {if (!hasError) { + + if_statement(); + } + + } else if (jj_2_81(3)) {if (!hasError) { + + case_statement(); + } + + } else if (jj_2_82(3)) {if (!hasError) { + + loop_statement(); + } + + } else if (jj_2_83(3)) {if (!hasError) { + + s = next_statement(); + } + + } else if (jj_2_84(3)) {if (!hasError) { + + s = exit_statement(); + } + + } else if (jj_2_85(3)) {if (!hasError) { + + s = return_statement(); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case NULL_T: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = null_statement(); + } + if (!hasError) { + +FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0); + } + + break; + } + default: + jj_la1[197] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + +QCString VhdlParser::shift_expression() {QCString s,s1,s2;if (!hasError) { + + s = simple_expression(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ROL_T: + case ROR_T: + case SLA_T: + case SLL_T: + case SRA_T: + case SRL_T:{if (!hasError) { + + s1 = shift_operator(); + } + if (!hasError) { + + s2 = simple_expression(); + } + + break; + } + default: + jj_la1[198] = jj_gen; + ; + } + } + +return s+s1+s2; +assert(false); + } + + +QCString VhdlParser::shift_operator() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLL_T:{if (!hasError) { + + jj_consume_token(SLL_T); + } + if (!hasError) { + +return "sll"; + } + + break; + } + case SRL_T:{if (!hasError) { + + jj_consume_token(SRL_T); + } + if (!hasError) { + +return "srl"; + } + + break; + } + case SLA_T:{if (!hasError) { + + jj_consume_token(SLA_T); + } + if (!hasError) { + +return "sla"; + } + + break; + } + case SRA_T:{if (!hasError) { + + jj_consume_token(SRA_T); + } + if (!hasError) { + +return "sra"; + } + + break; + } + case ROL_T:{if (!hasError) { + + jj_consume_token(ROL_T); + } + if (!hasError) { + +return "rol"; + } + + break; + } + case ROR_T:{if (!hasError) { + + jj_consume_token(ROR_T); + } + if (!hasError) { + +return "ror"; + } + + break; + } + default: + jj_la1[199] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::sign() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PLUS_T:{if (!hasError) { + + jj_consume_token(PLUS_T); + } + if (!hasError) { + +return "+"; + } + + break; + } + case MINUS_T:{if (!hasError) { + + jj_consume_token(MINUS_T); + } + if (!hasError) { + +return "-"; + } + + break; + } + default: + jj_la1[200] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::signal_assignment_statement() {QCString s,s1,s2,s3; + if (jj_2_87(2147483647)) {if (!hasError) { + + conditional_signal_assignment_wave(); + } + if (!hasError) { + +return ""; + } + + } else if (jj_2_88(2147483647)) {if (!hasError) { + + selected_signal_assignment_wave(); + } + if (!hasError) { + +return ""; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + if (jj_2_86(2)) {if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + +s+=":"; + } + + } else { + ; + } + } + if (!hasError) { + + s1 = target(); + } + if (!hasError) { + + jj_consume_token(LESSTHAN_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case INERTIAL_T: + case REJECT_T: + case TRANSPORT_T:{if (!hasError) { + + s2 = delay_mechanism(); + } + + break; + } + default: + jj_la1[201] = jj_gen; + ; + } + } + if (!hasError) { + + s3 = waveform(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + if (!hasError) { + +return s+s1+"<="+s2+s3+";"; + } + + break; + } + default: + jj_la1[202] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +void VhdlParser::semi() {if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::signal_declaration() {QCString s,s1,s2,s3,s4;if (!hasError) { + + jj_consume_token(SIGNAL_T); + } + if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = subtype_indication(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BUS_T: + case REGISTER_T:{if (!hasError) { + + s2 = signal_kind(); + } + + break; + } + default: + jj_la1[203] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case VARASSIGN_T:{if (!hasError) { + + jj_consume_token(VARASSIGN_T); + } + if (!hasError) { + + s3 = expression(); + } + + break; + } + default: + jj_la1[204] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +s4=s1+s2+s3; + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public); + } + + +QCString VhdlParser::signal_kind() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case REGISTER_T:{if (!hasError) { + + jj_consume_token(REGISTER_T); + } + if (!hasError) { + +return "register"; + } + + break; + } + case BUS_T:{if (!hasError) { + + jj_consume_token(BUS_T); + } + if (!hasError) { + +return "bus"; + } + + break; + } + default: + jj_la1[205] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::signal_list() {QCString s,s1; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = name(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[206] = jj_gen; + goto end_label_40; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + +s+=",";s+=s1; + } + + } + end_label_40: ; + } + + break; + } + case OTHER_T:{if (!hasError) { + + jj_consume_token(OTHER_T); + } + if (!hasError) { + +return "other"; + } + + break; + } + case ALL_T:{if (!hasError) { + + jj_consume_token(ALL_T); + } + if (!hasError) { + +return "all"; + } + + break; + } + default: + jj_la1[207] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::signature() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(LBRACKET_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = name(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[208] = jj_gen; + goto end_label_41; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + +s+=",";s+=s1; + } + + } + end_label_41: ; + } + + break; + } + default: + jj_la1[209] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case RETURN_T:{if (!hasError) { + + jj_consume_token(RETURN_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + +s+="return ";s+=s1; + } + + break; + } + default: + jj_la1[210] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(RBRACKET_T); + } + +s1="["+s+"]";return s1; +assert(false); + } + + +QCString VhdlParser::simple_expression() {QCString s,s1,s2;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PLUS_T: + case MINUS_T:{if (!hasError) { + + s = sign(); + } + + break; + } + default: + jj_la1[211] = jj_gen; + ; + } + } + if (!hasError) { + + s1 = term(); + } + if (!hasError) { + +s+=s1; + } + if (!hasError) { + + while (!hasError) { + if (jj_2_89(2147483647)) { + ; + } else { + goto end_label_42; + }if (!hasError) { + + s1 = adding_operator(); + } + if (!hasError) { + + s2 = term(); + } + if (!hasError) { + +s+=s1;s+=s2; + } + + } + end_label_42: ; + } + +return s; +assert(false); + } + + +void VhdlParser::simple_name() {if (!hasError) { + + name(); + } + + } + + +QCString VhdlParser::slice_name() {QCString s,s1;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = discrete_range(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + +return s+"("+s1+")"; +assert(false); + } + + +QCString VhdlParser::string_literal() {Token *tok;if (!hasError) { + + tok = jj_consume_token(STRINGLITERAL); + } + +return tok->image.c_str(); +assert(false); + } + + +void VhdlParser::subprogram_body() {QCString s;if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + try {if (!hasError) { + + s = subprogram_declarative_part(); + } + if (!hasError) { + +if (s.data()) + { + FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s,0); + } + FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0); + } + + } catch ( ...) { +error_skipto(BEGIN_T); + } + } + if (!hasError) { + + jj_consume_token(BEGIN_T); + } + if (!hasError) { + + subprogram_statement_part(); + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case PROCEDURE_T:{if (!hasError) { + + subprogram_kind(); + } + + break; + } + default: + jj_la1[212] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + designator(); + } + + break; + } + default: + jj_la1[213] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +tempEntry->endBodyLine=getLine(END_T); + createFlow(); + currP=0; + } + + +void VhdlParser::subprogram_declaration() { + if (jj_2_90(2147483647)) {if (!hasError) { + + subprogram_instantiation_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_specification(); + } + if (!hasError) { + + subprogram_1(); + } + if (!hasError) { + +currP=0; + } + + break; + } + default: + jj_la1[214] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + +void VhdlParser::subprogram_1() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IS_T:{if (!hasError) { + + subprogram_body(); + } + + break; + } + case SEMI_T:{if (!hasError) { + + jj_consume_token(SEMI_T); + } + + break; + } + default: + jj_la1[215] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +QCString VhdlParser::subprogram_declarative_item() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_declaration(); + } + if (!hasError) { + +return ""; + } + + break; + } + case TYPE_T:{if (!hasError) { + + s = type_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case IS_T:{if (!hasError) { + + subprogram_body(); + } + if (!hasError) { + +return ""; + } + + break; + } + case SUBTYPE_T:{if (!hasError) { + + s = subtype_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + s = constant_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case SHARED_T: + case VARIABLE_T:{if (!hasError) { + + s = variable_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case FILE_T:{if (!hasError) { + + s = file_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + case ALIAS_T:{if (!hasError) { + + s = alias_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[216] = jj_gen; + if (jj_2_91(2147483647)) {if (!hasError) { + + s = attribute_declaration(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ATTRIBUTE_T:{if (!hasError) { + + s = attribute_specification(); + } + if (!hasError) { + +return s; + } + + break; + } + case USE_T:{if (!hasError) { + + s = use_clause(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[217] = jj_gen; + if (jj_2_92(3)) {if (!hasError) { + + s = group_template_declaration(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GROUP_T:{if (!hasError) { + + s = group_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[218] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + } +assert(false); + } + + +QCString VhdlParser::subprogram_declarative_part() {QCString s,s1;if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case CONSTANT_T: + case FILE_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case IS_T: + case PROCEDURE_T: + case PURE_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[219] = jj_gen; + goto end_label_43; + }if (!hasError) { + + s1 = subprogram_declarative_item(); + } + if (!hasError) { + +s+=s1; + } + + } + end_label_43: ; + } + +return s; +assert(false); + } + + +void VhdlParser::subprogram_kind() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T:{if (!hasError) { + + jj_consume_token(FUNCTION_T); + } + + break; + } + case PROCEDURE_T:{if (!hasError) { + + jj_consume_token(PROCEDURE_T); + } + + break; + } + default: + jj_la1[220] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +void VhdlParser::subprogram_specification() {QCString s;Token *tok=0;Token *t; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PROCEDURE_T:{if (!hasError) { + + jj_consume_token(PROCEDURE_T); + } + if (!hasError) { + + s = designator(); + } + if (!hasError) { + +currP=VhdlDocGen::PROCEDURE; + createFunction(s.data(),currP,0); + tempEntry=current; + current->startLine=getLine(PROCEDURE_T); + current->bodyLine=getLine(PROCEDURE_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + +param_sec=PARAM_SEC; + } + if (!hasError) { + + interface_list(); + } + if (!hasError) { + +param_sec=0; + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + break; + } + default: + jj_la1[221] = jj_gen; + ; + } + } + if (!hasError) { + + if (jj_2_93(2)) {if (!hasError) { + + gen_interface_list(); + } + + } else { + ; + } + } + if (!hasError) { + + if (jj_2_94(2)) {if (!hasError) { + + gen_assoc_list(); + } + + } else { + ; + } + } + if (!hasError) { + + param(); + } + if (!hasError) { + +newEntry(); + } + + break; + } + case FUNCTION_T: + case IMPURE_T: + case PURE_T:{if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IMPURE_T: + case PURE_T:{if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PURE_T:{if (!hasError) { + + tok = jj_consume_token(PURE_T); + } + + break; + } + case IMPURE_T:{if (!hasError) { + + tok = jj_consume_token(IMPURE_T); + } + + break; + } + default: + jj_la1[222] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + break; + } + default: + jj_la1[223] = jj_gen; + ; + } + } + if (!hasError) { + + t = jj_consume_token(FUNCTION_T); + } + if (!hasError) { + + s = designator(); + } + if (!hasError) { + +currP=VhdlDocGen::FUNCTION; + if(tok) + createFunction(tok->image.c_str(),currP,s.data()); + else + createFunction(0,currP,s.data()); + tempEntry=current; + current->startLine=getLine(FUNCTION_T); + current->bodyLine=getLine(FUNCTION_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + +param_sec=PARAM_SEC; + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + formal_parameter_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + +param_sec=0; + } + + break; + } + default: + jj_la1[224] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(RETURN_T); + } + if (!hasError) { + + s = type_mark(); + } + if (!hasError) { + +tempEntry=current; + current->type=s; + newEntry(); + } + + break; + } + default: + jj_la1[225] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +void VhdlParser::subprogram_statement_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ASSERT_T: + case CASE_T: + case EXIT_T: + case FOR_T: + case IF_T: + case LOOP_T: + case NEXT_T: + case NULL_T: + case REPORT_T: + case RETURN_T: + case WAIT_T: + case WHILE_T: + case WITH_T: + case LPAREN_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[226] = jj_gen; + goto end_label_44; + }if (!hasError) { + + sequential_statement(); + } + + } + end_label_44: ; + } + + } + + +QCString VhdlParser::subtype_declaration() {QCString s,s1;if (!hasError) { + + jj_consume_token(SUBTYPE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + s1 = subtype_indication(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,s1.data(),Public); + return " subtype "+s+" is "+s1+";"; +assert(false); + } + + +QCString VhdlParser::subtype_indication() {QCString s,s1,s2;if (!hasError) { + + s = name(); + } + if (!hasError) { + + if (jj_2_95(2147483647)) {if (!hasError) { + + s1 = name(); + } + + } else { + ; + } + } + if (!hasError) { + + if (jj_2_96(2147483647)) {if (!hasError) { + + s2 = constraint(); + } + + } else { + ; + } + } + +return s+" "+s1+" "+s2; +assert(false); + } + + +QCString VhdlParser::suffix() {QCString s; + if (jj_2_97(2147483647)) {if (!hasError) { + + s = name(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CHARACTER_LITERAL:{if (!hasError) { + + s = character_literal(); + } + if (!hasError) { + +return s; + } + + break; + } + case STRINGLITERAL:{if (!hasError) { + + s = operator_symbol(); + } + if (!hasError) { + +return s; + } + + break; + } + case ALL_T:{if (!hasError) { + + jj_consume_token(ALL_T); + } + if (!hasError) { + +return " all "; + } + + break; + } + default: + jj_la1[227] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::target() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = name(); + } + if (!hasError) { + +return s; + } + + break; + } + case LPAREN_T:{if (!hasError) { + + s = aggregate(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[228] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::term() {QCString s,s1,s2;if (!hasError) { + + s = factor(); + } + if (!hasError) { + + while (!hasError) { + if (jj_2_98(2)) { + ; + } else { + goto end_label_45; + }if (!hasError) { + + s1 = multiplying_operation(); + } + if (!hasError) { + + s2 = factor(); + } + if (!hasError) { + +s+=s1;s+=s2; + } + + } + end_label_45: ; + } + +return s; +assert(false); + } + + +QCString VhdlParser::timeout_clause() {QCString s;if (!hasError) { + + jj_consume_token(FOR_T); + } + if (!hasError) { + + s = expression(); + } + +return " for "+s; +assert(false); + } + + +QCString VhdlParser::type_conversion() {QCString s,s1;if (!hasError) { + + s = name(); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + +return s+"("+s1+")"; +assert(false); + } + + +QCString VhdlParser::type_declaration() {QCString s; + if (jj_2_99(3)) {if (!hasError) { + + s = full_type_declaration(); + } + if (!hasError) { + +return s; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case TYPE_T:{if (!hasError) { + + s = incomplete_type_declaration(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[229] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::type_definition() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case RANGE_T: + case LPAREN_T:{if (!hasError) { + + //try{ + s = scalar_type_definition(); + } + if (!hasError) { + +return s; + } + + break; + } + case ARRAY_T: + case RECORD_T:{if (!hasError) { + + s = composite_type_definition(); + } + if (!hasError) { + +return s; + } + + break; + } + case ACCESS_T:{if (!hasError) { + + s = access_type_definition(); + } + if (!hasError) { + +return s; + } + + break; + } + case FILE_T:{if (!hasError) { + + s = file_type_definition(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[230] = jj_gen; + if (jj_2_100(2)) {if (!hasError) { + + protected_type_body(); + } + if (!hasError) { + +return ""; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PROTECTED_T:{if (!hasError) { + + protected_type_declaration(); + } + if (!hasError) { + +return ""; + } + + break; + } + default: + jj_la1[231] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } +assert(false); + } + + +QCString VhdlParser::type_mark() {QCString s;if (!hasError) { + + s = name(); + } + +return s; +assert(false); + } + + +QCString VhdlParser::unconstraint_array_definition() {QCString s,s1,s2,s3;if (!hasError) { + + jj_consume_token(ARRAY_T); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s = index_subtype_definition(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[232] = jj_gen; + goto end_label_46; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = index_subtype_definition(); + } + if (!hasError) { + +s3+=",";s3+=s1; + } + + } + end_label_46: ; + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + if (!hasError) { + + jj_consume_token(OF_T); + } + if (!hasError) { + + s2 = subtype_indication(); + } + +return "array("+s+s3+") of "+s2; +assert(false); + } + + +QCString VhdlParser::use_clause() {QCString s,s1;if (!hasError) { + + jj_consume_token(USE_T); + } + if (!hasError) { + + s = selected_name(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[233] = jj_gen; + goto end_label_47; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = selected_name(); + } + if (!hasError) { + +s+=",";s+=s1; + } + + } + end_label_47: ; + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +QStringList ql1=QStringList::split(",",s,FALSE); + for (uint j=0;jhandleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::variable_declaration() {Token *tok=0;QCString s,s1,s2;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SHARED_T:{if (!hasError) { + + tok = jj_consume_token(SHARED_T); + } + + break; + } + default: + jj_la1[235] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(VARIABLE_T); + } + if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s1 = subtype_indication(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case VARASSIGN_T:{if (!hasError) { + + jj_consume_token(VARASSIGN_T); + } + if (!hasError) { + + s2 = expression(); + } + + break; + } + default: + jj_la1[236] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +int spec; + QCString val=" variable "+s+":"+s1+":="+s2+";"; + QCString it=s1+" "+s2; + if(tok != 0) + { + it.prepend(" shared "); + val.prepend(" shared"); + spec=VhdlDocGen::SHAREDVARIABLE; + } + else + spec=VhdlDocGen::SHAREDVARIABLE; + + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public); + return val; +assert(false); + } + + +QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + break; + } + default: + jj_la1[237] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(WAIT_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ON_T:{if (!hasError) { + + s1 = sensitivity_clause(); + } + + break; + } + default: + jj_la1[238] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case UNTIL_T:{if (!hasError) { + + s2 = condition_clause(); + } + + break; + } + default: + jj_la1[239] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FOR_T:{if (!hasError) { + + s3 = timeout_clause(); + } + + break; + } + default: + jj_la1[240] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +if(t) s.append(":"); + return s+" wait "+s1+s2+s3+";"; +assert(false); + } + + +QCString VhdlParser::waveform() {QCString s,s1; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ABS_T: + case NEW_T: + case NOT_T: + case NULL_T: + case LPAREN_T: + case PLUS_T: + case MINUS_T: + case SLSL_T: + case INTEGER: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER: + case CHARACTER_LITERAL: + case DECIMAL_LITERAL: + case BASED_LITERAL: + case BIT_STRING_LITERAL:{if (!hasError) { + + s = waveform_element(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[241] = jj_gen; + goto end_label_48; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + s1 = waveform_element(); + } + if (!hasError) { + +s+=","; s+=s1; + } + + } + end_label_48: ; + } + if (!hasError) { + +return s; + } + + break; + } + case UNAFFECTED_T:{if (!hasError) { + + jj_consume_token(UNAFFECTED_T); + } + if (!hasError) { + +return " unaffected "; + } + + break; + } + default: + jj_la1[242] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::waveform_element() {QCString s,s1;if (!hasError) { + + s = expression(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case AFTER_T:{if (!hasError) { + + jj_consume_token(AFTER_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + +s1.prepend(" after "); + } + + break; + } + default: + jj_la1[243] = jj_gen; + ; + } + } + +return s+s1; +assert(false); + } + + +QCString VhdlParser::protected_type_body() {if (!hasError) { + + try {if (!hasError) { + + jj_consume_token(PROTECTED_T); + } + if (!hasError) { + + jj_consume_token(BODY_T); + } + if (!hasError) { + + protected_type_body_declarative_part(); + } + + } catch ( ...) { +error_skipto(END_T); + } + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(PROTECTED_T); + } + if (!hasError) { + + jj_consume_token(BODY_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[244] = jj_gen; + ; + } + } + +return ""; +assert(false); + } + + +void VhdlParser::protected_type_body_declarative_item() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_declaration(); + } + + break; + } + case IS_T:{if (!hasError) { + + subprogram_body(); + } + + break; + } + case TYPE_T:{if (!hasError) { + + type_declaration(); + } + + break; + } + case SUBTYPE_T:{if (!hasError) { + + subtype_declaration(); + } + + break; + } + case CONSTANT_T:{if (!hasError) { + + constant_declaration(); + } + + break; + } + case SHARED_T: + case VARIABLE_T:{if (!hasError) { + + variable_declaration(); + } + + break; + } + case FILE_T:{if (!hasError) { + + file_declaration(); + } + + break; + } + case ALIAS_T:{if (!hasError) { + + alias_declaration(); + } + + break; + } + default: + jj_la1[245] = jj_gen; + if (jj_2_102(2147483647)) {if (!hasError) { + + attribute_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ATTRIBUTE_T:{if (!hasError) { + + attribute_specification(); + } + + break; + } + case USE_T:{if (!hasError) { + + use_clause(); + } + + break; + } + default: + jj_la1[246] = jj_gen; + if (jj_2_103(3)) {if (!hasError) { + + group_template_declaration(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GROUP_T:{if (!hasError) { + + group_declaration(); + } + + break; + } + default: + jj_la1[247] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + } + } + } + + +void VhdlParser::protected_type_body_declarative_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case CONSTANT_T: + case FILE_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case IS_T: + case PROCEDURE_T: + case PURE_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{ + ; + break; + } + default: + jj_la1[248] = jj_gen; + goto end_label_49; + }if (!hasError) { + + protected_type_body_declarative_item(); + } + + } + end_label_49: ; + } + + } + + +QCString VhdlParser::protected_type_declaration() {if (!hasError) { + + jj_consume_token(PROTECTED_T); + } + if (!hasError) { + + try {if (!hasError) { + + protected_type_declarative_part(); + } + + } catch ( ...) { +error_skipto(END_T); + } + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(PROTECTED_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[249] = jj_gen; + ; + } + } + +return ""; +assert(false); + } + + +void VhdlParser::protected_type_declarative_item() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_specification(); + } + + break; + } + case ATTRIBUTE_T:{if (!hasError) { + + attribute_specification(); + } + + break; + } + case USE_T:{if (!hasError) { + + use_clause(); + } + + break; + } + default: + jj_la1[250] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +void VhdlParser::protected_type_declarative_part() {if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ATTRIBUTE_T: + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T: + case USE_T:{ + ; + break; + } + default: + jj_la1[251] = jj_gen; + goto end_label_50; + }if (!hasError) { + + protected_type_declarative_item(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + end_label_50: ; + } + + } + + +QCString VhdlParser::context_ref() {QCString s;if (!hasError) { + + jj_consume_token(CONTEXT_T); + } + if (!hasError) { + + s = identifier_list(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +return "context "+s ; +assert(false); + } + + +void VhdlParser::context_declaration() {QCString s,s1;if (!hasError) { + + jj_consume_token(CONTEXT_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + +parse_sec=CONTEXT_SEC; + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CONTEXT_T: + case LIBRARY_T: + case USE_T:{ + ; + break; + } + default: + jj_la1[252] = jj_gen; + goto end_label_51; + }if (!hasError) { + + s1 = libustcont_stats(); + } + + } + end_label_51: ; + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CONTEXT_T:{if (!hasError) { + + jj_consume_token(CONTEXT_T); + } + + break; + } + default: + jj_la1[253] = jj_gen; + ; + } + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[254] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +parse_sec=0; + addVhdlType(s.data(),getLine(LIBRARY_T),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",s1.data(),Public); + } + + +QCString VhdlParser::libustcont_stats() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case USE_T:{if (!hasError) { + + s = use_clause(); + } + if (!hasError) { + +return s; + } + + break; + } + case LIBRARY_T:{if (!hasError) { + + s = library_clause(); + } + if (!hasError) { + +return s; + } + + break; + } + case CONTEXT_T:{if (!hasError) { + + s = context_ref(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[255] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +void VhdlParser::package_instantiation_declaration() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(PACKAGE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + jj_consume_token(NEW_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + + s2 = signature(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + + gen_assoc_list(); + } + + break; + } + default: + jj_la1[256] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +QCString q=" is new "+s1+s2; + addVhdlType(s.data(),getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public); + } + + +QCString VhdlParser::interface_package_declaration() {QCString s,s1;if (!hasError) { + + jj_consume_token(PACKAGE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + jj_consume_token(NEW_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + + gen_assoc_list(); + } + + break; + } + default: + jj_la1[257] = jj_gen; + ; + } + } + +current->name=s; + return "package "+s+" is new "+s1; +assert(false); + } + + +QCString VhdlParser::subprogram_instantiation_declaration() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(FUNCTION_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + jj_consume_token(IS_T); + } + if (!hasError) { + + jj_consume_token(NEW_T); + } + if (!hasError) { + + s1 = name(); + } + if (!hasError) { + + s2 = signature(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case GENERIC_T:{if (!hasError) { + + gen_assoc_list(); + } + + break; + } + default: + jj_la1[258] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + +QCString q= " is new "+s1+s2; + addVhdlType(s.data(),getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public); + return q; +assert(false); + } + + +void VhdlParser::gen_assoc_list() {if (!hasError) { + + jj_consume_token(GENERIC_T); + } + if (!hasError) { + + jj_consume_token(MAP_T); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + association_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + } + + +void VhdlParser::gen_interface_list() {if (!hasError) { + + jj_consume_token(GENERIC_T); + } + if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + +//int u=s_str.iLine; + parse_sec=GEN_SEC; + } + if (!hasError) { + + interface_list(); + } + if (!hasError) { + +// QCString vo=$3; + parse_sec=0; + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + } + + +void VhdlParser::case_scheme() {if (!hasError) { + + jj_consume_token(CASE_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(GENERATE_T); + } + if (!hasError) { + + when_stats(); + } + if (!hasError) { + + if (jj_2_104(3)) {if (!hasError) { + + ttend(); + } + + } else { + ; + } + } + if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + jj_consume_token(GENERATE_T); + } + if (!hasError) { + + generate_statement_body(); + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::when_stats() {if (!hasError) { + + while (!hasError) {if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + if (jj_2_105(2)) {if (!hasError) { + + label(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + + } else { + ; + } + } + if (!hasError) { + + choices(); + } + if (!hasError) { + + jj_consume_token(ARROW_T); + } + if (!hasError) { + + generate_statement_body(); + } + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WHEN_T:{ + ; + break; + } + default: + jj_la1[259] = jj_gen; + goto end_label_52; + } + } + end_label_52: ; + } + + } + + +void VhdlParser::ttend() {if (!hasError) { + + jj_consume_token(END_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + identifier(); + } + + break; + } + default: + jj_la1[260] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::generate_statement_body() {if (!hasError) { + + jj_consume_token(BEGIN_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ALIAS_T: + case ATTRIBUTE_T: + case BEGIN_T: + case COMPONENT_T: + case CONSTANT_T: + case DISCONNECT_T: + case FILE_T: + case FOR_T: + case FUNCTION_T: + case GROUP_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T: + case SIGNAL_T: + case SHARED_T: + case SUBTYPE_T: + case TYPE_T: + case USE_T: + case VARIABLE_T:{if (!hasError) { + + block_declarative_part(); + } + if (!hasError) { + + jj_consume_token(BEGIN_T); + } + + break; + } + default: + jj_la1[261] = jj_gen; + ; + } + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ASSERT_T: + case CASE_T: + case POSTPONED_T: + case PROCESS_T: + case WITH_T: + case LPAREN_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{ + ; + break; + } + default: + jj_la1[262] = jj_gen; + goto end_label_53; + }if (!hasError) { + + concurrent_statement(); + } + + } + end_label_53: ; + } + + } + + +QCString VhdlParser::external_name() {QCString s,s1,s2;if (!hasError) { + + jj_consume_token(SLSL_T); + } + if (!hasError) { + + s = sig_stat(); + } + if (!hasError) { + + s1 = external_pathname(); + } + if (!hasError) { + + jj_consume_token(COLON_T); + } + if (!hasError) { + + s2 = subtype_indication(); + } + if (!hasError) { + + jj_consume_token(RSRS_T); + } + +QCString t="<<"+s; + QCString t1=s1+":"+s2+">>"; + return s+s1; +assert(false); + } + + +QCString VhdlParser::sig_stat() {Token *t; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case CONSTANT_T:{if (!hasError) { + + t = jj_consume_token(CONSTANT_T); + } + if (!hasError) { + +return t->image.data(); + } + + break; + } + case SIGNAL_T:{if (!hasError) { + + t = jj_consume_token(SIGNAL_T); + } + if (!hasError) { + +return t->image.data(); + } + + break; + } + case VARIABLE_T:{if (!hasError) { + + t = jj_consume_token(VARIABLE_T); + } + if (!hasError) { + +return t->image.data(); + } + + break; + } + default: + jj_la1[263] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::external_pathname() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case DOT_T:{if (!hasError) { + + s = absolute_pathname(); + } + if (!hasError) { + +return s; + } + + break; + } + case NEG_T:{if (!hasError) { + + s = relative_pathname(); + } + if (!hasError) { + +return s; + } + + break; + } + case AT_T:{if (!hasError) { + + s = package_path_name(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[264] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::absolute_pathname() {QCString s,s1; + if (jj_2_106(2147483647)) {if (!hasError) { + + jj_consume_token(DOT_T); + } + if (!hasError) { + + s = pathname_element_list(); + } + if (!hasError) { + + s1 = identifier(); + } + if (!hasError) { + +return "."+s+s1; + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case DOT_T:{if (!hasError) { + + jj_consume_token(DOT_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + +return "."+s; + } + + break; + } + default: + jj_la1[265] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } +assert(false); + } + + +QCString VhdlParser::relative_pathname() {QCString s,s1,s2;if (!hasError) { + + s = neg_list(); + } + if (!hasError) { + + if (jj_2_107(2147483647)) {if (!hasError) { + + s1 = pathname_element_list(); + } + + } else { + ; + } + } + if (!hasError) { + + s2 = identifier(); + } + +return s+s1+s2; +assert(false); + } + + +QCString VhdlParser::neg_list() {QCString s;if (!hasError) { + + while (!hasError) {if (!hasError) { + + jj_consume_token(NEG_T); + } + if (!hasError) { + + jj_consume_token(DOT_T); + } + if (!hasError) { + +s+="^."; + } + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case NEG_T:{ + ; + break; + } + default: + jj_la1[266] = jj_gen; + goto end_label_54; + } + } + end_label_54: ; + } + +return s; +assert(false); + } + + +QCString VhdlParser::pathname_element() {QCString s,s1;if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = expression(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + break; + } + default: + jj_la1[267] = jj_gen; + ; + } + } + +if(!s1.isEmpty()) + return s+"("+s1+")"; + + return s; +assert(false); + } + + +QCString VhdlParser::pathname_element_list() {QCString s,s1,s2;if (!hasError) { + if (!hasError) { + + s = pathname_element(); + } + if (!hasError) { + + jj_consume_token(DOT_T); + } + + } + if (!hasError) { + +s+="."; + } + if (!hasError) { + + while (!hasError) { + if (jj_2_108(2147483647)) { + ; + } else { + goto end_label_55; + }if (!hasError) { + + s1 = pathname_element(); + } + if (!hasError) { + + jj_consume_token(DOT_T); + } + if (!hasError) { + +s2+=s1;s2+="."; + } + + } + end_label_55: ; + } + +return s+s2; +assert(false); + } + + +QCString VhdlParser::package_path_name() {QCString s;if (!hasError) { + + jj_consume_token(AT_T); + } + if (!hasError) { + + s = name(); + } + +return "@"+s; +assert(false); + } + + +void VhdlParser::conditional_signal_assignment_wave() { + if (jj_2_109(2147483647)) {if (!hasError) { + + conditional_force_assignment(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T: + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + conditional_waveform_assignment(); + } + + break; + } + default: + jj_la1[268] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + +void VhdlParser::conditional_waveform_assignment() {if (!hasError) { + + target(); + } + if (!hasError) { + + jj_consume_token(LESSTHAN_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case INERTIAL_T: + case REJECT_T: + case TRANSPORT_T:{if (!hasError) { + + delay_mechanism(); + } + + break; + } + default: + jj_la1[269] = jj_gen; + ; + } + } + if (!hasError) { + + waveform_element(); + } + if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ELSE_T:{if (!hasError) { + + else_wave_list(); + } + + break; + } + default: + jj_la1[270] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::else_wave_list() {if (!hasError) { + + jj_consume_token(ELSE_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WHEN_T:{if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + expression(); + } + + break; + } + default: + jj_la1[271] = jj_gen; + ; + } + } + + } + + +void VhdlParser::conditional_force_assignment() {if (!hasError) { + + target(); + } + if (!hasError) { + + jj_consume_token(LESSTHAN_T); + } + if (!hasError) { + + jj_consume_token(FORCE_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IN_T: + case OUT_T:{if (!hasError) { + + inout_stat(); + } + + break; + } + default: + jj_la1[272] = jj_gen; + ; + } + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ABS_T: + case NEW_T: + case NOT_T: + case NULL_T: + case LPAREN_T: + case PLUS_T: + case MINUS_T: + case SLSL_T: + case INTEGER: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER: + case CHARACTER_LITERAL: + case DECIMAL_LITERAL: + case BASED_LITERAL: + case BIT_STRING_LITERAL:{if (!hasError) { + + expression(); + } + if (!hasError) { + + else_stat(); + } + + break; + } + default: + jj_la1[273] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::selected_signal_assignment_wave() { + if (jj_2_110(2147483647)) {if (!hasError) { + + selected_force_assignment(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WITH_T:{if (!hasError) { + + selected_waveform_assignment(); + } + + break; + } + default: + jj_la1[274] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + +void VhdlParser::selected_variable_assignment() {if (!hasError) { + + jj_consume_token(WITH_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(SELECT_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case Q_T:{if (!hasError) { + + jj_consume_token(Q_T); + } + + break; + } + default: + jj_la1[275] = jj_gen; + ; + } + } + if (!hasError) { + + select_name(); + } + if (!hasError) { + + jj_consume_token(VARASSIGN_T); + } + if (!hasError) { + + sel_var_list(); + } + + } + + +void VhdlParser::select_name() { + if (jj_2_111(2147483647)) {if (!hasError) { + + aggregate(); + } + + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case SLSL_T: + case STRINGLITERAL: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + name(); + } + + break; + } + default: + jj_la1[276] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + } + + +void VhdlParser::selected_waveform_assignment() {if (!hasError) { + + jj_consume_token(WITH_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(SELECT_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case Q_T:{if (!hasError) { + + jj_consume_token(Q_T); + } + + break; + } + default: + jj_la1[277] = jj_gen; + ; + } + } + if (!hasError) { + + target(); + } + if (!hasError) { + + jj_consume_token(LESSTHAN_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case INERTIAL_T: + case REJECT_T: + case TRANSPORT_T:{if (!hasError) { + + delay_mechanism(); + } + + break; + } + default: + jj_la1[278] = jj_gen; + ; + } + } + if (!hasError) { + + sel_wave_list(); + } + + } + + +void VhdlParser::selected_force_assignment() {if (!hasError) { + + jj_consume_token(WITH_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(SELECT_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case Q_T:{if (!hasError) { + + jj_consume_token(Q_T); + } + + break; + } + default: + jj_la1[279] = jj_gen; + ; + } + } + if (!hasError) { + + target(); + } + if (!hasError) { + + jj_consume_token(LESSTHAN_T); + } + if (!hasError) { + + jj_consume_token(FORCE_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IN_T: + case OUT_T:{if (!hasError) { + + inout_stat(); + } + + break; + } + default: + jj_la1[280] = jj_gen; + ; + } + } + if (!hasError) { + + sel_var_list(); + } + + } + + +void VhdlParser::sel_var_list() {if (!hasError) { + if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + choices(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{if (!hasError) { + + jj_consume_token(COMMA_T); + } + + break; + } + case SEMI_T:{if (!hasError) { + + jj_consume_token(SEMI_T); + } + + break; + } + default: + jj_la1[281] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + } + if (!hasError) { + + while (!hasError) { + if (jj_2_112(2147483647)) { + ; + } else { + goto end_label_56; + }if (!hasError) { + + expression(); + } + if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + choices(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{if (!hasError) { + + jj_consume_token(COMMA_T); + } + + break; + } + case SEMI_T:{if (!hasError) { + + jj_consume_token(SEMI_T); + } + + break; + } + default: + jj_la1[282] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + } + end_label_56: ; + } + + } + + +void VhdlParser::sel_wave_list() {if (!hasError) { + + waveform_element(); + } + if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + choices(); + } + if (!hasError) { + + while (!hasError) { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case COMMA_T:{ + ; + break; + } + default: + jj_la1[283] = jj_gen; + goto end_label_57; + }if (!hasError) { + + jj_consume_token(COMMA_T); + } + if (!hasError) { + + sel_wave_list(); + } + + } + end_label_57: ; + } + if (!hasError) { + + jj_consume_token(SEMI_T); + } + + } + + +void VhdlParser::inout_stat() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IN_T:{if (!hasError) { + + jj_consume_token(IN_T); + } + + break; + } + case OUT_T:{if (!hasError) { + + jj_consume_token(OUT_T); + } + + break; + } + default: + jj_la1[284] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + +void VhdlParser::else_stat() {if (!hasError) { + + while (!hasError) {if (!hasError) { + + jj_consume_token(ELSE_T); + } + if (!hasError) { + + expression(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case WHEN_T:{if (!hasError) { + + jj_consume_token(WHEN_T); + } + if (!hasError) { + + expression(); + } + + break; + } + default: + jj_la1[285] = jj_gen; + ; + } + } + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case ELSE_T:{ + ; + break; + } + default: + jj_la1[286] = jj_gen; + goto end_label_58; + } + } + end_label_58: ; + } + + } + + +QCString VhdlParser::interface_subprogram_declaration() {QCString s; + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PROCEDURE_T:{if (!hasError) { + + s = iproc(); + } + if (!hasError) { + +return s; + } + + break; + } + case FUNCTION_T: + case IMPURE_T: + case PURE_T:{if (!hasError) { + + s = ifunc(); + } + if (!hasError) { + +return s; + } + + break; + } + default: + jj_la1[287] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } +assert(false); + } + + +QCString VhdlParser::iproc() {QCString s,s1;if (!hasError) { + + jj_consume_token(PROCEDURE_T); + } + if (!hasError) { + + s = identifier(); + } + if (!hasError) { + + s1 = param(); + } + +current->name=s; + return "procedure "+s+s1; +assert(false); + } + + +QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IMPURE_T: + case PURE_T:{ + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PURE_T:{if (!hasError) { + + t = jj_consume_token(PURE_T); + } + + break; + } + case IMPURE_T:{if (!hasError) { + + t = jj_consume_token(IMPURE_T); + } + + break; + } + default: + jj_la1[288] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + break; + } + default: + jj_la1[289] = jj_gen; + ; + } + } + if (!hasError) { + + jj_consume_token(FUNCTION_T); + } + if (!hasError) { + + s = name(); + } + if (!hasError) { + + s1 = param(); + } + if (!hasError) { + + jj_consume_token(RETURN_T); + } + if (!hasError) { + + s2 = name(); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case IS_T:{if (!hasError) { + + t1 = jj_consume_token(IS_T); + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + s3 = identifier(); + } + + break; + } + case BOX_T:{if (!hasError) { + + t2 = jj_consume_token(BOX_T); + } + + break; + } + default: + jj_la1[290] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + break; + } + default: + jj_la1[291] = jj_gen; + ; + } + } + +QCString q; + if(t) q=t->image.data(); + if(t2) s3="<>"; + if (!s3.isEmpty()) + { + s3.prepend(" is "); + } + current->name=s; + if (parse_sec==GEN_SEC) + { + QCString ss=q+" function "+s1+" return "+s2+s3; + int a=getLine(FUNCTION_T); + int b=getLine(PROCEDURE_T); + + if (a>b) b=a; + addVhdlType(current->name.data(),b,Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,ss.data(),0,Public); + } + currP=0;return ""; +assert(false); + } + + +QCString VhdlParser::param() {QCString s,s1;Token *tok=0;if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case PARAMETER_T:{if (!hasError) { + + tok = jj_consume_token(PARAMETER_T); + } + + break; + } + default: + jj_la1[292] = jj_gen; + ; + } + } + if (!hasError) { + +param_sec=PARAM_SEC; + } + if (!hasError) { + + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case LPAREN_T:{if (!hasError) { + + jj_consume_token(LPAREN_T); + } + if (!hasError) { + + s1 = interface_list(); + } + if (!hasError) { + + jj_consume_token(RPAREN_T); + } + + break; + } + default: + jj_la1[293] = jj_gen; + ; + } + } + +if(tok) + { + s = tok->image.data(); + param_sec=0; + } + return s+"("+s1+")"; +assert(false); + } + + +void VhdlParser::parseInline() { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case POSTPONED_T: + case PROCESS_T: + case BASIC_IDENTIFIER: + case EXTENDED_CHARACTER:{if (!hasError) { + + process_statement(); + } + + break; + } + case FUNCTION_T: + case IMPURE_T: + case PROCEDURE_T: + case PURE_T:{if (!hasError) { + + subprogram_declaration(); + } + + break; + } + default: + jj_la1[294] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; + } + } + + + VhdlParser::VhdlParser(TokenManager *tm){ + head = NULL; + ReInit(tm); +} + VhdlParser::~VhdlParser() +{ + if (token_source) delete token_source; + if (head) { + Token *next, *t = head; + while (t) { + next = t->next; + delete t; + t = next; + } + } + if (errorHandlerCreated) { + delete errorHandler; + } +} + +void VhdlParser::ReInit(TokenManager *tm){ + if (head) delete head; + errorHandler = new ErrorHandler(); + errorHandlerCreated = true; + hasError = false; + token_source = tm; + head = token = new Token(); + token->kind = 0; + token->next = NULL; + jj_lookingAhead = false; + jj_rescan = false; + jj_done = false; + jj_scanpos = jj_lastpos = NULL; + jj_gc = 0; + jj_kind = -1; + trace_indent = 0; + trace_enabled = false; + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 295; i++) jj_la1[i] = -1; + } + + +Token * VhdlParser::jj_consume_token(int kind) { + Token *oldToken; + if ((oldToken = token)->next != NULL) token = token->next; + else token = token->next = token_source->getNextToken(); + jj_ntk = -1; + if (token->kind == kind) { + jj_gen++; + if (++jj_gc > 100) { + jj_gc = 0; + for (int i = 0; i < 112; i++) { + JJCalls *c = &jj_2_rtns[i]; + while (c != NULL) { + if (c->gen < jj_gen) c->first = NULL; + c = c->next; + } + } + } + return token; + } + token = oldToken; + jj_kind = kind; + JAVACC_STRING_TYPE image = kind >= 0 ? tokenImage[kind] : tokenImage[0]; + errorHandler->handleUnexpectedToken(kind, image.substr(1, image.size() - 2), getToken(1), this), hasError = true; + return token; + } + + +bool VhdlParser::jj_scan_token(int kind){ + if (jj_scanpos == jj_lastpos) { + jj_la--; + if (jj_scanpos->next == NULL) { + jj_lastpos = jj_scanpos = jj_scanpos->next = token_source->getNextToken(); + } else { + jj_lastpos = jj_scanpos = jj_scanpos->next; + } + } else { + jj_scanpos = jj_scanpos->next; + } + if (jj_rescan) { + int i = 0; Token *tok = token; + while (tok != NULL && tok != jj_scanpos) { i++; tok = tok->next; } + if (tok != NULL) jj_add_error_token(kind, i); + } + if (jj_scanpos->kind != kind) return true; + if (jj_la == 0 && jj_scanpos == jj_lastpos) { return jj_done = true; } + return false; + } + + +/** Get the next Token. */ + +Token * VhdlParser::getNextToken(){ + if (token->next != NULL) token = token->next; + else token = token->next = token_source->getNextToken(); + jj_ntk = -1; + jj_gen++; + return token; + } + +/** Get the specific Token. */ + +Token * VhdlParser::getToken(int index){ + Token *t = token; + for (int i = 0; i < index; i++) { + if (t->next != NULL) t = t->next; + else t = t->next = token_source->getNextToken(); + } + return t; + } + + +int VhdlParser::jj_ntk_f(){ + if ((jj_nt=token->next) == NULL) + return (jj_ntk = (token->next=token_source->getNextToken())->kind); + else + return (jj_ntk = jj_nt->kind); + } + + +void VhdlParser::jj_add_error_token(int kind, int pos) { + } + + /** Generate ParseException. */ + + void VhdlParser::parseError() { + fprintf(stderr, "Parse error at: %d:%d, after token: %s encountered: %s\n", token->beginLine, token->beginColumn, addUnicodeEscapes(token->image).c_str(), addUnicodeEscapes(getToken(1)->image).c_str()); + } + + + void VhdlParser::enable_tracing() { + } + + /** Disable tracing. */ + + void VhdlParser::disable_tracing() { + } + + +void VhdlParser::jj_rescan_token(){ + jj_rescan = true; + for (int i = 0; i < 112; i++) { + JJCalls *p = &jj_2_rtns[i]; + do { + if (p->gen > jj_gen) { + jj_la = p->arg; jj_lastpos = jj_scanpos = p->first; + switch (i) { + case 0: jj_3_1(); break; + case 1: jj_3_2(); break; + case 2: jj_3_3(); break; + case 3: jj_3_4(); break; + case 4: jj_3_5(); break; + case 5: jj_3_6(); break; + case 6: jj_3_7(); break; + case 7: jj_3_8(); break; + case 8: jj_3_9(); break; + case 9: jj_3_10(); break; + case 10: jj_3_11(); break; + case 11: jj_3_12(); break; + case 12: jj_3_13(); break; + case 13: jj_3_14(); break; + case 14: jj_3_15(); break; + case 15: jj_3_16(); break; + case 16: jj_3_17(); break; + case 17: jj_3_18(); break; + case 18: jj_3_19(); break; + case 19: jj_3_20(); break; + case 20: jj_3_21(); break; + case 21: jj_3_22(); break; + case 22: jj_3_23(); break; + case 23: jj_3_24(); break; + case 24: jj_3_25(); break; + case 25: jj_3_26(); break; + case 26: jj_3_27(); break; + case 27: jj_3_28(); break; + case 28: jj_3_29(); break; + case 29: jj_3_30(); break; + case 30: jj_3_31(); break; + case 31: jj_3_32(); break; + case 32: jj_3_33(); break; + case 33: jj_3_34(); break; + case 34: jj_3_35(); break; + case 35: jj_3_36(); break; + case 36: jj_3_37(); break; + case 37: jj_3_38(); break; + case 38: jj_3_39(); break; + case 39: jj_3_40(); break; + case 40: jj_3_41(); break; + case 41: jj_3_42(); break; + case 42: jj_3_43(); break; + case 43: jj_3_44(); break; + case 44: jj_3_45(); break; + case 45: jj_3_46(); break; + case 46: jj_3_47(); break; + case 47: jj_3_48(); break; + case 48: jj_3_49(); break; + case 49: jj_3_50(); break; + case 50: jj_3_51(); break; + case 51: jj_3_52(); break; + case 52: jj_3_53(); break; + case 53: jj_3_54(); break; + case 54: jj_3_55(); break; + case 55: jj_3_56(); break; + case 56: jj_3_57(); break; + case 57: jj_3_58(); break; + case 58: jj_3_59(); break; + case 59: jj_3_60(); break; + case 60: jj_3_61(); break; + case 61: jj_3_62(); break; + case 62: jj_3_63(); break; + case 63: jj_3_64(); break; + case 64: jj_3_65(); break; + case 65: jj_3_66(); break; + case 66: jj_3_67(); break; + case 67: jj_3_68(); break; + case 68: jj_3_69(); break; + case 69: jj_3_70(); break; + case 70: jj_3_71(); break; + case 71: jj_3_72(); break; + case 72: jj_3_73(); break; + case 73: jj_3_74(); break; + case 74: jj_3_75(); break; + case 75: jj_3_76(); break; + case 76: jj_3_77(); break; + case 77: jj_3_78(); break; + case 78: jj_3_79(); break; + case 79: jj_3_80(); break; + case 80: jj_3_81(); break; + case 81: jj_3_82(); break; + case 82: jj_3_83(); break; + case 83: jj_3_84(); break; + case 84: jj_3_85(); break; + case 85: jj_3_86(); break; + case 86: jj_3_87(); break; + case 87: jj_3_88(); break; + case 88: jj_3_89(); break; + case 89: jj_3_90(); break; + case 90: jj_3_91(); break; + case 91: jj_3_92(); break; + case 92: jj_3_93(); break; + case 93: jj_3_94(); break; + case 94: jj_3_95(); break; + case 95: jj_3_96(); break; + case 96: jj_3_97(); break; + case 97: jj_3_98(); break; + case 98: jj_3_99(); break; + case 99: jj_3_100(); break; + case 100: jj_3_101(); break; + case 101: jj_3_102(); break; + case 102: jj_3_103(); break; + case 103: jj_3_104(); break; + case 104: jj_3_105(); break; + case 105: jj_3_106(); break; + case 106: jj_3_107(); break; + case 107: jj_3_108(); break; + case 108: jj_3_109(); break; + case 109: jj_3_110(); break; + case 110: jj_3_111(); break; + case 111: jj_3_112(); break; + } + } + p = p->next; + } while (p != NULL); + } + jj_rescan = false; + } + + +void VhdlParser::jj_save(int index, int xla){ + JJCalls *p = &jj_2_rtns[index]; + while (p->gen > jj_gen) { + if (p->next == NULL) { p = p->next = new JJCalls(); break; } + p = p->next; + } + p->gen = jj_gen + xla - jj_la; p->first = token; p->arg = xla; + } + + +} +} diff --git a/vhdlparser/VhdlParser.h b/vhdlparser/VhdlParser.h new file mode 100644 index 0000000..dcde4f3 --- /dev/null +++ b/vhdlparser/VhdlParser.h @@ -0,0 +1,8944 @@ +#ifndef VHDLPARSER_H +#define VHDLPARSER_H + +#include "JavaCC.h" +#include "CharStream.h" +#include "Token.h" +#include "TokenManager.h" +#include "VhdlParserTokenManager.h" +#include "VhdlParser.h" +#include "vhdljjparser.h" + +#include "VhdlParserConstants.h" +#include "ErrorHandler.h" +namespace vhdl { +namespace parser { + struct JJCalls { + int gen; + Token *first; + int arg; + JJCalls *next; + ~JJCalls() { if (next) delete next; } + JJCalls() { next = NULL; arg = 0; gen = -1; first = NULL; } + }; + +class VhdlParser { + public: + +QCString abstract_literal(); + +QCString access_type_definition(); + +QCString actual_designator(); + +QCString actual_parameter_part(); + +QCString actual_part(); + +QCString adding_operator(); + +QCString aggregate(); + +QCString alias_declaration(); + +QCString alias_designator(); + +void allocator(); + +void architecture_body(); + +void architecture_declarative_part(); + +void architecture_statement_part(); + +QCString array_type_definition(); + +QCString assertion(); + +QCString assertion_statement(); + +QCString association_element(); + +QCString association_list(); + +QCString attribute_declaration(); + +QCString attribute_designator(); + +QCString attribute_name(); + +QCString attribute_specification(); + +QCString base(); + +QCString base_specifier(); + +QCString base_unit_declaration(); + +QCString based_integer(); + +QCString based_literal(); + +QCString basic_identifier(); + +void binding_indication(); + +QCString bit_string_literal(); + +QCString bit_value(); + +void block_configuration(); + +void block_declarative_item(); + +void block_declarative_part(); + +void block_header(); + +void block_specification(); + +void block_statement(); + +void block_statement_part(); + +void case_statement(); + +void case_statement_alternative(); + +QCString character_literal(); + +QCString choice(); + +QCString choices(); + +void component_configuration(); + +void component_declaration(); + +void component_instantiation_statement(); + +void component_specification(); + +QCString composite_type_definition(); + +void concurrent_assertion_statement(); + +void concurrent_procedure_call_statement(); + +void concurrent_signal_assignment_statement(); + +void concurrent_statement(); + +QCString condition(); + +QCString condition_clause(); + +void conditional_signal_assignment(); + +void conditional_waveforms(); + +void configuration_declaration(); + +void configuration_declarative_item(); + +void configuration_declarative_part(); + +void configuration_item(); + +void configuration_specification(); + +QCString constant_declaration(); + +QCString constraint_array_definition(); + +void context_clause(); + +QCString constraint(); + +void context_item(); + +QCString decimal_literal(); + +QCString delay_mechanism(); + +void design_file(); + +void design_unit(); + +QCString designator(); + +QCString direction(); + +void disconnection_specification(); + +void guarded_signal_specificatio(); + +QCString discrete_range(); + +QCString element_association(); + +QCString element_declaration(); + +QCString entity_aspect(); + +QCString entity_class(); + +QCString entity_class_entry(); + +QCString entity_class_entry_list(); + +void entity_declaration(); + +void entity_declarative_item(); + +void entity_declarative_part(); + +QCString entity_designator(); + +void entity_header(); + +QCString entity_name_list(); + +QCString entity_specification(); + +void entity_statement(); + +void entity_statement_part(); + +QCString entity_tag(); + +QCString enumeration_literal(); + +QCString enumeration_type_definition(); + +QCString exit_statement(); + +QCString expression(); + +QCString logop(); + +QCString extended_identifier(); + +QCString factor(); + +QCString file_declaration(); + +QCString file_logical_name(); + +QCString file_open_information(); + +QCString file_type_definition(); + +QCString floating_type_definition(); + +QCString formal_designator(); + +QCString formal_parameter_list(); + +QCString formal_part(); + +QCString full_type_declaration(); + +QCString function_call(); + +void generate_statement(); + +void generate_scheme(); + +void generic_clause(); + +QCString generic_list(); + +void generic_map_aspect(); + +QCString group_constituent(); + +QCString group_constituent_list(); + +QCString group_declaration(); + +QCString group_template_declaration(); + +void guarded_signal_specification(); + +QCString identifier(); + +QCString identifier_list(); + +void if_statement(); + +QCString incomplete_type_declaration(); + +QCString index_constraint(); + +QCString index_specification(); + +QCString index_subtype_definition(); + +QCString instantiation_unit(); + +QCString instantiation_list(); + +QCString integer(); + +QCString integer_type_definition(); + +QCString interface_declaration(); + +QCString interface_element(); + +QCString interface_file_declaration(); + +QCString interface_list(); + +QCString interface_variable_declaration(); + +void iteration_scheme(); + +QCString label(); + +QCString library_clause(); + +QCString library_unit(); + +QCString literal(); + +QCString logical_operator(); + +void loop_statement(); + +QCString miscellaneous_operator(); + +QCString mode(); + +QCString multiplying_operation(); + +QCString name(); + +QCString name_ext1(); + +QCString name_ext(); + +QCString test_att_name(); + +QCString indexed_name(); + +QCString next_statement(); + +QCString null_statement(); + +QCString numeric_literal(); + +QCString object_class(); + +QCString operator_symbol(); + +void options(); + +void package_body(); + +void package_body_declarative_item(); + +void package_body_declarative_part(); + +void package_declaration(); + +void geninter(); + +void package_declarative_item(); + +void package_declarative_part(); + +QCString parameter_specification(); + +QCString physical_literal(); + +QCString physical_type_definition(); + +void port_clause(); + +QCString port_list(); + +void port_map_aspect(); + +QCString primary(); + +void primary_unit(); + +QCString procedure_call(); + +QCString procedure_call_statement(); + +QCString process_declarative_item(); + +QCString process_declarative_part(); + +void process_statement(); + +void process_statement_part(); + +QCString qualified_expression(); + +QCString range(); + +QCString range_constraint(); + +void record_type_definition(); + +QCString relation(); + +QCString relation_operator(); + +QCString report_statement(); + +QCString return_statement(); + +QCString scalar_type_definition(); + +void secondary_unit(); + +QCString secondary_unit_declaration(); + +QCString selected_name(); + +void selected_signal_assignment(); + +void selected_waveforms(); + +QCString sensitivity_clause(); + +QCString sensitivity_list(); + +void sequence_of_statement(); + +void sequential_statement(); + +QCString shift_expression(); + +QCString shift_operator(); + +QCString sign(); + +QCString signal_assignment_statement(); + +void semi(); + +void signal_declaration(); + +QCString signal_kind(); + +QCString signal_list(); + +QCString signature(); + +QCString simple_expression(); + +void simple_name(); + +QCString slice_name(); + +QCString string_literal(); + +void subprogram_body(); + +void subprogram_declaration(); + +void subprogram_1(); + +QCString subprogram_declarative_item(); + +QCString subprogram_declarative_part(); + +void subprogram_kind(); + +void subprogram_specification(); + +void subprogram_statement_part(); + +QCString subtype_declaration(); + +QCString subtype_indication(); + +QCString suffix(); + +QCString target(); + +QCString term(); + +QCString timeout_clause(); + +QCString type_conversion(); + +QCString type_declaration(); + +QCString type_definition(); + +QCString type_mark(); + +QCString unconstraint_array_definition(); + +QCString use_clause(); + +QCString variable_assignment_statement(); + +QCString variable_declaration(); + +QCString wait_statement(); + +QCString waveform(); + +QCString waveform_element(); + +QCString protected_type_body(); + +void protected_type_body_declarative_item(); + +void protected_type_body_declarative_part(); + +QCString protected_type_declaration(); + +void protected_type_declarative_item(); + +void protected_type_declarative_part(); + +QCString context_ref(); + +void context_declaration(); + +QCString libustcont_stats(); + +void package_instantiation_declaration(); + +QCString interface_package_declaration(); + +QCString subprogram_instantiation_declaration(); + +void gen_assoc_list(); + +void gen_interface_list(); + +void case_scheme(); + +void when_stats(); + +void ttend(); + +void generate_statement_body(); + +QCString external_name(); + +QCString sig_stat(); + +QCString external_pathname(); + +QCString absolute_pathname(); + +QCString relative_pathname(); + +QCString neg_list(); + +QCString pathname_element(); + +QCString pathname_element_list(); + +QCString package_path_name(); + +void conditional_signal_assignment_wave(); + +void conditional_waveform_assignment(); + +void else_wave_list(); + +void conditional_force_assignment(); + +void selected_signal_assignment_wave(); + +void selected_variable_assignment(); + +void select_name(); + +void selected_waveform_assignment(); + +void selected_force_assignment(); + +void sel_var_list(); + +void sel_wave_list(); + +void inout_stat(); + +void else_stat(); + +QCString interface_subprogram_declaration(); + +QCString iproc(); + +QCString ifunc(); + +QCString param(); + +void parseInline(); + inline bool jj_2_1(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_1() || jj_done; + finally { jj_save(0, xla); } + } + + inline bool jj_2_2(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_2() || jj_done; + finally { jj_save(1, xla); } + } + + inline bool jj_2_3(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_3() || jj_done; + finally { jj_save(2, xla); } + } + + inline bool jj_2_4(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_4() || jj_done; + finally { jj_save(3, xla); } + } + + inline bool jj_2_5(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_5() || jj_done; + finally { jj_save(4, xla); } + } + + inline bool jj_2_6(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_6() || jj_done; + finally { jj_save(5, xla); } + } + + inline bool jj_2_7(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_7() || jj_done; + finally { jj_save(6, xla); } + } + + inline bool jj_2_8(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_8() || jj_done; + finally { jj_save(7, xla); } + } + + inline bool jj_2_9(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_9() || jj_done; + finally { jj_save(8, xla); } + } + + inline bool jj_2_10(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_10() || jj_done; + finally { jj_save(9, xla); } + } + + inline bool jj_2_11(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_11() || jj_done; + finally { jj_save(10, xla); } + } + + inline bool jj_2_12(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_12() || jj_done; + finally { jj_save(11, xla); } + } + + inline bool jj_2_13(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_13() || jj_done; + finally { jj_save(12, xla); } + } + + inline bool jj_2_14(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_14() || jj_done; + finally { jj_save(13, xla); } + } + + inline bool jj_2_15(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_15() || jj_done; + finally { jj_save(14, xla); } + } + + inline bool jj_2_16(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_16() || jj_done; + finally { jj_save(15, xla); } + } + + inline bool jj_2_17(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_17() || jj_done; + finally { jj_save(16, xla); } + } + + inline bool jj_2_18(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_18() || jj_done; + finally { jj_save(17, xla); } + } + + inline bool jj_2_19(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_19() || jj_done; + finally { jj_save(18, xla); } + } + + inline bool jj_2_20(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_20() || jj_done; + finally { jj_save(19, xla); } + } + + inline bool jj_2_21(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_21() || jj_done; + finally { jj_save(20, xla); } + } + + inline bool jj_2_22(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_22() || jj_done; + finally { jj_save(21, xla); } + } + + inline bool jj_2_23(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_23() || jj_done; + finally { jj_save(22, xla); } + } + + inline bool jj_2_24(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_24() || jj_done; + finally { jj_save(23, xla); } + } + + inline bool jj_2_25(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_25() || jj_done; + finally { jj_save(24, xla); } + } + + inline bool jj_2_26(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_26() || jj_done; + finally { jj_save(25, xla); } + } + + inline bool jj_2_27(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_27() || jj_done; + finally { jj_save(26, xla); } + } + + inline bool jj_2_28(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_28() || jj_done; + finally { jj_save(27, xla); } + } + + inline bool jj_2_29(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_29() || jj_done; + finally { jj_save(28, xla); } + } + + inline bool jj_2_30(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_30() || jj_done; + finally { jj_save(29, xla); } + } + + inline bool jj_2_31(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_31() || jj_done; + finally { jj_save(30, xla); } + } + + inline bool jj_2_32(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_32() || jj_done; + finally { jj_save(31, xla); } + } + + inline bool jj_2_33(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_33() || jj_done; + finally { jj_save(32, xla); } + } + + inline bool jj_2_34(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_34() || jj_done; + finally { jj_save(33, xla); } + } + + inline bool jj_2_35(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_35() || jj_done; + finally { jj_save(34, xla); } + } + + inline bool jj_2_36(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_36() || jj_done; + finally { jj_save(35, xla); } + } + + inline bool jj_2_37(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_37() || jj_done; + finally { jj_save(36, xla); } + } + + inline bool jj_2_38(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_38() || jj_done; + finally { jj_save(37, xla); } + } + + inline bool jj_2_39(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_39() || jj_done; + finally { jj_save(38, xla); } + } + + inline bool jj_2_40(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_40() || jj_done; + finally { jj_save(39, xla); } + } + + inline bool jj_2_41(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_41() || jj_done; + finally { jj_save(40, xla); } + } + + inline bool jj_2_42(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_42() || jj_done; + finally { jj_save(41, xla); } + } + + inline bool jj_2_43(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_43() || jj_done; + finally { jj_save(42, xla); } + } + + inline bool jj_2_44(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_44() || jj_done; + finally { jj_save(43, xla); } + } + + inline bool jj_2_45(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_45() || jj_done; + finally { jj_save(44, xla); } + } + + inline bool jj_2_46(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_46() || jj_done; + finally { jj_save(45, xla); } + } + + inline bool jj_2_47(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_47() || jj_done; + finally { jj_save(46, xla); } + } + + inline bool jj_2_48(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_48() || jj_done; + finally { jj_save(47, xla); } + } + + inline bool jj_2_49(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_49() || jj_done; + finally { jj_save(48, xla); } + } + + inline bool jj_2_50(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_50() || jj_done; + finally { jj_save(49, xla); } + } + + inline bool jj_2_51(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_51() || jj_done; + finally { jj_save(50, xla); } + } + + inline bool jj_2_52(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_52() || jj_done; + finally { jj_save(51, xla); } + } + + inline bool jj_2_53(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_53() || jj_done; + finally { jj_save(52, xla); } + } + + inline bool jj_2_54(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_54() || jj_done; + finally { jj_save(53, xla); } + } + + inline bool jj_2_55(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_55() || jj_done; + finally { jj_save(54, xla); } + } + + inline bool jj_2_56(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_56() || jj_done; + finally { jj_save(55, xla); } + } + + inline bool jj_2_57(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_57() || jj_done; + finally { jj_save(56, xla); } + } + + inline bool jj_2_58(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_58() || jj_done; + finally { jj_save(57, xla); } + } + + inline bool jj_2_59(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_59() || jj_done; + finally { jj_save(58, xla); } + } + + inline bool jj_2_60(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_60() || jj_done; + finally { jj_save(59, xla); } + } + + inline bool jj_2_61(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_61() || jj_done; + finally { jj_save(60, xla); } + } + + inline bool jj_2_62(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_62() || jj_done; + finally { jj_save(61, xla); } + } + + inline bool jj_2_63(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_63() || jj_done; + finally { jj_save(62, xla); } + } + + inline bool jj_2_64(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_64() || jj_done; + finally { jj_save(63, xla); } + } + + inline bool jj_2_65(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_65() || jj_done; + finally { jj_save(64, xla); } + } + + inline bool jj_2_66(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_66() || jj_done; + finally { jj_save(65, xla); } + } + + inline bool jj_2_67(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_67() || jj_done; + finally { jj_save(66, xla); } + } + + inline bool jj_2_68(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_68() || jj_done; + finally { jj_save(67, xla); } + } + + inline bool jj_2_69(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_69() || jj_done; + finally { jj_save(68, xla); } + } + + inline bool jj_2_70(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_70() || jj_done; + finally { jj_save(69, xla); } + } + + inline bool jj_2_71(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_71() || jj_done; + finally { jj_save(70, xla); } + } + + inline bool jj_2_72(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_72() || jj_done; + finally { jj_save(71, xla); } + } + + inline bool jj_2_73(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_73() || jj_done; + finally { jj_save(72, xla); } + } + + inline bool jj_2_74(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_74() || jj_done; + finally { jj_save(73, xla); } + } + + inline bool jj_2_75(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_75() || jj_done; + finally { jj_save(74, xla); } + } + + inline bool jj_2_76(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_76() || jj_done; + finally { jj_save(75, xla); } + } + + inline bool jj_2_77(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_77() || jj_done; + finally { jj_save(76, xla); } + } + + inline bool jj_2_78(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_78() || jj_done; + finally { jj_save(77, xla); } + } + + inline bool jj_2_79(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_79() || jj_done; + finally { jj_save(78, xla); } + } + + inline bool jj_2_80(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_80() || jj_done; + finally { jj_save(79, xla); } + } + + inline bool jj_2_81(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_81() || jj_done; + finally { jj_save(80, xla); } + } + + inline bool jj_2_82(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_82() || jj_done; + finally { jj_save(81, xla); } + } + + inline bool jj_2_83(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_83() || jj_done; + finally { jj_save(82, xla); } + } + + inline bool jj_2_84(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_84() || jj_done; + finally { jj_save(83, xla); } + } + + inline bool jj_2_85(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_85() || jj_done; + finally { jj_save(84, xla); } + } + + inline bool jj_2_86(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_86() || jj_done; + finally { jj_save(85, xla); } + } + + inline bool jj_2_87(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_87() || jj_done; + finally { jj_save(86, xla); } + } + + inline bool jj_2_88(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_88() || jj_done; + finally { jj_save(87, xla); } + } + + inline bool jj_2_89(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_89() || jj_done; + finally { jj_save(88, xla); } + } + + inline bool jj_2_90(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_90() || jj_done; + finally { jj_save(89, xla); } + } + + inline bool jj_2_91(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_91() || jj_done; + finally { jj_save(90, xla); } + } + + inline bool jj_2_92(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_92() || jj_done; + finally { jj_save(91, xla); } + } + + inline bool jj_2_93(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_93() || jj_done; + finally { jj_save(92, xla); } + } + + inline bool jj_2_94(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_94() || jj_done; + finally { jj_save(93, xla); } + } + + inline bool jj_2_95(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_95() || jj_done; + finally { jj_save(94, xla); } + } + + inline bool jj_2_96(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_96() || jj_done; + finally { jj_save(95, xla); } + } + + inline bool jj_2_97(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_97() || jj_done; + finally { jj_save(96, xla); } + } + + inline bool jj_2_98(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_98() || jj_done; + finally { jj_save(97, xla); } + } + + inline bool jj_2_99(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_99() || jj_done; + finally { jj_save(98, xla); } + } + + inline bool jj_2_100(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_100() || jj_done; + finally { jj_save(99, xla); } + } + + inline bool jj_2_101(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_101() || jj_done; + finally { jj_save(100, xla); } + } + + inline bool jj_2_102(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_102() || jj_done; + finally { jj_save(101, xla); } + } + + inline bool jj_2_103(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_103() || jj_done; + finally { jj_save(102, xla); } + } + + inline bool jj_2_104(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_104() || jj_done; + finally { jj_save(103, xla); } + } + + inline bool jj_2_105(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_105() || jj_done; + finally { jj_save(104, xla); } + } + + inline bool jj_2_106(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_106() || jj_done; + finally { jj_save(105, xla); } + } + + inline bool jj_2_107(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_107() || jj_done; + finally { jj_save(106, xla); } + } + + inline bool jj_2_108(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_108() || jj_done; + finally { jj_save(107, xla); } + } + + inline bool jj_2_109(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_109() || jj_done; + finally { jj_save(108, xla); } + } + + inline bool jj_2_110(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_110() || jj_done; + finally { jj_save(109, xla); } + } + + inline bool jj_2_111(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_111() || jj_done; + finally { jj_save(110, xla); } + } + + inline bool jj_2_112(int xla) + { + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return !jj_3_112() || jj_done; + finally { jj_save(111, xla); } + } + + inline bool jj_3_48() + { + if (jj_done) return true; + if (jj_3R_101()) return true; + return false; + } + + inline bool jj_3R_214() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_338()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3_47() + { + if (jj_done) return true; + if (jj_scan_token(DOT_T)) return true; + if (jj_3R_100()) return true; + return false; + } + + inline bool jj_3R_210() + { + if (jj_done) return true; + if (jj_3R_99()) return true; + return false; + } + + inline bool jj_3R_213() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_68()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_148() + { + if (jj_done) return true; + if (jj_3R_296()) return true; + return false; + } + + inline bool jj_3R_212() + { + if (jj_done) return true; + if (jj_3R_101()) return true; + return false; + } + + inline bool jj_3R_211() + { + if (jj_done) return true; + if (jj_scan_token(DOT_T)) return true; + if (jj_3R_100()) return true; + return false; + } + + inline bool jj_3R_99() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_211()) { + jj_scanpos = xsp; + if (jj_3R_212()) { + jj_scanpos = xsp; + if (jj_3R_213()) { + jj_scanpos = xsp; + if (jj_3R_214()) return true; + } + } + } + return false; + } + + inline bool jj_3_45() + { + if (jj_done) return true; + if (jj_3R_98()) return true; + return false; + } + + inline bool jj_3R_98() + { + if (jj_done) return true; + if (jj_3R_99()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_210()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_147() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_149() + { + if (jj_done) return true; + if (jj_3R_98()) return true; + return false; + } + + inline bool jj_3R_590() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_146() + { + if (jj_done) return true; + if (jj_3R_295()) return true; + return false; + } + + inline bool jj_3R_60() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_146()) { + jj_scanpos = xsp; + if (jj_3R_147()) { + jj_scanpos = xsp; + if (jj_3R_148()) return true; + } + } + xsp = jj_scanpos; + if (jj_3R_149()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_281() + { + if (jj_done) return true; + if (jj_scan_token(REM_T)) return true; + return false; + } + + inline bool jj_3R_280() + { + if (jj_done) return true; + if (jj_scan_token(MOD_T)) return true; + return false; + } + + inline bool jj_3R_279() + { + if (jj_done) return true; + if (jj_scan_token(SLASH_T)) return true; + return false; + } + + inline bool jj_3R_134() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_278()) { + jj_scanpos = xsp; + if (jj_3R_279()) { + jj_scanpos = xsp; + if (jj_3R_280()) { + jj_scanpos = xsp; + if (jj_3R_281()) return true; + } + } + } + return false; + } + + inline bool jj_3R_278() + { + if (jj_done) return true; + if (jj_scan_token(MULT_T)) return true; + return false; + } + + inline bool jj_3R_410() + { + if (jj_done) return true; + if (jj_scan_token(LINKAGE_T)) return true; + return false; + } + + inline bool jj_3R_409() + { + if (jj_done) return true; + if (jj_scan_token(BUFFER_T)) return true; + return false; + } + + inline bool jj_3R_408() + { + if (jj_done) return true; + if (jj_scan_token(INOUT_T)) return true; + return false; + } + + inline bool jj_3R_407() + { + if (jj_done) return true; + if (jj_scan_token(OUT_T)) return true; + return false; + } + + inline bool jj_3R_331() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_406()) { + jj_scanpos = xsp; + if (jj_3R_407()) { + jj_scanpos = xsp; + if (jj_3R_408()) { + jj_scanpos = xsp; + if (jj_3R_409()) { + jj_scanpos = xsp; + if (jj_3R_410()) return true; + } + } + } + } + return false; + } + + inline bool jj_3R_406() + { + if (jj_done) return true; + if (jj_scan_token(IN_T)) return true; + return false; + } + + inline bool jj_3R_258() + { + if (jj_done) return true; + if (jj_3R_352()) return true; + return false; + } + + inline bool jj_3R_257() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_123() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_257()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_258()) jj_scanpos = xsp; + if (jj_scan_token(LOOP_T)) return true; + if (jj_3R_259()) return true; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(LOOP_T)) return true; + xsp = jj_scanpos; + if (jj_3R_590()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_44() + { + if (jj_done) return true; + if (jj_3R_97()) return true; + return false; + } + + inline bool jj_3_43() + { + if (jj_done) return true; + if (jj_3R_96()) return true; + return false; + } + + inline bool jj_3R_233() + { + if (jj_done) return true; + if (jj_scan_token(NULL_T)) return true; + return false; + } + + inline bool jj_3R_232() + { + if (jj_done) return true; + if (jj_3R_341()) return true; + return false; + } + + inline bool jj_3_42() + { + if (jj_done) return true; + if (jj_3R_95()) return true; + return false; + } + + inline bool jj_3R_231() + { + if (jj_done) return true; + if (jj_3R_97()) return true; + return false; + } + + inline bool jj_3R_230() + { + if (jj_done) return true; + if (jj_3R_96()) return true; + return false; + } + + inline bool jj_3R_229() + { + if (jj_done) return true; + if (jj_3R_95()) return true; + return false; + } + + inline bool jj_3R_107() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_229()) { + jj_scanpos = xsp; + if (jj_3R_230()) { + jj_scanpos = xsp; + if (jj_3R_231()) { + jj_scanpos = xsp; + if (jj_3R_232()) { + jj_scanpos = xsp; + if (jj_3R_233()) return true; + } + } + } + } + return false; + } + + inline bool jj_3_41() + { + if (jj_done) return true; + if (jj_3R_94()) return true; + return false; + } + + inline bool jj_3R_199() + { + if (jj_done) return true; + if (jj_scan_token(VARASSIGN_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_139() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_422() + { + if (jj_done) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_3R_380()) return true; + return false; + } + + inline bool jj_3R_352() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_421()) { + jj_scanpos = xsp; + if (jj_3R_422()) return true; + } + return false; + } + + inline bool jj_3R_421() + { + if (jj_done) return true; + if (jj_scan_token(WHILE_T)) return true; + if (jj_3R_80()) return true; + return false; + } + + inline bool jj_3R_198() + { + if (jj_done) return true; + if (jj_3R_331()) return true; + return false; + } + + inline bool jj_3R_372() + { + if (jj_done) return true; + if (jj_scan_token(SEMI_T)) return true; + if (jj_3R_371()) return true; + return false; + } + + inline bool jj_3R_196() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(115)) { + jj_scanpos = xsp; + if (jj_scan_token(99)) { + jj_scanpos = xsp; + if (jj_scan_token(30)) { + jj_scanpos = xsp; + if (jj_scan_token(100)) return true; + } + } + } + return false; + } + + inline bool jj_3R_91() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_196()) jj_scanpos = xsp; + if (jj_3R_197()) return true; + if (jj_scan_token(COLON_T)) return true; + xsp = jj_scanpos; + if (jj_3R_198()) jj_scanpos = xsp; + if (jj_3R_85()) return true; + xsp = jj_scanpos; + if (jj_scan_token(26)) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_199()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_298() + { + if (jj_done) return true; + if (jj_3R_371()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_372()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_391() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_92() + { + if (jj_done) return true; + if (jj_scan_token(FILE_T)) return true; + if (jj_3R_197()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_85()) return true; + return false; + } + + inline bool jj_3R_371() + { + if (jj_done) return true; + if (jj_3R_450()) return true; + return false; + } + + inline bool jj_3_40() + { + if (jj_done) return true; + if (jj_3R_93()) return true; + return false; + } + + inline bool jj_3R_515() + { + if (jj_done) return true; + if (jj_3R_557()) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_514() + { + if (jj_done) return true; + if (jj_3R_93()) return true; + return false; + } + + inline bool jj_3_39() + { + if (jj_done) return true; + if (jj_3R_92()) return true; + return false; + } + + inline bool jj_3_38() + { + if (jj_done) return true; + if (jj_3R_91()) return true; + return false; + } + + inline bool jj_3R_513() + { + if (jj_done) return true; + if (jj_3R_108()) return true; + return false; + } + + inline bool jj_3_37() + { + if (jj_done) return true; + if (jj_3R_90()) return true; + return false; + } + + inline bool jj_3R_450() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_37()) { + jj_scanpos = xsp; + if (jj_3R_513()) { + jj_scanpos = xsp; + if (jj_3_38()) { + jj_scanpos = xsp; + if (jj_3_39()) { + jj_scanpos = xsp; + if (jj_3R_514()) { + jj_scanpos = xsp; + if (jj_3R_515()) return true; + } + } + } + } + } + return false; + } + + inline bool jj_3R_586() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_181() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_68()) return true; + return false; + } + + inline bool jj_3R_394() + { + if (jj_done) return true; + if (jj_scan_token(ALL_T)) return true; + return false; + } + + inline bool jj_3R_393() + { + if (jj_done) return true; + if (jj_scan_token(OTHER_T)) return true; + return false; + } + + inline bool jj_3R_316() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_392()) { + jj_scanpos = xsp; + if (jj_3R_393()) { + jj_scanpos = xsp; + if (jj_3R_394()) return true; + } + } + return false; + } + + inline bool jj_3R_392() + { + if (jj_done) return true; + if (jj_3R_197()) return true; + return false; + } + + inline bool jj_3R_313() + { + if (jj_done) return true; + if (jj_scan_token(CONFIGURATION_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_312() + { + if (jj_done) return true; + if (jj_scan_token(ENTITY_T)) return true; + if (jj_3R_60()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_391()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_174() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_311()) { + jj_scanpos = xsp; + if (jj_3R_312()) { + jj_scanpos = xsp; + if (jj_3R_313()) return true; + } + } + return false; + } + + inline bool jj_3_36() + { + if (jj_done) return true; + if (jj_3R_68()) return true; + return false; + } + + inline bool jj_3R_311() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(27)) jj_scanpos = xsp; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_153() + { + if (jj_done) return true; + if (jj_3R_156()) return true; + if (jj_scan_token(RANGE_T)) return true; + if (jj_scan_token(BOX_T)) return true; + return false; + } + + inline bool jj_3R_583() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_582() + { + if (jj_done) return true; + if (jj_3R_68()) return true; + return false; + } + + inline bool jj_3R_539() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_582()) { + jj_scanpos = xsp; + if (jj_3R_583()) return true; + } + return false; + } + + inline bool jj_3R_83() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_68()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_181()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_585() + { + if (jj_done) return true; + if (jj_scan_token(ELSE_T)) return true; + if (jj_3R_259()) return true; + return false; + } + + inline bool jj_3R_602() + { + if (jj_done) return true; + if (jj_scan_token(TYPE_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_584() + { + if (jj_done) return true; + if (jj_scan_token(ELSIF_T)) return true; + if (jj_3R_80()) return true; + if (jj_scan_token(THEN_T)) return true; + if (jj_3R_259()) return true; + return false; + } + + inline bool jj_3R_673() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_330() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_405() + { + if (jj_done) return true; + if (jj_scan_token(IS_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_673()) { + jj_scanpos = xsp; + if (jj_scan_token(144)) return true; + } + return false; + } + + inline bool jj_3R_255() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_121() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_255()) jj_scanpos = xsp; + if (jj_scan_token(IF_T)) return true; + if (jj_3R_80()) return true; + if (jj_scan_token(THEN_T)) return true; + if (jj_3R_259()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_584()) { jj_scanpos = xsp; break; } + } + xsp = jj_scanpos; + if (jj_3R_585()) jj_scanpos = xsp; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(IF_T)) return true; + xsp = jj_scanpos; + if (jj_3R_586()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_197() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_330()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_165() + { + if (jj_done) return true; + if (jj_scan_token(BASIC_IDENTIFIER)) return true; + return false; + } + + inline bool jj_3R_164() + { + if (jj_done) return true; + if (jj_scan_token(EXTENDED_CHARACTER)) return true; + return false; + } + + inline bool jj_3R_71() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_164()) { + jj_scanpos = xsp; + if (jj_3R_165()) return true; + } + return false; + } + + inline bool jj_3R_615() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_614()) return true; + return false; + } + + inline bool jj_3R_170() + { + if (jj_done) return true; + if (jj_3R_309()) return true; + return false; + } + + inline bool jj_3R_66() + { + if (jj_done) return true; + if (jj_scan_token(GROUP_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_572()) return true; + if (jj_scan_token(RPAREN_T)) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_491() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_298()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_528() + { + if (jj_done) return true; + if (jj_scan_token(GROUP_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_573()) return true; + if (jj_scan_token(RPAREN_T)) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_573() + { + if (jj_done) return true; + if (jj_3R_614()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_615()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_171() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_650() + { + if (jj_done) return true; + if (jj_3R_337()) return true; + return false; + } + + inline bool jj_3R_649() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_614() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_649()) { + jj_scanpos = xsp; + if (jj_3R_650()) return true; + } + return false; + } + + inline bool jj_3R_70() + { + if (jj_done) return true; + if (jj_scan_token(GENERIC_T)) return true; + if (jj_scan_token(MAP_T)) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_163()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_403() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(76)) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_491()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_157() + { + if (jj_done) return true; + if (jj_3R_298()) return true; + return false; + } + + inline bool jj_3_112() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(WHEN_T)) return true; + return false; + } + + inline bool jj_3R_67() + { + if (jj_done) return true; + if (jj_scan_token(GENERIC_T)) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_157()) return true; + if (jj_scan_token(RPAREN_T)) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_307() + { + if (jj_done) return true; + if (jj_scan_token(IF_T)) return true; + if (jj_3R_80()) return true; + return false; + } + + inline bool jj_3R_308() + { + if (jj_done) return true; + if (jj_3R_381()) return true; + return false; + } + + inline bool jj_3R_169() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_308()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(BEGIN_T)) return true; + return false; + } + + inline bool jj_3R_358() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_86()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(133)) { + jj_scanpos = xsp; + if (jj_scan_token(136)) return true; + } + return false; + } + + inline bool jj_3R_168() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_306()) { + jj_scanpos = xsp; + if (jj_3R_307()) return true; + } + return false; + } + + inline bool jj_3R_306() + { + if (jj_done) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_3R_380()) return true; + return false; + } + + inline bool jj_3R_425() + { + if (jj_done) return true; + if (jj_3R_500()) return true; + return false; + } + + inline bool jj_3R_501() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_427()) return true; + return false; + } + + inline bool jj_3R_503() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_290() + { + if (jj_done) return true; + if (jj_3R_356()) return true; + return false; + } + + inline bool jj_3R_404() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(83)) { + jj_scanpos = xsp; + if (jj_scan_token(51)) return true; + } + return false; + } + + inline bool jj_3R_563() + { + if (jj_done) return true; + if (jj_3R_604()) return true; + return false; + } + + inline bool jj_3R_329() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_404()) jj_scanpos = xsp; + if (jj_scan_token(FUNCTION_T)) return true; + if (jj_3R_60()) return true; + if (jj_3R_403()) return true; + if (jj_scan_token(RETURN_T)) return true; + if (jj_3R_60()) return true; + xsp = jj_scanpos; + if (jj_3R_405()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_75() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_168()) return true; + if (jj_scan_token(GENERATE_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_169()) jj_scanpos = xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_170()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(GENERATE_T)) return true; + xsp = jj_scanpos; + if (jj_3R_171()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_105() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_226()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_289() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + if (jj_3R_357()) return true; + return false; + } + + inline bool jj_3R_328() + { + if (jj_done) return true; + if (jj_scan_token(PROCEDURE_T)) return true; + if (jj_3R_71()) return true; + if (jj_3R_403()) return true; + return false; + } + + inline bool jj_3R_195() + { + if (jj_done) return true; + if (jj_3R_329()) return true; + return false; + } + + inline bool jj_3R_155() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_297()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_194() + { + if (jj_done) return true; + if (jj_3R_328()) return true; + return false; + } + + inline bool jj_3R_90() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_194()) { + jj_scanpos = xsp; + if (jj_3R_195()) return true; + } + return false; + } + + inline bool jj_3R_136() + { + if (jj_done) return true; + if (jj_scan_token(TYPE_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_3R_619()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_436() + { + if (jj_done) return true; + if (jj_scan_token(ELSE_T)) return true; + if (jj_3R_59()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_503()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_357() + { + if (jj_done) return true; + Token * xsp; + if (jj_3R_436()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_436()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_64() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_155()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_370() + { + if (jj_done) return true; + if (jj_scan_token(INTEGER)) return true; + return false; + } + + inline bool jj_3R_546() + { + if (jj_done) return true; + if (jj_3R_298()) return true; + return false; + } + + inline bool jj_3R_356() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(52)) { + jj_scanpos = xsp; + if (jj_scan_token(74)) return true; + } + return false; + } + + inline bool jj_3R_426() + { + if (jj_done) return true; + if (jj_3R_377()) return true; + return false; + } + + inline bool jj_3R_297() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_369()) { + jj_scanpos = xsp; + if (jj_3R_370()) return true; + } + return false; + } + + inline bool jj_3R_369() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_427() + { + if (jj_done) return true; + if (jj_3R_424()) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_86()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_501()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_291() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_86()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(133)) { + jj_scanpos = xsp; + if (jj_scan_token(136)) return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_358()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_677() + { + if (jj_done) return true; + if (jj_scan_token(FILE_T)) return true; + if (jj_scan_token(OF_T)) return true; + if (jj_3R_156()) return true; + return false; + } + + inline bool jj_3R_288() + { + if (jj_done) return true; + if (jj_3R_356()) return true; + return false; + } + + inline bool jj_3R_622() + { + if (jj_done) return true; + if (jj_scan_token(OPEN_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3_108() + { + if (jj_done) return true; + if (jj_3R_141()) return true; + if (jj_scan_token(DOT_T)) return true; + return false; + } + + inline bool jj_3R_604() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_622()) jj_scanpos = xsp; + if (jj_scan_token(IS_T)) return true; + if (jj_3R_623()) return true; + return false; + } + + inline bool jj_3R_143() + { + if (jj_done) return true; + if (jj_scan_token(WITH_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(SELECT_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(154)) jj_scanpos = xsp; + if (jj_3R_115()) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + if (jj_scan_token(FORCE_T)) return true; + xsp = jj_scanpos; + if (jj_3R_290()) jj_scanpos = xsp; + if (jj_3R_291()) return true; + return false; + } + + inline bool jj_3_111() + { + if (jj_done) return true; + if (jj_3R_109()) return true; + return false; + } + + inline bool jj_3R_623() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_354() + { + if (jj_done) return true; + if (jj_scan_token(WITH_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(SELECT_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(154)) jj_scanpos = xsp; + if (jj_3R_115()) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + xsp = jj_scanpos; + if (jj_3R_426()) jj_scanpos = xsp; + if (jj_3R_427()) return true; + return false; + } + + inline bool jj_3R_286() + { + if (jj_done) return true; + if (jj_3R_141()) return true; + if (jj_scan_token(DOT_T)) return true; + return false; + } + + inline bool jj_3R_672() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_451() + { + if (jj_done) return true; + if (jj_scan_token(DOUBLEMULT_T)) return true; + if (jj_3R_355()) return true; + return false; + } + + inline bool jj_3R_551() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_671() + { + if (jj_done) return true; + if (jj_3R_109()) return true; + return false; + } + + inline bool jj_3R_651() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_671()) { + jj_scanpos = xsp; + if (jj_3R_672()) return true; + } + return false; + } + + inline bool jj_3R_264() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_522() + { + if (jj_done) return true; + if (jj_scan_token(FILE_T)) return true; + if (jj_3R_197()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_85()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_563()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_110() + { + if (jj_done) return true; + if (jj_3R_143()) return true; + return false; + } + + inline bool jj_3R_423() + { + if (jj_done) return true; + if (jj_3R_377()) return true; + return false; + } + + inline bool jj_3R_498() + { + if (jj_done) return true; + if (jj_scan_token(WITH_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(SELECT_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(154)) jj_scanpos = xsp; + if (jj_3R_651()) return true; + if (jj_scan_token(VARASSIGN_T)) return true; + if (jj_3R_291()) return true; + return false; + } + + inline bool jj_3R_284() + { + if (jj_done) return true; + if (jj_scan_token(NOT_T)) return true; + if (jj_3R_355()) return true; + return false; + } + + inline bool jj_3R_283() + { + if (jj_done) return true; + if (jj_scan_token(ABS_T)) return true; + if (jj_3R_355()) return true; + return false; + } + + inline bool jj_3R_135() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_282()) { + jj_scanpos = xsp; + if (jj_3R_283()) { + jj_scanpos = xsp; + if (jj_3R_284()) return true; + } + } + return false; + } + + inline bool jj_3R_282() + { + if (jj_done) return true; + if (jj_3R_355()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_451()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_271() + { + if (jj_done) return true; + if (jj_3R_354()) return true; + return false; + } + + inline bool jj_3R_698() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_97()) return true; + return false; + } + + inline bool jj_3R_128() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_270()) { + jj_scanpos = xsp; + if (jj_3R_271()) return true; + } + return false; + } + + inline bool jj_3R_270() + { + if (jj_done) return true; + if (jj_3R_143()) return true; + return false; + } + + inline bool jj_3R_145() + { + if (jj_done) return true; + if (jj_3R_294()) return true; + if (jj_3R_144()) return true; + return false; + } + + inline bool jj_3R_366() + { + if (jj_done) return true; + if (jj_scan_token(OR_T)) return true; + return false; + } + + inline bool jj_3R_142() + { + if (jj_done) return true; + if (jj_3R_115()) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + if (jj_scan_token(FORCE_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_288()) jj_scanpos = xsp; + if (jj_3R_59()) return true; + if (jj_scan_token(WHEN_T)) return true; + xsp = jj_scanpos; + if (jj_3R_289()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_365() + { + if (jj_done) return true; + if (jj_scan_token(XOR_T)) return true; + return false; + } + + inline bool jj_3R_364() + { + if (jj_done) return true; + if (jj_scan_token(XNOR_T)) return true; + return false; + } + + inline bool jj_3R_363() + { + if (jj_done) return true; + if (jj_scan_token(NOR_T)) return true; + return false; + } + + inline bool jj_3R_362() + { + if (jj_done) return true; + if (jj_scan_token(NAND_T)) return true; + return false; + } + + inline bool jj_3R_294() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_361()) { + jj_scanpos = xsp; + if (jj_3R_362()) { + jj_scanpos = xsp; + if (jj_3R_363()) { + jj_scanpos = xsp; + if (jj_3R_364()) { + jj_scanpos = xsp; + if (jj_3R_365()) { + jj_scanpos = xsp; + if (jj_3R_366()) return true; + } + } + } + } + } + return false; + } + + inline bool jj_3R_361() + { + if (jj_done) return true; + if (jj_scan_token(AND_T)) return true; + return false; + } + + inline bool jj_3_109() + { + if (jj_done) return true; + if (jj_3R_142()) return true; + return false; + } + + inline bool jj_3R_500() + { + if (jj_done) return true; + if (jj_scan_token(ELSE_T)) return true; + if (jj_3R_59()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_551()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_353() + { + if (jj_done) return true; + if (jj_3R_115()) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_423()) jj_scanpos = xsp; + if (jj_3R_424()) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_59()) return true; + xsp = jj_scanpos; + if (jj_3R_425()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_269() + { + if (jj_done) return true; + if (jj_3R_353()) return true; + return false; + } + + inline bool jj_3R_59() + { + if (jj_done) return true; + if (jj_3R_144()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_145()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_127() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_268()) { + jj_scanpos = xsp; + if (jj_3R_269()) return true; + } + return false; + } + + inline bool jj_3R_268() + { + if (jj_done) return true; + if (jj_3R_142()) return true; + return false; + } + + inline bool jj_3R_140() + { + if (jj_done) return true; + if (jj_3R_141()) return true; + if (jj_scan_token(DOT_T)) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_286()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_265() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_80()) return true; + return false; + } + + inline bool jj_3R_287() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_512() + { + if (jj_done) return true; + if (jj_scan_token(AT_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_263() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3_107() + { + if (jj_done) return true; + if (jj_3R_140()) return true; + return false; + } + + inline bool jj_3R_125() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_263()) jj_scanpos = xsp; + if (jj_scan_token(EXIT_T)) return true; + xsp = jj_scanpos; + if (jj_3R_264()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_265()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_690() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_97()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_698()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_209() + { + if (jj_done) return true; + if (jj_3R_337()) return true; + return false; + } + + inline bool jj_3R_556() + { + if (jj_done) return true; + if (jj_3R_140()) return true; + return false; + } + + inline bool jj_3R_580() + { + if (jj_done) return true; + if (jj_3R_309()) return true; + return false; + } + + inline bool jj_3R_208() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_97() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_208()) { + jj_scanpos = xsp; + if (jj_3R_209()) return true; + } + return false; + } + + inline bool jj_3R_141() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_287()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_697() + { + if (jj_done) return true; + if (jj_3R_337()) return true; + return false; + } + + inline bool jj_3R_696() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_688() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_696()) { + jj_scanpos = xsp; + if (jj_3R_697()) return true; + } + return false; + } + + inline bool jj_3R_594() + { + if (jj_done) return true; + if (jj_scan_token(NEG_T)) return true; + if (jj_scan_token(DOT_T)) return true; + return false; + } + + inline bool jj_3R_555() + { + if (jj_done) return true; + Token * xsp; + if (jj_3R_594()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_594()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3_106() + { + if (jj_done) return true; + if (jj_scan_token(DOT_T)) return true; + if (jj_3R_140()) return true; + return false; + } + + inline bool jj_3_35() + { + if (jj_done) return true; + if (jj_3R_89()) return true; + return false; + } + + inline bool jj_3R_511() + { + if (jj_done) return true; + if (jj_3R_555()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_556()) jj_scanpos = xsp; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3_34() + { + if (jj_done) return true; + if (jj_3R_88()) return true; + return false; + } + + inline bool jj_3R_554() + { + if (jj_done) return true; + if (jj_scan_token(DOT_T)) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_553() + { + if (jj_done) return true; + if (jj_scan_token(DOT_T)) return true; + if (jj_3R_140()) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_510() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_553()) { + jj_scanpos = xsp; + if (jj_3R_554()) return true; + } + return false; + } + + inline bool jj_3_104() + { + if (jj_done) return true; + if (jj_3R_138()) return true; + return false; + } + + inline bool jj_3R_449() + { + if (jj_done) return true; + if (jj_3R_512()) return true; + return false; + } + + inline bool jj_3R_448() + { + if (jj_done) return true; + if (jj_3R_511()) return true; + return false; + } + + inline bool jj_3R_368() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_447()) { + jj_scanpos = xsp; + if (jj_3R_448()) { + jj_scanpos = xsp; + if (jj_3R_449()) return true; + } + } + return false; + } + + inline bool jj_3R_447() + { + if (jj_done) return true; + if (jj_3R_510()) return true; + return false; + } + + inline bool jj_3R_570() + { + if (jj_done) return true; + if (jj_3R_609()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_610()) return true; + return false; + } + + inline bool jj_3R_689() + { + if (jj_done) return true; + if (jj_3R_234()) return true; + return false; + } + + inline bool jj_3R_446() + { + if (jj_done) return true; + if (jj_scan_token(VARIABLE_T)) return true; + return false; + } + + inline bool jj_3R_275() + { + if (jj_done) return true; + if (jj_3R_132()) return true; + return false; + } + + inline bool jj_3R_445() + { + if (jj_done) return true; + if (jj_scan_token(SIGNAL_T)) return true; + return false; + } + + inline bool jj_3R_627() + { + if (jj_done) return true; + if (jj_scan_token(ALL_T)) return true; + return false; + } + + inline bool jj_3R_626() + { + if (jj_done) return true; + if (jj_scan_token(OTHER_T)) return true; + return false; + } + + inline bool jj_3R_367() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_444()) { + jj_scanpos = xsp; + if (jj_3R_445()) { + jj_scanpos = xsp; + if (jj_3R_446()) return true; + } + } + return false; + } + + inline bool jj_3R_444() + { + if (jj_done) return true; + if (jj_scan_token(CONSTANT_T)) return true; + return false; + } + + inline bool jj_3R_669() + { + if (jj_done) return true; + if (jj_3R_679()) return true; + return false; + } + + inline bool jj_3R_625() + { + if (jj_done) return true; + Token * xsp; + if (jj_3R_669()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_669()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_609() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_625()) { + jj_scanpos = xsp; + if (jj_3R_626()) { + jj_scanpos = xsp; + if (jj_3R_627()) return true; + } + } + return false; + } + + inline bool jj_3R_579() + { + if (jj_done) return true; + if (jj_3R_531()) return true; + if (jj_scan_token(BEGIN_T)) return true; + return false; + } + + inline bool jj_3R_296() + { + if (jj_done) return true; + if (jj_scan_token(SLSL_T)) return true; + if (jj_3R_367()) return true; + if (jj_3R_368()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_85()) return true; + if (jj_scan_token(RSRS_T)) return true; + return false; + } + + inline bool jj_3R_679() + { + if (jj_done) return true; + if (jj_3R_688()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_689()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_285() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_535() + { + if (jj_done) return true; + if (jj_scan_token(BEGIN_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_579()) jj_scanpos = xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_580()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_235() + { + if (jj_done) return true; + if (jj_3R_132()) return true; + return false; + } + + inline bool jj_3_105() + { + if (jj_done) return true; + if (jj_3R_139()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_138() + { + if (jj_done) return true; + if (jj_scan_token(END_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_285()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_595() + { + if (jj_done) return true; + if (jj_3R_132()) return true; + return false; + } + + inline bool jj_3_31() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3_33() + { + if (jj_done) return true; + if (jj_3R_87()) return true; + return false; + } + + inline bool jj_3R_578() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_105()) jj_scanpos = xsp; + if (jj_3R_86()) return true; + if (jj_scan_token(ARROW_T)) return true; + if (jj_3R_535()) return true; + return false; + } + + inline bool jj_3_32() + { + if (jj_done) return true; + if (jj_3R_66()) return true; + return false; + } + + inline bool jj_3R_613() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_612()) return true; + return false; + } + + inline bool jj_3R_534() + { + if (jj_done) return true; + Token * xsp; + if (jj_3R_578()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_578()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_474() + { + if (jj_done) return true; + if (jj_scan_token(CASE_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(GENERATE_T)) return true; + if (jj_3R_534()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_104()) jj_scanpos = xsp; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(GENERATE_T)) return true; + if (jj_3R_535()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_131() + { + if (jj_done) return true; + if (jj_scan_token(GENERIC_T)) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_298()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_648() + { + if (jj_done) return true; + if (jj_scan_token(BOX_T)) return true; + return false; + } + + inline bool jj_3R_132() + { + if (jj_done) return true; + if (jj_scan_token(GENERIC_T)) return true; + if (jj_scan_token(MAP_T)) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_163()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_334() + { + if (jj_done) return true; + if (jj_scan_token(ENTITY_T)) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_572() + { + if (jj_done) return true; + if (jj_3R_612()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_613()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_130() + { + if (jj_done) return true; + if (jj_scan_token(FUNCTION_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_scan_token(NEW_T)) return true; + if (jj_3R_60()) return true; + if (jj_3R_234()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_275()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_612() + { + if (jj_done) return true; + if (jj_3R_610()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_648()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_581() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_644() + { + if (jj_done) return true; + if (jj_scan_token(FILE_T)) return true; + return false; + } + + inline bool jj_3R_643() + { + if (jj_done) return true; + if (jj_scan_token(GROUP_T)) return true; + return false; + } + + inline bool jj_3R_108() + { + if (jj_done) return true; + if (jj_scan_token(PACKAGE_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_scan_token(NEW_T)) return true; + if (jj_3R_60()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_595()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_642() + { + if (jj_done) return true; + if (jj_scan_token(UNITS_T)) return true; + return false; + } + + inline bool jj_3R_641() + { + if (jj_done) return true; + if (jj_scan_token(LITERAL_T)) return true; + return false; + } + + inline bool jj_3R_640() + { + if (jj_done) return true; + if (jj_scan_token(LABEL_T)) return true; + return false; + } + + inline bool jj_3R_639() + { + if (jj_done) return true; + if (jj_scan_token(COMPONENT_T)) return true; + return false; + } + + inline bool jj_3R_638() + { + if (jj_done) return true; + if (jj_scan_token(VARIABLE_T)) return true; + return false; + } + + inline bool jj_3R_637() + { + if (jj_done) return true; + if (jj_scan_token(SIGNAL_T)) return true; + return false; + } + + inline bool jj_3R_636() + { + if (jj_done) return true; + if (jj_scan_token(CONSTANT_T)) return true; + return false; + } + + inline bool jj_3R_635() + { + if (jj_done) return true; + if (jj_scan_token(SUBTYPE_T)) return true; + return false; + } + + inline bool jj_3R_634() + { + if (jj_done) return true; + if (jj_scan_token(TYPE_T)) return true; + return false; + } + + inline bool jj_3R_87() + { + if (jj_done) return true; + if (jj_scan_token(PACKAGE_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_scan_token(NEW_T)) return true; + if (jj_3R_60()) return true; + if (jj_3R_234()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_235()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_633() + { + if (jj_done) return true; + if (jj_scan_token(PACKAGE_T)) return true; + return false; + } + + inline bool jj_3R_632() + { + if (jj_done) return true; + if (jj_scan_token(FUNCTION_T)) return true; + return false; + } + + inline bool jj_3R_631() + { + if (jj_done) return true; + if (jj_scan_token(PROCEDURE_T)) return true; + return false; + } + + inline bool jj_3R_630() + { + if (jj_done) return true; + if (jj_scan_token(CONFIGURATION_T)) return true; + return false; + } + + inline bool jj_3R_629() + { + if (jj_done) return true; + if (jj_scan_token(ARCHITECTURE_T)) return true; + return false; + } + + inline bool jj_3R_628() + { + if (jj_done) return true; + if (jj_scan_token(ENTITY_T)) return true; + return false; + } + + inline bool jj_3R_610() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_628()) { + jj_scanpos = xsp; + if (jj_3R_629()) { + jj_scanpos = xsp; + if (jj_3R_630()) { + jj_scanpos = xsp; + if (jj_3R_631()) { + jj_scanpos = xsp; + if (jj_3R_632()) { + jj_scanpos = xsp; + if (jj_3R_633()) { + jj_scanpos = xsp; + if (jj_3R_634()) { + jj_scanpos = xsp; + if (jj_3R_635()) { + jj_scanpos = xsp; + if (jj_3R_636()) { + jj_scanpos = xsp; + if (jj_3R_637()) { + jj_scanpos = xsp; + if (jj_3R_638()) { + jj_scanpos = xsp; + if (jj_3R_639()) { + jj_scanpos = xsp; + if (jj_3R_640()) { + jj_scanpos = xsp; + if (jj_3R_641()) { + jj_scanpos = xsp; + if (jj_3R_642()) { + jj_scanpos = xsp; + if (jj_3R_643()) { + jj_scanpos = xsp; + if (jj_3R_644()) return true; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_538() + { + if (jj_done) return true; + if (jj_scan_token(OPEN_T)) return true; + return false; + } + + inline bool jj_3R_537() + { + if (jj_done) return true; + if (jj_scan_token(CONFIGURATION_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3_30() + { + if (jj_done) return true; + if (jj_3R_86()) return true; + if (jj_scan_token(ARROW_T)) return true; + return false; + } + + inline bool jj_3R_536() + { + if (jj_done) return true; + if (jj_scan_token(ENTITY_T)) return true; + if (jj_3R_60()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_581()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_476() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_536()) { + jj_scanpos = xsp; + if (jj_3R_537()) { + jj_scanpos = xsp; + if (jj_3R_538()) return true; + } + } + return false; + } + + inline bool jj_3R_687() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3_29() + { + if (jj_done) return true; + if (jj_3R_85()) return true; + return false; + } + + inline bool jj_3R_706() + { + if (jj_done) return true; + if (jj_3R_197()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_85()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_28() + { + if (jj_done) return true; + if (jj_3R_84()) return true; + return false; + } + + inline bool jj_3R_254() + { + if (jj_done) return true; + if (jj_3R_351()) return true; + return false; + } + + inline bool jj_3R_344() + { + if (jj_done) return true; + if (jj_3R_86()) return true; + if (jj_scan_token(ARROW_T)) return true; + return false; + } + + inline bool jj_3R_236() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_344()) jj_scanpos = xsp; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_695() + { + if (jj_done) return true; + if (jj_3R_704()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_159() + { + if (jj_done) return true; + if (jj_3R_85()) return true; + return false; + } + + inline bool jj_3R_686() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_695()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_158() + { + if (jj_done) return true; + if (jj_3R_84()) return true; + return false; + } + + inline bool jj_3R_68() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_158()) { + jj_scanpos = xsp; + if (jj_3R_159()) return true; + } + return false; + } + + inline bool jj_3R_721() + { + if (jj_done) return true; + if (jj_3R_478()) return true; + return false; + } + + inline bool jj_3R_720() + { + if (jj_done) return true; + if (jj_3R_525()) return true; + return false; + } + + inline bool jj_3R_719() + { + if (jj_done) return true; + if (jj_3R_332()) return true; + return false; + } + + inline bool jj_3R_704() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_719()) { + jj_scanpos = xsp; + if (jj_3R_720()) { + jj_scanpos = xsp; + if (jj_3R_721()) return true; + } + } + return false; + } + + inline bool jj_3R_571() + { + if (jj_done) return true; + if (jj_3R_611()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_685() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_527() + { + if (jj_done) return true; + if (jj_scan_token(DISCONNECT_T)) return true; + if (jj_3R_571()) return true; + if (jj_scan_token(AFTER_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_559() + { + if (jj_done) return true; + if (jj_scan_token(VARASSIGN_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_239() + { + if (jj_done) return true; + if (jj_scan_token(DOWNTO_T)) return true; + return false; + } + + inline bool jj_3R_678() + { + if (jj_done) return true; + if (jj_scan_token(PROTECTED_T)) return true; + if (jj_3R_686()) return true; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(PROTECTED_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_687()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3_102() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3R_253() + { + if (jj_done) return true; + if (jj_3R_350()) return true; + return false; + } + + inline bool jj_3R_110() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_238()) { + jj_scanpos = xsp; + if (jj_3R_239()) return true; + } + return false; + } + + inline bool jj_3R_238() + { + if (jj_done) return true; + if (jj_scan_token(TO_T)) return true; + return false; + } + + inline bool jj_3R_694() + { + if (jj_done) return true; + if (jj_3R_703()) return true; + return false; + } + + inline bool jj_3R_545() + { + if (jj_done) return true; + if (jj_3R_295()) return true; + return false; + } + + inline bool jj_3R_684() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_694()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_544() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_492() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_544()) { + jj_scanpos = xsp; + if (jj_3R_545()) return true; + } + return false; + } + + inline bool jj_3R_718() + { + if (jj_done) return true; + if (jj_3R_528()) return true; + return false; + } + + inline bool jj_3R_715() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3_103() + { + if (jj_done) return true; + if (jj_3R_66()) return true; + return false; + } + + inline bool jj_3R_717() + { + if (jj_done) return true; + if (jj_3R_478()) return true; + return false; + } + + inline bool jj_3R_716() + { + if (jj_done) return true; + if (jj_3R_525()) return true; + return false; + } + + inline bool jj_3R_714() + { + if (jj_done) return true; + if (jj_3R_523()) return true; + return false; + } + + inline bool jj_3R_713() + { + if (jj_done) return true; + if (jj_3R_522()) return true; + return false; + } + + inline bool jj_3R_712() + { + if (jj_done) return true; + if (jj_3R_521()) return true; + return false; + } + + inline bool jj_3R_711() + { + if (jj_done) return true; + if (jj_3R_519()) return true; + return false; + } + + inline bool jj_3R_710() + { + if (jj_done) return true; + if (jj_3R_518()) return true; + return false; + } + + inline bool jj_3R_516() + { + if (jj_done) return true; + if (jj_scan_token(REJECT_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_709() + { + if (jj_done) return true; + if (jj_3R_517()) return true; + return false; + } + + inline bool jj_3R_707() + { + if (jj_done) return true; + if (jj_3R_93()) return true; + return false; + } + + inline bool jj_3R_703() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_707()) { + jj_scanpos = xsp; + if (jj_3R_708()) { + jj_scanpos = xsp; + if (jj_3R_709()) { + jj_scanpos = xsp; + if (jj_3R_710()) { + jj_scanpos = xsp; + if (jj_3R_711()) { + jj_scanpos = xsp; + if (jj_3R_712()) { + jj_scanpos = xsp; + if (jj_3R_713()) { + jj_scanpos = xsp; + if (jj_3R_714()) { + jj_scanpos = xsp; + if (jj_3R_715()) { + jj_scanpos = xsp; + if (jj_3R_716()) { + jj_scanpos = xsp; + if (jj_3R_717()) { + jj_scanpos = xsp; + if (jj_3_103()) { + jj_scanpos = xsp; + if (jj_3R_718()) return true; + } + } + } + } + } + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_708() + { + if (jj_done) return true; + if (jj_3R_496()) return true; + return false; + } + + inline bool jj_3R_456() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_516()) jj_scanpos = xsp; + if (jj_scan_token(INERTIAL_T)) return true; + return false; + } + + inline bool jj_3_27() + { + if (jj_done) return true; + if (jj_3R_83()) return true; + return false; + } + + inline bool jj_3R_377() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_455()) { + jj_scanpos = xsp; + if (jj_3R_456()) return true; + } + return false; + } + + inline bool jj_3R_455() + { + if (jj_done) return true; + if (jj_scan_token(TRANSPORT_T)) return true; + return false; + } + + inline bool jj_3R_252() + { + if (jj_done) return true; + if (jj_3R_349()) return true; + return false; + } + + inline bool jj_3_26() + { + if (jj_done) return true; + if (jj_3R_82()) return true; + return false; + } + + inline bool jj_3R_499() + { + if (jj_done) return true; + if (jj_scan_token(AFTER_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_277() + { + if (jj_done) return true; + if (jj_3R_83()) return true; + return false; + } + + inline bool jj_3R_137() + { + if (jj_done) return true; + if (jj_scan_token(PROTECTED_T)) return true; + if (jj_scan_token(BODY_T)) return true; + if (jj_3R_684()) return true; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(PROTECTED_T)) return true; + if (jj_scan_token(BODY_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_685()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_457() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_424()) return true; + return false; + } + + inline bool jj_3R_133() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_276()) { + jj_scanpos = xsp; + if (jj_3R_277()) return true; + } + return false; + } + + inline bool jj_3R_276() + { + if (jj_done) return true; + if (jj_3R_82()) return true; + return false; + } + + inline bool jj_3R_424() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_499()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_705() + { + if (jj_done) return true; + if (jj_scan_token(ARRAY_T)) return true; + if (jj_3R_83()) return true; + if (jj_scan_token(OF_T)) return true; + if (jj_3R_85()) return true; + return false; + } + + inline bool jj_3R_379() + { + if (jj_done) return true; + if (jj_scan_token(UNAFFECTED_T)) return true; + return false; + } + + inline bool jj_3R_303() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_378()) { + jj_scanpos = xsp; + if (jj_3R_379()) return true; + } + return false; + } + + inline bool jj_3R_378() + { + if (jj_done) return true; + if (jj_3R_424()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_457()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_251() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_519() + { + if (jj_done) return true; + if (jj_scan_token(CONSTANT_T)) return true; + if (jj_3R_197()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_85()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_559()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_118() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_251()) jj_scanpos = xsp; + if (jj_scan_token(WAIT_T)) return true; + xsp = jj_scanpos; + if (jj_3R_252()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_253()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_254()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_25() + { + if (jj_done) return true; + if (jj_3R_81()) return true; + return false; + } + + inline bool jj_3R_154() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_153()) return true; + return false; + } + + inline bool jj_3R_526() + { + if (jj_done) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_3R_178()) return true; + if (jj_3R_317()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_543() + { + if (jj_done) return true; + if (jj_3R_318()) return true; + return false; + } + + inline bool jj_3R_542() + { + if (jj_done) return true; + if (jj_3R_81()) return true; + return false; + } + + inline bool jj_3R_479() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_542()) { + jj_scanpos = xsp; + if (jj_3R_543()) return true; + } + return false; + } + + inline bool jj_3R_562() + { + if (jj_done) return true; + if (jj_scan_token(VARASSIGN_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_541() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_540()) return true; + return false; + } + + inline bool jj_3R_521() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(100)) jj_scanpos = xsp; + if (jj_scan_token(VARIABLE_T)) return true; + if (jj_3R_197()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_85()) return true; + xsp = jj_scanpos; + if (jj_3R_562()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_419() + { + if (jj_done) return true; + if (jj_3R_498()) return true; + return false; + } + + inline bool jj_3_101() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_347() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_418()) { + jj_scanpos = xsp; + if (jj_3R_419()) return true; + } + return false; + } + + inline bool jj_3R_418() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_101()) jj_scanpos = xsp; + if (jj_3R_115()) return true; + if (jj_scan_token(VARASSIGN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_24() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_80()) return true; + if (jj_scan_token(ELSE_T)) return true; + return false; + } + + inline bool jj_3R_335() + { + if (jj_done) return true; + if (jj_scan_token(CONFIGURATION_T)) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_305() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_80()) return true; + return false; + } + + inline bool jj_3R_304() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_80()) return true; + if (jj_scan_token(ELSE_T)) return true; + if (jj_3R_303()) return true; + return false; + } + + inline bool jj_3R_478() + { + if (jj_done) return true; + if (jj_scan_token(USE_T)) return true; + if (jj_3R_540()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_541()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_167() + { + if (jj_done) return true; + if (jj_3R_303()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_304()) { jj_scanpos = xsp; break; } + } + xsp = jj_scanpos; + if (jj_3R_305()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_63() + { + if (jj_done) return true; + if (jj_scan_token(ARRAY_T)) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_153()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_154()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RPAREN_T)) return true; + if (jj_scan_token(OF_T)) return true; + if (jj_3R_85()) return true; + return false; + } + + inline bool jj_3R_156() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_72() + { + if (jj_done) return true; + if (jj_3R_115()) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + if (jj_3R_166()) return true; + if (jj_3R_167()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_668() + { + if (jj_done) return true; + if (jj_3R_678()) return true; + return false; + } + + inline bool jj_3R_350() + { + if (jj_done) return true; + if (jj_scan_token(UNTIL_T)) return true; + if (jj_3R_80()) return true; + return false; + } + + inline bool jj_3_100() + { + if (jj_done) return true; + if (jj_3R_137()) return true; + return false; + } + + inline bool jj_3R_667() + { + if (jj_done) return true; + if (jj_3R_677()) return true; + return false; + } + + inline bool jj_3R_666() + { + if (jj_done) return true; + if (jj_3R_676()) return true; + return false; + } + + inline bool jj_3R_665() + { + if (jj_done) return true; + if (jj_3R_675()) return true; + return false; + } + + inline bool jj_3R_80() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_664() + { + if (jj_done) return true; + if (jj_3R_674()) return true; + return false; + } + + inline bool jj_3R_619() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_664()) { + jj_scanpos = xsp; + if (jj_3R_665()) { + jj_scanpos = xsp; + if (jj_3R_666()) { + jj_scanpos = xsp; + if (jj_3R_667()) { + jj_scanpos = xsp; + if (jj_3_100()) { + jj_scanpos = xsp; + if (jj_3R_668()) return true; + } + } + } + } + } + return false; + } + + inline bool jj_3R_558() + { + if (jj_done) return true; + if (jj_3R_602()) return true; + return false; + } + + inline bool jj_3_23() + { + if (jj_done) return true; + if (jj_3R_79()) return true; + return false; + } + + inline bool jj_3_96() + { + if (jj_done) return true; + if (jj_3R_133()) return true; + return false; + } + + inline bool jj_3_22() + { + if (jj_done) return true; + if (jj_3R_78()) return true; + return false; + } + + inline bool jj_3_99() + { + if (jj_done) return true; + if (jj_3R_136()) return true; + return false; + } + + inline bool jj_3R_517() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_99()) { + jj_scanpos = xsp; + if (jj_3R_558()) return true; + } + return false; + } + + inline bool jj_3_21() + { + if (jj_done) return true; + if (jj_3R_77()) return true; + return false; + } + + inline bool jj_3R_106() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_76() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3_98() + { + if (jj_done) return true; + if (jj_3R_134()) return true; + if (jj_3R_135()) return true; + return false; + } + + inline bool jj_3_20() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_76()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(78)) jj_scanpos = xsp; + if (jj_scan_token(ASSERT_T)) return true; + return false; + } + + inline bool jj_3R_389() + { + if (jj_done) return true; + if (jj_3R_79()) return true; + return false; + } + + inline bool jj_3R_185() + { + if (jj_done) return true; + if (jj_3R_133()) return true; + return false; + } + + inline bool jj_3R_388() + { + if (jj_done) return true; + if (jj_3R_78()) return true; + return false; + } + + inline bool jj_3_19() + { + if (jj_done) return true; + if (jj_3R_75()) return true; + return false; + } + + inline bool jj_3R_74() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_387() + { + if (jj_done) return true; + if (jj_3R_77()) return true; + return false; + } + + inline bool jj_3_18() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_74()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(78)) jj_scanpos = xsp; + if (jj_scan_token(PROCESS_T)) return true; + return false; + } + + inline bool jj_3R_351() + { + if (jj_done) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_73() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_386() + { + if (jj_done) return true; + if (jj_3R_88()) return true; + return false; + } + + inline bool jj_3_17() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_73()) jj_scanpos = xsp; + if (jj_scan_token(BLOCK_T)) return true; + return false; + } + + inline bool jj_3R_385() + { + if (jj_done) return true; + if (jj_3R_474()) return true; + return false; + } + + inline bool jj_3R_161() + { + if (jj_done) return true; + if (jj_3R_135()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3_98()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_384() + { + if (jj_done) return true; + if (jj_3R_75()) return true; + return false; + } + + inline bool jj_3R_247() + { + if (jj_done) return true; + if (jj_3R_109()) return true; + return false; + } + + inline bool jj_3R_383() + { + if (jj_done) return true; + if (jj_3R_89()) return true; + return false; + } + + inline bool jj_3R_115() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_246()) { + jj_scanpos = xsp; + if (jj_3R_247()) return true; + } + return false; + } + + inline bool jj_3_97() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_246() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_309() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_382()) { + jj_scanpos = xsp; + if (jj_3R_383()) { + jj_scanpos = xsp; + if (jj_3R_384()) { + jj_scanpos = xsp; + if (jj_3R_385()) { + jj_scanpos = xsp; + if (jj_3R_386()) { + jj_scanpos = xsp; + if (jj_3R_387()) { + jj_scanpos = xsp; + if (jj_3R_388()) { + jj_scanpos = xsp; + if (jj_3R_389()) return true; + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_382() + { + if (jj_done) return true; + if (jj_3R_473()) return true; + return false; + } + + inline bool jj_3_95() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3_16() + { + if (jj_done) return true; + if (jj_3R_72()) return true; + return false; + } + + inline bool jj_3R_218() + { + if (jj_done) return true; + if (jj_scan_token(ALL_T)) return true; + return false; + } + + inline bool jj_3R_217() + { + if (jj_done) return true; + if (jj_3R_295()) return true; + return false; + } + + inline bool jj_3R_216() + { + if (jj_done) return true; + if (jj_3R_337()) return true; + return false; + } + + inline bool jj_3R_173() + { + if (jj_done) return true; + if (jj_3R_310()) return true; + return false; + } + + inline bool jj_3R_215() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_100() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_215()) { + jj_scanpos = xsp; + if (jj_3R_216()) { + jj_scanpos = xsp; + if (jj_3R_217()) { + jj_scanpos = xsp; + if (jj_3R_218()) return true; + } + } + } + return false; + } + + inline bool jj_3R_172() + { + if (jj_done) return true; + if (jj_3R_72()) return true; + return false; + } + + inline bool jj_3_15() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_184() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_77() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_15()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(78)) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_172()) { + jj_scanpos = xsp; + if (jj_3R_173()) return true; + } + return false; + } + + inline bool jj_3R_85() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_184()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_185()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3_14() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_79() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_14()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(78)) jj_scanpos = xsp; + if (jj_3R_177()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_13() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3_12() + { + if (jj_done) return true; + if (jj_3R_70()) return true; + return false; + } + + inline bool jj_3R_88() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_13()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(78)) jj_scanpos = xsp; + if (jj_3R_188()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_518() + { + if (jj_done) return true; + if (jj_scan_token(SUBTYPE_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_3R_85()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_592() + { + if (jj_done) return true; + if (jj_3R_113()) return true; + return false; + } + + inline bool jj_3R_683() + { + if (jj_done) return true; + if (jj_3R_693()) return true; + return false; + } + + inline bool jj_3R_569() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_548() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_592()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3_94() + { + if (jj_done) return true; + if (jj_3R_132()) return true; + return false; + } + + inline bool jj_3R_493() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_298()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_682() + { + if (jj_done) return true; + if (jj_3R_692()) return true; + return false; + } + + inline bool jj_3R_675() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_682()) { + jj_scanpos = xsp; + if (jj_3R_683()) return true; + } + return false; + } + + inline bool jj_3R_176() + { + if (jj_done) return true; + if (jj_3R_314()) return true; + return false; + } + + inline bool jj_3_93() + { + if (jj_done) return true; + if (jj_3R_131()) return true; + return false; + } + + inline bool jj_3R_175() + { + if (jj_done) return true; + if (jj_3R_70()) return true; + return false; + } + + inline bool jj_3R_178() + { + if (jj_done) return true; + if (jj_3R_316()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_495() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_546()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_78() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_174()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_175()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_176()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_494() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(83)) { + jj_scanpos = xsp; + if (jj_scan_token(51)) return true; + } + return false; + } + + inline bool jj_3R_412() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_494()) jj_scanpos = xsp; + if (jj_scan_token(FUNCTION_T)) return true; + if (jj_3R_492()) return true; + xsp = jj_scanpos; + if (jj_3R_495()) jj_scanpos = xsp; + if (jj_scan_token(RETURN_T)) return true; + if (jj_3R_156()) return true; + return false; + } + + inline bool jj_3R_568() + { + if (jj_done) return true; + if (jj_3R_608()) return true; + return false; + } + + inline bool jj_3R_567() + { + if (jj_done) return true; + if (jj_3R_67()) return true; + return false; + } + + inline bool jj_3R_180() + { + if (jj_done) return true; + if (jj_3R_318()) return true; + return false; + } + + inline bool jj_3R_179() + { + if (jj_done) return true; + if (jj_3R_317()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_187() + { + if (jj_done) return true; + if (jj_scan_token(BAR_T)) return true; + if (jj_3R_186()) return true; + return false; + } + + inline bool jj_3R_524() + { + if (jj_done) return true; + if (jj_scan_token(COMPONENT_T)) return true; + if (jj_3R_71()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(55)) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_567()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_568()) jj_scanpos = xsp; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(COMPONENT_T)) return true; + xsp = jj_scanpos; + if (jj_3R_569()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_81() + { + if (jj_done) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_3R_178()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_179()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_180()) jj_scanpos = xsp; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_332() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_411()) { + jj_scanpos = xsp; + if (jj_3R_412()) return true; + } + return false; + } + + inline bool jj_3R_411() + { + if (jj_done) return true; + if (jj_scan_token(PROCEDURE_T)) return true; + if (jj_3R_492()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_493()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3_93()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3_94()) jj_scanpos = xsp; + if (jj_3R_403()) return true; + return false; + } + + inline bool jj_3_11() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + return false; + } + + inline bool jj_3R_593() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(45)) { + jj_scanpos = xsp; + if (jj_scan_token(79)) return true; + } + return false; + } + + inline bool jj_3R_86() + { + if (jj_done) return true; + if (jj_3R_186()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_187()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3_10() + { + if (jj_done) return true; + if (jj_3R_68()) return true; + return false; + } + + inline bool jj_3R_591() + { + if (jj_done) return true; + if (jj_3R_618()) return true; + return false; + } + + inline bool jj_3R_589() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_547() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_591()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_322() + { + if (jj_done) return true; + if (jj_scan_token(OTHER_T)) return true; + return false; + } + + inline bool jj_3R_321() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3_91() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3R_663() + { + if (jj_done) return true; + if (jj_3R_528()) return true; + return false; + } + + inline bool jj_3R_320() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + return false; + } + + inline bool jj_3R_186() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_319()) { + jj_scanpos = xsp; + if (jj_3R_320()) { + jj_scanpos = xsp; + if (jj_3R_321()) { + jj_scanpos = xsp; + if (jj_3R_322()) return true; + } + } + } + return false; + } + + inline bool jj_3R_319() + { + if (jj_done) return true; + if (jj_3R_68()) return true; + return false; + } + + inline bool jj_3R_662() + { + if (jj_done) return true; + if (jj_3R_478()) return true; + return false; + } + + inline bool jj_3_92() + { + if (jj_done) return true; + if (jj_3R_66()) return true; + return false; + } + + inline bool jj_3R_661() + { + if (jj_done) return true; + if (jj_3R_525()) return true; + return false; + } + + inline bool jj_3R_533() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_337() + { + if (jj_done) return true; + if (jj_scan_token(CHARACTER_LITERAL)) return true; + return false; + } + + inline bool jj_3R_660() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3R_659() + { + if (jj_done) return true; + if (jj_3R_523()) return true; + return false; + } + + inline bool jj_3R_658() + { + if (jj_done) return true; + if (jj_3R_522()) return true; + return false; + } + + inline bool jj_3R_529() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_657() + { + if (jj_done) return true; + if (jj_3R_521()) return true; + return false; + } + + inline bool jj_3R_550() + { + if (jj_done) return true; + if (jj_3R_492()) return true; + return false; + } + + inline bool jj_3R_656() + { + if (jj_done) return true; + if (jj_3R_519()) return true; + return false; + } + + inline bool jj_3R_655() + { + if (jj_done) return true; + if (jj_3R_518()) return true; + return false; + } + + inline bool jj_3R_654() + { + if (jj_done) return true; + if (jj_3R_496()) return true; + return false; + } + + inline bool jj_3R_653() + { + if (jj_done) return true; + if (jj_3R_517()) return true; + return false; + } + + inline bool jj_3R_652() + { + if (jj_done) return true; + if (jj_3R_93()) return true; + return false; + } + + inline bool jj_3R_618() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_652()) { + jj_scanpos = xsp; + if (jj_3R_653()) { + jj_scanpos = xsp; + if (jj_3R_654()) { + jj_scanpos = xsp; + if (jj_3R_655()) { + jj_scanpos = xsp; + if (jj_3R_656()) { + jj_scanpos = xsp; + if (jj_3R_657()) { + jj_scanpos = xsp; + if (jj_3R_658()) { + jj_scanpos = xsp; + if (jj_3R_659()) { + jj_scanpos = xsp; + if (jj_3R_660()) { + jj_scanpos = xsp; + if (jj_3R_661()) { + jj_scanpos = xsp; + if (jj_3R_662()) { + jj_scanpos = xsp; + if (jj_3_92()) { + jj_scanpos = xsp; + if (jj_3R_663()) return true; + } + } + } + } + } + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_587() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_86()) return true; + if (jj_scan_token(ARROW_T)) return true; + if (jj_3R_259()) return true; + return false; + } + + inline bool jj_3R_561() + { + if (jj_done) return true; + if (jj_scan_token(VARASSIGN_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_588() + { + if (jj_done) return true; + if (jj_3R_587()) return true; + return false; + } + + inline bool jj_3R_616() + { + if (jj_done) return true; + if (jj_3R_70()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_90() + { + if (jj_done) return true; + if (jj_3R_130()) return true; + return false; + } + + inline bool jj_3R_333() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_413()) { + jj_scanpos = xsp; + if (jj_scan_token(136)) return true; + } + return false; + } + + inline bool jj_3R_413() + { + if (jj_done) return true; + if (jj_3R_496()) return true; + return false; + } + + inline bool jj_3R_201() + { + if (jj_done) return true; + if (jj_3R_332()) return true; + if (jj_3R_333()) return true; + return false; + } + + inline bool jj_3R_549() + { + if (jj_done) return true; + if (jj_3R_593()) return true; + return false; + } + + inline bool jj_3R_200() + { + if (jj_done) return true; + if (jj_3R_130()) return true; + return false; + } + + inline bool jj_3R_93() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_200()) { + jj_scanpos = xsp; + if (jj_3R_201()) return true; + } + return false; + } + + inline bool jj_3_89() + { + if (jj_done) return true; + if (jj_3R_129()) return true; + return false; + } + + inline bool jj_3R_256() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_122() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_256()) jj_scanpos = xsp; + if (jj_scan_token(CASE_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_3R_587()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_588()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(CASE_T)) return true; + xsp = jj_scanpos; + if (jj_3R_589()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_577() + { + if (jj_done) return true; + if (jj_3R_309()) return true; + return false; + } + + inline bool jj_3R_560() + { + if (jj_done) return true; + if (jj_3R_603()) return true; + return false; + } + + inline bool jj_3R_532() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_577()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_162() + { + if (jj_done) return true; + if (jj_3R_129()) return true; + if (jj_3R_161()) return true; + return false; + } + + inline bool jj_3R_617() + { + if (jj_done) return true; + if (jj_3R_314()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_477() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_539()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_473() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_scan_token(BLOCK_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_529()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(55)) jj_scanpos = xsp; + if (jj_3R_530()) return true; + if (jj_3R_531()) return true; + if (jj_scan_token(BEGIN_T)) return true; + if (jj_3R_532()) return true; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(BLOCK_T)) return true; + xsp = jj_scanpos; + if (jj_3R_533()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_496() + { + if (jj_done) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_3R_547()) return true; + if (jj_scan_token(BEGIN_T)) return true; + if (jj_3R_548()) return true; + if (jj_scan_token(END_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_549()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_550()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_9() + { + if (jj_done) return true; + if (jj_3R_67()) return true; + return false; + } + + inline bool jj_3R_398() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_477()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_341() + { + if (jj_done) return true; + if (jj_scan_token(STRINGLITERAL)) return true; + return false; + } + + inline bool jj_3R_575() + { + if (jj_done) return true; + if (jj_3R_608()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_617()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_574() + { + if (jj_done) return true; + if (jj_3R_67()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_616()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_530() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_574()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_575()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_576() + { + if (jj_done) return true; + if (jj_3R_381()) return true; + return false; + } + + inline bool jj_3R_531() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_576()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_414() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_160() + { + if (jj_done) return true; + if (jj_3R_299()) return true; + return false; + } + + inline bool jj_3R_472() + { + if (jj_done) return true; + if (jj_3R_528()) return true; + return false; + } + + inline bool jj_3R_69() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_160()) jj_scanpos = xsp; + if (jj_3R_161()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_162()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3_7() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3_8() + { + if (jj_done) return true; + if (jj_3R_66()) return true; + return false; + } + + inline bool jj_3R_471() + { + if (jj_done) return true; + if (jj_3R_478()) return true; + return false; + } + + inline bool jj_3R_343() + { + if (jj_done) return true; + if (jj_scan_token(RETURN_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_670() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_470() + { + if (jj_done) return true; + if (jj_3R_527()) return true; + return false; + } + + inline bool jj_3R_342() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_414()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_469() + { + if (jj_done) return true; + if (jj_3R_526()) return true; + return false; + } + + inline bool jj_3R_468() + { + if (jj_done) return true; + if (jj_3R_525()) return true; + return false; + } + + inline bool jj_3R_234() + { + if (jj_done) return true; + if (jj_scan_token(LBRACKET_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_342()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_343()) jj_scanpos = xsp; + if (jj_scan_token(RBRACKET_T)) return true; + return false; + } + + inline bool jj_3R_466() + { + if (jj_done) return true; + if (jj_3R_524()) return true; + return false; + } + + inline bool jj_3R_467() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3R_647() + { + if (jj_done) return true; + if (jj_scan_token(ALL_T)) return true; + return false; + } + + inline bool jj_3R_465() + { + if (jj_done) return true; + if (jj_3R_523()) return true; + return false; + } + + inline bool jj_3R_646() + { + if (jj_done) return true; + if (jj_scan_token(OTHER_T)) return true; + return false; + } + + inline bool jj_3R_464() + { + if (jj_done) return true; + if (jj_3R_522()) return true; + return false; + } + + inline bool jj_3R_463() + { + if (jj_done) return true; + if (jj_3R_521()) return true; + return false; + } + + inline bool jj_3R_645() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_670()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_611() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_645()) { + jj_scanpos = xsp; + if (jj_3R_646()) { + jj_scanpos = xsp; + if (jj_3R_647()) return true; + } + } + return false; + } + + inline bool jj_3R_462() + { + if (jj_done) return true; + if (jj_3R_520()) return true; + return false; + } + + inline bool jj_3R_461() + { + if (jj_done) return true; + if (jj_3R_519()) return true; + return false; + } + + inline bool jj_3R_621() + { + if (jj_done) return true; + if (jj_scan_token(BUS_T)) return true; + return false; + } + + inline bool jj_3R_460() + { + if (jj_done) return true; + if (jj_3R_518()) return true; + return false; + } + + inline bool jj_3R_400() + { + if (jj_done) return true; + if (jj_3R_479()) return true; + return false; + } + + inline bool jj_3R_459() + { + if (jj_done) return true; + if (jj_3R_517()) return true; + return false; + } + + inline bool jj_3R_399() + { + if (jj_done) return true; + if (jj_3R_478()) return true; + return false; + } + + inline bool jj_3R_620() + { + if (jj_done) return true; + if (jj_scan_token(REGISTER_T)) return true; + return false; + } + + inline bool jj_3R_603() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_620()) { + jj_scanpos = xsp; + if (jj_3R_621()) return true; + } + return false; + } + + inline bool jj_3R_381() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_458()) { + jj_scanpos = xsp; + if (jj_3R_459()) { + jj_scanpos = xsp; + if (jj_3R_460()) { + jj_scanpos = xsp; + if (jj_3R_461()) { + jj_scanpos = xsp; + if (jj_3R_462()) { + jj_scanpos = xsp; + if (jj_3R_463()) { + jj_scanpos = xsp; + if (jj_3R_464()) { + jj_scanpos = xsp; + if (jj_3R_465()) { + jj_scanpos = xsp; + if (jj_3R_466()) { + jj_scanpos = xsp; + if (jj_3R_467()) { + jj_scanpos = xsp; + if (jj_3R_468()) { + jj_scanpos = xsp; + if (jj_3R_469()) { + jj_scanpos = xsp; + if (jj_3R_470()) { + jj_scanpos = xsp; + if (jj_3R_471()) { + jj_scanpos = xsp; + if (jj_3_8()) { + jj_scanpos = xsp; + if (jj_3R_472()) return true; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_458() + { + if (jj_done) return true; + if (jj_3R_93()) return true; + return false; + } + + inline bool jj_3R_318() + { + if (jj_done) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_3R_398()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_399()) { jj_scanpos = xsp; break; } + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_400()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_520() + { + if (jj_done) return true; + if (jj_scan_token(SIGNAL_T)) return true; + if (jj_3R_197()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_85()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_560()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_561()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_88() + { + if (jj_done) return true; + if (jj_3R_128()) return true; + return false; + } + + inline bool jj_3R_95() + { + if (jj_done) return true; + if (jj_scan_token(BIT_STRING_LITERAL)) return true; + return false; + } + + inline bool jj_3R_240() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3_87() + { + if (jj_done) return true; + if (jj_3R_127()) return true; + return false; + } + + inline bool jj_3R_397() + { + if (jj_done) return true; + if (jj_3R_314()) return true; + return false; + } + + inline bool jj_3R_497() + { + if (jj_done) return true; + if (jj_3R_377()) return true; + return false; + } + + inline bool jj_3R_396() + { + if (jj_done) return true; + if (jj_3R_70()) return true; + return false; + } + + inline bool jj_3_86() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_395() + { + if (jj_done) return true; + if (jj_scan_token(USE_T)) return true; + if (jj_3R_476()) return true; + return false; + } + + inline bool jj_3R_417() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_86()) jj_scanpos = xsp; + if (jj_3R_115()) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + xsp = jj_scanpos; + if (jj_3R_497()) jj_scanpos = xsp; + if (jj_3R_303()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_317() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_395()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_396()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_397()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_416() + { + if (jj_done) return true; + if (jj_3R_128()) return true; + return false; + } + + inline bool jj_3R_359() + { + if (jj_done) return true; + if (jj_3R_437()) return true; + if (jj_3R_69()) return true; + return false; + } + + inline bool jj_3R_346() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_415()) { + jj_scanpos = xsp; + if (jj_3R_416()) { + jj_scanpos = xsp; + if (jj_3R_417()) return true; + } + } + return false; + } + + inline bool jj_3R_415() + { + if (jj_done) return true; + if (jj_3R_127()) return true; + return false; + } + + inline bool jj_3R_374() + { + if (jj_done) return true; + if (jj_scan_token(MINUS_T)) return true; + return false; + } + + inline bool jj_3R_299() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_373()) { + jj_scanpos = xsp; + if (jj_3R_374()) return true; + } + return false; + } + + inline bool jj_3R_373() + { + if (jj_done) return true; + if (jj_scan_token(PLUS_T)) return true; + return false; + } + + inline bool jj_3R_509() + { + if (jj_done) return true; + if (jj_scan_token(ROR_T)) return true; + return false; + } + + inline bool jj_3R_508() + { + if (jj_done) return true; + if (jj_scan_token(ROL_T)) return true; + return false; + } + + inline bool jj_3R_507() + { + if (jj_done) return true; + if (jj_scan_token(SRA_T)) return true; + return false; + } + + inline bool jj_3R_506() + { + if (jj_done) return true; + if (jj_scan_token(SLA_T)) return true; + return false; + } + + inline bool jj_3R_505() + { + if (jj_done) return true; + if (jj_scan_token(SRL_T)) return true; + return false; + } + + inline bool jj_3R_437() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_504()) { + jj_scanpos = xsp; + if (jj_3R_505()) { + jj_scanpos = xsp; + if (jj_3R_506()) { + jj_scanpos = xsp; + if (jj_3R_507()) { + jj_scanpos = xsp; + if (jj_3R_508()) { + jj_scanpos = xsp; + if (jj_3R_509()) return true; + } + } + } + } + } + return false; + } + + inline bool jj_3R_504() + { + if (jj_done) return true; + if (jj_scan_token(SLL_T)) return true; + return false; + } + + inline bool jj_3R_245() + { + if (jj_done) return true; + if (jj_3R_348()) return true; + return false; + } + + inline bool jj_3R_292() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_359()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3_84() + { + if (jj_done) return true; + if (jj_3R_125()) return true; + return false; + } + + inline bool jj_3R_324() + { + if (jj_done) return true; + if (jj_scan_token(SEVERITY_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3_85() + { + if (jj_done) return true; + if (jj_3R_126()) return true; + return false; + } + + inline bool jj_3_83() + { + if (jj_done) return true; + if (jj_3R_124()) return true; + return false; + } + + inline bool jj_3_82() + { + if (jj_done) return true; + if (jj_3R_123()) return true; + return false; + } + + inline bool jj_3R_119() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3_81() + { + if (jj_done) return true; + if (jj_3R_122()) return true; + return false; + } + + inline bool jj_3R_525() + { + if (jj_done) return true; + if (jj_scan_token(ATTRIBUTE_T)) return true; + if (jj_3R_220()) return true; + if (jj_scan_token(OF_T)) return true; + if (jj_3R_570()) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_78() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_119()) jj_scanpos = xsp; + if (jj_3R_115()) return true; + if (jj_scan_token(VARASSIGN_T)) return true; + return false; + } + + inline bool jj_3_80() + { + if (jj_done) return true; + if (jj_3R_121()) return true; + return false; + } + + inline bool jj_3R_301() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_300()) return true; + return false; + } + + inline bool jj_3R_111() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(APOSTROPHE_T)) return true; + if (jj_3R_60()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_240()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_340() + { + if (jj_done) return true; + if (jj_scan_token(RANGE_T)) return true; + return false; + } + + inline bool jj_3_79() + { + if (jj_done) return true; + if (jj_3R_120()) return true; + return false; + } + + inline bool jj_3R_114() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3_77() + { + if (jj_done) return true; + if (jj_3R_118()) return true; + return false; + } + + inline bool jj_3R_220() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_339()) { + jj_scanpos = xsp; + if (jj_3R_340()) return true; + } + return false; + } + + inline bool jj_3R_339() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_244() + { + if (jj_done) return true; + if (jj_3R_347()) return true; + return false; + } + + inline bool jj_3_74() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_114()) jj_scanpos = xsp; + if (jj_3R_115()) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + return false; + } + + inline bool jj_3_76() + { + if (jj_done) return true; + if (jj_3R_117()) return true; + return false; + } + + inline bool jj_3_75() + { + if (jj_done) return true; + if (jj_3R_116()) return true; + return false; + } + + inline bool jj_3R_475() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_303()) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_86()) return true; + return false; + } + + inline bool jj_3_6() + { + if (jj_done) return true; + if (jj_3R_64()) return true; + if (jj_scan_token(ARROW_T)) return true; + return false; + } + + inline bool jj_3R_65() + { + if (jj_done) return true; + if (jj_scan_token(ATTRIBUTE_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_156()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_323() + { + if (jj_done) return true; + if (jj_scan_token(REPORT_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_113() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_243()) { + jj_scanpos = xsp; + if (jj_3_75()) { + jj_scanpos = xsp; + if (jj_3_76()) { + jj_scanpos = xsp; + if (jj_3_77()) { + jj_scanpos = xsp; + if (jj_3R_244()) { + jj_scanpos = xsp; + if (jj_3_79()) { + jj_scanpos = xsp; + if (jj_3_80()) { + jj_scanpos = xsp; + if (jj_3_81()) { + jj_scanpos = xsp; + if (jj_3_82()) { + jj_scanpos = xsp; + if (jj_3_83()) { + jj_scanpos = xsp; + if (jj_3_84()) { + jj_scanpos = xsp; + if (jj_3_85()) { + jj_scanpos = xsp; + if (jj_3R_245()) return true; + } + } + } + } + } + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_243() + { + if (jj_done) return true; + if (jj_3R_346()) return true; + return false; + } + + inline bool jj_3R_480() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_163() + { + if (jj_done) return true; + if (jj_3R_300()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_301()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3_73() + { + if (jj_done) return true; + if (jj_3R_113()) return true; + return false; + } + + inline bool jj_3R_375() + { + if (jj_done) return true; + if (jj_3R_64()) return true; + if (jj_scan_token(ARROW_T)) return true; + return false; + } + + inline bool jj_3R_259() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3_73()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_300() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_375()) jj_scanpos = xsp; + if (jj_3R_376()) return true; + return false; + } + + inline bool jj_3R_267() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_401() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_480()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_248() + { + if (jj_done) return true; + if (jj_3R_139()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_116() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_248()) jj_scanpos = xsp; + if (jj_3R_188()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3_72() + { + if (jj_done) return true; + if (jj_3R_112()) return true; + return false; + } + + inline bool jj_3R_349() + { + if (jj_done) return true; + if (jj_scan_token(ON_T)) return true; + if (jj_3R_401()) return true; + return false; + } + + inline bool jj_3R_188() + { + if (jj_done) return true; + if (jj_scan_token(ASSERT_T)) return true; + if (jj_3R_80()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_323()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_324()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3_5() + { + if (jj_done) return true; + if (jj_3R_63()) return true; + return false; + } + + inline bool jj_3R_390() + { + if (jj_done) return true; + if (jj_3R_303()) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_86()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_475()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_700() + { + if (jj_done) return true; + if (jj_3R_705()) return true; + return false; + } + + inline bool jj_3R_691() + { + if (jj_done) return true; + if (jj_3R_112()) return true; + return false; + } + + inline bool jj_3R_310() + { + if (jj_done) return true; + if (jj_scan_token(WITH_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(SELECT_T)) return true; + if (jj_3R_115()) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + if (jj_3R_166()) return true; + if (jj_3R_390()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_699() + { + if (jj_done) return true; + if (jj_3R_63()) return true; + return false; + } + + inline bool jj_3R_692() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_699()) { + jj_scanpos = xsp; + if (jj_3R_700()) return true; + } + return false; + } + + inline bool jj_3R_540() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(DOT_T)) return true; + if (jj_3R_100()) return true; + return false; + } + + inline bool jj_3R_345() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(EQU_T)) return true; + if (jj_3R_103()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_566() + { + if (jj_done) return true; + if (jj_3R_234()) return true; + return false; + } + + inline bool jj_3R_681() + { + if (jj_done) return true; + if (jj_3R_82()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_691()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_680() + { + if (jj_done) return true; + if (jj_3R_690()) return true; + return false; + } + + inline bool jj_3R_674() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_680()) { + jj_scanpos = xsp; + if (jj_3R_681()) return true; + } + return false; + } + + inline bool jj_3R_266() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_237() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_236()) return true; + return false; + } + + inline bool jj_3R_126() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_266()) jj_scanpos = xsp; + if (jj_scan_token(RETURN_T)) return true; + xsp = jj_scanpos; + if (jj_3R_267()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_250() + { + if (jj_done) return true; + if (jj_scan_token(SEVERITY_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_293() + { + if (jj_done) return true; + if (jj_3R_360()) return true; + if (jj_3R_292()) return true; + return false; + } + + inline bool jj_3R_552() + { + if (jj_done) return true; + if (jj_scan_token(NEW_T)) return true; + if (jj_3R_85()) return true; + return false; + } + + inline bool jj_3R_702() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3_4() + { + if (jj_done) return true; + if (jj_scan_token(NEW_T)) return true; + if (jj_3R_62()) return true; + return false; + } + + inline bool jj_3R_502() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_4()) { + jj_scanpos = xsp; + if (jj_3R_552()) return true; + } + return false; + } + + inline bool jj_3R_249() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_117() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_249()) jj_scanpos = xsp; + if (jj_scan_token(REPORT_T)) return true; + if (jj_3R_59()) return true; + xsp = jj_scanpos; + if (jj_3R_250()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_607() + { + if (jj_done) return true; + if (jj_3R_295()) return true; + return false; + } + + inline bool jj_3R_606() + { + if (jj_done) return true; + if (jj_scan_token(CHARACTER_LITERAL)) return true; + return false; + } + + inline bool jj_3R_443() + { + if (jj_done) return true; + if (jj_scan_token(NOTEQU_T)) return true; + return false; + } + + inline bool jj_3R_605() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_564() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_605()) { + jj_scanpos = xsp; + if (jj_3R_606()) { + jj_scanpos = xsp; + if (jj_3R_607()) return true; + } + } + return false; + } + + inline bool jj_3R_442() + { + if (jj_done) return true; + if (jj_scan_token(LESSTHAN_T)) return true; + return false; + } + + inline bool jj_3R_441() + { + if (jj_done) return true; + if (jj_scan_token(GREATERTHAN_T)) return true; + return false; + } + + inline bool jj_3R_440() + { + if (jj_done) return true; + if (jj_scan_token(EQU_T)) return true; + return false; + } + + inline bool jj_3R_439() + { + if (jj_done) return true; + if (jj_scan_token(GT_T)) return true; + return false; + } + + inline bool jj_3R_360() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_438()) { + jj_scanpos = xsp; + if (jj_3R_439()) { + jj_scanpos = xsp; + if (jj_3R_440()) { + jj_scanpos = xsp; + if (jj_3R_441()) { + jj_scanpos = xsp; + if (jj_3R_442()) { + jj_scanpos = xsp; + if (jj_3R_443()) return true; + } + } + } + } + } + return false; + } + + inline bool jj_3R_438() + { + if (jj_done) return true; + if (jj_scan_token(LT_T)) return true; + return false; + } + + inline bool jj_3R_701() + { + if (jj_done) return true; + if (jj_3R_706()) return true; + return false; + } + + inline bool jj_3R_144() + { + if (jj_done) return true; + if (jj_3R_292()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_293()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_565() + { + if (jj_done) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_85()) return true; + return false; + } + + inline bool jj_3R_523() + { + if (jj_done) return true; + if (jj_scan_token(ALIAS_T)) return true; + if (jj_3R_564()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_565()) jj_scanpos = xsp; + if (jj_scan_token(IS_T)) return true; + if (jj_3R_60()) return true; + xsp = jj_scanpos; + if (jj_3R_566()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_693() + { + if (jj_done) return true; + if (jj_scan_token(RECORD_T)) return true; + Token * xsp; + if (jj_3R_701()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_701()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(RECORD_T)) return true; + xsp = jj_scanpos; + if (jj_3R_702()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_109() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_236()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_237()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_273() + { + if (jj_done) return true; + if (jj_scan_token(MINUS_T)) return true; + return false; + } + + inline bool jj_3R_274() + { + if (jj_done) return true; + if (jj_scan_token(AMPERSAND_T)) return true; + return false; + } + + inline bool jj_3_71() + { + if (jj_done) return true; + if (jj_3R_111()) return true; + return false; + } + + inline bool jj_3_70() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + if (jj_3R_110()) return true; + if (jj_3R_69()) return true; + return false; + } + + inline bool jj_3R_129() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_272()) { + jj_scanpos = xsp; + if (jj_3R_273()) { + jj_scanpos = xsp; + if (jj_3R_274()) return true; + } + } + return false; + } + + inline bool jj_3R_272() + { + if (jj_done) return true; + if (jj_scan_token(PLUS_T)) return true; + return false; + } + + inline bool jj_3R_82() + { + if (jj_done) return true; + if (jj_scan_token(RANGE_T)) return true; + if (jj_3R_84()) return true; + return false; + } + + inline bool jj_3_3() + { + if (jj_done) return true; + if (jj_3R_61()) return true; + return false; + } + + inline bool jj_3_69() + { + if (jj_done) return true; + if (jj_3R_109()) return true; + return false; + } + + inline bool jj_3R_183() + { + if (jj_done) return true; + if (jj_3R_111()) return true; + return false; + } + + inline bool jj_3R_453() + { + if (jj_done) return true; + if (jj_scan_token(BOX_T)) return true; + return false; + } + + inline bool jj_3R_454() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_61()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_228() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_182() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + if (jj_3R_110()) return true; + if (jj_3R_69()) return true; + return false; + } + + inline bool jj_3R_84() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_182()) { + jj_scanpos = xsp; + if (jj_3R_183()) return true; + } + return false; + } + + inline bool jj_3R_376() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_452()) { + jj_scanpos = xsp; + if (jj_3R_453()) { + jj_scanpos = xsp; + if (jj_3R_454()) return true; + } + } + return false; + } + + inline bool jj_3R_452() + { + if (jj_done) return true; + if (jj_3R_61()) return true; + return false; + } + + inline bool jj_3_2() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_227() + { + if (jj_done) return true; + if (jj_3R_109()) return true; + return false; + } + + inline bool jj_3R_226() + { + if (jj_done) return true; + if (jj_3R_163()) return true; + return false; + } + + inline bool jj_3R_193() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3_1() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_62() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(APOSTROPHE_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_227()) { + jj_scanpos = xsp; + if (jj_3R_228()) return true; + } + return false; + } + + inline bool jj_3R_327() + { + if (jj_done) return true; + if (jj_3R_113()) return true; + return false; + } + + inline bool jj_3R_152() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_192() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_327()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_151() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_325() + { + if (jj_done) return true; + if (jj_3R_401()) return true; + return false; + } + + inline bool jj_3R_150() + { + if (jj_done) return true; + if (jj_scan_token(OPEN_T)) return true; + return false; + } + + inline bool jj_3R_61() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_150()) { + jj_scanpos = xsp; + if (jj_3R_151()) { + jj_scanpos = xsp; + if (jj_3R_152()) return true; + } + } + return false; + } + + inline bool jj_3R_676() + { + if (jj_done) return true; + if (jj_scan_token(ACCESS_T)) return true; + if (jj_3R_85()) return true; + return false; + } + + inline bool jj_3R_225() + { + if (jj_done) return true; + if (jj_scan_token(BASED_LITERAL)) return true; + return false; + } + + inline bool jj_3R_224() + { + if (jj_done) return true; + if (jj_scan_token(INTEGER)) return true; + return false; + } + + inline bool jj_3R_223() + { + if (jj_done) return true; + if (jj_scan_token(DECIMAL_LITERAL)) return true; + return false; + } + + inline bool jj_3R_104() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_223()) { + jj_scanpos = xsp; + if (jj_3R_224()) { + jj_scanpos = xsp; + if (jj_3R_225()) return true; + } + } + return false; + } + + inline bool jj_3R_190() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(14)) { + jj_scanpos = xsp; + if (jj_3R_325()) return true; + } + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_189() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_89() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_189()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(78)) jj_scanpos = xsp; + if (jj_scan_token(PROCESS_T)) return true; + xsp = jj_scanpos; + if (jj_3R_190()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(55)) jj_scanpos = xsp; + if (jj_3R_191()) return true; + if (jj_scan_token(BEGIN_T)) return true; + if (jj_3R_192()) return true; + if (jj_scan_token(END_T)) return true; + xsp = jj_scanpos; + if (jj_scan_token(78)) jj_scanpos = xsp; + if (jj_scan_token(PROCESS_T)) return true; + xsp = jj_scanpos; + if (jj_3R_193()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_326() + { + if (jj_done) return true; + if (jj_3R_402()) return true; + return false; + } + + inline bool jj_3R_191() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_326()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_490() + { + if (jj_done) return true; + if (jj_3R_528()) return true; + return false; + } + + inline bool jj_3_68() + { + if (jj_done) return true; + if (jj_3R_66()) return true; + return false; + } + + inline bool jj_3R_489() + { + if (jj_done) return true; + if (jj_3R_478()) return true; + return false; + } + + inline bool jj_3R_488() + { + if (jj_done) return true; + if (jj_3R_525()) return true; + return false; + } + + inline bool jj_3_67() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3R_487() + { + if (jj_done) return true; + if (jj_3R_523()) return true; + return false; + } + + inline bool jj_3R_486() + { + if (jj_done) return true; + if (jj_3R_522()) return true; + return false; + } + + inline bool jj_3R_485() + { + if (jj_done) return true; + if (jj_3R_521()) return true; + return false; + } + + inline bool jj_3R_484() + { + if (jj_done) return true; + if (jj_3R_519()) return true; + return false; + } + + inline bool jj_3R_483() + { + if (jj_done) return true; + if (jj_3R_518()) return true; + return false; + } + + inline bool jj_3R_482() + { + if (jj_done) return true; + if (jj_3R_517()) return true; + return false; + } + + inline bool jj_3R_402() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_481()) { + jj_scanpos = xsp; + if (jj_3R_482()) { + jj_scanpos = xsp; + if (jj_3R_483()) { + jj_scanpos = xsp; + if (jj_3R_484()) { + jj_scanpos = xsp; + if (jj_3R_485()) { + jj_scanpos = xsp; + if (jj_3R_486()) { + jj_scanpos = xsp; + if (jj_3R_487()) { + jj_scanpos = xsp; + if (jj_3_67()) { + jj_scanpos = xsp; + if (jj_3R_488()) { + jj_scanpos = xsp; + if (jj_3R_489()) { + jj_scanpos = xsp; + if (jj_3_68()) { + jj_scanpos = xsp; + if (jj_3R_490()) return true; + } + } + } + } + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_481() + { + if (jj_done) return true; + if (jj_3R_93()) return true; + return false; + } + + inline bool jj_3R_315() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_226()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3_66() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_120() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_66()) jj_scanpos = xsp; + if (jj_3R_177()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_177() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_315()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3_64() + { + if (jj_done) return true; + if (jj_3R_87()) return true; + return false; + } + + inline bool jj_3R_205() + { + if (jj_done) return true; + if (jj_3R_336()) return true; + return false; + } + + inline bool jj_3_65() + { + if (jj_done) return true; + if (jj_3R_108()) return true; + return false; + } + + inline bool jj_3R_204() + { + if (jj_done) return true; + if (jj_3R_87()) return true; + return false; + } + + inline bool jj_3R_203() + { + if (jj_done) return true; + if (jj_3R_335()) return true; + return false; + } + + inline bool jj_3R_202() + { + if (jj_done) return true; + if (jj_3R_334()) return true; + return false; + } + + inline bool jj_3R_94() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_202()) { + jj_scanpos = xsp; + if (jj_3R_203()) { + jj_scanpos = xsp; + if (jj_3R_204()) { + jj_scanpos = xsp; + if (jj_3_65()) { + jj_scanpos = xsp; + if (jj_3R_205()) return true; + } + } + } + } + return false; + } + + inline bool jj_3_63() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3_62() + { + if (jj_done) return true; + if (jj_3R_107()) return true; + return false; + } + + inline bool jj_3R_435() + { + if (jj_done) return true; + if (jj_3R_109()) return true; + return false; + } + + inline bool jj_3_61() + { + if (jj_done) return true; + if (jj_3R_106()) return true; + return false; + } + + inline bool jj_3R_242() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_434() + { + if (jj_done) return true; + if (jj_3R_502()) return true; + return false; + } + + inline bool jj_3_60() + { + if (jj_done) return true; + if (jj_3R_62()) return true; + return false; + } + + inline bool jj_3R_433() + { + if (jj_done) return true; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3_59() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_432() + { + if (jj_done) return true; + if (jj_3R_107()) return true; + return false; + } + + inline bool jj_3_58() + { + if (jj_done) return true; + if (jj_3R_105()) return true; + return false; + } + + inline bool jj_3R_431() + { + if (jj_done) return true; + if (jj_3R_106()) return true; + return false; + } + + inline bool jj_3R_430() + { + if (jj_done) return true; + if (jj_3R_62()) return true; + return false; + } + + inline bool jj_3R_429() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_355() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_428()) { + jj_scanpos = xsp; + if (jj_3R_429()) { + jj_scanpos = xsp; + if (jj_3R_430()) { + jj_scanpos = xsp; + if (jj_3R_431()) { + jj_scanpos = xsp; + if (jj_3R_432()) { + jj_scanpos = xsp; + if (jj_3R_433()) { + jj_scanpos = xsp; + if (jj_3R_434()) { + jj_scanpos = xsp; + if (jj_3R_435()) return true; + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_428() + { + if (jj_done) return true; + if (jj_3R_105()) return true; + return false; + } + + inline bool jj_3R_314() + { + if (jj_done) return true; + if (jj_scan_token(PORT_T)) return true; + if (jj_scan_token(MAP_T)) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_163()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_624() + { + if (jj_done) return true; + if (jj_3R_298()) return true; + return false; + } + + inline bool jj_3R_608() + { + if (jj_done) return true; + if (jj_scan_token(PORT_T)) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_624()) return true; + if (jj_scan_token(RPAREN_T)) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_241() + { + if (jj_done) return true; + if (jj_3R_345()) return true; + return false; + } + + inline bool jj_3R_112() + { + if (jj_done) return true; + if (jj_scan_token(UNITS_T)) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(SEMI_T)) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_241()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(UNITS_T)) return true; + xsp = jj_scanpos; + if (jj_3R_242()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3_57() + { + if (jj_done) return true; + if (jj_3R_104()) return true; + return false; + } + + inline bool jj_3R_222() + { + if (jj_done) return true; + if (jj_3R_104()) return true; + return false; + } + + inline bool jj_3R_103() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_222()) jj_scanpos = xsp; + if (jj_3R_60()) return true; + return false; + } + + inline bool jj_3R_380() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(IN_T)) return true; + if (jj_3R_68()) return true; + return false; + } + + inline bool jj_3_56() + { + if (jj_done) return true; + if (jj_3R_87()) return true; + return false; + } + + inline bool jj_3_54() + { + if (jj_done) return true; + if (jj_3R_65()) return true; + return false; + } + + inline bool jj_3_55() + { + if (jj_done) return true; + if (jj_3R_66()) return true; + return false; + } + + inline bool jj_3R_336() + { + if (jj_done) return true; + if (jj_scan_token(PACKAGE_T)) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3_53() + { + if (jj_done) return true; + if (jj_3R_66()) return true; + return false; + } + + inline bool jj_3R_302() + { + if (jj_done) return true; + if (jj_3R_377()) return true; + return false; + } + + inline bool jj_3R_261() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + + inline bool jj_3R_166() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(49)) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_302()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_295() + { + if (jj_done) return true; + if (jj_scan_token(STRINGLITERAL)) return true; + return false; + } + + inline bool jj_3R_601() + { + if (jj_done) return true; + if (jj_scan_token(TYPE_T)) return true; + return false; + } + + inline bool jj_3R_600() + { + if (jj_done) return true; + if (jj_scan_token(FILE_T)) return true; + return false; + } + + inline bool jj_3R_599() + { + if (jj_done) return true; + if (jj_scan_token(SHARED_T)) return true; + if (jj_scan_token(VARIABLE_T)) return true; + return false; + } + + inline bool jj_3_52() + { + if (jj_done) return true; + if (jj_3R_103()) return true; + return false; + } + + inline bool jj_3R_598() + { + if (jj_done) return true; + if (jj_scan_token(VARIABLE_T)) return true; + return false; + } + + inline bool jj_3R_597() + { + if (jj_done) return true; + if (jj_scan_token(SIGNAL_T)) return true; + return false; + } + + inline bool jj_3R_338() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_596() + { + if (jj_done) return true; + if (jj_scan_token(CONSTANT_T)) return true; + return false; + } + + inline bool jj_3R_557() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_596()) { + jj_scanpos = xsp; + if (jj_3R_597()) { + jj_scanpos = xsp; + if (jj_3R_598()) { + jj_scanpos = xsp; + if (jj_3R_599()) { + jj_scanpos = xsp; + if (jj_3R_600()) { + jj_scanpos = xsp; + if (jj_3R_601()) return true; + } + } + } + } + } + return false; + } + + inline bool jj_3R_207() + { + if (jj_done) return true; + if (jj_3R_104()) return true; + return false; + } + + inline bool jj_3R_206() + { + if (jj_done) return true; + if (jj_3R_103()) return true; + return false; + } + + inline bool jj_3R_96() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_206()) { + jj_scanpos = xsp; + if (jj_3R_207()) return true; + } + return false; + } + + inline bool jj_3R_420() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_348() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_420()) jj_scanpos = xsp; + if (jj_scan_token(NULL_T)) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_102() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_262() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_80()) return true; + return false; + } + + inline bool jj_3_51() + { + if (jj_done) return true; + if (jj_scan_token(LBRACKET_T)) return true; + return false; + } + + inline bool jj_3R_260() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_124() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_260()) jj_scanpos = xsp; + if (jj_scan_token(NEXT_T)) return true; + xsp = jj_scanpos; + if (jj_3R_261()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_262()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_221() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_219() + { + if (jj_done) return true; + if (jj_3R_234()) return true; + return false; + } + + inline bool jj_3_50() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_59()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_102()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + inline bool jj_3R_101() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_219()) jj_scanpos = xsp; + if (jj_scan_token(APOSTROPHE_T)) return true; + if (jj_3R_220()) return true; + xsp = jj_scanpos; + if (jj_3R_221()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3_46() + { + if (jj_done) return true; + if (jj_3R_99()) return true; + return false; + } + + inline bool jj_3_49() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_68()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + + public: TokenManager *token_source; + public: CharStream *jj_input_stream; + /** Current token. */ + public: Token *token; + /** Next token. */ + public: Token *jj_nt; + private: int jj_ntk; + private: JJCalls jj_2_rtns[113]; + private: bool jj_rescan; + private: int jj_gc; + private: Token *jj_scanpos, *jj_lastpos; + private: int jj_la; + /** Whether we are looking ahead. */ + private: bool jj_lookingAhead; + private: bool jj_semLA; + private: int jj_gen; + private: int jj_la1[296]; + private: ErrorHandler *errorHandler; + private: bool errorHandlerCreated; + protected: bool hasError; + public: void setErrorHandler(ErrorHandler *eh) { + if (errorHandlerCreated) delete errorHandler; + errorHandler = eh; + errorHandlerCreated = false; + } + Token *head; + public: + + VhdlParser(TokenManager *tm); + public: virtual ~VhdlParser(); + +void ReInit(TokenManager *tm); + +Token * jj_consume_token(int kind); + +bool jj_scan_token(int kind); + +Token * getNextToken(); + +Token * getToken(int index); + +int jj_ntk_f(); + private: int jj_kind; + int **jj_expentries; + int *jj_expentry; + +void jj_add_error_token(int kind, int pos); + +protected: virtual void parseError(); + private: int trace_indent; + private: bool trace_enabled; + /** Enable tracing. */ + +public: void enable_tracing(); + +public: void disable_tracing(); + +void jj_rescan_token(); + +void jj_save(int index, int xla); +typedef unsigned long long uint64; + + +static Entry* current_root; +static Entry* tempEntry; +static Entry* lastEntity ; +static Entry* lastCompound ; +static Entry* current; +static QCString compSpec; +static QCString currName; +static int levelCounter; +static QCString confName; +static QCString genLabels; +static QCString lab; +static QCString forL; +static int param_sec ; +static int parse_sec; +static int currP; +static Entry* currentCompound; + +//---------------------------------------- + +static void setLineParsed(int tok); +static int getLine(int tok); +static int getLine(); +static void lineCount(const char*); +static void lineCount(); +static void addProto(const char *s1,const char *s2,const char *s3,const char *s4,const char *s5,const char *s6); +static void addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf); +static void createFunction(const char *impure,uint64 spec,const char *fname); +static void addVhdlType(const char *n,int startLine,int section, uint64 spec,const char* args,const char* type,Protection prot); +static void addCompInst(char *n, char* instName, char* comp,int iLine); +static void handleCommentBlock(const char* doc,bool brief); +static void initEntry(Entry *e); +static void newEntry(); +static bool isFuncProcProced(); +static void pushLabel(QCString &,QCString&); +static QCString popLabel(QCString & q); +static bool addLibUseClause(const QCString &type); +static void mapLibPackage( Entry* root); +static void createFlow(); +static void error_skipto(int kind);private: bool jj_done; + +}; +} +} +#endif diff --git a/vhdlparser/VhdlParserConstants.h b/vhdlparser/VhdlParserConstants.h new file mode 100644 index 0000000..1428805 --- /dev/null +++ b/vhdlparser/VhdlParserConstants.h @@ -0,0 +1,944 @@ +/* Generated By:JavaCC: Do not edit this line. VhdlParserConstants.java */ + +/** + * Token literal values and constants. + * Generated by org.javacc.parser.OtherFilesGen#start() + */ +#ifndef VHDLPARSERCONSTANTS_H +#define VHDLPARSERCONSTANTS_H + +namespace vhdl { +namespace parser { + /** End of File. */ +const int _EOF = 0; + /** RegularExpression Id. */ +const int DOXYGEN_VHDL_COMMENT = 5; + /** RegularExpression Id. */ +const int MULT_DOXYGEN_COMMENT = 6; + /** RegularExpression Id. */ +const int VHDL_COMMENT = 7; + /** RegularExpression Id. */ +const int MULT_DOXYGEN_VHDL_COMMENT_2008 = 8; + /** RegularExpression Id. */ +const int MULT_VHDL_2008_COMMENT = 9; + /** RegularExpression Id. */ +const int ABS_T = 10; + /** RegularExpression Id. */ +const int ACCESS_T = 11; + /** RegularExpression Id. */ +const int AFTER_T = 12; + /** RegularExpression Id. */ +const int ALIAS_T = 13; + /** RegularExpression Id. */ +const int ALL_T = 14; + /** RegularExpression Id. */ +const int AND_T = 15; + /** RegularExpression Id. */ +const int ARCHITECTURE_T = 16; + /** RegularExpression Id. */ +const int ARRAY_T = 17; + /** RegularExpression Id. */ +const int ASSERT_T = 18; + /** RegularExpression Id. */ +const int ASSUME_T = 19; + /** RegularExpression Id. */ +const int ASSUME_GUARANTEE_T = 20; + /** RegularExpression Id. */ +const int ATTRIBUTE_T = 21; + /** RegularExpression Id. */ +const int BEGIN_T = 22; + /** RegularExpression Id. */ +const int BLOCK_T = 23; + /** RegularExpression Id. */ +const int BODY_T = 24; + /** RegularExpression Id. */ +const int BUFFER_T = 25; + /** RegularExpression Id. */ +const int BUS_T = 26; + /** RegularExpression Id. */ +const int COMPONENT_T = 27; + /** RegularExpression Id. */ +const int CASE_T = 28; + /** RegularExpression Id. */ +const int CONFIGURATION_T = 29; + /** RegularExpression Id. */ +const int CONSTANT_T = 30; + /** RegularExpression Id. */ +const int CONTEXT_T = 31; + /** RegularExpression Id. */ +const int COVER_T = 32; + /** RegularExpression Id. */ +const int DEFAULT_T = 33; + /** RegularExpression Id. */ +const int DISCONNECT_T = 34; + /** RegularExpression Id. */ +const int DOWNTO_T = 35; + /** RegularExpression Id. */ +const int ELSE_T = 36; + /** RegularExpression Id. */ +const int ELSIF_T = 37; + /** RegularExpression Id. */ +const int END_T = 38; + /** RegularExpression Id. */ +const int ENTITY_T = 39; + /** RegularExpression Id. */ +const int EXIT_T = 40; + /** RegularExpression Id. */ +const int FAIRNESS_T = 41; + /** RegularExpression Id. */ +const int FILE_T = 42; + /** RegularExpression Id. */ +const int FOR_T = 43; + /** RegularExpression Id. */ +const int FORCE_T = 44; + /** RegularExpression Id. */ +const int FUNCTION_T = 45; + /** RegularExpression Id. */ +const int GENERATE_T = 46; + /** RegularExpression Id. */ +const int GENERIC_T = 47; + /** RegularExpression Id. */ +const int GROUP_T = 48; + /** RegularExpression Id. */ +const int GUARDED_T = 49; + /** RegularExpression Id. */ +const int IF_T = 50; + /** RegularExpression Id. */ +const int IMPURE_T = 51; + /** RegularExpression Id. */ +const int IN_T = 52; + /** RegularExpression Id. */ +const int INERTIAL_T = 53; + /** RegularExpression Id. */ +const int INOUT_T = 54; + /** RegularExpression Id. */ +const int IS_T = 55; + /** RegularExpression Id. */ +const int LABEL_T = 56; + /** RegularExpression Id. */ +const int LIBRARY_T = 57; + /** RegularExpression Id. */ +const int LINKAGE_T = 58; + /** RegularExpression Id. */ +const int LITERAL_T = 59; + /** RegularExpression Id. */ +const int LOOP_T = 60; + /** RegularExpression Id. */ +const int MAP_T = 61; + /** RegularExpression Id. */ +const int MOD_T = 62; + /** RegularExpression Id. */ +const int NAND_T = 63; + /** RegularExpression Id. */ +const int NEW_T = 64; + /** RegularExpression Id. */ +const int NEXT_T = 65; + /** RegularExpression Id. */ +const int NOR_T = 66; + /** RegularExpression Id. */ +const int NOT_T = 67; + /** RegularExpression Id. */ +const int NULL_T = 68; + /** RegularExpression Id. */ +const int OF_T = 69; + /** RegularExpression Id. */ +const int ON_T = 70; + /** RegularExpression Id. */ +const int OPEN_T = 71; + /** RegularExpression Id. */ +const int OR_T = 72; + /** RegularExpression Id. */ +const int OTHER_T = 73; + /** RegularExpression Id. */ +const int OUT_T = 74; + /** RegularExpression Id. */ +const int PACKAGE_T = 75; + /** RegularExpression Id. */ +const int PARAMETER_T = 76; + /** RegularExpression Id. */ +const int PORT_T = 77; + /** RegularExpression Id. */ +const int POSTPONED_T = 78; + /** RegularExpression Id. */ +const int PROCEDURE_T = 79; + /** RegularExpression Id. */ +const int PROCESS_T = 80; + /** RegularExpression Id. */ +const int PROPERTY_T = 81; + /** RegularExpression Id. */ +const int PROTECTED_T = 82; + /** RegularExpression Id. */ +const int PURE_T = 83; + /** RegularExpression Id. */ +const int RANGE_T = 84; + /** RegularExpression Id. */ +const int RECORD_T = 85; + /** RegularExpression Id. */ +const int REGISTER_T = 86; + /** RegularExpression Id. */ +const int REJECT_T = 87; + /** RegularExpression Id. */ +const int RELEASE_T = 88; + /** RegularExpression Id. */ +const int RESTRICT_T = 89; + /** RegularExpression Id. */ +const int RESTRICT_GUARANTEE_T = 90; + /** RegularExpression Id. */ +const int REM_T = 91; + /** RegularExpression Id. */ +const int REPORT_T = 92; + /** RegularExpression Id. */ +const int ROL_T = 93; + /** RegularExpression Id. */ +const int ROR_T = 94; + /** RegularExpression Id. */ +const int RETURN_T = 95; + /** RegularExpression Id. */ +const int SELECT_T = 96; + /** RegularExpression Id. */ +const int SEQUENCE_T = 97; + /** RegularExpression Id. */ +const int SEVERITY_T = 98; + /** RegularExpression Id. */ +const int SIGNAL_T = 99; + /** RegularExpression Id. */ +const int SHARED_T = 100; + /** RegularExpression Id. */ +const int SLA_T = 101; + /** RegularExpression Id. */ +const int SLL_T = 102; + /** RegularExpression Id. */ +const int SRA_T = 103; + /** RegularExpression Id. */ +const int SRL_T = 104; + /** RegularExpression Id. */ +const int STRONG_T = 105; + /** RegularExpression Id. */ +const int SUBTYPE_T = 106; + /** RegularExpression Id. */ +const int THEN_T = 107; + /** RegularExpression Id. */ +const int TO_T = 108; + /** RegularExpression Id. */ +const int TRANSPORT_T = 109; + /** RegularExpression Id. */ +const int TYPE_T = 110; + /** RegularExpression Id. */ +const int UNAFFECTED_T = 111; + /** RegularExpression Id. */ +const int UNITS_T = 112; + /** RegularExpression Id. */ +const int UNTIL_T = 113; + /** RegularExpression Id. */ +const int USE_T = 114; + /** RegularExpression Id. */ +const int VARIABLE_T = 115; + /** RegularExpression Id. */ +const int VMODE_T = 116; + /** RegularExpression Id. */ +const int VPROP_T = 117; + /** RegularExpression Id. */ +const int VUNIT_T = 118; + /** RegularExpression Id. */ +const int WAIT_T = 119; + /** RegularExpression Id. */ +const int WHEN_T = 120; + /** RegularExpression Id. */ +const int WHILE_T = 121; + /** RegularExpression Id. */ +const int WITH_T = 122; + /** RegularExpression Id. */ +const int XOR_T = 123; + /** RegularExpression Id. */ +const int XNOR_T = 124; + /** RegularExpression Id. */ +const int AMPERSAND_T = 125; + /** RegularExpression Id. */ +const int APOSTROPHE_T = 126; + /** RegularExpression Id. */ +const int LPAREN_T = 127; + /** RegularExpression Id. */ +const int RPAREN_T = 128; + /** RegularExpression Id. */ +const int DOUBLEMULT_T = 129; + /** RegularExpression Id. */ +const int MULT_T = 130; + /** RegularExpression Id. */ +const int PLUS_T = 131; + /** RegularExpression Id. */ +const int MINUS_T = 132; + /** RegularExpression Id. */ +const int COMMA_T = 133; + /** RegularExpression Id. */ +const int VARASSIGN_T = 134; + /** RegularExpression Id. */ +const int COLON_T = 135; + /** RegularExpression Id. */ +const int SEMI_T = 136; + /** RegularExpression Id. */ +const int LESSTHAN_T = 137; + /** RegularExpression Id. */ +const int GREATERTHAN_T = 138; + /** RegularExpression Id. */ +const int LT_T = 139; + /** RegularExpression Id. */ +const int GT_T = 140; + /** RegularExpression Id. */ +const int EQU_T = 141; + /** RegularExpression Id. */ +const int NOTEQU_T = 142; + /** RegularExpression Id. */ +const int ARROW_T = 143; + /** RegularExpression Id. */ +const int BOX_T = 144; + /** RegularExpression Id. */ +const int SLSL_T = 145; + /** RegularExpression Id. */ +const int RSRS_T = 146; + /** RegularExpression Id. */ +const int QQ_T = 147; + /** RegularExpression Id. */ +const int QGT_T = 148; + /** RegularExpression Id. */ +const int QLT_T = 149; + /** RegularExpression Id. */ +const int QG_T = 150; + /** RegularExpression Id. */ +const int QL_T = 151; + /** RegularExpression Id. */ +const int QEQU_T = 152; + /** RegularExpression Id. */ +const int QNEQU_T = 153; + /** RegularExpression Id. */ +const int Q_T = 154; + /** RegularExpression Id. */ +const int BAR_T = 155; + /** RegularExpression Id. */ +const int DOT_T = 156; + /** RegularExpression Id. */ +const int SLASH_T = 157; + /** RegularExpression Id. */ +const int AT_T = 158; + /** RegularExpression Id. */ +const int NEG_T = 159; + /** RegularExpression Id. */ +const int LBRACKET_T = 160; + /** RegularExpression Id. */ +const int RBRACKET_T = 161; + /** RegularExpression Id. */ +const int LBRACE = 162; + /** RegularExpression Id. */ +const int RBRACE = 163; + /** RegularExpression Id. */ +const int INTEGER = 164; + /** RegularExpression Id. */ +const int STRINGLITERAL = 165; + /** RegularExpression Id. */ +const int BASIC_IDENTIFIER = 166; + /** RegularExpression Id. */ +const int EXTENDED_CHARACTER = 167; + /** RegularExpression Id. */ +const int CHARACTER_LITERAL = 168; + /** RegularExpression Id. */ +const int DECIMAL_LITERAL = 169; + /** RegularExpression Id. */ +const int BASED_INTEGER = 170; + /** RegularExpression Id. */ +const int BASED_LITERAL = 171; + /** RegularExpression Id. */ +const int EXPONENT = 172; + /** RegularExpression Id. */ +const int BASIC_GRAPHIC_CHARACTER = 173; + /** RegularExpression Id. */ +const int GRAPHIC_CHARACTER = 174; + /** RegularExpression Id. */ +const int LETTER_OR_DIGIT = 175; + /** RegularExpression Id. */ +const int LETTER = 176; + /** RegularExpression Id. */ +const int UPPER_CASE_LETTER = 177; + /** RegularExpression Id. */ +const int BIT_STRING_LITERAL = 178; + /** RegularExpression Id. */ +const int BASE_SPECIFIER = 179; + /** RegularExpression Id. */ +const int DIGIT = 180; + /** RegularExpression Id. */ +const int SPECIAL_CHARACTER = 181; + /** RegularExpression Id. */ +const int OTHER_SPECIAL_CHARACTER = 182; + /** RegularExpression Id. */ +const int SPACE_CHARACTER = 183; + /** RegularExpression Id. */ +const int LOWER_CASE_LETTER = 184; + /** RegularExpression Id. */ +const int VHDL2008TOOLDIR = 185; + + /** Lexical state. */ +const int DEFAULT = 0; + + /** Literal token values. */ + static JAVACC_CHAR_TYPE tokenImage_arr_0[] = +{0x3c, 0x45, 0x4f, 0x46, 0x3e, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_1[] = +{0x22, 0x20, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_2[] = +{0x22, 0x9, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_3[] = +{0x22, 0xa, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_4[] = +{0x22, 0xd, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_5[] = +{0x22, 0x3c, 0x44, 0x4f, 0x58, 0x59, 0x47, 0x45, 0x4e, 0x5f, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_6[] = +{0x22, 0x3c, 0x4d, 0x55, 0x4c, 0x54, 0x5f, 0x44, 0x4f, 0x58, 0x59, 0x47, 0x45, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_7[] = +{0x22, 0x3c, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_8[] = +{0x22, 0x3c, 0x4d, 0x55, 0x4c, 0x54, 0x5f, 0x44, 0x4f, 0x58, 0x59, 0x47, 0x45, 0x4e, 0x5f, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x32, 0x30, 0x30, 0x38, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_9[] = +{0x22, 0x3c, 0x4d, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x32, 0x30, 0x30, 0x38, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_10[] = +{0x22, 0x61, 0x62, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_11[] = +{0x22, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_12[] = +{0x22, 0x61, 0x66, 0x74, 0x65, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_13[] = +{0x22, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_14[] = +{0x22, 0x61, 0x6c, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_15[] = +{0x22, 0x61, 0x6e, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_16[] = +{0x22, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_17[] = +{0x22, 0x61, 0x72, 0x72, 0x61, 0x79, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_18[] = +{0x22, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_19[] = +{0x22, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_20[] = +{0x22, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x67, 0x75, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_21[] = +{0x22, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_22[] = +{0x22, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_23[] = +{0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_24[] = +{0x22, 0x62, 0x6f, 0x64, 0x79, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_25[] = +{0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_26[] = +{0x22, 0x62, 0x75, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_27[] = +{0x22, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_28[] = +{0x22, 0x63, 0x61, 0x73, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_29[] = +{0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_30[] = +{0x22, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_31[] = +{0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_32[] = +{0x22, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_33[] = +{0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_34[] = +{0x22, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_35[] = +{0x22, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x6f, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_36[] = +{0x22, 0x65, 0x6c, 0x73, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_37[] = +{0x22, 0x65, 0x6c, 0x73, 0x69, 0x66, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_38[] = +{0x22, 0x65, 0x6e, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_39[] = +{0x22, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_40[] = +{0x22, 0x65, 0x78, 0x69, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_41[] = +{0x22, 0x66, 0x61, 0x69, 0x72, 0x6e, 0x65, 0x73, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_42[] = +{0x22, 0x66, 0x69, 0x6c, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_43[] = +{0x22, 0x66, 0x6f, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_44[] = +{0x22, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_45[] = +{0x22, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_46[] = +{0x22, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_47[] = +{0x22, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_48[] = +{0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_49[] = +{0x22, 0x67, 0x75, 0x61, 0x72, 0x64, 0x65, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_50[] = +{0x22, 0x69, 0x66, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_51[] = +{0x22, 0x69, 0x6d, 0x70, 0x75, 0x72, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_52[] = +{0x22, 0x69, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_53[] = +{0x22, 0x69, 0x6e, 0x65, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_54[] = +{0x22, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_55[] = +{0x22, 0x69, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_56[] = +{0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_57[] = +{0x22, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_58[] = +{0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_59[] = +{0x22, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_60[] = +{0x22, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_61[] = +{0x22, 0x6d, 0x61, 0x70, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_62[] = +{0x22, 0x6d, 0x6f, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_63[] = +{0x22, 0x6e, 0x61, 0x6e, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_64[] = +{0x22, 0x6e, 0x65, 0x77, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_65[] = +{0x22, 0x6e, 0x65, 0x78, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_66[] = +{0x22, 0x6e, 0x6f, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_67[] = +{0x22, 0x6e, 0x6f, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_68[] = +{0x22, 0x6e, 0x75, 0x6c, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_69[] = +{0x22, 0x6f, 0x66, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_70[] = +{0x22, 0x6f, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_71[] = +{0x22, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_72[] = +{0x22, 0x6f, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_73[] = +{0x22, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_74[] = +{0x22, 0x6f, 0x75, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_75[] = +{0x22, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_76[] = +{0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_77[] = +{0x22, 0x70, 0x6f, 0x72, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_78[] = +{0x22, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_79[] = +{0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_80[] = +{0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_81[] = +{0x22, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_82[] = +{0x22, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_83[] = +{0x22, 0x70, 0x75, 0x72, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_84[] = +{0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_85[] = +{0x22, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_86[] = +{0x22, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_87[] = +{0x22, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_88[] = +{0x22, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_89[] = +{0x22, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_90[] = +{0x22, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_91[] = +{0x22, 0x72, 0x65, 0x6d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_92[] = +{0x22, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_93[] = +{0x22, 0x72, 0x6f, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_94[] = +{0x22, 0x72, 0x6f, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_95[] = +{0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_96[] = +{0x22, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_97[] = +{0x22, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_98[] = +{0x22, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_99[] = +{0x22, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_100[] = +{0x22, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_101[] = +{0x22, 0x73, 0x6c, 0x61, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_102[] = +{0x22, 0x73, 0x6c, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_103[] = +{0x22, 0x73, 0x72, 0x61, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_104[] = +{0x22, 0x73, 0x72, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_105[] = +{0x22, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_106[] = +{0x22, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_107[] = +{0x22, 0x74, 0x68, 0x65, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_108[] = +{0x22, 0x74, 0x6f, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_109[] = +{0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_110[] = +{0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_111[] = +{0x22, 0x75, 0x6e, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_112[] = +{0x22, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_113[] = +{0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_114[] = +{0x22, 0x75, 0x73, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_115[] = +{0x22, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_116[] = +{0x22, 0x76, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_117[] = +{0x22, 0x76, 0x70, 0x72, 0x6f, 0x70, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_118[] = +{0x22, 0x76, 0x75, 0x6e, 0x69, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_119[] = +{0x22, 0x77, 0x61, 0x69, 0x74, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_120[] = +{0x22, 0x77, 0x68, 0x65, 0x6e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_121[] = +{0x22, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_122[] = +{0x22, 0x77, 0x69, 0x74, 0x68, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_123[] = +{0x22, 0x78, 0x6f, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_124[] = +{0x22, 0x78, 0x6e, 0x6f, 0x72, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_125[] = +{0x22, 0x26, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_126[] = +{0x22, 0x27, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_127[] = +{0x22, 0x28, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_128[] = +{0x22, 0x29, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_129[] = +{0x22, 0x2a, 0x2a, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_130[] = +{0x22, 0x2a, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_131[] = +{0x22, 0x2b, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_132[] = +{0x22, 0x2d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_133[] = +{0x22, 0x2c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_134[] = +{0x22, 0x3a, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_135[] = +{0x22, 0x3a, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_136[] = +{0x22, 0x3b, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_137[] = +{0x22, 0x3c, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_138[] = +{0x22, 0x3e, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_139[] = +{0x22, 0x3c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_140[] = +{0x22, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_141[] = +{0x22, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_142[] = +{0x22, 0x2f, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_143[] = +{0x22, 0x3d, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_144[] = +{0x22, 0x3c, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_145[] = +{0x22, 0x3c, 0x3c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_146[] = +{0x22, 0x3e, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_147[] = +{0x22, 0x3f, 0x3f, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_148[] = +{0x22, 0x3f, 0x3e, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_149[] = +{0x22, 0x3f, 0x3c, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_150[] = +{0x22, 0x3f, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_151[] = +{0x22, 0x3f, 0x3c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_152[] = +{0x22, 0x3f, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_153[] = +{0x22, 0x3f, 0x2f, 0x3d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_154[] = +{0x22, 0x3f, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_155[] = +{0x22, 0x7c, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_156[] = +{0x22, 0x2e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_157[] = +{0x22, 0x2f, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_158[] = +{0x22, 0x40, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_159[] = +{0x22, 0x5e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_160[] = +{0x22, 0x5b, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_161[] = +{0x22, 0x5d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_162[] = +{0x22, 0x7b, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_163[] = +{0x22, 0x7d, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_164[] = +{0x22, 0x3c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_165[] = +{0x22, 0x3c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_166[] = +{0x22, 0x3c, 0x42, 0x41, 0x53, 0x49, 0x43, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_167[] = +{0x22, 0x3c, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_168[] = +{0x22, 0x3c, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_169[] = +{0x22, 0x3c, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_170[] = +{0x22, 0x3c, 0x42, 0x41, 0x53, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_171[] = +{0x22, 0x3c, 0x42, 0x41, 0x53, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_172[] = +{0x22, 0x3c, 0x45, 0x58, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_173[] = +{0x22, 0x3c, 0x42, 0x41, 0x53, 0x49, 0x43, 0x5f, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_174[] = +{0x22, 0x3c, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_175[] = +{0x22, 0x3c, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x5f, 0x4f, 0x52, 0x5f, 0x44, 0x49, 0x47, 0x49, 0x54, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_176[] = +{0x22, 0x3c, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_177[] = +{0x22, 0x3c, 0x55, 0x50, 0x50, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_178[] = +{0x22, 0x3c, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_179[] = +{0x22, 0x3c, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_180[] = +{0x22, 0x3c, 0x44, 0x49, 0x47, 0x49, 0x54, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_181[] = +{0x22, 0x3c, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_182[] = +{0x22, 0x3c, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_183[] = +{0x22, 0x3c, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_184[] = +{0x22, 0x3c, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x3e, 0x22, 0}; + static JAVACC_CHAR_TYPE tokenImage_arr_185[] = +{0x22, 0x3c, 0x56, 0x48, 0x44, 0x4c, 0x32, 0x30, 0x30, 0x38, 0x54, 0x4f, 0x4f, 0x4c, 0x44, 0x49, 0x52, 0x3e, 0x22, 0}; + static JAVACC_STRING_TYPE tokenImage[] = { +tokenImage_arr_0, +tokenImage_arr_1, +tokenImage_arr_2, +tokenImage_arr_3, +tokenImage_arr_4, +tokenImage_arr_5, +tokenImage_arr_6, +tokenImage_arr_7, +tokenImage_arr_8, +tokenImage_arr_9, +tokenImage_arr_10, +tokenImage_arr_11, +tokenImage_arr_12, +tokenImage_arr_13, +tokenImage_arr_14, +tokenImage_arr_15, +tokenImage_arr_16, +tokenImage_arr_17, +tokenImage_arr_18, +tokenImage_arr_19, +tokenImage_arr_20, +tokenImage_arr_21, +tokenImage_arr_22, +tokenImage_arr_23, +tokenImage_arr_24, +tokenImage_arr_25, +tokenImage_arr_26, +tokenImage_arr_27, +tokenImage_arr_28, +tokenImage_arr_29, +tokenImage_arr_30, +tokenImage_arr_31, +tokenImage_arr_32, +tokenImage_arr_33, +tokenImage_arr_34, +tokenImage_arr_35, +tokenImage_arr_36, +tokenImage_arr_37, +tokenImage_arr_38, +tokenImage_arr_39, +tokenImage_arr_40, +tokenImage_arr_41, +tokenImage_arr_42, +tokenImage_arr_43, +tokenImage_arr_44, +tokenImage_arr_45, +tokenImage_arr_46, +tokenImage_arr_47, +tokenImage_arr_48, +tokenImage_arr_49, +tokenImage_arr_50, +tokenImage_arr_51, +tokenImage_arr_52, +tokenImage_arr_53, +tokenImage_arr_54, +tokenImage_arr_55, +tokenImage_arr_56, +tokenImage_arr_57, +tokenImage_arr_58, +tokenImage_arr_59, +tokenImage_arr_60, +tokenImage_arr_61, +tokenImage_arr_62, +tokenImage_arr_63, +tokenImage_arr_64, +tokenImage_arr_65, +tokenImage_arr_66, +tokenImage_arr_67, +tokenImage_arr_68, +tokenImage_arr_69, +tokenImage_arr_70, +tokenImage_arr_71, +tokenImage_arr_72, +tokenImage_arr_73, +tokenImage_arr_74, +tokenImage_arr_75, +tokenImage_arr_76, +tokenImage_arr_77, +tokenImage_arr_78, +tokenImage_arr_79, +tokenImage_arr_80, +tokenImage_arr_81, +tokenImage_arr_82, +tokenImage_arr_83, +tokenImage_arr_84, +tokenImage_arr_85, +tokenImage_arr_86, +tokenImage_arr_87, +tokenImage_arr_88, +tokenImage_arr_89, +tokenImage_arr_90, +tokenImage_arr_91, +tokenImage_arr_92, +tokenImage_arr_93, +tokenImage_arr_94, +tokenImage_arr_95, +tokenImage_arr_96, +tokenImage_arr_97, +tokenImage_arr_98, +tokenImage_arr_99, +tokenImage_arr_100, +tokenImage_arr_101, +tokenImage_arr_102, +tokenImage_arr_103, +tokenImage_arr_104, +tokenImage_arr_105, +tokenImage_arr_106, +tokenImage_arr_107, +tokenImage_arr_108, +tokenImage_arr_109, +tokenImage_arr_110, +tokenImage_arr_111, +tokenImage_arr_112, +tokenImage_arr_113, +tokenImage_arr_114, +tokenImage_arr_115, +tokenImage_arr_116, +tokenImage_arr_117, +tokenImage_arr_118, +tokenImage_arr_119, +tokenImage_arr_120, +tokenImage_arr_121, +tokenImage_arr_122, +tokenImage_arr_123, +tokenImage_arr_124, +tokenImage_arr_125, +tokenImage_arr_126, +tokenImage_arr_127, +tokenImage_arr_128, +tokenImage_arr_129, +tokenImage_arr_130, +tokenImage_arr_131, +tokenImage_arr_132, +tokenImage_arr_133, +tokenImage_arr_134, +tokenImage_arr_135, +tokenImage_arr_136, +tokenImage_arr_137, +tokenImage_arr_138, +tokenImage_arr_139, +tokenImage_arr_140, +tokenImage_arr_141, +tokenImage_arr_142, +tokenImage_arr_143, +tokenImage_arr_144, +tokenImage_arr_145, +tokenImage_arr_146, +tokenImage_arr_147, +tokenImage_arr_148, +tokenImage_arr_149, +tokenImage_arr_150, +tokenImage_arr_151, +tokenImage_arr_152, +tokenImage_arr_153, +tokenImage_arr_154, +tokenImage_arr_155, +tokenImage_arr_156, +tokenImage_arr_157, +tokenImage_arr_158, +tokenImage_arr_159, +tokenImage_arr_160, +tokenImage_arr_161, +tokenImage_arr_162, +tokenImage_arr_163, +tokenImage_arr_164, +tokenImage_arr_165, +tokenImage_arr_166, +tokenImage_arr_167, +tokenImage_arr_168, +tokenImage_arr_169, +tokenImage_arr_170, +tokenImage_arr_171, +tokenImage_arr_172, +tokenImage_arr_173, +tokenImage_arr_174, +tokenImage_arr_175, +tokenImage_arr_176, +tokenImage_arr_177, +tokenImage_arr_178, +tokenImage_arr_179, +tokenImage_arr_180, +tokenImage_arr_181, +tokenImage_arr_182, +tokenImage_arr_183, +tokenImage_arr_184, +tokenImage_arr_185, + }; + +} +} +#endif diff --git a/vhdlparser/VhdlParserErrorHandler.hpp b/vhdlparser/VhdlParserErrorHandler.hpp new file mode 100644 index 0000000..ba9a260 --- /dev/null +++ b/vhdlparser/VhdlParserErrorHandler.hpp @@ -0,0 +1,39 @@ +#ifndef VHDLPARSERERRORHANDLER_H +#define VHDLPARSERERRORHANDLER_H + +#include +#include +#include +#include "VhdlParser.h" +#include "ErrorHandler.h" + +namespace vhdl { namespace parser { + +class VhdlErrorHandler: public ErrorHandler + { + virtual void handleUnexpectedToken(int expectedKind, JAVACC_STRING_TYPE expectedToken, Token *actual, VhdlParser *parser) + { + fprintf(stderr,"\n\n syntax error at line: %d : %s\n", actual->beginLine,actual->image.data()); + error_count++; + throw std::exception(); + } + + virtual void handleParseError(Token *last, Token *unexpected, JAVACC_SIMPLE_STRING production, VhdlParser *parser) + { + fprintf(stderr,"\n\n unexpected token at line: %d %s\n", last->beginLine,unexpected->image.data()); + error_count++; + throw std::exception(); + } + + virtual void handleOtherError(JAVACC_STRING_TYPE message, VhdlParser *parser) + { + fprintf(stderr, "\n\n unexpected error: %s\n", (char*)message.c_str()); + error_count++; + throw std::exception(); + } + }; +} +} + +#endif + diff --git a/vhdlparser/VhdlParserIF.cpp b/vhdlparser/VhdlParserIF.cpp new file mode 100644 index 0000000..1369b73 --- /dev/null +++ b/vhdlparser/VhdlParserIF.cpp @@ -0,0 +1,56 @@ + +#include "VhdlParserTokenManager.h" +#include "VhdlParserErrorHandler.hpp" +#include "VhdlParser.h" +#include "VhdlParserIF.h" +#include "CharStream.h" + +using namespace vhdl::parser; + +static VhdlParser * myParser; + +void VhdlParserIF::parseVhdlfile(const char* inputBuffer,bool inLine) +{ + JAVACC_STRING_TYPE s =inputBuffer; + CharStream *stream = new CharStream(s.c_str(), (int)s.size(), 1, 1); + VhdlParserTokenManager *tokenManager = new VhdlParserTokenManager(stream); + myParser=new VhdlParser(tokenManager); + VhdlErrorHandler *myErr=new VhdlErrorHandler(); + myParser->setErrorHandler(myErr); + try + { + if(inLine) + { + myParser->parseInline(); + } + else + { + myParser->design_file(); + } + } + catch( std::exception &) + { + /* fprintf(stderr,"\n[%s]",e.what()); */ + } + // fprintf(stderr,"\n\nparsed lines: %d\n",yyLineNr); + // fprintf(stderr,"\n\nerrors : %d\n\n",myErr->getErrorCount()); + delete myParser; +} + +void VhdlParser::error_skipto(int kind) +{ + Token *op; + do + { + op=myParser->getToken(1); + if (op==0) break; + //fprintf(stderr,"\n %s",t->image.data()); + } while (op->kind != kind); + myParser->hasError=false; + // The above loop consumes tokens all the way up to a token of + // "kind". We use a do-while loop rather than a while because the + // current token is the one immediately before the erroneous token + // (in our case the token immediately before what should have been + // "if"/"while". + +} diff --git a/vhdlparser/VhdlParserIF.h b/vhdlparser/VhdlParserIF.h new file mode 100644 index 0000000..d11389b --- /dev/null +++ b/vhdlparser/VhdlParserIF.h @@ -0,0 +1,12 @@ +#ifndef VHDLPARSERIF +#define VHDLPARSERIF + +#include "VhdlParser.h" + +class VhdlParserIF +{ + public: + static void parseVhdlfile(const char* inputBuffer,bool inLine); + +}; +#endif diff --git a/vhdlparser/VhdlParserTokenManager.cc b/vhdlparser/VhdlParserTokenManager.cc new file mode 100644 index 0000000..58f525c --- /dev/null +++ b/vhdlparser/VhdlParserTokenManager.cc @@ -0,0 +1,3497 @@ +/* VhdlParserTokenManager.cc */ +#include "./VhdlParserTokenManager.h" +namespace vhdl { +namespace parser { +static const unsigned long long jjbitVec0[] = { + 0x0ULL, 0x0ULL, 0xffffffff00000000ULL, 0xffffffffffffffffULL +}; +static const unsigned long long jjbitVec1[] = { + 0xfffffffffffffffeULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL +}; +static const unsigned long long jjbitVec3[] = { + 0x0ULL, 0x0ULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL +}; +static const int jjnextStates[] = { + 43, 44, 45, 46, 47, 50, 54, 55, 56, 37, 38, 4, 5, 7, 8, 22, + 23, 24, 26, 28, 29, 31, 45, 46, 47, 50, 49, 48, 50, 54, 55, 56, + 57, 58, 60, 1, 2, 15, 16, 34, 36, 39, 41, +}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_0[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_1[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_2[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_3[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_4[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_5[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_6[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_7[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_8[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_9[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_10[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_11[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_12[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_13[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_14[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_15[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_16[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_17[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_18[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_19[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_20[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_21[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_22[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_23[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_24[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_25[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_26[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_27[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_28[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_29[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_30[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_31[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_32[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_33[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_34[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_35[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_36[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_37[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_38[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_39[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_40[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_41[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_42[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_43[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_44[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_45[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_46[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_47[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_48[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_49[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_50[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_51[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_52[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_53[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_54[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_55[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_56[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_57[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_58[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_59[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_60[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_61[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_62[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_63[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_64[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_65[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_66[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_67[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_68[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_69[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_70[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_71[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_72[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_73[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_74[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_75[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_76[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_77[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_78[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_79[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_80[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_81[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_82[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_83[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_84[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_85[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_86[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_87[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_88[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_89[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_90[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_91[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_92[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_93[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_94[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_95[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_96[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_97[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_98[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_99[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_100[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_101[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_102[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_103[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_104[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_105[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_106[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_107[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_108[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_109[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_110[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_111[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_112[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_113[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_114[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_115[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_116[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_117[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_118[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_119[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_120[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_121[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_122[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_123[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_124[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_125[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_126[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_127[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_128[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_129[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_130[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_131[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_132[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_133[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_134[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_135[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_136[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_137[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_138[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_139[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_140[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_141[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_142[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_143[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_144[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_145[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_146[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_147[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_148[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_149[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_150[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_151[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_152[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_153[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_154[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_155[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_156[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_157[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_158[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_159[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_160[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_161[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_162[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_163[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_164[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_165[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_166[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_167[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_168[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_169[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_170[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_171[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_172[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_173[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_174[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_175[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_176[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_177[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_178[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_179[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_180[] = {0}; + +static JAVACC_CHAR_TYPE jjstrLiteralChars_181[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_182[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_183[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_184[] = {0}; +static JAVACC_CHAR_TYPE jjstrLiteralChars_185[] = {0}; +static const JAVACC_STRING_TYPE jjstrLiteralImages[] = { +jjstrLiteralChars_0, +jjstrLiteralChars_1, +jjstrLiteralChars_2, +jjstrLiteralChars_3, +jjstrLiteralChars_4, +jjstrLiteralChars_5, +jjstrLiteralChars_6, +jjstrLiteralChars_7, +jjstrLiteralChars_8, +jjstrLiteralChars_9, +jjstrLiteralChars_10, +jjstrLiteralChars_11, +jjstrLiteralChars_12, +jjstrLiteralChars_13, +jjstrLiteralChars_14, +jjstrLiteralChars_15, +jjstrLiteralChars_16, +jjstrLiteralChars_17, +jjstrLiteralChars_18, +jjstrLiteralChars_19, +jjstrLiteralChars_20, +jjstrLiteralChars_21, +jjstrLiteralChars_22, +jjstrLiteralChars_23, +jjstrLiteralChars_24, +jjstrLiteralChars_25, +jjstrLiteralChars_26, +jjstrLiteralChars_27, +jjstrLiteralChars_28, +jjstrLiteralChars_29, +jjstrLiteralChars_30, +jjstrLiteralChars_31, +jjstrLiteralChars_32, +jjstrLiteralChars_33, +jjstrLiteralChars_34, +jjstrLiteralChars_35, +jjstrLiteralChars_36, +jjstrLiteralChars_37, +jjstrLiteralChars_38, +jjstrLiteralChars_39, +jjstrLiteralChars_40, +jjstrLiteralChars_41, +jjstrLiteralChars_42, +jjstrLiteralChars_43, +jjstrLiteralChars_44, +jjstrLiteralChars_45, +jjstrLiteralChars_46, +jjstrLiteralChars_47, +jjstrLiteralChars_48, +jjstrLiteralChars_49, +jjstrLiteralChars_50, +jjstrLiteralChars_51, +jjstrLiteralChars_52, +jjstrLiteralChars_53, +jjstrLiteralChars_54, +jjstrLiteralChars_55, +jjstrLiteralChars_56, +jjstrLiteralChars_57, +jjstrLiteralChars_58, +jjstrLiteralChars_59, +jjstrLiteralChars_60, +jjstrLiteralChars_61, +jjstrLiteralChars_62, +jjstrLiteralChars_63, +jjstrLiteralChars_64, +jjstrLiteralChars_65, +jjstrLiteralChars_66, +jjstrLiteralChars_67, +jjstrLiteralChars_68, +jjstrLiteralChars_69, +jjstrLiteralChars_70, +jjstrLiteralChars_71, +jjstrLiteralChars_72, +jjstrLiteralChars_73, +jjstrLiteralChars_74, +jjstrLiteralChars_75, +jjstrLiteralChars_76, +jjstrLiteralChars_77, +jjstrLiteralChars_78, +jjstrLiteralChars_79, +jjstrLiteralChars_80, +jjstrLiteralChars_81, +jjstrLiteralChars_82, +jjstrLiteralChars_83, +jjstrLiteralChars_84, +jjstrLiteralChars_85, +jjstrLiteralChars_86, +jjstrLiteralChars_87, +jjstrLiteralChars_88, +jjstrLiteralChars_89, +jjstrLiteralChars_90, +jjstrLiteralChars_91, +jjstrLiteralChars_92, +jjstrLiteralChars_93, +jjstrLiteralChars_94, +jjstrLiteralChars_95, +jjstrLiteralChars_96, +jjstrLiteralChars_97, +jjstrLiteralChars_98, +jjstrLiteralChars_99, +jjstrLiteralChars_100, +jjstrLiteralChars_101, +jjstrLiteralChars_102, +jjstrLiteralChars_103, +jjstrLiteralChars_104, +jjstrLiteralChars_105, +jjstrLiteralChars_106, +jjstrLiteralChars_107, +jjstrLiteralChars_108, +jjstrLiteralChars_109, +jjstrLiteralChars_110, +jjstrLiteralChars_111, +jjstrLiteralChars_112, +jjstrLiteralChars_113, +jjstrLiteralChars_114, +jjstrLiteralChars_115, +jjstrLiteralChars_116, +jjstrLiteralChars_117, +jjstrLiteralChars_118, +jjstrLiteralChars_119, +jjstrLiteralChars_120, +jjstrLiteralChars_121, +jjstrLiteralChars_122, +jjstrLiteralChars_123, +jjstrLiteralChars_124, +jjstrLiteralChars_125, +jjstrLiteralChars_126, +jjstrLiteralChars_127, +jjstrLiteralChars_128, +jjstrLiteralChars_129, +jjstrLiteralChars_130, +jjstrLiteralChars_131, +jjstrLiteralChars_132, +jjstrLiteralChars_133, +jjstrLiteralChars_134, +jjstrLiteralChars_135, +jjstrLiteralChars_136, +jjstrLiteralChars_137, +jjstrLiteralChars_138, +jjstrLiteralChars_139, +jjstrLiteralChars_140, +jjstrLiteralChars_141, +jjstrLiteralChars_142, +jjstrLiteralChars_143, +jjstrLiteralChars_144, +jjstrLiteralChars_145, +jjstrLiteralChars_146, +jjstrLiteralChars_147, +jjstrLiteralChars_148, +jjstrLiteralChars_149, +jjstrLiteralChars_150, +jjstrLiteralChars_151, +jjstrLiteralChars_152, +jjstrLiteralChars_153, +jjstrLiteralChars_154, +jjstrLiteralChars_155, +jjstrLiteralChars_156, +jjstrLiteralChars_157, +jjstrLiteralChars_158, +jjstrLiteralChars_159, +jjstrLiteralChars_160, +jjstrLiteralChars_161, +jjstrLiteralChars_162, +jjstrLiteralChars_163, +jjstrLiteralChars_164, +jjstrLiteralChars_165, +jjstrLiteralChars_166, +jjstrLiteralChars_167, +jjstrLiteralChars_168, +jjstrLiteralChars_169, +jjstrLiteralChars_170, +jjstrLiteralChars_171, +jjstrLiteralChars_172, +jjstrLiteralChars_173, +jjstrLiteralChars_174, +jjstrLiteralChars_175, +jjstrLiteralChars_176, +jjstrLiteralChars_177, +jjstrLiteralChars_178, +jjstrLiteralChars_179, +jjstrLiteralChars_180, +jjstrLiteralChars_181, +jjstrLiteralChars_182, +jjstrLiteralChars_183, +jjstrLiteralChars_184, +jjstrLiteralChars_185, +}; + +/** Lexer state names. */ +static const JAVACC_CHAR_TYPE lexStateNames_arr_0[] = +{0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0}; +static const JAVACC_STRING_TYPE lexStateNames[] = { +lexStateNames_arr_0, +}; +static const unsigned long long jjtoToken[] = { + 0xfffffffffffffc01ULL, 0xffffffffffffffffULL, 0x2040fffffffffffULL, +}; +static const unsigned long long jjtoSkip[] = { + 0x1eULL, 0x0ULL, 0x0ULL, +}; + +void VhdlParserTokenManager::setDebugStream(FILE *ds){ debugStream = ds; } + + int VhdlParserTokenManager::jjStopAtPos(int pos, int kind){ + jjmatchedKind = kind; + jjmatchedPos = pos; + return pos + 1; +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa0_0(){ + switch(curChar) + { + case 9: + jjmatchedKind = 2; + return jjMoveNfa_0(3, 0); + case 10: + jjmatchedKind = 3; + return jjMoveNfa_0(3, 0); + case 13: + jjmatchedKind = 4; + return jjMoveNfa_0(3, 0); + case 32: + jjmatchedKind = 1; + return jjMoveNfa_0(3, 0); + case 38: + jjmatchedKind = 125; + return jjMoveNfa_0(3, 0); + case 39: + jjmatchedKind = 126; + return jjMoveNfa_0(3, 0); + case 40: + jjmatchedKind = 127; + return jjMoveNfa_0(3, 0); + case 41: + jjmatchedKind = 128; + return jjMoveNfa_0(3, 0); + case 42: + jjmatchedKind = 130; + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x2ULL); + case 43: + jjmatchedKind = 131; + return jjMoveNfa_0(3, 0); + case 44: + jjmatchedKind = 133; + return jjMoveNfa_0(3, 0); + case 45: + jjmatchedKind = 132; + return jjMoveNfa_0(3, 0); + case 46: + jjmatchedKind = 156; + return jjMoveNfa_0(3, 0); + case 47: + jjmatchedKind = 157; + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x4000ULL); + case 58: + jjmatchedKind = 135; + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x40ULL); + case 59: + jjmatchedKind = 136; + return jjMoveNfa_0(3, 0); + case 60: + jjmatchedKind = 139; + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x30200ULL); + case 61: + jjmatchedKind = 141; + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x8000ULL); + case 62: + jjmatchedKind = 140; + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x40400ULL); + case 63: + jjmatchedKind = 154; + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x3f80000ULL); + case 64: + jjmatchedKind = 158; + return jjMoveNfa_0(3, 0); + case 65: + return jjMoveStringLiteralDfa1_0(0x3ffc00ULL, 0x0ULL, 0x0ULL); + case 66: + return jjMoveStringLiteralDfa1_0(0x7c00000ULL, 0x0ULL, 0x0ULL); + case 67: + return jjMoveStringLiteralDfa1_0(0x1f8000000ULL, 0x0ULL, 0x0ULL); + case 68: + return jjMoveStringLiteralDfa1_0(0xe00000000ULL, 0x0ULL, 0x0ULL); + case 69: + return jjMoveStringLiteralDfa1_0(0x1f000000000ULL, 0x0ULL, 0x0ULL); + case 70: + return jjMoveStringLiteralDfa1_0(0x3e0000000000ULL, 0x0ULL, 0x0ULL); + case 71: + return jjMoveStringLiteralDfa1_0(0x3c00000000000ULL, 0x0ULL, 0x0ULL); + case 73: + return jjMoveStringLiteralDfa1_0(0xfc000000000000ULL, 0x0ULL, 0x0ULL); + case 76: + return jjMoveStringLiteralDfa1_0(0x1f00000000000000ULL, 0x0ULL, 0x0ULL); + case 77: + return jjMoveStringLiteralDfa1_0(0x6000000000000000ULL, 0x0ULL, 0x0ULL); + case 78: + return jjMoveStringLiteralDfa1_0(0x8000000000000000ULL, 0x1fULL, 0x0ULL); + case 79: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x7e0ULL, 0x0ULL); + case 80: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0xff800ULL, 0x0ULL); + case 82: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0xfff00000ULL, 0x0ULL); + case 83: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x7ff00000000ULL, 0x0ULL); + case 84: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x780000000000ULL, 0x0ULL); + case 85: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x7800000000000ULL, 0x0ULL); + case 86: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x78000000000000ULL, 0x0ULL); + case 87: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x780000000000000ULL, 0x0ULL); + case 88: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x1800000000000000ULL, 0x0ULL); + case 91: + jjmatchedKind = 160; + return jjMoveNfa_0(3, 0); + case 93: + jjmatchedKind = 161; + return jjMoveNfa_0(3, 0); + case 94: + jjmatchedKind = 159; + return jjMoveNfa_0(3, 0); + case 97: + return jjMoveStringLiteralDfa1_0(0x3ffc00ULL, 0x0ULL, 0x0ULL); + case 98: + return jjMoveStringLiteralDfa1_0(0x7c00000ULL, 0x0ULL, 0x0ULL); + case 99: + return jjMoveStringLiteralDfa1_0(0x1f8000000ULL, 0x0ULL, 0x0ULL); + case 100: + return jjMoveStringLiteralDfa1_0(0xe00000000ULL, 0x0ULL, 0x0ULL); + case 101: + return jjMoveStringLiteralDfa1_0(0x1f000000000ULL, 0x0ULL, 0x0ULL); + case 102: + return jjMoveStringLiteralDfa1_0(0x3e0000000000ULL, 0x0ULL, 0x0ULL); + case 103: + return jjMoveStringLiteralDfa1_0(0x3c00000000000ULL, 0x0ULL, 0x0ULL); + case 105: + return jjMoveStringLiteralDfa1_0(0xfc000000000000ULL, 0x0ULL, 0x0ULL); + case 108: + return jjMoveStringLiteralDfa1_0(0x1f00000000000000ULL, 0x0ULL, 0x0ULL); + case 109: + return jjMoveStringLiteralDfa1_0(0x6000000000000000ULL, 0x0ULL, 0x0ULL); + case 110: + return jjMoveStringLiteralDfa1_0(0x8000000000000000ULL, 0x1fULL, 0x0ULL); + case 111: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x7e0ULL, 0x0ULL); + case 112: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0xff800ULL, 0x0ULL); + case 114: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0xfff00000ULL, 0x0ULL); + case 115: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x7ff00000000ULL, 0x0ULL); + case 116: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x780000000000ULL, 0x0ULL); + case 117: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x7800000000000ULL, 0x0ULL); + case 118: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x78000000000000ULL, 0x0ULL); + case 119: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x780000000000000ULL, 0x0ULL); + case 120: + return jjMoveStringLiteralDfa1_0(0x0ULL, 0x1800000000000000ULL, 0x0ULL); + case 123: + jjmatchedKind = 162; + return jjMoveNfa_0(3, 0); + case 124: + jjmatchedKind = 155; + return jjMoveNfa_0(3, 0); + case 125: + jjmatchedKind = 163; + return jjMoveNfa_0(3, 0); + default : + return jjMoveNfa_0(3, 0); + } +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa1_0(unsigned long long active0, unsigned long long active1, unsigned long long active2){ + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 0); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 42: + if ((active2 & 0x2ULL) != 0L) + { + jjmatchedKind = 129; + jjmatchedPos = 1; + } + break; + case 47: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x2000000ULL); + case 60: + if ((active2 & 0x20000ULL) != 0L) + { + jjmatchedKind = 145; + jjmatchedPos = 1; + } + else if ((active2 & 0x800000ULL) != 0L) + { + jjmatchedKind = 151; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x200000ULL); + case 61: + if ((active2 & 0x40ULL) != 0L) + { + jjmatchedKind = 134; + jjmatchedPos = 1; + } + else if ((active2 & 0x200ULL) != 0L) + { + jjmatchedKind = 137; + jjmatchedPos = 1; + } + else if ((active2 & 0x400ULL) != 0L) + { + jjmatchedKind = 138; + jjmatchedPos = 1; + } + else if ((active2 & 0x4000ULL) != 0L) + { + jjmatchedKind = 142; + jjmatchedPos = 1; + } + else if ((active2 & 0x1000000ULL) != 0L) + { + jjmatchedKind = 152; + jjmatchedPos = 1; + } + break; + case 62: + if ((active2 & 0x8000ULL) != 0L) + { + jjmatchedKind = 143; + jjmatchedPos = 1; + } + else if ((active2 & 0x10000ULL) != 0L) + { + jjmatchedKind = 144; + jjmatchedPos = 1; + } + else if ((active2 & 0x40000ULL) != 0L) + { + jjmatchedKind = 146; + jjmatchedPos = 1; + } + else if ((active2 & 0x400000ULL) != 0L) + { + jjmatchedKind = 150; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x100000ULL); + case 63: + if ((active2 & 0x80000ULL) != 0L) + { + jjmatchedKind = 147; + jjmatchedPos = 1; + } + break; + case 65: + return jjMoveStringLiteralDfa2_0(active0, 0xa100020010000000ULL, active1, 0x88000000101800ULL, active2, 0L); + case 66: + return jjMoveStringLiteralDfa2_0(active0, 0x400ULL, active1, 0L, active2, 0L); + case 67: + return jjMoveStringLiteralDfa2_0(active0, 0x800ULL, active1, 0L, active2, 0L); + case 69: + return jjMoveStringLiteralDfa2_0(active0, 0xc00200400000ULL, active1, 0x79fe00003ULL, active2, 0L); + case 70: + if ((active0 & 0x4000000000000ULL) != 0L) + { + jjmatchedKind = 50; + jjmatchedPos = 1; + } + else if ((active1 & 0x20ULL) != 0L) + { + jjmatchedKind = 69; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x1000ULL, active1, 0L, active2, 0L); + case 72: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x300081000000000ULL, active2, 0L); + case 73: + return jjMoveStringLiteralDfa2_0(active0, 0xe00040400000000ULL, active1, 0x400000800000000ULL, active2, 0L); + case 76: + return jjMoveStringLiteralDfa2_0(active0, 0x3000806000ULL, active1, 0x6000000000ULL, active2, 0L); + case 77: + return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000ULL, active1, 0x10000000000000ULL, active2, 0L); + case 78: + if ((active0 & 0x10000000000000ULL) != 0L) + { + jjmatchedKind = 52; + jjmatchedPos = 1; + } + else if ((active1 & 0x40ULL) != 0L) + { + jjmatchedKind = 70; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x6000c000008000ULL, active1, 0x1003800000000000ULL, active2, 0L); + case 79: + if ((active1 & 0x100000000000ULL) != 0L) + { + jjmatchedKind = 108; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x50001809e9000000ULL, active1, 0x80000006000600cULL, active2, 0L); + case 80: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x20000000000080ULL, active2, 0L); + case 82: + if ((active1 & 0x100ULL) != 0L) + { + jjmatchedKind = 72; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x1000000030000ULL, active1, 0x218000078000ULL, active2, 0L); + case 83: + if ((active0 & 0x80000000000000ULL) != 0L) + { + jjmatchedKind = 55; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x1c0000ULL, active1, 0x4000000000000ULL, active2, 0L); + case 84: + return jjMoveStringLiteralDfa2_0(active0, 0x200000ULL, active1, 0x20000000200ULL, active2, 0L); + case 85: + return jjMoveStringLiteralDfa2_0(active0, 0x2200006000000ULL, active1, 0x40040000080410ULL, active2, 0L); + case 88: + return jjMoveStringLiteralDfa2_0(active0, 0x10000000000ULL, active1, 0L, active2, 0L); + case 89: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x400000000000ULL, active2, 0L); + case 97: + return jjMoveStringLiteralDfa2_0(active0, 0xa100020010000000ULL, active1, 0x88000000101800ULL, active2, 0L); + case 98: + return jjMoveStringLiteralDfa2_0(active0, 0x400ULL, active1, 0L, active2, 0L); + case 99: + return jjMoveStringLiteralDfa2_0(active0, 0x800ULL, active1, 0L, active2, 0L); + case 101: + return jjMoveStringLiteralDfa2_0(active0, 0xc00200400000ULL, active1, 0x79fe00003ULL, active2, 0L); + case 102: + if ((active0 & 0x4000000000000ULL) != 0L) + { + jjmatchedKind = 50; + jjmatchedPos = 1; + } + else if ((active1 & 0x20ULL) != 0L) + { + jjmatchedKind = 69; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x1000ULL, active1, 0L, active2, 0L); + case 104: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x300081000000000ULL, active2, 0L); + case 105: + return jjMoveStringLiteralDfa2_0(active0, 0xe00040400000000ULL, active1, 0x400000800000000ULL, active2, 0L); + case 108: + return jjMoveStringLiteralDfa2_0(active0, 0x3000806000ULL, active1, 0x6000000000ULL, active2, 0L); + case 109: + return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000ULL, active1, 0x10000000000000ULL, active2, 0L); + case 110: + if ((active0 & 0x10000000000000ULL) != 0L) + { + jjmatchedKind = 52; + jjmatchedPos = 1; + } + else if ((active1 & 0x40ULL) != 0L) + { + jjmatchedKind = 70; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x6000c000008000ULL, active1, 0x1003800000000000ULL, active2, 0L); + case 111: + if ((active1 & 0x100000000000ULL) != 0L) + { + jjmatchedKind = 108; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x50001809e9000000ULL, active1, 0x80000006000600cULL, active2, 0L); + case 112: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x20000000000080ULL, active2, 0L); + case 114: + if ((active1 & 0x100ULL) != 0L) + { + jjmatchedKind = 72; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x1000000030000ULL, active1, 0x218000078000ULL, active2, 0L); + case 115: + if ((active0 & 0x80000000000000ULL) != 0L) + { + jjmatchedKind = 55; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_0(active0, 0x1c0000ULL, active1, 0x4000000000000ULL, active2, 0L); + case 116: + return jjMoveStringLiteralDfa2_0(active0, 0x200000ULL, active1, 0x20000000200ULL, active2, 0L); + case 117: + return jjMoveStringLiteralDfa2_0(active0, 0x2200006000000ULL, active1, 0x40040000080410ULL, active2, 0L); + case 120: + return jjMoveStringLiteralDfa2_0(active0, 0x10000000000ULL, active1, 0L, active2, 0L); + case 121: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x400000000000ULL, active2, 0L); + default : + break; + } + return jjMoveNfa_0(3, 1); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa2_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1, unsigned long long old2, unsigned long long active2){ + if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L) + return jjMoveNfa_0(3, 1); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 1); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 61: + if ((active2 & 0x100000ULL) != 0L) + { + jjmatchedKind = 148; + jjmatchedPos = 2; + } + else if ((active2 & 0x200000ULL) != 0L) + { + jjmatchedKind = 149; + jjmatchedPos = 2; + } + else if ((active2 & 0x2000000ULL) != 0L) + { + jjmatchedKind = 153; + jjmatchedPos = 2; + } + break; + case 65: + if ((active1 & 0x2000000000ULL) != 0L) + { + jjmatchedKind = 101; + jjmatchedPos = 2; + } + else if ((active1 & 0x8000000000ULL) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000ULL, active1, 0xa01000000000ULL, active2, 0L); + case 66: + return jjMoveStringLiteralDfa3_0(active0, 0x300000000000000ULL, active1, 0x40000000000ULL, active2, 0L); + case 67: + return jjMoveStringLiteralDfa3_0(active0, 0x10800ULL, active1, 0x200800ULL, active2, 0L); + case 68: + if ((active0 & 0x8000ULL) != 0L) + { + jjmatchedKind = 15; + jjmatchedPos = 2; + } + else if ((active0 & 0x4000000000ULL) != 0L) + { + jjmatchedKind = 38; + jjmatchedPos = 2; + } + else if ((active0 & 0x4000000000000000ULL) != 0L) + { + jjmatchedKind = 62; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x1000000ULL, active1, 0L, active2, 0L); + case 69: + if ((active1 & 0x4000000000000ULL) != 0L) + { + jjmatchedKind = 114; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000ULL, active1, 0x100080000000080ULL, active2, 0L); + case 70: + return jjMoveStringLiteralDfa3_0(active0, 0x202000000ULL, active1, 0L, active2, 0L); + case 71: + return jjMoveStringLiteralDfa3_0(active0, 0x400000ULL, active1, 0x800400000ULL, active2, 0L); + case 72: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200ULL, active2, 0L); + case 73: + return jjMoveStringLiteralDfa3_0(active0, 0x30000002000ULL, active1, 0x281000000000000ULL, active2, 0L); + case 74: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x800000ULL, active2, 0L); + case 76: + if ((active0 & 0x4000ULL) != 0L) + { + jjmatchedKind = 14; + jjmatchedPos = 2; + } + else if ((active1 & 0x20000000ULL) != 0L) + { + jjmatchedKind = 93; + jjmatchedPos = 2; + } + else if ((active1 & 0x4000000000ULL) != 0L) + { + jjmatchedKind = 102; + jjmatchedPos = 2; + } + else if ((active1 & 0x10000000000ULL) != 0L) + { + jjmatchedKind = 104; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x40000000000ULL, active1, 0x101000010ULL, active2, 0L); + case 77: + if ((active1 & 0x8000000ULL) != 0L) + { + jjmatchedKind = 91; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x8000000ULL, active1, 0L, active2, 0L); + case 78: + return jjMoveStringLiteralDfa3_0(active0, 0x8400e000e0000000ULL, active1, 0x40000000100000ULL, active2, 0L); + case 79: + return jjMoveStringLiteralDfa3_0(active0, 0x1041000000800000ULL, active1, 0x1010000000078000ULL, active2, 0L); + case 80: + if ((active0 & 0x2000000000000000ULL) != 0L) + { + jjmatchedKind = 61; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000ULL, active1, 0x400010000000ULL, active2, 0L); + case 81: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200000000ULL, active2, 0L); + case 82: + if ((active0 & 0x80000000000ULL) != 0L) + { + jjmatchedKind = 43; + jjmatchedPos = 2; + } + else if ((active1 & 0x4ULL) != 0L) + { + jjmatchedKind = 66; + jjmatchedPos = 2; + } + else if ((active1 & 0x40000000ULL) != 0L) + { + jjmatchedKind = 94; + jjmatchedPos = 2; + } + else if ((active1 & 0x800000000000000ULL) != 0L) + { + jjmatchedKind = 123; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x100000020000ULL, active1, 0x28020000083000ULL, active2, 0L); + case 83: + if ((active0 & 0x400ULL) != 0L) + { + jjmatchedKind = 10; + jjmatchedPos = 2; + } + else if ((active0 & 0x4000000ULL) != 0L) + { + jjmatchedKind = 26; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x34101c0000ULL, active1, 0x6004000ULL, active2, 0L); + case 84: + if ((active1 & 0x8ULL) != 0L) + { + jjmatchedKind = 67; + jjmatchedPos = 2; + } + else if ((active1 & 0x400ULL) != 0L) + { + jjmatchedKind = 74; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x800008000201000ULL, active1, 0x402000080000000ULL, active2, 0L); + case 86: + return jjMoveStringLiteralDfa3_0(active0, 0x100000000ULL, active1, 0x400000000ULL, active2, 0L); + case 87: + if ((active1 & 0x1ULL) != 0L) + { + jjmatchedKind = 64; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x800000000ULL, active1, 0L, active2, 0L); + case 88: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2ULL, active2, 0L); + case 97: + if ((active1 & 0x2000000000ULL) != 0L) + { + jjmatchedKind = 101; + jjmatchedPos = 2; + } + else if ((active1 & 0x8000000000ULL) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000ULL, active1, 0xa01000000000ULL, active2, 0L); + case 98: + return jjMoveStringLiteralDfa3_0(active0, 0x300000000000000ULL, active1, 0x40000000000ULL, active2, 0L); + case 99: + return jjMoveStringLiteralDfa3_0(active0, 0x10800ULL, active1, 0x200800ULL, active2, 0L); + case 100: + if ((active0 & 0x8000ULL) != 0L) + { + jjmatchedKind = 15; + jjmatchedPos = 2; + } + else if ((active0 & 0x4000000000ULL) != 0L) + { + jjmatchedKind = 38; + jjmatchedPos = 2; + } + else if ((active0 & 0x4000000000000000ULL) != 0L) + { + jjmatchedKind = 62; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x1000000ULL, active1, 0L, active2, 0L); + case 101: + if ((active1 & 0x4000000000000ULL) != 0L) + { + jjmatchedKind = 114; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000ULL, active1, 0x100080000000080ULL, active2, 0L); + case 102: + return jjMoveStringLiteralDfa3_0(active0, 0x202000000ULL, active1, 0L, active2, 0L); + case 103: + return jjMoveStringLiteralDfa3_0(active0, 0x400000ULL, active1, 0x800400000ULL, active2, 0L); + case 104: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200ULL, active2, 0L); + case 105: + return jjMoveStringLiteralDfa3_0(active0, 0x30000002000ULL, active1, 0x281000000000000ULL, active2, 0L); + case 106: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x800000ULL, active2, 0L); + case 108: + if ((active0 & 0x4000ULL) != 0L) + { + jjmatchedKind = 14; + jjmatchedPos = 2; + } + else if ((active1 & 0x20000000ULL) != 0L) + { + jjmatchedKind = 93; + jjmatchedPos = 2; + } + else if ((active1 & 0x4000000000ULL) != 0L) + { + jjmatchedKind = 102; + jjmatchedPos = 2; + } + else if ((active1 & 0x10000000000ULL) != 0L) + { + jjmatchedKind = 104; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x40000000000ULL, active1, 0x101000010ULL, active2, 0L); + case 109: + if ((active1 & 0x8000000ULL) != 0L) + { + jjmatchedKind = 91; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x8000000ULL, active1, 0L, active2, 0L); + case 110: + return jjMoveStringLiteralDfa3_0(active0, 0x8400e000e0000000ULL, active1, 0x40000000100000ULL, active2, 0L); + case 111: + return jjMoveStringLiteralDfa3_0(active0, 0x1041000000800000ULL, active1, 0x1010000000078000ULL, active2, 0L); + case 112: + if ((active0 & 0x2000000000000000ULL) != 0L) + { + jjmatchedKind = 61; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000ULL, active1, 0x400010000000ULL, active2, 0L); + case 113: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200000000ULL, active2, 0L); + case 114: + if ((active0 & 0x80000000000ULL) != 0L) + { + jjmatchedKind = 43; + jjmatchedPos = 2; + } + else if ((active1 & 0x4ULL) != 0L) + { + jjmatchedKind = 66; + jjmatchedPos = 2; + } + else if ((active1 & 0x40000000ULL) != 0L) + { + jjmatchedKind = 94; + jjmatchedPos = 2; + } + else if ((active1 & 0x800000000000000ULL) != 0L) + { + jjmatchedKind = 123; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x100000020000ULL, active1, 0x28020000083000ULL, active2, 0L); + case 115: + if ((active0 & 0x400ULL) != 0L) + { + jjmatchedKind = 10; + jjmatchedPos = 2; + } + else if ((active0 & 0x4000000ULL) != 0L) + { + jjmatchedKind = 26; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x34101c0000ULL, active1, 0x6004000ULL, active2, 0L); + case 116: + if ((active1 & 0x8ULL) != 0L) + { + jjmatchedKind = 67; + jjmatchedPos = 2; + } + else if ((active1 & 0x400ULL) != 0L) + { + jjmatchedKind = 74; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x800008000201000ULL, active1, 0x402000080000000ULL, active2, 0L); + case 118: + return jjMoveStringLiteralDfa3_0(active0, 0x100000000ULL, active1, 0x400000000ULL, active2, 0L); + case 119: + if ((active1 & 0x1ULL) != 0L) + { + jjmatchedKind = 64; + jjmatchedPos = 2; + } + return jjMoveStringLiteralDfa3_0(active0, 0x800000000ULL, active1, 0L, active2, 0L); + case 120: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2ULL, active2, 0L); + default : + break; + } + return jjMoveNfa_0(3, 2); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa3_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1, unsigned long long old2, unsigned long long active2){ + if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L) + return jjMoveNfa_0(3, 2); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 2); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa4_0(active0, 0x200022000ULL, active1, 0x1000ULL); + case 67: + return jjMoveStringLiteralDfa4_0(active0, 0x300400800000ULL, active1, 0x18000ULL); + case 68: + if ((active0 & 0x8000000000000000ULL) != 0L) + { + jjmatchedKind = 63; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x10000000000000ULL); + case 69: + if ((active0 & 0x10000000ULL) != 0L) + { + jjmatchedKind = 28; + jjmatchedPos = 3; + } + else if ((active0 & 0x1000000000ULL) != 0L) + { + jjmatchedKind = 36; + jjmatchedPos = 3; + } + else if ((active0 & 0x40000000000ULL) != 0L) + { + jjmatchedKind = 42; + jjmatchedPos = 3; + } + else if ((active1 & 0x80000ULL) != 0L) + { + jjmatchedKind = 83; + jjmatchedPos = 3; + } + else if ((active1 & 0x400000000000ULL) != 0L) + { + jjmatchedKind = 110; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x900c00100041800ULL, active1, 0x501800200ULL); + case 70: + return jjMoveStringLiteralDfa4_0(active0, 0x22000000ULL, active1, 0x800000000000ULL); + case 71: + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000ULL); + case 72: + if ((active1 & 0x400000000000000ULL) != 0L) + { + jjmatchedKind = 122; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x10000ULL, active1, 0L); + case 73: + return jjMoveStringLiteralDfa4_0(active0, 0xa000400000ULL, active1, 0x4a000000400000ULL); + case 75: + return jjMoveStringLiteralDfa4_0(active0, 0x400000000000000ULL, active1, 0x800ULL); + case 76: + if ((active1 & 0x10ULL) != 0L) + { + jjmatchedKind = 68; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000000000000ULL); + case 78: + if ((active1 & 0x80ULL) != 0L) + { + jjmatchedKind = 71; + jjmatchedPos = 3; + } + else if ((active1 & 0x80000000000ULL) != 0L) + { + jjmatchedKind = 107; + jjmatchedPos = 3; + } + else if ((active1 & 0x100000000000000ULL) != 0L) + { + jjmatchedKind = 120; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x800000000ULL, active1, 0x200800000000ULL); + case 79: + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20020010200000ULL); + case 80: + if ((active0 & 0x1000000000000000ULL) != 0L) + { + jjmatchedKind = 60; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x8000000ULL, active1, 0x20000ULL); + case 82: + if ((active1 & 0x1000000000000000ULL) != 0L) + { + jjmatchedKind = 124; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x222020000200000ULL, active1, 0x1000000000ULL); + case 83: + return jjMoveStringLiteralDfa4_0(active0, 0x40000000ULL, active1, 0L); + case 84: + if ((active0 & 0x10000000000ULL) != 0L) + { + jjmatchedKind = 40; + jjmatchedPos = 3; + } + else if ((active1 & 0x2ULL) != 0L) + { + jjmatchedKind = 65; + jjmatchedPos = 3; + } + else if ((active1 & 0x2000ULL) != 0L) + { + jjmatchedKind = 77; + jjmatchedPos = 3; + } + else if ((active1 & 0x80000000000000ULL) != 0L) + { + jjmatchedKind = 119; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x80000000ULL, active1, 0x1040006044000ULL); + case 85: + return jjMoveStringLiteralDfa4_0(active0, 0x49000000180000ULL, active1, 0x280000000ULL); + case 89: + if ((active0 & 0x1000000ULL) != 0L) + { + jjmatchedKind = 24; + jjmatchedPos = 3; + } + break; + case 97: + return jjMoveStringLiteralDfa4_0(active0, 0x200022000ULL, active1, 0x1000ULL); + case 99: + return jjMoveStringLiteralDfa4_0(active0, 0x300400800000ULL, active1, 0x18000ULL); + case 100: + if ((active0 & 0x8000000000000000ULL) != 0L) + { + jjmatchedKind = 63; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x10000000000000ULL); + case 101: + if ((active0 & 0x10000000ULL) != 0L) + { + jjmatchedKind = 28; + jjmatchedPos = 3; + } + else if ((active0 & 0x1000000000ULL) != 0L) + { + jjmatchedKind = 36; + jjmatchedPos = 3; + } + else if ((active0 & 0x40000000000ULL) != 0L) + { + jjmatchedKind = 42; + jjmatchedPos = 3; + } + else if ((active1 & 0x80000ULL) != 0L) + { + jjmatchedKind = 83; + jjmatchedPos = 3; + } + else if ((active1 & 0x400000000000ULL) != 0L) + { + jjmatchedKind = 110; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x900c00100041800ULL, active1, 0x501800200ULL); + case 102: + return jjMoveStringLiteralDfa4_0(active0, 0x22000000ULL, active1, 0x800000000000ULL); + case 103: + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000ULL); + case 104: + if ((active1 & 0x400000000000000ULL) != 0L) + { + jjmatchedKind = 122; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x10000ULL, active1, 0L); + case 105: + return jjMoveStringLiteralDfa4_0(active0, 0xa000400000ULL, active1, 0x4a000000400000ULL); + case 107: + return jjMoveStringLiteralDfa4_0(active0, 0x400000000000000ULL, active1, 0x800ULL); + case 108: + if ((active1 & 0x10ULL) != 0L) + { + jjmatchedKind = 68; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000000000000ULL); + case 110: + if ((active1 & 0x80ULL) != 0L) + { + jjmatchedKind = 71; + jjmatchedPos = 3; + } + else if ((active1 & 0x80000000000ULL) != 0L) + { + jjmatchedKind = 107; + jjmatchedPos = 3; + } + else if ((active1 & 0x100000000000000ULL) != 0L) + { + jjmatchedKind = 120; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x800000000ULL, active1, 0x200800000000ULL); + case 111: + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20020010200000ULL); + case 112: + if ((active0 & 0x1000000000000000ULL) != 0L) + { + jjmatchedKind = 60; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x8000000ULL, active1, 0x20000ULL); + case 114: + if ((active1 & 0x1000000000000000ULL) != 0L) + { + jjmatchedKind = 124; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x222020000200000ULL, active1, 0x1000000000ULL); + case 115: + return jjMoveStringLiteralDfa4_0(active0, 0x40000000ULL, active1, 0L); + case 116: + if ((active0 & 0x10000000000ULL) != 0L) + { + jjmatchedKind = 40; + jjmatchedPos = 3; + } + else if ((active1 & 0x2ULL) != 0L) + { + jjmatchedKind = 65; + jjmatchedPos = 3; + } + else if ((active1 & 0x2000ULL) != 0L) + { + jjmatchedKind = 77; + jjmatchedPos = 3; + } + else if ((active1 & 0x80000000000000ULL) != 0L) + { + jjmatchedKind = 119; + jjmatchedPos = 3; + } + return jjMoveStringLiteralDfa4_0(active0, 0x80000000ULL, active1, 0x1040006044000ULL); + case 117: + return jjMoveStringLiteralDfa4_0(active0, 0x49000000180000ULL, active1, 0x280000000ULL); + case 121: + if ((active0 & 0x1000000ULL) != 0L) + { + jjmatchedKind = 24; + jjmatchedPos = 3; + } + break; + default : + break; + } + return jjMoveNfa_0(3, 3); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa4_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 3); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 3); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa5_0(active0, 0x600000000000000ULL, active1, 0x8000801000800ULL); + case 67: + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100800000ULL); + case 68: + return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000ULL, active1, 0L); + case 69: + if ((active0 & 0x100000000000ULL) != 0L) + { + jjmatchedKind = 44; + jjmatchedPos = 4; + } + else if ((active1 & 0x100000ULL) != 0L) + { + jjmatchedKind = 84; + jjmatchedPos = 4; + } + else if ((active1 & 0x10000000000000ULL) != 0L) + { + jjmatchedKind = 116; + jjmatchedPos = 4; + } + else if ((active1 & 0x200000000000000ULL) != 0L) + { + jjmatchedKind = 121; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x82000000ULL, active1, 0x1200078000ULL); + case 70: + if ((active0 & 0x2000000000ULL) != 0L) + { + jjmatchedKind = 37; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000ULL); + case 73: + return jjMoveStringLiteralDfa5_0(active0, 0x20210000ULL, active1, 0L); + case 75: + if ((active0 & 0x800000ULL) != 0L) + { + jjmatchedKind = 23; + jjmatchedPos = 4; + } + break; + case 76: + if ((active0 & 0x100000000000000ULL) != 0L) + { + jjmatchedKind = 56; + jjmatchedPos = 4; + } + else if ((active1 & 0x2000000000000ULL) != 0L) + { + jjmatchedKind = 113; + jjmatchedPos = 4; + } + break; + case 77: + return jjMoveStringLiteralDfa5_0(active0, 0x180000ULL, active1, 0x1000ULL); + case 78: + if ((active0 & 0x400000ULL) != 0L) + { + jjmatchedKind = 22; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x20000000000ULL, active1, 0x20000000000ULL); + case 79: + return jjMoveStringLiteralDfa5_0(active0, 0x408000000ULL, active1, 0L); + case 80: + if ((active0 & 0x1000000000000ULL) != 0L) + { + jjmatchedKind = 48; + jjmatchedPos = 4; + } + else if ((active1 & 0x20000000000000ULL) != 0L) + { + jjmatchedKind = 117; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000ULL); + case 82: + if ((active0 & 0x1000ULL) != 0L) + { + jjmatchedKind = 12; + jjmatchedPos = 4; + } + else if ((active0 & 0x100000000ULL) != 0L) + { + jjmatchedKind = 32; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x808c00000040000ULL, active1, 0x496200200ULL); + case 83: + if ((active0 & 0x2000ULL) != 0L) + { + jjmatchedKind = 13; + jjmatchedPos = 4; + } + else if ((active1 & 0x1000000000000ULL) != 0L) + { + jjmatchedKind = 112; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x800ULL, active1, 0x200000400000ULL); + case 84: + if ((active0 & 0x40000000000000ULL) != 0L) + { + jjmatchedKind = 54; + jjmatchedPos = 4; + } + else if ((active1 & 0x40000000000000ULL) != 0L) + { + jjmatchedKind = 118; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x20208840000000ULL, active1, 0L); + case 85: + return jjMoveStringLiteralDfa5_0(active0, 0x200000000ULL, active1, 0L); + case 89: + if ((active0 & 0x20000ULL) != 0L) + { + jjmatchedKind = 17; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000ULL); + case 97: + return jjMoveStringLiteralDfa5_0(active0, 0x600000000000000ULL, active1, 0x8000801000800ULL); + case 99: + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100800000ULL); + case 100: + return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000ULL, active1, 0L); + case 101: + if ((active0 & 0x100000000000ULL) != 0L) + { + jjmatchedKind = 44; + jjmatchedPos = 4; + } + else if ((active1 & 0x100000ULL) != 0L) + { + jjmatchedKind = 84; + jjmatchedPos = 4; + } + else if ((active1 & 0x10000000000000ULL) != 0L) + { + jjmatchedKind = 116; + jjmatchedPos = 4; + } + else if ((active1 & 0x200000000000000ULL) != 0L) + { + jjmatchedKind = 121; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x82000000ULL, active1, 0x1200078000ULL); + case 102: + if ((active0 & 0x2000000000ULL) != 0L) + { + jjmatchedKind = 37; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000ULL); + case 105: + return jjMoveStringLiteralDfa5_0(active0, 0x20210000ULL, active1, 0L); + case 107: + if ((active0 & 0x800000ULL) != 0L) + { + jjmatchedKind = 23; + jjmatchedPos = 4; + } + break; + case 108: + if ((active0 & 0x100000000000000ULL) != 0L) + { + jjmatchedKind = 56; + jjmatchedPos = 4; + } + else if ((active1 & 0x2000000000000ULL) != 0L) + { + jjmatchedKind = 113; + jjmatchedPos = 4; + } + break; + case 109: + return jjMoveStringLiteralDfa5_0(active0, 0x180000ULL, active1, 0x1000ULL); + case 110: + if ((active0 & 0x400000ULL) != 0L) + { + jjmatchedKind = 22; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x20000000000ULL, active1, 0x20000000000ULL); + case 111: + return jjMoveStringLiteralDfa5_0(active0, 0x408000000ULL, active1, 0L); + case 112: + if ((active0 & 0x1000000000000ULL) != 0L) + { + jjmatchedKind = 48; + jjmatchedPos = 4; + } + else if ((active1 & 0x20000000000000ULL) != 0L) + { + jjmatchedKind = 117; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000ULL); + case 114: + if ((active0 & 0x1000ULL) != 0L) + { + jjmatchedKind = 12; + jjmatchedPos = 4; + } + else if ((active0 & 0x100000000ULL) != 0L) + { + jjmatchedKind = 32; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x808c00000040000ULL, active1, 0x496200200ULL); + case 115: + if ((active0 & 0x2000ULL) != 0L) + { + jjmatchedKind = 13; + jjmatchedPos = 4; + } + else if ((active1 & 0x1000000000000ULL) != 0L) + { + jjmatchedKind = 112; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x800ULL, active1, 0x200000400000ULL); + case 116: + if ((active0 & 0x40000000000000ULL) != 0L) + { + jjmatchedKind = 54; + jjmatchedPos = 4; + } + else if ((active1 & 0x40000000000000ULL) != 0L) + { + jjmatchedKind = 118; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0x20208840000000ULL, active1, 0L); + case 117: + return jjMoveStringLiteralDfa5_0(active0, 0x200000000ULL, active1, 0L); + case 121: + if ((active0 & 0x20000ULL) != 0L) + { + jjmatchedKind = 17; + jjmatchedPos = 4; + } + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000ULL); + default : + break; + } + return jjMoveNfa_0(3, 4); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa5_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 4); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 4); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa6_0(active0, 0x800400040000000ULL, active1, 0L); + case 66: + return jjMoveStringLiteralDfa6_0(active0, 0x200000ULL, active1, 0x8000000000000ULL); + case 67: + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40000ULL); + case 68: + if ((active1 & 0x200000ULL) != 0L) + { + jjmatchedKind = 85; + jjmatchedPos = 5; + } + else if ((active1 & 0x1000000000ULL) != 0L) + { + jjmatchedKind = 100; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8000ULL); + case 69: + if ((active0 & 0x80000ULL) != 0L) + { + jjmatchedKind = 19; + jjmatchedPos = 5; + } + else if ((active0 & 0x8000000000000ULL) != 0L) + { + jjmatchedKind = 51; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x2020000100000ULL, active1, 0x800000001000ULL); + case 71: + if ((active1 & 0x20000000000ULL) != 0L) + { + jjmatchedKind = 105; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x400000020000000ULL, active1, 0x800ULL); + case 73: + return jjMoveStringLiteralDfa6_0(active0, 0x20a00000000000ULL, active1, 0x406000000ULL); + case 76: + if ((active1 & 0x800000000ULL) != 0L) + { + jjmatchedKind = 99; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x200000000ULL, active1, 0L); + case 78: + if ((active1 & 0x80000000ULL) != 0L) + { + jjmatchedKind = 95; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x408000000ULL, active1, 0x200000000ULL); + case 79: + if ((active0 & 0x800000000ULL) != 0L) + { + jjmatchedKind = 35; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000ULL); + case 80: + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x240000000000ULL); + case 82: + if ((active0 & 0x2000000ULL) != 0L) + { + jjmatchedKind = 25; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x200000000000000ULL, active1, 0x20000ULL); + case 83: + if ((active0 & 0x800ULL) != 0L) + { + jjmatchedKind = 11; + jjmatchedPos = 5; + } + else if ((active1 & 0x200ULL) != 0L) + { + jjmatchedKind = 73; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1010000ULL); + case 84: + if ((active0 & 0x40000ULL) != 0L) + { + jjmatchedKind = 18; + jjmatchedPos = 5; + } + else if ((active1 & 0x800000ULL) != 0L) + { + jjmatchedKind = 87; + jjmatchedPos = 5; + } + else if ((active1 & 0x10000000ULL) != 0L) + { + jjmatchedKind = 92; + jjmatchedPos = 5; + } + else if ((active1 & 0x100000000ULL) != 0L) + { + jjmatchedKind = 96; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x10000ULL, active1, 0x400000ULL); + case 88: + return jjMoveStringLiteralDfa6_0(active0, 0x80000000ULL, active1, 0L); + case 89: + if ((active0 & 0x8000000000ULL) != 0L) + { + jjmatchedKind = 39; + jjmatchedPos = 5; + } + break; + case 97: + return jjMoveStringLiteralDfa6_0(active0, 0x800400040000000ULL, active1, 0L); + case 98: + return jjMoveStringLiteralDfa6_0(active0, 0x200000ULL, active1, 0x8000000000000ULL); + case 99: + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40000ULL); + case 100: + if ((active1 & 0x200000ULL) != 0L) + { + jjmatchedKind = 85; + jjmatchedPos = 5; + } + else if ((active1 & 0x1000000000ULL) != 0L) + { + jjmatchedKind = 100; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8000ULL); + case 101: + if ((active0 & 0x80000ULL) != 0L) + { + jjmatchedKind = 19; + jjmatchedPos = 5; + } + else if ((active0 & 0x8000000000000ULL) != 0L) + { + jjmatchedKind = 51; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x2020000100000ULL, active1, 0x800000001000ULL); + case 103: + if ((active1 & 0x20000000000ULL) != 0L) + { + jjmatchedKind = 105; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x400000020000000ULL, active1, 0x800ULL); + case 105: + return jjMoveStringLiteralDfa6_0(active0, 0x20a00000000000ULL, active1, 0x406000000ULL); + case 108: + if ((active1 & 0x800000000ULL) != 0L) + { + jjmatchedKind = 99; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x200000000ULL, active1, 0L); + case 110: + if ((active1 & 0x80000000ULL) != 0L) + { + jjmatchedKind = 95; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x408000000ULL, active1, 0x200000000ULL); + case 111: + if ((active0 & 0x800000000ULL) != 0L) + { + jjmatchedKind = 35; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000ULL); + case 112: + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x240000000000ULL); + case 114: + if ((active0 & 0x2000000ULL) != 0L) + { + jjmatchedKind = 25; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x200000000000000ULL, active1, 0x20000ULL); + case 115: + if ((active0 & 0x800ULL) != 0L) + { + jjmatchedKind = 11; + jjmatchedPos = 5; + } + else if ((active1 & 0x200ULL) != 0L) + { + jjmatchedKind = 73; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1010000ULL); + case 116: + if ((active0 & 0x40000ULL) != 0L) + { + jjmatchedKind = 18; + jjmatchedPos = 5; + } + else if ((active1 & 0x800000ULL) != 0L) + { + jjmatchedKind = 87; + jjmatchedPos = 5; + } + else if ((active1 & 0x10000000ULL) != 0L) + { + jjmatchedKind = 92; + jjmatchedPos = 5; + } + else if ((active1 & 0x100000000ULL) != 0L) + { + jjmatchedKind = 96; + jjmatchedPos = 5; + } + return jjMoveStringLiteralDfa6_0(active0, 0x10000ULL, active1, 0x400000ULL); + case 120: + return jjMoveStringLiteralDfa6_0(active0, 0x80000000ULL, active1, 0L); + case 121: + if ((active0 & 0x8000000000ULL) != 0L) + { + jjmatchedKind = 39; + jjmatchedPos = 5; + } + break; + default : + break; + } + return jjMoveNfa_0(3, 5); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa6_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 5); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 5); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa7_0(active0, 0x20000000000000ULL, active1, 0L); + case 67: + if ((active0 & 0x800000000000ULL) != 0L) + { + jjmatchedKind = 47; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800206000000ULL); + case 68: + if ((active0 & 0x2000000000000ULL) != 0L) + { + jjmatchedKind = 49; + jjmatchedPos = 6; + } + break; + case 69: + if ((active0 & 0x400000000000000ULL) != 0L) + { + jjmatchedKind = 58; + jjmatchedPos = 6; + } + else if ((active1 & 0x800ULL) != 0L) + { + jjmatchedKind = 75; + jjmatchedPos = 6; + } + else if ((active1 & 0x1000000ULL) != 0L) + { + jjmatchedKind = 88; + jjmatchedPos = 6; + } + else if ((active1 & 0x40000000000ULL) != 0L) + { + jjmatchedKind = 106; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0x8010000ULL, active1, 0x400000ULL); + case 76: + if ((active0 & 0x800000000000000ULL) != 0L) + { + jjmatchedKind = 59; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x8000000000000ULL); + case 78: + return jjMoveStringLiteralDfa7_0(active0, 0x440000000ULL, active1, 0x4000ULL); + case 79: + return jjMoveStringLiteralDfa7_0(active0, 0x200000000000ULL, active1, 0x200000000000ULL); + case 83: + if ((active1 & 0x10000ULL) != 0L) + { + jjmatchedKind = 80; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0x20000000000ULL, active1, 0L); + case 84: + if ((active0 & 0x80000000ULL) != 0L) + { + jjmatchedKind = 31; + jjmatchedPos = 6; + } + else if ((active0 & 0x200000000ULL) != 0L) + { + jjmatchedKind = 33; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0x400000000000ULL, active1, 0x400061000ULL); + case 85: + return jjMoveStringLiteralDfa7_0(active0, 0x20200000ULL, active1, 0x8000ULL); + case 89: + if ((active0 & 0x200000000000000ULL) != 0L) + { + jjmatchedKind = 57; + jjmatchedPos = 6; + } + break; + case 95: + return jjMoveStringLiteralDfa7_0(active0, 0x100000ULL, active1, 0L); + case 97: + return jjMoveStringLiteralDfa7_0(active0, 0x20000000000000ULL, active1, 0L); + case 99: + if ((active0 & 0x800000000000ULL) != 0L) + { + jjmatchedKind = 47; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800206000000ULL); + case 100: + if ((active0 & 0x2000000000000ULL) != 0L) + { + jjmatchedKind = 49; + jjmatchedPos = 6; + } + break; + case 101: + if ((active0 & 0x400000000000000ULL) != 0L) + { + jjmatchedKind = 58; + jjmatchedPos = 6; + } + else if ((active1 & 0x800ULL) != 0L) + { + jjmatchedKind = 75; + jjmatchedPos = 6; + } + else if ((active1 & 0x1000000ULL) != 0L) + { + jjmatchedKind = 88; + jjmatchedPos = 6; + } + else if ((active1 & 0x40000000000ULL) != 0L) + { + jjmatchedKind = 106; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0x8010000ULL, active1, 0x400000ULL); + case 108: + if ((active0 & 0x800000000000000ULL) != 0L) + { + jjmatchedKind = 59; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x8000000000000ULL); + case 110: + return jjMoveStringLiteralDfa7_0(active0, 0x440000000ULL, active1, 0x4000ULL); + case 111: + return jjMoveStringLiteralDfa7_0(active0, 0x200000000000ULL, active1, 0x200000000000ULL); + case 115: + if ((active1 & 0x10000ULL) != 0L) + { + jjmatchedKind = 80; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0x20000000000ULL, active1, 0L); + case 116: + if ((active0 & 0x80000000ULL) != 0L) + { + jjmatchedKind = 31; + jjmatchedPos = 6; + } + else if ((active0 & 0x200000000ULL) != 0L) + { + jjmatchedKind = 33; + jjmatchedPos = 6; + } + return jjMoveStringLiteralDfa7_0(active0, 0x400000000000ULL, active1, 0x400061000ULL); + case 117: + return jjMoveStringLiteralDfa7_0(active0, 0x20200000ULL, active1, 0x8000ULL); + case 121: + if ((active0 & 0x200000000000000ULL) != 0L) + { + jjmatchedKind = 57; + jjmatchedPos = 6; + } + break; + default : + break; + } + return jjMoveNfa_0(3, 6); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa7_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 6); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 6); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 67: + return jjMoveStringLiteralDfa8_0(active0, 0x10000ULL, active1, 0L); + case 69: + if ((active0 & 0x400000000000ULL) != 0L) + { + jjmatchedKind = 46; + jjmatchedPos = 7; + } + else if ((active1 & 0x200000000ULL) != 0L) + { + jjmatchedKind = 97; + jjmatchedPos = 7; + } + else if ((active1 & 0x8000000000000ULL) != 0L) + { + jjmatchedKind = 115; + jjmatchedPos = 7; + } + return jjMoveStringLiteralDfa8_0(active0, 0x400000000ULL, active1, 0x45000ULL); + case 71: + return jjMoveStringLiteralDfa8_0(active0, 0x100000ULL, active1, 0L); + case 76: + if ((active0 & 0x20000000000000ULL) != 0L) + { + jjmatchedKind = 53; + jjmatchedPos = 7; + } + break; + case 78: + if ((active0 & 0x200000000000ULL) != 0L) + { + jjmatchedKind = 45; + jjmatchedPos = 7; + } + return jjMoveStringLiteralDfa8_0(active0, 0x8000000ULL, active1, 0L); + case 82: + if ((active1 & 0x400000ULL) != 0L) + { + jjmatchedKind = 86; + jjmatchedPos = 7; + } + return jjMoveStringLiteralDfa8_0(active0, 0x20000000ULL, active1, 0x200000008000ULL); + case 83: + if ((active0 & 0x20000000000ULL) != 0L) + { + jjmatchedKind = 41; + jjmatchedPos = 7; + } + break; + case 84: + if ((active0 & 0x40000000ULL) != 0L) + { + jjmatchedKind = 30; + jjmatchedPos = 7; + } + else if ((active1 & 0x2000000ULL) != 0L) + { + jjmatchedKind = 89; + jjmatchedPos = 7; + } + return jjMoveStringLiteralDfa8_0(active0, 0x200000ULL, active1, 0x800004000000ULL); + case 89: + if ((active1 & 0x20000ULL) != 0L) + { + jjmatchedKind = 81; + jjmatchedPos = 7; + } + else if ((active1 & 0x400000000ULL) != 0L) + { + jjmatchedKind = 98; + jjmatchedPos = 7; + } + break; + case 99: + return jjMoveStringLiteralDfa8_0(active0, 0x10000ULL, active1, 0L); + case 101: + if ((active0 & 0x400000000000ULL) != 0L) + { + jjmatchedKind = 46; + jjmatchedPos = 7; + } + else if ((active1 & 0x200000000ULL) != 0L) + { + jjmatchedKind = 97; + jjmatchedPos = 7; + } + else if ((active1 & 0x8000000000000ULL) != 0L) + { + jjmatchedKind = 115; + jjmatchedPos = 7; + } + return jjMoveStringLiteralDfa8_0(active0, 0x400000000ULL, active1, 0x45000ULL); + case 103: + return jjMoveStringLiteralDfa8_0(active0, 0x100000ULL, active1, 0L); + case 108: + if ((active0 & 0x20000000000000ULL) != 0L) + { + jjmatchedKind = 53; + jjmatchedPos = 7; + } + break; + case 110: + if ((active0 & 0x200000000000ULL) != 0L) + { + jjmatchedKind = 45; + jjmatchedPos = 7; + } + return jjMoveStringLiteralDfa8_0(active0, 0x8000000ULL, active1, 0L); + case 114: + if ((active1 & 0x400000ULL) != 0L) + { + jjmatchedKind = 86; + jjmatchedPos = 7; + } + return jjMoveStringLiteralDfa8_0(active0, 0x20000000ULL, active1, 0x200000008000ULL); + case 115: + if ((active0 & 0x20000000000ULL) != 0L) + { + jjmatchedKind = 41; + jjmatchedPos = 7; + } + break; + case 116: + if ((active0 & 0x40000000ULL) != 0L) + { + jjmatchedKind = 30; + jjmatchedPos = 7; + } + else if ((active1 & 0x2000000ULL) != 0L) + { + jjmatchedKind = 89; + jjmatchedPos = 7; + } + return jjMoveStringLiteralDfa8_0(active0, 0x200000ULL, active1, 0x800004000000ULL); + case 121: + if ((active1 & 0x20000ULL) != 0L) + { + jjmatchedKind = 81; + jjmatchedPos = 7; + } + else if ((active1 & 0x400000000ULL) != 0L) + { + jjmatchedKind = 98; + jjmatchedPos = 7; + } + break; + default : + break; + } + return jjMoveNfa_0(3, 7); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa8_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 7); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 7); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa9_0(active0, 0x20000000ULL, active1, 0L); + case 67: + return jjMoveStringLiteralDfa9_0(active0, 0x400000000ULL, active1, 0L); + case 68: + if ((active1 & 0x4000ULL) != 0L) + { + jjmatchedKind = 78; + jjmatchedPos = 8; + } + else if ((active1 & 0x40000ULL) != 0L) + { + jjmatchedKind = 82; + jjmatchedPos = 8; + } + break; + case 69: + if ((active0 & 0x200000ULL) != 0L) + { + jjmatchedKind = 21; + jjmatchedPos = 8; + } + else if ((active1 & 0x8000ULL) != 0L) + { + jjmatchedKind = 79; + jjmatchedPos = 8; + } + return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x800000000000ULL); + case 82: + if ((active1 & 0x1000ULL) != 0L) + { + jjmatchedKind = 76; + jjmatchedPos = 8; + } + break; + case 84: + if ((active0 & 0x8000000ULL) != 0L) + { + jjmatchedKind = 27; + jjmatchedPos = 8; + } + else if ((active1 & 0x200000000000ULL) != 0L) + { + jjmatchedKind = 109; + jjmatchedPos = 8; + } + return jjMoveStringLiteralDfa9_0(active0, 0x10000ULL, active1, 0L); + case 85: + return jjMoveStringLiteralDfa9_0(active0, 0x100000ULL, active1, 0L); + case 95: + return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x4000000ULL); + case 97: + return jjMoveStringLiteralDfa9_0(active0, 0x20000000ULL, active1, 0L); + case 99: + return jjMoveStringLiteralDfa9_0(active0, 0x400000000ULL, active1, 0L); + case 100: + if ((active1 & 0x4000ULL) != 0L) + { + jjmatchedKind = 78; + jjmatchedPos = 8; + } + else if ((active1 & 0x40000ULL) != 0L) + { + jjmatchedKind = 82; + jjmatchedPos = 8; + } + break; + case 101: + if ((active0 & 0x200000ULL) != 0L) + { + jjmatchedKind = 21; + jjmatchedPos = 8; + } + else if ((active1 & 0x8000ULL) != 0L) + { + jjmatchedKind = 79; + jjmatchedPos = 8; + } + return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x800000000000ULL); + case 114: + if ((active1 & 0x1000ULL) != 0L) + { + jjmatchedKind = 76; + jjmatchedPos = 8; + } + break; + case 116: + if ((active0 & 0x8000000ULL) != 0L) + { + jjmatchedKind = 27; + jjmatchedPos = 8; + } + else if ((active1 & 0x200000000000ULL) != 0L) + { + jjmatchedKind = 109; + jjmatchedPos = 8; + } + return jjMoveStringLiteralDfa9_0(active0, 0x10000ULL, active1, 0L); + case 117: + return jjMoveStringLiteralDfa9_0(active0, 0x100000ULL, active1, 0L); + default : + break; + } + return jjMoveNfa_0(3, 8); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa9_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 8); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 8); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa10_0(active0, 0x100000ULL, active1, 0L); + case 68: + if ((active1 & 0x800000000000ULL) != 0L) + { + jjmatchedKind = 111; + jjmatchedPos = 9; + } + break; + case 71: + return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x4000000ULL); + case 84: + if ((active0 & 0x400000000ULL) != 0L) + { + jjmatchedKind = 34; + jjmatchedPos = 9; + } + return jjMoveStringLiteralDfa10_0(active0, 0x20000000ULL, active1, 0L); + case 85: + return jjMoveStringLiteralDfa10_0(active0, 0x10000ULL, active1, 0L); + case 97: + return jjMoveStringLiteralDfa10_0(active0, 0x100000ULL, active1, 0L); + case 100: + if ((active1 & 0x800000000000ULL) != 0L) + { + jjmatchedKind = 111; + jjmatchedPos = 9; + } + break; + case 103: + return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x4000000ULL); + case 116: + if ((active0 & 0x400000000ULL) != 0L) + { + jjmatchedKind = 34; + jjmatchedPos = 9; + } + return jjMoveStringLiteralDfa10_0(active0, 0x20000000ULL, active1, 0L); + case 117: + return jjMoveStringLiteralDfa10_0(active0, 0x10000ULL, active1, 0L); + default : + break; + } + return jjMoveNfa_0(3, 9); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa10_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 9); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 9); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 73: + return jjMoveStringLiteralDfa11_0(active0, 0x20000000ULL, active1, 0L); + case 82: + return jjMoveStringLiteralDfa11_0(active0, 0x110000ULL, active1, 0L); + case 85: + return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0x4000000ULL); + case 105: + return jjMoveStringLiteralDfa11_0(active0, 0x20000000ULL, active1, 0L); + case 114: + return jjMoveStringLiteralDfa11_0(active0, 0x110000ULL, active1, 0L); + case 117: + return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0x4000000ULL); + default : + break; + } + return jjMoveNfa_0(3, 10); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa11_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 10); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 10); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0x4000000ULL); + case 69: + if ((active0 & 0x10000ULL) != 0L) + { + jjmatchedKind = 16; + jjmatchedPos = 11; + } + return jjMoveStringLiteralDfa12_0(active0, 0x100000ULL, active1, 0L); + case 79: + return jjMoveStringLiteralDfa12_0(active0, 0x20000000ULL, active1, 0L); + case 97: + return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0x4000000ULL); + case 101: + if ((active0 & 0x10000ULL) != 0L) + { + jjmatchedKind = 16; + jjmatchedPos = 11; + } + return jjMoveStringLiteralDfa12_0(active0, 0x100000ULL, active1, 0L); + case 111: + return jjMoveStringLiteralDfa12_0(active0, 0x20000000ULL, active1, 0L); + default : + break; + } + return jjMoveNfa_0(3, 11); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa12_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 11); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 11); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 78: + if ((active0 & 0x20000000ULL) != 0L) + { + jjmatchedKind = 29; + jjmatchedPos = 12; + } + return jjMoveStringLiteralDfa13_0(active0, 0x100000ULL, active1, 0L); + case 82: + return jjMoveStringLiteralDfa13_0(active0, 0L, active1, 0x4000000ULL); + case 110: + if ((active0 & 0x20000000ULL) != 0L) + { + jjmatchedKind = 29; + jjmatchedPos = 12; + } + return jjMoveStringLiteralDfa13_0(active0, 0x100000ULL, active1, 0L); + case 114: + return jjMoveStringLiteralDfa13_0(active0, 0L, active1, 0x4000000ULL); + default : + break; + } + return jjMoveNfa_0(3, 12); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa13_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 12); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 12); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa14_0(active0, 0L, active1, 0x4000000ULL); + case 84: + return jjMoveStringLiteralDfa14_0(active0, 0x100000ULL, active1, 0L); + case 97: + return jjMoveStringLiteralDfa14_0(active0, 0L, active1, 0x4000000ULL); + case 116: + return jjMoveStringLiteralDfa14_0(active0, 0x100000ULL, active1, 0L); + default : + break; + } + return jjMoveNfa_0(3, 13); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa14_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 13); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 13); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 69: + return jjMoveStringLiteralDfa15_0(active0, 0x100000ULL, active1, 0L); + case 78: + return jjMoveStringLiteralDfa15_0(active0, 0L, active1, 0x4000000ULL); + case 101: + return jjMoveStringLiteralDfa15_0(active0, 0x100000ULL, active1, 0L); + case 110: + return jjMoveStringLiteralDfa15_0(active0, 0L, active1, 0x4000000ULL); + default : + break; + } + return jjMoveNfa_0(3, 14); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa15_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 14); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 14); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 69: + if ((active0 & 0x100000ULL) != 0L) + { + jjmatchedKind = 20; + jjmatchedPos = 15; + } + break; + case 84: + return jjMoveStringLiteralDfa16_0(active0, 0L, active1, 0x4000000ULL); + case 101: + if ((active0 & 0x100000ULL) != 0L) + { + jjmatchedKind = 20; + jjmatchedPos = 15; + } + break; + case 116: + return jjMoveStringLiteralDfa16_0(active0, 0L, active1, 0x4000000ULL); + default : + break; + } + return jjMoveNfa_0(3, 15); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa16_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1){ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 15); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 15); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 69: + return jjMoveStringLiteralDfa17_0(active1, 0x4000000ULL); + case 101: + return jjMoveStringLiteralDfa17_0(active1, 0x4000000ULL); + default : + break; + } + return jjMoveNfa_0(3, 16); +} + + int VhdlParserTokenManager::jjMoveStringLiteralDfa17_0(unsigned long long old1, unsigned long long active1){ + if (((active1 &= old1)) == 0L) + return jjMoveNfa_0(3, 16); + if (input_stream->endOfInput()) { + return jjMoveNfa_0(3, 16); + } + curChar = input_stream->readChar(); + switch(curChar) + { + case 69: + if ((active1 & 0x4000000ULL) != 0L) + { + jjmatchedKind = 90; + jjmatchedPos = 17; + } + break; + case 101: + if ((active1 & 0x4000000ULL) != 0L) + { + jjmatchedKind = 90; + jjmatchedPos = 17; + } + break; + default : + break; + } + return jjMoveNfa_0(3, 17); +} + +int VhdlParserTokenManager::jjMoveNfa_0(int startState, int curPos){ + int strKind = jjmatchedKind; + int strPos = jjmatchedPos; + int seenUpto; + input_stream->backup(seenUpto = curPos + 1); + assert(!input_stream->endOfInput()); + curChar = input_stream->readChar(); + curPos = 0; + int startsAt = 0; + jjnewStateCnt = 65; + int i = 1; + jjstateSet[0] = startState; + int kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + unsigned long long l = 1ULL << curChar; + if (l == 1); + do + { + switch(jjstateSet[--i]) + { + case 3: + if ((0x3ff000000000000ULL & l) != 0L) + { + if (kind > 164) + kind = 164; + { jjCheckNAddStates(0, 8); } + } + else if (curChar == 47) + { jjAddStates(9, 10); } + else if (curChar == 45) + { jjCheckNAddTwoStates(21, 27); } + else if (curChar == 39) + jjstateSet[jjnewStateCnt++] = 10; + else if (curChar == 34) + { jjCheckNAddTwoStates(1, 2); } + if ((0x3ff000000000000ULL & l) != 0L) + { + if (kind > 170) + kind = 170; + { jjCheckNAdd(12); } + } + break; + case 0: + if (curChar == 34) + { jjCheckNAddTwoStates(1, 2); } + break; + case 1: + if ((0xfffffffb00000200ULL & l) != 0L) + { jjCheckNAddTwoStates(1, 2); } + break; + case 2: + if (curChar != 34) + break; + if (kind > 165) + kind = 165; + jjstateSet[jjnewStateCnt++] = 0; + break; + case 5: + if ((0x3ff000000000000ULL & l) == 0L) + break; + if (kind > 166) + kind = 166; + { jjAddStates(11, 12); } + break; + case 7: + if ((0xfffffffb00000200ULL & l) != 0L) + { jjAddStates(13, 14); } + break; + case 9: + if (curChar == 39) + jjstateSet[jjnewStateCnt++] = 10; + break; + case 10: + if ((0xfffffffb00000200ULL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 11; + break; + case 11: + if (curChar == 39 && kind > 168) + kind = 168; + break; + case 12: + if ((0x3ff000000000000ULL & l) == 0L) + break; + if (kind > 170) + kind = 170; + { jjCheckNAdd(12); } + break; + case 14: + if (curChar == 34) + { jjCheckNAddTwoStates(15, 16); } + break; + case 15: + if ((0x3ff000000000000ULL & l) != 0L) + { jjCheckNAddTwoStates(15, 16); } + break; + case 16: + if (curChar == 34 && kind > 178) + kind = 178; + break; + case 18: + if ((0xfffffffb00000200ULL & l) == 0L) + break; + if (kind > 185) + kind = 185; + jjstateSet[jjnewStateCnt++] = 18; + break; + case 19: + if (curChar == 45) + { jjCheckNAddTwoStates(21, 27); } + break; + case 20: + if (curChar != 33) + break; + if (kind > 6) + kind = 6; + { jjCheckNAddStates(15, 18); } + break; + case 21: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 20; + break; + case 22: + if (curChar == 45) + { jjCheckNAdd(21); } + break; + case 23: + if ((0xffffffffffffdbffULL & l) == 0L) + break; + if (kind > 6) + kind = 6; + { jjCheckNAddStates(15, 18); } + break; + case 24: + if ((0x2400ULL & l) == 0L) + break; + if (kind > 6) + kind = 6; + { jjCheckNAdd(22); } + break; + case 25: + if (curChar != 10) + break; + if (kind > 6) + kind = 6; + { jjCheckNAdd(22); } + break; + case 26: + if (curChar == 13) + jjstateSet[jjnewStateCnt++] = 25; + break; + case 27: + if (curChar != 45) + break; + if (kind > 7) + kind = 7; + { jjCheckNAddStates(19, 21); } + break; + case 28: + if ((0xffffffffffffdbffULL & l) == 0L) + break; + if (kind > 7) + kind = 7; + { jjCheckNAddStates(19, 21); } + break; + case 29: + if ((0x2400ULL & l) != 0L && kind > 7) + kind = 7; + break; + case 30: + if (curChar == 10 && kind > 7) + kind = 7; + break; + case 31: + if (curChar == 13) + jjstateSet[jjnewStateCnt++] = 30; + break; + case 32: + if (curChar == 47) + { jjAddStates(9, 10); } + break; + case 33: + if (curChar == 33) + { jjCheckNAddTwoStates(34, 36); } + break; + case 34: + { jjCheckNAddTwoStates(34, 36); } + break; + case 35: + if (curChar == 47 && kind > 8) + kind = 8; + break; + case 36: + if (curChar == 42) + jjstateSet[jjnewStateCnt++] = 35; + break; + case 37: + if (curChar == 42) + jjstateSet[jjnewStateCnt++] = 33; + break; + case 38: + if (curChar == 42) + { jjCheckNAddTwoStates(39, 41); } + break; + case 39: + { jjCheckNAddTwoStates(39, 41); } + break; + case 40: + if (curChar == 47 && kind > 9) + kind = 9; + break; + case 41: + if (curChar == 42) + jjstateSet[jjnewStateCnt++] = 40; + break; + case 42: + if ((0x3ff000000000000ULL & l) == 0L) + break; + if (kind > 164) + kind = 164; + { jjCheckNAddStates(0, 8); } + break; + case 44: + if ((0x3ff000000000000ULL & l) == 0L) + break; + if (kind > 164) + kind = 164; + { jjCheckNAddTwoStates(43, 44); } + break; + case 46: + if ((0x3ff000000000000ULL & l) == 0L) + break; + if (kind > 169) + kind = 169; + { jjCheckNAddStates(22, 25); } + break; + case 47: + if (curChar == 46) + { jjCheckNAdd(48); } + break; + case 48: + if ((0x3ff000000000000ULL & l) == 0L) + break; + if (kind > 169) + kind = 169; + { jjCheckNAddStates(26, 28); } + break; + case 51: + if ((0x280000000000ULL & l) != 0L) + { jjCheckNAdd(52); } + break; + case 52: + if ((0x3ff000000000000ULL & l) == 0L) + break; + if (kind > 169) + kind = 169; + { jjCheckNAddTwoStates(53, 52); } + break; + case 55: + if ((0x3ff000000000000ULL & l) != 0L) + { jjCheckNAddStates(29, 31); } + break; + case 56: + if (curChar == 35) + { jjCheckNAdd(57); } + break; + case 57: + if ((0x3ff000000000000ULL & l) != 0L) + { jjCheckNAddStates(32, 34); } + break; + case 58: + if (curChar == 46) + { jjCheckNAdd(59); } + break; + case 59: + if ((0x3ff000000000000ULL & l) != 0L) + { jjCheckNAddTwoStates(59, 60); } + break; + case 60: + if (curChar != 35) + break; + if (kind > 171) + kind = 171; + jjstateSet[jjnewStateCnt++] = 61; + break; + case 62: + if ((0x280000000000ULL & l) != 0L) + { jjCheckNAdd(63); } + break; + case 63: + if ((0x3ff000000000000ULL & l) == 0L) + break; + if (kind > 171) + kind = 171; + { jjCheckNAddTwoStates(64, 63); } + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + unsigned long long l = 1ULL << (curChar & 077); + if (l == 1); + do + { + switch(jjstateSet[--i]) + { + case 3: + if ((0x7fffffe07fffffeULL & l) != 0L) + { + if (kind > 170) + kind = 170; + { jjCheckNAdd(12); } + } + else if (curChar == 96) + { jjCheckNAdd(18); } + else if (curChar == 92) + { jjCheckNAddTwoStates(7, 8); } + if ((0x7fffffe07fffffeULL & l) != 0L) + { + if (kind > 166) + kind = 166; + { jjCheckNAddTwoStates(4, 5); } + } + if ((0x100800401008004ULL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 14; + break; + case 1: + if ((0x7fffffffffffffffULL & l) != 0L) + { jjAddStates(35, 36); } + break; + case 4: + if (curChar == 95) + { jjCheckNAddTwoStates(4, 5); } + break; + case 5: + if ((0x7fffffe07fffffeULL & l) == 0L) + break; + if (kind > 166) + kind = 166; + { jjCheckNAddTwoStates(4, 5); } + break; + case 6: + if (curChar == 92) + { jjCheckNAddTwoStates(7, 8); } + break; + case 7: + if ((0x7fffffffffffffffULL & l) != 0L) + { jjCheckNAddTwoStates(7, 8); } + break; + case 8: + if (curChar == 92 && kind > 167) + kind = 167; + break; + case 10: + if ((0x7fffffffffffffffULL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 11; + break; + case 12: + if ((0x7fffffe07fffffeULL & l) == 0L) + break; + if (kind > 170) + kind = 170; + { jjCheckNAdd(12); } + break; + case 13: + if ((0x100800401008004ULL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 14; + break; + case 15: + if ((0x7fffffe07fffffeULL & l) != 0L) + { jjAddStates(37, 38); } + break; + case 17: + if (curChar == 96) + { jjCheckNAdd(18); } + break; + case 18: + if ((0x7fffffffffffffffULL & l) == 0L) + break; + if (kind > 185) + kind = 185; + { jjCheckNAdd(18); } + break; + case 23: + if (kind > 6) + kind = 6; + { jjAddStates(15, 18); } + break; + case 28: + if (kind > 7) + kind = 7; + { jjAddStates(19, 21); } + break; + case 34: + { jjAddStates(39, 40); } + break; + case 39: + { jjAddStates(41, 42); } + break; + case 43: + if (curChar == 95) + jjstateSet[jjnewStateCnt++] = 44; + break; + case 45: + if (curChar == 95) + jjstateSet[jjnewStateCnt++] = 46; + break; + case 49: + if (curChar == 95) + jjstateSet[jjnewStateCnt++] = 48; + break; + case 50: + if ((0x2000000020ULL & l) != 0L) + { jjCheckNAddTwoStates(51, 52); } + break; + case 53: + if (curChar == 95) + { jjCheckNAdd(52); } + break; + case 54: + if (curChar == 95) + jjstateSet[jjnewStateCnt++] = 55; + break; + case 57: + if ((0x7fffffe07fffffeULL & l) != 0L) + { jjCheckNAddStates(32, 34); } + break; + case 59: + if ((0x7fffffe07fffffeULL & l) != 0L) + { jjCheckNAddTwoStates(59, 60); } + break; + case 61: + if ((0x2000000020ULL & l) != 0L) + { jjCheckNAddTwoStates(62, 63); } + break; + case 64: + if (curChar == 95) + { jjCheckNAdd(63); } + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (curChar >> 8); + int i1 = hiByte >> 6; + unsigned long long l1 = 1ULL << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + unsigned long long l2 = 1ULL << (curChar & 077); + do + { + switch(jjstateSet[--i]) + { + case 1: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { jjAddStates(35, 36); } + break; + case 7: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { jjAddStates(13, 14); } + break; + case 10: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjstateSet[jjnewStateCnt++] = 11; + break; + case 18: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 185) + kind = 185; + jjstateSet[jjnewStateCnt++] = 18; + break; + case 23: + if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) + break; + if (kind > 6) + kind = 6; + { jjAddStates(15, 18); } + break; + case 28: + if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) + break; + if (kind > 7) + kind = 7; + { jjAddStates(19, 21); } + break; + case 34: + if (jjCanMove_1(hiByte, i1, i2, l1, l2)) + { jjAddStates(39, 40); } + break; + case 39: + if (jjCanMove_1(hiByte, i1, i2, l1, l2)) + { jjAddStates(41, 42); } + break; + default : if (i1 == 0 || l1 == 0 || i2 == 0 || l2 == 0) break; else break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt), (jjnewStateCnt = startsAt), (i == (startsAt = 65 - startsAt))) + break; + if (input_stream->endOfInput()) { break; } + curChar = input_stream->readChar(); + } + if (jjmatchedPos > strPos) + return curPos; + + int toRet = MAX(curPos, seenUpto); + + if (curPos < toRet) + for (i = toRet - MIN(curPos, seenUpto); i-- > 0; ) + { assert(!input_stream->endOfInput()); + curChar = input_stream->readChar(); } + + if (jjmatchedPos < strPos) + { + jjmatchedKind = strKind; + jjmatchedPos = strPos; + } + else if (jjmatchedPos == strPos && jjmatchedKind > strKind) + jjmatchedKind = strKind; + + return toRet; +} + +bool VhdlParserTokenManager::jjCanMove_0(int hiByte, int i1, int i2, unsigned long long l1, unsigned long long l2){ + switch(hiByte) + { + case 0: + return ((jjbitVec0[i2] & l2) != 0L); + default : + return false; + } +} + +bool VhdlParserTokenManager::jjCanMove_1(int hiByte, int i1, int i2, unsigned long long l1, unsigned long long l2){ + switch(hiByte) + { + case 0: + return ((jjbitVec3[i2] & l2) != 0L); + default : + if ((jjbitVec1[i1] & l1) != 0L) + return true; + return false; + } +} + +/** Token literal values. */ + +Token * VhdlParserTokenManager::jjFillToken(){ + Token *t; + JAVACC_STRING_TYPE curTokenImage; + int beginLine; + int endLine; + int beginColumn; + int endColumn; + JAVACC_STRING_TYPE im = jjstrLiteralImages[jjmatchedKind]; + curTokenImage = (im.length() == 0) ? input_stream->GetImage() : im; + if (input_stream->getTrackLineColumn()) { + beginLine = input_stream->getBeginLine(); + beginColumn = input_stream->getBeginColumn(); + endLine = input_stream->getEndLine(); + endColumn = input_stream->getEndColumn(); + } + t = Token::newToken(jjmatchedKind, curTokenImage); + t->specialToken = NULL; + t->next = NULL; + + if (input_stream->getTrackLineColumn()) { + t->beginLine = beginLine; + t->endLine = endLine; + t->beginColumn = beginColumn; + t->endColumn = endColumn; + } + + return t; +} +const int defaultLexState = 0; +/** Get the next Token. */ + +Token * VhdlParserTokenManager::getNextToken(){ + Token *matchedToken; + int curPos = 0; + + for (;;) + { + EOFLoop: + if (input_stream->endOfInput()) + { + jjmatchedKind = 0; + jjmatchedPos = -1; + matchedToken = jjFillToken(); + return matchedToken; + } + curChar = input_stream->BeginToken(); + image = jjimage; + image.clear(); + jjimageLen = 0; + + for (;;) + { + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_0(); + if (jjmatchedKind != 0x7fffffff) + { + if (jjmatchedPos + 1 < curPos) + input_stream->backup(curPos - jjmatchedPos - 1); + if ((jjtoToken[jjmatchedKind >> 6] & (1ULL << (jjmatchedKind & 077))) != 0L) + { + matchedToken = jjFillToken(); + TokenLexicalActions(matchedToken); + return matchedToken; + } + else if ((jjtoSkip[jjmatchedKind >> 6] & (1ULL << (jjmatchedKind & 077))) != 0L) + { + SkipLexicalActions(NULL); + goto EOFLoop; + } + MoreLexicalActions(); + curPos = 0; + jjmatchedKind = 0x7fffffff; + if (!input_stream->endOfInput()) { + curChar = input_stream->readChar(); + continue; + } + } + int error_line = input_stream->getEndLine(); + int error_column = input_stream->getEndColumn(); + JAVACC_STRING_TYPE error_after; + bool EOFSeen = false; + if (input_stream->endOfInput()) { + EOFSeen = true; + error_after = curPos <= 1 ? EMPTY : input_stream->GetImage(); + if (curChar == '\n' || curChar == '\r') { + error_line++; + error_column = 0; + } + else + error_column++; + } + if (!EOFSeen) { + error_after = curPos <= 1 ? EMPTY : input_stream->GetImage(); + } + lexicalError(); + } + } +} + + +void VhdlParserTokenManager::SkipLexicalActions(Token *matchedToken){ + switch(jjmatchedKind) + { + case 3 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::lineCount(); + break; + default : + break; + } +} + +void VhdlParserTokenManager::MoreLexicalActions(){ + jjimageLen += (lengthOfMatch = jjmatchedPos + 1); + switch(jjmatchedKind) + { + case 6 : + image.append(input_stream->GetSuffix(jjimageLen)); + jjimageLen = 0; + ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE);image.clear(); + break; + case 7 : + image.append(input_stream->GetSuffix(jjimageLen)); + jjimageLen = 0; + ::vhdl::parser::VhdlParser::lineCount(image.data());image.clear(); + break; + case 8 : + image.append(input_stream->GetSuffix(jjimageLen)); + jjimageLen = 0; + ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE);image.clear(); + break; + case 9 : + image.append(input_stream->GetSuffix(jjimageLen)); + jjimageLen = 0; + ::vhdl::parser::VhdlParser::lineCount(image.data());image.clear(); + break; + default : + break; + } +} + +void VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){ + switch(jjmatchedKind) + { + case 16 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(ARCHITECTURE_T); + break; + case 17 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(ARRAY_T); + break; + case 21 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T); + break; + case 24 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(BODY_T); + break; + case 27 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(COMPONENT_T); + break; + case 29 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(CONFIGURATION_T); + break; + case 30 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(CONSTANT_T); + break; + case 31 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(CONTEXT_T); + break; + case 38 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(END_T); + break; + case 39 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(ENTITY_T); + break; + case 42 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(FILE_T); + break; + case 45 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(FUNCTION_T); + break; + case 48 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(GROUP_T); + break; + case 57 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(LIBRARY_T); + break; + case 75 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(PACKAGE_T); + break; + case 77 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(PORT_T); + break; + case 79 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(PROCEDURE_T); + break; + case 80 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(PROCESS_T); + break; + case 85 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(RECORD_T); + break; + case 99 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(SIGNAL_T); + break; + case 106 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(SUBTYPE_T); + break; + case 110 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(TYPE_T); + break; + case 112 : + image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + ::vhdl::parser::VhdlParser::setLineParsed(UNITS_T); + break; + default : + break; + } +} + /** Reinitialise parser. */ + void VhdlParserTokenManager::ReInit(JAVACC_CHARSTREAM *stream, int lexState, VhdlParser *parserArg) { + if (input_stream) delete input_stream; + jjmatchedPos = jjnewStateCnt = 0; + curLexState = lexState; + input_stream = stream; + ReInitRounds(); + debugStream = stdout; // init + SwitchTo(lexState); + parser = parserArg; + } + + void VhdlParserTokenManager::ReInitRounds() { + int i; + jjround = 0x80000001; + for (i = 65; i-- > 0;) + jjrounds[i] = 0x80000000; + } + + /** Switch to specified lex state. */ + void VhdlParserTokenManager::SwitchTo(int lexState) { + if (lexState >= 1 || lexState < 0) + assert(false); + //throw 1;//new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE); + else + curLexState = lexState; + } + + /** Constructor. */ + VhdlParserTokenManager::VhdlParserTokenManager (JAVACC_CHARSTREAM *stream, int lexState, VhdlParser *parserArg) + { + input_stream = NULL; + ReInit(stream, lexState, parserArg); + } + + // Destructor + VhdlParserTokenManager::~VhdlParserTokenManager () { + if (input_stream) delete input_stream; + } +} +} diff --git a/vhdlparser/VhdlParserTokenManager.h b/vhdlparser/VhdlParserTokenManager.h new file mode 100644 index 0000000..68eb51b --- /dev/null +++ b/vhdlparser/VhdlParserTokenManager.h @@ -0,0 +1,133 @@ +#ifndef VHDLPARSERTOKENMANAGER_H +#define VHDLPARSERTOKENMANAGER_H +#include "JavaCC.h" +#include "CharStream.h" +#include "Token.h" +#include "TokenManager.h" +#include "VhdlParserConstants.h" +#include "VhdlParser.h" + +namespace vhdl { +namespace parser { +class VhdlParser; + +/** Token Manager. */ +class VhdlParserTokenManager : public TokenManager { + public: + + /** Debug output. */ + FILE *debugStream; + /** Set debug output. */ + +void setDebugStream(FILE *ds); + + int jjStopAtPos(int pos, int kind); + + int jjMoveStringLiteralDfa0_0(); + + int jjMoveStringLiteralDfa1_0(unsigned long long active0, unsigned long long active1, unsigned long long active2); + + int jjMoveStringLiteralDfa2_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1, unsigned long long old2, unsigned long long active2); + + int jjMoveStringLiteralDfa3_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1, unsigned long long old2, unsigned long long active2); + + int jjMoveStringLiteralDfa4_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa5_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa6_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa7_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa8_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa9_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa10_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa11_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa12_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa13_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa14_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa15_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa16_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1); + + int jjMoveStringLiteralDfa17_0(unsigned long long old1, unsigned long long active1); + +int jjMoveNfa_0(int startState, int curPos); + +bool jjCanMove_0(int hiByte, int i1, int i2, unsigned long long l1, unsigned long long l2); + +bool jjCanMove_1(int hiByte, int i1, int i2, unsigned long long l1, unsigned long long l2); + +Token * jjFillToken(); + +public: int curLexState; +public: int jjnewStateCnt; +public: int jjround; +public: int jjmatchedPos; +public: int jjmatchedKind; + + +Token * getNextToken(); + +void SkipLexicalActions(Token *matchedToken); + +void MoreLexicalActions(); + +void TokenLexicalActions(Token *matchedToken); +#define jjCheckNAdd(state)\ +{\ + if (jjrounds[state] != jjround)\ + {\ + jjstateSet[jjnewStateCnt++] = state;\ + jjrounds[state] = jjround;\ + }\ +} +#define jjAddStates(start, end)\ +{\ + for (int x = start; x <= end; x++) {\ + jjstateSet[jjnewStateCnt++] = jjnextStates[x];\ + } /*while (start++ != end);*/\ +} +#define jjCheckNAddTwoStates(state1, state2)\ +{\ + jjCheckNAdd(state1);\ + jjCheckNAdd(state2);\ +} + +#define jjCheckNAddStates(start, end)\ +{\ + for (int x = start; x <= end; x++) {\ + jjCheckNAdd(jjnextStates[x]);\ + } /*while (start++ != end);*/\ +} + +#ifndef JAVACC_CHARSTREAM +#define JAVACC_CHARSTREAM CharStream +#endif + private: VhdlParser*parser; + private: void ReInitRounds(); + public: VhdlParserTokenManager(JAVACC_CHARSTREAM *stream, int lexState = 0, VhdlParser *parserArg = NULL); + public: virtual ~VhdlParserTokenManager(); + void ReInit(JAVACC_CHARSTREAM *stream, int lexState = 0, VhdlParser *parserArg = NULL); + void SwitchTo(int lexState); + const JAVACC_SIMPLE_STRING jjKindsForBitVector(int i, unsigned long long vec); + const JAVACC_SIMPLE_STRING jjKindsForStateVector(int lexState, int vec[], int start, int end); + JAVACC_CHARSTREAM *input_stream; + int jjrounds[65]; + int jjstateSet[2 * 65]; + JAVACC_STRING_TYPE jjimage; + JAVACC_STRING_TYPE image; + int jjimageLen; + int lengthOfMatch; + JAVACC_CHAR_TYPE curChar; +}; +} +} +#endif diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj new file mode 100644 index 0000000..daeceed --- /dev/null +++ b/vhdlparser/vhdlparser.jj @@ -0,0 +1,2758 @@ +/****************************************************************************** + * + * Copyright (C) 2014 by M. Kreis + * + * 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. + * + */ +options { + JAVA_UNICODE_ESCAPE = true; + OUTPUT_LANGUAGE = "c++"; + NAMESPACE = "vhdl::parser"; + STATIC=false; + PARSER_INCLUDES="VhdlParser.h"; + TOKEN_MANAGER_INCLUDES="VhdlParser.h"; + + //OUTPUT_DIRECTORY = "."; + //DEBUG_PARSER=true; + //DEBUG_LOOKAHEAD=true; + + } + +PARSER_BEGIN(VhdlParser) + +typedef unsigned long long uint64; + + +static Entry* current_root; +static Entry* tempEntry; +static Entry* lastEntity ; +static Entry* lastCompound ; +static Entry* current; +static QCString compSpec; +static QCString currName; +static int levelCounter; +static QCString confName; +static QCString genLabels; +static QCString lab; +static QCString forL; +static int param_sec ; +static int parse_sec; +static int currP; +static Entry* currentCompound; + +//---------------------------------------- + +static void setLineParsed(int tok); +static int getLine(int tok); +static int getLine(); +static void lineCount(const char*); +static void lineCount(); +static void addProto(const char *s1,const char *s2,const char *s3,const char *s4,const char *s5,const char *s6); +static void addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf); +static void createFunction(const char *impure,uint64 spec,const char *fname); +static void addVhdlType(const char *n,int startLine,int section, uint64 spec,const char* args,const char* type,Protection prot); +static void addCompInst(char *n, char* instName, char* comp,int iLine); +static void handleCommentBlock(const char* doc,bool brief); +static void initEntry(Entry *e); +static void newEntry(); +static bool isFuncProcProced(); +static void pushLabel(QCString &,QCString&); +static QCString popLabel(QCString & q); +static bool addLibUseClause(const QCString &type); +static void mapLibPackage( Entry* root); +static void createFlow(); +static void error_skipto(int kind); + +PARSER_END(VhdlParser) + +SKIP : +{ + " " +| "\t" +| "\n" {::vhdl::parser::VhdlParser::lineCount();} +| "\r" +} + +MORE : +{ + // VHDL comment -- ...... + // VHDL doxygen comment --! .... + <#DOXYGEN_VHDL_COMMENT: "--!" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> + | )+ > {::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE);image.clear();} + | { ::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();} +} + +// VHDL 2008 comment /* .... */ +// VHDL 2008 doxygen comment /*! .... */ +MORE : +{ + {::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE);image.clear();} + | {::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();} +} + +/* KEYWORDS */ + +TOKEN [IGNORE_CASE] : +{ + +| +| +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(ARCHITECTURE_T);} +| {::vhdl::parser::VhdlParser::setLineParsed(ARRAY_T);} +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);} +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(BODY_T);} +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(COMPONENT_T);} +| +| {::vhdl::parser::VhdlParser::setLineParsed(CONFIGURATION_T);} +| {::vhdl::parser::VhdlParser::setLineParsed(CONSTANT_T);} +| {::vhdl::parser::VhdlParser::setLineParsed(CONTEXT_T);} +| +| +| +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(END_T);} +| {::vhdl::parser::VhdlParser::setLineParsed(ENTITY_T);} +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(FILE_T);} +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(FUNCTION_T);} +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(GROUP_T);} +| +| +| +| +| +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(LIBRARY_T);} +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(PACKAGE_T);} +| +| {::vhdl::parser::VhdlParser::setLineParsed(PORT_T);} +| +| {::vhdl::parser::VhdlParser::setLineParsed(PROCEDURE_T);} +| {::vhdl::parser::VhdlParser::setLineParsed(PROCESS_T);} +| +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(RECORD_T);} +| +| +| +| +| +| +| +| +| +| +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(SIGNAL_T);} +| +| +| +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(SUBTYPE_T);} +| +| +| +| {::vhdl::parser::VhdlParser::setLineParsed(TYPE_T);} +| +| {::vhdl::parser::VhdlParser::setLineParsed(UNITS_T);} +| +| +| +| +| +| +| +| +| +| +| +| +} + +/* OPERATORS */ + +TOKEN : +{ + < AMPERSAND_T: "&" > +| < APOSTROPHE_T: "'" > +| < LPAREN_T: "(" > +| < RPAREN_T: ")" > +| < DOUBLEMULT_T: "**" > +| < MULT_T: "*" > +| < PLUS_T: "+" > +| < MINUS_T: "-" > +| < COMMA_T: "," > +| < VARASSIGN_T: ":=" > +| < COLON_T: ":" > +| < SEMI_T: ";" > +| < LESSTHAN_T: "<=" > +| < GREATERTHAN_T: ">=" > +| < LT_T: "<" > +| < GT_T: ">" > +| < EQU_T: "=" > +| < NOTEQU_T: "/=" > +| < ARROW_T: "=>" > +| < BOX_T: "<>" > +| < SLSL_T: "<<" > +| < RSRS_T: ">>" > +| < QQ_T: "??" > +| < QGT_T: "?>=" > +| < QLT_T: "?<=" > +| < QG_T: "?>" > +| < QL_T: "?<" > +| < QEQU_T: "?=" > +| < QNEQU_T: "?/=" > +| < Q_T: "?" > +| < BAR_T: "|" > +| +| < SLASH_T: "/" > +| < AT_T: "@" > +| < NEG_T: "^" > +| < LBRACKET_T: "[" > +| < RBRACKET_T: "]" > +| < LBRACE: "{" > +| < RBRACE: "}" > + +} + +TOKEN: +{ + ((["_"])? ())* > + | )*) "\"")+ > + | ( (["_"])* )*) > + | )*["\\"] ) > + | ["'"]) > + | (["."])? ()? ) > + | ( )* > + | ["#"](["."] )? ["#"] ()? > + | <#EXPONENT: (["e","E"] (["+","-"])? ()+) > + | < #BASIC_GRAPHIC_CHARACTER: (|||) > + | < #GRAPHIC_CHARACTER: ( || ) > + | < #LETTER_OR_DIGIT: ( | ) > + | < #LETTER: (|) > + | < #UPPER_CASE_LETTER: ["A"-"Z"] > + | ["\""]()* ["\""] > + | <#BASE_SPECIFIER:["B","O","X","b","o","x"]> + | < #DIGIT: ["0"-"9"] > + | < #SPECIAL_CHARACTER: ["#","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","_","|"] > + | < #OTHER_SPECIAL_CHARACTER: ["%","!","$","@","?","[","\\","]","^","`","{","}","~","\u00A0"-"\u00FF"]> + | < #SPACE_CHARACTER: [" ","\t"] > + | < #LOWER_CASE_LETTER: ["a"-"z"] > + | )+ > + + +} + +QCString abstract_literal() : +{Token *tok;} +{ + tok= { return tok->image.c_str(); } + | tok= { return tok->image.c_str(); } + | tok= { return tok->image.c_str(); } +} + +QCString access_type_definition() : +{Token *tok;QCString str,str1;} +{ +tok= str1=subtype_indication() {str=tok->image.c_str(); return str+str1;} +} + +QCString actual_designator() : +{QCString str;Token *t;} +{ +t= { return t->image.c_str(); } +| +LOOKAHEAD(expression()) + str=expression() { return str; } +| + LOOKAHEAD(name()) + str=name() { return str; } +} + +QCString actual_parameter_part() : +{QCString s;} +{ + s=association_list() { return s;} +} + +QCString actual_part() : +{QCString s,s1;} +{ + LOOKAHEAD(actual_designator()) + s=actual_designator() { return s;} + | + { return "<>";} + | + s=name() s1=actual_designator() {s+="(";s+=s1+")";return s;} + + } + +QCString adding_operator () : +{} +{ + { return "+";} + | { return "-";} + | { return "&";} +} + +QCString aggregate() : {QCString s,s1,s2;} +{ + s=element_association() (LOOKAHEAD(1) s1=element_association(){s+=","+s1;})* { return s;} +} + +QCString alias_declaration() : {QCString s,s1,s2;} +{ + s2=alias_designator() + [ { s+=":"; } s1=subtype_indication() { s+=s1; }] + { s+=" is "; } s1=name() {s+=s1;} [s1=signature() {s+=s1;}] + +{ + addVhdlType(s2.data(),getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data(),Public); + + return s2+" "+s+";"; +} + } + +QCString alias_designator() : {Token *tok=0;QCString s;} +{ + s=identifier() { return s;} + | tok= { return tok->image.c_str(); } + | s=operator_symbol() { return s; } +} + +void allocator() :{} +{ + LOOKAHEAD(3) + qualified_expression() + | subtype_indication() +} + +void architecture_body() : {QCString s,s1;} +{ + + s=identifier() s1=name() + { + QCString t=s1+"::"+s; + genLabels.resize(0); + pushLabel(genLabels,s1); + lastCompound=current; + addVhdlType(t,getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private); + } + try{ + architecture_declarative_part() + }catch(...){error_skipto(BEGIN_T);} + + architecture_statement_part() + [] [name()] + { lastEntity=0;lastCompound=0; genLabels.resize(0); } +} + +void architecture_declarative_part() : {} +{ + (block_declarative_item() )* +} + +void architecture_statement_part() : {} +{ + (concurrent_statement())* +} + +QCString array_type_definition (): { QCString s;} +{ + + LOOKAHEAD(unconstraint_array_definition()) + + s=unconstraint_array_definition() {return s;} + | s=constraint_array_definition() {return s;} + +} + +QCString assertion() : {QCString s,s1,s2;Token *t=0;Token *t1=0;} +{ + s=condition() [ t= s1=expression() ] [t1= s2=expression()] + { + s.prepend("assert "); + if(t) s1.prepend(" report "); + if(t1) s2.prepend(" report "); + return s+s1+s2; + } +} + +QCString assertion_statement() : {QCString s,s1,s2;Token *t=0;} +{ + [ s=label() t= ] s1=assertion() + { + if(t) s+=":"; + return s+s1+";"; + } +} +QCString association_element() : {} +{ + [LOOKAHEAD(formal_part() ) formal_part() ] actual_part() + { return " ";} +} + +QCString association_list (): {QCString s,s1;} +{ +s=association_element() ( s1=association_element() { s+=","+s1; })* { return s; } +} + +QCString attribute_declaration() : {QCString s,s1;} +{ + s=identifier() s1=type_mark() + { + addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public); + return " attribute "+s+":"+s1+";"; + } + } + +QCString attribute_designator (): {QCString s;Token *tok;} +{ + s=identifier() { return s;} + | tok= { return tok->image.c_str(); } +} + +QCString attribute_name (): {QCString s,s1;} +{ + s=identifier() s1=name(){ s+="'"+s1; }[LOOKAHEAD(1)s1=expression() {s+"("+s1+")";}] { return s; } +} + + +QCString attribute_specification(): {QCString s,s1,s2;} +{ + s=attribute_designator() s1=entity_specification() s2=expression() + { + QCString t= s1+" is "+s2; + addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public); + return " attribute "+s+" of "+s1+ " is "+s2+";"; + } +} + +QCString base() : {Token *tok;} +{ + tok= { return tok->image.c_str();} +} + +QCString base_specifier (): {Token *tok;} +{ + tok= { return tok->image.c_str();} +} + +QCString base_unit_declaration() : +{QCString s;} +{ + s=identifier() { return s; } +} + +QCString based_integer() : {Token *tok;} +{ + tok= { return tok->image.c_str();} +} + +QCString based_literal(): {Token *tok;} +{ + tok= { return tok->image.c_str();} +} + +QCString basic_identifier() : {Token *tok;} +{ + tok= { return tok->image.c_str();} +} + +void binding_indication() : {} +{ + [ entity_aspect() ] + [ generic_map_aspect() ] + [ port_map_aspect() ] +} + +QCString bit_string_literal (): {Token *tok;} +{ + tok= { return tok->image.c_str();} +} + + +QCString bit_value() : {Token *tok;} +{ + tok= { return tok->image.c_str();} +} + +void block_configuration() : {} +{ + block_specification() + ( use_clause() )* + ( configuration_item())* + +} + +void block_declarative_item (): {} +{ + subprogram_declaration() +//| subprogram_body() +| type_declaration() +| subtype_declaration() +| constant_declaration() +| signal_declaration() +| variable_declaration() +| file_declaration() +| alias_declaration() +| component_declaration() +| +LOOKAHEAD(attribute_declaration()) +attribute_declaration() +| attribute_specification() +| configuration_specification() +| disconnection_specification () +| use_clause() +| +LOOKAHEAD(3) +group_template_declaration() +| group_declaration() +} + +void block_declarative_part() : {} +{ + (block_declarative_item() )* +} + +void block_header() : {} +{ +[LOOKAHEAD(generic_clause()) generic_clause()[ generic_map_aspect() ] ] +[ port_clause() [ port_map_aspect() ] ] +} + +void block_specification() : {} +{ + name()[LOOKAHEAD(1) index_specification() ] +} + +void block_statement() : {QCString s;} +{ + s=identifier() + { pushLabel(genLabels,s); }[ expression() ] [ ] + block_header() + block_declarative_part() + + block_statement_part() + [ identifier() ] + { + genLabels=popLabel(genLabels); + } +} + +void block_statement_part() : {} +{ + ( concurrent_statement() )* +} + +void case_statement() : {QCString s;} +{ +[ identifier() ] + s=expression() + { + QCString ca="case "+s; + FlowChart::addFlowChart(FlowChart::CASE_NO,0,ca); + } + + case_statement_alternative() + ( case_statement_alternative ())* + [ identifier() ] + { + FlowChart::moveToPrevLevel(); + FlowChart::addFlowChart(FlowChart::END_CASE,0,0); + } +} + +void case_statement_alternative() : {QCString s;} +{ + s=choices() + { + QCString t="when "; + t+=s+"=> "; + FlowChart::addFlowChart(FlowChart::WHEN_NO,s.data(),t); + } + sequence_of_statement(){FlowChart::moveToPrevLevel(); } +} + +QCString character_literal() : {Token *tok;} +{ + tok={ return tok->image.c_str();} +} + +QCString choice() : {QCString s;} +{ + LOOKAHEAD(discrete_range()) + s=discrete_range(){ return s; } + | + LOOKAHEAD(simple_expression()) + s=simple_expression(){ return s; } + | s=identifier(){ return s; } + | { return " others "; } +} + +QCString choices() : {QCString s,s1;} +{ + s=choice() ( choice(){s+="|";s+=s1;})* { return s; } +} + +void component_configuration () :{} +{ + component_specification() + [ binding_indication() ] + [ block_configuration() ] + +} +void component_declaration() : {QCString s;} +{ + s=identifier() [ ] + { currP=VhdlDocGen::COMPONENT; } + [ generic_clause() ] + [ port_clause() ] + { + addVhdlType(s.data(),getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0,Public); + currP=0; + } + [ identifier() ] + +} + +void component_instantiation_statement() : {QCString s,s1;} +{ + +s=identifier() + s1=instantiation_unit() + { + addCompInst(s.lower().data(),s1.lower().data(),0,getLine()); + } + [ LOOKAHEAD(generic_map_aspect()) generic_map_aspect() ] + [ port_map_aspect() ] +} + +void component_specification() : {} +{ +instantiation_list() name() +} + +QCString composite_type_definition() : { QCString s,s1;} +{ + s=array_type_definition(){ return s; } +| record_type_definition(){ return s; } +} + +void concurrent_assertion_statement() : {} +{ +[ LOOKAHEAD(2) identifier() ] [ ] assertion() +} + +void concurrent_procedure_call_statement() : {} +{ +[ LOOKAHEAD(2) identifier() ] [ ] procedure_call() +} + +void concurrent_signal_assignment_statement() : {} +{ +[ LOOKAHEAD(2) identifier() ] [ ] +( +LOOKAHEAD(conditional_signal_assignment() ) + conditional_signal_assignment() +| selected_signal_assignment() + +) +} + +void concurrent_statement() : {} +{ + +// try { +LOOKAHEAD([identifier() ":"] ) +block_statement() +| +LOOKAHEAD([identifier() ":"] [] ) +process_statement() +| +LOOKAHEAD(generate_statement()) +generate_statement() +| +case_scheme() +| +LOOKAHEAD([identifier() ":"] [] ) +concurrent_assertion_statement() +| +LOOKAHEAD(concurrent_signal_assignment_statement()) + concurrent_signal_assignment_statement() +| +LOOKAHEAD(component_instantiation_statement() ) +component_instantiation_statement() +| +LOOKAHEAD(concurrent_procedure_call_statement()) +concurrent_procedure_call_statement() + /* + } + catch( ParseException e ) + { + error_skipto(SEMI_T, "syntax error in declarative item"); + } + */ +} + +QCString condition() : {QCString s;} +{ + s=expression() { return s; } +} + +QCString condition_clause() : {QCString s;} +{ + s=condition() + { + return " until "+s; + } +} + +void conditional_signal_assignment() : {} +{ + // LOOKAHEAD( target() "<=" options_() conditional_waveforms() ";") + target() options() conditional_waveforms() +} + +void conditional_waveforms() : {} +{ +waveform() + ( LOOKAHEAD( condition() ) + condition() waveform() )* + [ condition() ] +} + +// ( waveform() < WHEN_T> condition() )* +// waveform() [ condition() ] + +//waveform() + // ( LOOKAHEAD( condition() ) + // condition() waveform() )* + //[ condition() ] + +void configuration_declaration() : {QCString s,s1;} +{ + s=identifier() s1=name() + { + + confName=s+"::"+s1; + addVhdlType(s.data(),getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public); + } + configuration_declarative_part() + block_configuration() + [ ] [ name() ] + { genLabels.resize(0); confName="";} +} + +void configuration_declarative_item() : {} +{ + use_clause() +| attribute_specification() +| group_declaration() +} + +void configuration_declarative_part() : {} +{ + (configuration_declarative_item())* +} + +void configuration_item (): {} +{ + LOOKAHEAD(component_configuration()) + component_configuration() + | block_configuration() + +} + +void configuration_specification() : {} +{ + component_specification() binding_indication() +} + +QCString constant_declaration() : {QCString s,s1,s2;Token *t=0;} +{ + s=identifier_list() s1= subtype_indication() [ t= s2=expression() ] + { + if(t) + s2.prepend(":="); + QCString it=s1+s2; + addVhdlType(s.data(),getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public); + it.prepend("constant "); + return it; + } +} + +QCString constraint_array_definition (): {QCString s,s1;} +{ + s=index_constraint() s1=subtype_indication(){ return s+" "+s1;} +} + +void context_clause (): {} +{ + (context_item())* +} + +QCString constraint () :{QCString s;} + { + LOOKAHEAD(range_constraint()) + s=range_constraint(){ return s;} + | + LOOKAHEAD(index_constraint()) + s=index_constraint(){ return s;} +} + +void context_item() : {} +{ + library_clause() +| use_clause() +} + +QCString decimal_literal() : {Token *tok;} +{ + tok= { return tok->image.c_str(); } +} + + +QCString delay_mechanism (): {QCString s;} +{ + { return " transport ";} +| [ s=expression() {s.prepend(" reject ");}] { return s+" inertial "; } +} + +void design_file() : {} +{ + (design_unit() )+ {} + | +} + +void design_unit() : {} +{ + context_clause()library_unit() + +} + +QCString designator() : {QCString s;} +{ + s=identifier() {return s;} + | s=operator_symbol(){return s;} +} + +QCString direction (): {Token *tok;} +{ +tok= { return tok->image.c_str();} +| tok= { return tok->image.c_str();} +} + +void disconnection_specification() : {} +{ + guarded_signal_specificatio() expression() +} + +void guarded_signal_specificatio() : {} +{ + signal_list() name() +} + +QCString discrete_range() : {QCString s;} +{ + LOOKAHEAD(range()) + s=range() { return s;} + | + LOOKAHEAD(subtype_indication()) + s=subtype_indication() { return s;} +} + +QCString element_association() : {QCString s,s1;} +{ + [LOOKAHEAD(choices() ) choices() ] s1=expression() { return s1;} +} + +QCString element_declaration() : {QCString s,s1;} +{ +s=identifier_list() s1=subtype_indication() {return s+":"+s1;} +} + + +QCString entity_aspect() : {Token *tok;QCString s,s1;} +{ +tok= s=name() [ LOOKAHEAD(1) s1=identifier() {s+="("+s1+")";} ] { return s;} +| tok= s=name() { return tok->image.c_str()+s;} +| tok= { return tok->image.c_str(); } +} + +QCString entity_class() : {} +{ + { return "entity";} +| {return "architecture";} +| {return "configuration";} +| {return "procedure";} +| {return "function";} +| {return "package";} +| {return "type";} +| {return "subtype";} +| {return "constant";} +| {return "signal";} +| {return "variable";} +| {return "component";} +| {return "label";} +| {return "literal";} +| {return "units";} +| {return "group";} +| {return "file";} +} + +QCString entity_class_entry() : {QCString s;} +{ + s=entity_class() [ {s+="<>";} ] { return s;} +} + +QCString entity_class_entry_list() : {QCString s,s1,s2;} +{ + ( s1=entity_class_entry() {s+=s1;} )( s=entity_class_entry(){s2+=",";s2+=s;} )* { return s1+s2;} +} + +void entity_declaration() : {QCString s;} +{ + try{ + s=identifier() + { + lastEntity=current; + lastCompound=0; + addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public); + } + entity_header() + entity_declarative_part () + [ entity_statement_part() ] + [ ] [ name() ] + }catch(...){error_skipto(SEMI_T);} + + { lastEntity=0;lastCompound=0; genLabels.resize(0); } +} + +void entity_declarative_item() : {} +{ +subprogram_declaration() +//| subprogram_body() +| type_declaration() +| subtype_declaration() +| constant_declaration() +| signal_declaration() +| variable_declaration() +| file_declaration() +| alias_declaration() +| +LOOKAHEAD(attribute_declaration()) +attribute_declaration() +| attribute_specification() +| disconnection_specification() +| use_clause() +| +LOOKAHEAD(3) +group_template_declaration() +| group_declaration() +| +LOOKAHEAD(5) + package_instantiation_declaration() +|package_declaration() +} + +void entity_declarative_part() : {} +{ + (entity_declarative_item() )* +} + +QCString entity_designator() : {QCString s,s1;} +{ +s=entity_tag() [ s1=signature() ] { return s+s1;} +} + +void entity_header() : {} +{ + [ { currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC; } generic_clause()] + [ { currP=VhdlDocGen::PORT; } port_clause()] +} + +QCString entity_name_list() : {QCString s,s1;} +{ +(s1=entity_designator() {s+=s1;})+ { return s;} +| { return "other";} +| {return "all";} +} + +QCString entity_specification() : {QCString s,s1;} +{ +s=entity_name_list() s1=entity_class(){ return s+":"+s1;} +} + +void entity_statement() : {} +{ +LOOKAHEAD(concurrent_assertion_statement()) +concurrent_assertion_statement() +| +LOOKAHEAD(process_statement()) + process_statement() +| concurrent_procedure_call_statement() + +} + +void entity_statement_part() : {} +{ + (entity_statement())* +} + + +QCString entity_tag (): {QCString s;} +{ +s=name() { return s;} +| s=character_literal() { return s;} +} + +QCString enumeration_literal() : {QCString s;} +{ + s=identifier() { return s;} + | s=character_literal() { return s;} +} + +QCString enumeration_type_definition() : {QCString s,s1;} +{ + s=enumeration_literal() (LOOKAHEAD(1) s1=enumeration_literal() {s+=",";s+=s1;} )* + { return "("+s+")";} +} + +QCString exit_statement() : {QCString s,s1,s2;Token *t=0;Token *t1=0;} +{ +[ s=identifier() t= ] [ s1=identifier() ] +[ t1= s2=condition() ] +{ + if(t) s+=":"; + if(t1) s2.prepend(" when "); + return s+s1+s2+";"; +} +} + +QCString expression (): {QCString s,s1,s2;} +{ +s=relation() ( s1=logop() s2=relation() {s+=s1;s+=s2;} )* +{ return s; } +} + +QCString logop() : {} +{ + { return "and" ;} + | { return "nand" ;} + | { return "nor" ;} + | { return "xnor" ;} + | { return "xor" ;} + | { return "or" ;} + +} + +QCString extended_identifier (): {Token *t;} +{ + t= { return t->image.c_str(); } +} + +QCString factor(): {QCString s,s1;} +{ +s=primary() [LOOKAHEAD(1) s1=primary(){ s+="**";s+=s1;} ] { return s;} +| s=primary(){ s1 = "abs "; return s1+s; } +| s=primary(){s1="not ";return s1+s;} +} + +QCString file_declaration() : {QCString s,s1,s2,s3;} +{ + s=identifier_list() s2=subtype_indication() [ s3=file_open_information() ] + { + QCString t1=s2+" "+s3; + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public); + return " file "+s+":"+s2+" "+s3+";"; + } + } + +QCString file_logical_name(): {QCString s;} +{ + s=expression() { return s; } +} + +QCString file_open_information() : {QCString s,s1,s2;} +{ + [ s=expression() ] s1=file_logical_name() {s2="open "+s+" is "+s1; return s2; } +} + +QCString file_type_definition() : {QCString s,s1;} +{ + s=type_mark() { s1=" file of "+s; return s1;} +} + +QCString floating_type_definition() : {QCString s;} +{ + s=range_constraint(){ return s;} +} + +QCString formal_designator() : {QCString s;Token *tok;} +{ + s=name() { return s; } + |tok= { return tok->image.c_str();} +} + + +QCString formal_parameter_list() : {QCString s;} +{ + s=interface_list(){ return s; } +} + +QCString formal_part() : {QCString s,s1;} +{ +s=name() [ formal_designator() {s+"("+s1+")";}] {return s;} +} + +QCString full_type_declaration() : {QCString s,s1,s2;} +{ + s=identifier() + try{ + s2=type_definition() + }catch(...){error_skipto(SEMI_T);} + + { + addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public); + return "type "+s+" is "+s2+";"; + } +} + +QCString function_call() : {QCString s,s1;} +{ +s=name() s1=actual_parameter_part() { return s+"("+s1+")";} +} + +void generate_statement() : {QCString s;} +{ +s=identifier() + try{ + generate_scheme() + { pushLabel(genLabels,s); } + [ (block_declarative_item() )* ] (concurrent_statement())* + + }catch(...){error_skipto(GENERATE_T);} + [ identifier() ] {genLabels=popLabel(genLabels); } +} + +void generate_scheme() : {} +{ + parameter_specification() +| condition() +} + +void generic_clause() : {QCString s;} +{ + { parse_sec=GEN_SEC; } s=generic_list() { parse_sec=0; } +} + +QCString generic_list() : {QCString s;} +{ + s=interface_list() { return s; } +} + +void generic_map_aspect() : {} +{ + association_list() +} + +QCString group_constituent() : {QCString s;} +{ + s=name() { return s; } + | s=character_literal() { return s;} +} + +QCString group_constituent_list() : {QCString s,s1,s2;} +{ + (s1=group_constituent())( s=group_constituent(){s2+=",";s2+=s1;})* { return s+s2;} +} + +QCString group_declaration() : {QCString s,s1,s2;} +{ + s=identifier() s1=identifier() s2=group_constituent_list() + { + return "group "+s+":"+s1+"("+s2+");"; + } +} + +QCString group_template_declaration() : {QCString s,s1;} +{ + s=identifier() s1=entity_class_entry_list() + { + return "group "+s+ "is ("+s1+");"; + } + } + +void guarded_signal_specification() : {} +{ + signal_list() type_mark() +} + +QCString identifier() : {Token *tok;} +{ + tok={ return tok->image.c_str(); } + |tok= { return tok->image.c_str(); } +} + +QCString identifier_list() : {QCString str,str1;} +{ + str=identifier() ( str1=identifier() {str+=",";str+=str1;})* { return str; } +} + +void if_statement() : {QCString s,s1;} +{ +[LOOKAHEAD(1) identifier() ] + s=condition() + { + s.prepend("if "); + FlowChart::addFlowChart(FlowChart::IF_NO,0,s); + } + sequence_of_statement() + ( + s1=condition() + { + s1.prepend("elsif "); + FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data()); + } + sequence_of_statement() + )* + [LOOKAHEAD(1) + { + FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0); + } + sequence_of_statement() ] [ identifier() ] + { + FlowChart::moveToPrevLevel(); + FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0); + } +} + +QCString incomplete_type_declaration() : {QCString s;} +{ + s=identifier() + { + return "type "+s+";"; + } +} + +QCString index_constraint() : {QCString s="("; QCString s1,s2;} +{ + //try{ + s2=discrete_range(){s+=s2;}(LOOKAHEAD(1) s1=discrete_range(){s+=",";s+=s1;})* {return s+")";} +//}catch(...){ error_skipto(SEMI_T);hasError=false;return "";} + } + +QCString index_specification() : {QCString s;} +{ + LOOKAHEAD( discrete_range()) + s=discrete_range() { return s;} +| s=expression(){ return s;} +} + +QCString index_subtype_definition() : {QCString s;} +{ + s=type_mark() { return s+" range <> ";} +} + +QCString instantiation_unit() : {QCString s,s1,s2;Token *tok;} +{ +[ tok= ] s=identifier() {s1="component"; return s; } +| tok= s2=name() {s=tok->image.c_str()+s2;} [ s1=identifier() {s+="(";s+=s1;s+=")" ;}] { return s;} +| s=name() {s1="configuration ";return s;} +} + +QCString instantiation_list() : {QCString s;Token *tok;} +{ + s=identifier_list() { return s;} +| tok= {return tok->image.c_str();} +| tok= {return tok->image.c_str();} +} + +QCString integer() : {Token *t;} +{ + t= {return t->image.c_str();} +} + +QCString integer_type_definition() : {QCString s;} +{ + s=range_constraint(){ return s;} +} + +QCString interface_declaration() : {QCString s,s1;} +{ + +LOOKAHEAD(5) + s=interface_subprogram_declaration() { return s;} + +|interface_package_declaration() { return s;} +| + LOOKAHEAD(5) + s=interface_variable_declaration() { return s;} +| +LOOKAHEAD(5) +interface_file_declaration() { return s;} +| +LOOKAHEAD(subprogram_declaration()) +subprogram_declaration() { return s;} +| + s=object_class() s1=identifier() + { + if (parse_sec==GEN_SEC) + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public); + return s; + } +} + +QCString interface_element() : {QCString s;} +{ +s=interface_declaration(){ return s;} +} + +QCString interface_file_declaration() : {QCString s,s1;} +{ + s=identifier_list() s1=subtype_indication() +{ + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public); + return " file "+s+":"+s1; +} +} + +QCString interface_list() : {QCString s,s1,s2;} +{ +s=interface_element() (LOOKAHEAD(1) s1=interface_element(){s2+=";";s2+=s1;})* { return s+s2;} +} + + + +QCString interface_variable_declaration() : {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;} +{ +[( tok= | tok= | tok=|tok=) ] + s=identifier_list() [ s1=mode() ] + s2=subtype_indication() [ tok1= ] [ tok2= s4=expression() ] +{ + if(tok) + s5=tok->image.c_str(); + + if(tok1) + s3=tok->image.data(); + + if(tok2) + s3+=":="; + + QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4; + if (currP!=VhdlDocGen::COMPONENT) + { + if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE) + { + addProto(s5.data(),s.data(),s2.data(),s3.data(),0,s4.data()); + } + else + { + QCString i=s2+s3+s4; + if (currP==VhdlDocGen::GENERIC && param_sec==0) + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,i.data(),s1.data(),Public); + else if(parse_sec != GEN_SEC) + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,i.data(),s1.data(),Public); + } + // fprintf(stderr,"\n\n <>\n",$$.data()); + } // if component + return it; + } +} + +void iteration_scheme() : {} +{ + condition() +| parameter_specification() +} + +QCString label() : {QCString s;} +{ + s=identifier() { return s;} +} + +QCString library_clause() : {QCString s;} +{ + ( s=identifier_list() + ) + { + if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") ) + { + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public); + } + QCString s1="library "+s; + return s1; + } +} + +QCString library_unit() : {QCString s;} +{ +LOOKAHEAD(2) +primary_unit() { return s; } +| secondary_unit() { return s; } +| context_declaration() + +} + +QCString literal() : {QCString s;} +{ + + LOOKAHEAD(bit_string_literal()) +s=bit_string_literal() { return s;} +| + LOOKAHEAD(numeric_literal()) + s=numeric_literal() { return s;} +| + +LOOKAHEAD(enumeration_literal()) +s=enumeration_literal() { return s;} +| s=string_literal() { return s;} +| {return "null";} +} + +QCString logical_operator() : {QCString s;} +{ + s=logop() { return s;} +} + +void loop_statement() : {} +{ +[ identifier() ] + [ iteration_scheme() ] + sequence_of_statement() + [ identifier() ] +} + + +QCString miscellaneous_operator():{Token *t=0;} +{ + {return "**";} + | {return "abs";} + | {return "not";} +} + +QCString mode() : {Token *tok;} +{ +tok= { return "in"; } +| tok= { return "out"; } +| tok= { return "inout"; } +| tok= { return "buffer"; } +| tok= { return "linkage"; } +} + +QCString multiplying_operation() : {Token *tok;} +{ +tok= { return tok->image.c_str(); } +| tok= { return tok->image.c_str(); } +| tok= { return tok->image.c_str(); } +| tok= { return tok->image.c_str(); } +} + + + QCString name() : {QCString s,s1;} +{ + ( + s=operator_symbol() + | s=identifier()| s=external_name() + ) + [LOOKAHEAD(name_ext1()) s1=name_ext1(){ s+=s1;}] { return s; } +} + +QCString name_ext1() : {QCString s,s1,s2;} + { + s=name_ext() (LOOKAHEAD(name_ext()) s1=name_ext(){s+=s1;})* { return s;} + } + + QCString name_ext() : {QCString s,s1,s2;} + { + + ( + LOOKAHEAD( suffix()) + s1=suffix(){s+=".";s+=s1;} +| + LOOKAHEAD(test_att_name()) + s1=test_att_name() { s+=s1;} + | + LOOKAHEAD( discrete_range() ) + s1=discrete_range() {s+="(";s+=s1;s+=")";} + | + LOOKAHEAD( "(" expression() ("," expression() )* ")" ) + s1=expression() {s+="(";s+=s1;} (LOOKAHEAD(1) s1=expression(){s+=",";s+=s1;})* { s+=")";} + + ) + {return s;} + } + + QCString test_att_name() : {QCString s,s1;} + { + [ LOOKAHEAD() s1=signature() {s=s1;}] + s1=attribute_designator() {s+="'";s+=s1;} + [LOOKAHEAD(1) s1=expression() {s+="(";s+=s1;s+=")";}] + { return s;} + } + + QCString indexed_name() : {QCString s,s1,s2;} + { + s2=identifier() s1=expression(){s=s2+"("+s1;} ( s1=expression(){s+=",";s+=s1;})* {return s+")";} + } + +QCString next_statement() : {QCString s,s1,s2;Token *t=0;Token *t1=0;} +{ +[LOOKAHEAD(1) s=identifier() t= ] [ s1=identifier() ] +[LOOKAHEAD(1) t1= s2=condition() ] +{ + if(t) s+=":"; + if(t1) s2.prepend("when "); + return s+s1+s2+";"; +} +} + +QCString null_statement() : {QCString s;} +{ +[ s=identifier() {s+=":";}] {return s+="null";} +} + +QCString numeric_literal() : {QCString s;} +{ + + LOOKAHEAD(physical_literal()) + s=physical_literal(){ return s;} + | s=abstract_literal() { return s;} +} + +QCString object_class() : {} +{ + { return "constant"; } +| { return "signal"; } +| { return "variable"; } +| { return "shared variable"; } +| { return "file"; } +| { return "type"; } +} + +QCString operator_symbol() : {Token *tok;} +{ +tok= {return tok->image.c_str();} +} + +void options() : {} +{ + [ ] [ delay_mechanism() ] +} + +void package_body() : {QCString s;} +{ + s=name() + { + lastCompound=current; + s.prepend("_"); + addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected); + } + package_body_declarative_part() + + [ ] [ name() ] { lastCompound=0; genLabels.resize(0); } +} + +void package_body_declarative_item() : {} +{ +subprogram_declaration() +//| subprogram_body() +| type_declaration() +| subtype_declaration() +| constant_declaration() +| variable_declaration() +| file_declaration() +| alias_declaration() +| use_clause() +| +LOOKAHEAD(3) +group_template_declaration() +| group_declaration() +} + +void package_body_declarative_part() : {} +{ +(package_body_declarative_item() )* +} + +void package_declaration(): {QCString s;} +{ + + s=identifier() + { + lastCompound=current; + Entry *clone=new Entry(*current); + clone->section=Entry::NAMESPACE_SEC; + clone->spec=VhdlDocGen::PACKAGE; + clone->name=s; + clone->startLine=getLine(); + clone->bodyLine=getLine(); + clone->protection=Package; + current_root->addSubEntry(clone); + addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package); + } + package_declarative_part() + [ ] [ name() ] +{ lastEntity=0;lastCompound=0; genLabels.resize(0); } +} + +void geninter():{} +{ + [gen_interface_list() [gen_assoc_list() ]] +} + +void package_declarative_item() : {} +{ +//LOOKAHEAD(3) +//interface_subprogram_declaration() +subprogram_declaration() +| type_declaration() +| subtype_declaration() +| constant_declaration() +| signal_declaration() +| variable_declaration() +| file_declaration() +| alias_declaration() +| component_declaration() +| +LOOKAHEAD(attribute_declaration()) + attribute_declaration() +| attribute_specification() +| disconnection_specification() +| use_clause() +| +LOOKAHEAD(3) + group_template_declaration() +| group_declaration() +| + LOOKAHEAD(5) + package_instantiation_declaration() +|package_declaration() + +} + +void package_declarative_part() : {} +{ + (package_declarative_item())* +} + +QCString parameter_specification() : {QCString s,s1;} +{ +s=identifier() s1=discrete_range(){ return s+" in "+s1;} +} + +QCString physical_literal() : {QCString s,s1;} +{ + [LOOKAHEAD(abstract_literal()) s=abstract_literal()] s1=name(){s+=" ";s+=s1;s.prepend(" "); return s;} +} + +QCString physical_type_definition() : {QCString s,s1,s2;} +{ + + s=identifier() + (s1=secondary_unit_declaration(){s2+=s1;s2+="#";})* + [name()] + { + current->args=s2; + current->args.prepend("units"); + current->spec=VhdlDocGen::UNITS; + return s2; + } +} + +void port_clause() : {} +{ + port_list() { currP=0; } +} + +QCString port_list() : {QCString s;} +{ + s=interface_list(){return s;} +} + +void port_map_aspect() : {} +{ + association_list() +} + +QCString primary() : {QCString s,s1;} +{ +LOOKAHEAD(function_call()) +s=function_call() { return s;} +| +LOOKAHEAD( expression() ) + s1=expression() { s="("+s1+")"; return s;} +| +LOOKAHEAD(qualified_expression()) +s=qualified_expression() { return s;} +| +LOOKAHEAD(type_conversion()) +s=type_conversion() { return s;} +| +LOOKAHEAD(literal()) +s=literal() { s.prepend(" ");return s;} +| +LOOKAHEAD(name()) +s=name() { return s;} +| +allocator() { return "";} +| +s=aggregate() { return s; } +} + + +void primary_unit() : {} +{ +entity_declaration() +| configuration_declaration() +| +LOOKAHEAD(package_instantiation_declaration()) +package_instantiation_declaration() +| +LOOKAHEAD(4) + interface_package_declaration() +| package_declaration() + +} + +QCString procedure_call() : {QCString s,s1;} +{ + s=name() [ s1=actual_parameter_part() { s1.prepend("("); s1.append(")");}] +{ return s+s1;} + } + +QCString procedure_call_statement() : {QCString s,s1;} +{ +[LOOKAHEAD(2) s=identifier() { s+=":"; }] s1=procedure_call() +{ + return s+s1+";"; +} +} + +QCString process_declarative_item() : {QCString s;} +{ +subprogram_declaration() { return "";} +//| subprogram_body() +| s=type_declaration() { return s;} +| s=subtype_declaration() { return s;} +| s=constant_declaration() { return s;} +| s=variable_declaration() { return s;} +| s=file_declaration() { return s;} +| s=alias_declaration() { return s;} +| +LOOKAHEAD(3) +s=attribute_declaration() { return s;} +| s=attribute_specification() { return s;} +| s=use_clause() { return s;} +| +LOOKAHEAD(3) +s=group_template_declaration() { return s;} +| s=group_declaration() { return s;} +} + +QCString process_declarative_part() :{QCString s,s1;} +{ + ( s1=process_declarative_item(){s+=s1;} )* { return s;} +} + +void process_statement() : {QCString s,s1,s2;Token *tok=0;} +{ +[ s=identifier() ] +[ ] + { + currP=VhdlDocGen::PROCESS; + current->startLine=getLine(); + current->bodyLine=getLine(); + } + + try{ + [ (tok= | s1=sensitivity_list()) ] [ ] + s2=process_declarative_part() + { + if (s2.data()) + FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s2.data(),0); + FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0); + } + + process_statement_part() + [ ] + }catch(...){error_skipto(PROCESS_T);} + [ identifier() ] + { + if(s.isEmpty()) + currName=VhdlDocGen::getProcessNumber(); + else + currName=s; + + current->name=currName; + tempEntry=current; + current->endBodyLine=getLine(); + currP=0; + if(tok) + s1=tok->image.data(); + createFunction(currName,VhdlDocGen::PROCESS,s1.data()); + createFlow(); + currName=""; + newEntry(); +} +} + +void process_statement_part() : {} +{ + (sequential_statement())* +} + +QCString qualified_expression() : {QCString s,s1;} +{ + s1=identifier() {s=s1+"'";} + ( + LOOKAHEAD(aggregate()) + s1=aggregate(){s+=s1;} + | s1=expression() {s+="(";s+=s1;s+=")";} + ) + {return s;} +} + +QCString range() : {QCString s,s1,s2;} +{ + LOOKAHEAD( simple_expression() direction() simple_expression()) + s=simple_expression() s1=direction() s2=simple_expression(){return s+" "+s1+" "+s2;} + | + LOOKAHEAD(attribute_name()) + s=attribute_name(){ return s;} +} + +QCString range_constraint() : {QCString s,s1;} +{ + s=range(){return " range "+s;} +} + +void record_type_definition() : {} +{ + + try{ + (element_declaration())+ + }catch(...){error_skipto(END_T);} + + [ name()] +} + +QCString relation() : {QCString s,s1,s2;} +{ + s=shift_expression() [LOOKAHEAD(1) s1=relation_operator() s2=shift_expression() ] {return s+s1+s2;} +} + +QCString relation_operator() : {} +{ + {return "<";} + | {return ">";} + | {return "=";} + | {return ">=";} + | {return "<=";} + | {return "/=";} + +} + +QCString report_statement() : {Token *t=0;Token *t1=0;QCString s,s1,s2;} +{ +[ s=identifier() t= ] + s1=expression() + [ t1= s2=expression() ] + { + if(t) s.append(":"); + s1.prepend(" report "); + if(t1) s2.prepend(" severity "); + return s+s1+s2+";"; + } +} + +QCString return_statement() : {QCString s,s1;} +{ +[ s=identifier() { s+=":";}] [ s1=expression() ] +{ return s+" return "+s1+";";} +} + +QCString scalar_type_definition() : {QCString s,s1;} +{ + +s=enumeration_type_definition(){ return s;} +| s=range_constraint() [LOOKAHEAD( physical_type_definition()) s1=physical_type_definition()] { s+=" ";s+=s1;return s;} +} + +void secondary_unit() : {} +{ +architecture_body() +| package_body() +} + +QCString secondary_unit_declaration() : {QCString s,s1;} +{ +s=identifier() s1=physical_literal() { return s+"="+s1; } +} + +QCString selected_name() : {QCString s,s1;} +{ + s=identifier() s1=suffix(){ return s+"."+s1;} +} + +void selected_signal_assignment() : {} +{ + expression() + + target() < LESSTHAN_T> options() selected_waveforms() +} + +void selected_waveforms() : {} +{ + waveform() choices()( waveform() choices())* +} + +QCString sensitivity_clause() : {QCString s;} +{ + s=sensitivity_list() + { + s.prepend(" on "); + return s; + } +} + +QCString sensitivity_list() : {QCString s,s1;} +{ + s=name() ( s1=name(){s+=",";s+=s1;} )* { return s;} +} + +void sequence_of_statement() : {} +{ + ( LOOKAHEAD(3)sequential_statement())* +} + +void sequential_statement() :{QCString s;} +{ + LOOKAHEAD( [ identifier() ":" ] target() "<=") + s=signal_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);} + | + LOOKAHEAD(3) + s=assertion_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);} + | + LOOKAHEAD(3) + s=report_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);} + | + LOOKAHEAD(3) + s=wait_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);} + | + LOOKAHEAD( [ identifier() ":" ] target() ":=" ) + s=variable_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);} + | + LOOKAHEAD(3) + s=procedure_call_statement(){ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0); } + | + LOOKAHEAD(3) + if_statement() + | + LOOKAHEAD(3) + case_statement() + | + LOOKAHEAD(3) + loop_statement() + | + LOOKAHEAD(3) + s=next_statement() + | + LOOKAHEAD(3) + s=exit_statement() + | + LOOKAHEAD(3) + s=return_statement(){FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);} + | + s=null_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);} +} + +QCString shift_expression() : {QCString s,s1,s2;} +{ + s=simple_expression() [ s1=shift_operator() s2=simple_expression() ] { return s+s1+s2;} +} +QCString shift_operator() : {} +{ + { return "sll";} + | { return "srl";} + | { return "sla";} + | { return "sra";} + | { return "rol";} + | { return "ror";} +} + +QCString sign() : {} +{ + { return "+";} + | { return "-";} +} + +QCString signal_assignment_statement() : {QCString s,s1,s2,s3;} +{ + + LOOKAHEAD(conditional_signal_assignment_wave()) + conditional_signal_assignment_wave(){ return ""; } +| + LOOKAHEAD(selected_signal_assignment_wave()) + selected_signal_assignment_wave() { return ""; } + | + [LOOKAHEAD(2) s=identifier() {s+=":";} ] +s1=target() +[ s2=delay_mechanism() ] +s3=waveform() +{ + return s+s1+"<="+s2+s3+";"; +} + +} + +void semi() : {} +{ + +} + +void signal_declaration() : {QCString s,s1,s2,s3,s4;} +{ + s=identifier_list() s1=subtype_indication() [ s2=signal_kind() ] [ s3=expression() ] + { + s4=s1+s2+s3; + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public); + } +} +QCString signal_kind() : {} +{ + { return "register";} + | { return "bus";} +} + +QCString signal_list() : {QCString s,s1;} +{ + s=name() ( s1=name() { s+=",";s+=s1;})* +| { return "other";} +| { return "all";} +} + +QCString signature() : {QCString s,s1,s2;} +{ + + [ s=name() ( s1=name() {s+=",";s+=s1; })* ] + [ s1=name() {s+="return ";s+=s1;}] + + { s1="["+s+"]";return s1;} + } + +QCString simple_expression(): {QCString s,s1,s2;} +{ +[ s=sign() ] s1=term() {s+=s1;} ( LOOKAHEAD(adding_operator()) s1=adding_operator() s2=term() {s+=s1;s+=s2;})* { return s;} +} + +void simple_name() : {} +{ +name() +} + +QCString slice_name() : {QCString s,s1;} +{ + s=identifier() s1=discrete_range() {return s+"("+s1+")";} +} + +QCString string_literal() : {Token *tok;} +{ +tok= {return tok->image.c_str();} +} + + void subprogram_body() : {QCString s;} +{ +//subprogram_specification() + + try{ + s=subprogram_declarative_part() + { + if (s.data()) + { + FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s,0); + } + FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0); + } + }catch(...){error_skipto(BEGIN_T);} + +subprogram_statement_part() + [ subprogram_kind() ] [ designator() ] + { + tempEntry->endBodyLine=getLine(END_T); + createFlow(); + currP=0; + } +} + +void subprogram_declaration() : {} +{ +LOOKAHEAD(subprogram_instantiation_declaration()) +subprogram_instantiation_declaration() +| +subprogram_specification()subprogram_1(){currP=0;} +} + +void subprogram_1() : {} +{ + + subprogram_body() + | +} + +QCString subprogram_declarative_item() : {QCString s;} +{ +subprogram_declaration(){ return "";} +|s=type_declaration(){ return s;} + | subprogram_body(){ return "";} +| s=subtype_declaration(){ return s;} +| s=constant_declaration(){ return s;} +| s=variable_declaration(){ return s;} +| s=file_declaration(){ return s;} +| s=alias_declaration(){ return s;} +| +LOOKAHEAD(attribute_declaration()) +s=attribute_declaration(){ return s;} +| s=attribute_specification(){ return s;} +| s=use_clause(){ return s;} +| +LOOKAHEAD(3) +s=group_template_declaration(){ return s;} +| s=group_declaration() { return s;} +} + +QCString subprogram_declarative_part() : {QCString s,s1;} +{ + (s1=subprogram_declarative_item(){s+=s1;})* { return s;} +} + +void subprogram_kind() : {} +{ + + | +} + +void subprogram_specification() : {QCString s;Token *tok=0;Token *t;} +{ + s=designator() + { + currP=VhdlDocGen::PROCEDURE; + createFunction(s.data(),currP,0); + tempEntry=current; + current->startLine=getLine(PROCEDURE_T); + current->bodyLine=getLine(PROCEDURE_T); + + } [LOOKAHEAD(1) { param_sec=PARAM_SEC; } interface_list() { param_sec=0; } ] + [LOOKAHEAD(2) gen_interface_list()] + [ LOOKAHEAD(2) gen_assoc_list()] + param() + { newEntry(); } +| + [ (tok= | tok=) ] t= s=designator() + { + currP=VhdlDocGen::FUNCTION; + if(tok) + createFunction(tok->image.c_str(),currP,s.data()); + else + createFunction(0,currP,s.data()); + tempEntry=current; + current->startLine=getLine(FUNCTION_T); + current->bodyLine=getLine(FUNCTION_T); + } + [{ param_sec=PARAM_SEC; } formal_parameter_list() { param_sec=0; }] + s=type_mark() + { + tempEntry=current; + current->type=s; + newEntry(); + } +} + +void subprogram_statement_part() : {} +{ + (sequential_statement())* +} + +QCString subtype_declaration() : {QCString s,s1;} +{ + s=identifier() s1=subtype_indication() + { + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,s1.data(),Public); + return " subtype "+s+" is "+s1+";"; + } +} + +QCString subtype_indication() : {QCString s,s1,s2;} +{ + s=name() + [LOOKAHEAD (name()) s1=name()] [LOOKAHEAD(constraint() ) s2=constraint()] + {return s+" "+s1+" "+s2;} +} + +QCString suffix() : {QCString s;} +{ +LOOKAHEAD(name()) +s=name() { return s;} +| s=character_literal() { return s;} +| s=operator_symbol(){ return s;} +| {return " all ";} +} + +QCString target() : {QCString s;} +{ + s=name(){ return s;} +| s=aggregate() { return s;} +} + +QCString term() : {QCString s,s1,s2;} +{ + s=factor() ( LOOKAHEAD(2) s1=multiplying_operation() s2=factor(){s+=s1;s+=s2;} )* { return s;} +} + +QCString timeout_clause() : {QCString s;} +{ + s=expression() +{ + return " for "+s; +} +} + +QCString type_conversion() : {QCString s,s1;} +{ + s=name() s1=expression() { return s+"("+s1+")";} +} + +QCString type_declaration() : {QCString s;} +{ +LOOKAHEAD(3) +s=full_type_declaration(){ return s;} +| s=incomplete_type_declaration(){ return s;} +} + +QCString type_definition() : {QCString s;} +{ +//try{ +s=scalar_type_definition(){ return s;} +| s=composite_type_definition(){ return s;} +| s=access_type_definition(){ return s;} +| s=file_type_definition(){ return s;} +| + LOOKAHEAD(2) + protected_type_body() { return ""; } +| protected_type_declaration() { return ""; } +//}catch(...){error_skipto(SEMI_T); return "";} +} + +QCString type_mark() : {QCString s; } +{ + s=name() { return s;} +} + +QCString unconstraint_array_definition() : {QCString s,s1,s2,s3;} +{ + s=index_subtype_definition() ( s1=index_subtype_definition(){s3+=",";s3+=s1;})* + s2=subtype_indication() {return "array("+s+s3+") of "+s2;} +} + + QCString use_clause() : {QCString s,s1;} +{ + s=selected_name()( s1=selected_name(){s+=",";s+=s1;})* + { + QStringList ql1=QStringList::split(",",s,FALSE); + for (uint j=0;j {s+=":";}] + s1=target() s2=expression() + {return s+s1+":="+s2+";";} + | + selected_variable_assignment() { return ""; } +} + +QCString variable_declaration() : {Token *tok=0;QCString s,s1,s2;} +{ +[ tok= ] s=identifier_list() s1=subtype_indication() +[ s2=expression() ] + +{ + int spec; + QCString val=" variable "+s+":"+s1+":="+s2+";"; + QCString it=s1+" "+s2; + if(tok != 0) + { + it.prepend(" shared "); + val.prepend(" shared"); + spec=VhdlDocGen::SHAREDVARIABLE; + } + else + spec=VhdlDocGen::SHAREDVARIABLE; + + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public); + return val; + } + +} + +QCString wait_statement() : {QCString s,s1,s2,s3;Token *t=0;} +{ +[ s=identifier() ] [ s1=sensitivity_clause() ] [ s2=condition_clause() ] [ s3=timeout_clause() ] +{ + if(t) s.append(":"); + return s+" wait "+s1+s2+s3+";"; +} +} + +QCString waveform() : {QCString s,s1;} +{ +s=waveform_element() ( s1=waveform_element(){s+=","; s+=s1;})* { return s;} +| + { return " unaffected ";} + +} + +QCString waveform_element() : {QCString s,s1;} +{ + s=expression() [ s1=expression(){ s1.prepend(" after ");} ] + { return s+s1;} +// [ expression() ] +} + +// ----------------------------------------------------------------- +// VHDL 2002 +// ----------------------------------------------------------------- + +QCString protected_type_body() :{ } +{ + try{ + + protected_type_body_declarative_part() + + }catch(...){error_skipto(END_T);} + [identifier()] {return "";} +} + +void protected_type_body_declarative_item() : { } + { + subprogram_declaration() + | subprogram_body() + | type_declaration() + | subtype_declaration() + | constant_declaration() + | variable_declaration() + | file_declaration() + | alias_declaration() + | + LOOKAHEAD( attribute_declaration()) + attribute_declaration() + | attribute_specification() + | use_clause() + | LOOKAHEAD(3) + group_template_declaration() + | group_declaration() + +} + +void protected_type_body_declarative_part() :{ } +{ + ( protected_type_body_declarative_item ())* +} + + +QCString protected_type_declaration() : { } + { + + try{ + protected_type_declarative_part() + }catch(...){error_skipto(END_T);} + [ identifier() ] { return "";} + } + + +void protected_type_declarative_item(): { } +{ + subprogram_specification() + | attribute_specification() + | use_clause() +} + +void protected_type_declarative_part() : {} +{ + (protected_type_declarative_item ())* +} + +// ----------------------------------------------------------------- +// VHDL 2008 +// ----------------------------------------------------------------- + +QCString context_ref() : {QCString s;} +{ + s=identifier_list() + { + return "context "+s ; + } +} + + +void context_declaration(): {QCString s,s1;} +{ + s=identifier() { parse_sec=CONTEXT_SEC; } (s1=libustcont_stats())* [ ][identifier()] + { + parse_sec=0; + addVhdlType(s.data(),getLine(LIBRARY_T),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",s1.data(),Public); + } +} + +QCString libustcont_stats(): {QCString s;} +{ + s=use_clause() { return s;} + | s=library_clause() { return s;} + | s=context_ref() { return s;} +} + + void package_instantiation_declaration() : {QCString s,s1,s2;} + { + s=identifier() s1=name() s2=signature() [gen_assoc_list()] + { + QCString q=" is new "+s1+s2; + addVhdlType(s.data(),getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public); + } +} + +QCString interface_package_declaration(): {QCString s,s1;} +{ + s=identifier() s1=name() [gen_assoc_list()] + { + current->name=s; + return "package "+s+" is new "+s1; + } +} + +QCString subprogram_instantiation_declaration():{QCString s,s1,s2;} +{ + s=identifier() s1=name() s2=signature() [gen_assoc_list()] + { + QCString q= " is new "+s1+s2; + addVhdlType(s.data(),getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public); + return q; + } +} + + +void gen_assoc_list():{} +{ + association_list() +} + +void gen_interface_list() : {} +{ + + { + //int u=s_str.iLine; + parse_sec=GEN_SEC; + } + interface_list() + { + // QCString vo=$3; + parse_sec=0; + } + +} + +void case_scheme (): {} +{ + expression() when_stats() [LOOKAHEAD(3) ttend()] + generate_statement_body() +} + +void when_stats() : {} +{ + ( + [LOOKAHEAD(2) label() ] choices() generate_statement_body() + )+ +} + + +void ttend(): {} +{ + [identifier()] + } + + + +void generate_statement_body() : {} +{ + [block_declarative_part() ] (concurrent_statement())* +} + +QCString external_name(): {QCString s,s1,s2;} +{ + s=sig_stat() s1=external_pathname() s2=subtype_indication() + { + QCString t="<<"+s; + QCString t1=s1+":"+s2+">>"; + return s+s1; + } +} + +QCString sig_stat(): {Token *t;} +{ + t= { return t->image.data(); } + | t= { return t->image.data(); } + | t= { return t->image.data(); } + +} + +QCString external_pathname(): {QCString s;} +{ + s=absolute_pathname() { return s;} + | s=relative_pathname() { return s;} + | s=package_path_name() { return s;} + } + +QCString absolute_pathname(): {QCString s,s1;} +{ + LOOKAHEAD( pathname_element_list()) + s=pathname_element_list() s1=identifier() { return "."+s+s1;} +| s=identifier (){ return "."+s;} +} + +QCString relative_pathname():{QCString s,s1,s2;} +{ + s=neg_list() [LOOKAHEAD( pathname_element_list()) s1=pathname_element_list() ] s2=identifier() { return s+s1+s2;} +} + +QCString neg_list(): {QCString s;} +{ + ( {s+="^.";})+ {return s; } +} + +QCString pathname_element ():{QCString s,s1;} +{ + s=identifier() [ s1=expression() ] + { + if(!s1.isEmpty()) + return s+"("+s1+")"; + + return s; + } + } + +QCString pathname_element_list():{QCString s,s1,s2;} +{ + ( s=pathname_element() ) {s+=".";} (LOOKAHEAD(pathname_element() ) s1=pathname_element() {s2+=s1;s2+="."; })* + { return s+s2; } +} + +QCString package_path_name():{QCString s;} +{ + s=name() { return "@"+s; } +} + +void conditional_signal_assignment_wave(): {} +{ + LOOKAHEAD(conditional_force_assignment()) + conditional_force_assignment() + |conditional_waveform_assignment() +} + +void conditional_waveform_assignment():{} +{ + target() [LOOKAHEAD(1) delay_mechanism() ] waveform_element() expression() [else_wave_list()] + } + +void else_wave_list(): {} +{ + expression() [ expression()] +} + +void conditional_force_assignment(): {} +{ + target() [inout_stat()] expression() [expression() else_stat()] +} + +void selected_signal_assignment_wave() : {} +{ + LOOKAHEAD(selected_force_assignment() ) + selected_force_assignment() +| selected_waveform_assignment() +} + +void selected_variable_assignment():{} +{ + expression() [] select_name() sel_var_list() // { $$=""; } +} + +void select_name(): {} +{ + LOOKAHEAD(aggregate()) + aggregate() + | name() + +} + +void selected_waveform_assignment():{} +{ + expression() [] + target() [delay_mechanism()] sel_wave_list() +} + +void selected_force_assignment():{} +{ + expression() [] target() + [inout_stat()] sel_var_list() +} + +void sel_var_list(): {} +{ + (expression() choices() (|))(LOOKAHEAD(expression() ) expression() choices() (|))* + +} + + +void sel_wave_list() : {} +{ + waveform_element() choices() (LOOKAHEAD(1) sel_wave_list())* + // | sel_wave_list_1() +} + + + +void inout_stat(): {} +{ + + | + } + +void else_stat(): {} +{ + ( expression() [LOOKAHEAD(1) expression()])+ +} + + + +QCString interface_subprogram_declaration(): {QCString s;} +{ + s=iproc() { return s;} + | s=ifunc() { return s; } +} + +QCString iproc(): {QCString s,s1;} + { + s=identifier() s1=param() + { + current->name=s; + return "procedure "+s+s1; + } + } + +QCString ifunc():{QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;} +{ + + [t= | t= ] s=name() s1=param() s2=name() [t1= (s3=identifier() | t2=)] + { + QCString q; + if(t) q=t->image.data(); + if(t2) s3="<>"; + if (!s3.isEmpty()) + { + s3.prepend(" is "); + } + current->name=s; + if (parse_sec==GEN_SEC) + { + QCString ss=q+" function "+s1+" return "+s2+s3; + int a=getLine(FUNCTION_T); + int b=getLine(PROCEDURE_T); + + if (a>b) b=a; + addVhdlType(current->name.data(),b,Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,ss.data(),0,Public); + } + currP=0;return ""; + } + + } + + +QCString param(): {QCString s,s1;Token *tok=0;} +{ +[ tok= ] { param_sec=PARAM_SEC; } + [ s1=interface_list() ] + { + if(tok) + { + s = tok->image.data(); + param_sec=0; + } + return s+"("+s1+")"; + } + + } + + // ----------------------------------------------------------------- + // needed for inline (function/process/procedure) parsing + +void parseInline() : {} +{ + process_statement() + | subprogram_declaration() + } diff --git a/vhdlparser/vhdlparser.patch b/vhdlparser/vhdlparser.patch new file mode 100644 index 0000000..37cca10 --- /dev/null +++ b/vhdlparser/vhdlparser.patch @@ -0,0 +1,10 @@ +--- VhdlParser.h 2014-07-27 14:26:18.000000000 +0200 ++++ VhdlParser.h.new 2014-07-27 14:23:22.000000000 +0200 +@@ -6,6 +6,7 @@ + #include "TokenManager.h" + #include "VhdlParserTokenManager.h" + #include "VhdlParser.h" ++#include "vhdljjparser.h" + + #include "VhdlParserConstants.h" + #include "ErrorHandler.h" diff --git a/vhdlparser/vhdlparser.pro.in b/vhdlparser/vhdlparser.pro.in new file mode 100644 index 0000000..0232fd5 --- /dev/null +++ b/vhdlparser/vhdlparser.pro.in @@ -0,0 +1,33 @@ +TEMPLATE = lib +CONFIG = warn_on staticlib $extraopts +HEADERS = CharStream.h \ + ErrorHandler.h \ + JavaCC.h \ + ParseException.h \ + TokenManager.h \ + Token.h \ + vhdlstring.h \ + VhdlParser.h \ + VhdlParserConstants.h \ + VhdlParserTokenManager.h \ + TokenMgrError.h \ + VhdlParserIF.h \ + VhdlParserErrorHandler.hpp + +SOURCES = CharStream.cc \ + ParseException.cc \ + Token.cc \ + TokenMgrError.cc \ + VhdlParser.cc \ + VhdlParserTokenManager.cc \ + VhdlParserIF.cpp + +INCLUDEPATH = . ../src ../qtools generated_src/doxygen +#TMAKE_CXXFLAGS += -DQT_NO_CODECS -DQ T_LITE_UNICODE + +#must enable -fexceptions because we have try catch blocks in VhdlParser.cc +TMAKE_CXXFLAGS +=-w -fexceptions -DQT_LITE_UNICODE +win32:TMAKE_CXXFLAGS += -fexceptions -DQT_NODLL +win32-g++:TMAKE_CXXFLAGS += -fexceptions -D__CYGWIN__ -DALL_STATIC +OBJECTS_DIR = ../objects/vhdlparser +DESTDIR = ../lib diff --git a/vhdlparser/vhdlstring.h b/vhdlparser/vhdlstring.h new file mode 100644 index 0000000..16e1d9a --- /dev/null +++ b/vhdlparser/vhdlstring.h @@ -0,0 +1,100 @@ +#ifndef VHDLSTRING_H +#define VHDLSTRING_H + +#include +#include + +/** @brief Minimal string class with std::string like behaviour that fulfills the JavaCC + * string requirements. + */ +class VhdlString +{ + public: + VhdlString() + { + init(); + } + VhdlString(const VhdlString &other) + { + m_str = (char*)malloc(other.m_len+1); + memcpy(m_str,other.m_str,other.m_len); + m_len = other.m_len; + m_str[m_len]=0; + } + VhdlString &operator=(const VhdlString &other) + { + if (this!=&other) + { + free(m_str); + m_str = (char*)malloc(other.m_len+1); + memcpy(m_str,other.m_str,other.m_len); + m_len = other.m_len; + m_str[m_len]=0; + } + return *this; + } + VhdlString(const char *s) + { + m_len = strlen(s); + m_str=(char*)malloc(m_len+1); + memcpy(m_str,s,m_len+1); + } + VhdlString(const char *s,int size) + { + m_str = (char*)malloc(size+1); + memcpy(m_str,s,size); + m_str[size]=0; + m_len=size; + } + ~VhdlString() + { + delete[] m_str; + } + VhdlString& append(const char *s,int size) + { + int oldlen = m_len; + m_len+=size+1; + if (m_len) + { + m_str = (char*)realloc(m_str,m_len); + memcpy(m_str+oldlen,s,m_len-oldlen-1); + m_str[m_len-1]=0; + } + return *this; + } + VhdlString& append(const char *s) + { + return append(s,strlen(s)); + } + VhdlString& append(const VhdlString &other) + { + return append(other.m_str,other.m_len); + } + VhdlString substr(int pos=0,int len=-1) + { + return VhdlString(m_str?m_str+pos:0,len==-1?m_len-pos:m_len); + } + int copy(char *s,int len,int pos=0) const + { + if (len==0) return 0; + if (pos>=m_len) { s[0]=0; return 0; } + int r=m_len + + @@ -827,6 +831,10 @@ > + + @@ -911,6 +919,14 @@ > + + + + @@ -927,6 +943,22 @@ > + + + + + + + + @@ -1180,42 +1212,6 @@ /> - - - - - - - - - - - - - - + + @@ -2363,6 +2363,10 @@ > + + @@ -2455,6 +2459,10 @@ > + + @@ -2587,6 +2595,10 @@ > + + @@ -2703,6 +2715,18 @@ > + + + + + + @@ -2907,11 +2931,31 @@ > + + + + + + + + + +