summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Prikryl <prikryl@atlas.cz>2014-08-22 06:44:58 (GMT)
committerPetr Prikryl <prikryl@atlas.cz>2014-08-22 06:44:58 (GMT)
commitf8a304ecf96e7fc7d9e8a026f00cdf419e4bfc37 (patch)
tree69aa803535ca3395d07f6571e720d790ca8cf979
parent0d44c67e548e97b33fa276d93eddced93d25dc02 (diff)
parentef2e29a8720cf609bee75f545b38b85139fd04ee (diff)
downloadDoxygen-f8a304ecf96e7fc7d9e8a026f00cdf419e4bfc37.zip
Doxygen-f8a304ecf96e7fc7d9e8a026f00cdf419e4bfc37.tar.gz
Doxygen-f8a304ecf96e7fc7d9e8a026f00cdf419e4bfc37.tar.bz2
Merge branch 'master' of https://github.com/doxygen/doxygen.git
-rw-r--r--.gitignore2
-rw-r--r--Doxyfile50
-rw-r--r--Makefile.in7
-rw-r--r--addon/doxywizard/doxywizard.pro.in3
-rwxr-xr-xconfigure8
-rw-r--r--doc/changelog.doc135
-rw-r--r--doc/commands.doc75
-rw-r--r--doc/customize.doc4
-rw-r--r--doc/docblocks.doc19
-rw-r--r--doc/install.doc2
-rw-r--r--qtools/Doxyfile4
-rw-r--r--src/cite.cpp145
-rw-r--r--src/classdef.cpp26
-rw-r--r--src/classdef.h5
-rw-r--r--src/cmdmapper.cpp2
-rw-r--r--src/cmdmapper.h4
-rw-r--r--src/commentcnv.l6
-rw-r--r--src/commentscan.l24
-rw-r--r--src/compound.xsd14
-rw-r--r--src/config.l31
-rw-r--r--src/config.xml25
-rw-r--r--src/context.cpp2278
-rw-r--r--src/context.h178
-rw-r--r--src/definition.cpp4
-rw-r--r--src/definition.h2
-rw-r--r--src/docbookvisitor.cpp94
-rw-r--r--src/docbookvisitor.h1
-rw-r--r--src/docparser.cpp30
-rw-r--r--src/docparser.h2
-rw-r--r--src/doctokenizer.h1
-rw-r--r--src/doctokenizer.l32
-rw-r--r--src/doxygen.cpp132
-rw-r--r--src/doxygen.pro.in12
-rw-r--r--src/doxygen.sty10
-rw-r--r--src/entry.h1
-rw-r--r--src/fileparser.cpp51
-rw-r--r--src/fileparser.h (renamed from src/vhdlscanner.h)50
-rw-r--r--src/fortrancode.l2
-rw-r--r--src/fortranscanner.l7
-rw-r--r--src/groupdef.cpp7
-rw-r--r--src/groupdef.h3
-rw-r--r--src/htmldocvisitor.cpp73
-rw-r--r--src/htmldocvisitor.h1
-rw-r--r--src/htmlentity.cpp2
-rw-r--r--src/htmlgen.cpp32
-rw-r--r--src/index.cpp38
-rw-r--r--src/latexdocvisitor.cpp52
-rw-r--r--src/latexdocvisitor.h1
-rw-r--r--src/libdoxygen.pro.in17
-rw-r--r--src/libdoxygen.t.in3
-rw-r--r--src/mandocvisitor.cpp1
-rw-r--r--src/markdown.cpp12
-rw-r--r--src/memberdef.cpp37
-rw-r--r--src/memberdef.h6
-rw-r--r--src/message.cpp6
-rw-r--r--src/namespacedef.h2
-rw-r--r--src/outputlist.cpp1
-rw-r--r--src/parserintf.h10
-rw-r--r--src/perlmodgen.cpp3
-rw-r--r--src/plantuml.cpp97
-rw-r--r--src/plantuml.h40
-rw-r--r--src/portable_c.c2
-rw-r--r--src/pre.l11
-rw-r--r--src/printdocvisitor.h2
-rw-r--r--src/rtfdocvisitor.cpp34
-rw-r--r--src/rtfdocvisitor.h1
-rw-r--r--src/scanner.l6
-rw-r--r--src/tagreader.cpp3
-rw-r--r--src/template.cpp571
-rw-r--r--src/template.h25
-rw-r--r--src/translator_en.h2
-rw-r--r--src/util.cpp105
-rw-r--r--src/util.h2
-rw-r--r--src/vhdlcode.l2
-rw-r--r--src/vhdldocgen.cpp3749
-rw-r--r--src/vhdldocgen.h303
-rw-r--r--src/vhdljjparser.cpp828
-rw-r--r--src/vhdljjparser.h102
-rw-r--r--src/vhdlscanner.l2052
-rw-r--r--src/xmldocvisitor.cpp9
-rw-r--r--src/xmlgen.cpp23
-rw-r--r--testing/021/indexpage.xml2
-rw-r--r--testing/021_dontinclude.cpp2
-rw-r--r--vhdlparser/CharStream.cc212
-rw-r--r--vhdlparser/CharStream.h257
-rw-r--r--vhdlparser/ErrorHandler.h78
-rw-r--r--vhdlparser/JavaCC.h52
-rw-r--r--vhdlparser/JavaCC.h.in52
-rw-r--r--vhdlparser/Makefile.in40
-rw-r--r--vhdlparser/ParseException.cc186
-rw-r--r--vhdlparser/ParseException.h99
-rw-r--r--vhdlparser/Token.cc92
-rw-r--r--vhdlparser/Token.h116
-rw-r--r--vhdlparser/TokenManager.h33
-rw-r--r--vhdlparser/TokenMgrError.cc121
-rw-r--r--vhdlparser/TokenMgrError.h90
-rw-r--r--vhdlparser/VhdlParser.cc13071
-rw-r--r--vhdlparser/VhdlParser.h8984
-rw-r--r--vhdlparser/VhdlParserConstants.h950
-rw-r--r--vhdlparser/VhdlParserErrorHandler.hpp40
-rw-r--r--vhdlparser/VhdlParserIF.cpp55
-rw-r--r--vhdlparser/VhdlParserIF.h12
-rw-r--r--vhdlparser/VhdlParserTokenManager.cc3605
-rw-r--r--vhdlparser/VhdlParserTokenManager.h139
-rw-r--r--vhdlparser/vhdlparser.jj2816
-rw-r--r--vhdlparser/vhdlparser.patch10
-rw-r--r--vhdlparser/vhdlparser.pro.in33
-rw-r--r--vhdlparser/vhdlstring.h101
-rw-r--r--winbuild/Doxygen.vcproj146
109 files changed, 39046 insertions, 4102 deletions
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/Doxyfile b/Doxyfile
index 3b175c4..325a875 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -1,4 +1,4 @@
-# Doxyfile 1.8.3.1
+# Doxyfile 1.8.7
#---------------------------------------------------------------------------
# Project related configuration options
@@ -10,6 +10,7 @@ PROJECT_BRIEF =
PROJECT_LOGO =
OUTPUT_DIRECTORY = doxygen_docs
CREATE_SUBDIRS = YES
+ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
@@ -63,6 +64,7 @@ INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
+SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
@@ -84,7 +86,7 @@ FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
@@ -94,9 +96,10 @@ WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text "
WARN_LOGFILE =
#---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
#---------------------------------------------------------------------------
-INPUT = src
+INPUT = src \
+ vhdlparser
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h \
*.cpp \
@@ -105,6 +108,7 @@ RECURSIVE = NO
EXCLUDE = src/logos.cpp \
src/lodepng.cpp
EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
@@ -116,7 +120,7 @@ FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
@@ -124,18 +128,17 @@ STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
-CLANG_ASSISTED_PARSING = YES
-CLANG_OPTIONS =
#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT =
@@ -173,7 +176,7 @@ QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
-DISABLE_INDEX = YES
+DISABLE_INDEX = NO
GENERATE_TREEVIEW = YES
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
@@ -184,6 +187,7 @@ USE_MATHJAX = NO
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS =
+MATHJAX_CODEFILE =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = YES
EXTERNAL_SEARCH = NO
@@ -192,7 +196,7 @@ SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT =
@@ -211,7 +215,7 @@ LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
#---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT =
@@ -220,31 +224,31 @@ RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT =
MAN_EXTENSION = .3
+MAN_SUBDIR =
MAN_LINKS = NO
#---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
-# configuration options related to the DOCBOOK output
+# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
+DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
@@ -257,13 +261,14 @@ ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
-INCLUDE_PATH = qtools libmd5
+INCLUDE_PATH = qtools \
+ libmd5
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES = qtools_docs/qtools.tag=../../qtools_docs/html
GENERATE_TAGFILE = doxygen.tag
@@ -276,6 +281,7 @@ PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
MSCGEN_PATH =
+DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
DOT_NUM_THREADS = 0
@@ -299,6 +305,8 @@ INTERACTIVE_SVG = YES
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
+DIAFILE_DIRS =
+PLANTUML_JAR_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
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/addon/doxywizard/doxywizard.pro.in b/addon/doxywizard/doxywizard.pro.in
index d5c0cab..1ad36a9 100644
--- a/addon/doxywizard/doxywizard.pro.in
+++ b/addon/doxywizard/doxywizard.pro.in
@@ -24,11 +24,10 @@ HEADERS += doxywizard.h version.h expert.h config.h helplabel.h \
SOURCES += doxywizard.cpp expert.cpp wizard.cpp \
inputbool.cpp inputstring.cpp inputint.cpp inputstrlist.cpp
RESOURCES += doxywizard.qrc
-INCBUFSIZE=$(PYTHON) ../../src/increasebuffer.py
win32:RC_FILE += doxywizard.rc
config.target = ../../generated_src/doxywizard/config_doxyw.cpp
-config.commands = $(LEX) -Pconfig_doxywYY -t ../../addon/doxywizard/config_doxyw.l | $(INCBUFSIZE) >../../generated_src/doxywizard/$*.cpp
+config.commands = $(LEX) -Pconfig_doxywYY -t ../../addon/doxywizard/config_doxyw.l | $(PYTHON) ../../src/increasebuffer.py >../../generated_src/doxywizard/$*.cpp
config.depends = ../../addon/doxywizard/config_doxyw.l ../../src/increasebuffer.py
configdoc.target = ../../generated_src/doxywizard/configdoc.cpp
configdoc.commands = $(PYTHON) ../../src/configgen.py -wiz ../../src/config.xml > ../../generated_src/doxywizard/configdoc.cpp
diff --git a/configure b/configure
index 0b0d6fb..5c01af0 100755
--- a/configure
+++ b/configure
@@ -17,7 +17,7 @@
doxygen_version_major=1
doxygen_version_minor=8
-doxygen_version_revision=7
+doxygen_version_revision=8
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO
@@ -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/doc/changelog.doc b/doc/changelog.doc
index 634ca49..606f63f 100644
--- a/doc/changelog.doc
+++ b/doc/changelog.doc
@@ -2,6 +2,141 @@
\tableofcontents
\section log_1_8 1.8 Series
+\subsection log_1_8_8 Release 1.8.8
+\htmlonly
+<b>(release date 21-08-2014)</b>
+<a name="1.8.8"></a>
+<h3>New features</h3>
+<ul>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731947">731947</a> - Support for PlantUML [<a href="http://github.com/doxygen/doxygen/commit/7506404e646f1fcc5a26ca6fca91a7f65154f05a">view</a>]</li>
+<li>Add BREAD_CRUMB_TRAIL. [<a href="http://github.com/doxygen/doxygen/commit/4074da5b83d37dd1c72c5df015fb2b41e7725a7e">view</a>]</li>
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=172072">172072</a> $title doesn&#39;t work in LateX header [<a href="http://github.com/doxygen/doxygen/commit/790000b90944646702ddd3a183ec166669c18f51">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=583958">583958</a> Class diagrams and class hierarchy don&#39;t work for java generic classes [<a href="http://github.com/doxygen/doxygen/commit/c3ddf3331239fb3f41e502a8337eee786ceaad06">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=589707">589707</a> Flex .rule file for Visual Studio build can&#39;t cope with spaces in filenames [<a href="http://github.com/doxygen/doxygen/commit/eb3ab2452d8a1ef7a85af7a03e1622c12b40400b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623299">623299</a> Fortran: quotation after define causes error [<a href="http://github.com/doxygen/doxygen/commit/f083109de116ee2c6e2a31a15ebc17d2dff008e0">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625601">625601</a> FORTRAN: recognition free versus fixed formatted code [<a href="http://github.com/doxygen/doxygen/commit/476d79d31a0534c3d7d07001c47c1212a73d10a5">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700510">700510</a> Bibliography duplicate filenames fails [<a href="http://github.com/doxygen/doxygen/commit/7779bf6d6206bc0f78c22100034c44bfdb7f1bc1">view</a>] and
+ [<a href="http://github.com/doxygen/doxygen/commit/da029a3c893df22536cb3635e597fd3f5b2a4862">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702584">702584</a> \cite rejects valid BibTeX keys [<a href="http://github.com/doxygen/doxygen/commit/06170de4a166bfad9342f3b957dda82b7fb266b2">view</a>] and
+ [<a href="http://github.com/doxygen/doxygen/commit/69df2f9d1deb87b79c79f9ea1bf20380ff9b71ad">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705503">705503</a> TCL: Documentation of oo::define is not working [<a href="http://github.com/doxygen/doxygen/commit/5ec66c2286d7cedbdbb0930fe0e293b050c91d24">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=727732">727732</a> Nested C structures/unions does not work with groups [<a href="http://github.com/doxygen/doxygen/commit/f4388dc4a62e183b7ca4457eba7cb978a35804c2">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=728654">728654</a> configuration stops with settings.h missing [<a href="http://github.com/doxygen/doxygen/commit/fd4b42ec54cb8d6faf2b0f16e580f376e8cf6982">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=728740">728740</a> XML Output: Doxygen doesn't escape &amp; characters (included in a hyperlink) in &lt;detaileddescription&gt; [<a href="http://github.com/doxygen/doxygen/commit/cfde6cdd600b21bba6a2eb0ca0e7e208e014ccaf">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729017">729017</a> function object in member initializer causes documentation loss [<a href="http://github.com/doxygen/doxygen/commit/f4f3e381dba1bc5d46feea3c39e8f076e27463d1">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729427">729427</a> [PATCH] Propagate configure&#39;s perl to makefiles [<a href="http://github.com/doxygen/doxygen/commit/f1a692b019a30f7aa07e0fb3e11402d262af8026">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=730418">730418</a> man page extension is incorrect [<a href="http://github.com/doxygen/doxygen/commit/f25d896d4da9b44c23f89bfdd0379fa97ab2c351">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=730520">730520</a> No documentation generated for method-less C++ struct [<a href="http://github.com/doxygen/doxygen/commit/21178ab40160abf011fa084a10892b5b7821e44c">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=730887">730887</a> [PATCH] Fix potential copy and paste error in inputstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/6f5748e822b009cbe82cc1df8eea43e4769bc44b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=730888">730888</a> [PATCH] Fix missing &#39;&amp;&#39; in Boolean operation in qstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/27f1e1e9316addcfd0bbc3321b5614ed14f7a1a5">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731238">731238</a> Dead links in html documentation when using tabs for indentation in c++ [<a href="http://github.com/doxygen/doxygen/commit/2cc3b18da39bde323c5739483e507a133e93ac22">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731363">731363</a> Callgraphs for C# only generated for methods inside the same class [<a href="http://github.com/doxygen/doxygen/commit/7edbf2b2e705eccc0d99cce86149228473bc7f3e">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731985">731985</a> Variadic macros failing to expand if trailing ... is empty [<a href="http://github.com/doxygen/doxygen/commit/070c35549da108695074239be3ab4268f3722261">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=732594">732594</a> Two entries for a single member in Doxygen XML [<a href="http://github.com/doxygen/doxygen/commit/ed8ce3cf405204916f9832e26797cb15d1490fd1">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=732768">732768</a> nested html tables cause pdflatex to hang (1.8.4 and 1.8.6) [<a href="http://github.com/doxygen/doxygen/commit/3cb963061343aa5b3b8a044cdfa62848723a02ee">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=733451">733451</a> volatile declaration on member functions is not handled as xml attribute [<a href="http://github.com/doxygen/doxygen/commit/97d12d058a7831adcc8c6f2cfe8c20ddd2ae5bc2">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=733605">733605</a> Incorrect LaTeX generation for private union member in C++ [<a href="http://github.com/doxygen/doxygen/commit/a36ddbe0ee97c5ee248b7b391b4c30fd4b3c884b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=733722">733722</a> XML Output invalid: XML_PROGRAMLISTING=YES copies Unicode form feed character (U+000C) to XML files [<a href="http://github.com/doxygen/doxygen/commit/b272b4b5077873457a0f6b517ac799f4a5f8c951">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=733856">733856</a> segfault in QGListIterator while parsing fortran code [<a href="http://github.com/doxygen/doxygen/commit/aac81f8bfe8298aa0839bb2d7c70ea75149cdffb">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=733938">733938</a> Explicit links using operator()() not generated. [<a href="http://github.com/doxygen/doxygen/commit/e913d55b2e5a8e37ebd1ffd8fec730886a45fbda">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=734077">734077</a> no uniquely matching class member found for inline function definition where parameter argument names don&#39;t match [<a href="http://github.com/doxygen/doxygen/commit/6f0269ef3074bbc4bc16ad63a0e0a8f9b5f0ce31">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=734099">734099</a> Add support for non-parsed language [<a href="http://github.com/doxygen/doxygen/commit/0dd59398b3f62288897c8c3405977a27a94fbfee">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=734245">734245</a> Q_PROPERTY switches the member access from private to public [<a href="http://github.com/doxygen/doxygen/commit/392b48a25e4315528fbb11a5a1bfc9f2bca791c0">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=734331">734331</a> Strong enum members listed in containing namespace [<a href="http://github.com/doxygen/doxygen/commit/4766fdba2ab196844a0bd5ec5e0b64d94df4a74f">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=734704">734704</a> Sigsegv while generating XML output [<a href="http://github.com/doxygen/doxygen/commit/14f88af12bae98859eafe605ddb5f54029e44076">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=734727">734727</a> GENERATE_TAGFILE no longer includes any @*section links [<a href="http://github.com/doxygen/doxygen/commit/7d9d4320f5d183c4e1ebc87a316589c36f0afeed">view</a>] and
+ [<a href="http://github.com/doxygen/doxygen/commit/8b279c9bc28c70405e61219a6c2b3c6dbc7426e6">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=734828">734828</a> Request: disable building documentation if Python 2.6 or newer not available [<a href="http://github.com/doxygen/doxygen/commit/264ecc9eee1f2b74f0110120574056f0de42a3f9">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735001">735001</a> No output for markdown pages with duplicate label title (different anchor) [<a href="http://github.com/doxygen/doxygen/commit/ebb2fe6d73b4aefc6dadab8eec45adc4ee0c9fd5">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735037">735037</a> QGDict::hashAsciiKey: Invalid null key [<a href="http://github.com/doxygen/doxygen/commit/def392bf8d0326733c20504dc36168093e087c95">view</a>]</li>
+<li>Add FORTRAN 2003 keywords and commands [<a href="http://github.com/doxygen/doxygen/commit/4cbfaa8372beff4bd7070dd840924af8d96b0772">view</a>]</li>
+<li>Add type option to FORTRAN select statements [<a href="http://github.com/doxygen/doxygen/commit/db289e2272bfc3b00452cbf7c2a30114fb8b7c58">view</a>]</li>
+<li>Added build support for Python3+ and Python2.6+ [<a href="http://github.com/doxygen/doxygen/commit/98a54c576eec4feda606156ae591854311d9cd0e">view</a>]</li>
+<li>Added class/procedure vardefs to FORTRAN code highlighting [<a href="http://github.com/doxygen/doxygen/commit/dbd1985de07ccd19caf57ffa36c88811048689a4">view</a>]</li>
+<li>Added documentation for some missing HTML commands [<a href="http://github.com/doxygen/doxygen/commit/04c89e604877fa9a4aea160d971c782006872710">view</a>]</li>
+<li>Added flatten, listsort and paginate filters [<a href="http://github.com/doxygen/doxygen/commit/edd056308d04d6f445a48e05105d4d9a0ece80a0">view</a>]</li>
+<li>Added get filter, unified index properties [<a href="http://github.com/doxygen/doxygen/commit/7e3e890fedfb20e7018fadfa87ed97eef7f2b720">view</a>]</li>
+<li>Added groupby filter and some more context info [<a href="http://github.com/doxygen/doxygen/commit/064992b0c901661b49de24ce1a1d9a06e9957a93">view</a>]</li>
+<li>Added import keyword to FORTRAN code highlighting [<a href="http://github.com/doxygen/doxygen/commit/558697792cd062b93e8d7b7904fb9897e5f70750">view</a>]</li>
+<li>Added lists for indices to template context [<a href="http://github.com/doxygen/doxygen/commit/2d35b9a7c0fe70fa894dc266dd0b5ddd54d4014e">view</a>]</li>
+<li>Added mainpage to context and improved page tree [<a href="http://github.com/doxygen/doxygen/commit/2e837e0be05636923ef593c29299ff76c4590a09">view</a>]</li>
+<li>Added member indexes to template context [<a href="http://github.com/doxygen/doxygen/commit/b850eb45e80b348cbe8629c354350b051f7ef2ec">view</a>]</li>
+<li>Added missing links in changelog when multiple bug ids were on one line [<a href="http://github.com/doxygen/doxygen/commit/b752d01fe2de1668c0a247bc3955d7be6987d046">view</a>]</li>
+<li>Added more missing links to the changelog [<a href="http://github.com/doxygen/doxygen/commit/0d50c30becc147918b091c02b41502829b8083a3">view</a>]</li>
+<li>Added namespace info to the context [<a href="http://github.com/doxygen/doxygen/commit/a7c14ac74c43e6b372d866deeed77fe69e2a68e0">view</a>]</li>
+<li>Addition of module data to context and alphaIndex filter [<a href="http://github.com/doxygen/doxygen/commit/e0c3517ff9369387e00dd596b094a4729cfe789c">view</a>]</li>
+<li>Coded coloring of flow statements corrected (regression) [<a href="http://github.com/doxygen/doxygen/commit/ee7194bd73ee3a8142aee6ea59d2e5dc717b18de">view</a>]</li>
+<li>Corrected copyright year [<a href="http://github.com/doxygen/doxygen/commit/7652fc8472ac83e26641fb737539e7c87725ed68">view</a>]</li>
+<li>Correction of typing error [<a href="http://github.com/doxygen/doxygen/commit/81c99d10dbc41feab4a1aca220b27634ca0ff8cd">view</a>]</li>
+<li>Disabled/fixed segments that produced doxygen warnings while running the test [<a href="http://github.com/doxygen/doxygen/commit/3a5e6ac7c6018a7a0da7acd830293da0fcb7a21c">view</a>]</li>
+<li>Docbook output improvements [<a href="http://github.com/doxygen/doxygen/commit/12f5ee8a8c3a287f6bcfe81f79ff4332b3987c7e">view</a>]</li>
+<li>Documentation generator: added support for C# property accessors visibility modifiers. [<a href="http://github.com/doxygen/doxygen/commit/54ac45bd9f535d13b2bf98e4d71b27b4590c3dc7">view</a>]</li>
+<li>Doxywizard: make the Next button on the last page of the expert tab switch to the run tab [<a href="http://github.com/doxygen/doxygen/commit/2277e6e695d785d319cb52a8a8ead2982eac2afa">view</a>]</li>
+<li>Doxywizard: make the Next button on the last page of the wizard switch to the run tab [<a href="http://github.com/doxygen/doxygen/commit/fbc60af2298c2668893e2f7045f66765f8e0c63f">view</a>]</li>
+<li>Error linking 32-bit windows [<a href="http://github.com/doxygen/doxygen/commit/cce307d96a93515d46068cfdcf5e55c1944ae9e5">view</a>]</li>
+<li>Fix FORTRAN code function scope test [<a href="http://github.com/doxygen/doxygen/commit/2030240bc18d32581479306e6fd86211e6f30c73">view</a>]</li>
+<li>Fix after rebase from master [<a href="http://github.com/doxygen/doxygen/commit/57eee1777c18caa6d3215ec162da1fd9b2d14eb2">view</a>]</li>
+<li>Fix description of USE_PDFLATEX [<a href="http://github.com/doxygen/doxygen/commit/c87cceafe203a11e4074b748469e993d13cd8fb3">view</a>]</li>
+<li>Fix highlighting issues [<a href="http://github.com/doxygen/doxygen/commit/be0986e9ab7c1788e3650f1df7e7af70b68f28d8">view</a>]</li>
+<li>Fix typo [<a href="http://github.com/doxygen/doxygen/commit/e32121ab1fb261464356ce2352c08930f942f805">view</a>]</li>
+<li>Fix unnecessary rules for FORTRAN types [<a href="http://github.com/doxygen/doxygen/commit/1e6323e5bb04f49df9d00e82e5db3e8f301dbfc4">view</a>]</li>
+<li>Fix warning about unused functions in qstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/84064ac4db9e487ca4bff9b6c37eb72992050ee3">view</a>]</li>
+<li>Fixed keyword type [<a href="http://github.com/doxygen/doxygen/commit/d8221cb7a73efc8f20068636c3d2fec84ce8cb8b">view</a>]</li>
+<li>Fixed missing include for Linux [<a href="http://github.com/doxygen/doxygen/commit/88468313289c659088be9beece59a82206153ed8">view</a>]</li>
+<li>Fixed test 021 [<a href="http://github.com/doxygen/doxygen/commit/c5c763056535216ccce4bed4892358bf5c8d1fd5">view</a>]</li>
+<li>Fixed typo [<a href="http://github.com/doxygen/doxygen/commit/0bb9b762844a2f88043223a29182dd9e7e524cef">view</a>]</li>
+<li>Fixed typo and used QString for directory [<a href="http://github.com/doxygen/doxygen/commit/5d00fa5862a1724bbe417e33d6c1a260607281ef">view</a>]</li>
+<li>Fixed windows compile issue for is_neutral [<a href="http://github.com/doxygen/doxygen/commit/9278509cf82ed7b0ff37c39e4d6e97f5308f29de">view</a>]</li>
+<li>Fixes for ./configure script on Solaris [<a href="http://github.com/doxygen/doxygen/commit/d234115b6f387ff723cb97a4d47b2bcca7f0bc6d">view</a>]</li>
+<li>Fixes regression due to PR 169 [<a href="http://github.com/doxygen/doxygen/commit/56143a268898249a63bb0a443e09dc2c77ec9ce9">view</a>]</li>
+<li>Language parser: added support for C# property accessors visibility modifiers. [<a href="http://github.com/doxygen/doxygen/commit/f5ff1b8e55b4dad074d2a73f1d003ff2991cf894">view</a>]</li>
+<li>Made INSTALL file version and date independent [<a href="http://github.com/doxygen/doxygen/commit/1781094043eb5f8f7b0f0bbe5f720012346123a2">view</a>]</li>
+<li>Made bread crumb trails enabled unconditionally [<a href="http://github.com/doxygen/doxygen/commit/c7c7d73c184ee2eebf65e83044cf1e325751cffa">view</a>]</li>
+<li>Made setName() virtual so overloading works [<a href="http://github.com/doxygen/doxygen/commit/d1e39098f94487f544a068b7864aa8d1b1f345cd">view</a>]</li>
+<li>Make index for faq [<a href="http://github.com/doxygen/doxygen/commit/38dfdcaba3e9130833cd7b695d5e20fec26f5c3f">view</a>]</li>
+<li>Messages truncated in warnings file [<a href="http://github.com/doxygen/doxygen/commit/cc4f3b454cae7d3e9eaa44342bcbae1061f5e790">view</a>]</li>
+<li>Minor fixes [<a href="http://github.com/doxygen/doxygen/commit/c31a81a85e0396fb276beefd06bb71c2819571ed">view</a>]</li>
+<li>Minor fixes to the template context [<a href="http://github.com/doxygen/doxygen/commit/963e0adfd76e6a59ace5e7318f948632322b1e51">view</a>]</li>
+<li>Missing word after \n command in Doxygen rtf output, version 1.8.5 &amp; up [<a href="http://github.com/doxygen/doxygen/commit/ea9f3b1d727b22973c0176b2564304fb160aa70b">view</a>]</li>
+<li>More robust extraction of scope information from tag files [<a href="http://github.com/doxygen/doxygen/commit/6a60477b418e21dbadd3e62dc557a038e319581b">view</a>]</li>
+<li>No warning in case cite definition is missing [<a href="http://github.com/doxygen/doxygen/commit/1f77638174f715f0f2bcf5b2e32ebb329d531f85">view</a>]</li>
+<li>Preparations for release 1.8.8 [<a href="http://github.com/doxygen/doxygen/commit/f16be0113f8d47d4f04e69d0c45ccc4b24e3c426">view</a>]</li>
+<li>Removed not implemented HTML commands from documentation [<a href="http://github.com/doxygen/doxygen/commit/8199b2d105313efd30367c7a03b57bf7a7d2180b">view</a>]</li>
+<li>Removed unsupported HTML commands from the docs [<a href="http://github.com/doxygen/doxygen/commit/16ba4bd5744c2e5fbfabe95b27736b8ca8030390">view</a>]</li>
+<li>Set deployment targets for MacOSX 10.5+ versions [<a href="http://github.com/doxygen/doxygen/commit/28f40b3aea1411488832205fae447f4652125cdc">view</a>]</li>
+<li>Support multiple extra HTML stylesheets. [<a href="http://github.com/doxygen/doxygen/commit/595943c96860425f9086028b00e1e155e8ec434f">view</a>]</li>
+<li>Tcl: add missing file that breaks test 057 [<a href="http://github.com/doxygen/doxygen/commit/73e7c340f555291d4264b2f83caacf59a5a3395f">view</a>]</li>
+<li>Tcl: add test code for Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729092">729092</a> [<a href="http://github.com/doxygen/doxygen/commit/36ce0578065b95cf12b81e5a4edd95dea5707e22">view</a>]</li>
+<li>Tcl: collect XRefs also if INLINE_SOURCES = no [<a href="http://github.com/doxygen/doxygen/commit/6245ef410358f332330195f9f2bfa458cfb6a2b8">view</a>]</li>
+<li>Tcl: correct namespace resolution in case of INLINE_SOURCES = YES [<a href="http://github.com/doxygen/doxygen/commit/470143192d0c8cf90ad84a66226d48060cc713db">view</a>]</li>
+<li>Tcl: recurse for [] [<a href="http://github.com/doxygen/doxygen/commit/9d315a987d7d0ea2f38809aa74e36c92281910df">view</a>]</li>
+<li>Tcl: refactor similar code into tcl_codify_token function [<a href="http://github.com/doxygen/doxygen/commit/06bd53ac6acee5fb83d9f2b5ded1c55c8a069b29">view</a>]</li>
+<li>Tcl: support eval/catch commands [<a href="http://github.com/doxygen/doxygen/commit/9d24b488add8b4c7c689f58a095184a6ed85e9f1">view</a>]</li>
+<li>Tcl: support switch command [<a href="http://github.com/doxygen/doxygen/commit/2984dad86558b4a81e11ce07485057e3903a9304">view</a>]</li>
+<li>Tcl: test 057 additionally tests mutual Xrefs for two files [<a href="http://github.com/doxygen/doxygen/commit/c6aaf0a4c35db27f968a7a6d0b9fa25b5b311bc3">view</a>]</li>
+<li>Template context support for CREATE_SUBDIRS [<a href="http://github.com/doxygen/doxygen/commit/9282aab5ed2a0cca3858df6e62132f959e99edb5">view</a>]</li>
+<li>Update dot.cpp [<a href="http://github.com/doxygen/doxygen/commit/a15c5c89f0b4f97d57474d9ea0e3166709d35534">view</a>]</li>
+<li>Update latexgen.cpp [<a href="http://github.com/doxygen/doxygen/commit/1f877b09262f34e6bad6dbfaee4b04b4be03bd4c">view</a>]</li>
+<li>Update test 058 because commit 9d315a9 fixes also Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729135">729135</a> [<a href="http://github.com/doxygen/doxygen/commit/3486bfc158008da1d69d420e57e7a10f1c0d69c3">view</a>]</li>
+<li>Replaced the VHDL parser with the VHDL scanner from 1.7.5 to avoid potential licensing issues [<a href="http://github.com/doxygen/doxygen/commit/99433b3d2319916f11608c2c818fe35360256d9e">view</a>]</li>
+<li>New VHDL parser implementation [<a href="http://github.com/doxygen/doxygen/commit/36122e49ed1d9e640b1ceca52536ec7c55e10474">view</a>]</li>
+<li>Vhdl fixes [<a href="http://github.com/doxygen/doxygen/commit/3b8fea2f1f7f2e6a83a35626e6dec9d114a78c9e">view</a>]</li>
+<li>\usepackage{fixltx2e} must come before use \usepackage{float} [<a href="http://github.com/doxygen/doxygen/commit/d8a36bbd404bc9c77689f42cc4bfde8ac393cd8c">view</a>]</li>
+<li>cache anonymous into ClassDefImpl::isAnonymous [<a href="http://github.com/doxygen/doxygen/commit/34a5a051a8b91215ae4f93e5541d43c33aa887c1">view</a>]</li>
+<li>changed append filter and added index and path attributes to node [<a href="http://github.com/doxygen/doxygen/commit/47bc520ac8c0dde310dcb1999c622c591b373ffc">view</a>]</li>
+<li>doc/translator.py -- unification for Python 2.6+ and 3.3+ (not finished) [<a href="http://github.com/doxygen/doxygen/commit/8cac977ddfdc1c77546f5d766387f4a57710c8c0">view</a>]</li>
+<li>doc/translator.py unified for Python 2.6+ and Python 3.0+ [<a href="http://github.com/doxygen/doxygen/commit/6212c2d2af12dd9d47459bdecdf79ad106060229">view</a>]</li>
+<li>make.bat: change current directory [<a href="http://github.com/doxygen/doxygen/commit/fc386eb107958b4f3214aa2c0c6caf2a91c83177">view</a>] and
+ [<a href="http://github.com/doxygen/doxygen/commit/feb24c82002ced816bc72eb8f2a6a35c71e25ed7">view</a>]</li>
+<li>removeRedundantWhiteSpace micro-optimization [<a href="http://github.com/doxygen/doxygen/commit/d4601735b582b903f1ccb144f59b2030a7797b05">view</a>]</li>
+<li>resolves the error of unbalanced tags opened/closed in docbook output: parser error : Opening and ending tag mismatch: para line 358 and tbody [<a href="http://github.com/doxygen/doxygen/commit/d7b0858e079419bb7ea862e16946218a9352d5b5">view</a>]</li>
+<li>winbuild/pack_the_distribution_for_windows.py minor updates [<a href="http://github.com/doxygen/doxygen/commit/6d969cab51f4c32784966a28b8b9d5fe2d5b2089">view</a>]</li>
+</ul>
+\endhtmlonly
+
\subsection log_1_8_7 Release 1.8.7
\htmlonly
<b>(release date 21-04-2014)</b>
diff --git a/doc/commands.doc b/doc/commands.doc
index 5743832..73eb842 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -90,6 +90,7 @@ documentation:
\refitem cmdendrtfonly \\endrtfonly
\refitem cmdendsecreflist \\endsecreflist
\refitem cmdendverbatim \\endverbatim
+\refitem cmdenduml \\enduml
\refitem cmdendxmlonly \\endxmlonly
\refitem cmdenum \\enum
\refitem cmdexample \\example
@@ -174,6 +175,7 @@ documentation:
\refitem cmdskip \\skip
\refitem cmdskipline \\skipline
\refitem cmdsnippet \\snippet
+\refitem cmdstartuml \\startuml
\refitem cmdstruct \\struct
\refitem cmdsubpage \\subpage
\refitem cmdsubsection \\subsection
@@ -2356,6 +2358,20 @@ Commands for visual enhancements
\endcode
\endverbatim
+ If the contents of the code block are in a language that doxygen cannot parse, doxygen
+ will just show the output as-is. You can make this explicit using .unparsed, or by
+ giving some other extension that doxygen doesn't support, e.g.
+
+\verbatim
+ \code{.unparsed}
+ Show this as-is please
+ \endcode
+
+ \code{.sh}
+ echo "This is a shell script"
+ \endcode
+\endverbatim
+
\sa section \ref cmdendcode "\\endcode" and section \ref cmdverbatim "\\verbatim".
<hr>
@@ -2517,6 +2533,59 @@ class Receiver
\sa section \ref cmdmscfile "\\mscfile".
<hr>
+\section cmdstartuml \\startuml
+
+ \addindex \\startuml
+ Starts a text fragment which should contain a valid description of a
+ PlantUML diagram. See http://plantuml.sourceforge.net/ for examples.
+ The text fragment ends with \ref cmdenduml "\\enduml".
+ \note You need to install Java and the PlantUML's jar file,
+ if you want to use this command. The location of the jar file should be specified
+ using \ref cfg_plantuml_jar_path "PLANTUML_JAR_PATH".
+
+Here is an example of the use of the \c \\startuml command.
+\code
+/** Sender class. Can be used to send a command to the server.
+ * The receiver will acknowledge the command by calling Ack().
+ * \startuml
+ * Sender->Receiver : Command()
+ * Sender<--Receiver : Ack()
+ * \enduml
+ */
+class Sender
+{
+ public:
+ /** Acknowledgment from server */
+ void Ack(bool ok);
+};
+
+/** Receiver class. Can be used to receive and execute commands.
+ * After execution of a command, the receiver will send an acknowledgment
+ * \startuml
+ * Receiver<-Sender : Command()
+ * Receiver-->Sender : Ack()
+ * \enduml
+ */
+class Receiver
+{
+ public:
+ /** Executable a command on the server */
+ void Command(int commandId);
+};
+\endcode
+
+\note For compatibility with running PlantUML as a preprocessing step before
+running doxygen, you can also add the name of the image file after \c \\startuml
+and inside curly brackets, i.e.
+\verbatim
+@startuml{myimage.png}
+Alice -> Bob : Hello
+@enduml
+\endverbatim
+When the name of the image is specified, doxygen will generate an image with that name.
+Without the name doxygen will choose a name automatically.
+
+<hr>
\section cmddotfile \\dotfile <file> ["caption"]
\addindex \\dotfile
@@ -2637,6 +2706,12 @@ class Receiver
Ends a block that was started with \ref cmdmsc "\\msc".
<hr>
+\section cmdenduml \\enduml
+
+ \addindex \\enduml
+ Ends a block that was started with \ref cmdstartuml "\\startuml".
+
+<hr>
\section cmdendhtmlonly \\endhtmlonly
\addindex \\endhtmlonly
diff --git a/doc/customize.doc b/doc/customize.doc
index 7252a4a..46b1d8b 100644
--- a/doc/customize.doc
+++ b/doc/customize.doc
@@ -110,8 +110,8 @@ This will create 3 files:
link to www.doxygen.org and the body and html end tags.
- customdoxygen.css is the default cascading style sheet
used by doxygen. It is recommended only to look into this file and overrule
- some settings you like by putting them in a separate stylesheet and
- referencing that extra file
+ some settings you like by putting them in a separate stylesheets and
+ referencing those extra files
via \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET".
You should edit these files and then reference them from the config file.
diff --git a/doc/docblocks.doc b/doc/docblocks.doc
index c74211c..333e5d2 100644
--- a/doc/docblocks.doc
+++ b/doc/docblocks.doc
@@ -371,7 +371,7 @@ typedef, enum or preprocessor definition you must first document the file
that contains it (usually this will be a header file, because that file
contains the information that is exported to other source files).
-Let's repeat that, because it is often overlooked:
+@attention Let's repeat that, because it is often overlooked:
to document global objects (functions, typedefs, enum, macros, etc), you
<em>must</em> document the file in which they are defined. In other words,
there <em>must</em> at least be a \verbatim /*! \file */ \endverbatim
@@ -395,6 +395,23 @@ using structural commands:
in comment blocks which are place in front of a function. This is clearly
a case where the \\fn command is redundant and will only lead to problems.
+ When you place a comment block in a file with one of the following extensions
+ `.dox`, `.txt`, or `.doc` then doxygen will hide this file from the file list.
+
+ If you have a file that doxygen cannot parse but still would like to document it,
+ you can show it as-is using \ref cmdverbinclude "\\verbinclude", e.g.
+
+\verbatim
+/*! \file myscript.sh
+ * Look at this nice script:
+ * \verbinclude myscript.sh
+ */
+\endverbatim
+
+Make sure that the script is explicitly listed in the \ref cfg_input "INPUT" or
+that \ref cfg_file_patterns "FILE_PATTERNS" includes the `.sh` extention and the
+the script can be found in the path set via \ref cfg_example_path "EXAMPLE_PATH".
+
\subsection pythonblocks Comment blocks in Python
For Python there is a standard way of documenting the code using
diff --git a/doc/install.doc b/doc/install.doc
index 118c05c..9648ade 100644
--- a/doc/install.doc
+++ b/doc/install.doc
@@ -272,7 +272,7 @@ or <a href="http://www.mingw.org/">MinGW</a>.
The next step is to install modern versions of \c bison and \c flex
(see http://sourceforge.net/projects/winflexbison. After installation and adding them to
your `path` rename `win_flex.exe` to `flex.exe` and `win_bison.exe` to `bison.exe`)
-Furthermore you have to install \c python (version 2, see http://www.python.org).
+Furthermore you have to install \c python (version 2.6 or higher, see http://www.python.org).
These packages are needed during the
compilation process if you use a GitHub snapshot of doxygen (the official source releases
come with pre-generated sources).
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index bc1eb53..9e9743c 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -187,8 +187,8 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES
-SERVER_BASED_SEARCH = YES
-EXTERNAL_SEARCH = YES
+SERVER_BASED_SEARCH = NO
+EXTERNAL_SEARCH = NO
SEARCHENGINE_URL = http://macbookpro/~dimitri/doxysearch.cgi
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
diff --git a/src/cite.cpp b/src/cite.cpp
index f0580ed..a33f12f 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -37,6 +37,8 @@ static const char *bib2xhtml_pl =
const QCString CiteConsts::fileName("citelist");
const QCString CiteConsts::anchorPrefix("CITEREF_");
+const QCString bibTmpFile("bibTmpFile_");
+const QCString bibTmpDir("bibTmpDir/");
//--------------------------------------------------------------------------
@@ -45,51 +47,6 @@ CiteDict::CiteDict(int size) : m_entries(size, FALSE)
m_entries.setAutoDelete(TRUE);
}
-static QCString getListOfBibFiles(const QCString &sep,bool namesOnly)
-{
- QCString result;
- QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
- const char *bibdata = citeDataList.first();
- while (bibdata)
- {
- int i;
- QCString bibFile = bibdata;
- if (namesOnly && bibFile.right(4)==".bib") // strip extension
- {
- bibFile = bibFile.left(bibFile.length()-4);
- }
- else
- {
- if (!namesOnly && bibFile.right(4)!=".bib") bibFile += ".bib";
- }
- if ((i=bibFile.findRev('/'))!=-1) // strip path
- {
- bibFile = bibFile.mid(i+1);
- }
- if (!bibFile.isEmpty())
- {
- if (namesOnly) // bare names
- {
- result+=bibFile;
- }
- else // add quotes for paths with spaces
- {
- result+="\""+bibFile+"\"";
- }
- bibdata = citeDataList.next();
- if (bibdata)
- {
- result+=sep;
- }
- }
- else
- {
- bibdata = citeDataList.next();
- }
- }
- return result;
-}
-
void CiteDict::writeLatexBibliography(FTextStream &t)
{
if (m_entries.isEmpty())
@@ -108,7 +65,29 @@ void CiteDict::writeLatexBibliography(FTextStream &t)
"\\phantomsection\n"
"\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n"
"\\bibliographystyle{" << style << "}\n"
- "\\bibliography{" << getListOfBibFiles(",",TRUE) << "}\n"
+ "\\bibliography{";
+ QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
+ QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/";
+ int i = 0;
+ const char *bibdata = citeDataList.first();
+ while (bibdata)
+ {
+ QCString bibFile = bibdata;
+ // Note: file can now have multiple dots
+ if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
+ QFileInfo fi(bibFile);
+ if (fi.exists())
+ {
+ if (!bibFile.isEmpty())
+ {
+ if (i) t << ",";
+ i++;
+ t << bibTmpFile << QString().setNum(i);
+ }
+ }
+ bibdata = citeDataList.next();
+ }
+ t << "}\n"
"\n";
}
@@ -186,47 +165,44 @@ void CiteDict::generatePage() const
f.writeBlock(bstData, bstData.length());
f.close();
- // 4. for html we just copy the bib files to the output so that
- // bibtex can find them without path (bibtex doesn't support path's
- // with spaces!)
- QList<QCString> tempFiles;
- tempFiles.setAutoDelete(TRUE);
+ // 4. for all formats we just copy the bib files to as special output directory
+ // so bibtex can find them without path (bibtex doesn't support paths or
+ // filenames with spaces!)
+ // Strictly not required when only latex is generated
+ QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
+ QCString bibOutputDir = outputDir+"/"+bibTmpDir;
+ QCString bibOutputFiles = "";
QDir thisDir;
- if (Config_getBool("GENERATE_HTML"))
+ thisDir.mkdir(bibOutputDir);
+ const char *bibdata = citeDataList.first();
+ int i = 0;
+ while (bibdata)
{
- // copy bib files to the latex output dir
- QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
- QCString bibOutputDir = outputDir+"/";
- QFileInfo fo(bibOutputDir);
- const char *bibdata = citeDataList.first();
- while (bibdata)
+ QCString bibFile = bibdata;
+ if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
+ QFileInfo fi(bibFile);
+ if (fi.exists())
{
- QCString bibFile = bibdata;
- if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
- QFileInfo fi(bibFile);
- if (fi.exists() && fi.dirPath(TRUE)!=fo.absFilePath())
- {
- if (!bibFile.isEmpty())
- {
- QCString destFile=bibOutputDir+fi.fileName().data();
- copyFile(bibFile,destFile);
- tempFiles.append(new QCString(destFile));
- }
- }
- else if (!fi.exists())
+ if (!bibFile.isEmpty())
{
- err("bib file %s not found!\n",bibFile.data());
+ ++i;
+ copyFile(bibFile,bibOutputDir + bibTmpFile + QCString().setNum(i) + ".bib");
+ bibOutputFiles = bibOutputFiles + " " + bibTmpDir + bibTmpFile + QCString().setNum(i) + ".bib";
}
- bibdata = citeDataList.next();
}
+ else if (!fi.exists())
+ {
+ err("bib file %s not found!\n",bibFile.data());
+ }
+ bibdata = citeDataList.next();
}
- QCString oldDir = QDir::currentDirPath().utf8();
+ QString oldDir = QDir::currentDirPath();
QDir::setCurrent(outputDir);
// 5. run bib2xhtml perl script on the generated file which will insert the
// bibliography in citelist.doc
- portable_system("perl","\""+bib2xhtmlFile+"\" "+getListOfBibFiles(" ",FALSE)+" \""+
+ portable_system("perl","\""+bib2xhtmlFile+"\" "+bibOutputFiles+" \""+
citeListFile+"\"");
QDir::setCurrent(oldDir);
@@ -235,7 +211,7 @@ void CiteDict::generatePage() const
f.setName(citeListFile);
if (!f.open(IO_ReadOnly))
{
- err("could not open file %s/citelist.doc for reading\n",outputDir.data());
+ err("could not open file %s for reading\n",citeListFile.data());
}
bool insideBib=FALSE;
@@ -288,17 +264,22 @@ void CiteDict::generatePage() const
// copy bib files to the latex output dir
QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/";
+ int i = 0;
const char *bibdata = citeDataList.first();
while (bibdata)
{
QCString bibFile = bibdata;
+ // Note: file can now have multiple dots
if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
QFileInfo fi(bibFile);
if (fi.exists())
{
if (!bibFile.isEmpty())
{
- copyFile(bibFile,latexOutputDir+fi.fileName().data());
+ // bug_700510, multile times the same name were overwriting; creating new names
+ // also for names with spaces
+ ++i;
+ copyFile(bibFile,latexOutputDir + bibTmpFile + QCString().setNum(i) + ".bib");
}
}
else
@@ -313,10 +294,14 @@ void CiteDict::generatePage() const
thisDir.remove(citeListFile);
thisDir.remove(doxygenBstFile);
thisDir.remove(bib2xhtmlFile);
- while (!tempFiles.isEmpty())
+ bibdata = citeDataList.first();
+ // we might try to remove too many files as empty files didn't get a coresponding new file
+ // but the remove function does not emit an error for it and we don't catch the error return
+ // so no problem.
+ for (unsigned int j = 1; j <= citeDataList.count(); j++)
{
- QCString *s=tempFiles.take(0);
- thisDir.remove(*s);
+ thisDir.remove(bibOutputDir + bibTmpFile + QCString().setNum(j) + ".bib");
}
+ thisDir.rmdir(bibOutputDir);
}
diff --git a/src/classdef.cpp b/src/classdef.cpp
index cef4720..c36a83f 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -187,6 +187,8 @@ class ClassDefImpl
bool isGeneric;
+ bool isAnonymous;
+
uint64 spec;
};
@@ -247,7 +249,8 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
{
isLocal=FALSE;
}
- isGeneric = lang==SrcLangExt_CSharp && QCString(name).find('<')!=-1;
+ isGeneric = (lang==SrcLangExt_CSharp || lang==SrcLangExt_Java) && QCString(name).find('<')!=-1;
+ isAnonymous = QCString(name).find('@')!=-1;
}
ClassDefImpl::ClassDefImpl() : vhdlSummaryTitles(17)
@@ -1772,7 +1775,7 @@ bool ClassDef::visibleInParentsDeclList() const
static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES");
static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES");
bool linkable = isLinkable();
- return (name().find('@')==-1 && !isExtension() &&
+ return (!isAnonymous() && !isExtension() &&
(protection()!=::Private || extractPrivate) &&
(linkable || (!hideUndocClasses && (!isLocal() || extractLocalClasses)))
);
@@ -2597,7 +2600,7 @@ bool ClassDef::isLinkableInProject() const
{
return !name().isEmpty() && /* has a name */
!isArtificial() && !isHidden() && /* not hidden */
- name().find('@')==-1 && /* not anonymous */
+ !isAnonymous() && /* not anonymous */
protectionLevelVisible(m_impl->prot) && /* private/internal */
(!m_impl->isLocal || extractLocal) && /* local */
(hasDocumentation() || !hideUndoc) && /* documented */
@@ -2629,7 +2632,7 @@ bool ClassDef::isVisibleInHierarchy()
return // show all classes or a subclass is visible
(allExternals || hasNonReferenceSuperClass()) &&
// and not an anonymous compound
- name().find('@')==-1 &&
+ !isAnonymous() &&
// not an artificially introduced class
/*!isArtificial() &&*/ // 1.8.2: allowed these to appear
// and not privately inherited
@@ -4364,6 +4367,11 @@ bool ClassDef::isPublished() const
return m_impl->spec&Entry::Published;
}
+bool ClassDef::isForwardDeclared() const
+{
+ return m_impl->spec&Entry::ForwardDecl;
+}
+
bool ClassDef::isObjectiveC() const
{
return getLanguage()==SrcLangExt_ObjC;
@@ -4603,3 +4611,13 @@ bool ClassDef::subGrouping() const
return m_impl->subGrouping;
}
+void ClassDef::setName(const char *name)
+{
+ m_impl->isAnonymous = QCString(name).find('@')!=-1;
+ Definition::setName(name);
+}
+
+bool ClassDef::isAnonymous() const
+{
+ return m_impl->isAnonymous;
+}
diff --git a/src/classdef.h b/src/classdef.h
index 8c5bebf..9f0ae5f 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -271,6 +271,9 @@ class ClassDef : public Definition
/** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */
bool isExtension() const;
+ /** Returns TRUE if this class represents a forward declaration of a template class */
+ bool isForwardDeclared() const;
+
/** Returns the class of which this is a category (Objective-C only) */
ClassDef *categoryOf() const;
@@ -307,6 +310,7 @@ class ClassDef : public Definition
bool isJavaEnum() const;
bool isGeneric() const;
+ bool isAnonymous() const;
const ClassSDict *innerClasses() const;
QCString title() const;
@@ -357,6 +361,7 @@ class ClassDef : public Definition
void addTaggedInnerClass(ClassDef *cd);
void setTagLessReference(ClassDef *cd);
+ void setName(const char *name);
//-----------------------------------------------------------------------------------
// --- actions ----
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index 45469f2..b0ca85f 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -120,8 +120,10 @@ CommandMap cmdMap[] =
{ "_internalref", CMD_INTERNALREF },
{ "dot", CMD_DOT },
{ "msc", CMD_MSC },
+ { "startuml", CMD_STARTUML },
{ "enddot", CMD_ENDDOT },
{ "endmsc", CMD_ENDMSC },
+ { "enduml", CMD_ENDUML },
{ "manonly", CMD_MANONLY },
{ "endmanonly", CMD_ENDMANONLY },
{ "includelineno", CMD_INCWITHLINES },
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index d89e368..75fd8ec 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -127,7 +127,9 @@ enum CommandType
CMD_DIAFILE = 97,
CMD_LATEXINCLUDE = 98,
CMD_NDASH = 99,
- CMD_MDASH = 100
+ CMD_MDASH = 100,
+ CMD_STARTUML = 101,
+ CMD_ENDUML = 102
};
enum HtmlTagType
diff --git a/src/commentcnv.l b/src/commentcnv.l
index 4cc9da9..ec56b90 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -446,7 +446,7 @@ void replaceComment(int offset);
g_blockName=&yytext[1];
BEGIN(VerbatimCode);
}
-<CComment,ReadLine>[\\@]("dot"|"code"|"msc")/[^a-z_A-Z0-9] { /* start of a verbatim block */
+<CComment,ReadLine>[\\@]("dot"|"code"|"msc"|"startuml")/[^a-z_A-Z0-9] { /* start of a verbatim block */
copyToOutput(yytext,(int)yyleng);
g_lastCommentContext = YY_START;
g_javaBlock=0;
@@ -517,7 +517,7 @@ void replaceComment(int offset);
}
}
}
-<VerbatimCode>[\\@]("enddot"|"endcode"|"endmsc") { /* end of verbatim block */
+<VerbatimCode>[\\@]("enddot"|"endcode"|"endmsc"|"enduml") { /* end of verbatim block */
copyToOutput(yytext,(int)yyleng);
if (&yytext[4]==g_blockName)
{
@@ -554,7 +554,7 @@ void replaceComment(int offset);
copyToOutput(yytext,(int)yyleng);
}
<Verbatim>^[ \t]*"///" {
- if (g_blockName=="dot" || g_blockName=="msc" || g_blockName.at(0)=='f')
+ if (g_blockName=="dot" || g_blockName=="msc" || g_blockName=="startuml" || g_blockName.at(0)=='f')
{
// see bug 487871, strip /// from dot images and formulas.
int l=0;
diff --git a/src/commentscan.l b/src/commentscan.l
index a42f6ce..168907f 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -191,6 +191,7 @@ static DocCmdMap docCmdMap[] =
{ "manonly", &handleFormatBlock, FALSE },
{ "dot", &handleFormatBlock, TRUE },
{ "msc", &handleFormatBlock, TRUE },
+ { "startuml", &handleFormatBlock, TRUE },
{ "code", &handleFormatBlock, TRUE },
{ "addindex", &handleAddIndex, FALSE },
{ "if", &handleIf, FALSE },
@@ -664,11 +665,11 @@ static void addSection()
{
if (si->lineNr != -1)
{
- warn(yyFileName,yyLineNr,"multiple use of section label '%s', (first occurrence: %s, line %d)",g_sectionLabel.data(),si->fileName.data(),si->lineNr);
+ warn(yyFileName,yyLineNr,"multiple use of section label '%s' while adding section, (first occurrence: %s, line %d)",g_sectionLabel.data(),si->fileName.data(),si->lineNr);
}
else
{
- warn(yyFileName,yyLineNr,"multiple use of section label '%s', (first occurrence: %s)",g_sectionLabel.data(),si->fileName.data());
+ warn(yyFileName,yyLineNr,"multiple use of section label '%s' while adding section, (first occurrence: %s)",g_sectionLabel.data(),si->fileName.data());
}
}
else
@@ -877,7 +878,7 @@ static int yyread(char *buf,int max_size)
/* start command character */
CMD ("\\"|"@")
DCMD1 ("arg"|"attention"|"author"|"cite"|"code")
-DCMD2 ("date"|"dot"|"msc"|"dotfile"|"example")
+DCMD2 ("date"|"dot"|"msc"|"dotfile"|"example"|"startuml")
DCMD3 ("htmlinclude"|"htmlonly"|"image"|"include")
DCMD4 ("includelineno"|"internal"|"invariant")
DCMD5 ("latexinclude"|"latexonly"|"li"|"line"|"manonly"|"name")
@@ -1744,11 +1745,11 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
{
if (si->lineNr != -1)
{
- warn(yyFileName,yyLineNr,"multiple use of section label '%s', (first occurrence: %s, line %d)",yytext,si->fileName.data(),si->lineNr);
+ warn(yyFileName,yyLineNr,"multiple use of section label '%s' while adding anchor, (first occurrence: %s, line %d)",yytext,si->fileName.data(),si->lineNr);
}
else
{
- warn(yyFileName,yyLineNr,"multiple use of section label '%s', (first occurrence: %s)",yytext,si->fileName.data());
+ warn(yyFileName,yyLineNr,"multiple use of section label '%s' while adding anchor, (first occurrence: %s)",yytext,si->fileName.data());
}
}
else
@@ -1785,6 +1786,13 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
BEGIN(Comment);
}
}
+<FormatBlock>{CMD}"enduml" {
+ addOutput(yytext);
+ if (blockName=="startuml") // found end of the block
+ {
+ BEGIN(Comment);
+ }
+ }
<FormatBlock>[^ \@\*\/\\\n]* { // some word
addOutput(yytext);
}
@@ -1809,9 +1817,11 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
addOutput(*yytext);
}
<FormatBlock><<EOF>> {
+ QCString endTag = "@end"+blockName;
+ if (blockName=="startuml") endTag="enduml";
warn(yyFileName,yyLineNr,
- "reached end of comment while inside a @%s block; check for missing @end%s tag!",
- blockName.data(),blockName.data()
+ "reached end of comment while inside a @%s block; check for missing @%s tag!",
+ blockName.data(),endTag.data()
);
yyterminate();
}
diff --git a/src/compound.xsd b/src/compound.xsd
index 2521a2e..be897c3 100644
--- a/src/compound.xsd
+++ b/src/compound.xsd
@@ -145,12 +145,12 @@
<xsd:attribute name="id" type="xsd:string" />
<xsd:attribute name="prot" type="DoxProtectionKind" />
<xsd:attribute name="static" type="DoxBool" />
- <xsd:attribute name="const" type="DoxBool" />
- <xsd:attribute name="explicit" type="DoxBool" />
- <xsd:attribute name="inline" type="DoxBool" />
- <xsd:attribute name="virt" type="DoxVirtualKind" />
- <xsd:attribute name="volatile" type="DoxBool" />
- <xsd:attribute name="mutable" type="DoxBool" />
+ <xsd:attribute name="const" type="DoxBool" use="optional"/>
+ <xsd:attribute name="explicit" type="DoxBool" use="optional"/>
+ <xsd:attribute name="inline" type="DoxBool" use="optional"/>
+ <xsd:attribute name="virt" type="DoxVirtualKind" use="optional"/>
+ <xsd:attribute name="volatile" type="DoxBool" use="optional"/>
+ <xsd:attribute name="mutable" type="DoxBool" use="optional"/>
<!-- Qt property -->
<xsd:attribute name="readable" type="DoxBool" use="optional"/>
<xsd:attribute name="writable" type="DoxBool" use="optional"/>
@@ -386,7 +386,7 @@
<xsd:element name="rtfonly" type="xsd:string" />
<xsd:element name="latexonly" type="xsd:string" />
<xsd:element name="dot" type="xsd:string" />
- <xsd:element name="msc" type="xsd:string" />
+ <xsd:element name="plantuml" type="xsd:string" />
<xsd:element name="anchor" type="docAnchorType" />
<xsd:element name="formula" type="docFormulaType" />
<xsd:element name="ref" type="docRefTextType" />
diff --git a/src/config.l b/src/config.l
index 133bc11..a237faf 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1329,6 +1329,37 @@ void Config::check()
mscgenPath="";
}
+ // check plantuml path
+ QCString &plantumlJarPath = Config_getString("PLANTUML_JAR_PATH");
+ if (!plantumlJarPath.isEmpty())
+ {
+ QFileInfo pu(plantumlJarPath);
+ if (pu.exists() && pu.isDir()) // PLANTUML_JAR_PATH is directory
+ {
+ QFileInfo jar(plantumlJarPath+portable_pathSeparator()+"plantuml.jar");
+ if (jar.exists() && jar.isFile())
+ {
+ plantumlJarPath = jar.dirPath(TRUE).utf8()+portable_pathSeparator();
+ }
+ else
+ {
+ config_err("Jar file plantuml.jar not found at location "
+ "specified via PLANTUML_JAR_PATH: '%s'\n",plantumlJarPath.data());
+ plantumlJarPath="";
+ }
+ }
+ else if (pu.exists() && pu.isFile() && plantumlJarPath.right(4)==".jar") // PLANTUML_JAR_PATH is file
+ {
+ plantumlJarPath = pu.dirPath(TRUE).utf8()+portable_pathSeparator();
+ }
+ else
+ {
+ config_err("path specified via PLANTUML_JAR_PATH does not exist or not a directory: %s\n",
+ plantumlJarPath.data());
+ plantumlJarPath="";
+ }
+ }
+
// check dia path
QCString &diaPath = Config_getString("DIA_PATH");
if (!diaPath.isEmpty())
diff --git a/src/config.xml b/src/config.xml
index eed486e..f83ee55 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -1145,9 +1145,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
\c bibtex tool to be installed. See also http://en.wikipedia.org/wiki/BibTeX for
more info. For \f$\mbox{\LaTeX}\f$ the style of the bibliography can be controlled
using \ref cfg_latex_bib_style "LATEX_BIB_STYLE".
- To use this
- feature you need \c bibtex and \c perl available in the search path. Do not use
- file names with spaces, \c bibtex cannot handle them.
+ To use this feature you need \c bibtex and \c perl available in the search path.
See also \ref cmdcite "\\cite" for info how to create references.
]]>
</docs>
@@ -1780,16 +1778,18 @@ doxygen -w html new_header.html new_footer.html new_stylesheet.css YourConfigFil
]]>
</docs>
</option>
- <option type='string' id='HTML_EXTRA_STYLESHEET' format='file' defval='' depends='GENERATE_HTML'>
+ <option type='list' id='HTML_EXTRA_STYLESHEET' format='file' defval='' depends='GENERATE_HTML'>
<docs>
<![CDATA[
- The \c HTML_EXTRA_STYLESHEET tag can be used to specify an additional
- user-defined cascading style sheet that is included after the standard
+ The \c HTML_EXTRA_STYLESHEET tag can be used to specify additional
+ user-defined cascading style sheets that are included after the standard
style sheets created by doxygen. Using this option one can overrule
certain style aspects. This is preferred over using \ref cfg_html_stylesheet "HTML_STYLESHEET"
since it does not replace the standard style sheet and is therefor more
- robust against future updates. Doxygen will copy the style sheet file to
+ robust against future updates. Doxygen will copy the style sheet files to
the output directory.
+ \note The order of the extra stylesheet files is of importance (e.g. the last
+ stylesheet in the list overrules the setting of the previous ones in the list).
]]>
</docs>
<docs doxywizard='0' doxyfile='0'>
@@ -3295,6 +3295,16 @@ to be found in the default search path.
]]>
</docs>
</option>
+ <option type='string' id='PLANTUML_JAR_PATH' format='dir' defval='' depends='HAVE_DOT'>
+ <docs>
+<![CDATA[
+ When using plantuml, the \c PLANTUML_JAR_PATH tag should be used to specify the path where
+ java can find the \c plantuml.jar file. If left blank, it is assumed PlantUML is not used or
+ called during a preprocessing step. Doxygen will generate a warning when it encounters a
+ \ref cmdstartuml "\\startuml" command in this case and will not generate output for the diagram.
+]]>
+ </docs>
+ </option>
<option type='int' id='DOT_GRAPH_MAX_NODES' minval='0' maxval='10000' defval='50' depends='HAVE_DOT'>
<docs>
<![CDATA[
@@ -3361,7 +3371,6 @@ remove the intermediate dot files that are used to generate the various graphs.
]]>
</docs>
</option>
-
<option type='obsolete' id='USE_WINDOWS_ENCODING'/>
<option type='obsolete' id='DETAILS_AT_TOP'/>
<option type='obsolete' id='QTHELP_FILE'/>
diff --git a/src/context.cpp b/src/context.cpp
index 541cb74..b35fffa 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -1,3 +1,20 @@
+/******************************************************************************
+ *
+ * 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.
+ *
+ */
+
+#include <qdir.h>
+
#include "context.h"
#include "config.h"
#include "index.h"
@@ -24,6 +41,7 @@
#include "parserintf.h"
#include "portable.h"
#include "arguments.h"
+#include "groupdef.h"
// TODO: pass the current file to Dot*::writeGraph, so the user can put dot graphs in other
// files as well
@@ -144,6 +162,10 @@ class GenericNodeListContext : public TemplateListIntf
{
m_children.setAutoDelete(TRUE);
}
+ static GenericNodeListContext *alloc()
+ {
+ return new GenericNodeListContext;
+ }
// TemplateListIntf methods
int count() const
@@ -266,7 +288,7 @@ class ConfigContext::Private
{
public:
Private() { m_cachedLists.setAutoDelete(TRUE); }
- ~Private() { }
+ virtual ~Private() { }
TemplateVariant fetchList(const QCString &name,const QStrList *list)
{
TemplateVariant *v = m_cachedLists.find(name);
@@ -633,6 +655,29 @@ class TranslateContext::Private : public PropertyMapper
{
return theTranslator->trFileMembers();
}
+ TemplateVariant fileMembersDescription() const
+ {
+ static bool extractAll = Config_getBool("EXTRACT_ALL");
+ return theTranslator->trFileMembersDescription(extractAll);
+ }
+ TemplateVariant namespaceMembersDescription() const
+ {
+ static bool extractAll = Config_getBool("EXTRACT_ALL");
+ return theTranslator->trNamespaceMemberDescription(extractAll);
+ }
+ TemplateVariant classMembersDescription() const
+ {
+ static bool extractAll = Config_getBool("EXTRACT_ALL");
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ if (fortranOpt)
+ {
+ return theTranslator->trCompoundMembersDescriptionFortran(extractAll);
+ }
+ else
+ {
+ return theTranslator->trCompoundMembersDescription(extractAll);
+ }
+ }
TemplateVariant relatedPagesDesc() const
{
return theTranslator->trRelatedPagesDescription();
@@ -770,10 +815,60 @@ class TranslateContext::Private : public PropertyMapper
bool extractAll = Config_getBool("EXTRACT_ALL");
return theTranslator->trFileListDescription(extractAll);
}
+ TemplateVariant modulesDescription() const
+ {
+ bool extractAll = Config_getBool("EXTRACT_ALL");
+ return theTranslator->trModulesListDescription(extractAll);
+ }
+ TemplateVariant namespaceListDescription() const
+ {
+ bool extractAll = Config_getBool("EXTRACT_ALL");
+ return theTranslator->trNamespaceListDescription(extractAll);
+ }
TemplateVariant directories() const
{
return theTranslator->trDirectories();
}
+ TemplateVariant all() const
+ {
+ return theTranslator->trAll();
+ }
+ TemplateVariant functions() const
+ {
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ return fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ theTranslator->trFunctions();
+ }
+ TemplateVariant variables() const
+ {
+ return theTranslator->trVariables();
+ }
+ TemplateVariant typedefs() const
+ {
+ return theTranslator->trTypedefs();
+ }
+ TemplateVariant enums() const
+ {
+ return theTranslator->trEnumerations();
+ }
+ TemplateVariant properties() const
+ {
+ return theTranslator->trProperties();
+ }
+ TemplateVariant events() const
+ {
+ return theTranslator->trEvents();
+ }
+ TemplateVariant related() const
+ {
+ return theTranslator->trRelatedFunctions();
+ }
+ TemplateVariant macros() const
+ {
+ return theTranslator->trDefines();
+ }
Private()
{
//%% string generatedBy
@@ -796,6 +891,8 @@ class TranslateContext::Private : public PropertyMapper
addProperty("classHierarchy", this,&Private::classHierarchy);
//%% string classMembers
addProperty("classMembers", this,&Private::classMembers);
+ //%% string classMembersDescription
+ addProperty("classMembersDescription",this,&Private::classMembersDescription);
//%% string modules
addProperty("modules", this,&Private::modules);
//%% string namespaces
@@ -814,6 +911,8 @@ class TranslateContext::Private : public PropertyMapper
addProperty("fileList", this,&Private::fileList);
//%% string fileMembers
addProperty("fileMembers", this,&Private::fileMembers);
+ //%% string fileMembersDescription
+ addProperty("fileMembersDescription", this,&Private::fileMembersDescription);
//%% string relatedPagesDescripiton
addProperty("relatedPagesDesc", this,&Private::relatedPagesDesc);
//%% string more
@@ -846,8 +945,6 @@ class TranslateContext::Private : public PropertyMapper
addProperty("defineValue", this,&Private::defineValue);
//%% string initialValue
addProperty("initialValue", this,&Private::initialValue);
- //%% string enumerationValues
- addProperty("enumerationValues", this,&Private::enumerationValues);
//%% markerstring implements
addProperty("implements", this,&Private::implements);
//%% markerstring reimplements
@@ -886,8 +983,34 @@ class TranslateContext::Private : public PropertyMapper
addProperty("detailLevel", this,&Private::detailLevel);
//%% string fileListDescription
addProperty("fileListDescription",this,&Private::fileListDescription);
+ //%% string namespaceListDescription
+ addProperty("namespaceListDescription",this,&Private::namespaceListDescription);
//%% string directories
addProperty("directories", this,&Private::directories);
+ //%% string moduleDescript
+ addProperty("modulesDescription", this,&Private::modulesDescription);
+ //%% string all
+ addProperty("all", this,&Private::all);
+ //%% string functions
+ addProperty("functions", this,&Private::functions);
+ //%% string variables
+ addProperty("variables", this,&Private::variables);
+ //%% string typedefs
+ addProperty("typedefs", this,&Private::typedefs);
+ //%% string enums
+ addProperty("enums", this,&Private::enums);
+ //%% string enumValues
+ addProperty("enumValues", this,&Private::enumerationValues);
+ //%% string properties
+ addProperty("properties", this,&Private::properties);
+ //%% string events
+ addProperty("events", this,&Private::events);
+ //%% string related
+ addProperty("related", this,&Private::related);
+ //%% string macros
+ addProperty("macros", this,&Private::macros);
+ //%% string namespaceMembersDescription
+ addProperty("namespaceMembersDescription",this,&Private::namespaceMembersDescription);
m_javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
m_fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
@@ -1078,7 +1201,7 @@ class DefinitionContext : public PropertyMapper
static bool createSubdirs = Config_getBool("CREATE_SUBDIRS");
return createSubdirs ? QCString("../../") : QCString("");
}
- TemplateVariant relPath() const
+ virtual TemplateVariant relPath() const
{
return relPathAsString();
}
@@ -1400,6 +1523,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
addProperty("memberGroups", this,&Private::memberGroups);
addProperty("additionalInheritedMembers",this,&Private::additionalInheritedMembers);
}
+ virtual ~Private() {}
TemplateVariant title() const
{
return TemplateVariant(m_classDef->title());
@@ -1745,7 +1869,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
if (!m_cache.classes)
{
- NestedClassListContext *classList = NestedClassListContext::alloc();
+ TemplateList *classList = TemplateList::alloc();
if (m_classDef->getClassSDict())
{
ClassSDict::Iterator sdi(*m_classDef->getClassSDict());
@@ -1754,7 +1878,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
if (cd->visibleInParentsDeclList())
{
- classList->append(cd);
+ classList->append(ClassContext::alloc(cd));
}
}
}
@@ -1975,7 +2099,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
SharedPtr<InheritanceListContext> inheritedByList;
ScopedPtr<DotClassGraph> classGraph;
ScopedPtr<DotClassGraph> collaborationGraph;
- SharedPtr<NestedClassListContext> classes;
+ SharedPtr<TemplateList> classes;
SharedPtr<MemberListInfoContext> publicTypes;
SharedPtr<MemberListInfoContext> publicMethods;
SharedPtr<MemberListInfoContext> publicStaticMethods;
@@ -2057,12 +2181,26 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri
public:
Private(NamespaceDef *nd) : DefinitionContext<NamespaceContext::Private>(nd) , m_namespaceDef(nd)
{
- addProperty("title",this,&Private::title);
- addProperty("highlight",this,&Private::highlight);
- addProperty("subhighlight",this,&Private::subHighlight);
- addProperty("compoundType",this,&Private::compoundType);
- addProperty("hasDetails",this,&Private::hasDetails);
- }
+ addProperty("title", this,&Private::title);
+ addProperty("highlight", this,&Private::highlight);
+ addProperty("subhighlight", this,&Private::subHighlight);
+ addProperty("compoundType", this,&Private::compoundType);
+ addProperty("hasDetails", this,&Private::hasDetails);
+ addProperty("classes", this,&Private::classes);
+ addProperty("namespaces", this,&Private::namespaces);
+ addProperty("constantgroups", this,&Private::constantgroups);
+ addProperty("typedefs", this,&Private::typedefs);
+ addProperty("enums", this,&Private::enums);
+ addProperty("functions", this,&Private::functions);
+ addProperty("variables", this,&Private::variables);
+ addProperty("memberGroups", this,&Private::memberGroups);
+ addProperty("detailedTypedefs", this,&Private::detailedTypedefs);
+ addProperty("detailedEnums", this,&Private::detailedEnums);
+ addProperty("detailedFunctions", this,&Private::detailedFunctions);
+ addProperty("detailedVariables", this,&Private::detailedVariables);
+ addProperty("inlineClasses", this,&Private::inlineClasses);
+ }
+ virtual ~Private() {}
TemplateVariant title() const
{
return TemplateVariant(m_namespaceDef->title());
@@ -2083,8 +2221,186 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri
{
return m_namespaceDef->hasDetailedDescription();
}
+ TemplateVariant classes() const
+ {
+ if (!m_cache.classes)
+ {
+ TemplateList *classList = TemplateList::alloc();
+ if (m_namespaceDef->getClassSDict())
+ {
+ ClassSDict::Iterator sdi(*m_namespaceDef->getClassSDict());
+ ClassDef *cd;
+ for (sdi.toFirst();(cd=sdi.current());++sdi)
+ {
+ if (cd->visibleInParentsDeclList())
+ {
+ classList->append(ClassContext::alloc(cd));
+ }
+ }
+ }
+ m_cache.classes.reset(classList);
+ }
+ return m_cache.classes.get();
+ }
+ TemplateVariant namespaces() const
+ {
+ if (!m_cache.namespaces)
+ {
+ TemplateList *namespaceList = TemplateList::alloc();
+ if (m_namespaceDef->getNamespaceSDict())
+ {
+ NamespaceSDict::Iterator sdi(*m_namespaceDef->getNamespaceSDict());
+ NamespaceDef *nd;
+ for (sdi.toFirst();(nd=sdi.current());++sdi)
+ {
+ if (nd->isLinkable() && !nd->isConstantGroup())
+ {
+ namespaceList->append(NamespaceContext::alloc(nd));
+ }
+ }
+ }
+ m_cache.namespaces.reset(namespaceList);
+ }
+ return m_cache.namespaces.get();
+ }
+ TemplateVariant constantgroups() const
+ {
+ if (!m_cache.constantgroups)
+ {
+ TemplateList *namespaceList = TemplateList::alloc();
+ if (m_namespaceDef->getNamespaceSDict())
+ {
+ NamespaceSDict::Iterator sdi(*m_namespaceDef->getNamespaceSDict());
+ NamespaceDef *nd;
+ for (sdi.toFirst();(nd=sdi.current());++sdi)
+ {
+ if (nd->isLinkable() && nd->isConstantGroup())
+ {
+ namespaceList->append(NamespaceContext::alloc(nd));
+ }
+ }
+ }
+ m_cache.constantgroups.reset(namespaceList);
+ }
+ return m_cache.constantgroups.get();
+ }
+ TemplateVariant getMemberList(SharedPtr<MemberListInfoContext> &list,
+ MemberListType type,const char *title,bool detailed=FALSE) const
+ {
+ if (!list)
+ {
+ MemberList *ml = m_namespaceDef->getMemberList(type);
+ if (ml)
+ {
+ list.reset(MemberListInfoContext::alloc(m_namespaceDef,relPathAsString(),ml,title,detailed));
+ }
+ }
+ if (list)
+ {
+ return list.get();
+ }
+ else
+ {
+ return TemplateVariant(FALSE);
+ }
+ }
+ TemplateVariant typedefs() const
+ {
+ return getMemberList(m_cache.typedefs,MemberListType_decTypedefMembers,theTranslator->trTypedefs());
+ }
+ TemplateVariant enums() const
+ {
+ return getMemberList(m_cache.enums,MemberListType_decEnumMembers,theTranslator->trEnumerations());
+ }
+ TemplateVariant functions() const
+ {
+ QCString title = theTranslator->trFunctions();
+ SrcLangExt lang = m_namespaceDef->getLanguage();
+ if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms();
+ else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc();
+ return getMemberList(m_cache.functions,MemberListType_decFuncMembers,title);
+ }
+ TemplateVariant variables() const
+ {
+ return getMemberList(m_cache.variables,MemberListType_decVarMembers,theTranslator->trVariables());
+ }
+ TemplateVariant memberGroups() const
+ {
+ if (!m_cache.memberGroups)
+ {
+ if (m_namespaceDef->getMemberGroupSDict())
+ {
+ m_cache.memberGroups.reset(MemberGroupListContext::alloc(m_namespaceDef,relPathAsString(),m_namespaceDef->getMemberGroupSDict(),m_namespaceDef->subGrouping()));
+ }
+ else
+ {
+ m_cache.memberGroups.reset(MemberGroupListContext::alloc());
+ }
+ }
+ return m_cache.memberGroups.get();
+ }
+ TemplateVariant detailedTypedefs() const
+ {
+ return getMemberList(m_cache.detailedTypedefs,MemberListType_docTypedefMembers,theTranslator->trTypedefDocumentation());
+ }
+ TemplateVariant detailedEnums() const
+ {
+ return getMemberList(m_cache.detailedEnums,MemberListType_docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
+ }
+ TemplateVariant detailedFunctions() const
+ {
+ QCString title = theTranslator->trFunctionDocumentation();
+ SrcLangExt lang = m_namespaceDef->getLanguage();
+ if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprogramDocumentation();
+ return getMemberList(m_cache.detailedFunctions,MemberListType_docFuncMembers,title);
+ }
+ TemplateVariant detailedVariables() const
+ {
+ return getMemberList(m_cache.detailedVariables,MemberListType_docVarMembers,theTranslator->trVariableDocumentation());
+ }
+ TemplateVariant inlineClasses() const
+ {
+ if (!m_cache.inlineClasses)
+ {
+ TemplateList *classList = TemplateList::alloc();
+ if (m_namespaceDef->getClassSDict())
+ {
+ ClassSDict::Iterator sdi(*m_namespaceDef->getClassSDict());
+ ClassDef *cd;
+ for (sdi.toFirst();(cd=sdi.current());++sdi)
+ {
+ if (cd->name().find('@')==-1 &&
+ cd->isLinkableInProject() &&
+ cd->isEmbeddedInOuterScope() &&
+ cd->partOfGroups()==0)
+ {
+ classList->append(ClassContext::alloc(cd));
+ }
+ }
+ }
+ m_cache.inlineClasses.reset(classList);
+ }
+ return m_cache.inlineClasses.get();
+ }
private:
NamespaceDef *m_namespaceDef;
+ struct Cachable
+ {
+ SharedPtr<TemplateList> classes;
+ SharedPtr<TemplateList> namespaces;
+ SharedPtr<TemplateList> constantgroups;
+ SharedPtr<MemberListInfoContext> typedefs;
+ SharedPtr<MemberListInfoContext> enums;
+ SharedPtr<MemberListInfoContext> functions;
+ SharedPtr<MemberListInfoContext> variables;
+ SharedPtr<MemberGroupListContext> memberGroups;
+ SharedPtr<MemberListInfoContext> detailedTypedefs;
+ SharedPtr<MemberListInfoContext> detailedEnums;
+ SharedPtr<MemberListInfoContext> detailedFunctions;
+ SharedPtr<MemberListInfoContext> detailedVariables;
+ SharedPtr<TemplateList> inlineClasses;
+ };
+ mutable Cachable m_cache;
};
//%% }
@@ -2143,6 +2459,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
addProperty("inlineClasses", this,&Private::inlineClasses);
addProperty("compoundType", this,&Private::compoundType);
}
+ virtual ~Private() {}
TemplateVariant title() const
{
return m_fileDef->title();
@@ -2268,7 +2585,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
if (!m_cache.classes)
{
- NestedClassListContext *classList = NestedClassListContext::alloc();
+ TemplateList *classList = TemplateList::alloc();
if (m_fileDef->getClassSDict())
{
ClassSDict::Iterator sdi(*m_fileDef->getClassSDict());
@@ -2277,7 +2594,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
if (cd->visibleInParentsDeclList())
{
- classList->append(cd);
+ classList->append(ClassContext::alloc(cd));
}
}
}
@@ -2289,7 +2606,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
if (!m_cache.namespaces)
{
- NestedNamespaceListContext *namespaceList = NestedNamespaceListContext::alloc();
+ TemplateList *namespaceList = TemplateList::alloc();
if (m_fileDef->getNamespaceSDict())
{
NamespaceSDict::Iterator sdi(*m_fileDef->getNamespaceSDict());
@@ -2298,7 +2615,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
if (nd->isLinkable() && !nd->isConstantGroup())
{
- namespaceList->append(nd);
+ namespaceList->append(NamespaceContext::alloc(nd));
}
}
}
@@ -2310,7 +2627,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
if (!m_cache.constantgroups)
{
- NestedNamespaceListContext *namespaceList = NestedNamespaceListContext::alloc();
+ TemplateList *namespaceList = TemplateList::alloc();
if (m_fileDef->getNamespaceSDict())
{
NamespaceSDict::Iterator sdi(*m_fileDef->getNamespaceSDict());
@@ -2319,7 +2636,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
if (nd->isLinkable() && nd->isConstantGroup())
{
- namespaceList->append(nd);
+ namespaceList->append(NamespaceContext::alloc(nd));
}
}
}
@@ -2361,9 +2678,11 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
}
TemplateVariant functions() const
{
- // TODO: Fortran: trSubprograms()
- // TODO: VHDL: VhdlDocGen::trFunctionAndProc()
- return getMemberList(m_cache.functions,MemberListType_decFuncMembers,theTranslator->trFunctions());
+ QCString title = theTranslator->trFunctions();
+ SrcLangExt lang = m_fileDef->getLanguage();
+ if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms();
+ else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc();
+ return getMemberList(m_cache.functions,MemberListType_decFuncMembers,title);
}
TemplateVariant variables() const
{
@@ -2398,8 +2717,10 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
}
TemplateVariant detailedFunctions() const
{
- // TODO: Fortran: trSubprogramDocumentation()
- return getMemberList(m_cache.detailedFunctions,MemberListType_docFuncMembers,theTranslator->trFunctionDocumentation());
+ QCString title = theTranslator->trFunctionDocumentation();
+ SrcLangExt lang = m_fileDef->getLanguage();
+ if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprogramDocumentation();
+ return getMemberList(m_cache.detailedFunctions,MemberListType_docFuncMembers,title);
}
TemplateVariant detailedVariables() const
{
@@ -2409,7 +2730,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
if (!m_cache.inlineClasses)
{
- NestedClassListContext *classList = NestedClassListContext::alloc();
+ TemplateList *classList = TemplateList::alloc();
if (m_fileDef->getClassSDict())
{
ClassSDict::Iterator sdi(*m_fileDef->getClassSDict());
@@ -2421,7 +2742,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0)
{
- classList->append(cd);
+ classList->append(ClassContext::alloc(cd));
}
}
}
@@ -2442,9 +2763,9 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
ScopedPtr<DotInclDepGraph> includeGraph;
ScopedPtr<DotInclDepGraph> includedByGraph;
ScopedPtr<TemplateVariant> sources;
- SharedPtr<NestedClassListContext> classes;
- SharedPtr<NestedNamespaceListContext> namespaces;
- SharedPtr<NestedNamespaceListContext> constantgroups;
+ SharedPtr<TemplateList> classes;
+ SharedPtr<TemplateList> namespaces;
+ SharedPtr<TemplateList> constantgroups;
SharedPtr<MemberListInfoContext> macros;
SharedPtr<MemberListInfoContext> typedefs;
SharedPtr<MemberListInfoContext> enums;
@@ -2456,7 +2777,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
SharedPtr<MemberListInfoContext> detailedEnums;
SharedPtr<MemberListInfoContext> detailedFunctions;
SharedPtr<MemberListInfoContext> detailedVariables;
- SharedPtr<NestedClassListContext> inlineClasses;
+ SharedPtr<TemplateList> inlineClasses;
};
mutable Cachable m_cache;
};
@@ -2495,6 +2816,7 @@ class DirContext::Private : public DefinitionContext<DirContext::Private>
addProperty("hasDetails", this,&Private::hasDetails);
addProperty("compoundType", this,&Private::compoundType);
}
+ virtual ~Private() {}
TemplateVariant title() const
{
return TemplateVariant(m_dirDef->shortTitle());
@@ -2555,6 +2877,10 @@ class DirContext::Private : public DefinitionContext<DirContext::Private>
{
return theTranslator->trDir(FALSE,TRUE);
}
+ TemplateVariant relPath() const
+ {
+ return "";
+ }
private:
DirDef *m_dirDef;
@@ -2590,32 +2916,67 @@ TemplateVariant DirContext::get(const char *n) const
class PageContext::Private : public DefinitionContext<PageContext::Private>
{
public:
- Private(PageDef *pd) : DefinitionContext<PageContext::Private>(pd) , m_pageDef(pd)
+ Private(PageDef *pd,bool isMainPage)
+ : DefinitionContext<PageContext::Private>(pd) , m_pageDef(pd), m_isMainPage(isMainPage)
{
addProperty("title",this,&Private::title);
addProperty("highlight",this,&Private::highlight);
addProperty("subhighlight",this,&Private::subHighlight);
}
+ virtual ~Private() {}
TemplateVariant title() const
{
- return TemplateVariant(m_pageDef->title());
+ if (m_isMainPage)
+ {
+ if (mainPageHasTitle())
+ {
+ return m_pageDef->title();
+ }
+ else
+ {
+ return theTranslator->trMainPage();
+ }
+ }
+ else
+ {
+ return m_pageDef->title();
+ }
+ }
+ TemplateVariant relPath() const
+ {
+ if (m_pageDef==Doxygen::mainPage)
+ {
+ return "";
+ }
+ else
+ {
+ return DefinitionContext<PageContext::Private>::relPath();
+ }
}
TemplateVariant highlight() const
{
- return TemplateVariant("pages");
+ if (m_pageDef==Doxygen::mainPage)
+ {
+ return "main";
+ }
+ else
+ {
+ return "pages";
+ }
}
TemplateVariant subHighlight() const
{
- return TemplateVariant("");
+ return "";
}
private:
PageDef *m_pageDef;
+ bool m_isMainPage;
};
//%% }
-PageContext::PageContext(PageDef *pd) : RefCountedContext("PageContext")
+PageContext::PageContext(PageDef *pd,bool isMainPage) : RefCountedContext("PageContext")
{
- p = new Private(pd);
+ p = new Private(pd,isMainPage);
}
PageContext::~PageContext()
@@ -2827,6 +3188,8 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
addProperty("propertyAttrs", this,&Private::propertyAttrs);
addProperty("eventAttrs", this,&Private::eventAttrs);
addProperty("class", this,&Private::getClass);
+ addProperty("file", this,&Private::getFile);
+ addProperty("namespace", this,&Private::getNamespace);
addProperty("definition", this,&Private::definition);
addProperty("parameters", this,&Private::parameters);
addProperty("hasParameterList", this,&Private::hasParameterList);
@@ -2874,6 +3237,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
if (md->isRaisable()) m_cache.eventAttrs->append("raise");
}
}
+ virtual ~Private() {}
TemplateVariant fieldType() const
{
return createLinkedText(m_memberDef,relPathAsString(),m_memberDef->fieldType());
@@ -3291,6 +3655,36 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
return TemplateVariant(FALSE);
}
}
+ TemplateVariant getFile() const
+ {
+ if (!m_cache.fileDef && m_memberDef->getFileDef())
+ {
+ m_cache.fileDef.reset(FileContext::alloc(m_memberDef->getFileDef()));
+ }
+ if (m_cache.fileDef)
+ {
+ return m_cache.fileDef.get();
+ }
+ else
+ {
+ return TemplateVariant(FALSE);
+ }
+ }
+ TemplateVariant getNamespace() const
+ {
+ if (!m_cache.namespaceDef && m_memberDef->getNamespaceDef())
+ {
+ m_cache.namespaceDef.reset(NamespaceContext::alloc(m_memberDef->getNamespaceDef()));
+ }
+ if (m_cache.namespaceDef)
+ {
+ return m_cache.namespaceDef.get();
+ }
+ else
+ {
+ return TemplateVariant(FALSE);
+ }
+ }
TemplateVariant definition() const
{
return createLinkedText(m_memberDef,relPathAsString(),
@@ -3721,6 +4115,8 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
SharedPtr<ArgumentListContext> templateArgs;
SharedPtr<ArgumentListContext> arguments;
SharedPtr<MemberListContext> enumValues;
+ SharedPtr<FileContext> fileDef;
+ SharedPtr<NamespaceContext> namespaceDef;
SharedPtr<ClassContext> classDef;
SharedPtr<ClassContext> anonymousType;
SharedPtr<TemplateList> templateDecls;
@@ -3774,10 +4170,50 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
public:
Private(GroupDef *gd) : DefinitionContext<ModuleContext::Private>(gd) , m_groupDef(gd)
{
- addProperty("title",this,&Private::title);
- addProperty("highlight",this,&Private::highlight);
- addProperty("subhighlight",this,&Private::subHighlight);
+ addProperty("title", this,&Private::title);
+ addProperty("highlight", this,&Private::highlight);
+ addProperty("subhighlight", this,&Private::subHighlight);
+ addProperty("hasGroupGraph", this,&Private::hasGroupGraph);
+ addProperty("groupGraph", this,&Private::groupGraph);
+ addProperty("hasDetails", this,&Private::hasDetails);
+ addProperty("modules", this,&Private::modules);
+ addProperty("dirs", this,&Private::dirs);
+ addProperty("files", this,&Private::files);
+ addProperty("namespaces", this,&Private::namespaces);
+ addProperty("classes", this,&Private::classes);
+ addProperty("constantgroups", this,&Private::constantgroups);
+ addProperty("examples", this,&Private::examples);
+ addProperty("macros", this,&Private::macros);
+ addProperty("typedefs", this,&Private::typedefs);
+ addProperty("enums", this,&Private::enums);
+ addProperty("enumvalues", this,&Private::enumValues);
+ addProperty("functions", this,&Private::functions);
+ addProperty("variables", this,&Private::variables);
+ addProperty("signals", this,&Private::signals);
+ addProperty("publicSlots", this,&Private::publicSlots);
+ addProperty("protectedSlots", this,&Private::protectedSlots);
+ addProperty("privateSlots", this,&Private::privateSlots);
+ addProperty("events", this,&Private::events);
+ addProperty("properties", this,&Private::properties);
+ addProperty("friends", this,&Private::friends);
+ addProperty("memberGroups", this,&Private::memberGroups);
+ addProperty("detailedMacros", this,&Private::detailedMacros);
+ addProperty("detailedTypedefs", this,&Private::detailedTypedefs);
+ addProperty("detailedEnums", this,&Private::detailedEnums);
+ addProperty("detailedEnumValues", this,&Private::detailedEnumValues);
+ addProperty("detailedFunctions", this,&Private::detailedFunctions);
+ addProperty("detailedVariables", this,&Private::detailedVariables);
+ addProperty("detailedSignals", this,&Private::detailedSignals);
+ addProperty("detailedPublicSlots", this,&Private::detailedPublicSlots);
+ addProperty("detailedProtectedSlots", this,&Private::detailedProtectedSlots);
+ addProperty("detailedPrivateSlots", this,&Private::detailedPrivateSlots);
+ addProperty("detailedEvents", this,&Private::detailedEvents);
+ addProperty("detailedProperties", this,&Private::detailedProperties);
+ addProperty("detailedFriends", this,&Private::detailedFriends);
+ addProperty("inlineClasses", this,&Private::inlineClasses);
+ addProperty("compoundType", this,&Private::compoundType);
}
+ virtual ~Private() {}
TemplateVariant title() const
{
return TemplateVariant(m_groupDef->groupTitle());
@@ -3790,8 +4226,424 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
{
return TemplateVariant("");
}
+ DotGroupCollaboration *getGroupGraph() const
+ {
+ if (!m_cache.groupGraph)
+ {
+ m_cache.groupGraph.reset(new DotGroupCollaboration(m_groupDef));
+ }
+ return m_cache.groupGraph.get();
+ }
+ TemplateVariant hasGroupGraph() const
+ {
+ bool result=FALSE;
+ static bool haveDot = Config_getBool("HAVE_DOT");
+ static bool groupGraphs = Config_getBool("GROUP_GRAPHS");
+ if (haveDot && groupGraphs)
+ {
+ DotGroupCollaboration *graph = getGroupGraph();
+ result = !graph->isTrivial();
+ }
+ return result;
+ }
+ TemplateVariant groupGraph() const
+ {
+ QGString result;
+ static bool haveDot = Config_getBool("HAVE_DOT");
+ static bool groupGraphs = Config_getBool("GROUP_GRAPHS");
+ if (haveDot && groupGraphs)
+ {
+ DotGroupCollaboration *graph = getGroupGraph();
+ FTextStream t(&result);
+ graph->writeGraph(t,GOF_BITMAP,
+ EOF_Html,
+ g_globals.outputDir,
+ g_globals.outputDir+portable_pathSeparator()+m_groupDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ relPathAsString(),
+ TRUE,
+ g_globals.dynSectionId);
+ }
+ g_globals.dynSectionId++;
+ return TemplateVariant(result.data(),TRUE);
+ }
+ TemplateVariant hasDetails() const
+ {
+ return m_groupDef->hasDetailedDescription();
+ }
+ TemplateVariant modules() const
+ {
+ if (!m_cache.modules)
+ {
+ TemplateList *moduleList = TemplateList::alloc();
+ if (m_groupDef->getSubGroups())
+ {
+ GroupListIterator gli(*m_groupDef->getSubGroups());
+ GroupDef *gd;
+ for (gli.toFirst();(gd=gli.current());++gli)
+ {
+ if (gd->isVisible())
+ {
+ moduleList->append(ModuleContext::alloc(gd));
+ }
+ }
+ }
+ m_cache.modules.reset(moduleList);
+ }
+ return m_cache.modules.get();
+ }
+ TemplateVariant examples() const
+ {
+ if (!m_cache.examples)
+ {
+ TemplateList *exampleList = TemplateList::alloc();
+ if (m_groupDef->getExamples())
+ {
+ PageSDict::Iterator eli(*m_groupDef->getExamples());
+ PageDef *ex;
+ for (eli.toFirst();(ex=eli.current());++eli)
+ {
+ exampleList->append(PageContext::alloc(ex));
+ }
+ }
+ m_cache.examples.reset(exampleList);
+ }
+ return m_cache.examples.get();
+ }
+ TemplateVariant pages() const
+ {
+ if (!m_cache.pages)
+ {
+ TemplateList *pageList = TemplateList::alloc();
+ if (m_groupDef->getExamples())
+ {
+ PageSDict::Iterator eli(*m_groupDef->getPages());
+ PageDef *ex;
+ for (eli.toFirst();(ex=eli.current());++eli)
+ {
+ pageList->append(PageContext::alloc(ex));
+ }
+ }
+ m_cache.pages.reset(pageList);
+ }
+ return m_cache.pages.get();
+ }
+ TemplateVariant dirs() const
+ {
+ if (!m_cache.dirs)
+ {
+ TemplateList *dirList = TemplateList::alloc();
+ if (m_groupDef->getDirs())
+ {
+ QListIterator<DirDef> it(*m_groupDef->getDirs());
+ DirDef *dd;
+ for (it.toFirst();(dd=it.current());++it)
+ {
+ dirList->append(DirContext::alloc(dd));
+ }
+ }
+ m_cache.dirs.reset(dirList);
+ }
+ return m_cache.dirs.get();
+ }
+ TemplateVariant files() const
+ {
+ if (!m_cache.files)
+ {
+ TemplateList *fileList = TemplateList::alloc();
+ if (m_groupDef->getFiles())
+ {
+ QListIterator<FileDef> it(*m_groupDef->getFiles());
+ FileDef *fd;
+ for (it.toFirst();(fd=it.current());++it)
+ {
+ fileList->append(FileContext::alloc(fd));
+ }
+ }
+ m_cache.files.reset(fileList);
+ }
+ return m_cache.files.get();
+ }
+ TemplateVariant classes() const
+ {
+ if (!m_cache.classes)
+ {
+ TemplateList *classList = TemplateList::alloc();
+ if (m_groupDef->getClasses())
+ {
+ ClassSDict::Iterator sdi(*m_groupDef->getClasses());
+ ClassDef *cd;
+ for (sdi.toFirst();(cd=sdi.current());++sdi)
+ {
+ if (cd->visibleInParentsDeclList())
+ {
+ classList->append(ClassContext::alloc(cd));
+ }
+ }
+ }
+ m_cache.classes.reset(classList);
+ }
+ return m_cache.classes.get();
+ }
+ TemplateVariant namespaces() const
+ {
+ if (!m_cache.namespaces)
+ {
+ TemplateList *namespaceList = TemplateList::alloc();
+ if (m_groupDef->getNamespaces())
+ {
+ NamespaceSDict::Iterator sdi(*m_groupDef->getNamespaces());
+ NamespaceDef *nd;
+ for (sdi.toFirst();(nd=sdi.current());++sdi)
+ {
+ if (nd->isLinkable() && !nd->isConstantGroup())
+ {
+ namespaceList->append(NamespaceContext::alloc(nd));
+ }
+ }
+ }
+ m_cache.namespaces.reset(namespaceList);
+ }
+ return m_cache.namespaces.get();
+ }
+ TemplateVariant constantgroups() const
+ {
+ if (!m_cache.constantgroups)
+ {
+ TemplateList *namespaceList = TemplateList::alloc();
+ if (m_groupDef->getNamespaces())
+ {
+ NamespaceSDict::Iterator sdi(*m_groupDef->getNamespaces());
+ NamespaceDef *nd;
+ for (sdi.toFirst();(nd=sdi.current());++sdi)
+ {
+ if (nd->isLinkable() && nd->isConstantGroup())
+ {
+ namespaceList->append(NamespaceContext::alloc(nd));
+ }
+ }
+ }
+ m_cache.constantgroups.reset(namespaceList);
+ }
+ return m_cache.constantgroups.get();
+ }
+
+ TemplateVariant getMemberList(SharedPtr<MemberListInfoContext> &list,
+ MemberListType type,const char *title,bool detailed=FALSE) const
+ {
+ if (!list)
+ {
+ MemberList *ml = m_groupDef->getMemberList(type);
+ if (ml)
+ {
+ list.reset(MemberListInfoContext::alloc(m_groupDef,relPathAsString(),ml,title,detailed));
+ }
+ }
+ if (list)
+ {
+ return list.get();
+ }
+ else
+ {
+ return TemplateVariant(FALSE);
+ }
+ }
+ TemplateVariant macros() const
+ {
+ return getMemberList(m_cache.macros,MemberListType_decDefineMembers,theTranslator->trDefines());
+ }
+ TemplateVariant typedefs() const
+ {
+ return getMemberList(m_cache.typedefs,MemberListType_decTypedefMembers,theTranslator->trTypedefs());
+ }
+ TemplateVariant enums() const
+ {
+ return getMemberList(m_cache.enums,MemberListType_decEnumMembers,theTranslator->trEnumerations());
+ }
+ TemplateVariant enumValues() const
+ {
+ return getMemberList(m_cache.enums,MemberListType_decEnumValMembers,theTranslator->trEnumerationValues());
+ }
+ TemplateVariant functions() const
+ {
+ QCString title = theTranslator->trFunctions();
+ SrcLangExt lang = m_groupDef->getLanguage();
+ if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms();
+ else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc();
+ return getMemberList(m_cache.functions,MemberListType_decFuncMembers,title);
+ }
+ TemplateVariant variables() const
+ {
+ return getMemberList(m_cache.variables,MemberListType_decVarMembers,theTranslator->trVariables());
+ }
+ TemplateVariant signals() const
+ {
+ return getMemberList(m_cache.signals,MemberListType_signals,theTranslator->trSignals());
+ }
+ TemplateVariant publicSlots() const
+ {
+ return getMemberList(m_cache.publicSlots,MemberListType_pubSlots,theTranslator->trPublicSlots());
+ }
+ TemplateVariant protectedSlots() const
+ {
+ return getMemberList(m_cache.protectedSlots,MemberListType_proSlots,theTranslator->trProtectedSlots());
+ }
+ TemplateVariant privateSlots() const
+ {
+ return getMemberList(m_cache.privateSlots,MemberListType_priSlots,theTranslator->trPrivateSlots());
+ }
+ TemplateVariant events() const
+ {
+ return getMemberList(m_cache.events,MemberListType_events,theTranslator->trEvents());
+ }
+ TemplateVariant properties() const
+ {
+ return getMemberList(m_cache.properties,MemberListType_properties,theTranslator->trProperties());
+ }
+ TemplateVariant friends() const
+ {
+ return getMemberList(m_cache.friends,MemberListType_friends,theTranslator->trFriends());
+ }
+ TemplateVariant memberGroups() const
+ {
+ if (!m_cache.memberGroups)
+ {
+ if (m_groupDef->getMemberGroupSDict())
+ {
+ m_cache.memberGroups.reset(MemberGroupListContext::alloc(m_groupDef,relPathAsString(),m_groupDef->getMemberGroupSDict(),m_groupDef->subGrouping()));
+ }
+ else
+ {
+ m_cache.memberGroups.reset(MemberGroupListContext::alloc());
+ }
+ }
+ return m_cache.memberGroups.get();
+ }
+ TemplateVariant detailedMacros() const
+ {
+ return getMemberList(m_cache.detailedMacros,MemberListType_docDefineMembers,theTranslator->trDefineDocumentation());
+ }
+ TemplateVariant detailedTypedefs() const
+ {
+ return getMemberList(m_cache.detailedTypedefs,MemberListType_docTypedefMembers,theTranslator->trTypedefDocumentation());
+ }
+ TemplateVariant detailedEnums() const
+ {
+ return getMemberList(m_cache.detailedEnums,MemberListType_docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
+ }
+ TemplateVariant detailedEnumValues() const
+ {
+ return getMemberList(m_cache.detailedEnumValues,MemberListType_docEnumValMembers,theTranslator->trEnumerationValueDocumentation());
+ }
+ TemplateVariant detailedFunctions() const
+ {
+ QCString title = theTranslator->trFunctionDocumentation();
+ SrcLangExt lang = m_groupDef->getLanguage();
+ if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprogramDocumentation();
+ return getMemberList(m_cache.detailedFunctions,MemberListType_docFuncMembers,title);
+ }
+ TemplateVariant detailedVariables() const
+ {
+ return getMemberList(m_cache.detailedVariables,MemberListType_docVarMembers,theTranslator->trVariableDocumentation());
+ }
+ TemplateVariant detailedSignals() const
+ {
+ return getMemberList(m_cache.detailedSignals,MemberListType_docSignalMembers,theTranslator->trSignals());
+ }
+ TemplateVariant detailedPublicSlots() const
+ {
+ return getMemberList(m_cache.detailedPublicSlots,MemberListType_docPubSlotMembers,theTranslator->trPublicSlots());
+ }
+ TemplateVariant detailedProtectedSlots() const
+ {
+ return getMemberList(m_cache.detailedProtectedSlots,MemberListType_docProSlotMembers,theTranslator->trProtectedSlots());
+ }
+ TemplateVariant detailedPrivateSlots() const
+ {
+ return getMemberList(m_cache.detailedPrivateSlots,MemberListType_docPriSlotMembers,theTranslator->trPrivateSlots());
+ }
+ TemplateVariant detailedEvents() const
+ {
+ return getMemberList(m_cache.detailedEvents,MemberListType_docEventMembers,theTranslator->trEventDocumentation(),TRUE);
+ }
+ TemplateVariant detailedProperties() const
+ {
+ return getMemberList(m_cache.detailedProperties,MemberListType_docPropMembers,theTranslator->trPropertyDocumentation(),TRUE);
+ }
+ TemplateVariant detailedFriends() const
+ {
+ return getMemberList(m_cache.detailedFriends,MemberListType_docFriendMembers,theTranslator->trFriends(),TRUE);
+ }
+ TemplateVariant inlineClasses() const
+ {
+ if (!m_cache.inlineClasses)
+ {
+ TemplateList *classList = TemplateList::alloc();
+ if (m_groupDef->getClasses())
+ {
+ ClassSDict::Iterator sdi(*m_groupDef->getClasses());
+ ClassDef *cd;
+ for (sdi.toFirst();(cd=sdi.current());++sdi)
+ {
+ if (cd->name().find('@')==-1 &&
+ cd->isLinkableInProject() &&
+ cd->isEmbeddedInOuterScope() &&
+ cd->partOfGroups()==0)
+ {
+ classList->append(ClassContext::alloc(cd));
+ }
+ }
+ }
+ m_cache.inlineClasses.reset(classList);
+ }
+ return m_cache.inlineClasses.get();
+ }
+ TemplateVariant compoundType() const
+ {
+ return "module"; //theTranslator->trGroup(FALSE,TRUE);
+ }
private:
GroupDef *m_groupDef;
+ struct Cachable
+ {
+ SharedPtr<TemplateList> modules;
+ SharedPtr<TemplateList> dirs;
+ SharedPtr<TemplateList> files;
+ SharedPtr<TemplateList> classes;
+ SharedPtr<TemplateList> namespaces;
+ SharedPtr<TemplateList> constantgroups;
+ SharedPtr<TemplateList> examples;
+ SharedPtr<TemplateList> pages;
+ SharedPtr<MemberListInfoContext> macros;
+ SharedPtr<MemberListInfoContext> typedefs;
+ SharedPtr<MemberListInfoContext> enums;
+ SharedPtr<MemberListInfoContext> enumValues;
+ SharedPtr<MemberListInfoContext> functions;
+ SharedPtr<MemberListInfoContext> variables;
+ SharedPtr<MemberListInfoContext> signals;
+ SharedPtr<MemberListInfoContext> publicSlots;
+ SharedPtr<MemberListInfoContext> protectedSlots;
+ SharedPtr<MemberListInfoContext> privateSlots;
+ SharedPtr<MemberListInfoContext> events;
+ SharedPtr<MemberListInfoContext> properties;
+ SharedPtr<MemberListInfoContext> friends;
+ SharedPtr<MemberGroupListContext> memberGroups;
+ SharedPtr<MemberListInfoContext> detailedMacros;
+ SharedPtr<MemberListInfoContext> detailedTypedefs;
+ SharedPtr<MemberListInfoContext> detailedEnums;
+ SharedPtr<MemberListInfoContext> detailedEnumValues;
+ SharedPtr<MemberListInfoContext> detailedFunctions;
+ SharedPtr<MemberListInfoContext> detailedVariables;
+ SharedPtr<MemberListInfoContext> detailedSignals;
+ SharedPtr<MemberListInfoContext> detailedPublicSlots;
+ SharedPtr<MemberListInfoContext> detailedProtectedSlots;
+ SharedPtr<MemberListInfoContext> detailedPrivateSlots;
+ SharedPtr<MemberListInfoContext> detailedEvents;
+ SharedPtr<MemberListInfoContext> detailedProperties;
+ SharedPtr<MemberListInfoContext> detailedFriends;
+ SharedPtr<TemplateList> inlineClasses;
+ ScopedPtr<DotGroupCollaboration> groupGraph;
+ };
+ mutable Cachable m_cache;
};
//%% }
@@ -3812,88 +4664,6 @@ TemplateVariant ModuleContext::get(const char *n) const
//------------------------------------------------------------------------
-//%% list NestedClassList[Class] : list of nested classes
-class NestedClassListContext::Private : public GenericNodeListContext
-{
-};
-
-NestedClassListContext::NestedClassListContext() : RefCountedContext("NestedClassListContext")
-{
- p = new Private;
-}
-
-NestedClassListContext::~NestedClassListContext()
-{
- delete p;
-}
-
-// TemplateListIntf
-int NestedClassListContext::count() const
-{
- return p->count();
-}
-
-TemplateVariant NestedClassListContext::at(int index) const
-{
- return p->at(index);
-}
-
-TemplateListIntf::ConstIterator *NestedClassListContext::createIterator() const
-{
- return p->createIterator();
-}
-
-void NestedClassListContext::append(ClassDef *cd)
-{
- if (cd)
- {
- p->append(ClassContext::alloc(cd));
- }
-}
-
-//------------------------------------------------------------------------
-
-//%% list NestedClassList[Class] : list of nested namespaces
-class NestedNamespaceListContext::Private : public GenericNodeListContext
-{
-};
-
-NestedNamespaceListContext::NestedNamespaceListContext() : RefCountedContext("NestedNamespaceListContext")
-{
- p = new Private;
-}
-
-NestedNamespaceListContext::~NestedNamespaceListContext()
-{
- delete p;
-}
-
-// TemplateListIntf
-int NestedNamespaceListContext::count() const
-{
- return p->count();
-}
-
-TemplateVariant NestedNamespaceListContext::at(int index) const
-{
- return p->at(index);
-}
-
-TemplateListIntf::ConstIterator *NestedNamespaceListContext::createIterator() const
-{
- return p->createIterator();
-}
-
-void NestedNamespaceListContext::append(NamespaceDef *cd)
-{
- if (cd)
- {
- p->append(NamespaceContext::alloc(cd));
- }
-}
-
-//------------------------------------------------------------------------
-
//%% list ClassList[Class] : list of classes
class ClassListContext::Private : public GenericNodeListContext
{
@@ -3949,6 +4719,107 @@ TemplateListIntf::ConstIterator *ClassListContext::createIterator() const
//------------------------------------------------------------------------
+//%% list ClassIndex[Class] : list of classes
+class ClassIndexContext::Private : public PropertyMapper
+{
+ public:
+ Private()
+ {
+ addProperty("list", this,&Private::list);
+ addProperty("fileName", this,&Private::fileName);
+ addProperty("relPath", this,&Private::relPath);
+ addProperty("highlight", this,&Private::highlight);
+ addProperty("subhighlight",this,&Private::subhighlight);
+ addProperty("title", this,&Private::title);
+ }
+ TemplateVariant list() const
+ {
+ if (!m_cache.classes)
+ {
+ TemplateList *classList = TemplateList::alloc();
+ if (Doxygen::classSDict)
+ {
+ ClassSDict::Iterator cli(*Doxygen::classSDict);
+ ClassDef *cd;
+ for (cli.toFirst() ; (cd=cli.current()) ; ++cli )
+ {
+ if (cd->getLanguage()==SrcLangExt_VHDL &&
+ ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKAGECLASS ||
+ (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
+ ) // no architecture
+ {
+ continue;
+ }
+ if (cd->isLinkableInProject() && cd->templateMaster()==0)
+ {
+ classList->append(ClassContext::alloc(cd));
+ }
+ }
+ }
+ m_cache.classes.reset(classList);
+ }
+ return m_cache.classes.get();
+ }
+ TemplateVariant fileName() const
+ {
+ return "classes";
+ }
+ TemplateVariant relPath() const
+ {
+ return "";
+ }
+ TemplateVariant highlight() const
+ {
+ return "classes";
+ }
+ TemplateVariant subhighlight() const
+ {
+ return "classindex";
+ }
+ TemplateVariant title() const
+ {
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ if (fortranOpt)
+ {
+ return theTranslator->trDataTypes();
+ }
+ else if (vhdlOpt)
+ {
+ return VhdlDocGen::trDesignUnits();
+ }
+ else
+ {
+ return theTranslator->trCompoundIndex();
+ }
+ }
+ private:
+ struct Cachable
+ {
+ SharedPtr<TemplateList> classes;
+ };
+ mutable Cachable m_cache;
+};
+
+ClassIndexContext::ClassIndexContext() : RefCountedContext("ClassIndexContext")
+{
+ p = new Private;
+ //p->addClasses(*Doxygen::hiddenClasses);
+}
+
+ClassIndexContext::~ClassIndexContext()
+{
+ delete p;
+}
+
+// TemplateStructIntf
+TemplateVariant ClassIndexContext::get(const char *n) const
+{
+ return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
//%% struct ClassInheritanceNode: node in inheritance tree
//%% {
class ClassInheritanceNodeContext::Private : public PropertyMapper
@@ -4240,6 +5111,10 @@ class NestingNodeContext::Private : public PropertyMapper
addProperty("file",this,&Private::getFile);
//%% [optional] Dir dir: directory info (if this node represents a directory)
addProperty("dir",this,&Private::getDir);
+ //%% [optional] Page page: page info (if this node represents a page)
+ addProperty("page",this,&Private::getPage);
+ //%% [optional] Module module: module info (if this node represents a module)
+ addProperty("module",this,&Private::getModule);
//%% int id
addProperty("id",this,&Private::id);
//%% string level
@@ -4256,6 +5131,8 @@ class NestingNodeContext::Private : public PropertyMapper
addNamespaces(addCls);
addClasses();
addDirFiles();
+ addPages();
+ addModules();
}
TemplateVariant isLeafNode() const
{
@@ -4325,6 +5202,36 @@ class NestingNodeContext::Private : public PropertyMapper
return TemplateVariant(FALSE);
}
}
+ TemplateVariant getPage() const
+ {
+ if (!m_cache.pageContext && m_def->definitionType()==Definition::TypePage)
+ {
+ m_cache.pageContext.reset(PageContext::alloc((PageDef*)m_def));
+ }
+ if (m_cache.pageContext)
+ {
+ return m_cache.pageContext.get();
+ }
+ else
+ {
+ return TemplateVariant(FALSE);
+ }
+ }
+ TemplateVariant getModule() const
+ {
+ if (!m_cache.moduleContext && m_def->definitionType()==Definition::TypeGroup)
+ {
+ m_cache.moduleContext.reset(ModuleContext::alloc((GroupDef*)m_def));
+ }
+ if (m_cache.moduleContext)
+ {
+ return m_cache.moduleContext.get();
+ }
+ else
+ {
+ return TemplateVariant(FALSE);
+ }
+ }
TemplateVariant level() const
{
return m_level;
@@ -4406,6 +5313,22 @@ class NestingNodeContext::Private : public PropertyMapper
}
}
}
+ void addPages()
+ {
+ PageDef *pd = m_def->definitionType()==Definition::TypePage ? (PageDef*)m_def : 0;
+ if (pd && pd->getSubPages())
+ {
+ m_children->addPages(*pd->getSubPages(),FALSE);
+ }
+ }
+ void addModules()
+ {
+ GroupDef *gd = m_def->definitionType()==Definition::TypeGroup ? (GroupDef*)m_def : 0;
+ if (gd && gd->getSubGroups())
+ {
+ m_children->addModules(*gd->getSubGroups());
+ }
+ }
private:
const NestingNodeContext *m_parent;
Definition *m_def;
@@ -4418,6 +5341,8 @@ class NestingNodeContext::Private : public PropertyMapper
SharedPtr<NamespaceContext> namespaceContext;
SharedPtr<DirContext> dirContext;
SharedPtr<FileContext> fileContext;
+ SharedPtr<PageContext> pageContext;
+ SharedPtr<ModuleContext> moduleContext;
ScopedPtr<TemplateVariant> brief;
};
mutable Cachable m_cache;
@@ -4554,6 +5479,50 @@ class NestingContext::Private : public GenericNodeListContext
m_index++;
}
}
+ void addPages(const PageSDict &pages,bool rootOnly)
+ {
+ SDict<PageDef>::Iterator pli(pages);
+ PageDef *pd;
+ for (pli.toFirst();(pd=pli.current());++pli)
+ {
+ if (!rootOnly ||
+ pd->getOuterScope()==0 ||
+ pd->getOuterScope()->definitionType()!=Definition::TypePage)
+ {
+ append(NestingNodeContext::alloc(m_parent,pd,m_index,m_level,FALSE));
+ m_index++;
+ }
+ }
+ }
+ void addModules(const GroupSDict &groups)
+ {
+ GroupSDict::Iterator gli(groups);
+ GroupDef *gd;
+ for (gli.toFirst();(gd=gli.current());++gli)
+ {
+ static bool externalGroups = Config_getBool("EXTERNAL_GROUPS");
+ if (!gd->isASubGroup() && gd->isVisible() &&
+ (!gd->isReference() || externalGroups)
+ )
+ {
+ append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE));
+ m_index++;
+ }
+ }
+ }
+ void addModules(const GroupList &list)
+ {
+ GroupListIterator gli(list);
+ GroupDef *gd;
+ for (gli.toFirst();(gd=gli.current());++gli)
+ {
+ if (gd->isVisible())
+ {
+ append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE));
+ m_index++;
+ }
+ }
+ }
private:
const NestingNodeContext *m_parent;
int m_level;
@@ -4616,6 +5585,20 @@ void NestingContext::addFiles(const FileList &files)
p->addFiles(files);
}
+void NestingContext::addPages(const PageSDict &pages,bool rootOnly)
+{
+ p->addPages(pages,rootOnly);
+}
+
+void NestingContext::addModules(const GroupSDict &modules)
+{
+ p->addModules(modules);
+}
+
+void NestingContext::addModules(const GroupList &modules)
+{
+ p->addModules(modules);
+}
//------------------------------------------------------------------------
@@ -4854,9 +5837,26 @@ TemplateListIntf::ConstIterator *NamespaceListContext::createIterator() const
class NamespaceTreeContext::Private : public PropertyMapper
{
public:
+ Private()
+ {
+ m_namespaceTree.reset(NestingContext::alloc(0,0));
+ if (Doxygen::namespaceSDict)
+ {
+ m_namespaceTree->addNamespaces(*Doxygen::namespaceSDict,TRUE,FALSE);
+ }
+ //%% Nesting tree
+ addProperty("tree",this,&Private::tree);
+ addProperty("fileName",this,&Private::fileName);
+ addProperty("relPath",this,&Private::relPath);
+ addProperty("highlight",this,&Private::highlight);
+ addProperty("subhighlight",this,&Private::subhighlight);
+ addProperty("title",this,&Private::title);
+ addProperty("preferredDepth",this,&Private::preferredDepth);
+ addProperty("maxDepth",this,&Private::maxDepth);
+ }
TemplateVariant tree() const
{
- return TemplateVariant(&m_namespaceTree);
+ return m_namespaceTree.get();
}
TemplateVariant fileName() const
{
@@ -4892,23 +5892,35 @@ class NamespaceTreeContext::Private : public PropertyMapper
return theTranslator->trNamespaceList();
}
}
- Private()
+ TemplateVariant maxDepth() const
{
- m_namespaceTree.reset(NestingContext::alloc(0,0));
- if (Doxygen::namespaceSDict)
+ if (!m_cache.maxDepthComputed)
{
- m_namespaceTree->addNamespaces(*Doxygen::namespaceSDict,TRUE,FALSE);
+ m_cache.maxDepth = computeMaxDepth(m_namespaceTree.get());
+ m_cache.maxDepthComputed=TRUE;
}
- //%% Nesting tree
- addProperty("tree",this,&Private::tree);
- addProperty("fileName",this,&Private::fileName);
- addProperty("relPath",this,&Private::relPath);
- addProperty("highlight",this,&Private::highlight);
- addProperty("subhighlight",this,&Private::subhighlight);
- addProperty("title",this,&Private::title);
+ return m_cache.maxDepth;
+ }
+ TemplateVariant preferredDepth() const
+ {
+ if (!m_cache.preferredDepthComputed)
+ {
+ m_cache.preferredDepth = computePreferredDepth(m_namespaceTree.get(),maxDepth().toInt());
+ m_cache.preferredDepthComputed=TRUE;
+ }
+ return m_cache.preferredDepth;
}
private:
SharedPtr<NestingContext> m_namespaceTree;
+ struct Cachable
+ {
+ Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+ int maxDepth;
+ bool maxDepthComputed;
+ int preferredDepth;
+ bool preferredDepthComputed;
+ };
+ mutable Cachable m_cache;
};
//%% }
@@ -5110,7 +6122,7 @@ class FileTreeContext::Private : public PropertyMapper
}
TemplateVariant tree() const
{
- return TemplateVariant(&m_dirFileTree);
+ return m_dirFileTree.get();
}
TemplateVariant fileName() const
{
@@ -5181,127 +6193,33 @@ TemplateVariant FileTreeContext::get(const char *name) const
//------------------------------------------------------------------------
-//%% struct PageNode: node is a directory hierarchy
+//%% struct PageTree: tree of related pages
//%% {
-class PageNodeContext::Private : public PropertyMapper
+class PageTreeContext::Private : public PropertyMapper
{
public:
- Private(PageDef *pd) : m_pageDef(pd)
- {
- m_children.reset(PageNodeListContext::alloc());
- m_pageContext.reset(PageContext::alloc(pd));
- //%% bool is_leaf_node: true if this node does not have any children
- addProperty("is_leaf_node",this,&Private::isLeafNode);
- //%% PageList children: list of nested classes/namespaces
- addProperty("children",this,&Private::children);
- //%% Page page: page info
- addProperty("page",this,&Private::getPage);
- addPages();
- }
- TemplateVariant isLeafNode() const
- {
- return m_children->count()==0;
- }
- TemplateVariant children() const
- {
- return m_children.get();
- }
- TemplateVariant getPage() const
- {
- return m_pageContext.get();
- }
- void addPages()
+ Private()
{
- if (m_pageDef->getSubPages())
+ m_pageTree.reset(NestingContext::alloc(0,0));
+ // Add pages
+ if (Doxygen::pageSDict)
{
- m_children->addPages(*m_pageDef->getSubPages(),FALSE);
+ m_pageTree->addPages(*Doxygen::pageSDict,TRUE);
}
- }
- private:
- PageDef *m_pageDef;
- SharedPtr<PageNodeListContext> m_children;
- SharedPtr<PageContext> m_pageContext;
-};
-//%% }
-
-PageNodeContext::PageNodeContext(PageDef *pd) : RefCountedContext("PageNodeContext")
-{
- p = new Private(pd);
-}
-
-PageNodeContext::~PageNodeContext()
-{
- delete p;
-}
-
-TemplateVariant PageNodeContext::get(const char *n) const
-{
- return p->get(n);
-}
-//------------------------------------------------------------------------
-
-//%% list PageList[PageNode]: list of directories and/or files
-class PageNodeListContext::Private : public GenericNodeListContext
-{
- public:
- void addPages(const PageSDict &pages,bool rootOnly)
- {
- SDict<PageDef>::Iterator pli(pages);
- PageDef *pd;
- for (pli.toFirst();(pd=pli.current());++pli)
- {
- if (!rootOnly ||
- pd->getOuterScope()==0 ||
- pd->getOuterScope()->definitionType()!=Definition::TypePage)
- {
- append(PageNodeContext::alloc(pd));
- }
- }
+ //%% PageNodeList tree:
+ addProperty("tree",this,&Private::tree);
+ addProperty("fileName",this,&Private::fileName);
+ addProperty("relPath",this,&Private::relPath);
+ addProperty("highlight",this,&Private::highlight);
+ addProperty("subhighlight",this,&Private::subhighlight);
+ addProperty("title",this,&Private::title);
+ addProperty("preferredDepth",this,&Private::preferredDepth);
+ addProperty("maxDepth",this,&Private::maxDepth);
}
-};
-
-PageNodeListContext::PageNodeListContext() : RefCountedContext("PageNodeListContext")
-{
- p = new Private;
-}
-
-PageNodeListContext::~PageNodeListContext()
-{
- delete p;
-}
-
-// TemplateListIntf
-int PageNodeListContext::count() const
-{
- return p->count();
-}
-
-TemplateVariant PageNodeListContext::at(int index) const
-{
- return p->at(index);
-}
-
-TemplateListIntf::ConstIterator *PageNodeListContext::createIterator() const
-{
- return p->createIterator();
-}
-
-void PageNodeListContext::addPages(const PageSDict &pages,bool rootOnly)
-{
- p->addPages(pages,rootOnly);
-}
-
-//------------------------------------------------------------------------
-
-//%% struct PageTree: tree of related pages
-//%% {
-class PageTreeContext::Private : public PropertyMapper
-{
- public:
TemplateVariant tree() const
{
- return m_pageList.get();
+ return m_pageTree.get();
}
TemplateVariant fileName() const
{
@@ -5323,25 +6241,35 @@ class PageTreeContext::Private : public PropertyMapper
{
return theTranslator->trRelatedPages();
}
- Private()
+ TemplateVariant maxDepth() const
{
- m_pageList.reset(PageNodeListContext::alloc());
- // Add pages
- if (Doxygen::pageSDict)
+ if (!m_cache.maxDepthComputed)
+ {
+ m_cache.maxDepth = computeMaxDepth(m_pageTree.get());
+ m_cache.maxDepthComputed=TRUE;
+ }
+ return m_cache.maxDepth;
+ }
+ TemplateVariant preferredDepth() const
+ {
+ if (!m_cache.preferredDepthComputed)
{
- m_pageList->addPages(*Doxygen::pageSDict,TRUE);
+ m_cache.preferredDepth = computePreferredDepth(m_pageTree.get(),maxDepth().toInt());
+ m_cache.preferredDepthComputed=TRUE;
}
-
- //%% PageNodeList tree:
- addProperty("tree",this,&Private::tree);
- addProperty("fileName",this,&Private::fileName);
- addProperty("relPath",this,&Private::relPath);
- addProperty("highlight",this,&Private::highlight);
- addProperty("subhighlight",this,&Private::subhighlight);
- addProperty("title",this,&Private::title);
+ return m_cache.preferredDepth;
}
private:
- SharedPtr<PageNodeListContext> m_pageList;
+ SharedPtr<NestingContext> m_pageTree;
+ struct Cachable
+ {
+ Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+ int maxDepth;
+ bool maxDepthComputed;
+ int preferredDepth;
+ bool preferredDepthComputed;
+ };
+ mutable Cachable m_cache;
};
//%% }
@@ -5362,65 +6290,28 @@ TemplateVariant PageTreeContext::get(const char *name) const
//------------------------------------------------------------------------
-//%% struct PageList: list of related pages
-//%% {
-class PageListContext::Private : public PropertyMapper
+//%% list PageList[Page]: list of pages
+class PageListContext::Private : public GenericNodeListContext
{
public:
- TemplateVariant items() const
- {
- return m_pageList.get();
- }
- TemplateVariant fileName() const
- {
- return "pages";
- }
- TemplateVariant relPath() const
- {
- return "";
- }
- TemplateVariant highlight() const
- {
- return "pages";
- }
- TemplateVariant subhighlight() const
+ void addPages(const PageSDict &pages)
{
- return "";
- }
- TemplateVariant title() const
- {
- return theTranslator->trRelatedPages();
- }
- Private()
- {
- m_pageList.reset(new GenericNodeListContext);
- // Add pages
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
+ PageSDict::Iterator pdi(pages);
PageDef *pd=0;
for (pdi.toFirst();(pd=pdi.current());++pdi)
{
if (!pd->getGroupDef() && !pd->isReference())
{
- m_pageList->append(PageContext::alloc(pd));
+ append(PageContext::alloc(pd));
}
}
-
- //%% list[Page] items:
- addProperty("items",this,&Private::items);
- addProperty("fileName",this,&Private::fileName);
- addProperty("relPath",this,&Private::relPath);
- addProperty("highlight",this,&Private::highlight);
- addProperty("subhighlight",this,&Private::subhighlight);
- addProperty("title",this,&Private::title);
}
- private:
- SharedPtr<GenericNodeListContext> m_pageList;
};
-//%% }
-PageListContext::PageListContext() : RefCountedContext("PageListContext")
+PageListContext::PageListContext(const PageSDict *pages) : RefCountedContext("PageListContext")
{
p = new Private;
+ if (pages) p->addPages(*pages);
}
PageListContext::~PageListContext()
@@ -5428,70 +6319,20 @@ PageListContext::~PageListContext()
delete p;
}
-TemplateVariant PageListContext::get(const char *name) const
-{
- return p->get(name);
-}
-
-
-//------------------------------------------------------------------------
-
-//%% struct ModuleNode: node is a directory hierarchy
-//%% {
-class ModuleNodeContext::Private : public PropertyMapper
-{
- public:
- Private(GroupDef *gd) : m_groupDef(gd)
- {
- m_children.reset(ModuleListContext::alloc());
- m_moduleContext.reset(ModuleContext::alloc(gd));
- //%% bool is_leaf_node: true if this node does not have any children
- addProperty("is_leaf_node",this,&Private::isLeafNode);
- //%% ModuleList children: list of submodules
- addProperty("children",this,&Private::children);
- //%% Module module: module info
- addProperty("module",this,&Private::getModule);
- addModules();
- }
- TemplateVariant isLeafNode() const
- {
- return m_children->count()==0;
- }
- TemplateVariant children() const
- {
- return m_children.get();
- }
- TemplateVariant getModule() const
- {
- return m_moduleContext.get();
- }
- void addModules()
- {
- if (m_groupDef->getSubGroups())
- {
- m_children->addModules(*m_groupDef->getSubGroups());
- }
- }
- private:
- GroupDef *m_groupDef;
- SharedPtr<ModuleListContext> m_children;
- SharedPtr<ModuleContext> m_moduleContext;
-};
-//%% }
-
-ModuleNodeContext::ModuleNodeContext(GroupDef *gd) : RefCountedContext("ModuleNodeContext")
+// TemplateListIntf
+int PageListContext::count() const
{
- p = new Private(gd);
+ return p->count();
}
-ModuleNodeContext::~ModuleNodeContext()
+TemplateVariant PageListContext::at(int index) const
{
- delete p;
+ return p->at(index);
}
-TemplateVariant ModuleNodeContext::get(const char *n) const
+TemplateListIntf::ConstIterator *PageListContext::createIterator() const
{
- return p->get(n);
+ return p->createIterator();
}
//------------------------------------------------------------------------
@@ -5500,33 +6341,24 @@ TemplateVariant ModuleNodeContext::get(const char *n) const
class ModuleListContext::Private : public GenericNodeListContext
{
public:
- void addModules(const GroupSDict &modules)
+ void addModules()
{
- static bool externalGroups = Config_getBool("EXTERNAL_GROUPS");
- GroupSDict::Iterator gli(modules);
+ GroupSDict::Iterator gli(*Doxygen::groupSDict);
GroupDef *gd;
for (gli.toFirst();(gd=gli.current());++gli)
{
- if (!gd->isASubGroup() && gd->isVisible() && (!gd->isReference() || externalGroups))
+ if (!gd->isReference())
{
- append(ModuleNodeContext::alloc(gd));
+ append(ModuleContext::alloc(gd));
}
}
}
- void addModules(const GroupList &list)
- {
- QListIterator<GroupDef> gli(list);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- append(ModuleNodeContext::alloc(gd));
- }
- }
};
ModuleListContext::ModuleListContext() : RefCountedContext("ModuleListContext")
{
p = new Private;
+ p->addModules();
}
ModuleListContext::~ModuleListContext()
@@ -5550,17 +6382,6 @@ TemplateListIntf::ConstIterator *ModuleListContext::createIterator() const
return p->createIterator();
}
-void ModuleListContext::addModules(const GroupSDict &modules)
-{
- p->addModules(modules);
-}
-
-void ModuleListContext::addModules(const GroupList &modules)
-{
- p->addModules(modules);
-}
-
-
//------------------------------------------------------------------------
//%% struct ModuleTree: tree of modules
@@ -5568,9 +6389,28 @@ void ModuleListContext::addModules(const GroupList &modules)
class ModuleTreeContext::Private : public PropertyMapper
{
public:
+ Private()
+ {
+ m_moduleTree.reset(NestingContext::alloc(0,0));
+ // Add modules
+ if (Doxygen::groupSDict)
+ {
+ m_moduleTree->addModules(*Doxygen::groupSDict);
+ }
+
+ //%% ModuleList tree:
+ addProperty("tree",this,&Private::tree);
+ addProperty("fileName",this,&Private::fileName);
+ addProperty("relPath",this,&Private::relPath);
+ addProperty("highlight",this,&Private::highlight);
+ addProperty("subhighlight",this,&Private::subhighlight);
+ addProperty("title",this,&Private::title);
+ addProperty("preferredDepth",this,&Private::preferredDepth);
+ addProperty("maxDepth",this,&Private::maxDepth);
+ }
TemplateVariant tree() const
{
- return TemplateVariant(&m_moduleList);
+ return m_moduleTree.get();
}
TemplateVariant fileName() const
{
@@ -5592,25 +6432,35 @@ class ModuleTreeContext::Private : public PropertyMapper
{
return theTranslator->trModules();
}
- Private()
+ TemplateVariant maxDepth() const
{
- m_moduleList.reset(ModuleListContext::alloc());
- // Add modules
- if (Doxygen::groupSDict)
+ if (!m_cache.maxDepthComputed)
{
- m_moduleList->addModules(*Doxygen::groupSDict);
+ m_cache.maxDepth = computeMaxDepth(m_moduleTree.get());
+ m_cache.maxDepthComputed=TRUE;
}
-
- //%% ModuleList tree:
- addProperty("tree",this,&Private::tree);
- addProperty("fileName",this,&Private::fileName);
- addProperty("relPath",this,&Private::relPath);
- addProperty("highlight",this,&Private::highlight);
- addProperty("subhighlight",this,&Private::subhighlight);
- addProperty("title",this,&Private::title);
+ return m_cache.maxDepth;
+ }
+ TemplateVariant preferredDepth() const
+ {
+ if (!m_cache.preferredDepthComputed)
+ {
+ m_cache.preferredDepth = computePreferredDepth(m_moduleTree.get(),maxDepth().toInt());
+ m_cache.preferredDepthComputed=TRUE;
+ }
+ return m_cache.preferredDepth;
}
private:
- SharedPtr<ModuleListContext> m_moduleList;
+ SharedPtr<NestingContext> m_moduleTree;
+ struct Cachable
+ {
+ Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+ int maxDepth;
+ bool maxDepthComputed;
+ int preferredDepth;
+ bool preferredDepthComputed;
+ };
+ mutable Cachable m_cache;
};
//%% }
@@ -5663,7 +6513,7 @@ class NavPathElemContext::Private : public PropertyMapper
{
text = ((const GroupDef*)m_def)->groupTitle();
}
- else if (type==Definition::TypePage && !(((const PageDef*)this)->title().isEmpty()))
+ else if (type==Definition::TypePage && !(((const PageDef*)m_def)->title().isEmpty()))
{
text = ((const PageDef*)m_def)->title();
}
@@ -5706,7 +6556,7 @@ class ExampleListContext::Private : public PropertyMapper
public:
TemplateVariant items() const
{
- return TemplateVariant(&m_pageList);
+ return m_pageList.get();
}
TemplateVariant fileName() const
{
@@ -5730,14 +6580,8 @@ class ExampleListContext::Private : public PropertyMapper
}
Private()
{
- m_pageList.reset(PageNodeListContext::alloc());
- // Add pages
- if (Doxygen::exampleSDict)
- {
- m_pageList->addPages(*Doxygen::exampleSDict,FALSE);
- }
+ m_pageList.reset(PageListContext::alloc(Doxygen::exampleSDict));
- //%% PageNodeList items:
addProperty("items",this,&Private::items);
addProperty("fileName",this,&Private::fileName);
addProperty("relPath",this,&Private::relPath);
@@ -5746,7 +6590,7 @@ class ExampleListContext::Private : public PropertyMapper
addProperty("title",this,&Private::title);
}
private:
- SharedPtr<PageNodeListContext> m_pageList;
+ SharedPtr<PageListContext> m_pageList;
};
//%% }
@@ -5765,6 +6609,442 @@ TemplateVariant ExampleListContext::get(const char *name) const
return p->get(name);
}
+//------------------------------------------------------------------------
+
+//%% struct GlobalsIndex: list of examples page
+//%% {
+class GlobalsIndexContext::Private : public PropertyMapper
+{
+ public:
+ Private()
+ {
+ addProperty("all", this,&Private::all);
+ addProperty("functions", this,&Private::functions);
+ addProperty("variables", this,&Private::variables);
+ addProperty("typedefs", this,&Private::typedefs);
+ addProperty("enums", this,&Private::enums);
+ addProperty("enumValues", this,&Private::enumValues);
+ addProperty("macros", this,&Private::macros);
+ addProperty("properties", this,&Private::properties);
+ addProperty("events", this,&Private::events);
+ addProperty("related", this,&Private::related);
+ addProperty("fileName", this,&Private::fileName);
+ addProperty("relPath", this,&Private::relPath);
+ addProperty("highlight", this,&Private::highlight);
+ addProperty("subhighlight",this,&Private::subhighlight);
+ addProperty("title", this,&Private::title);
+ }
+ typedef bool (MemberDef::*MemberFunc)() const;
+ TemplateVariant getMembersFiltered(SharedPtr<TemplateList> &listRef,MemberFunc filter) const
+ {
+ if (!listRef)
+ {
+ TemplateList *list = TemplateList::alloc();
+ MemberName *mn;
+ MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
+ for (fnli.toFirst();(mn=fnli.current());++fnli)
+ {
+ MemberDef *md;
+ MemberNameIterator mni(*mn);
+ for (mni.toFirst();(md=mni.current());++mni)
+ {
+ FileDef *fd=md->getFileDef();
+ if (fd && fd->isLinkableInProject() &&
+ !md->name().isEmpty() && !md->getNamespaceDef() && md->isLinkableInProject())
+ {
+ if (filter==0 || (md->*filter)())
+ {
+ list->append(MemberContext::alloc(md));
+ }
+ }
+ }
+ }
+ listRef.reset(list);
+ }
+ return listRef.get();
+ }
+ TemplateVariant all() const
+ {
+ return getMembersFiltered(m_cache.all,0);
+ }
+ TemplateVariant functions() const
+ {
+ return getMembersFiltered(m_cache.functions,&MemberDef::isFunction);
+ }
+ TemplateVariant variables() const
+ {
+ return getMembersFiltered(m_cache.variables,&MemberDef::isVariable);
+ }
+ TemplateVariant typedefs() const
+ {
+ return getMembersFiltered(m_cache.typedefs,&MemberDef::isTypedef);
+ }
+ TemplateVariant enums() const
+ {
+ return getMembersFiltered(m_cache.enums,&MemberDef::isEnumerate);
+ }
+ TemplateVariant enumValues() const
+ {
+ return getMembersFiltered(m_cache.enumValues,&MemberDef::isEnumValue);
+ }
+ TemplateVariant macros() const
+ {
+ return getMembersFiltered(m_cache.macros,&MemberDef::isDefine);
+ }
+ TemplateVariant properties() const
+ {
+ return FALSE;
+ }
+ TemplateVariant events() const
+ {
+ return FALSE;
+ }
+ TemplateVariant related() const
+ {
+ return FALSE;
+ }
+ TemplateVariant fileName() const
+ {
+ return "globals";
+ }
+ TemplateVariant relPath() const
+ {
+ return "";
+ }
+ TemplateVariant highlight() const
+ {
+ return "files";
+ }
+ TemplateVariant subhighlight() const
+ {
+ return "filemembers";
+ }
+ TemplateVariant title() const
+ {
+ return theTranslator->trFileMembers();
+ }
+ private:
+ struct Cachable
+ {
+ Cachable() {}
+ SharedPtr<TemplateList> all;
+ SharedPtr<TemplateList> functions;
+ SharedPtr<TemplateList> variables;
+ SharedPtr<TemplateList> typedefs;
+ SharedPtr<TemplateList> enums;
+ SharedPtr<TemplateList> enumValues;
+ SharedPtr<TemplateList> macros;
+ };
+ mutable Cachable m_cache;
+};
+//%% }
+
+GlobalsIndexContext::GlobalsIndexContext() : RefCountedContext("GlobalsIndexContext")
+{
+ p = new Private;
+}
+
+GlobalsIndexContext::~GlobalsIndexContext()
+{
+ delete p;
+}
+
+TemplateVariant GlobalsIndexContext::get(const char *name) const
+{
+ return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct ClassMembersIndex: list of examples page
+//%% {
+class ClassMembersIndexContext::Private : public PropertyMapper
+{
+ public:
+ Private()
+ {
+ addProperty("all", this,&Private::all);
+ addProperty("functions", this,&Private::functions);
+ addProperty("variables", this,&Private::variables);
+ addProperty("typedefs", this,&Private::typedefs);
+ addProperty("enums", this,&Private::enums);
+ addProperty("enumValues", this,&Private::enumValues);
+ addProperty("macros", this,&Private::macros);
+ addProperty("properties", this,&Private::properties);
+ addProperty("events", this,&Private::events);
+ addProperty("related", this,&Private::related);
+ addProperty("fileName", this,&Private::fileName);
+ addProperty("relPath", this,&Private::relPath);
+ addProperty("highlight", this,&Private::highlight);
+ addProperty("subhighlight",this,&Private::subhighlight);
+ addProperty("title", this,&Private::title);
+ }
+ typedef bool (MemberDef::*MemberFunc)() const;
+ TemplateVariant getMembersFiltered(SharedPtr<TemplateList> &listRef,MemberFunc filter) const
+ {
+ if (!listRef)
+ {
+ TemplateList *list = TemplateList::alloc();
+ MemberName *mn;
+ MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
+ for (mnli.toFirst();(mn=mnli.current());++mnli)
+ {
+ MemberDef *md;
+ MemberNameIterator mni(*mn);
+ for (mni.toFirst();(md=mni.current());++mni)
+ {
+ ClassDef *cd = md->getClassDef();
+ if (cd && cd->isLinkableInProject() && cd->templateMaster()==0 &&
+ md->isLinkableInProject() && !md->name().isEmpty())
+ {
+ if (filter==0 || (md->*filter)())
+ {
+ list->append(MemberContext::alloc(md));
+ }
+ }
+ }
+ }
+ listRef.reset(list);
+ }
+ return listRef.get();
+ }
+ TemplateVariant all() const
+ {
+ return getMembersFiltered(m_cache.all,&MemberDef::isNotFriend);
+ }
+ TemplateVariant functions() const
+ {
+ return getMembersFiltered(m_cache.functions,&MemberDef::isFunctionOrSignalSlot);
+ }
+ TemplateVariant variables() const
+ {
+ return getMembersFiltered(m_cache.variables,&MemberDef::isVariable);
+ }
+ TemplateVariant typedefs() const
+ {
+ return getMembersFiltered(m_cache.typedefs,&MemberDef::isTypedef);
+ }
+ TemplateVariant enums() const
+ {
+ return getMembersFiltered(m_cache.enums,&MemberDef::isEnumerate);
+ }
+ TemplateVariant enumValues() const
+ {
+ return getMembersFiltered(m_cache.enumValues,&MemberDef::isEnumValue);
+ }
+ TemplateVariant macros() const
+ {
+ return FALSE;
+ }
+ TemplateVariant properties() const
+ {
+ return getMembersFiltered(m_cache.properties,&MemberDef::isProperty);
+ }
+ TemplateVariant events() const
+ {
+ return getMembersFiltered(m_cache.events,&MemberDef::isEvent);
+ }
+ TemplateVariant related() const
+ {
+ return getMembersFiltered(m_cache.related,&MemberDef::isRelated);
+ }
+ TemplateVariant fileName() const
+ {
+ return "functions";
+ }
+ TemplateVariant relPath() const
+ {
+ return "";
+ }
+ TemplateVariant highlight() const
+ {
+ return "classes";
+ }
+ TemplateVariant subhighlight() const
+ {
+ return "classmembers";
+ }
+ TemplateVariant title() const
+ {
+ return theTranslator->trCompoundMembers();
+ }
+ private:
+ struct Cachable
+ {
+ Cachable() {}
+ SharedPtr<TemplateList> all;
+ SharedPtr<TemplateList> functions;
+ SharedPtr<TemplateList> variables;
+ SharedPtr<TemplateList> typedefs;
+ SharedPtr<TemplateList> enums;
+ SharedPtr<TemplateList> enumValues;
+ SharedPtr<TemplateList> properties;
+ SharedPtr<TemplateList> events;
+ SharedPtr<TemplateList> related;
+ };
+ mutable Cachable m_cache;
+};
+//%% }
+
+ClassMembersIndexContext::ClassMembersIndexContext() : RefCountedContext("ClassMembersIndexContext")
+{
+ p = new Private;
+}
+
+ClassMembersIndexContext::~ClassMembersIndexContext()
+{
+ delete p;
+}
+
+TemplateVariant ClassMembersIndexContext::get(const char *name) const
+{
+ return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct NamespaceMembersIndex: list of examples page
+//%% {
+class NamespaceMembersIndexContext::Private : public PropertyMapper
+{
+ public:
+ Private()
+ {
+ addProperty("all", this,&Private::all);
+ addProperty("functions", this,&Private::functions);
+ addProperty("variables", this,&Private::variables);
+ addProperty("typedefs", this,&Private::typedefs);
+ addProperty("enums", this,&Private::enums);
+ addProperty("enumValues", this,&Private::enumValues);
+ addProperty("macros", this,&Private::macros);
+ addProperty("properties", this,&Private::properties);
+ addProperty("events", this,&Private::events);
+ addProperty("related", this,&Private::related);
+ addProperty("fileName", this,&Private::fileName);
+ addProperty("relPath", this,&Private::relPath);
+ addProperty("highlight", this,&Private::highlight);
+ addProperty("subhighlight",this,&Private::subhighlight);
+ addProperty("title", this,&Private::title);
+ }
+ typedef bool (MemberDef::*MemberFunc)() const;
+ TemplateVariant getMembersFiltered(SharedPtr<TemplateList> &listRef,MemberFunc filter) const
+ {
+ if (!listRef)
+ {
+ TemplateList *list = TemplateList::alloc();
+ MemberName *mn;
+ MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
+ for (fnli.toFirst();(mn=fnli.current());++fnli)
+ {
+ MemberDef *md;
+ MemberNameIterator mni(*mn);
+ for (mni.toFirst();(md=mni.current());++mni)
+ {
+ NamespaceDef *nd=md->getNamespaceDef();
+ if (nd && nd->isLinkableInProject() &&
+ !md->name().isEmpty() && md->isLinkableInProject())
+ {
+ if (filter==0 || (md->*filter)())
+ {
+ list->append(MemberContext::alloc(md));
+ }
+ }
+ }
+ }
+ listRef.reset(list);
+ }
+ return listRef.get();
+ }
+ TemplateVariant all() const
+ {
+ return getMembersFiltered(m_cache.all,0);
+ }
+ TemplateVariant functions() const
+ {
+ return getMembersFiltered(m_cache.functions,&MemberDef::isFunction);
+ }
+ TemplateVariant variables() const
+ {
+ return getMembersFiltered(m_cache.variables,&MemberDef::isVariable);
+ }
+ TemplateVariant typedefs() const
+ {
+ return getMembersFiltered(m_cache.typedefs,&MemberDef::isTypedef);
+ }
+ TemplateVariant enums() const
+ {
+ return getMembersFiltered(m_cache.enums,&MemberDef::isEnumerate);
+ }
+ TemplateVariant enumValues() const
+ {
+ return getMembersFiltered(m_cache.enumValues,&MemberDef::isEnumValue);
+ }
+ TemplateVariant macros() const
+ {
+ return FALSE;
+ }
+ TemplateVariant properties() const
+ {
+ return FALSE;
+ }
+ TemplateVariant events() const
+ {
+ return FALSE;
+ }
+ TemplateVariant related() const
+ {
+ return FALSE;
+ }
+ TemplateVariant fileName() const
+ {
+ return "namespacemembers";
+ }
+ TemplateVariant relPath() const
+ {
+ return "";
+ }
+ TemplateVariant highlight() const
+ {
+ return "namespaces";
+ }
+ TemplateVariant subhighlight() const
+ {
+ return "namespacemembers";
+ }
+ TemplateVariant title() const
+ {
+ return theTranslator->trNamespaceMembers();
+ }
+ private:
+ struct Cachable
+ {
+ Cachable() {}
+ SharedPtr<TemplateList> all;
+ SharedPtr<TemplateList> functions;
+ SharedPtr<TemplateList> variables;
+ SharedPtr<TemplateList> typedefs;
+ SharedPtr<TemplateList> enums;
+ SharedPtr<TemplateList> enumValues;
+ };
+ mutable Cachable m_cache;
+};
+//%% }
+
+NamespaceMembersIndexContext::NamespaceMembersIndexContext() : RefCountedContext("NamespaceMembersIndexContext")
+{
+ p = new Private;
+}
+
+NamespaceMembersIndexContext::~NamespaceMembersIndexContext()
+{
+ delete p;
+}
+
+TemplateVariant NamespaceMembersIndexContext::get(const char *name) const
+{
+ return p->get(name);
+}
+
//------------------------------------------------------------------------
@@ -6383,7 +7663,7 @@ class InheritedMemberInfoContext::Private : public PropertyMapper
addProperty("id", this,&Private::id);
addProperty("inheritedFrom", this,&Private::inheritedFrom);
}
- ~Private()
+ virtual ~Private()
{
delete m_memberList;
}
@@ -6767,7 +8047,13 @@ class HtmlEscaper : public TemplateEscapeIntf
class HtmlSpaceless : public TemplateSpacelessIntf
{
public:
- HtmlSpaceless() : m_insideTag(FALSE), m_insideString('\0'), m_removeSpaces(TRUE) {}
+ HtmlSpaceless() { reset(); }
+ void reset()
+ {
+ m_insideTag = FALSE;
+ m_insideString = '\0';
+ m_removeSpaces = TRUE;
+ }
QCString remove(const QCString &s)
{
QGString result;
@@ -6821,7 +8107,7 @@ class HtmlSpaceless : public TemplateSpacelessIntf
}
}
result+='\0';
- //printf("HtmlSpaceless::remove('%s')='%s' m_insideTag=%d m_insideString=%d removeSpaces=%d\n",s.data(),result.data(),
+ //printf("HtmlSpaceless::remove({%s})={%s} m_insideTag=%d m_insideString=%d removeSpaces=%d\n",s.data(),result.data(),
// m_insideTag,m_insideString,m_removeSpaces);
return result.data();
}
@@ -6840,80 +8126,100 @@ int RefCountedContext::s_totalCount;
void generateOutputViaTemplate()
{
{
- TemplateEngine e;
- TemplateContext *ctx = e.createContext();
- if (ctx)
- {
- SharedPtr<DoxygenContext> doxygen (DoxygenContext::alloc());
- SharedPtr<ConfigContext> config (ConfigContext::alloc());
- SharedPtr<TranslateContext> tr (TranslateContext::alloc());
- SharedPtr<ClassListContext> classList (ClassListContext::alloc());
- SharedPtr<ClassTreeContext> classTree (ClassTreeContext::alloc());
- SharedPtr<ClassHierarchyContext> classHierarchy (ClassHierarchyContext::alloc());
- SharedPtr<NamespaceListContext> namespaceList (NamespaceListContext::alloc());
- SharedPtr<NamespaceTreeContext> namespaceTree (NamespaceTreeContext::alloc());
- SharedPtr<DirListContext> dirList (DirListContext::alloc());
- SharedPtr<FileListContext> fileList (FileListContext::alloc());
- SharedPtr<FileTreeContext> fileTree (FileTreeContext::alloc());
- SharedPtr<PageTreeContext> pageTree (PageTreeContext::alloc());
- SharedPtr<PageListContext> pageList (PageListContext::alloc());
- SharedPtr<ModuleTreeContext> moduleTree (ModuleTreeContext::alloc());
- SharedPtr<ExampleListContext> exampleList (ExampleListContext::alloc());
-
- //%% Doxygen doxygen:
- ctx->set("doxygen",doxygen.get());
- //%% Translator tr:
- ctx->set("tr",tr.get());
- //%% Config config:
- ctx->set("config",config.get());
- //%% ClassList classList:
- ctx->set("classList",classList.get()); // not used for standard HTML
- //%% ClassTree classTree:
- ctx->set("classTree",classTree.get());
- // classIndex
- //%% ClassHierarchy classHierarchy:
- ctx->set("classHierarchy",classHierarchy.get());
- //%% NamespaceList namespaceList:
- ctx->set("namespaceList",namespaceList.get());
- //%% NamespaceTree namespaceTree:
- ctx->set("namespaceTree",namespaceTree.get());
- //%% FileList fileList:
- ctx->set("fileList",fileList.get());
- //%% FileTree fileTree:
- ctx->set("fileTree",fileTree.get());
- //%% PageList pageList
- ctx->set("pageList",pageList.get());
- //%% PageTree pageTree
- ctx->set("pageTree",pageTree.get());
- //%% ModuleTree moduleTree
- ctx->set("moduleTree",moduleTree.get());
- //%% ExampleList exampleList
- ctx->set("exampleList",exampleList.get());
- //%% DirList dirList
- ctx->set("dirList",dirList.get());
-
- // render HTML output
- Template *tpl = e.loadByName("htmllayout.tpl",1);
- if (tpl)
- {
- g_globals.outputFormat = ContextGlobals::Html;
- g_globals.dynSectionId = 0;
- g_globals.outputDir = Config_getString("HTML_OUTPUT");
- HtmlEscaper htmlEsc;
- ctx->setEscapeIntf(Config_getString("HTML_FILE_EXTENSION"),&htmlEsc);
- HtmlSpaceless spl;
- ctx->setSpacelessIntf(&spl);
- ctx->setOutputDirectory(g_globals.outputDir);
- FTextStream ts;
- tpl->render(ts,ctx);
- }
- e.unload(tpl);
-
- // TODO: render other outputs
- }
- delete ctx;
+ TemplateEngine e;
+ TemplateContext *ctx = e.createContext();
+ if (ctx)
+ {
+ SharedPtr<DoxygenContext> doxygen (DoxygenContext::alloc());
+ SharedPtr<ConfigContext> config (ConfigContext::alloc());
+ SharedPtr<TranslateContext> tr (TranslateContext::alloc());
+ SharedPtr<ClassListContext> classList (ClassListContext::alloc());
+ SharedPtr<ClassIndexContext> classIndex (ClassIndexContext::alloc());
+ SharedPtr<ClassTreeContext> classTree (ClassTreeContext::alloc());
+ SharedPtr<ClassHierarchyContext> classHierarchy (ClassHierarchyContext::alloc());
+ SharedPtr<NamespaceListContext> namespaceList (NamespaceListContext::alloc());
+ SharedPtr<NamespaceTreeContext> namespaceTree (NamespaceTreeContext::alloc());
+ SharedPtr<DirListContext> dirList (DirListContext::alloc());
+ SharedPtr<FileListContext> fileList (FileListContext::alloc());
+ SharedPtr<FileTreeContext> fileTree (FileTreeContext::alloc());
+ SharedPtr<PageTreeContext> pageTree (PageTreeContext::alloc());
+ SharedPtr<PageListContext> pageList (PageListContext::alloc(Doxygen::pageSDict));
+ SharedPtr<ExampleListContext> exampleList (ExampleListContext::alloc());
+ SharedPtr<ModuleTreeContext> moduleTree (ModuleTreeContext::alloc());
+ SharedPtr<ModuleListContext> moduleList (ModuleListContext::alloc());
+ SharedPtr<PageContext> mainPage (PageContext::alloc(Doxygen::mainPage,TRUE));
+ SharedPtr<GlobalsIndexContext> globalsIndex (GlobalsIndexContext::alloc());
+ SharedPtr<ClassMembersIndexContext> classMembersIndex (ClassMembersIndexContext::alloc());
+ SharedPtr<NamespaceMembersIndexContext> namespaceMembersIndex(NamespaceMembersIndexContext::alloc());
+
+ //%% Doxygen doxygen:
+ ctx->set("doxygen",doxygen.get());
+ //%% Translator tr:
+ ctx->set("tr",tr.get());
+ //%% Config config:
+ ctx->set("config",config.get());
+ //%% ClassList classList:
+ ctx->set("classList",classList.get()); // not used for standard HTML
+ //%% ClassTree classTree:
+ ctx->set("classTree",classTree.get());
+ //%% ClassIndex classIndex:
+ ctx->set("classIndex",classIndex.get());
+ //%% ClassHierarchy classHierarchy:
+ ctx->set("classHierarchy",classHierarchy.get());
+ //%% NamespaceList namespaceList:
+ ctx->set("namespaceList",namespaceList.get());
+ //%% NamespaceTree namespaceTree:
+ ctx->set("namespaceTree",namespaceTree.get());
+ //%% FileList fileList:
+ ctx->set("fileList",fileList.get());
+ //%% FileTree fileTree:
+ ctx->set("fileTree",fileTree.get());
+ //%% PageList pageList
+ ctx->set("pageList",pageList.get());
+ //%% PageTree pageTree
+ ctx->set("pageTree",pageTree.get());
+ //%% ExampleList exampleList
+ ctx->set("exampleList",exampleList.get());
+ //%% ModuleTree moduleTree
+ ctx->set("moduleTree",moduleTree.get());
+ //%% ModuleList moduleList
+ ctx->set("moduleList",moduleList.get());
+ //%% DirList dirList
+ ctx->set("dirList",dirList.get());
+ //%% Page mainPage
+ ctx->set("mainPage",mainPage.get());
+ //%% GlobalsIndex globalsIndex:
+ ctx->set("globalsIndex",globalsIndex.get());
+ //%% ClassMembersIndex classMembersIndex:
+ ctx->set("classMembersIndex",classMembersIndex.get());
+ //%% NamespaceMembersIndex namespaceMembersIndex:
+ ctx->set("namespaceMembersIndex",namespaceMembersIndex.get());
+
+ // render HTML output
+ Template *tpl = e.loadByName("htmllayout.tpl",1);
+ if (tpl)
+ {
+ g_globals.outputFormat = ContextGlobals::Html;
+ g_globals.dynSectionId = 0;
+ g_globals.outputDir = Config_getString("HTML_OUTPUT");
+ QDir dir(g_globals.outputDir);
+ createSubDirs(dir);
+ HtmlEscaper htmlEsc;
+ ctx->setEscapeIntf(Config_getString("HTML_FILE_EXTENSION"),&htmlEsc);
+ HtmlSpaceless spl;
+ ctx->setSpacelessIntf(&spl);
+ ctx->setOutputDirectory(g_globals.outputDir);
+ FTextStream ts;
+ tpl->render(ts,ctx);
+ e.unload(tpl);
+ }
+
+ // TODO: render other outputs
+
+ e.destroyContext(ctx);
+ }
}
-#if DEBUG_REF
+#if DEBUG_REF // should be 0, i.e. all objects are deleted
printf("==== total ref count %d\n",RefCountedContext::s_totalCount);
#endif
}
diff --git a/src/context.h b/src/context.h
index 18fa519..b39ab40 100644
--- a/src/context.h
+++ b/src/context.h
@@ -1,3 +1,18 @@
+/******************************************************************************
+ *
+ * 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 CONTEXT_H
#define CONTEXT_H
@@ -51,7 +66,7 @@ class RefCountedContext
m_className=className;
m_insideRelease = FALSE;
}
- virtual ~RefCountedContext()
+ ~RefCountedContext()
{
if (!m_insideRelease) abort();
}
@@ -137,7 +152,7 @@ class DoxygenContext : public RefCountedContext, public TemplateStructIntf
private:
DoxygenContext();
- ~DoxygenContext();
+ ~DoxygenContext();
class Private;
Private *p;
};
@@ -309,7 +324,7 @@ class DirContext : public RefCountedContext, public TemplateStructIntf
class PageContext : public RefCountedContext, public TemplateStructIntf
{
public:
- static PageContext *alloc(PageDef *pd) { return new PageContext(pd); }
+ static PageContext *alloc(PageDef *pd,bool isMainPage=FALSE) { return new PageContext(pd,isMainPage); }
// TemplateStructIntf methods
virtual TemplateVariant get(const char *name) const;
@@ -317,7 +332,7 @@ class PageContext : public RefCountedContext, public TemplateStructIntf
virtual int release() { return RefCountedContext::release(); }
private:
- PageContext(PageDef *);
+ PageContext(PageDef *,bool isMainPage);
~PageContext();
class Private;
Private *p;
@@ -364,33 +379,10 @@ class ModuleContext : public RefCountedContext, public TemplateStructIntf
//----------------------------------------------------
-class NestedClassListContext : public RefCountedContext, public TemplateListIntf
-{
- public:
- static NestedClassListContext *alloc() { return new NestedClassListContext; }
-
- // TemplateListIntf
- virtual int count() const;
- virtual TemplateVariant at(int index) const;
- virtual TemplateListIntf::ConstIterator *createIterator() const;
- virtual int addRef() { return RefCountedContext::addRef(); }
- virtual int release() { return RefCountedContext::release(); }
-
- void append(ClassDef *cd);
-
- private:
- NestedClassListContext();
- ~NestedClassListContext();
- class Private;
- Private *p;
-};
-
-//----------------------------------------------------
-
-class NestedNamespaceListContext : public RefCountedContext, public TemplateListIntf
+class ClassListContext : public RefCountedContext, public TemplateListIntf
{
public:
- static NestedNamespaceListContext *alloc() { return new NestedNamespaceListContext; }
+ static ClassListContext *alloc() { return new ClassListContext; }
// TemplateListIntf
virtual int count() const;
@@ -399,32 +391,28 @@ class NestedNamespaceListContext : public RefCountedContext, public TemplateList
virtual int addRef() { return RefCountedContext::addRef(); }
virtual int release() { return RefCountedContext::release(); }
- void append(NamespaceDef *cd);
-
private:
- NestedNamespaceListContext();
- ~NestedNamespaceListContext();
+ ClassListContext();
+ ~ClassListContext();
class Private;
Private *p;
};
//----------------------------------------------------
-class ClassListContext : public RefCountedContext, public TemplateListIntf
+class ClassIndexContext : public RefCountedContext, public TemplateStructIntf
{
public:
- static ClassListContext *alloc() { return new ClassListContext; }
+ static ClassIndexContext *alloc() { return new ClassIndexContext; }
- // TemplateListIntf
- virtual int count() const;
- virtual TemplateVariant at(int index) const;
- virtual TemplateListIntf::ConstIterator *createIterator() const;
+ // TemplateStructIntf methods
+ virtual TemplateVariant get(const char *name) const;
virtual int addRef() { return RefCountedContext::addRef(); }
virtual int release() { return RefCountedContext::release(); }
private:
- ClassListContext();
- ~ClassListContext();
+ ClassIndexContext();
+ ~ClassIndexContext();
class Private;
Private *p;
};
@@ -536,6 +524,9 @@ class NestingContext : public RefCountedContext, public TemplateListIntf
void addDirs(const DirList &);
void addFiles(const FileNameList &);
void addFiles(const FileList &);
+ void addPages(const PageSDict &pages,bool rootOnly);
+ void addModules(const GroupSDict &modules);
+ void addModules(const GroupList &modules);
private:
NestingContext(const NestingNodeContext *parent,int level);
@@ -666,60 +657,22 @@ class FileTreeContext : public RefCountedContext, public TemplateStructIntf
//----------------------------------------------------
-class PageNodeContext : public RefCountedContext, public TemplateStructIntf
+class PageListContext : public RefCountedContext, public TemplateListIntf
{
public:
- static PageNodeContext *alloc(PageDef *pd) { return new PageNodeContext(pd); }
-
- // TemplateStructIntf methods
- virtual TemplateVariant get(const char *name) const;
- virtual int addRef() { return RefCountedContext::addRef(); }
- virtual int release() { return RefCountedContext::release(); }
+ static PageListContext *alloc(const PageSDict *pages) { return new PageListContext(pages); }
- private:
- PageNodeContext(PageDef *);
- ~PageNodeContext();
- class Private;
- Private *p;
-};
-
-//----------------------------------------------------
-
-class PageNodeListContext : public RefCountedContext, public TemplateListIntf
-{
- public:
- static PageNodeListContext *alloc() { return new PageNodeListContext; }
-
- // TemplateListIntf
+ // TemplateListIntf methods
virtual int count() const;
virtual TemplateVariant at(int index) const;
virtual TemplateListIntf::ConstIterator *createIterator() const;
virtual int addRef() { return RefCountedContext::addRef(); }
virtual int release() { return RefCountedContext::release(); }
- void addPages(const PageSDict &,bool rootOnly);
-
- private:
- PageNodeListContext();
- ~PageNodeListContext();
- class Private;
- Private *p;
-};
-
-//----------------------------------------------------
-
-class PageListContext : public RefCountedContext, public TemplateStructIntf
-{
- public:
- static PageListContext *alloc() { return new PageListContext; }
-
- // TemplateStructIntf methods
- virtual TemplateVariant get(const char *name) const;
- virtual int addRef() { return RefCountedContext::addRef(); }
- virtual int release() { return RefCountedContext::release(); }
+ void addPages(const PageSDict &pages);
private:
- PageListContext();
+ PageListContext(const PageSDict *pages);
~PageListContext();
class Private;
Private *p;
@@ -827,6 +780,63 @@ class ExampleListContext : public RefCountedContext, public TemplateStructIntf
//----------------------------------------------------
+class GlobalsIndexContext : public RefCountedContext, public TemplateStructIntf
+{
+ public:
+ static GlobalsIndexContext *alloc() { return new GlobalsIndexContext(); }
+
+ // TemplateStructIntf methods
+ virtual TemplateVariant get(const char *name) const;
+ virtual int addRef() { return RefCountedContext::addRef(); }
+ virtual int release() { return RefCountedContext::release(); }
+
+ private:
+ GlobalsIndexContext();
+ ~GlobalsIndexContext();
+ class Private;
+ Private *p;
+};
+
+//----------------------------------------------------
+
+class ClassMembersIndexContext : public RefCountedContext, public TemplateStructIntf
+{
+ public:
+ static ClassMembersIndexContext *alloc() { return new ClassMembersIndexContext(); }
+
+ // TemplateStructIntf methods
+ virtual TemplateVariant get(const char *name) const;
+ virtual int addRef() { return RefCountedContext::addRef(); }
+ virtual int release() { return RefCountedContext::release(); }
+
+ private:
+ ClassMembersIndexContext();
+ ~ClassMembersIndexContext();
+ class Private;
+ Private *p;
+};
+
+//----------------------------------------------------
+
+class NamespaceMembersIndexContext : public RefCountedContext, public TemplateStructIntf
+{
+ public:
+ static NamespaceMembersIndexContext *alloc() { return new NamespaceMembersIndexContext(); }
+
+ // TemplateStructIntf methods
+ virtual TemplateVariant get(const char *name) const;
+ virtual int addRef() { return RefCountedContext::addRef(); }
+ virtual int release() { return RefCountedContext::release(); }
+
+ private:
+ NamespaceMembersIndexContext();
+ ~NamespaceMembersIndexContext();
+ class Private;
+ Private *p;
+};
+
+//----------------------------------------------------
+
class NavPathElemContext : public RefCountedContext, public TemplateStructIntf
{
public:
diff --git a/src/definition.cpp b/src/definition.cpp
index 8603536..4a6a728 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -515,7 +515,7 @@ void Definition::writeDocAnchorsToTagFile()
{
if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict)
{
- //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count());
+ //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionDict->count());
SDict<SectionInfo>::Iterator sdi(*m_impl->sectionDict);
SectionInfo *si;
for (;(si=sdi.current());++sdi)
@@ -1360,7 +1360,7 @@ QCString Definition::qualifiedName() const
//printf("end %s::qualifiedName()=%s\n",name().data(),m_impl->qualifiedName.data());
//count--;
return m_impl->qualifiedName;
-};
+}
void Definition::setOuterScope(Definition *d)
{
diff --git a/src/definition.h b/src/definition.h
index dfd9dad..05ea621 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -271,7 +271,7 @@ class Definition : public DefinitionIntf
//-----------------------------------------------------------------------------------
/*! Sets a new \a name for the definition */
- void setName(const char *name);
+ virtual void setName(const char *name);
/*! Sets a unique id for the symbol. Used for libclang integration. */
void setId(const char *name);
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index 5d7aafd..9f2dbe3 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -34,6 +34,7 @@
#include "msc.h"
#include "dia.h"
#include "htmlentity.h"
+#include "plantuml.h"
DocbookDocVisitor::DocbookDocVisitor(FTextStream &t,CodeOutputInterface &ci)
: DocVisitor(DocVisitor_Docbook), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
@@ -216,35 +217,58 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
}
break;
case DocVerbatim::Msc:
- static int mscindex = 1;
- QCString baseName(4096);
- QCString name;
- QCString stext = s->text();
- m_t << "<para>" << endl;
- name.sprintf("%s%d", "msc_inline_mscgraph_", mscindex);
- baseName.sprintf("%s%d",
- (Config_getString("DOCBOOK_OUTPUT")+"/inline_mscgraph_").data(),
- mscindex++
- );
- QFile file(baseName+".msc");
- if (!file.open(IO_WriteOnly))
{
- err("Could not open file %s.msc for writing\n",baseName.data());
+ static int mscindex = 1;
+ QCString baseName(4096);
+ QCString name;
+ QCString stext = s->text();
+ m_t << "<para>" << endl;
+ name.sprintf("%s%d", "msc_inline_mscgraph_", mscindex);
+ baseName.sprintf("%s%d",
+ (Config_getString("DOCBOOK_OUTPUT")+"/inline_mscgraph_").data(),
+ mscindex++
+ );
+ QFile file(baseName+".msc");
+ if (!file.open(IO_WriteOnly))
+ {
+ err("Could not open file %s.msc for writing\n",baseName.data());
+ }
+ QCString text = "msc {";
+ text+=stext;
+ text+="}";
+ file.writeBlock( text, text.length() );
+ file.close();
+ m_t << " <figure>" << endl;
+ m_t << " <title>" << name << "</title>" << endl;
+ m_t << " <mediaobject>" << endl;
+ m_t << " <imageobject>" << endl;
+ writeMscFile(baseName);
+ m_t << " </imageobject>" << endl;
+ m_t << " </mediaobject>" << endl;
+ m_t << " </figure>" << endl;
+ m_t << "</para>" << endl;
+ }
+ break;
+ case DocVerbatim::PlantUML:
+ {
+ static QCString docbookOutput = Config_getString("DOCBOOK_OUTPUT");
+ QCString baseName = writePlantUMLSource(docbookOutput,s->exampleFile(),s->text());
+ QCString shortName = baseName;
+ int i;
+ if ((i=shortName.findRev('/'))!=-1)
+ {
+ shortName=shortName.right(shortName.length()-i-1);
+ }
+ m_t << " <figure>" << endl;
+ m_t << " <title>" << shortName << "</title>" << endl;
+ m_t << " <mediaobject>" << endl;
+ m_t << " <imageobject>" << endl;
+ writePlantUMLFile(baseName);
+ m_t << " </imageobject>" << endl;
+ m_t << " </mediaobject>" << endl;
+ m_t << " </figure>" << endl;
+ m_t << "</para>" << endl;
}
- QCString text = "msc {";
- text+=stext;
- text+="}";
- file.writeBlock( text, text.length() );
- file.close();
- m_t << " <figure>" << endl;
- m_t << " <title>" << name << "</title>" << endl;
- m_t << " <mediaobject>" << endl;
- m_t << " <imageobject>" << endl;
- writeMscFile(baseName);
- m_t << " </imageobject>" << endl;
- m_t << " </mediaobject>" << endl;
- m_t << " </figure>" << endl;
- m_t << "</para>" << endl;
break;
}
}
@@ -1195,6 +1219,22 @@ void DocbookDocVisitor::writeMscFile(const QCString &baseName)
m_t << "</imagedata>" << endl;
}
+void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName)
+{
+ QCString shortName = baseName;
+ int i;
+ if ((i=shortName.findRev('/'))!=-1)
+ {
+ shortName=shortName.right(shortName.length()-i-1);
+ }
+ QCString outDir = Config_getString("DOCBOOK_OUTPUT");
+ generatePlantUMLOutput(baseName,outDir,PUML_BITMAP);
+ m_t << " <imagedata";
+ m_t << " width=\"50%\"";
+ m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << ".png" << "\">";
+ m_t << "</imagedata>" << endl;
+}
+
void DocbookDocVisitor::startMscFile(const QCString &fileName,
const QCString &width,
const QCString &height,
diff --git a/src/docbookvisitor.h b/src/docbookvisitor.h
index 20d424e..dd67aba 100644
--- a/src/docbookvisitor.h
+++ b/src/docbookvisitor.h
@@ -156,6 +156,7 @@ class DocbookDocVisitor : public DocVisitor
const QCString &height, bool hasCaption);
void endDotFile(bool hasCaption);
void writeDotFile(const QCString &fileName);
+ void writePlantUMLFile(const QCString &fileName);
//--------------------------------------
// state variables
//--------------------------------------
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 13d333f..8be11c6 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -2459,16 +2459,15 @@ void DocRef::parse()
DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //context)
{
static uint numBibFiles = Config_getList("CITE_BIB_FILES").count();
- m_parent = parent;
- QCString anchor;
+ m_parent = parent;
+ QCString anchor;
//printf("DocCite::DocCite(target=%s)\n",target.data());
ASSERT(!target.isEmpty());
m_relPath = g_relPath;
CiteInfo *cite = Doxygen::citeDict->find(target);
- if (numBibFiles>0 && cite) // ref to citation
+ if (numBibFiles>0 && cite && !cite->text.isEmpty()) // ref to citation
{
m_text = cite->text;
- if (m_text.isEmpty()) m_text = cite->label;
m_ref = cite->ref;
m_anchor = CiteConsts::anchorPrefix+cite->label;
m_file = convertNameToFile(CiteConsts::fileName,FALSE,TRUE);
@@ -2476,9 +2475,9 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
// m_text.data(),m_ref.data(),m_file.data(),m_anchor.data());
return;
}
- m_text = linkToText(SrcLangExt_Unknown,target,FALSE);
+ m_text = target;
warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\cite command",
- qPrint(target));
+ qPrint(target));
}
//---------------------------------------------------------------------------
@@ -2908,6 +2907,7 @@ void DocVhdlFlow::parse()
DBG(("DocVhdlFlow::parse() end\n"));
DocNode *n=g_nodeStack.pop();
ASSERT(n==this);
+ VhdlDocGen::createFlowChart(g_memberDef);
}
@@ -5568,6 +5568,23 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStatePara();
}
break;
+ case CMD_STARTUML:
+ {
+ static QCString jarPath = Config_getString("PLANTUML_JAR_PATH");
+ doctokenizerYYsetStatePlantUML();
+ retval = doctokenizerYYlex();
+ if (jarPath.isEmpty())
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"ignoring startuml command because PLANTUML_JAR_PATH is not set");
+ }
+ else
+ {
+ m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::PlantUML,FALSE,g_token->sectionId));
+ }
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"startuml section ended without end marker");
+ doctokenizerYYsetStatePara();
+ }
+ break;
case CMD_ENDPARBLOCK:
retval=RetVal_EndParBlock;
break;
@@ -5582,6 +5599,7 @@ int DocPara::handleCommand(const QCString &cmdName)
case CMD_ENDVERBATIM:
case CMD_ENDDOT:
case CMD_ENDMSC:
+ case CMD_ENDUML:
warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
break;
case CMD_PARAM:
diff --git a/src/docparser.h b/src/docparser.h
index 17f296b..3dc3d84 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -433,7 +433,7 @@ class DocWhiteSpace : public DocNode
class DocVerbatim : public DocNode
{
public:
- enum Type { Code, HtmlOnly, ManOnly, LatexOnly, RtfOnly, XmlOnly, Verbatim, Dot, Msc, DocbookOnly };
+ enum Type { Code, HtmlOnly, ManOnly, LatexOnly, RtfOnly, XmlOnly, Verbatim, Dot, Msc, DocbookOnly, PlantUML };
DocVerbatim(DocNode *parent,const QCString &context,
const QCString &text, Type t,bool isExample,
const QCString &exampleFile,bool isBlock=FALSE,const QCString &lang=QCString());
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index 1db764e..c95230b 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -160,5 +160,6 @@ void doctokenizerYYpushBackHtmlTag(const char *tag);
void doctokenizerYYsetStateSnippet();
void doctokenizerYYstartAutoList();
void doctokenizerYYendAutoList();
+void doctokenizerYYsetStatePlantUML();
#endif
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 3bd2058..ea4a1a4 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -417,6 +417,8 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
%x St_Verbatim
%x St_Dot
%x St_Msc
+%x St_PlantUMLOpt
+%x St_PlantUML
%x St_Param
%x St_XRefItem
%x St_XRefItem2
@@ -843,7 +845,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
<St_Dot>. { /* dot text */
g_token->verb+=yytext;
}
-<St_Msc>{CMD}("endmsc"|"endvhdlflow") {
+<St_Msc>{CMD}("endmsc") {
return RetVal_OK;
}
<St_Msc>[^\\@\n]+ |
@@ -851,6 +853,23 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
<St_Msc>. { /* msc text */
g_token->verb+=yytext;
}
+<St_PlantUMLOpt>\n {
+ g_token->sectionId=g_token->sectionId.stripWhiteSpace();
+ BEGIN(St_PlantUML);
+ }
+<St_PlantUMLOpt>["{}] { // skip curly brackets or quotes around the optional image name
+ }
+<St_PlantUMLOpt>. {
+ g_token->sectionId += yytext;
+ }
+<St_PlantUML>{CMD}"enduml" {
+ return RetVal_OK;
+ }
+<St_PlantUML>[^\\@\n]+ |
+<St_PlantUML>\n |
+<St_PlantUML>. { /* plantuml text */
+ g_token->verb+=yytext;
+ }
<St_Title>"\"" { // quoted title
BEGIN(St_TitleQ);
}
@@ -1121,6 +1140,10 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
g_endMarker="endmsc";
BEGIN(St_SecSkip);
}
+<St_Sections>{CMD}"startuml"/[^a-z_A-Z0-9] {
+ g_endMarker="enduml";
+ BEGIN(St_SecSkip);
+ }
<St_Sections>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
g_endMarker="endhtmlonly";
BEGIN(St_SecSkip);
@@ -1318,6 +1341,13 @@ void doctokenizerYYsetStateMsc()
BEGIN(St_Msc);
}
+void doctokenizerYYsetStatePlantUML()
+{
+ g_token->verb="";
+ g_token->sectionId="";
+ BEGIN(St_PlantUMLOpt);
+}
+
void doctokenizerYYsetStateParam()
{
BEGIN(St_Param);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index bc080a2..533e6ef 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"
@@ -98,6 +98,7 @@
#include "formula.h"
#include "settings.h"
#include "context.h"
+#include "fileparser.h"
#define RECURSE_ENTRYTREE(func,var) \
do { if (var->children()) { \
@@ -1256,7 +1257,7 @@ static void addClassToContext(EntryNav *rootNav)
Debug::print(Debug::Classes,0, " Found class with name %s (qualifiedName=%s -> cd=%p)\n",
cd ? cd->name().data() : root->name.data(), qualifiedName.data(),cd);
- if (cd)
+ if (cd)
{
fullName=cd->name();
Debug::print(Debug::Classes,0," Existing class %s!\n",cd->name().data());
@@ -1276,11 +1277,12 @@ static void addClassToContext(EntryNav *rootNav)
}
//cd->setName(fullName); // change name to match docs
- if (cd->templateArguments()==0)
+ if (cd->templateArguments()==0 || (cd->isForwardDeclared() && (root->spec&Entry::ForwardDecl)==0))
{
// this happens if a template class declared with @class is found
- // before the actual definition.
- ArgumentList *tArgList =
+ // before the actual definition or if a forward declaration has different template
+ // parameter names.
+ ArgumentList *tArgList =
getTemplateArgumentsFromName(cd->name(),root->tArgLists);
cd->setTemplateArguments(tArgList);
}
@@ -1345,11 +1347,12 @@ static void addClassToContext(EntryNav *rootNav)
cd->insertUsedFile(fd);
// add class to the list
- //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
+ //printf("ClassDict.insert(%s)\n",fullName.data());
Doxygen::classSDict->append(fullName,cd);
if (cd->isGeneric()) // generics are also stored in a separate dictionary for fast lookup of instantions
{
+ //printf("inserting generic '%s' cd=%p\n",fullName.data(),cd);
Doxygen::genericsDict->insert(fullName,cd);
}
}
@@ -4111,7 +4114,9 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co
{
result = getClass(name);
}
- if (result==0 && cd && cd->getLanguage()==SrcLangExt_CSharp && name.find('<')!=-1)
+ if (result==0 && cd &&
+ (cd->getLanguage()==SrcLangExt_CSharp || cd->getLanguage()==SrcLangExt_Java) &&
+ name.find('<')!=-1)
{
result = Doxygen::genericsDict->find(name);
}
@@ -4636,34 +4641,32 @@ static bool findClassRelation(
int i=baseClassName.find('<');
int si=baseClassName.findRev("::",i==-1 ? baseClassName.length() : i);
if (si==-1) si=0;
+ if (baseClass==0 && (root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java))
+ {
+ baseClass = Doxygen::genericsDict->find(baseClassName);
+ //printf("looking for '%s' result=%p\n",baseClassName.data(),baseClass);
+ }
if (baseClass==0 && i!=-1)
// base class has template specifiers
{
- if (root->lang == SrcLangExt_CSharp)
+ // TODO: here we should try to find the correct template specialization
+ // but for now, we only look for the unspecializated base class.
+ int e=findEndOfTemplate(baseClassName,i+1);
+ //printf("baseClass==0 i=%d e=%d\n",i,e);
+ if (e!=-1) // end of template was found at e
{
- baseClass = Doxygen::genericsDict->find(baseClassName);
- }
- else
- {
- // TODO: here we should try to find the correct template specialization
- // but for now, we only look for the unspecializated base class.
- int e=findEndOfTemplate(baseClassName,i+1);
- //printf("baseClass==0 i=%d e=%d\n",i,e);
- if (e!=-1) // end of template was found at e
- {
- templSpec=removeRedundantWhiteSpace(baseClassName.mid(i,e-i));
- baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e);
- baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context,
- cd->getFileDef(),
- baseClassName,
- &baseClassTypeDef,
- 0, //&templSpec,
- mode==Undocumented,
- TRUE
- );
- //printf("baseClass=%p -> baseClass=%s templSpec=%s\n",
- // baseClass,baseClassName.data(),templSpec.data());
- }
+ templSpec=removeRedundantWhiteSpace(baseClassName.mid(i,e-i));
+ baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e);
+ baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context,
+ cd->getFileDef(),
+ baseClassName,
+ &baseClassTypeDef,
+ 0, //&templSpec,
+ mode==Undocumented,
+ TRUE
+ );
+ //printf("baseClass=%p -> baseClass=%s templSpec=%s\n",
+ // baseClass,baseClassName.data(),templSpec.data());
}
}
else if (baseClass && !templSpec.isEmpty()) // we have a known class, but also
@@ -6153,7 +6156,8 @@ static void findMember(EntryNav *rootNav,
{
QCString memType = md->typeString();
memType.stripPrefix("static "); // see bug700696
- funcType=substitute(funcType,className+"::",""); // see bug700693
+ funcType=substitute(stripTemplateSpecifiersFromScope(funcType,TRUE),
+ className+"::",""); // see bug700693 & bug732594
Debug::print(Debug::FindMembers,0,
"5b. Comparing return types '%s'<->'%s' #args %d<->%d\n",
md->typeString(),funcType.data(),
@@ -8624,15 +8628,16 @@ static void buildPageList(EntryNav *rootNav)
RECURSE_ENTRYTREE(buildPageList,rootNav);
}
+// search for the main page defined in this project
static void findMainPage(EntryNav *rootNav)
{
if (rootNav->section() == Entry::MAINPAGEDOC_SEC)
{
rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
- if (Doxygen::mainPage==0)
+ if (Doxygen::mainPage==0 && rootNav->tagInfo()==0)
{
+ Entry *root = rootNav->entry();
//printf("Found main page! \n======\n%s\n=======\n",root->doc.data());
QCString title=root->args.stripWhiteSpace();
//QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
@@ -8644,17 +8649,17 @@ static void findMainPage(EntryNav *rootNav)
Doxygen::mainPage->setFileName(indexName,TRUE);
Doxygen::mainPage->setShowToc(root->stat);
addPageToContext(Doxygen::mainPage,rootNav);
-
+
SectionInfo *si = Doxygen::sectionDict->find(Doxygen::mainPage->name());
if (si)
{
if (si->lineNr != -1)
{
- warn(root->fileName,root->startLine,"multiple use of section label '%s', (first occurrence: %s, line %d)",Doxygen::mainPage->name().data(),si->fileName.data(),si->lineNr);
+ warn(root->fileName,root->startLine,"multiple use of section label '%s' for main page, (first occurrence: %s, line %d)",Doxygen::mainPage->name().data(),si->fileName.data(),si->lineNr);
}
else
{
- warn(root->fileName,root->startLine,"multiple use of section label '%s', (first occurrence: %s)",Doxygen::mainPage->name().data(),si->fileName.data());
+ warn(root->fileName,root->startLine,"multiple use of section label '%s' for main page, (first occurrence: %s)",Doxygen::mainPage->name().data(),si->fileName.data());
}
}
else
@@ -8670,11 +8675,12 @@ static void findMainPage(EntryNav *rootNav)
Doxygen::mainPage->addSectionsToDefinition(root->anchors);
}
}
- else
+ else if (rootNav->tagInfo()==0)
{
+ Entry *root = rootNav->entry();
warn(root->fileName,root->startLine,
- "found more than one \\mainpage comment block! Skipping this "
- "block."
+ "found more than one \\mainpage comment block! Skipping this "
+ "block."
);
}
@@ -8683,6 +8689,22 @@ static void findMainPage(EntryNav *rootNav)
RECURSE_ENTRYTREE(findMainPage,rootNav);
}
+// search for the main page imported via tag files and add only the section labels
+static void findMainPageTagFiles(EntryNav *rootNav)
+{
+ if (rootNav->section() == Entry::MAINPAGEDOC_SEC)
+ {
+ rootNav->loadEntry(g_storage);
+
+ if (Doxygen::mainPage && rootNav->tagInfo())
+ {
+ Entry *root = rootNav->entry();
+ Doxygen::mainPage->addSectionsToDefinition(root->anchors);
+ }
+ }
+ RECURSE_ENTRYTREE(findMainPageTagFiles,rootNav);
+}
+
static void computePageRelations(EntryNav *rootNav)
{
if ((rootNav->section()==Entry::PAGEDOC_SEC ||
@@ -9148,22 +9170,24 @@ static void copyStyleSheet()
copyFile(htmlStyleSheet,destFileName);
}
}
- QCString &htmlExtraStyleSheet = Config_getString("HTML_EXTRA_STYLESHEET");
- if (!htmlExtraStyleSheet.isEmpty())
+ QStrList htmlExtraStyleSheet = Config_getList("HTML_EXTRA_STYLESHEET");
+ for (uint i=0; i<htmlExtraStyleSheet.count(); ++i)
{
- QFileInfo fi(htmlExtraStyleSheet);
- if (!fi.exists())
- {
- err("Style sheet '%s' specified by HTML_EXTRA_STYLESHEET does not exist!\n",htmlExtraStyleSheet.data());
- htmlExtraStyleSheet.resize(0); // revert to the default
- }
- else
+ QCString fileName(htmlExtraStyleSheet.at(i));
+ if (!fileName.isEmpty())
{
- QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
- copyFile(htmlExtraStyleSheet,destFileName);
+ QFileInfo fi(fileName);
+ if (!fi.exists())
+ {
+ err("Style sheet '%s' specified by HTML_EXTRA_STYLESHEET does not exist!\n",fileName.data());
+ }
+ else
+ {
+ QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
+ copyFile(fileName, destFileName);
+ }
}
}
-
}
static void copyLogo()
@@ -9894,7 +9918,8 @@ void initDoxygen()
initPreprocessor();
Doxygen::parserManager = new ParserManager;
- Doxygen::parserManager->registerParser("c", new CLanguageScanner, TRUE);
+ Doxygen::parserManager->registerDefaultParser( new FileParser);
+ Doxygen::parserManager->registerParser("c", new CLanguageScanner);
Doxygen::parserManager->registerParser("python", new PythonLanguageScanner);
Doxygen::parserManager->registerParser("fortran", new FortranLanguageScanner);
Doxygen::parserManager->registerParser("fortranfree", new FortranLanguageScannerFree);
@@ -11076,6 +11101,7 @@ void parseInput()
g_s.begin("Search for main page...\n");
findMainPage(rootNav);
+ findMainPageTagFiles(rootNav);
g_s.end();
g_s.begin("Computing page relations...\n");
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/doxygen.sty b/src/doxygen.sty
index 072104b..c423e12 100644
--- a/src/doxygen.sty
+++ b/src/doxygen.sty
@@ -434,6 +434,16 @@
}%
{\end{xtabular*}\par}%
+% Used by nested tables
+\newenvironment{TabularNC}[1]%
+{%
+\setlength{\tmplength}%
+ {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}%
+ \par\begin{tabular*}{\linewidth}%
+ {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}%
+}%
+{\end{tabular*}\par}%
+
% Used for member group headers
\newenvironment{Indent}{%
\begin{list}{}{%
diff --git a/src/entry.h b/src/entry.h
index 3e5f3d7..2cc2827 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -133,6 +133,7 @@ class Entry
static const uint64 Enum = (1ULL<<12); // for Java-style enums
static const uint64 Service = (1ULL<<13); // UNO IDL
static const uint64 Singleton = (1ULL<<14); // UNO IDL
+ static const uint64 ForwardDecl = (1ULL<<14); // forward declarad template classes
// member specifiers (add new items to the beginning)
static const uint64 PrivateGettable = (1ULL<<20); // C# private getter
diff --git a/src/fileparser.cpp b/src/fileparser.cpp
new file mode 100644
index 0000000..1d78e1e
--- /dev/null
+++ b/src/fileparser.cpp
@@ -0,0 +1,51 @@
+/******************************************************************************
+ *
+ * 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.
+ *
+ */
+
+#include "fileparser.h"
+#include "outputgen.h"
+
+void FileParser::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
+ )
+{
+ int lineNr = startLine!=-1 ? startLine : 1;
+ int length = input.length();
+ int i=0;
+ while (i<length && (endLine==-1 || lineNr<=endLine))
+ {
+ int j=i;
+ while (j<length && input[j]!='\n') j++;
+ QCString lineStr = input.mid(i,j-i);
+ codeOutIntf.startCodeLine(showLineNumbers);
+ if (showLineNumbers) codeOutIntf.writeLineNumber(0,0,0,lineNr);
+ if (!lineStr.isEmpty()) codeOutIntf.codify(lineStr);
+ codeOutIntf.endCodeLine();
+ lineNr++;
+ i=j+1;
+ }
+}
+
diff --git a/src/vhdlscanner.h b/src/fileparser.h
index 9c98087..f9a7c7b 100644
--- a/src/vhdlscanner.h
+++ b/src/fileparser.h
@@ -1,7 +1,5 @@
/******************************************************************************
*
- *
- *
* Copyright (C) 1997-2014 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
@@ -15,47 +13,20 @@
*
*/
-#ifndef VHDLSCANNER_H
-#define VHDLSCANNER_H
+#ifndef FILEPARSER_H
+#define FILEPARSER_H
#include "parserintf.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <qarray.h>
-#include <unistd.h>
-#include <qfile.h>
-#include <qdict.h>
-
-#include "entry.h"
-#include "memberlist.h"
-
-class Entry;
-class ClassSDict;
-class FileStorage;
-class ClassDef;
-class MemberDef;
-class QStringList;
-
-/** \brief VHDL parser using state-based lexical scanning.
- *
- * This is the VHDL language parser for doxygen.
- */
-class VHDLLanguageScanner : public ParserInterface
+/** @brief General file parser */
+class FileParser : public ParserInterface
{
public:
- virtual ~VHDLLanguageScanner() {}
+ virtual ~FileParser() {}
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 parseInput(const char *, const char *,Entry *, bool, QStrList &) {}
+ bool needsPreprocessing(const QCString &) { return FALSE; }
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
const QCString &input,
@@ -71,12 +42,9 @@ class VHDLLanguageScanner : public ParserInterface
Definition *searchCtx=0,
bool collectXRefs=TRUE
);
- void resetCodeParserState();
- void parsePrototype(const char *text);
+ void resetCodeParserState() {}
+ void parsePrototype(const char *) {}
};
-void vhdlscanFreeScanner();
-
-//---------------------------------------------------------------------------------
#endif
diff --git a/src/fortrancode.l b/src/fortrancode.l
index e6cfdde..03baeed 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -1128,6 +1128,8 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
}
YY_FTN_RESET
}
+<*>^{BS}"type"{BS}"=" { g_code->codify(yytext); }
+
<*>. {
g_code->codify(yytext);
}
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 449b05d..64a49ca 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -739,6 +739,7 @@ private {
{ID} {
}
^{BS}"type"{BS_}"is"/{BS_} { }
+^{BS}"type"{BS}"=" { }
}
<AttributeList>{
{COMMA} {}
@@ -2186,7 +2187,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
}
else
{
- warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
+ warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
@@ -2201,7 +2202,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
}
else
{
- warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
+ warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
@@ -2216,7 +2217,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
}
else
{
- warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
+ warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 85bfb8f..f1d1877 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -71,6 +71,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
visited = 0;
groupScope = 0;
+ m_subGrouping=Config_getBool("SUBGROUPING");
}
GroupDef::~GroupDef()
@@ -1512,3 +1513,9 @@ void GroupDef::updateLanguage(const Definition *d)
}
}
+bool GroupDef::hasDetailedDescription() const
+{
+ static bool repeatBrief = Config_getBool("REPEAT_BRIEF");
+ return ((!briefDescription().isEmpty() && repeatBrief) ||
+ !documentation().isEmpty());
+}
diff --git a/src/groupdef.h b/src/groupdef.h
index 481bece..bc956da 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -79,6 +79,7 @@ class GroupDef : public Definition
void addListReferences();
void sortMemberLists();
+ bool subGrouping() const { return m_subGrouping; }
bool visited; // number of times accessed for output - KPW
@@ -101,6 +102,7 @@ class GroupDef : public Definition
PageSDict * getPages() const { return pageDict; }
DirList * getDirs() const { return dirList; }
PageSDict * getExamples() const { return exampleDict; }
+ bool hasDetailedDescription() const;
//MemberList* getMembers() const { return allMemberList; }
void sortSubGroups();
@@ -150,6 +152,7 @@ class GroupDef : public Definition
QList<MemberList> m_memberLists;
MemberGroupSDict *memberGroupSDict;
+ bool m_subGrouping;
};
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 372bb93..e319a1f 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -34,6 +34,7 @@
#include "filedef.h"
#include "memberdef.h"
#include "htmlentity.h"
+#include "plantuml.h"
static const int NUM_HTML_LIST_TYPES = 4;
static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"};
@@ -429,9 +430,21 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
m_t << "<div align=\"center\">" << endl;
writeMscFile(baseName+".msc",s->relPath(),s->context());
if (Config_getBool("DOT_CLEANUP")) file.remove();
+ m_t << "</div>" << endl;
+ forceStartParagraph(s);
+ }
+ break;
+ case DocVerbatim::PlantUML:
+ {
+ forceEndParagraph(s);
+
+ static QCString htmlOutput = Config_getString("HTML_OUTPUT");
+ QCString baseName = writePlantUMLSource(htmlOutput,s->exampleFile(),s->text());
+ m_t << "<div align=\"center\">" << endl;
+ writePlantUMLFile(baseName,s->relPath(),s->context());
+ m_t << "</div>" << endl;
+ forceStartParagraph(s);
}
- m_t << "</div>" << endl;
- forceStartParagraph(s);
break;
}
}
@@ -1773,14 +1786,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 << "<p>";
+ m_t << "flowchart: " ; // TODO: translate me
+ m_t << "<a href=\"";
+ m_t << fname.data();
+ m_t << ".svg\">";
+ m_t << VhdlDocGen::getFlowMember()->name().data();
+ m_t << "</a>";
+ if (vf->hasCaption())
+ {
+ m_t << "<br />";
+ }
+ }
}
-void HtmlDocVisitor::visitPost(DocVhdlFlow *)
+void HtmlDocVisitor::visitPost(DocVhdlFlow *vf)
{
if (m_hide) return;
+ if (VhdlDocGen::getFlowMember()) // use VHDL flow chart creator
+ {
+ m_t << "</p>";
+ forceStartParagraph(vf);
+ }
}
void HtmlDocVisitor::visitPre(DocParBlock *)
@@ -1955,6 +1989,37 @@ void HtmlDocVisitor::writeDiaFile(const QCString &fileName,
m_t << "<img src=\"" << relPath << baseName << ".png" << "\" />" << endl;
}
+void HtmlDocVisitor::writePlantUMLFile(const QCString &fileName,
+ const QCString &relPath,
+ const QCString &)
+{
+ QCString baseName=fileName;
+ int i;
+ if ((i=baseName.findRev('/'))!=-1) // strip path
+ {
+ baseName=baseName.right(baseName.length()-i-1);
+ }
+ if ((i=baseName.findRev('.'))!=-1) // strip extension
+ {
+ baseName=baseName.left(i);
+ }
+ static QCString outDir = Config_getString("HTML_OUTPUT");
+ static QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
+ if (imgExt=="svg")
+ {
+ generatePlantUMLOutput(fileName,outDir,PUML_SVG);
+ //m_t << "<iframe scrolling=\"no\" frameborder=\"0\" src=\"" << relPath << baseName << ".svg" << "\" />" << endl;
+ //m_t << "<p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p>";
+ //m_t << "</iframe>" << endl;
+ m_t << "<object type=\"image/svg+xml\" data=\"" << relPath << baseName << ".svg\"></object>" << endl;
+ }
+ else
+ {
+ generatePlantUMLOutput(fileName,outDir,PUML_BITMAP);
+ m_t << "<img src=\"" << relPath << baseName << ".png" << "\" />" << endl;
+ }
+}
+
/** Used for items found inside a paragraph, which due to XHTML restrictions
* have to be outside of the paragraph. This method will forcefully end
* the current paragraph and forceStartParagraph() will restart it.
diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h
index ddefecd..00ae09e 100644
--- a/src/htmldocvisitor.h
+++ b/src/htmldocvisitor.h
@@ -153,6 +153,7 @@ class HtmlDocVisitor : public DocVisitor
void writeDotFile(const QCString &fileName,const QCString &relPath,const QCString &context);
void writeMscFile(const QCString &fileName,const QCString &relPath,const QCString &context);
void writeDiaFile(const QCString &fileName,const QCString &relPath,const QCString &context);
+ void writePlantUMLFile(const QCString &fileName,const QCString &relPath,const QCString &context);
void pushEnabled();
void popEnabled();
diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp
index c49491e..216b65c 100644
--- a/src/htmlentity.cpp
+++ b/src/htmlentity.cpp
@@ -462,7 +462,7 @@ const DocSymbol::PerlSymb *HtmlEntityMapper::perl(DocSymbol::SymType symb) const
/*!
* @brief Give code of the requested HTML entity name
- * @param symName HTML entity name without \c & and \c;
+ * @param symName HTML entity name without \c & and \c ;
* @return the code for the requested HTML entity name,
* in case the requested HTML item does not exist `DocSymbol::Sym_unknown` is returned.
*/
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 27091b4..62ae1c7 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -1061,7 +1061,7 @@ static QCString substituteHtmlKeywords(const QCString &s,
{
// Build CSS/Javascript tags depending on treeview, search engine settings
QCString cssFile;
- QCString extraCssFile;
+ QStrList extraCssFile;
QCString generatedBy;
QCString treeViewCssJs;
QCString searchCssJs;
@@ -1100,10 +1100,20 @@ static QCString substituteHtmlKeywords(const QCString &s,
cssFile = "doxygen.css";
}
}
- extraCssFile = Config_getString("HTML_EXTRA_STYLESHEET");
- if (!extraCssFile.isEmpty())
+
+ extraCssText = "";
+ extraCssFile = Config_getList("HTML_EXTRA_STYLESHEET");
+ for (uint i=0; i<extraCssFile.count(); ++i)
{
- extraCssText = "<link href=\"$relpath^"+stripPath(extraCssFile)+"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
+ QCString fileName(extraCssFile.at(i));
+ if (!fileName.isEmpty())
+ {
+ QFileInfo fi(fileName);
+ if (fi.exists())
+ {
+ extraCssText += "<link href=\"$relpath^"+stripPath(fileName)+"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
+ }
+ }
}
if (timeStamp)
@@ -1823,13 +1833,17 @@ void HtmlGenerator::writeStyleInfo(int part)
}
Doxygen::indexList->addStyleSheetFile(cssfi.fileName().utf8());
}
- static QCString extraCssFile = Config_getString("HTML_EXTRA_STYLESHEET");
- if (!extraCssFile.isEmpty())
+ static QStrList extraCssFile = Config_getList("HTML_EXTRA_STYLESHEET");
+ for (uint i=0; i<extraCssFile.count(); ++i)
{
- QFileInfo fi(extraCssFile);
- if (fi.exists())
+ QCString fileName(extraCssFile.at(i));
+ if (!fileName.isEmpty())
{
- Doxygen::indexList->addStyleSheetFile(fi.fileName().utf8());
+ QFileInfo fi(fileName);
+ if (fi.exists())
+ {
+ Doxygen::indexList->addStyleSheetFile(fi.fileName().utf8());
+ }
}
}
}
diff --git a/src/index.cpp b/src/index.cpp
index 4f83c6a..430f5af 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -2279,7 +2279,9 @@ void addClassMemberNameToIndex(MemberDef *md)
(QCString(md->typeString())=="friend class" ||
QCString(md->typeString())=="friend struct" ||
QCString(md->typeString())=="friend union");
- if (!(md->isFriend() && isFriendToHide))
+ if (!(md->isFriend() && isFriendToHide) &&
+ (!md->isEnumValue() || (md->getEnumScope() && !md->getEnumScope()->isStrong()))
+ )
{
g_memberIndexLetterUsed[CMHL_All].append(letter,md);
documentedClassMembers[CMHL_All]++;
@@ -2288,7 +2290,7 @@ void addClassMemberNameToIndex(MemberDef *md)
{
g_memberIndexLetterUsed[CMHL_Functions].append(letter,md);
documentedClassMembers[CMHL_Functions]++;
- }
+ }
else if (md->isVariable())
{
g_memberIndexLetterUsed[CMHL_Variables].append(letter,md);
@@ -2304,7 +2306,7 @@ void addClassMemberNameToIndex(MemberDef *md)
g_memberIndexLetterUsed[CMHL_Enums].append(letter,md);
documentedClassMembers[CMHL_Enums]++;
}
- else if (md->isEnumValue())
+ else if (md->isEnumValue() && md->getEnumScope() && !md->getEnumScope()->isStrong())
{
g_memberIndexLetterUsed[CMHL_EnumValues].append(letter,md);
documentedClassMembers[CMHL_EnumValues]++;
@@ -2349,10 +2351,13 @@ void addNamespaceMemberNameToIndex(MemberDef *md)
QCString n = md->name();
int index = getPrefixIndex(n);
uint letter = getUtf8CodeToLower(n,index);
- if (!n.isEmpty())
+ if (!n.isEmpty())
{
- g_namespaceIndexLetterUsed[NMHL_All].append(letter,md);
- documentedNamespaceMembers[NMHL_All]++;
+ if (!md->isEnumValue() || (md->getEnumScope() && !md->getEnumScope()->isStrong()))
+ {
+ g_namespaceIndexLetterUsed[NMHL_All].append(letter,md);
+ documentedNamespaceMembers[NMHL_All]++;
+ }
if (md->isFunction())
{
@@ -2374,7 +2379,7 @@ void addNamespaceMemberNameToIndex(MemberDef *md)
g_namespaceIndexLetterUsed[NMHL_Enums].append(letter,md);
documentedNamespaceMembers[NMHL_Enums]++;
}
- else if (md->isEnumValue())
+ else if (md->isEnumValue() && md->getEnumScope() && !md->getEnumScope()->isStrong())
{
g_namespaceIndexLetterUsed[NMHL_EnumValues].append(letter,md);
documentedNamespaceMembers[NMHL_EnumValues]++;
@@ -2405,8 +2410,11 @@ void addFileMemberNameToIndex(MemberDef *md)
uint letter = getUtf8CodeToLower(n,index);
if (!n.isEmpty())
{
- g_fileIndexLetterUsed[FMHL_All].append(letter,md);
- documentedFileMembers[FMHL_All]++;
+ if (!md->isEnumValue() || (md->getEnumScope() && !md->getEnumScope()->isStrong()))
+ {
+ g_fileIndexLetterUsed[FMHL_All].append(letter,md);
+ documentedFileMembers[FMHL_All]++;
+ }
if (md->isFunction())
{
@@ -2428,7 +2436,7 @@ void addFileMemberNameToIndex(MemberDef *md)
g_fileIndexLetterUsed[FMHL_Enums].append(letter,md);
documentedFileMembers[FMHL_Enums]++;
}
- else if (md->isEnumValue())
+ else if (md->isEnumValue() && md->getEnumScope() && !md->getEnumScope()->isStrong())
{
g_fileIndexLetterUsed[FMHL_EnumValues].append(letter,md);
documentedFileMembers[FMHL_EnumValues]++;
@@ -3071,16 +3079,6 @@ static void countRelatedPages(int &docPages,int &indexPages)
//----------------------------------------------------------------------------
-static bool mainPageHasTitle()
-{
- if (Doxygen::mainPage==0) return FALSE;
- if (Doxygen::mainPage->title().isEmpty()) return FALSE;
- if (Doxygen::mainPage->title().lower()=="notitle") return FALSE;
- return TRUE;
-}
-
-//----------------------------------------------------------------------------
-
static void writePages(PageDef *pd,FTVHelp *ftv)
{
//printf("writePages()=%s pd=%p mainpage=%p\n",pd->name().data(),pd,Doxygen::mainPage);
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 0edb459..af1a5fd 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -32,6 +32,7 @@
#include "filedef.h"
#include "config.h"
#include "htmlentity.h"
+#include "plantuml.h"
static QCString escapeLabelName(const char *s)
{
@@ -321,6 +322,16 @@ void LatexDocVisitor::visit(DocVerbatim *s)
if (Config_getBool("DOT_CLEANUP")) file.remove();
}
break;
+ case DocVerbatim::PlantUML:
+ {
+ QCString latexOutput = Config_getString("LATEX_OUTPUT");
+ QCString baseName = writePlantUMLSource(latexOutput,s->exampleFile(),s->text());
+
+ m_t << "\\begin{center}\n";
+ writePlantUMLFile(baseName);
+ m_t << "\\end{center}\n";
+ }
+ break;
}
}
@@ -809,21 +820,32 @@ void LatexDocVisitor::visitPost(DocHtmlDescData *)
{
}
+static const char *getTableName(const DocNode *n)
+{
+ bool isNested=FALSE;
+ while (n && !isNested)
+ {
+ isNested = n->kind()==DocNode::Kind_HtmlTable;
+ n = n->parent();
+ }
+ return isNested ? "TabularNC" : "TabularC";
+}
+
void LatexDocVisitor::visitPre(DocHtmlTable *t)
{
m_rowSpans.clear();
m_insideTable=TRUE;
if (m_hide) return;
- if (t->hasCaption())
+ if (t->hasCaption())
{
m_t << "\\begin{table}[h]";
}
- m_t << "\\begin{TabularC}{" << t->numColumns() << "}\n";
+ m_t << "\\begin{" << getTableName(t->parent()) << "}{" << t->numColumns() << "}\n";
m_numCols = t->numColumns();
m_t << "\\hline\n";
}
-void LatexDocVisitor::visitPost(DocHtmlTable *t)
+void LatexDocVisitor::visitPost(DocHtmlTable *t)
{
m_insideTable=FALSE;
if (m_hide) return;
@@ -833,14 +855,14 @@ void LatexDocVisitor::visitPost(DocHtmlTable *t)
}
else
{
- m_t << "\\end{TabularC}\n";
+ m_t << "\\end{" << getTableName(t->parent()) << "}\n";
}
}
-void LatexDocVisitor::visitPre(DocHtmlCaption *)
+void LatexDocVisitor::visitPre(DocHtmlCaption *c)
{
if (m_hide) return;
- m_t << "\\end{TabularC}\n\\centering\n\\caption{";
+ m_t << "\\end{" << getTableName(c->parent()) << "}\n\\centering\n\\caption{";
}
void LatexDocVisitor::visitPost(DocHtmlCaption *)
@@ -1732,6 +1754,7 @@ void LatexDocVisitor::writeMscFile(const QCString &baseName)
m_t << "\\end{DoxyImageNoCaption}\n";
}
+
void LatexDocVisitor::startDiaFile(const QCString &fileName,
const QCString &width,
const QCString &height,
@@ -1823,3 +1846,20 @@ void LatexDocVisitor::writeDiaFile(const QCString &baseName)
m_t << "\\end{DoxyImageNoCaption}\n";
}
+void LatexDocVisitor::writePlantUMLFile(const QCString &baseName)
+{
+ QCString shortName = baseName;
+ int i;
+ if ((i=shortName.findRev('/'))!=-1)
+ {
+ shortName=shortName.right(shortName.length()-i-1);
+ }
+ QCString outDir = Config_getString("LATEX_OUTPUT");
+ generatePlantUMLOutput(baseName,outDir,PUML_EPS);
+ m_t << "\n\\begin{DoxyImageNoCaption}"
+ " \\mbox{\\includegraphics";
+ m_t << "{" << shortName << "}";
+ m_t << "}\n"; // end mbox
+ m_t << "\\end{DoxyImageNoCaption}\n";
+}
+
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index d386569..64560b9 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -176,6 +176,7 @@ class LatexDocVisitor : public DocVisitor
const QCString &height, bool hasCaption);
void endDiaFile(bool hasCaption);
void writeDiaFile(const QCString &fileName);
+ void writePlantUMLFile(const QCString &fileName);
void pushEnabled();
void popEnabled();
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index e33b643..703b885 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -50,6 +50,7 @@ HEADERS = arguments.h \
example.h \
filedef.h \
filename.h \
+ fileparser.h \
formula.h \
ftextstream.h \
ftvhelp.h \
@@ -86,6 +87,7 @@ HEADERS = arguments.h \
pagedef.h \
perlmodgen.h \
lodepng.h \
+ plantuml.h \
pre.h \
printdocvisitor.h \
pycode.h \
@@ -115,11 +117,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 \
@@ -145,6 +148,7 @@ SOURCES = arguments.cpp \
entry.cpp \
filedef.cpp \
filename.cpp \
+ fileparser.cpp \
formula.cpp \
ftextstream.cpp \
ftvhelp.cpp \
@@ -162,6 +166,7 @@ SOURCES = arguments.cpp \
layout.cpp \
lodepng.cpp \
logos.cpp \
+ plantuml.cpp \
mandocvisitor.cpp \
mangen.cpp \
sqlite3gen.cpp \
@@ -198,10 +203,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 +220,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/mandocvisitor.cpp b/src/mandocvisitor.cpp
index 5403324..1fe5409 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -208,6 +208,7 @@ void ManDocVisitor::visit(DocVerbatim *s)
case DocVerbatim::DocbookOnly:
case DocVerbatim::Dot:
case DocVerbatim::Msc:
+ case DocVerbatim::PlantUML:
/* nothing */
break;
}
diff --git a/src/markdown.cpp b/src/markdown.cpp
index 291e1dc..cc86af4 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -208,6 +208,10 @@ static QCString isBlockCommand(const char *data,int offset,int size)
{
return "end"+blockName;
}
+ else if (blockName=="startuml")
+ {
+ return "enduml";
+ }
else if (blockName=="f" && end<size)
{
if (data[end]=='$')
@@ -1702,7 +1706,7 @@ void writeOneLineHeaderOrRuler(GrowBuf &out,const char *data,int size)
out.addStr(" ");
out.addStr(header);
out.addStr("\n");
- SectionInfo *si = Doxygen::sectionDict->find(header);
+ SectionInfo *si = Doxygen::sectionDict->find(id);
if (si)
{
if (si->lineNr != -1)
@@ -1721,7 +1725,7 @@ void writeOneLineHeaderOrRuler(GrowBuf &out,const char *data,int size)
{
g_current->anchors->append(si);
}
- Doxygen::sectionDict->append(header,si);
+ Doxygen::sectionDict->append(id,si);
}
}
else
@@ -2072,7 +2076,7 @@ static QCString processBlocks(const QCString &s,int indent)
out.addStr(" ");
out.addStr(header);
out.addStr("\n\n");
- SectionInfo *si = Doxygen::sectionDict->find(header);
+ SectionInfo *si = Doxygen::sectionDict->find(id);
if (si)
{
if (si->lineNr != -1)
@@ -2092,7 +2096,7 @@ static QCString processBlocks(const QCString &s,int indent)
{
g_current->anchors->append(si);
}
- Doxygen::sectionDict->append(header,si);
+ Doxygen::sectionDict->append(id,si);
}
}
else
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 1069b3b..a25528a 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"
@@ -1448,16 +1448,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (!detailsVisible)
{
QCString doxyArgs=argsString();
- if (m_impl->annMemb)
- {
- QCString doxyName=m_impl->annMemb->name();
- if (!cname.isEmpty())
- {
- doxyName.prepend(cdname+getLanguageSpecificSeparator(getLanguage()));
- }
- ol.startDoxyAnchor(cfname,cname,m_impl->annMemb->anchor(),doxyName,doxyArgs);
- }
- else
+ if (!m_impl->annMemb)
{
QCString doxyName=name();
if (!cname.isEmpty())
@@ -5080,4 +5071,28 @@ const ArgumentList *MemberDef::typeConstraints() const
return m_impl->typeConstraints;
}
+bool MemberDef::isFriendToHide() const
+{
+ static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS");
+ bool isFriendToHide = hideFriendCompounds &&
+ (m_impl->type=="friend class" ||
+ m_impl->type=="friend struct" ||
+ m_impl->type=="friend union");
+ return isFriendToHide;
+}
+
+bool MemberDef::isNotFriend() const
+{
+ return !(isFriend() && isFriendToHide());
+}
+
+bool MemberDef::isFunctionOrSignalSlot() const
+{
+ return isFunction() || isSlot() || isSignal();
+}
+
+bool MemberDef::isRelatedOrFriend() const
+{
+ return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
+}
diff --git a/src/memberdef.h b/src/memberdef.h
index b3c671f..4f6028a 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -177,6 +177,12 @@ class MemberDef : public Definition
bool showInCallGraph() const;
bool isStrongEnumValue() const;
+ // derived getters
+ bool isFriendToHide() const;
+ bool isNotFriend() const;
+ bool isFunctionOrSignalSlot() const;
+ bool isRelatedOrFriend() const;
+
// output info
bool isLinkableInProject() const;
bool isLinkable() const;
diff --git a/src/message.cpp b/src/message.cpp
index 8e4ecbd..11b4502 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -152,15 +152,15 @@ static void format_warn(const char *file,int line,const char *text)
static void do_warn(const char *tag, const char *file, int line, const char *prefix, const char *fmt, va_list args)
{
if (!Config_getBool(tag)) return; // warning type disabled
- char text[4096];
+ char text[40960];
int l=0;
if (prefix)
{
strcpy(text,prefix);
l=strlen(prefix);
}
- vsnprintf(text+l, 4096-l, fmt, args);
- text[4095]='\0';
+ vsnprintf(text+l, 40960-l, fmt, args);
+ text[40960-1]='\0';
format_warn(file,line,text);
}
diff --git a/src/namespacedef.h b/src/namespacedef.h
index 4613480..ceb3bd7 100644
--- a/src/namespacedef.h
+++ b/src/namespacedef.h
@@ -81,6 +81,8 @@ class NamespaceDef : public Definition
virtual Definition *findInnerCompound(const char *name);
void addInnerCompound(Definition *d);
void addListReferences();
+
+ bool subGrouping() const { return m_subGrouping; }
MemberList *getMemberList(MemberListType lt) const;
const QList<MemberList> &getMemberLists() const { return m_memberLists; }
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():"<null>");
if (og->isEnabled()) og->writeDoc(root,ctx,md);
}
+ VhdlDocGen::setFlowMember(0);
}
bool OutputList::parseText(const QCString &textStr)
diff --git a/src/parserintf.h b/src/parserintf.h
index c389597..019b4a9 100644
--- a/src/parserintf.h
+++ b/src/parserintf.h
@@ -148,17 +148,19 @@ class ParserManager
ParserManager()
: m_defaultParser(0) { m_parsers.setAutoDelete(TRUE); }
+ void registerDefaultParser(ParserInterface *parser)
+ {
+ m_defaultParser = parser;
+ }
+
/** Registers an additional parser.
* @param[in] name A symbolic name of the parser, i.e. "c",
* "python", "fortran", "vhdl", ...
* @param[in] parser The parser that is to be used for the
* given name.
- * @param[in] defParser Use this parser as the default parser, used
- * for unregistered file extensions.
*/
- void registerParser(const char *name,ParserInterface *parser,bool defParser=FALSE)
+ void registerParser(const char *name,ParserInterface *parser)
{
- if (defParser && m_defaultParser==0) m_defaultParser=parser;
m_parsers.insert(name,parser);
}
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index 948836b..c636cdf 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -662,8 +662,9 @@ void PerlModDocVisitor::visit(DocVerbatim *s)
case DocVerbatim::LatexOnly: type = "latexonly"; break;
case DocVerbatim::XmlOnly: type = "xmlonly"; break;
case DocVerbatim::DocbookOnly: type = "docbookonly"; break;
- case DocVerbatim::Dot: type = "dot"; break;
+ case DocVerbatim::Dot: type = "dot"; break;
case DocVerbatim::Msc: type = "msc"; break;
+ case DocVerbatim::PlantUML: type = "plantuml"; break;
}
openItem(type);
m_output.addFieldQuotedString("content", s->text());
diff --git a/src/plantuml.cpp b/src/plantuml.cpp
new file mode 100644
index 0000000..18f028b
--- /dev/null
+++ b/src/plantuml.cpp
@@ -0,0 +1,97 @@
+/******************************************************************************
+ *
+ * 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.
+ *
+ */
+
+#include "plantuml.h"
+#include "portable.h"
+#include "config.h"
+#include "message.h"
+
+#include <qdir.h>
+
+//static const int maxCmdLine = 40960;
+
+QCString writePlantUMLSource(const QCString &outDir,const QCString &fileName,const QCString &content)
+{
+ QCString baseName(4096);
+ static int umlindex=1;
+
+ if (fileName.isEmpty()) // generate name
+ {
+ baseName = outDir+"/inline_umlgraph_"+QCString().setNum(umlindex++);
+ }
+ else // user specified name
+ {
+ baseName = fileName;
+ int i=baseName.findRev('.');
+ if (i!=-1) baseName = baseName.left(i);
+ baseName.prepend(outDir+"/");
+ }
+ QFile file(baseName+".pu");
+ if (!file.open(IO_WriteOnly))
+ {
+ err("Could not open file %s for writing\n",baseName.data());
+ }
+ QCString text = "@startuml\n";
+ text+=content;
+ text+="@enduml\n";
+ file.writeBlock( text, text.length() );
+ file.close();
+ return baseName;
+}
+
+void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutputFormat format)
+{
+ static QCString plantumlJarPath = Config_getString("PLANTUML_JAR_PATH");
+
+ QCString pumlExe = "java";
+ QCString pumlArgs = "-Djava.awt.headless=true -jar \""+plantumlJarPath+"plantuml.jar\" ";
+ pumlArgs+="-o \"";
+ pumlArgs+=outDir;
+ pumlArgs+="\" ";
+ QCString extension;
+ switch (format)
+ {
+ case PUML_BITMAP:
+ pumlArgs+="-tpng";
+ extension=".png";
+ break;
+ case PUML_EPS:
+ pumlArgs+="-teps";
+ extension=".eps";
+ break;
+ case PUML_SVG:
+ pumlArgs+="-tsvg";
+ extension=".svg";
+ break;
+ }
+ pumlArgs+=" \"";
+ pumlArgs+=baseName;
+ pumlArgs+=".pu\" ";
+ int exitCode;
+ //printf("*** running: %s %s outDir:%s %s\n",pumlExe.data(),pumlArgs.data(),outDir,outFile);
+ msg("Running PlantUML on generated file %s.pu\n",baseName);
+ portable_sysTimerStart();
+ if ((exitCode=portable_system(pumlExe,pumlArgs,FALSE))!=0)
+ {
+ err("Problems running PlantUML. Verify that the command 'java -jar \"%splantuml.jar\" -h' works from the command line\n",
+ plantumlJarPath.data());
+ }
+ else if (Config_getBool("DOT_CLEANUP"))
+ {
+ QFile(QCString(baseName)+".pu").remove();
+ }
+ portable_sysTimerStop();
+}
+
diff --git a/src/plantuml.h b/src/plantuml.h
new file mode 100644
index 0000000..27626d1
--- /dev/null
+++ b/src/plantuml.h
@@ -0,0 +1,40 @@
+/******************************************************************************
+ *
+ * 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 PLANTUML_H
+#define PLANTUML_H
+
+class QCString;
+
+/** Plant UML output image formats */
+enum PlantUMLOutputFormat { PUML_BITMAP, PUML_EPS, PUML_SVG };
+
+/** Write a PlantUML compatible file.
+ * @param[in] outDir the output directory to write the file to.
+ * @param[in] fileName the name of the file. If empty a name will be chosen automatically.
+ * @param[in] content the contents of the PlantUML file.
+ * @returns The name of the generated file.
+ */
+QCString writePlantUMLSource(const QCString &outDir,const QCString &fileName,const QCString &content);
+
+/** Convert a PlantUML file to an image.
+ * @param[in] baseName the name of the generated file (as returned by writePlantUMLSource())
+ * @param[in] outDir the directory to write the resulting image into.
+ * @param[in] format the image format to generate.
+ */
+void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutputFormat format);
+
+#endif
+
diff --git a/src/portable_c.c b/src/portable_c.c
index fb83b45..944c996 100644
--- a/src/portable_c.c
+++ b/src/portable_c.c
@@ -1,4 +1,4 @@
-#if defined(__APPLE__) || defined(macintosh)
+#if (defined(__APPLE__) || defined(macintosh)) && !defined(DMG_BUILD)
// define this before including iconv.h to avoid a mapping of
// iconv_open and friends to libicon_open (done by mac ports),
// while the symbols without 'lib' are linked from /usr/lib/libiconv
diff --git a/src/pre.l b/src/pre.l
index f06cc98..c3eeb2a 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -3025,8 +3025,15 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
// gather the formal arguments in a dictionary
while (i<i_cbrace && (p=reId.match(ds,i,&l)))
{
- argDict.insert(ds.mid(p,l),new int(count++));
- i=p+l;
+ if (l>0) // see bug375037
+ {
+ argDict.insert(ds.mid(p,l),new int(count++));
+ i=p+l;
+ }
+ else
+ {
+ i++;
+ }
}
// strip definition part
QCString tmp=ds.right(ds.length()-i_equals-1);
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index ee2ae3f..1d384b1 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -134,6 +134,7 @@ class PrintDocVisitor : public DocVisitor
case DocVerbatim::DocbookOnly: printf("<docbookonly>"); break;
case DocVerbatim::Dot: printf("<dot>"); break;
case DocVerbatim::Msc: printf("<msc>"); break;
+ case DocVerbatim::PlantUML: printf("<plantuml>"); break;
}
printf("%s",s->text().data());
switch(s->type())
@@ -148,6 +149,7 @@ class PrintDocVisitor : public DocVisitor
case DocVerbatim::DocbookOnly: printf("</docbookonly>"); break;
case DocVerbatim::Dot: printf("</dot>"); break;
case DocVerbatim::Msc: printf("</msc>"); break;
+ case DocVerbatim::PlantUML: printf("</plantuml>"); break;
}
}
void visit(DocAnchor *a)
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 0d17208..5e27137 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -16,6 +16,8 @@
*
*/
+#include <qfileinfo.h>
+
#include "rtfdocvisitor.h"
#include "docparser.h"
#include "language.h"
@@ -26,13 +28,13 @@
#include "util.h"
#include "rtfstyle.h"
#include "message.h"
-#include <qfileinfo.h>
#include "parserintf.h"
#include "msc.h"
#include "dia.h"
#include "filedef.h"
#include "config.h"
#include "htmlentity.h"
+#include "plantuml.h"
//#define DBG_RTF(x) m_t << x
#define DBG_RTF(x) do {} while(0)
@@ -317,6 +319,16 @@ void RTFDocVisitor::visit(DocVerbatim *s)
if (Config_getBool("DOT_CLEANUP")) file.remove();
}
break;
+ case DocVerbatim::PlantUML:
+ {
+ static QCString rtfOutput = Config_getString("RTF_OUTPUT");
+ QCString baseName = writePlantUMLSource(rtfOutput,s->exampleFile(),s->text());
+
+ m_t << "\\par{\\qc "; // center picture
+ writePlantUMLFile(baseName);
+ m_t << "} ";
+ }
+ break;
}
m_lastIsPara=FALSE;
}
@@ -1704,3 +1716,23 @@ void RTFDocVisitor::writeDiaFile(const QCString &fileName)
m_lastIsPara=TRUE;
}
+void RTFDocVisitor::writePlantUMLFile(const QCString &fileName)
+{
+ QCString baseName=fileName;
+ int i;
+ if ((i=baseName.findRev('/'))!=-1)
+ {
+ baseName=baseName.right(baseName.length()-i-1);
+ }
+ QCString outDir = Config_getString("RTF_OUTPUT");
+ generatePlantUMLOutput(fileName,outDir,PUML_BITMAP);
+ if (!m_lastIsPara) m_t << "\\par" << endl;
+ m_t << "{" << endl;
+ m_t << rtf_Style_Reset;
+ m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
+ m_t << baseName << ".png";
+ m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
+ m_t << "}" << endl;
+ m_lastIsPara=TRUE;
+}
+
diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h
index efc9d21..c50802d 100644
--- a/src/rtfdocvisitor.h
+++ b/src/rtfdocvisitor.h
@@ -155,6 +155,7 @@ class RTFDocVisitor : public DocVisitor
void writeDotFile(const QCString &fileName);
void writeMscFile(const QCString &fileName);
void writeDiaFile(const QCString &fileName);
+ void writePlantUMLFile(const QCString &fileName);
//--------------------------------------
// state variables
diff --git a/src/scanner.l b/src/scanner.l
index 50e3b18..8370f13 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -2245,7 +2245,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
<FindMembers>"Q_OBJECT" { // Qt object macro
}
<FindMembers>"Q_PROPERTY" { // Qt property declaration
- current->protection = protection = Public ;
+ //current->protection = protection = Public ; // see bug734245
current->mtype = mtype = Property;
current->type.resize(0);
BEGIN(QtPropType);
@@ -3372,6 +3372,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
else
{
+ mtype = Method;
+ virt = Normal;
if (needNewCurrent)
{
current = new Entry ;
@@ -5300,6 +5302,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
{
prependScope();
}
+ current->spec|=Entry::ForwardDecl;
current_root->addSubEntry(current);
current = new Entry;
}
@@ -6125,6 +6128,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
else
{
mtype = Method;
+ virt = Normal;
unput(';');
BEGIN(FindMembers);
}
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 036e24f..23b8f13 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -1432,7 +1432,7 @@ void TagFileParser::buildLists(Entry *root)
for (pgit.toFirst();(tpi=pgit.current());++pgit)
{
Entry *pe = new Entry;
- pe->section = Entry::PAGEDOC_SEC;
+ pe->section = tpi->filename=="index" ? Entry::MAINPAGEDOC_SEC : Entry::PAGEDOC_SEC;
pe->name = tpi->name;
pe->args = tpi->title;
addDocAnchors(pe,tpi->docAnchors);
@@ -1440,7 +1440,6 @@ void TagFileParser::buildLists(Entry *root)
ti->tagName = m_tagName;
ti->fileName = tpi->filename;
pe->tagInfo = ti;
-
root->addSubEntry(pe);
}
}
diff --git a/src/template.cpp b/src/template.cpp
index 64d3523..ec8554b 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -1,3 +1,18 @@
+/******************************************************************************
+ *
+ * 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.
+ *
+ */
+
#include "template.h"
#include <stdio.h>
@@ -11,6 +26,8 @@
#include <qstack.h>
#include <qfile.h>
#include <qregexp.h>
+#include <qcstring.h>
+#include <qdir.h>
#include "sortdict.h"
#include "ftextstream.h"
@@ -346,6 +363,21 @@ TemplateVariant::Type TemplateVariant::type() const
return p->type;
}
+QCString TemplateVariant::typeAsString() const
+{
+ switch (p->type)
+ {
+ case None: return "none";
+ case Bool: return "bool";
+ case Integer: return "integer";
+ case String: return "string";
+ case Struct: return "struct";
+ case List: return "list";
+ case Function: return "function";
+ }
+ return "invalid";
+}
+
bool TemplateVariant::isValid() const
{
return p->type!=None;
@@ -671,7 +703,9 @@ class TemplateContextImpl : public TemplateContext
QCString outputDirectory() const { return m_outputDir; }
TemplateEscapeIntf *escapeIntf() const { return m_activeEscapeIntf; }
TemplateSpacelessIntf *spacelessIntf() const { return m_spacelessIntf; }
- void enableSpaceless(bool b) { m_spacelessEnabled=b; }
+ void enableSpaceless(bool b) { if (b && !m_spacelessEnabled) m_spacelessIntf->reset();
+ m_spacelessEnabled=b;
+ }
bool spacelessEnabled() const { return m_spacelessEnabled && m_spacelessIntf; }
void warn(const char *fileName,int line,const char *fmt,...) const;
@@ -737,13 +771,57 @@ class FilterAdd
//-----------------------------------------------------------------------------
+/** @brief The implementation of the "get" filter */
+class FilterGet
+{
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &arg)
+ {
+ if (v.isValid() && v.type()==TemplateVariant::Struct && arg.type()==TemplateVariant::String)
+ {
+ TemplateVariant result = v.toStruct()->get(arg.toString());
+ //printf("\nok[%s]=%d\n",arg.toString().data(),result.type());
+ return result;
+ }
+ else
+ {
+ //printf("\nnok[%s]\n",arg.toString().data());
+ return FALSE;
+ }
+ }
+};
+
+
+//-----------------------------------------------------------------------------
+
+/** @brief The implementation of the "append" filter */
+class FilterAppend
+{
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &arg)
+ {
+ if ((v.type()==TemplateVariant::String || v.type()==TemplateVariant::Integer) &&
+ arg.type()==TemplateVariant::String)
+ {
+ return TemplateVariant(v.toString() + arg.toString());
+ }
+ else
+ {
+ return v;
+ }
+ }
+};
+
+//-----------------------------------------------------------------------------
+
/** @brief The implementation of the "prepend" filter */
class FilterPrepend
{
public:
static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &arg)
{
- if (v.type()==TemplateVariant::String && arg.type()==TemplateVariant::String)
+ if ((v.type()==TemplateVariant::String || v.type()==TemplateVariant::Integer) &&
+ arg.type()==TemplateVariant::String)
{
return TemplateVariant(arg.toString() + v.toString());
}
@@ -806,6 +884,385 @@ class FilterDefault
//--------------------------------------------------------------------
+/** @brief The implementation of the "flatten" filter */
+class FilterFlatten
+{
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &)
+ {
+ if (!v.isValid() || v.type()!=TemplateVariant::List)
+ {
+ return v;
+ }
+ else
+ {
+ TemplateList *list = TemplateList::alloc();
+ flatten(v.toList(),list);
+ return TemplateVariant(list);
+ }
+ }
+
+ private:
+ static void flatten(TemplateListIntf *tree,TemplateList *list)
+ {
+ TemplateListIntf::ConstIterator *it = tree->createIterator();
+ TemplateVariant item;
+ for (it->toFirst();(it->current(item));it->toNext())
+ {
+ TemplateStructIntf *s = item.toStruct();
+ if (s)
+ {
+ list->append(item);
+ // if s has "children" then recurse into the children
+ TemplateVariant children = s->get("children");
+ if (children.isValid() && children.type()==TemplateVariant::List)
+ {
+ flatten(children.toList(),list);
+ }
+ }
+ else
+ {
+ list->append(item);
+ }
+ }
+ delete it;
+ }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "listsort" filter */
+class FilterListSort
+{
+ struct ListElem
+ {
+ ListElem(const QCString &k,const TemplateVariant &v) : key(k), value(v) {}
+ QCString key;
+ TemplateVariant value;
+ };
+ class SortList : public QList<ListElem>
+ {
+ public:
+ SortList() { setAutoDelete(TRUE); }
+ private:
+ int compareValues(const ListElem *item1,const ListElem *item2) const
+ {
+ return qstrcmp(item1->key,item2->key);
+ }
+ };
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &args)
+ {
+ if (v.type()==TemplateVariant::List && args.type()==TemplateVariant::String)
+ {
+ //printf("FilterListSort::apply: v=%s args=%s\n",v.toString().data(),args.toString().data());
+ TemplateListIntf::ConstIterator *it = v.toList()->createIterator();
+
+ TemplateVariant item;
+ TemplateList *result = TemplateList::alloc();
+
+ // create list of items based on v using the data in args as a sort key
+ SortList sortList;
+ for (it->toFirst();(it->current(item));it->toNext())
+ {
+ TemplateStructIntf *s = item.toStruct();
+ if (s)
+ {
+ QCString sortKey = determineSortKey(s,args.toString());
+ sortList.append(new ListElem(sortKey,item));
+ //printf("sortKey=%s\n",sortKey.data());
+ }
+ }
+ delete it;
+
+ // sort the list
+ sortList.sort();
+
+ // add sorted items to the result list
+ QListIterator<ListElem> sit(sortList);
+ ListElem *elem;
+ for (sit.toFirst();(elem=sit.current());++sit)
+ {
+ result->append(elem->value);
+ }
+ return result;
+ }
+ return v;
+ }
+
+ private:
+ static QCString determineSortKey(TemplateStructIntf *s,const QCString &arg)
+ {
+ int i,p=0;
+ QCString result;
+ while ((i=arg.find("{{",p))!=-1)
+ {
+ result+=arg.mid(p,i-p);
+ int j=arg.find("}}",i+2);
+ if (j!=-1)
+ {
+ QCString var = arg.mid(i+2,j-i-2);
+ TemplateVariant val=s->get(var);
+ //printf("found argument %s value=%s\n",var.data(),val.toString().data());
+ result+=val.toString();
+ p=j+2;
+ }
+ else
+ {
+ p=i+1;
+ }
+ }
+ result+=arg.right(arg.length()-p);
+ return result;
+ }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "groupBy" filter */
+class FilterGroupBy
+{
+ struct ListElem
+ {
+ ListElem(const QCString &k,const TemplateVariant &v) : key(k), value(v) {}
+ QCString key;
+ TemplateVariant value;
+ };
+ class SortList : public QList<ListElem>
+ {
+ public:
+ SortList() { setAutoDelete(TRUE); }
+ private:
+ int compareValues(const ListElem *item1,const ListElem *item2) const
+ {
+ return qstrcmp(item1->key,item2->key);
+ }
+ };
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &args)
+ {
+ if (v.type()==TemplateVariant::List && args.type()==TemplateVariant::String)
+ {
+ //printf("FilterListSort::apply: v=%s args=%s\n",v.toString().data(),args.toString().data());
+ TemplateListIntf::ConstIterator *it = v.toList()->createIterator();
+
+ TemplateVariant item;
+ TemplateList *result = TemplateList::alloc();
+
+ // create list of items based on v using the data in args as a sort key
+ SortList sortList;
+ for (it->toFirst();(it->current(item));it->toNext())
+ {
+ TemplateStructIntf *s = item.toStruct();
+ if (s)
+ {
+ QCString sortKey = determineSortKey(s,args.toString());
+ sortList.append(new ListElem(sortKey,item));
+ //printf("sortKey=%s\n",sortKey.data());
+ }
+ }
+ delete it;
+
+ // sort the list
+ sortList.sort();
+
+ // add sorted items to the result list
+ QListIterator<ListElem> sit(sortList);
+ ListElem *elem;
+ TemplateList *groupList=0;
+ QCString prevKey;
+ for (sit.toFirst();(elem=sit.current());++sit)
+ {
+ if (groupList==0 || elem->key!=prevKey)
+ {
+ groupList = TemplateList::alloc();
+ result->append(groupList);
+ prevKey = elem->key;
+ }
+ groupList->append(elem->value);
+ }
+ return result;
+ }
+ return v;
+ }
+
+ private:
+ static QCString determineSortKey(TemplateStructIntf *s,const QCString &attribName)
+ {
+ TemplateVariant v = s->get(attribName);
+ return v.toString();
+ }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "paginate" filter */
+class FilterPaginate
+{
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &args)
+ {
+ if (v.isValid() && v.type()==TemplateVariant::List &&
+ args.isValid() && args.type()==TemplateVariant::Integer)
+ {
+ int pageSize = args.toInt();
+ TemplateListIntf *list = v.toList();
+ TemplateList *result = TemplateList::alloc();
+ TemplateListIntf::ConstIterator *it = list->createIterator();
+ TemplateVariant item;
+ TemplateList *pageList=0;
+ int i = 0;
+ for (it->toFirst();(it->current(item));it->toNext())
+ {
+ if (pageList==0)
+ {
+ pageList = TemplateList::alloc();
+ result->append(pageList);
+ }
+ pageList->append(item);
+ i++;
+ if (i==pageSize) // page is full start a new one
+ {
+ pageList=0;
+ i=0;
+ }
+ }
+ delete it;
+ return result;
+ }
+ else // wrong arguments
+ {
+ return v;
+ }
+ }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "alphaIndex" filter */
+class FilterAlphaIndex
+{
+ private:
+ struct ListElem
+ {
+ ListElem(uint k,const TemplateVariant &v) : key(k), value(v) {}
+ uint key;
+ TemplateVariant value;
+ };
+ class SortList : public QList<ListElem>
+ {
+ public:
+ SortList() { setAutoDelete(TRUE); }
+ private:
+ int compareValues(const ListElem *item1,const ListElem *item2) const
+ {
+ return item1->key-item2->key;
+ }
+ };
+ static QCString keyToLetter(uint startLetter)
+ {
+ return QString(QChar(startLetter)).utf8();
+ }
+ static QCString keyToLabel(uint startLetter)
+ {
+ char s[10];
+ if (startLetter>0x20 && startLetter<=0x7f) // printable ASCII character
+ {
+ s[0]=tolower((char)startLetter);
+ s[1]=0;
+ }
+ else
+ {
+ const char hex[]="0123456789abcdef";
+ int i=0;
+ s[i++]='0';
+ s[i++]='x';
+ if (startLetter>(1<<24)) // 4 byte character
+ {
+ s[i++]=hex[(startLetter>>28)&0xf];
+ s[i++]=hex[(startLetter>>24)&0xf];
+ }
+ if (startLetter>(1<<16)) // 3 byte character
+ {
+ s[i++]=hex[(startLetter>>20)&0xf];
+ s[i++]=hex[(startLetter>>16)&0xf];
+ }
+ if (startLetter>(1<<8)) // 2 byte character
+ {
+ s[i++]=hex[(startLetter>>12)&0xf];
+ s[i++]=hex[(startLetter>>8)&0xf];
+ }
+ // one byte character
+ s[i++]=hex[(startLetter>>4)&0xf];
+ s[i++]=hex[(startLetter>>0)&0xf];
+ s[i++]=0;
+ }
+ return s;
+ }
+ static uint determineSortKey(TemplateStructIntf *s,const QCString &attribName)
+ {
+ TemplateVariant v = s->get(attribName);
+ int index = getPrefixIndex(v.toString());
+ return getUtf8CodeToUpper(v.toString(),index);
+ }
+
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &args)
+ {
+ if (v.type()==TemplateVariant::List && args.type()==TemplateVariant::String)
+ {
+ //printf("FilterListSort::apply: v=%s args=%s\n",v.toString().data(),args.toString().data());
+ TemplateListIntf::ConstIterator *it = v.toList()->createIterator();
+
+ TemplateVariant item;
+ TemplateList *result = TemplateList::alloc();
+
+ // create list of items based on v using the data in args as a sort key
+ SortList sortList;
+ for (it->toFirst();(it->current(item));it->toNext())
+ {
+ TemplateStructIntf *s = item.toStruct();
+ if (s)
+ {
+ uint sortKey = determineSortKey(s,args.toString());
+ sortList.append(new ListElem(sortKey,item));
+ //printf("sortKey=%s\n",sortKey.data());
+ }
+ }
+ delete it;
+
+ // sort the list
+ sortList.sort();
+
+ // create an index from the sorted list
+ uint letter=0;
+ QListIterator<ListElem> sit(sortList);
+ ListElem *elem;
+ TemplateStruct *indexNode = 0;
+ TemplateList *indexList = 0;
+ for (sit.toFirst();(elem=sit.current());++sit)
+ {
+ if (letter!=elem->key || indexNode==0)
+ {
+ // create new indexNode
+ indexNode = TemplateStruct::alloc();
+ indexList = TemplateList::alloc();
+ indexNode->set("letter", keyToLetter(elem->key));
+ indexNode->set("label", keyToLabel(elem->key));
+ indexNode->set("items",indexList);
+ result->append(indexNode);
+ letter=elem->key;
+ }
+ indexList->append(elem->value);
+ }
+ return result;
+ }
+ return v;
+ }
+};
+
+//--------------------------------------------------------------------
+
/** @brief The implementation of the "default" filter */
class FilterStripPath
{
@@ -923,12 +1380,18 @@ class TemplateFilterFactory
// register a handlers for each filter we support
static TemplateFilterFactory::AutoRegister<FilterAdd> fAdd("add");
-static TemplateFilterFactory::AutoRegister<FilterAdd> fAppend("append");
+static TemplateFilterFactory::AutoRegister<FilterGet> fGet("get");
+static TemplateFilterFactory::AutoRegister<FilterAppend> fAppend("append");
static TemplateFilterFactory::AutoRegister<FilterLength> fLength("length");
static TemplateFilterFactory::AutoRegister<FilterNoWrap> fNoWrap("nowrap");
+static TemplateFilterFactory::AutoRegister<FilterFlatten> fFlatten("flatten");
static TemplateFilterFactory::AutoRegister<FilterDefault> fDefault("default");
static TemplateFilterFactory::AutoRegister<FilterPrepend> fPrepend("prepend");
+static TemplateFilterFactory::AutoRegister<FilterGroupBy> fGroupBy("groupBy");
+static TemplateFilterFactory::AutoRegister<FilterListSort> fListSort("listsort");
+static TemplateFilterFactory::AutoRegister<FilterPaginate> fPaginate("paginate");
static TemplateFilterFactory::AutoRegister<FilterStripPath> fStripPath("stripPath");
+static TemplateFilterFactory::AutoRegister<FilterAlphaIndex> fAlphaIndex("alphaIndex");
static TemplateFilterFactory::AutoRegister<FilterDivisibleBy> fDivisibleBy("divisibleby");
//--------------------------------------------------------------------
@@ -2032,6 +2495,24 @@ void TemplateContextImpl::closeSubIndex(const QCString &indexName)
}
}
+static void getPathListFunc(TemplateStructIntf *entry,TemplateList *list)
+{
+ TemplateVariant parent = entry->get("parent");
+ if (parent.type()==TemplateVariant::Struct)
+ {
+ getPathListFunc(parent.toStruct(),list);
+ }
+ list->append(entry);
+}
+
+static TemplateVariant getPathFunc(const void *ctx, const QValueList<TemplateVariant> &)
+{
+ TemplateStruct *entry = (TemplateStruct*)ctx;
+ TemplateList *result = TemplateList::alloc();
+ getPathListFunc(entry,result);
+ return result;
+}
+
void TemplateContextImpl::addIndexEntry(const QCString &indexName,const QValueList<TemplateKeyValue> &arguments)
{
QValueListConstIterator<TemplateKeyValue> it = arguments.begin();
@@ -2041,6 +2522,7 @@ void TemplateContextImpl::addIndexEntry(const QCString &indexName,const QValueLi
// printf(" key=%s value=%s\n",(*it).key.data(),(*it).value.toString().data());
// ++it;
//}
+ TemplateVariant parent(FALSE);
QStack<TemplateVariant> *stack = m_indexStacks.find(indexName);
if (!stack) // no stack yet, create it!
{
@@ -2066,6 +2548,13 @@ void TemplateContextImpl::addIndexEntry(const QCString &indexName,const QValueLi
{
ASSERT(stack->top()->type()==TemplateVariant::List);
}
+ if (stack->count()>1)
+ {
+ TemplateVariant *tmp = stack->pop();
+ parent = *stack->top();
+ stack->push(tmp);
+ ASSERT(parent.type()==TemplateVariant::Struct);
+ }
// get list to add new item
list = dynamic_cast<TemplateList*>(stack->top()->toList());
}
@@ -2082,6 +2571,9 @@ void TemplateContextImpl::addIndexEntry(const QCString &indexName,const QValueLi
}
entry->set("is_leaf_node",true);
entry->set("first",list->count()==0);
+ entry->set("index",list->count());
+ entry->set("parent",parent);
+ entry->set("path",TemplateVariant::Delegate::fromFunction(entry,getPathFunc));
entry->set("last",true);
stack->push(new TemplateVariant(entry));
list->append(entry);
@@ -2603,6 +3095,10 @@ class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor>
if (m_expr)
{
TemplateVariant v = m_expr->resolve(c);
+ if (v.type()==TemplateVariant::Function)
+ {
+ v = v.call(QValueList<TemplateVariant>());
+ }
const TemplateListIntf *list = v.toList();
if (list)
{
@@ -2662,7 +3158,7 @@ class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor>
}
else // simple type...
{
- ci->warn(m_templateName,m_line,"for requires a variable of list type!");
+ ci->warn(m_templateName,m_line,"for requires a variable of list type, got type '%s'!",v.typeAsString().data());
}
}
}
@@ -2970,6 +3466,25 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
delete m_templateExpr;
delete m_fileExpr;
}
+ void mkpath(TemplateContextImpl *ci,const QCString &fileName)
+ {
+ int i=fileName.find('/');
+ QCString outputDir = ci->outputDirectory();
+ QDir d(outputDir);
+ int j=0;
+ while (i!=-1) // fileName contains path part
+ {
+ if (d.exists())
+ {
+ bool ok = d.mkdir(fileName.mid(j,i-j));
+ if (!ok) break;
+ QCString dirName = outputDir+'/'+fileName.left(i);
+ d = QDir(dirName);
+ j = i+1;
+ }
+ i=fileName.find('/',i+1);
+ }
+ }
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
@@ -2995,6 +3510,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
TemplateImpl *createTemplate = ct ? dynamic_cast<TemplateImpl*>(ct) : 0;
if (createTemplate)
{
+ //mkpath(ci,outputFile);
QCString extension=outputFile;
int i=extension.findRev('.');
if (i!=-1)
@@ -3315,7 +3831,7 @@ class TemplateNodeWith : public TemplateNodeCreator<TemplateNodeWith>
}
else
{
- parser->warn(parser->templateName(),line,"invalid argument '%s' for with tag",arg.data());
+ parser->warn(parser->templateName(),line,"invalid argument '%s' for 'with' tag",arg.data());
}
++it;
}
@@ -3422,47 +3938,35 @@ class TemplateNodeSet : public TemplateNodeCreator<TemplateNodeSet>
};
public:
TemplateNodeSet(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
- : TemplateNodeCreator<TemplateNodeSet>(parser,parent,line)
+ : TemplateNodeCreator<TemplateNodeSet>(parser,parent,line), m_mapping(0)
{
TRACE(("{TemplateNodeSet(%s)\n",data.data()));
- m_args.setAutoDelete(TRUE);
ExpressionParser expParser(parser,line);
- QValueList<QCString> args = split(data," ");
- QValueListIterator<QCString> it = args.begin();
- while (it!=args.end())
+ // data format: name=expression
+ int j=data.find('=');
+ ExprAst *expr = 0;
+ if (j>0 && (expr = expParser.parse(data.mid(j+1))))
{
- QCString arg = *it;
- int j=arg.find('=');
- if (j>0)
- {
- ExprAst *expr = expParser.parse(arg.mid(j+1));
- if (expr)
- {
- m_args.append(new Mapping(arg.left(j),expr));
- }
- }
- else
- {
- parser->warn(parser->templateName(),line,"invalid argument '%s' for with tag",arg.data());
- }
- ++it;
+ m_mapping = new Mapping(data.left(j),expr);
}
TRACE(("}TemplateNodeSet(%s)\n",data.data()));
}
+ ~TemplateNodeSet()
+ {
+ delete m_mapping;
+ }
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
ci->setLocation(m_templateName,m_line);
- QListIterator<Mapping> it(m_args);
- Mapping *mapping;
- for (it.toFirst();(mapping=it.current());++it)
+ if (m_mapping)
{
- TemplateVariant value = mapping->value->resolve(c);
- ci->set(mapping->name,value);
+ TemplateVariant value = m_mapping->value->resolve(c);
+ ci->set(m_mapping->name,value);
}
}
private:
- QList<Mapping> m_args;
+ Mapping *m_mapping;
};
//----------------------------------------------------------
@@ -4263,6 +4767,11 @@ TemplateContext *TemplateEngine::createContext() const
return new TemplateContextImpl(this);
}
+void TemplateEngine::destroyContext(TemplateContext *ctx)
+{
+ delete ctx;
+}
+
Template *TemplateEngine::loadByName(const QCString &fileName,int line)
{
return p->loadByName(fileName,line);
diff --git a/src/template.h b/src/template.h
index cb4a96f..ef9792c 100644
--- a/src/template.h
+++ b/src/template.h
@@ -1,3 +1,18 @@
+/******************************************************************************
+ *
+ * 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 TEMPLATE_H
#define TEMPLATE_H
@@ -126,6 +141,9 @@ class TemplateVariant
/** Returns the type of the value stored in the variant */
Type type() const;
+ /** Return a string representation of the type of the value stored in the variant */
+ QCString typeAsString() const;
+
/** Returns TRUE if the variant holds a valid value, or FALSE otherwise */
bool isValid() const;
@@ -388,6 +406,8 @@ class TemplateSpacelessIntf
public:
/** Returns the \a input after removing redundant whitespace */
virtual QCString remove(const QCString &input) = 0;
+ /** Reset filter state */
+ virtual void reset() = 0;
};
//------------------------------------------------------------------------
@@ -485,6 +505,11 @@ class TemplateEngine
*/
TemplateContext *createContext() const;
+ /** Destroys a context created via createContext().
+ * @param[in] ctx The context.
+ */
+ void destroyContext(TemplateContext *ctx);
+
/** Creates a new template whole contents are in a file.
* @param[in] fileName The name of the file containing the
* template data
diff --git a/src/translator_en.h b/src/translator_en.h
index ca0a151..5937ed3 100644
--- a/src/translator_en.h
+++ b/src/translator_en.h
@@ -1224,7 +1224,7 @@ class TranslatorEnglish : public Translator
*/
virtual QCString trGroup(bool first_capital, bool singular)
{
- QCString result((first_capital ? "Group" : "group"));
+ QCString result((first_capital ? "Module" : "module"));
if (!singular) result+="s";
return result;
}
diff --git a/src/util.cpp b/src/util.cpp
index 0113e62..a524922 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1667,10 +1667,11 @@ QCString removeRedundantWhiteSpace(const QCString &s)
uint l=s.length();
uint csp=0;
uint vsp=0;
+ char c;
for (i=0;i<l;i++)
{
nextChar:
- char c=s.at(i);
+ c=s.at(i);
// search for "const"
if (csp<6 && c==constScope[csp] && // character matches substring "const"
@@ -1705,7 +1706,7 @@ nextChar:
if (cc=='\\') // escaped character
{
growBuf.addChar(s.at(i+1));
- i+=2;
+ i+=2;
}
else if (cc=='"') // end of string
{ i++; goto nextChar; }
@@ -1737,14 +1738,16 @@ nextChar:
growBuf.addChar(',');
growBuf.addChar(' ');
}
- else if (i>0 &&
- ((isId(s.at(i)) && s.at(i-1)==')') ||
- (s.at(i)=='\'' && s.at(i-1)==' ')
+ else if (i>0 &&
+ (
+ (s.at(i-1)==')' && isId(c))
+ ||
+ (c=='\'' && s.at(i-1)==' ')
)
)
{
growBuf.addChar(' ');
- growBuf.addChar(s.at(i));
+ growBuf.addChar(c);
}
else if (c=='t' && csp==5 /*&& (i<5 || !isId(s.at(i-5)))*/ &&
!(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ ||
@@ -1838,7 +1841,7 @@ nextChar:
* Returns the position in the string where a function parameter list
* begins, or -1 if one is not found.
*/
-int findParameterList(const QString &name)
+int findParameterList(const QCString &name)
{
int pos=-1;
int templateDepth=0;
@@ -1875,7 +1878,8 @@ int findParameterList(const QString &name)
else
{
int bp = bracePos>0 ? name.findRev('(',bracePos-1) : -1;
- return bp==-1 ? bracePos : bp;
+ // bp test is to allow foo(int(&)[10]), but we need to make an exception for operator()
+ return bp==-1 || (bp>=8 && name.mid(bp-8,10)=="operator()") ? bracePos : bp;
}
}
} while (pos!=-1);
@@ -5365,10 +5369,10 @@ void createSubDirs(QDir &d)
int l1,l2;
for (l1=0;l1<16;l1++)
{
- d.mkdir(QString().sprintf("d%x",l1));
+ d.mkdir(QCString().sprintf("d%x",l1));
for (l2=0;l2<256;l2++)
{
- d.mkdir(QString().sprintf("d%x/d%02x",l1,l2));
+ d.mkdir(QCString().sprintf("d%x/d%02x",l1,l2));
}
}
}
@@ -5601,6 +5605,11 @@ QCString convertToXML(const char *s)
case '&': growBuf.addStr("&amp;"); break;
case '\'': growBuf.addStr("&apos;"); break;
case '"': growBuf.addStr("&quot;"); break;
+ case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
+ case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18:
+ case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26:
+ case 27: case 28: case 29: case 30: case 31:
+ break; // skip invalid XML characters (see http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char)
default: growBuf.addChar(c); break;
}
}
@@ -6349,26 +6358,42 @@ void addRefItem(const QList<ListItemInfo> *sli,
}
}
-void addGroupListToTitle(OutputList &ol,Definition *d)
+bool recursivelyAddGroupListToTitle(OutputList &ol,Definition *d,bool root)
{
GroupList *groups = d->partOfGroups();
if (groups) // write list of group to which this definition belongs
{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeString("<div class=\"ingroups\">");
+ if (root)
+ {
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.writeString("<div class=\"ingroups\">");
+ }
GroupListIterator gli(*groups);
GroupDef *gd;
- bool first=TRUE;
+ bool first=true;
for (gli.toFirst();(gd=gli.current());++gli)
{
- if (!first) { ol.writeString(" &#124; "); } else first=FALSE;
- ol.writeObjectLink(gd->getReference(),
- gd->getOutputFileBase(),0,gd->groupTitle());
+ if (recursivelyAddGroupListToTitle(ol, gd, FALSE))
+ {
+ ol.writeString(" &raquo; ");
+ }
+ if (!first) { ol.writeString(" &#124; "); } else first=FALSE;
+ ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle());
}
- ol.writeString("</div>");
- ol.popGeneratorState();
+ if (root)
+ {
+ ol.writeString("</div>");
+ ol.popGeneratorState();
+ }
+ return true;
}
+ return false;
+}
+
+void addGroupListToTitle(OutputList &ol,Definition *d)
+{
+ recursivelyAddGroupListToTitle(ol,d,TRUE);
}
void filterLatexString(FTextStream &t,const char *str,
@@ -6700,15 +6725,37 @@ void initDefaultExtensionMapping()
{
g_extLookup.setAutoDelete(TRUE);
// extension parser id
- updateLanguageMapping(".idl", "idl");
- updateLanguageMapping(".ddl", "idl");
- updateLanguageMapping(".odl", "idl");
+ updateLanguageMapping(".dox", "c");
+ updateLanguageMapping(".txt", "c");
+ updateLanguageMapping(".doc", "c");
+ updateLanguageMapping(".c", "c");
+ updateLanguageMapping(".C", "c");
+ updateLanguageMapping(".cc", "c");
+ updateLanguageMapping(".CC", "c");
+ updateLanguageMapping(".cxx", "c");
+ updateLanguageMapping(".cpp", "c");
+ updateLanguageMapping(".c++", "c");
+ updateLanguageMapping(".ii", "c");
+ updateLanguageMapping(".ixx", "c");
+ updateLanguageMapping(".ipp", "c");
+ updateLanguageMapping(".i++", "c");
+ updateLanguageMapping(".inl", "c");
+ updateLanguageMapping(".h", "c");
+ updateLanguageMapping(".H", "c");
+ updateLanguageMapping(".hh", "c");
+ updateLanguageMapping(".HH", "c");
+ updateLanguageMapping(".hxx", "c");
+ updateLanguageMapping(".hpp", "c");
+ updateLanguageMapping(".h++", "c");
+ updateLanguageMapping(".idl", "idl");
+ updateLanguageMapping(".ddl", "idl");
+ updateLanguageMapping(".odl", "idl");
updateLanguageMapping(".java", "java");
- updateLanguageMapping(".as", "javascript");
+ updateLanguageMapping(".as", "javascript");
updateLanguageMapping(".js", "javascript");
updateLanguageMapping(".cs", "csharp");
updateLanguageMapping(".d", "d");
- updateLanguageMapping(".php", "php");
+ updateLanguageMapping(".php", "php");
updateLanguageMapping(".php4", "php");
updateLanguageMapping(".php5", "php");
updateLanguageMapping(".inc", "php");
@@ -8222,3 +8269,11 @@ void convertProtectionLevel(
// inListType,inProt,*outListType1,*outListType2);
}
+bool mainPageHasTitle()
+{
+ if (Doxygen::mainPage==0) return FALSE;
+ if (Doxygen::mainPage->title().isEmpty()) return FALSE;
+ if (Doxygen::mainPage->title().lower()=="notitle") return FALSE;
+ return TRUE;
+}
+
diff --git a/src/util.h b/src/util.h
index c131dd0..f74fad0 100644
--- a/src/util.h
+++ b/src/util.h
@@ -456,5 +456,7 @@ void convertProtectionLevel(
int *outListType2
);
+bool mainPageHasTitle();
+
#endif
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..0617ea6 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 <qfileinfo.h>
#include <qstringlist.h>
+//#ifdef DEBUGFLOW
+#include <qmap.h>
+//#endif
+
/* --------------------------------------------------------------- */
// local includes
@@ -43,56 +47,520 @@
#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"
+#include "memberdef.h"
+
+#include "vhdljjparser.h"
+#include "VhdlParser.h"
-//#define theTranslator_vhdlType theTranslator->trVhdlType
+#include "vhdlcode.h"
#define theTranslator_vhdlType VhdlDocGen::trVhdlType
static QDict<QCString> g_vhdlKeyDict0(17,FALSE);
static QDict<QCString> g_vhdlKeyDict1(17,FALSE);
static QDict<QCString> g_vhdlKeyDict2(17,FALSE);
+static QDict<QCString> g_vhdlKeyDict3(17,FALSE);
+static QDict<QCString> 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<MemberDef>* getPorts(ClassDef *cd);
+static void writeVhdlEntityToolTip(FTextStream& t,ClassDef *cd);
+static void endDot(FTextStream &t);
+static void writeTable(QList<MemberDef>* 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<MemberDef>* 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 << "&lt;";
+ break;
+ case '>': t << "&gt;";
+ break;
+ case '&': t << "&amp;";
+ break;
+ case '\'': t << "&#39;";
+ break;
+ case '"': t << "&quot;";
+ 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<MemberDef>* 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=<<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\">\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("<BR ALIGN=\"LEFT\"/>");
+ QCString file=cd->getDefFileName();
+
+ int k=cd->briefLine();
+
+ QStringList qsl=QStringList::split(ep,brief);
+ for(uint j=0;j<qsl.count();j++)
+ {
+ QCString qcs=qsl[j].data();
+ vForm+=parseCommentAsText(cd,NULL,qcs,file,k);
+ k++;
+ vForm+='\n';
+ }
+
+ vForm.replace(ep,repl.data());
+ return vForm;
+}
+
+#if 0
+static void writeVhdlPortToolTip(FTextStream& t,QList<MemberDef>* port,ClassDef *cd)
+{
+/*
+ uint len=port->count();
+ MemberDef *md;
+
+ for (uint j=0;j<len;j++)
+ {
+ md=(MemberDef*)port->at(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<<"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
+ t<<"<TR><TD BGCOLOR=\"lightcyan\"> ";
+ t<<brief;
+ t<<" </TD></TR></TABLE>>];";
+ 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 << "<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
+ t << "<TR><TD BGCOLOR=\"lightcyan\"> ";
+ t << brief;
+ t << " </TD></TR></TABLE>>];";
+ 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 <<"<TR>\n";
+ }
+
+ t << "<TD ALIGN=\"LEFT\" ";
+ if (md)
+ {
+ t << "href=\"";
+ t << md->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 << "</TD>\n";
+
+ if (!start)
+ {
+ t << "</TR>\n";
+ }
+}
+
+static void endTabel(FTextStream &t)
+{
+ t << "</TABLE>>\n";
+ t << "] \n";
+}
+
+static void writeClassToDot(FTextStream &t,ClassDef* cd)
+{
+ t << "<TR><TD COLSPAN=\"2\" BGCOLOR=\"yellow\" ";
+ t << "PORT=\"";
+ t << cd->name();
+ t << "\" ";
+ t << "href=\"";
+ t << cd->getOutputFileBase() << Doxygen::htmlFileExtension;
+ t << "\" ";
+ t << ">";
+ t << cd->name();
+ t << " </TD></TR>\n";
+}
+
+static QList<MemberDef>* getPorts(ClassDef *cd)
+{
+ MemberDef* md;
+ QList<MemberDef> *portList=new QList<MemberDef>;
+ 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<MemberDef>* port,FTextStream & t)
+{
+ QCString space(" ");
+ MemberDef *md;
+ uint len=port->count();
+
+ QList<MemberDef> inPorts;
+ QList<MemberDef> outPorts;
+
+ uint j;
+ for (j=0;j<len;j++)
+ {
+ md=(MemberDef*)port->at(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;i<maxLen;i++)
+ {
+ //write inports
+ if (i<inp)
+ {
+ md=(MemberDef*)inPorts.at(i);
+ writeColumn(t,md,TRUE);
+ }
+ else
+ {
+ writeColumn(t,NULL,TRUE);
+ }
+
+ if (i<outp)
+ {
+ md=(MemberDef*)outPorts.at(i);
+ writeColumn(t,md,FALSE);
+ }
+ else
+ {
+ writeColumn(t,NULL,FALSE);
+ }
+ }
+}
+
+//--------------------------------------------------------------------------------------------------
+
VhdlDocGen::VhdlDocGen()
{
@@ -104,12 +572,64 @@ VhdlDocGen::~VhdlDocGen()
void VhdlDocGen::init()
{
+
+ // vhdl keywords inlcuded VHDL 2008
+const char* g_vhdlKeyWordMap0[] =
+{
+ "abs","access","after","alias","all","and","architecture","array","assert","assume","assume_guarantee","attribute",
+ "begin","block","body","buffer","bus",
+ "case","component","configuration","constant","context","cover",
+ "default","disconnect","downto",
+ "else","elsif","end","entity","exit",
+ "fairness","file","for","force","function",
+ "generate","generic","group","guarded",
+ "if","impure","in","inertial","inout","is",
+ "label","library","linkage","literal","loop",
+ "map","mod",
+ "nand","new","next","nor","not","null",
+ "of","on","open","or","others","out",
+ "package","parameter","port","postponed","procedure","process","property","proctected","pure",
+ "range","record","register","reject","release","restrict","restrict_guarantee","rem","report","rol","ror","return",
+ "select","sequence","severity","signal","shared","sla","sll","sra","srl","strong","subtype",
+ "then","to","transport","type",
+ "unaffected","units","until","use",
+ "variable","vmode","vprop","vunit",
+ "wait","when","while","with",
+ "xor","xnor",
+ 0
+};
+
+
+// type
+const char* g_vhdlKeyWordMap1[] =
+{
+ "natural","unsigned","signed","string","boolean", "bit","bit_vector","character",
+ "std_ulogic","std_ulogic_vector","std_logic","std_logic_vector","integer",
+ "real","float","ufixed","sfixed","time",0
+};
+
+// logic
+const char* g_vhdlKeyWordMap2[] =
+{
+ "abs","and","or","not","mod", "xor","rem","xnor","ror","rol","sla",
+ "sll",0
+};
+
+// predefined attributes
+const char* g_vhdlKeyWordMap3[] =
+{
+"base","left","right","high","low","ascending",
+"image","value","pos","val","succ","pred","leftof","rightof","left","right","high","low",
+"range","reverse_range","length","ascending","delayed","stable","quiet","transaction","event",
+"active","last_event","last_active","last_value","driving","driving_value","simple_name","instance_name","path_name",0
+};
+
int j=0;
g_vhdlKeyDict0.setAutoDelete(TRUE);
g_vhdlKeyDict1.setAutoDelete(TRUE);
g_vhdlKeyDict2.setAutoDelete(TRUE);
+ g_vhdlKeyDict3.setAutoDelete(TRUE);
- j=0;
while (g_vhdlKeyWordMap0[j])
{
g_vhdlKeyDict0.insert(g_vhdlKeyWordMap0[j],
@@ -133,29 +653,42 @@ void VhdlDocGen::init()
j++;
}
+ j=0;
+ while (g_vhdlKeyWordMap3[j])
+ {
+ g_vhdlKeyDict3.insert(g_vhdlKeyWordMap3[j],
+ new QCString(g_vhdlKeyWordMap3[j]));
+ j++;
+ }
+
}// buildKeyMap
/*!
* returns the color of a keyword
*/
-QCString* VhdlDocGen::findKeyWord(const QCString& word)
+QCString* VhdlDocGen::findKeyWord(const QCString& tmp)
{
- static QCString g_vhdlkeyword("vhdlkeyword");
- static QCString g_vhdltype("comment");
- static QCString g_vhdllogic("vhdllogic");
+ static QCString vhdlkeyword("vhdlkeyword");
+ static QCString vhdltype("comment");
+ static QCString vhdllogic("vhdllogic");
+ static QCString preprocessor("keywordflow");
+
+ QCString word=tmp.lower();
if (word.isEmpty() || word.at(0)=='\0') return 0;
- //printf("VhdlDocGen::findKeyWord(%s)\n",word.data());
- if (g_vhdlKeyDict0.find(word.lower()))
- return &g_vhdlkeyword;
+ if (g_vhdlKeyDict0.find(word))
+ return &preprocessor;
+
+ if (g_vhdlKeyDict1.find(word))
+ return &vhdltype;
- if (g_vhdlKeyDict1.find(word.lower()))
- return &g_vhdltype;
+ if (g_vhdlKeyDict2.find(word))
+ return &vhdllogic;
- if (g_vhdlKeyDict2.find(word.lower()))
- return &g_vhdllogic;
+ if (g_vhdlKeyDict3.find(word))
+ return &vhdlkeyword;
return 0;
}
@@ -172,79 +705,6 @@ ClassDef *VhdlDocGen::getClass(const char *name)
return cd;
}
-/*!
- * adds architectures to their entity
- */
-void VhdlDocGen::computeVhdlComponentRelations()
-{
- printf("VhdlDocGen::computeVhdlComponentRelations()\n");
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- printf(" cd=%s\n",cd->name().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* cd=0;
@@ -254,11 +714,13 @@ ClassDef* VhdlDocGen::getPackageName(const QCString & name)
return cd;
}
+static QMap<QCString,MemberDef*> varMap;
+static QList<ClassDef> qli;
+static QMap<ClassDef*,QList<ClassDef> > packages;
+
MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& memName)
{
- QDict<QCString> packages(17,FALSE);
- packages.setAutoDelete(TRUE);
- ClassDef* cd;
+ ClassDef* cd,*ecd;
MemberDef *mdef=0;
cd=getClass(className);
@@ -277,10 +739,10 @@ 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);
+ ecd =getClass(tt);
if (!ecd)
{
tt=tt.upper();
@@ -297,15 +759,12 @@ 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;
- }
- // nothing found , so we are now searching all included packages
- VhdlDocGen::findAllPackages(className,packages);
- //cd=getClass(className.data());
+ }
+
+
if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
{
@@ -323,61 +782,91 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
tt=tt.lower();
ecd =getClass(tt);
}
-
if (ecd) //d && d->definitionType()==Definition::TypeClass)
{
- VhdlDocGen::findAllPackages(ecd->className(),packages);
+ if(!packages.contains(ecd))
+ {
+ VhdlDocGen::findAllPackages(ecd);
+ }
}
}
+ else
+ {
+ ecd=cd;
+ if (!packages.contains(ecd)) VhdlDocGen::findAllPackages(ecd);
+ }
- QDictIterator<QCString> packli(packages);
- QCString *curString;
- for (packli.toFirst();(curString=packli.current());++packli)
+ uint len=packages.count();
+ for (uint j=0;j<len;j++)
{
- if (curString)
+ for (QMap<ClassDef*,QList<ClassDef> >::Iterator cList=packages.begin();cList != packages.end();cList++)
{
- cd=VhdlDocGen::getPackageName(*curString);
- if (!cd)
- {
- *curString=curString->upper();
- cd=VhdlDocGen::getPackageName(*curString);
- }
- if (!cd)
+ if (cList.key()==0) continue;
+ QList<ClassDef> mlist=cList.data();
+ for (uint j=0;j<mlist.count();j++)
{
- *curString=curString->lower();
- cd=VhdlDocGen::getPackageName(*curString);
+ mdef=VhdlDocGen::findMemberDef(mlist.at(j),memName,MemberListType_variableMembers);
+ if (mdef) return mdef;
+ mdef=VhdlDocGen::findMemberDef(mlist.at(j),memName,MemberListType_pubMethods);
+ if (mdef) return mdef;
}
}
- if (cd)
- {
- mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType_variableMembers);
- if (mdef) return mdef;
- mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType_pubMethods);
- if (mdef) return mdef;
- }
- } // for
+ }
return 0;
+
}//findMember
/**
* This function returns the entity|package
* in which the key (type) is found
*/
-
MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberListType type)
{
- // return cd->getMemberByName(key);//does not work
MemberDef *md=0;
+ MemberList *ml=0;
+ QCString keyType=cd->symbolName()+"@"+key;
+ //printf("\n %s | %s | %s",cd->symbolName().data(),key.data(,),keyType.data());
- MemberList *ml= cd->getMemberList(type);
- if (ml==0) return 0;
-
+ QMap<QCString, MemberDef*>::Iterator it =varMap.find(keyType);
+ if (it.key())
+ {
+ md=it.data();
+ if (md)
+ {
+ return md;
+ }
+ }
+ if (qli.contains(cd))
+ {
+ return 0;
+ }
+ ml=cd->getMemberList(type);
+ qli.append(cd);
+ if (!ml)
+ {
+ return 0;
+ }
MemberListIterator fmni(*ml);
+ //int l=ml->count();
+ // fprintf(stderr,"\n loading enity %s %s: %d",cd->symbolName().data(),keyType.data(),l);
for (fmni.toFirst();(md=fmni.current());++fmni)
{
- if (qstricmp(key.data(),md->name().data())==0)
+ QCString tkey=cd->symbolName()+"@"+md->name();
+ if (varMap.contains(tkey))
+ {
+ continue;
+ }
+ varMap.insert(tkey.data(),md);
+ }
+ it=varMap.find(keyType.data());
+ if (it.key())
+ {
+ md=it.data();
+ if (md)
+ {
return md;
+ }
}
return 0;
}//findMemberDef
@@ -386,42 +875,30 @@ MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberList
* finds all included packages of an Entity or Package
*/
-void VhdlDocGen::findAllPackages(const QCString& className,QDict<QCString>& qdict)
+void VhdlDocGen::findAllPackages( ClassDef *cdef)
{
- ClassDef *cdef=getClass(className);
- if (cdef)
- {
- MemberList *mem=cdef->getMemberList(MemberListType_variableMembers);
- MemberDef *md;
+ QList<ClassDef> cList;
+ if (packages.contains(cdef)) return;
+ MemberList *mem=cdef->getMemberList(MemberListType_variableMembers);
+ MemberDef *md;
+
+ if (!mem) return;
- if (mem)
+ MemberListIterator fmni(*mem);
+ for (fmni.toFirst();(md=fmni.current());++fmni)
+ {
+ if (VhdlDocGen::isPackage(md))
{
- MemberListIterator fmni(*mem);
- for (fmni.toFirst();(md=fmni.current());++fmni)
+ ClassDef* cd=VhdlDocGen::getPackageName(md->name());
+ if (cd)
{
- 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
+ cList.append(cd);
+ VhdlDocGen::findAllPackages(cd);
+ packages.insert(cdef,cList);
+ }
+ }
+ }//for
+
}// findAllPackages
/*!
@@ -430,19 +907,14 @@ void VhdlDocGen::findAllPackages(const QCString& className,QDict<QCString>& qdic
*/
MemberDef* VhdlDocGen::findFunction(const QList<Argument> &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 +923,47 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &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 +995,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 +1012,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 +1053,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 +1087,36 @@ void VhdlDocGen::findAllArchitectures(QList<QCString>& 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 +1129,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 +1138,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<QCString>& 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<QCString>& 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 +1170,7 @@ void VhdlDocGen::prepareComment(QCString& qcs)
* @param doc ???
*/
void VhdlDocGen::parseFuncProto(const char* text,QList<Argument>& qlist,
- QCString& name,QCString& ret,bool doc)
+ QCString& name,QCString& ret,bool doc)
{
(void)qlist; //unused
int index,end;
@@ -1046,7 +1226,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 +1275,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 +1351,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 +1372,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 +1421,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 +1431,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;j<len;j++)
- {
- if (isdigit((int)(s.at(j) & 0xff))==0)
- return FALSE;
- }
- return TRUE;
- #endif
}// isNumber
-void VhdlDocGen::startFonts(const QCString& q, const char *keyword,OutputList& ol)
-{
- ol.startFontClass(keyword);
- ol.docify(q.data());
- ol.endFontClass();
-}
/*!
* inserts white spaces for better readings
* and writes a colored string to the output
*/
-void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* mdef)
+void VhdlDocGen::formatString(const QCString &s, OutputList& ol,const MemberDef* mdef)
{
+ QCString qcs = s;
QCString temp(qcs.length());
qcs.stripPrefix(":");
qcs.stripPrefix("is");
@@ -1272,7 +1449,7 @@ void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* md
qcs.stripPrefix("of");
qcs.stripPrefix("OF");
- VhdlDocGen::deleteCharRev(qcs,';');
+ // VhdlDocGen::deleteCharRev(qcs,';');
//char white='\t';
int len = qcs.length();
unsigned int index=1;//temp.length();
@@ -1282,11 +1459,11 @@ void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* md
char c=qcs[j];
char b=c;
if (j>0) 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 +1472,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 +1522,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 +1571,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 +1622,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 +1646,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 +1682,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 +1720,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 +1733,9 @@ bool VhdlDocGen::writeFuncProcDocu(
}
else
{
+ // ol.docify(" ) ");
ol.endParameterName(TRUE,FALSE,TRUE);
break;
- //ol.docify(" ) ");
}
ol.endParameterName(FALSE,FALSE,FALSE);
@@ -1552,38 +1747,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 +1780,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 +1791,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 +1815,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 +1832,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 +1854,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 +1866,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 +1881,7 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
if (memdef && memdef->isLinkable())
{
ol.docify(" ");
+
ol.startBold();
writeLink(memdef,ol);
ol.endBold();
@@ -1707,7 +1890,6 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
else
{
ol.docify(" ");
- QCString ttype=mdef->typeString();
VhdlDocGen::formatString(ttype,ol,mdef);
ol.docify(" ");
}
@@ -1715,21 +1897,48 @@ 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);
+ if (VhdlDocGen::isConstraint(mdef))
+ {
+ writeLink(mdef,ol);
+ ol.docify(" ");
+
+ 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))
+ if (VhdlDocGen::isPort(mdef) || VhdlDocGen::isGeneric(mdef))
{
- QCString largs=mdef->argsString();
+ // QCString largs=mdef->argsString();
VhdlDocGen::formatString(largs,ol,mdef);
ol.docify(" ");
}
@@ -1743,24 +1952,15 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool /*inGroup*/)
{
- Definition *d=0;
+ static QRegExp reg("[%]");
- /* some vhdl files contain only a configuration description
-
- library work;
- configuration cfg_tb_jtag_gotoBackup of tb_jtag_gotoBackup is
- for RTL
- end for;
- end cfg_tb_jtag_gotoBackup;
+ Definition *d=0;
- in this case library work does not belong to an entity, package ...
-
- */
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 +1971,27 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
Doxygen::tagFile << " <member kind=\"";
- if (VhdlDocGen::isGeneric(mdef)) Doxygen::tagFile << "generic";
- if (VhdlDocGen::isPort(mdef)) Doxygen::tagFile << "port";
- if (VhdlDocGen::isEntity(mdef)) Doxygen::tagFile << "entity";
- if (VhdlDocGen::isComponent(mdef)) Doxygen::tagFile << "component";
- if (VhdlDocGen::isVType(mdef)) Doxygen::tagFile << "type";
- if (VhdlDocGen::isConstant(mdef)) Doxygen::tagFile << "constant";
- if (VhdlDocGen::isSubType(mdef)) Doxygen::tagFile << "subtype";
- if (VhdlDocGen::isVhdlFunction(mdef)) Doxygen::tagFile << "function";
- if (VhdlDocGen::isProcedure(mdef)) Doxygen::tagFile << "procedure";
- if (VhdlDocGen::isProcess(mdef)) Doxygen::tagFile << "process";
- if (VhdlDocGen::isSignals(mdef)) Doxygen::tagFile << "signal";
- if (VhdlDocGen::isAttribute(mdef)) Doxygen::tagFile << "attribute";
- if (VhdlDocGen::isRecord(mdef)) Doxygen::tagFile << "record";
- if (VhdlDocGen::isLibrary(mdef)) Doxygen::tagFile << "library";
- if (VhdlDocGen::isPackage(mdef)) Doxygen::tagFile << "package";
- if (VhdlDocGen::isVariable(mdef)) Doxygen::tagFile << "shared variable";
- if (VhdlDocGen::isFile(mdef)) Doxygen::tagFile << "file";
- if (VhdlDocGen::isGroup(mdef)) Doxygen::tagFile << "group";
- if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << "component instantiation";
- if (VhdlDocGen::isAlias(mdef)) Doxygen::tagFile << "alias";
- if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << "configuration";
+ if (VhdlDocGen::isGeneric(mdef)) Doxygen::tagFile << "generic";
+ if (VhdlDocGen::isPort(mdef)) Doxygen::tagFile << "port";
+ if (VhdlDocGen::isEntity(mdef)) Doxygen::tagFile << "entity";
+ if (VhdlDocGen::isComponent(mdef)) Doxygen::tagFile << "component";
+ if (VhdlDocGen::isVType(mdef)) Doxygen::tagFile << "type";
+ if (VhdlDocGen::isConstant(mdef)) Doxygen::tagFile << "constant";
+ if (VhdlDocGen::isSubType(mdef)) Doxygen::tagFile << "subtype";
+ if (VhdlDocGen::isVhdlFunction(mdef)) Doxygen::tagFile << "function";
+ if (VhdlDocGen::isProcedure(mdef)) Doxygen::tagFile << "procedure";
+ if (VhdlDocGen::isProcess(mdef)) Doxygen::tagFile << "process";
+ if (VhdlDocGen::isSignals(mdef)) Doxygen::tagFile << "signal";
+ if (VhdlDocGen::isAttribute(mdef)) Doxygen::tagFile << "attribute";
+ if (VhdlDocGen::isRecord(mdef)) Doxygen::tagFile << "record";
+ if (VhdlDocGen::isLibrary(mdef)) Doxygen::tagFile << "library";
+ if (VhdlDocGen::isPackage(mdef)) Doxygen::tagFile << "package";
+ if (VhdlDocGen::isVariable(mdef)) Doxygen::tagFile << "shared variable";
+ if (VhdlDocGen::isFile(mdef)) Doxygen::tagFile << "file";
+ if (VhdlDocGen::isGroup(mdef)) Doxygen::tagFile << "group";
+ if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << " instantiation";
+ if (VhdlDocGen::isAlias(mdef)) Doxygen::tagFile << "alias";
+ if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << "configuration";
Doxygen::tagFile << "\">" << endl;
Doxygen::tagFile << " <type>" << convertToXML(mdef->typeString()) << "</type>" << endl;
@@ -1820,7 +2020,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");
@@ -1830,14 +2030,13 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ClassDef *annoClassDef=mdef->getClassDefOfAnonymousType();
// start a new member declaration
- bool isAnonymous = annoClassDef; // || m_impl->annMemb || m_impl->annEnumType;
+ uint isAnonymous = (bool)(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=3;
- ol.startMemberItem( mdef->anchor(), isAnonymous ); //? 1 : m_impl->tArgList ? 3 : 0);
+ ol.startMemberItem( mdef->anchor(), isAnonymous ); //? 1 : m_impl->tArgList ? 3 : 0);
// If there is no detailed description we need to write the anchor here.
bool detailsVisible = mdef->isDetailedSectionLinkable();
@@ -1859,21 +2058,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 +2084,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 +2111,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 +2121,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 +2133,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 +2155,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 +2171,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 +2193,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("<Entity ");
if (VhdlDocGen::isConfig(mdef) || VhdlDocGen::isCompInst(mdef))
{
@@ -2016,11 +2216,19 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
{
name+=mdef->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 +2250,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);
}
@@ -2067,15 +2280,15 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ol.endDoxyAnchor(cfname,mdef->anchor());
}
- //printf("endMember %s annoClassDef=%p annEnumType=%p\n",
// name().data(),annoClassDef,annEnumType);
+ // if(mm!=VhdlDocGen::MISCELLANEOUS)
ol.endMemberItem();
if (!mdef->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC") /* && !annMemb */)
{
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 +2297,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 +2314,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;i<len;i++)
- {
- QCString n=ql[i].utf8();
- VhdlDocGen::formatString(n,ol,mdef);
- if ((len-i)>1) 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 +2322,6 @@ void VhdlDocGen::writePlainVHDLDeclarations(
SDict<QCString> pack(1009);
- ol.pushGeneratorState();
-
bool first=TRUE;
MemberDef *md;
MemberListIterator mli(*mlist);
@@ -2138,16 +2330,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 +2347,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 +2431,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 +2442,7 @@ bool VhdlDocGen::writeClassType( ClassDef * cd,
ol.writeString(qcs.data());
ol.writeString(" ");
ol.endBold();
+ //ol.insertMemberAlign();
return FALSE;
}// writeClassLink
@@ -2317,15 +2496,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 +2514,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 +2550,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 +2569,1915 @@ 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<BaseInfo> 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;j<len;j++)
+ VhdlDocGen::formatString(largs,ol,mdef);
+}
+
+bool VhdlDocGen::findConstraintFile(LayoutNavEntry *lne)
+{
+ FileName *fn=Doxygen::inputNameList->getFirst();
+ //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 (i<count)
+ {
+ FileDef *fd=fn->at(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<Entry> instList=getVhdlInstList();
+ QListIterator<Entry> 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<VhdlConfNode> confList = getVhdlConfiguration();
+ VhdlConfNode* vconf;
+ // bool found=false;
+ for (uint iter=0;iter<confList.count(); iter++)
+ {
+ vconf= (VhdlConfNode *)confList.at(iter);
+ QCString n=VhdlDocGen::getIndexWord(vconf->confVhdl.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;j<ql.count();j++)
+ {
+ QCString archy1,sign1;
+ if (all || others)
+ {
+ archy1=VhdlDocGen::getIndexWord(conf->arch.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<VhdlConfNode> confList = getVhdlConfiguration();
+
+ for (uint iter=0;iter<confList.count(); iter++)
+ {
+ VhdlConfNode* conf= (VhdlConfNode *)confList.at(iter);
+ if (!(conf->isInlineConf || conf->isLeaf))
+ {
+ continue;
+ }
+ assignBinding(conf);
+ }
+
+ QList<Entry> qsl= getVhdlInstList();
+ QListIterator<Entry> 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;i<len;i++)
+ {
+ QCString n=ql[i].utf8();
+ VhdlDocGen::formatString(n,ol,mdef);
+ if ((len-i)>1) 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;i<len;i++)
+ {
+ QCString n=ql[i].utf8();
+ ol.startParameterType(first,"");
+ ol.endParameterType();
+ ol.startParameterName(TRUE);
+ VhdlDocGen::formatString(n,ol,md);
+ if ((len-i)>1)
+ {
+ 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<MemberDef> mdList;
+
+static MemberDef* findMemFlow(const MemberDef* mdef)
+{
+ for(uint j=0;j<mdList.count();j++)
+ {
+ MemberDef* md=(MemberDef*)mdList.at(j);
+ if (md->name()==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();
+}
+
+void VhdlDocGen::resetCodeVhdlParserState()
+{
+ varMap.clear();
+ qli.clear();
+ packages.clear();
+}
+
+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> FlowChart::flowList;
+
+#ifdef DEBUGFLOW
+static QMap<QCString,int> 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;j<size;j++)
+ {
+ printNode(flowList.at(j));
+ }
+}
+
+void FlowChart::colTextNodes()
+{
+ QCString text;
+ FlowChart *flno;
+ bool found=FALSE;
+ for (uint j=0;j<flowList.count();j++)
+ {
+ FlowChart *flo=flowList.at(j);
+ if (flo->type&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;j<flowList.count()-1;j++)
+ {
+ FlowChart *flo=flowList.at(j);
+ int kind=flo->type;
+ 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 <size ;j++)
+ {
+ FlowChart *fll=flowList.at(j);
+ delete fll;
+ }
+ flowList.clear();
+}
+
+void FlowChart::alignCommentNode(FTextStream &t,QCString com)
+{
+ uint max=0;
+ QCString s;
+ QStringList ql=QStringList::split("\n",com);
+ for (uint j=0;j<ql.count();j++)
+ {
+ s=(QCString)ql[j].utf8();
+ if (max<s.length()) max=s.length();
+ }
+
+ s=ql.last().utf8();
+ int diff=max-s.length();
+
+ QCString n(1);
+ if (diff>0)
+ {
+ n.fill(' ',2*diff);
+ n.append(".");
+ s+=n;
+ ql.remove(ql.last());
+ ql.append(s);
+ }
+
+ for (uint j=0;j<ql.count();j++)
+ {
+ s=(QCString)ql[j].utf8();
+ if (j<ql.count()-1)
+ {
+ s+="\n";
+ }
+ FlowChart::codify(t,s.data());
+ }
}
+
+void FlowChart::buildCommentNodes(FTextStream & t)
+{
+ uint size=flowList.count();
+ bool begin=false;
+
+ for (uint j=0;j < size-1 ;j++)
+ {
+ FlowChart *fll=flowList.at(j);
+ if (fll->type & 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 <flowList.count() ;j++)
+ {
+ FlowChart *fll=flowList.at(j);
+
+ if (fll->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 << "<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
+ t << "<TR><TD BGCOLOR=\"";
+ t << flowCol.comment;
+ t << "\" > ";
+
+ FlowChart::alignCommentNode(t,fll->label);
+ t << " </TD></TR></TABLE>>];";
+ 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 << "&lt;"; break;
+ case '>': t << "&gt;"; break;
+ case '&': t << "&amp;"; break;
+ case '\'': t << "&#39;"; break;
+ case '"': t << "&quot;"; break;
+ case '\n': t <<"<BR ALIGN=\"LEFT\"/>"; 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 "<begin> ";
+ 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 <size ;j++)
+ {
+ FlowChart *fll=flowList.at(j);
+ writeShape(t,fll);
+ }
+ writeFlowLinks(t);
+
+ FlowChart::endDot(t);
+ delFlowList();
+ f.close();
+ FlowChart::createSVG();
+}// writeFlowChart
+
+void FlowChart::writeShape(FTextStream &t,const FlowChart* fl)
+{
+ if (fl->type & EEND) return;
+ QCString var;
+ if (fl->type & LOOP)
+ {
+ var=" loop";
+ }
+ else if (fl->type & IFF)
+ {
+ var=" then";
+ }
+ else
+ {
+ var="";
+ }
+
+ t<<getNodeName(fl->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 << "<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" >\n ";
+ t << "<TR><TD BGCOLOR=\"";
+ t<< flowCol.startEndNode;
+ t<< "\"> ";
+ FlowChart::alignCommentNode(t,val);
+ t << " </TD></TR></TABLE>>];";
+ }
+ else
+ {
+ if (fl->text.isEmpty()) return;
+ bool var=(fl->type & FlowChart::VARIABLE_NO);
+ QCString repl("<BR ALIGN=\"LEFT\"/>");
+ 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 << "<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
+ if (var)
+ {
+ t << "<TR><TD BGCOLOR=\"" << flowCol.varNode << "\" > ";
+ }
+ else
+ {
+ t << "<TR><TD BGCOLOR=\"" << flowCol.textNode << "\" > ";
+ }
+ FlowChart::alignCommentNode(t,q);
+ t << " </TD></TR></TABLE>>];";
+ }
+}
+
+
+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<QCString, int>::Iterator it = keyMap.find(s1);
+ QMap<QCString, int>::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;j<flowList.count();j++)
+ {
+ FlowChart *flo=flowList.at(j);
+ if (flo->stamp==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->stamp<stamp)
+ {
+ return j;
+ }
+ }
+ }
+ }
+ return flowList.count()-1;
+}
+
+int FlowChart::findLabel(int index,QCString &label)
+{
+ for (uint j=index;j>0;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;j<flowList.count();j++)
+ {
+ FlowChart *flo=flowList.at(j);
+ if (flo->type==type && flo->stamp==stamp)
+ {
+ return j;
+ }
+ }
+ return 0;
+}// findNode
+
+int FlowChart::getNextNode(int index,int stamp)
+{
+ for (uint j=index+1;j<flowList.count();j++)
+ {
+ FlowChart *flo=flowList.at(j);
+ int kind=flo->type;
+ int s=flo->stamp;
+ if (s>stamp)
+ {
+ continue;
+ }
+ if (kind & ENDIF_NO)
+ {
+ if (s<stamp && stamp>0)
+ {
+ stamp--;
+ continue;
+ }
+ }
+ if (kind & (ELSE_NO | ELSIF_NO))
+ {
+ if (s<stamp && stamp>0)
+ {
+ stamp--;
+ }
+ j=findNode(j,stamp,ENDIF_NO);
+ continue;
+ }
+ if (kind & WHEN_NO)
+ {
+ if (s<stamp && stamp>0)
+ {
+ 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 && elseifNode<endifNode)
+ {
+ return elseifNode;
+ }
+
+ if (elseNode>0 && elseNode<endifNode)
+ {
+ return elseNode+1;
+ }
+
+ stamp=flowList.at(endifNode)->stamp;
+ 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;j<size;j++)
+ {
+ FlowChart *fll=flowList.at(j);
+ int kind=fll->type;
+ 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 && u<v)
+ {
+ writeEdge(t,fll,flowList.at(u),1);
+ }
+ else
+ {
+ writeEdge(t,fll,flowList.at(v),1);
+ }
+ }
+ else if (kind & END_CASE)
+ {
+ int z=FlowChart::getNextNode(j,fll->stamp);
+ 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, // lang
+ 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..b9f9afb 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 <qdict.h>
-#include <qlist.h>
#include <qcstring.h>
+#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<QCString>& ql, const char* str,QCString& buffer);
- static bool getSigTypeName(QList<QCString>& ql,const char* str,QCString& buffer);
static void parseFuncProto(const char* text,
- QList<Argument>& ,
+ QList<Argument>& ,
QCString& name,
QCString& ret,
bool doc=false);
@@ -104,89 +104,53 @@ 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<QCString>&);
+ static void findAllPackages(ClassDef*);
static MemberDef* findMemberDef(ClassDef* cd,
const QCString& key,
MemberListType type);
static ClassDef *getClass(const char *name);
- static Entry* findFunction(Entry* root,Entry* func);
static MemberDef* findFunction(const QList<Argument> &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 +175,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 +187,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 +202,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;
+ }
+
+ static void resetCodeVhdlParserState();
private:
- static void getFuncParams(QList<Argument>&, const char* str);
+ static void findAllArchitectures(QList<QCString>& 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<QCString>& 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<FlowChart> 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..f31c9fb
--- /dev/null
+++ b/src/vhdljjparser.cpp
@@ -0,0 +1,828 @@
+/******************************************************************************
+ *
+ * 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 <qcstring.h>
+#include <qfileinfo.h>
+#include <qstringlist.h>
+#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 int* lineParse;
+static int iDocLine = -1;
+static QCString inputString;
+static Entry gBlock;
+static Entry* previous = 0;
+#if 0
+int iLine;
+QStringList qrl;
+ParserInterface *g_thisParser;
+int inputPosition;
+int inputLen;
+int startComment = 0;
+QFile inputFile;
+QCString inbuf;
+
+QCString yyFileName;
+bool g_lexInit = FALSE;
+int yyLineNr = 1;
+int g_lastCommentContext = 0;
+bool docBlockAutoBrief;
+char docBlockTerm;
+int iDocLine = -1;
+int num_chars;
+int* lineParse;
+#endif
+//-------------------------------------------------------
+
+static Entry* oldEntry;
+static bool varr=FALSE;
+static QCString varName;
+
+static QList<Entry> instFiles;
+static QList<Entry> libUse;
+static QList<Entry> lineEntry;
+
+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<VhdlConfNode> configL;
+
+struct
+{
+ QCString doc;
+ bool brief;
+ bool pending;
+ int iDocLine;
+} str_doc;
+
+static bool doxComment=FALSE; // doxygen comment ?
+static QCString strComment;
+static int iCodeLen;
+
+bool checkMultiComment(QCString& qcs,int line);
+QList<Entry>* getEntryAtLine(const Entry* ce,int line);
+
+//-------------------------------------
+
+QList<VhdlConfNode>& getVhdlConfiguration() { return configL; }
+QList<Entry>& getVhdlInstList() { return instFiles; }
+
+Entry* getVhdlCompound()
+{
+ if (VhdlParser::lastEntity) return VhdlParser::lastEntity;
+ if (VhdlParser::lastCompound) return VhdlParser::lastCompound;
+ return NULL;
+}
+
+void startCodeBlock(int index)
+{
+ int ll=strComment.length();
+ iCodeLen=inputString.findRev(strComment.data())+ll;
+ // fprintf(stderr,"\n startin code..%d %d %d\n",iCodeLen,num_chars,ll);
+ //assert(false);
+ gBlock.reset();
+ int len=strComment.length();
+ QCString name=strComment.right(len-index);//
+ name=VhdlDocGen::getIndexWord(name.data(),1);
+ if (!name)
+ gBlock.name="misc"+ VhdlDocGen::getRecordNumber();
+ else
+ gBlock.name=name;
+
+ //int li=strComment.contains('\n');
+
+ gBlock.startLine=yyLineNr;
+ gBlock.bodyLine=yyLineNr;
+
+ strComment=strComment.left(index);
+ VhdlDocGen::prepareComment(strComment);
+ gBlock.brief+=strComment;
+}
+
+void makeInlineDoc(int endCode)
+{
+ int len=endCode-iCodeLen;
+ QCString par=inputString.mid(iCodeLen,len);
+ //fprintf(stderr,"\n inline code: \n<%s>",par.data());
+ gBlock.doc=par;
+ gBlock.inbodyDocs=par;
+ gBlock.section=Entry::VARIABLE_SEC;
+ gBlock.spec=VhdlDocGen::MISCELLANEOUS;
+ gBlock.fileName = yyFileName;
+ gBlock.endBodyLine=yyLineNr-1;
+ gBlock.lang=SrcLangExt_VHDL;
+ Entry *temp=new Entry(gBlock);
+ Entry* compound=getVhdlCompound();
+
+ if (compound)
+ {
+ compound->addSubEntry(temp);
+ }
+ else
+ {
+ temp->type="misc"; // global code like library ieee...
+ VhdlParser::current_root->addSubEntry(temp);
+ }
+ strComment.resize(0);
+ gBlock.reset();
+}// makeInlineDoc
+
+
+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&)
+{
+ g_thisParser=this;
+ bool inLine=false;
+ inputString=fileBuf;
+ 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[200];
+ VhdlParserIF::parseVhdlfile(fileBuf,inLine);
+
+ delete VhdlParser::current;
+ VhdlParser::current=0;
+
+ if (!inLine)
+ VhdlParser::mapLibPackage(root);
+
+ delete lineParse;
+ yyFileName.resize(0);
+ libUse.clear();
+ VhdlDocGen::resetCodeVhdlParserState();
+}
+
+void VhdlParser::lineCount(){ yyLineNr++; }
+
+void VhdlParser::lineCount(const char* text)
+{
+ for (const char* c=text ; *c ; ++c )
+ {
+ yyLineNr += (*c == '\n') ;
+ }
+}
+
+void isVhdlDocPending()
+{
+ if (!str_doc.pending) return;
+
+ str_doc.pending=FALSE;
+ oldEntry=0; // prevents endless recursion
+ iDocLine=str_doc.iDocLine;
+ VhdlParser::handleCommentBlock(str_doc.doc,str_doc.brief);
+ iDocLine=-1;
+}
+
+void VhdlParser::initEntry(Entry *e)
+{
+ e->fileName = yyFileName;
+ e->lang = SrcLangExt_VHDL;
+ isVhdlDocPending();
+ 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);
+}
+
+bool checkInlineCode(QCString & doc)
+{
+ int index=doc.find("\\code");
+
+ if (index>0)
+ {
+ strComment+=doc;
+ startCodeBlock(index);
+ doxComment=TRUE;
+ return true;
+ }
+ return false;
+}
+
+void VhdlParser::handleFlowComment(const char* doc)
+{
+ lineCount(doc);
+ if (VhdlDocGen::getFlowMember())
+ {
+ QCString qcs(doc);
+ qcs=qcs.stripWhiteSpace();
+ qcs.stripPrefix("--#");
+ FlowChart::addFlowChart(FlowChart::COMMENT_NO,0,0,qcs.data());
+ }
+}
+
+void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
+{
+ int position=0;
+ static bool isIn;
+ QCString doc(doc1);
+ if (doc.isEmpty()) return;
+
+ if (checkMultiComment(doc,yyLineNr))
+ {
+ lineCount(doc1);
+ return;
+ }
+
+ isIn=checkInlineCode(doc);
+ bool isEndCode=doc.contains("\\endcode");
+ // empty comment --!
+ if (isEndCode)
+ {
+ int end=inputString.find(doc.data(),iCodeLen);
+ makeInlineDoc(end);
+ strComment.resize(0);
+ isIn=false;
+ }
+ if (isIn)
+ {
+ isIn=false;
+ lineCount(doc1);
+ return;
+ }
+
+ VhdlDocGen::prepareComment(doc);
+
+ bool needsEntry=FALSE;
+ Protection protection=Public;
+ int lineNr = iDocLine;
+
+ if (oldEntry==current)
+ {
+ //printf("\n find pending message < %s > at line: %d \n ",doc.data(),iDocLine);
+ str_doc.doc=doc;
+ str_doc.iDocLine=iDocLine;
+ str_doc.brief=brief;
+ str_doc.pending=TRUE;
+ return;
+ }
+
+ oldEntry=current;
+
+ if (brief)
+ {
+ current->briefLine = yyLineNr;
+ }
+ else
+ {
+ current->docLine = yyLineNr;
+ }
+ // printf("parseCommentBlock file<%s>\n [%s]\n",yyFileName.data(),doc.data());
+ while (parseCommentBlock(
+ g_thisParser,
+ current,
+ doc, // text
+ yyFileName, // file
+ lineNr, // line of block start
+ brief,
+ 0,
+ FALSE,
+ protection,
+ position,
+ needsEntry
+ )
+ )
+ {
+ //printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position);
+ if (needsEntry) newEntry();
+ }
+ if (needsEntry)
+ {
+ if (varr)
+ {
+ varr=FALSE;
+ current->name=varName;
+ current->section=Entry::VARIABLEDOC_SEC;
+ varName="";
+ }
+ newEntry();
+ }
+ lineCount(doc1);
+}
+
+void VHDLLanguageScanner::parsePrototype(const char *text)
+{
+ varName=text;
+ varr=TRUE;
+}
+
+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;u<ql.count();u++)
+ {
+ current->name=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;ii<q1.count();ii++)
+ {
+ Argument *arg=new Argument;
+ arg->name=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 (level<levelCounter)
+ {
+ if (!isLeaf)
+ {
+ pushLabel(forL,ent);
+ }
+ }
+ else if (level>levelCounter)
+ {
+ 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;u<ql.count();u++)
+ {
+ Argument *arg=new Argument;
+ arg->name=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<Entry> 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)
+{
+ lineParse[tok]=yyLineNr;
+}
+
+int VhdlParser::getLine(int tok)
+{
+ int val=lineParse[tok];
+ if (val<0) val=0;
+ //assert(val>=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;
+}
+
+bool checkMultiComment(QCString& qcs,int line)
+{
+ QList<Entry> *pTemp=getEntryAtLine(VhdlParser::current_root,line);
+
+ if (pTemp->isEmpty()) return false;
+
+ //int ii=pTemp->count();
+ // qcs.stripPrefix("--!");
+ VhdlDocGen::prepareComment(qcs);
+ while (!pTemp->isEmpty())
+ {
+ Entry *e=(Entry*)pTemp->getFirst();
+ e->briefLine=line;
+ e->brief+=qcs;
+ iDocLine=-1;
+ pTemp->removeFirst();
+ //ii=pTemp->count();
+ }
+ return true;
+}
+
+// returns the vhdl parsed types at line xxx
+QList<Entry>* getEntryAtLine(const Entry* ce,int line)
+{
+ EntryListIterator eli(*ce->children());
+ Entry *rt;
+ for (;(rt=eli.current());++eli)
+ {
+ if (rt->bodyLine==line)
+ {
+ lineEntry.insert(0,rt);
+ } // if
+
+ getEntryAtLine(rt,line);
+ }
+ return &lineEntry;
+}
+
diff --git a/src/vhdljjparser.h b/src/vhdljjparser.h
new file mode 100644
index 0000000..a0851d7
--- /dev/null
+++ b/src/vhdljjparser.h
@@ -0,0 +1,102 @@
+#ifndef VHDLJJPARSER_H
+#define VHDLJJPARSER_H
+
+#include "parserintf.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <ctype.h>
+#include <qarray.h>
+
+#include <qfile.h>
+#include <qdict.h>
+#include <string>
+#include "types.h"
+#include "entry.h"
+#include "vhdldocgen.h"
+#include "qstringlist.h"
+#include "vhdlcode.h"
+#include "memberlist.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;
+struct 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 *text);
+};
+
+struct VhdlConfNode
+{
+ 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<VhdlConfNode>& getVhdlConfiguration();
+QList<Entry>& getVhdlInstList();
+
+#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 <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include <qcstring.h>
-#include <qfileinfo.h>
-#include <qstringlist.h>
-
-/* --------------------------------------------------------------- */
-
-// 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<iCounter+1;j++)
- {
- g_buf[j]=0;
- }
-
- iCounter=0;
-}
-
-static void addText (char *word, int llen)
-{
- if ((uint)(iCounter + llen) > 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<QCString> 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 + "<p>" + 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;k<count;k++)
- {
- //printf("adding '%s' '%s'\n",ql.at(0)->data(),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<QString>::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<Argument> 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;k<count;k++)
- {
- if (sem)
- {
- current->args+=",";
- }
- 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
-
-%%
-
-<Start>{ENDPROTECTED}|{ENDPROTECEDBODY} {
- lineCount();
-}
-
-
-
-<Start>{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);
-}
-
-<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);
- }
- }
-
-<Start>{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);
-}
-
-
-<Start>{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);
- }
-}
-
-<Start>{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);
-}
-
-<Start>{FUNCPROC} { // found a new function|procedure
- lineCount();
- iFuncLine=yyLineNr;
- bropen=0;
- bufferClear();
- isFunc=1;
- addText(yytext,yyleng);
- BEGIN(FindFuncName);
-}
-
-<Start>{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);
-}
-
-<Start>{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();
-
-}
-
-<Start>{CR}* {
- lineCount();
- addText(yytext,yyleng);
- BEGIN(Start);
-}
-
-<ParseProcess>[^;()] {
- // eat process body
- lineCount();
- BEGIN(ParseProcess);
-}
-
-<ParseProcess,ParseType>{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);
-}
-
-
-<ParseUnits>{BR}* {
- lineCount();
-}
-
-<ParseUnits>{B}*[a-z_][^\n;]* { // parse record|unit body
- lineCount();
- QCString zz(yytext);
- addSignals(zz.data(),yyLineNr,current);
- BEGIN(ParseUnits);
-}
-
-<FindName>{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);
-}
-
-<FindFuncName>{FUNCNAME} { // found name of a process|function|procedure
- lineCount();
-
- addText(yytext,yyleng);
- BEGIN(ParseType);
-}
-
-<FindTypeName>{NAME}{BR}* {
- lineCount();
- current->name=QCString(yytext);
- BEGIN(ParseType);
-}
-
-
-<ParseType>("is"){BR}+("protected"){BR}+("body") {lineCount(); BEGIN(Start); }
-
-<ParseType>("is"){BR}+("protected"){BR}+ {
- lineCount();
- current->section=Entry::VARIABLE_SEC;
- current->spec=VhdlDocGen::TYPE;
- current->type="protected";
- newEntry();
- BEGIN(Start);
-}
-
-
-
-
-<ParseType>("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);
-}
-
-<ParseRecord>{BR}* {
- lineCount();
- }
-
-<ParseRecord>("end"){BR}*("record"){BR}*{LETTER}*{BR}*[;]|("end"){BR}*("units"){BR}*[;] {
- lineCount();
- genPort=0;
- bufferClear();
- BEGIN(Start);
-}
-
-<ParseRecord>[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);
-}
-
-<ParseType>{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);
-}
-
-
-<ParseType>[^;()\t ] {
- lineCount();
- addText(yytext,yyleng);
- BEGIN(ParseType);
-}
-
-<ParseType>{BRACEOPEN} {
- lineCount();
- bropen++;
- addText(yytext,yyleng);
- BEGIN(ParseType);
-}
-
-<ParseType>{BRACECLOSE} {
- lineCount();
- bropen--;
- addText(yytext,yyleng);
- if (bropen==0 && scantype==2) // process
- {
- ::parseProcessProto();
- BEGIN(ParseProcess);
- } // if
- else
- {
- BEGIN(ParseType);
- }
-}
-
-
-<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);
- }
- }
-}
-
-<ParseFunc>[^;()] {
- // eat process body
- lineCount();
- BEGIN(ParseFunc);
- }
-
-<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);
- }
-}
-
-<ParseType>";" {
- 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<QCString> 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;j<ql.count();j++)
- {
- Entry *ppt = new Entry;
- initEntry(ppt);
- ppt->type += 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);
- }
-}
-
-<ParseType>{BR}* {
- lineCount();
- addText(yytext,yyleng);
- BEGIN(ParseType);
-}
-
-<FindEntityName>{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);
- }
-}
-
-<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);
-}
-
-<FindSigName>{BRACECLOSE} {
- lineCount();
- bropen--;
- addText(yytext,yyleng);
- if (bropen==0)
- {
- bufferClear();
- BEGIN(Start);
- }
- else
- {
- BEGIN(FindSigName);
- }
-}
-
-<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<pos1) // strip normal comment before special one
- {
- line = line.remove(pos,pos1-pos);
- }
- //printf("=> 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);
- }
-}
-
-
-<FindSigName>{BRACEOPEN} {
- lineCount();
- bropen++;
- addText(yytext,yyleng);
-}
-
-
-<FindSigName>{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);
-}
-
-<Comment>^{B}*"--!"[^\n]* {
- if (iDocLine==-1) iDocLine=yyLineNr;
- addText(yytext,yyleng);
- lineCount();
-}
-
-<Comment>.|\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<Entry> *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<Argument> 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;j<count;j++)
- {
- if (sem)
- {
- pp->args+=',';
- }
-
- 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/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index c36042b..f2da28c 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -209,6 +209,11 @@ void XmlDocVisitor::visit(DocVerbatim *s)
filter(s->text());
m_t << "</msc>";
break;
+ case DocVerbatim::PlantUML:
+ m_t << "<plantuml>";
+ filter(s->text());
+ m_t << "</plantuml>";
+ break;
}
}
@@ -651,7 +656,9 @@ void XmlDocVisitor::visitPost(DocInternal *)
void XmlDocVisitor::visitPre(DocHRef *href)
{
if (m_hide) return;
- m_t << "<ulink url=\"" << href->url() << "\">";
+ m_t << "<ulink url=\"";
+ filter(href->url());
+ m_t << "\">";
}
void XmlDocVisitor::visitPost(DocHRef *)
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 2bb5734..549ff0f 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -129,10 +129,10 @@ inline void writeXMLCodeString(FTextStream &t,const char *s, int &col)
{
switch(c)
{
- case '\t':
- {
+ case '\t':
+ {
static int tabSize = Config_getInt("TAB_SIZE");
- int spacesToNextTabStop = tabSize - (col%tabSize);
+ int spacesToNextTabStop = tabSize - (col%tabSize);
col+=spacesToNextTabStop;
while (spacesToNextTabStop--) t << "<sp/>";
break;
@@ -141,11 +141,16 @@ inline void writeXMLCodeString(FTextStream &t,const char *s, int &col)
case '<': t << "&lt;"; col++; break;
case '>': t << "&gt;"; col++; break;
case '&': t << "&amp;"; col++; break;
- case '\'': t << "&apos;"; col++; break;
+ case '\'': t << "&apos;"; col++; break;
case '"': t << "&quot;"; col++; break;
- default: s=writeUtf8Char(t,s-1); col++; break;
+ case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
+ case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18:
+ case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26:
+ case 27: case 28: case 29: case 30: case 31:
+ break; // skip invalid XML characters (see http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char)
+ default: s=writeUtf8Char(t,s-1); col++; break;
}
- }
+ }
}
@@ -646,6 +651,11 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
t << " required=\"yes\"";
}
+ if (al && al->volatileSpecifier)
+ {
+ t << " volatile=\"yes\"";
+ }
+
t << " virt=\"";
switch (md->virtualness())
{
@@ -671,7 +681,6 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
{
t << " initonly=\"yes\"";
}
-
if (md->isAttribute())
{
t << " attribute=\"yes\"";
diff --git a/testing/021/indexpage.xml b/testing/021/indexpage.xml
index 38ee1ad..20e1ad2 100644
--- a/testing/021/indexpage.xml
+++ b/testing/021/indexpage.xml
@@ -4,7 +4,7 @@
<compoundname>index</compoundname>
<title>My Project</title>
<detaileddescription>
- <para> Our main function starts like this: <programlisting><codeline/></programlisting> First we create a object <computeroutput>t</computeroutput> of the <ref refid="class_test" kindref="compound">Test</ref> class. <programlisting><codeline><highlight class="normal"><sp/>*<sp/><sp/>First<sp/>we<sp/>create<sp/>a<sp/>object<sp/>\c<sp/>t<sp/>of<sp/>the<sp/><ref refid="class_test" kindref="compound">Test</ref><sp/></highlight><highlight class="keyword">class</highlight><highlight class="normal">.</highlight></codeline></programlisting> Then we call the example member function <programlisting/> After that our little test routine ends. <programlisting/> </para>
+ <para> Our main function starts like this: <programlisting><codeline><highlight class="normal">void<sp/>main()</highlight></codeline><codeline><highlight class="normal">{</highlight></codeline></programlisting> First we create a object <computeroutput>t</computeroutput> of the <ref refid="class_test" kindref="compound">Test</ref> class. <programlisting><codeline><highlight class="normal"><sp/><sp/>Test<sp/>t;</highlight></codeline></programlisting> Then we call the example member function <programlisting><codeline><highlight class="normal"><sp/><sp/>t.example();</highlight></codeline></programlisting> After that our little test routine ends. <programlisting><codeline><highlight class="normal">}</highlight></codeline></programlisting> </para>
</detaileddescription>
</compounddef>
</doxygen>
diff --git a/testing/021_dontinclude.cpp b/testing/021_dontinclude.cpp
index 9fea1c6..107991a 100644
--- a/testing/021_dontinclude.cpp
+++ b/testing/021_dontinclude.cpp
@@ -11,7 +11,7 @@ class Test
};
/*! \mainpage
- * \dontinclude 021_dontinclude.cpp
+ * \dontinclude example_test.cpp
* Our main function starts like this:
* \skip main
* \until {
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 <class T>
+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..fba0a0e
--- /dev/null
+++ b/vhdlparser/ErrorHandler.h
@@ -0,0 +1,78 @@
+/* Generated By:JavaCC: Do not edit this line. ErrorHandler.h Version 6.0 */
+/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,BUILD_PARSER=true,BUILD_TOKEN_MANAGER=true */
+#ifndef ERRORHANDLER_H
+#define ERRORHANDLER_H
+//#include <string>
+#include "JavaCC.h"
+#include "Token.h"
+
+namespace vhdl {
+namespace parser {
+
+//JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
+
+ class VhdlParser;
+ class ErrorHandler {
+ friend class VhdlParserTokenManager;
+ friend class VhdlParser;
+ 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 , Token *, 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 *, JAVACC_SIMPLE_STRING , 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 void handleOtherError(JAVACC_STRING_TYPE message, VhdlParser *) {
+ fprintf(stderr, "Error: %s\n", (char*)message.c_str());
+ }
+ virtual ~ErrorHandler() {}
+ ErrorHandler() { error_count = 0; }
+ };
+
+ class VhdlParserTokenManager;
+ class TokenManagerErrorHandler {
+ friend class VhdlParserTokenManager;
+ protected:
+ int error_count;
+ public:
+ // 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
+ //
+ virtual void lexicalError(bool EOFSeen, int /*lexState*/, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, VhdlParserTokenManager*) {
+ // by default, we just print an error message and return.
+ fprintf(stderr, "Lexical error at: %d:%d. Encountered: %c after: %s.\n", errorLine, errorColumn, curChar, (EOFSeen? "EOF" : (const char*)errorAfter.c_str()));
+ }
+ virtual void lexicalError(JAVACC_STRING_TYPE errorMessage, VhdlParserTokenManager* ) {
+ fprintf(stderr, "%s\n", (char*)errorMessage.c_str());
+ }
+ virtual ~TokenManagerErrorHandler() {}
+ };
+
+}
+}
+
+#endif
+/* JavaCC - OriginalChecksum=685d19cb4cd943b60089f599e45f23ad (do not edit this line) */
diff --git a/vhdlparser/JavaCC.h b/vhdlparser/JavaCC.h
new file mode 100644
index 0000000..b97c20d
--- /dev/null
+++ b/vhdlparser/JavaCC.h
@@ -0,0 +1,52 @@
+/* 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 <stdio.h>
+#include <string.h>
+#include <memory.h>
+#include <assert.h>
+#include <cstring>
+
+#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..b97c20d
--- /dev/null
+++ b/vhdlparser/JavaCC.h.in
@@ -0,0 +1,52 @@
+/* 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 <stdio.h>
+#include <string.h>
+#include <memory.h>
+#include <assert.h>
+#include <cstring>
+
+#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 <vhdlparser.patch
+ $(CP) JavaCC.h.in JavaCC.h
+
+distclean: clean
+ $(RM) Makefile vhdlparser.pro
+
+FORCE:
diff --git a/vhdlparser/ParseException.cc b/vhdlparser/ParseException.cc
new file mode 100644
index 0000000..31ee7a3
--- /dev/null
+++ b/vhdlparser/ParseException.cc
@@ -0,0 +1,186 @@
+/* Generated By:JavaCC: Do not edit this line. ParseException.cc Version 6.0 */
+/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
+#include "ParseException.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 generate_ParseException in the generated
+ * parser.
+ *
+ * You can modify this class to customize your error reporting
+ * mechanisms so long as you retain the fields.
+ */
+
+ /**
+ * This constructor is used by the method "generate_ParseException"
+ * in the generated parser. Calling this constructor generates
+ * a new object of this type with the fields "currentToken",
+ * "expectedTokenSequences", and "tokenImage" set.
+ */
+ ParseException::ParseException(Token currentTokenVal,
+ int** expectedTokenSequencesVal,
+ JAVACC_STRING_TYPE* tokenImageVal
+ )
+ {
+ initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal);
+ currentToken = currentTokenVal;
+ expectedTokenSequences = expectedTokenSequencesVal;
+ tokenImage = 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::ParseException() {
+ }
+
+ /** Constructor with message. */
+ ParseException::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.
+ */
+ JAVACC_STRING_TYPE ParseException::initialise(Token currentToken,
+ int** expectedTokenSequences,
+ JAVACC_STRING_TYPE* tokenImage) {
+#if 0
+ //JAVACC_STRING_TYPE eol = System.getProperty("line.separator", "\n");
+ expected = new JAVACC_STRING_TYPE();
+ int maxSize = 0;
+ for (int i = 0; i < expectedTokenSequences.length; i++) {
+ if (maxSize < expectedTokenSequences[i].length) {
+ maxSize = expectedTokenSequences[i].length;
+ }
+ for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+ expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' ');
+ }
+ if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
+ expected.append((JAVACC_CHAR_TYPE*)"...");
+ }
+ expected.append(eol).append(" ");
+ }
+ JAVACC_STRING_TYPE retval = (JAVACC_CHAR_TYPE*)"Encountered \"";
+ Token tok = currentToken.next;
+ for (int i = 0; i < maxSize; i++) {
+ if (i != 0) retval += (JAVACC_CHAR_TYPE*)" ";
+ if (tok.kind == 0) {
+ retval += tokenImage[0];
+ break;
+ }
+ retval += (JAVACC_CHAR_TYPE*)" " + tokenImage[tok.kind];
+ retval += (JAVACC_CHAR_TYPE*)" \"";
+ retval += add_escapes(tok.image);
+ retval += (JAVACC_CHAR_TYPE*)" \"";
+ tok = tok.next;
+ }
+ retval += (JAVACC_CHAR_TYPE*)"\" at line " + currentToken.next.beginLine + (JAVACC_CHAR_TYPE*)", column " + currentToken.next.beginColumn;
+ retval += (JAVACC_CHAR_TYPE*)"." + eol;
+ if (expectedTokenSequences.length == 1) {
+ retval += (JAVACC_CHAR_TYPE*)"Was expecting:" + eol + (JAVACC_CHAR_TYPE*)" ";
+ } else {
+ retval += (JAVACC_CHAR_TYPE*)"Was expecting one of:" + eol + (JAVACC_CHAR_TYPE*)" ";
+ }
+ retval += expected.toString();
+ return retval;
+#endif
+ return (JAVACC_CHAR_TYPE*)"Parse exception";
+ }
+
+ /**
+ * The end of line JAVACC_STRING_TYPE 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 ParseException::add_escapes(JAVACC_STRING_TYPE str) {
+/*
+ JAVACC_STRING_TYPE *retval = new JAVACC_STRING_TYPE();
+ JAVACC_CHAR_TYPE ch;
+ for (int i = 0; i < str.length(); i++) {
+ switch (str.charAt(i))
+ {
+ case 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;
+ case '\'':
+ retval.append("\\\'");
+ continue;
+ case '\\':
+ retval.append("\\\\");
+ continue;
+ default:
+ if ((ch = str.charAt(i)) < 0x20 || ch > 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 (<EOF>) 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..9093e6e
--- /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<JAVACC_STRING_TYPE> 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
+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=2bf63f131c8e60fd30c70d0b4f660016 (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..47ecf49
--- /dev/null
+++ b/vhdlparser/VhdlParser.cc
@@ -0,0 +1,13071 @@
+/* VhdlParser.cc */
+#include "./VhdlParser.h"
+namespace vhdl {
+namespace parser {
+ unsigned int jj_la1_0[] = {
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x90404000,0x20080000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x90004000,0x400000,0x0,0x90404000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20080000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x40000000,0x0,0x400000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x40020000,0x40020001,0x0,0x0,0x0,0x40000000,0xd0020000,0x0,0x0,0x800000,0x0,0x0,0x80004000,0x400000,0x0,0x0,0x80404000,0x0,0x0,0x0,0x0,0x8000,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x10000,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x10000000,0x0,0x50000000,0x8000,0x0,0x80000000,0x0,0x80000000,0x80000000,0x4000000,0x8000000,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x800,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x0,0x80004000,0x0,0x80004000,0x0,0x0,0x0,0x0,0x90004000,0x400000,0x0,0x0,0x90404000,0x0,0x0,0x0,0x40000000,0x0,0x0,0x80004000,0x400000,0x0,0x80404000,0x0,0x0,0x8000,0x0,0x0,0x0,0x0,0x20080000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x8000000,0x0,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80004000,0x400000,0x0,0x80404000,0x0,0x0,0x0,0x0,0x0,0x0,0x20080000,0x8000,0x0,0x0,0x41000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x2000,0x0,0x80004000,0x400000,0x0,0x80404000,0x0,0x400000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x90404000,0x20080000,0x20080000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,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,0x125808,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x0,0x0,0x1000,0x104800,0x1008,0x20000,0x125808,0x10000,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x1000,0x1000000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x20000,0x1000,0x0,0x4000000,0x4000000,0x0,0x400000,0x4000101,0x4000101,0x0,0x10,0x0,0x100,0x12024900,0x0,0x0,0x0,0x100,0x0,0x104800,0x8,0x20000,0x0,0x124808,0x0,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x81000,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x800,0x0,0x0,0x0,0x8a00000,0x0,0x0,0x1000,0x1,0x0,0x0,0x1000,0x0,0x0,0x8a00000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x40000,0x400000,0x0,0x0,0x104800,0x20000,0x124800,0x0,0x0,0x10000,0x10000,0x104800,0x8,0x20000,0x0,0x124808,0x0,0x0,0x0,0x100,0x0,0x0,0x104800,0x0,0x20000,0x124800,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x20081200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000,0x0,0x104000,0x1000000,0x1104800,0x0,0x20000,0x1124800,0x4000,0x0,0x100000,0x100000,0x0,0x104000,0x20081200,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x1104800,0x0,0x20000,0x1124800,0x0,0x104000,0x104000,0x4000001,0x1,0x0,0x4000001,0x10000,0x10000,0x10000,0x0,0x0,0x125808,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x20,0x0,0x200000,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0x200000,0x0,0x0,0x0,0x200000,0x0,0x20,0x104000,0x100000,0x100000,0x0,0x1000000,0x0,0x0,0x104000,};
+ unsigned int jj_la1_2[] = {
+0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x110000,0x28000,0x0,0x20000000,0x0,0x0,0x0,0x200000,0x0,0x0,0x0,0x4000,0x0,0x0,0x110000,0x0,0x0,0x110000,0x0,0x4000,0x4000,0x0,0x0,0x0,0x0,0x28000,0x0,0x0,0x0,0x400,0x0,0x4000,0x0,0x0,0x0,0x4000,0x0,0x4000,0x400000,0x8000,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x1000000,0x1000,0x1000,0x0,0x0,0x0,0x100,0x11000,0x0,0x0,0x0,0x0,0x0,0x110000,0x0,0x0,0x1000,0x111000,0x0,0x0,0x4000,0x0,0x400,0x8000,0x28000,0x0,0x0,0x0,0x0,0x0,0x0,0x209,0x209,0x0,0x32,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x400,0x1000,0x0,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x1000,0x20,0x0,0x0,0x0,0x10,0x800,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x1000,0x0,0x110000,0x0,0x110000,0x1000,0x0,0x0,0x0,0x110000,0x0,0x0,0x1000,0x111000,0x0,0x0,0x2,0x0,0x1000,0x0,0x110000,0x0,0x0,0x110000,0x0,0x8000,0x0,0x0,0x0,0x8000,0x0,0x20000024,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x32,0x200000,0x1000,0x0,0x0,0x20,0xc0000000,0xc0000000,0x0,0x1000000,0x0,0x800000,0x0,0x800000,0x0,0x400,0x0,0x0,0x0,0x0,0x10000,0x0,0x110000,0x0,0x110000,0x0,0x0,0x110000,0x10000,0x0,0x100000,0x100000,0x0,0x110000,0x20000024,0x0,0x0,0x0,0x600000,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x32,0x0,0x0,0x110000,0x0,0x0,0x110000,0x0,0x110000,0x110000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x110000,0x28000,0x28000,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x800,0x32,0x0,0x0,0x0,0x0,0x1000000,0x0,0x800,0x0,0x0,0x0,0x800,0x0,0x0,0x110000,0x100000,0x100000,0x0,0x0,0x2000,0x0,0x138000,};
+ unsigned int jj_la1_3[] = {
+0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x188830,0x8000000,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x80000,0x0,0x108830,0x80000,0x0,0x188830,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x2000000,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x0,0x2000000,0x0,0x0,0x80000,0x80000,0x0,0x0,0x80000,0x80000,0x0,0x4000,0x80000,0x80000,0x0,0x2000,0x0,0x0,0x128810,0x0,0x0,0x0,0x0,0x0,0x108830,0x80000,0x0,0x0,0x188830,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x30000000,0x30000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x108030,0x0,0x100030,0x100030,0x0,0x0,0x0,0x4000000,0x0,0x0,0x0,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x0,0x0,0x108030,0x0,0x4000,0x0,0x0,0x188820,0x0,0x188820,0x0,0x0,0x0,0x0,0x108830,0x80000,0x0,0x0,0x188830,0x0,0x0,0x0,0x0,0x0,0x0,0x108820,0x80000,0x0,0x188820,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd000001,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x3c0,0x0,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x108820,0x80000,0x0,0x188820,0x0,0x0,0x0,0x0,0x0,0x0,0xd000001,0x0,0x0,0x8000,0x0,0x0,0x0,0x0,0x8000000,0x20,0x0,0x0,0x0,0x40000,0x0,0x0,0x10000,0x0,0x0,0x108820,0x80000,0x0,0x188820,0x0,0x80000,0x80000,0x80000,0x0,0x0,0x80000,0x0,0x0,0x0,0x2000000,0x0,0x188830,0x8000000,0x8000000,0x100010,0x0,0x0,0x0,0x0,0x0,0x4000,0x0,0x2000000,0x0,0x0,0x8000000,0x0,0x0,0x0,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+ unsigned int jj_la1_4[] = {
+0x0,0x0,0x60000,0x30,0x40,0x100,0x0,0x0,0x0,0x0,0x40000,0x0,0x40001,0x0,0x0,0x0,0x0,0x40,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x40001,0x0,0x0,0x0,0x0,0x10000000,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x20000,0x40,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x40000,0x40000,0x40000,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x4,0x40001,0x0,0x0,0x40000,0x1,0x0,0x0,0x40000,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x40,0x40031,0x0,0x1,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x40000008,0x40000,0x40,0x1,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x1,0x0,0x0,0x0,0x40001,0x1,0x0,0x40000,0xfc00,0xfc00,0x0,0x0,0x0,0x40031,0x1,0x0,0x40,0x40,0x0,0x0,0x0,0x30,0x0,0x40001,0x0,0x80,0x0,0x40,0x40000,0x40,0x40000,0x0,0x30,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x40001,0x0,0x40001,0x0,0x1,0x0,0x40,0x40,0x40001,0x0,0x80,0x0,0x0,0x0,0x0,0x40,0x40031,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40001,0x40001,0x0,0xa0000000,0x20000000,0x0,0x1,0x40001,0x0,0x0,0x0,0x0,0x40031,0x0,0x8000000,0x40000,0x8000000,0x0,0x8000000,0x0,0x240,0x240,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x1,0x0,};
+ unsigned int jj_la1_5[] = {
+0x1420,0x0,0x1c0,0x0,0x0,0x0,0x2,0x3c0,0x0,0x0,0x1c0,0x4000000,0x40001c0,0x0,0x0,0x0,0x180,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x40001c0,0x180,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x4000000,0x4000000,0x2,0x0,0x0,0x3c0,0x3c0,0x1c0,0x1c0,0x3c0,0x380,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0x817e0,0x0,0x0,0x1e0,0x0,0x180,0x0,0x3c0,0x0,0x180,0x0,0x180,0x0,0x0,0x180,0x0,0x817e0,0x0,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x180,0x0,0x180,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x180,0x180,0x0,0x180,0x1420,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x0,0x1c0,0x0,0x0,0x0,0x180,0x1c0,0x0,0x180,0x1c0,0x0,0x0,0x180,0x0,0x180,0x817e0,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x1c0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x240,0x1c0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x817e0,0x0,0x180,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x180,0x4000000,0x40001c0,0x40001c0,0x0,0x1,0x0,0x1,0x0,0x1c0,0x0,0x0,0x0,0x0,0x817e0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x180,};
+
+ /** 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:
+ case VHDL2008TOOLDIR:{
+ ;
+ 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:
+ case VHDL2008TOOLDIR:{
+ ;
+ 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() {QCString s,s1;if (!hasError) {
+
+ if (jj_2_6(2147483647)) {if (!hasError) {
+
+ s = formal_part();
+ }
+ if (!hasError) {
+
+ jj_consume_token(ARROW_T);
+ }
+
+ } else {
+ ;
+ }
+ }
+ if (!hasError) {
+
+ s1 = actual_part();
+ }
+
+return s+" => "+s1;
+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;
+ }
+ case VHDL2008TOOLDIR:{if (!hasError) {
+
+ jj_consume_token(VHDL2008TOOLDIR);
+ }
+
+ 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:
+ case VHDL2008TOOLDIR:{
+ ;
+ 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:
+ case VHDL2008TOOLDIR:{
+ ;
+ 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,"end case",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 = simple_expression();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_11(2147483647)) {if (!hasError) {
+
+ s = discrete_range();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_12(2147483647)) {if (!hasError) {
+
+ s = identifier();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ 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) {
+
+ s1 = 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_13(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_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[50] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ assertion();
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+ }
+
+
+void VhdlParser::concurrent_procedure_call_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[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_16(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_17(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_18(2147483647)) {if (!hasError) {
+
+ block_statement();
+ }
+
+ } else if (jj_2_19(2147483647)) {if (!hasError) {
+
+ process_statement();
+ }
+
+ } else if (jj_2_20(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_21(2147483647)) {if (!hasError) {
+
+ concurrent_assertion_statement();
+ }
+
+ } else if (jj_2_22(2147483647)) {if (!hasError) {
+
+ concurrent_signal_assignment_statement();
+ }
+
+ } else if (jj_2_23(2147483647)) {if (!hasError) {
+
+ component_instantiation_statement();
+ }
+
+ } else if (jj_2_24(2147483647)) {if (!hasError) {
+
+ concurrent_procedure_call_statement();
+ }
+
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case VHDL2008TOOLDIR:{if (!hasError) {
+
+ jj_consume_token(VHDL2008TOOLDIR);
+ }
+
+ break;
+ }
+ default:
+ jj_la1[55] = jj_gen;
+ 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_25(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[56] = 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[57] = 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[58] = 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[59] = 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[60] = jj_gen;
+ goto end_label_12;
+ }if (!hasError) {
+
+ configuration_declarative_item();
+ }
+
+ }
+ end_label_12: ;
+ }
+
+ }
+
+
+void VhdlParser::configuration_item() {
+ if (jj_2_26(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[61] = 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[62] = 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[63] = jj_gen;
+ goto end_label_13;
+ }if (!hasError) {
+
+ context_item();
+ }
+
+ }
+ end_label_13: ;
+ }
+
+ }
+
+
+QCString VhdlParser::constraint() {QCString s;
+ if (jj_2_27(2147483647)) {if (!hasError) {
+
+ s = range_constraint();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_28(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[64] = 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[65] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(INERTIAL_T);
+ }
+ if (!hasError) {
+
+return s+" inertial ";
+ }
+
+ break;
+ }
+ default:
+ jj_la1[66] = 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[67] = jj_gen;
+ goto end_label_14;
+ }
+ }
+ end_label_14: ;
+ }
+ if (!hasError) {
+
+
+ }
+
+ break;
+ }
+ case 0:{if (!hasError) {
+
+ jj_consume_token(0);
+ }
+
+ break;
+ }
+ default:
+ jj_la1[68] = 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[69] = 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[70] = 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_29(2147483647)) {if (!hasError) {
+
+ s = range();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_30(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_31(2147483647)) {if (!hasError) {
+
+ s = choices();
+ }
+ if (!hasError) {
+
+ jj_consume_token(ARROW_T);
+ }
+
+ } else {
+ ;
+ }
+ }
+ if (!hasError) {
+
+ s1 = expression();
+ }
+
+if(!s.isEmpty())
+ return s+"=>"+s1;
+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[71] = 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[72] = 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[73] = 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[74] = 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[75] = 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) {
+
+ 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[76] = 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[77] = 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[78] = jj_gen;
+ ;
+ }
+ }
+ 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[79] = jj_gen;
+ if (jj_2_32(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[80] = jj_gen;
+ if (jj_2_33(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[81] = jj_gen;
+ if (jj_2_34(5)) {if (!hasError) {
+
+ package_instantiation_declaration();
+ }
+
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case PACKAGE_T:{if (!hasError) {
+
+ package_declaration();
+ }
+
+ break;
+ }
+ case VHDL2008TOOLDIR:{if (!hasError) {
+
+ jj_consume_token(VHDL2008TOOLDIR);
+ }
+
+ break;
+ }
+ default:
+ jj_la1[82] = 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:
+ case VHDL2008TOOLDIR:{
+ ;
+ break;
+ }
+ default:
+ jj_la1[83] = 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[84] = 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[85] = 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[86] = 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[87] = 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[88] = 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_35(2147483647)) {if (!hasError) {
+
+ concurrent_assertion_statement();
+ }
+
+ } else if (jj_2_36(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[89] = 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[90] = 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[91] = 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[92] = 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[93] = 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[94] = 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[95] = 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[96] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+lab.resize(0);
+ if(t) s+=":";
+ if(t1) s2.prepend(" when ");
+ FlowChart::addFlowChart(FlowChart::EXIT_NO,"exit",s2.data(),s1.data());
+
+ 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[97] = 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[98] = 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[99] = 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[100] = 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[101] = 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[102] = 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[103] = 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[104] = 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) {
+
+ generate_statement_body1();
+ }
+ 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[105] = 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[106] = 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[107] = 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[108] = jj_gen;
+ goto end_label_21;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s = group_constituent();
+ }
+ if (!hasError) {
+
+s2+=",";s2+=s1;
+ }
+
+ }
+ end_label_21: ;
+ }
+
+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[109] = 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[110] = jj_gen;
+ goto end_label_22;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ str1 = identifier();
+ }
+ if (!hasError) {
+
+str+=",";str+=str1;
+ }
+
+ }
+ end_label_22: ;
+ }
+
+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[111] = 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[112] = jj_gen;
+ goto end_label_23;
+ }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_23: ;
+ }
+ 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[113] = 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[114] = 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[115] = jj_gen;
+ goto end_label_24;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s1 = discrete_range();
+ }
+ if (!hasError) {
+
+s+=",";s+=s1;
+ }
+
+ }
+ end_label_24: ;
+ }
+ if (!hasError) {
+
+ jj_consume_token(RPAREN_T);
+ }
+
+return s+")";
+assert(false);
+ }
+
+
+QCString VhdlParser::index_specification() {QCString s;
+ if (jj_2_37(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[116] = 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[117] = 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[118] = 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[119] = 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[120] = 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_38(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[121] = jj_gen;
+ if (jj_2_39(5)) {if (!hasError) {
+
+ s = interface_variable_declaration();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_40(5)) {if (!hasError) {
+
+ interface_file_declaration();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_41(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[122] = 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[123] = jj_gen;
+ goto end_label_25;
+ }if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+ if (!hasError) {
+
+ s1 = interface_element();
+ }
+ if (!hasError) {
+
+s2+=";";s2+=s1;
+ }
+
+ }
+ end_label_25: ;
+ }
+
+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[124] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+ }
+
+ break;
+ }
+ default:
+ jj_la1[125] = 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[126] = 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[127] = 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[128] = 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(),s1.data(),s2.data(),s3.data(),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 <<port %s >>\n",$$.data());
+ } // if component
+ return it;
+assert(false);
+ }
+
+
+QCString VhdlParser::iteration_scheme() {QCString s;
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case WHILE_T:{if (!hasError) {
+
+ jj_consume_token(WHILE_T);
+ }
+ if (!hasError) {
+
+ s = condition();
+ }
+ if (!hasError) {
+
+s.prepend("while ");
+ FlowChart::addFlowChart(FlowChart::WHILE_NO,0,s.data(),lab.data());
+ lab="";
+ return s;
+ }
+
+ break;
+ }
+ case FOR_T:{if (!hasError) {
+
+ jj_consume_token(FOR_T);
+ }
+ if (!hasError) {
+
+ s = parameter_specification();
+ }
+ if (!hasError) {
+
+QCString q=lab+" for "+s;
+ FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
+ lab="";
+ return q;
+ }
+
+ break;
+ }
+ default:
+ jj_la1[129] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+assert(false);
+ }
+
+
+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_42(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[130] = 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_43(2147483647)) {if (!hasError) {
+
+ s = bit_string_literal();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_44(2147483647)) {if (!hasError) {
+
+ s = numeric_literal();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_45(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[131] = 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);
+ }
+
+
+QCString VhdlParser::loop_statement() {QCString s,s1,s2,s3;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[132] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case FOR_T:
+ case WHILE_T:{if (!hasError) {
+
+ s1 = iteration_scheme();
+ }
+
+ break;
+ }
+ default:
+ jj_la1[133] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+if(s1.isEmpty())
+ FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
+ }
+ if (!hasError) {
+
+ jj_consume_token(LOOP_T);
+ }
+ if (!hasError) {
+
+ s2 = 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) {
+
+ s3 = identifier();
+ }
+
+ break;
+ }
+ default:
+ jj_la1[134] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+QCString q = s+" loop "+s2+" end loop" +s3;
+ QCString endLoop="end loop" + s3;
+ FlowChart::moveToPrevLevel();
+ FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0);
+ return q;
+assert(false);
+ }
+
+
+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[135] = 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[136] = 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[137] = 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[138] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+ }
+ if (!hasError) {
+
+ if (jj_2_46(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_47(2147483647)) {
+ ;
+ } else {
+ goto end_label_26;
+ }if (!hasError) {
+
+ s1 = name_ext();
+ }
+ if (!hasError) {
+
+s+=s1;
+ }
+
+ }
+ end_label_26: ;
+ }
+
+return s;
+assert(false);
+ }
+
+
+QCString VhdlParser::name_ext() {QCString s,s1,s2;if (!hasError) {
+
+ if (jj_2_48(2147483647)) {if (!hasError) {
+
+ jj_consume_token(DOT_T);
+ }
+ if (!hasError) {
+
+ s1 = suffix();
+ }
+ if (!hasError) {
+
+s+=".";s+=s1;
+ }
+
+ } else if (jj_2_49(2147483647)) {if (!hasError) {
+
+ s1 = test_att_name();
+ }
+ if (!hasError) {
+
+s+=s1;
+ }
+
+ } else if (jj_2_50(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_51(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[139] = jj_gen;
+ goto end_label_27;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s1 = expression();
+ }
+ if (!hasError) {
+
+s+=",";s+=s1;
+ }
+
+ }
+ end_label_27: ;
+ }
+ 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_52(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[140] = 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[141] = jj_gen;
+ goto end_label_28;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s1 = expression();
+ }
+ if (!hasError) {
+
+s+=",";s+=s1;
+ }
+
+ }
+ end_label_28: ;
+ }
+ 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[142] = 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[143] = 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[144] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+if(t) s+=":";
+ FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data());
+ lab.resize(0);
+ 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[145] = 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_53(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[146] = 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[147] = 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[148] = 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[149] = 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[150] = 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[151] = 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[152] = jj_gen;
+ if (jj_2_54(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[153] = 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[154] = jj_gen;
+ goto end_label_29;
+ }if (!hasError) {
+
+ package_body_declarative_item();
+ }
+
+ }
+ end_label_29: ;
+ }
+
+ }
+
+
+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[155] = 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[156] = 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[157] = jj_gen;
+ ;
+ }
+ }
+
+ break;
+ }
+ default:
+ jj_la1[158] = 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[159] = jj_gen;
+ if (jj_2_55(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[160] = jj_gen;
+ if (jj_2_56(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[161] = jj_gen;
+ if (jj_2_57(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[162] = 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[163] = jj_gen;
+ goto end_label_30;
+ }if (!hasError) {
+
+ package_declarative_item();
+ }
+
+ }
+ end_label_30: ;
+ }
+
+ }
+
+
+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_58(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[164] = jj_gen;
+ goto end_label_31;
+ }if (!hasError) {
+
+ s1 = secondary_unit_declaration();
+ }
+ if (!hasError) {
+
+s2+=s1;s2+="#";
+ }
+
+ }
+ end_label_31: ;
+ }
+ 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[165] = 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_59(2147483647)) {if (!hasError) {
+
+ s = function_call();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_60(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_61(2147483647)) {if (!hasError) {
+
+ s = qualified_expression();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_62(2147483647)) {if (!hasError) {
+
+ s = type_conversion();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_63(2147483647)) {if (!hasError) {
+
+ s = literal();
+ }
+ if (!hasError) {
+
+s.prepend(" ");return s;
+ }
+
+ } else if (jj_2_64(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[166] = 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[167] = jj_gen;
+ if (jj_2_65(2147483647)) {if (!hasError) {
+
+ package_instantiation_declaration();
+ }
+
+ } else if (jj_2_66(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[168] = 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[169] = jj_gen;
+ ;
+ }
+ }
+
+return s+s1;
+assert(false);
+ }
+
+
+QCString VhdlParser::procedure_call_statement() {QCString s,s1;if (!hasError) {
+
+ if (jj_2_67(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[170] = jj_gen;
+ if (jj_2_68(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[171] = jj_gen;
+ if (jj_2_69(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[172] = 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[173] = jj_gen;
+ goto end_label_32;
+ }if (!hasError) {
+
+ s1 = process_declarative_item();
+ }
+ if (!hasError) {
+
+s+=s1;
+ }
+
+ }
+ end_label_32: ;
+ }
+
+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[174] = 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[175] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+currP=VhdlDocGen::PROCESS;
+ current->startLine=getLine();
+ current->bodyLine=getLine();
+ }
+ if (!hasError) {
+
+ jj_consume_token(PROCESS_T);
+ }
+ 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[176] = 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[177] = 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[178] = 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[179] = jj_gen;
+ ;
+ }
+ }
+ 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[180] = 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[181] = jj_gen;
+ goto end_label_33;
+ }if (!hasError) {
+
+ sequential_statement();
+ }
+
+ }
+ end_label_33: ;
+ }
+
+ }
+
+
+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_70(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[182] = 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_71(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_72(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) {
+
+ 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[183] = jj_gen;
+ goto end_label_34;
+ }
+ }
+ end_label_34: ;
+ }
+ 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[184] = 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[185] = 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[186] = 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[187] = 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[188] = 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[189] = 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[190] = 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_73(2147483647)) {if (!hasError) {
+
+ s1 = physical_type_definition();
+ }
+
+ } else {
+ ;
+ }
+ }
+ if (!hasError) {
+
+s+=" ";s+=s1;return s;
+ }
+
+ break;
+ }
+ default:
+ jj_la1[191] = 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[192] = 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[193] = jj_gen;
+ goto end_label_35;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ waveform();
+ }
+ if (!hasError) {
+
+ jj_consume_token(WHEN_T);
+ }
+ if (!hasError) {
+
+ choices();
+ }
+
+ }
+ end_label_35: ;
+ }
+
+ }
+
+
+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[194] = jj_gen;
+ goto end_label_36;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s1 = name();
+ }
+ if (!hasError) {
+
+s+=",";s+=s1;
+ }
+
+ }
+ end_label_36: ;
+ }
+
+return s;
+assert(false);
+ }
+
+
+QCString VhdlParser::sequence_of_statement() {QCString s,s1;if (!hasError) {
+
+ while (!hasError) {
+ if (jj_2_74(3)) {
+ ;
+ } else {
+ goto end_label_37;
+ }if (!hasError) {
+
+ s1 = sequential_statement();
+ }
+ if (!hasError) {
+
+s+=s1;
+ }
+
+ }
+ end_label_37: ;
+ }
+
+return s;
+assert(false);
+ }
+
+
+QCString VhdlParser::sequential_statement() {QCString s;
+ if (jj_2_75(2147483647)) {if (!hasError) {
+
+ s = signal_assignment_statement();
+ }
+ if (!hasError) {
+
+FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
+ }
+
+ } else if (jj_2_76(3)) {if (!hasError) {
+
+ s = assertion_statement();
+ }
+ if (!hasError) {
+
+FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
+ }
+
+ } else if (jj_2_77(3)) {if (!hasError) {
+
+ s = report_statement();
+ }
+ if (!hasError) {
+
+FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
+ }
+
+ } else if (jj_2_78(3)) {if (!hasError) {
+
+ s = wait_statement();
+ }
+ if (!hasError) {
+
+FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
+ }
+
+ } else if (jj_2_79(2147483647)) {if (!hasError) {
+
+ s = variable_assignment_statement();
+ }
+ if (!hasError) {
+
+FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
+ }
+
+ } else if (jj_2_80(3)) {if (!hasError) {
+
+ s = procedure_call_statement();
+ }
+ if (!hasError) {
+
+FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
+ }
+
+ } else if (jj_2_81(3)) {if (!hasError) {
+
+ if_statement();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_82(3)) {if (!hasError) {
+
+ case_statement();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_83(3)) {if (!hasError) {
+
+ loop_statement();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_84(3)) {if (!hasError) {
+
+ s = next_statement();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_85(3)) {if (!hasError) {
+
+ s = exit_statement();
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ } else if (jj_2_86(3)) {if (!hasError) {
+
+ s = return_statement();
+ }
+ if (!hasError) {
+
+FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);return s;
+ }
+
+ } 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);return s;
+ }
+
+ break;
+ }
+ default:
+ jj_la1[195] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+ }
+assert(false);
+ }
+
+
+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[196] = 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[197] = 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[198] = 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_88(2147483647)) {if (!hasError) {
+
+ conditional_signal_assignment_wave();
+ }
+ if (!hasError) {
+
+return "";
+ }
+
+ } else if (jj_2_89(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_87(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[199] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ s3 = waveform();
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+ if (!hasError) {
+
+return s+s1+"<="+s2+s3+";";
+ }
+
+ break;
+ }
+ default:
+ jj_la1[200] = 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() {Token* tok=0;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[201] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case VARASSIGN_T:{if (!hasError) {
+
+ tok = jj_consume_token(VARASSIGN_T);
+ }
+ if (!hasError) {
+
+ s3 = expression();
+ }
+
+ break;
+ }
+ default:
+ jj_la1[202] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+if(tok)
+ s3.prepend(":=");
+ 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[203] = 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[204] = 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: ;
+ }
+
+ 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[205] = 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[206] = jj_gen;
+ goto end_label_39;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s1 = name();
+ }
+ if (!hasError) {
+
+s+=",";s+=s1;
+ }
+
+ }
+ end_label_39: ;
+ }
+
+ break;
+ }
+ default:
+ jj_la1[207] = 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[208] = 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[209] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ s1 = term();
+ }
+ if (!hasError) {
+
+s+=s1;
+ }
+ if (!hasError) {
+
+ while (!hasError) {
+ if (jj_2_90(2147483647)) {
+ ;
+ } else {
+ goto end_label_40;
+ }if (!hasError) {
+
+ s1 = adding_operator();
+ }
+ if (!hasError) {
+
+ s2 = term();
+ }
+ if (!hasError) {
+
+s+=s1;s+=s2;
+ }
+
+ }
+ end_label_40: ;
+ }
+
+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{
+ s = subprogram_declarative_part();
+ }
+ if (!hasError) {
+
+if (s.data())
+ {
+ FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s,0);
+ }
+ FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
+ }
+ 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[210] = 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[211] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+tempEntry->endBodyLine=getLine(END_T);
+ createFlow();
+ currP=0;
+ }
+
+
+void VhdlParser::subprogram_declaration() {
+ if (jj_2_91(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[212] = 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[213] = 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[214] = jj_gen;
+ if (jj_2_92(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[215] = jj_gen;
+ if (jj_2_93(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[216] = 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[217] = jj_gen;
+ goto end_label_41;
+ }if (!hasError) {
+
+ s1 = subprogram_declarative_item();
+ }
+ if (!hasError) {
+
+s+=s1;
+ }
+
+ }
+ end_label_41: ;
+ }
+
+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[218] = 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[219] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ if (jj_2_94(2)) {if (!hasError) {
+
+ gen_interface_list();
+ }
+
+ } else {
+ ;
+ }
+ }
+ if (!hasError) {
+
+ if (jj_2_95(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[220] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+ }
+
+ break;
+ }
+ default:
+ jj_la1[221] = 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[222] = 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[223] = 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[224] = jj_gen;
+ goto end_label_42;
+ }if (!hasError) {
+
+ sequential_statement();
+ }
+
+ }
+ end_label_42: ;
+ }
+
+ }
+
+
+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_96(2147483647)) {if (!hasError) {
+
+ s1 = name();
+ }
+
+ } else {
+ ;
+ }
+ }
+ if (!hasError) {
+
+ if (jj_2_97(2147483647)) {if (!hasError) {
+
+ s2 = constraint();
+ }
+
+ } else {
+ ;
+ }
+ }
+
+return s+" "+s1+" "+s2;
+assert(false);
+ }
+
+
+QCString VhdlParser::suffix() {QCString s;
+ if (jj_2_98(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[225] = 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[226] = 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_99(2)) {
+ ;
+ } else {
+ goto end_label_43;
+ }if (!hasError) {
+
+ s1 = multiplying_operation();
+ }
+ if (!hasError) {
+
+ s2 = factor();
+ }
+ if (!hasError) {
+
+s+=s1;s+=s2;
+ }
+
+ }
+ end_label_43: ;
+ }
+
+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_100(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[227] = 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[228] = jj_gen;
+ if (jj_2_101(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[229] = 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[230] = jj_gen;
+ goto end_label_44;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s1 = index_subtype_definition();
+ }
+ if (!hasError) {
+
+s3+=",";s3+=s1;
+ }
+
+ }
+ end_label_44: ;
+ }
+ 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[231] = jj_gen;
+ goto end_label_45;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s1 = selected_name();
+ }
+ if (!hasError) {
+
+s+=",";s+=s1;
+ }
+
+ }
+ end_label_45: ;
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+QStringList ql1=QStringList::split(",",s,FALSE);
+ for (uint j=0;j<ql1.count();j++)
+ {
+ QStringList ql=QStringList::split(".",ql1[j],FALSE);
+ QCString it=ql[1].utf8();
+ if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
+ {
+ VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
+ }
+ }
+ s1="use "+s;
+ return s1;
+assert(false);
+ }
+
+
+QCString VhdlParser::variable_assignment_statement() {QCString s,s1,s2;
+ 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_102(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(VARASSIGN_T);
+ }
+ if (!hasError) {
+
+ s2 = expression();
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+ if (!hasError) {
+
+return s+s1+":="+s2+";";
+ }
+
+ break;
+ }
+ case WITH_T:{if (!hasError) {
+
+ selected_variable_assignment();
+ }
+ if (!hasError) {
+
+return "";
+ }
+
+ break;
+ }
+ default:
+ jj_la1[232] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+assert(false);
+ }
+
+
+QCString VhdlParser::variable_declaration() {Token *tok=0;Token *t1=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[233] = 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) {
+
+ t1 = jj_consume_token(VARASSIGN_T);
+ }
+ if (!hasError) {
+
+ s2 = expression();
+ }
+
+ break;
+ }
+ default:
+ jj_la1[234] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+int spec;
+ if(t1)
+ s2.prepend(":=");
+ QCString val=" variable "+s+":"+s1+s2+";";
+ QCString it=s1;
+ if(tok != 0)
+ {
+ it.prepend(" shared ");
+ val.prepend(" shared");
+ spec=VhdlDocGen::SHAREDVARIABLE;
+ }
+ else
+ spec=VhdlDocGen::SHAREDVARIABLE;
+
+ if(t1){
+ it+=":=";
+ it+=s2;
+ }
+ 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) {
+
+ t = jj_consume_token(COLON_T);
+ }
+
+ break;
+ }
+ default:
+ jj_la1[235] = 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[236] = 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[237] = 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[238] = 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[239] = jj_gen;
+ goto end_label_46;
+ }if (!hasError) {
+
+ jj_consume_token(COMMA_T);
+ }
+ if (!hasError) {
+
+ s1 = waveform_element();
+ }
+ if (!hasError) {
+
+s+=","; s+=s1;
+ }
+
+ }
+ end_label_46: ;
+ }
+ if (!hasError) {
+
+return s;
+ }
+
+ break;
+ }
+ case UNAFFECTED_T:{if (!hasError) {
+
+ jj_consume_token(UNAFFECTED_T);
+ }
+ if (!hasError) {
+
+return " unaffected ";
+ }
+
+ break;
+ }
+ default:
+ jj_la1[240] = 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[241] = jj_gen;
+ ;
+ }
+ }
+
+return s+s1;
+assert(false);
+ }
+
+
+QCString VhdlParser::protected_type_body() {if (!hasError) {
+
+ jj_consume_token(PROTECTED_T);
+ }
+ if (!hasError) {
+
+ jj_consume_token(BODY_T);
+ }
+ if (!hasError) {
+
+ protected_type_body_declarative_part();
+ }
+ 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[242] = 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[243] = jj_gen;
+ if (jj_2_103(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[244] = jj_gen;
+ if (jj_2_104(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[245] = 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[246] = jj_gen;
+ goto end_label_47;
+ }if (!hasError) {
+
+ protected_type_body_declarative_item();
+ }
+
+ }
+ end_label_47: ;
+ }
+
+ }
+
+
+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[247] = 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[248] = 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[249] = jj_gen;
+ goto end_label_48;
+ }if (!hasError) {
+
+ protected_type_declarative_item();
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+ }
+ end_label_48: ;
+ }
+
+ }
+
+
+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[250] = jj_gen;
+ goto end_label_49;
+ }if (!hasError) {
+
+ s1 = libustcont_stats();
+ }
+
+ }
+ end_label_49: ;
+ }
+ 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[251] = 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[252] = 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[253] = 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[254] = 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[255] = 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[256] = 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_105(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_106(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[257] = jj_gen;
+ goto end_label_50;
+ }
+ }
+ end_label_50: ;
+ }
+
+ }
+
+
+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[258] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+ }
+
+
+void VhdlParser::generate_statement_body() {if (!hasError) {
+
+ jj_consume_token(BEGIN_T);
+ }
+ if (!hasError) {
+
+ generate_statement_body();
+ }
+
+ }
+
+
+void VhdlParser::generate_statement_body1() {
+ if (jj_2_107(2147483647)) {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:
+ case VHDL2008TOOLDIR:{
+ ;
+ break;
+ }
+ default:
+ jj_la1[259] = jj_gen;
+ goto end_label_51;
+ }if (!hasError) {
+
+ block_declarative_item();
+ }
+
+ }
+ end_label_51: ;
+ }
+ if (!hasError) {
+
+ jj_consume_token(BEGIN_T);
+ }
+ 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:
+ case VHDL2008TOOLDIR:{
+ ;
+ break;
+ }
+ default:
+ jj_la1[260] = jj_gen;
+ goto end_label_52;
+ }if (!hasError) {
+
+ concurrent_statement();
+ }
+
+ }
+ end_label_52: ;
+ }
+
+ } else {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:
+ case VHDL2008TOOLDIR:{
+ ;
+ break;
+ }
+ default:
+ jj_la1[261] = 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[262] = 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[263] = 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_108(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[264] = 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_109(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[265] = 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[266] = 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_110(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_111(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[267] = 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[268] = 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[269] = 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[270] = 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[271] = 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[272] = jj_gen;
+ ;
+ }
+ }
+ if (!hasError) {
+
+ jj_consume_token(SEMI_T);
+ }
+
+ }
+
+
+void VhdlParser::selected_signal_assignment_wave() {
+ if (jj_2_112(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[273] = 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[274] = 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_113(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[275] = 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[276] = 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[277] = 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[278] = 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[279] = 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[280] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+ }
+
+ }
+ if (!hasError) {
+
+ while (!hasError) {
+ if (jj_2_114(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[281] = 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[282] = 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[283] = 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[284] = jj_gen;
+ ;
+ }
+ }
+
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case ELSE_T:{
+ ;
+ break;
+ }
+ default:
+ jj_la1[285] = 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[286] = 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[287] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+ break;
+ }
+ default:
+ jj_la1[288] = 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[289] = jj_gen;
+ jj_consume_token(-1);
+ errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
+ }
+ }
+
+ break;
+ }
+ default:
+ jj_la1[290] = 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[291] = 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[292] = 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[293] = 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 < 294; 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 < 114; 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 < 114; 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;
+ case 112: jj_3_113(); break;
+ case 113: jj_3_114(); 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..78450d1
--- /dev/null
+++ b/vhdlparser/VhdlParser.h
@@ -0,0 +1,8984 @@
+#ifndef VHDLPARSER_H
+#define VHDLPARSER_H
+#include "JavaCC.h"
+#include "CharStream.h"
+#include "Token.h"
+#include "TokenManager.h"
+#include "VhdlParserTokenManager.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();
+
+QCString iteration_scheme();
+
+QCString label();
+
+QCString library_clause();
+
+QCString library_unit();
+
+QCString literal();
+
+QCString logical_operator();
+
+QCString 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();
+
+QCString sequence_of_statement();
+
+QCString 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();
+
+void generate_statement_body1();
+
+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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { 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;
+ { jj_save(111, xla); }
+ }
+
+ inline bool jj_2_113(int xla)
+ {
+ jj_la = xla; jj_lastpos = jj_scanpos = token;
+ jj_done = false;
+ return !jj_3_113() || jj_done;
+ { jj_save(112, xla); }
+ }
+
+ inline bool jj_2_114(int xla)
+ {
+ jj_la = xla; jj_lastpos = jj_scanpos = token;
+ jj_done = false;
+ return !jj_3_114() || jj_done;
+ { jj_save(113, xla); }
+ }
+
+ inline bool jj_3R_430()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(INOUT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_429()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OUT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_346()
+ {
+ 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()) return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_428()
+ {
+ 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_367()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_257()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_625()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_45()
+ {
+ if (jj_done) return true;
+ if (jj_3R_97()) return true;
+ return false;
+ }
+
+ inline bool jj_3_44()
+ {
+ 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_3_43()
+ {
+ if (jj_done) return true;
+ if (jj_3R_95()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_232()
+ {
+ if (jj_done) return true;
+ if (jj_3R_356()) 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_42()
+ {
+ if (jj_done) return true;
+ if (jj_3R_94()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_140()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_444()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FOR_T)) return true;
+ if (jj_3R_408()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_367()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_443()) {
+ jj_scanpos = xsp;
+ if (jj_3R_444()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_443()
+ {
+ 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_346()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_400()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ if (jj_3R_399()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_196()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(116)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(100)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(31)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(101)) 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(27)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_199()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_313()
+ {
+ if (jj_done) return true;
+ if (jj_3R_399()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_400()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_413()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_70()) 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_399()
+ {
+ if (jj_done) return true;
+ if (jj_3R_491()) return true;
+ return false;
+ }
+
+ inline bool jj_3_41()
+ {
+ if (jj_done) return true;
+ if (jj_3R_93()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_552()
+ {
+ if (jj_done) return true;
+ if (jj_3R_613()) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_551()
+ {
+ if (jj_done) return true;
+ if (jj_3R_93()) return true;
+ return false;
+ }
+
+ inline bool jj_3_40()
+ {
+ if (jj_done) return true;
+ if (jj_3R_92()) return true;
+ return false;
+ }
+
+ inline bool jj_3_39()
+ {
+ if (jj_done) return true;
+ if (jj_3R_91()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_550()
+ {
+ if (jj_done) return true;
+ if (jj_3R_108()) return true;
+ return false;
+ }
+
+ inline bool jj_3_38()
+ {
+ if (jj_done) return true;
+ if (jj_3R_90()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_491()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_38()) {
+ jj_scanpos = xsp;
+ if (jj_3R_550()) {
+ jj_scanpos = xsp;
+ if (jj_3_39()) {
+ jj_scanpos = xsp;
+ if (jj_3_40()) {
+ jj_scanpos = xsp;
+ if (jj_3R_551()) {
+ jj_scanpos = xsp;
+ if (jj_3R_552()) return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_621()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_69()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_416()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ALL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_415()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OTHER_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_331()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_414()) {
+ jj_scanpos = xsp;
+ if (jj_3R_415()) {
+ jj_scanpos = xsp;
+ if (jj_3R_416()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_414()
+ {
+ if (jj_done) return true;
+ if (jj_3R_197()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_698()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_328()
+ {
+ 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_327()
+ {
+ 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_413()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_174()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_326()) {
+ jj_scanpos = xsp;
+ if (jj_3R_327()) {
+ jj_scanpos = xsp;
+ if (jj_3R_328()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3_37()
+ {
+ if (jj_done) return true;
+ if (jj_3R_69()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_326()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_155()
+ {
+ if (jj_done) return true;
+ if (jj_3R_158()) return true;
+ if (jj_scan_token(RANGE_T)) return true;
+ if (jj_scan_token(BOX_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_427()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(IS_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_698()) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(145)) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_618()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_617()
+ {
+ if (jj_done) return true;
+ if (jj_3R_69()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_565()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_617()) {
+ jj_scanpos = xsp;
+ if (jj_3R_618()) 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_69()) 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_620()
+ {
+ 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_526()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(TYPE_T)) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_619()
+ {
+ 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_345()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_514()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_313()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_255()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_619()) { jj_scanpos = xsp; break; }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_620()) 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_621()) 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_70()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_345()) { 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_70()
+ {
+ 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_539()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_538()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_425()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(77)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_514()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3_114()
+ {
+ 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_66()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(GROUP_T)) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(IS_T)) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_475()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_386()
+ {
+ 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(134)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(137)) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_447()
+ {
+ if (jj_done) return true;
+ if (jj_3R_523()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_383()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(GROUP_T)) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_476()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_524()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_449()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_540()
+ {
+ 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_305()
+ {
+ if (jj_done) return true;
+ if (jj_3R_384()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_476()
+ {
+ if (jj_done) return true;
+ if (jj_3R_538()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_539()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_426()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(84)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(52)) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_344()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_426()) jj_scanpos = xsp;
+ if (jj_scan_token(FUNCTION_T)) return true;
+ if (jj_3R_60()) return true;
+ if (jj_3R_425()) return true;
+ if (jj_scan_token(RETURN_T)) return true;
+ if (jj_3R_60()) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_427()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_171()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_608()
+ {
+ if (jj_done) return true;
+ if (jj_3R_352()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_607()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_538()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_607()) {
+ jj_scanpos = xsp;
+ if (jj_3R_608()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_71()
+ {
+ 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_166()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_304()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ if (jj_3R_385()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_343()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PROCEDURE_T)) return true;
+ if (jj_3R_70()) return true;
+ if (jj_3R_425()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_195()
+ {
+ if (jj_done) return true;
+ if (jj_3R_344()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_159()
+ {
+ if (jj_done) return true;
+ if (jj_3R_313()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_194()
+ {
+ if (jj_done) return true;
+ if (jj_3R_343()) 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_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_159()) return true;
+ if (jj_scan_token(RPAREN_T)) 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(ELSE_T)) return true;
+ if (jj_3R_59()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_540()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_385()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ if (jj_3R_477()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_477()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_322()
+ {
+ 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_169()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_321()) {
+ jj_scanpos = xsp;
+ if (jj_3R_322()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_321()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FOR_T)) return true;
+ if (jj_3R_408()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_384()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(53)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(75)) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_448()
+ {
+ if (jj_done) return true;
+ if (jj_3R_405()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_449()
+ {
+ if (jj_done) return true;
+ if (jj_3R_446()) 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_524()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_464()
+ {
+ if (jj_done) return true;
+ if (jj_3R_528()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_75()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_169()) return true;
+ if (jj_scan_token(GENERATE_T)) return true;
+ if (jj_3R_170()) return true;
+ if (jj_scan_token(END_T)) return true;
+ if (jj_scan_token(GENERATE_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_171()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_306()
+ {
+ 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(134)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(137)) return true;
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_386()) { jj_scanpos = xsp; break; }
+ }
+ 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_303()
+ {
+ if (jj_done) return true;
+ if (jj_3R_384()) return true;
+ return false;
+ }
+
+ inline bool jj_3_110()
+ {
+ if (jj_done) return true;
+ if (jj_3R_143()) return true;
+ if (jj_scan_token(DOT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_145()
+ {
+ 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(155)) 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_305()) jj_scanpos = xsp;
+ if (jj_3R_306()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_157()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_312()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_113()
+ {
+ if (jj_done) return true;
+ if (jj_3R_109()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_369()
+ {
+ 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(155)) jj_scanpos = xsp;
+ if (jj_3R_115()) return true;
+ if (jj_scan_token(LESSTHAN_T)) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_448()) jj_scanpos = xsp;
+ if (jj_3R_449()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_301()
+ {
+ if (jj_done) return true;
+ if (jj_3R_143()) return true;
+ if (jj_scan_token(DOT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_689()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_137()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(TYPE_T)) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(IS_T)) return true;
+ if (jj_3R_577()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_575()
+ {
+ 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_688()
+ {
+ if (jj_done) return true;
+ if (jj_3R_109()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_662()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_688()) {
+ jj_scanpos = xsp;
+ if (jj_3R_689()) return true;
+ }
+ 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_157()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_398()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(INTEGER)) return true;
+ return false;
+ }
+
+ inline bool jj_3_112()
+ {
+ if (jj_done) return true;
+ if (jj_3R_145()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_570()
+ {
+ if (jj_done) return true;
+ if (jj_3R_313()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_521()
+ {
+ 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(155)) jj_scanpos = xsp;
+ if (jj_3R_662()) return true;
+ if (jj_scan_token(VARASSIGN_T)) return true;
+ if (jj_3R_306()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_445()
+ {
+ if (jj_done) return true;
+ if (jj_3R_405()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_312()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_397()) {
+ jj_scanpos = xsp;
+ if (jj_3R_398()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_397()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_271()
+ {
+ if (jj_done) return true;
+ if (jj_3R_369()) 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_145()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_144()
+ {
+ 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_303()) jj_scanpos = xsp;
+ if (jj_3R_59()) return true;
+ if (jj_scan_token(WHEN_T)) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_304()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_654()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FILE_T)) return true;
+ if (jj_scan_token(OF_T)) return true;
+ if (jj_3R_158()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_523()
+ {
+ 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_575()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3_111()
+ {
+ if (jj_done) return true;
+ if (jj_3R_144()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_580()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OPEN_T)) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_528()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_580()) jj_scanpos = xsp;
+ if (jj_scan_token(IS_T)) return true;
+ if (jj_3R_581()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_368()
+ {
+ 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_445()) jj_scanpos = xsp;
+ if (jj_3R_446()) return true;
+ if (jj_scan_token(WHEN_T)) return true;
+ if (jj_3R_59()) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_447()) 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_368()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_581()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ 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_144()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_450()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(DOUBLEMULT_T)) return true;
+ if (jj_3R_370()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_142()
+ {
+ if (jj_done) return true;
+ if (jj_3R_143()) return true;
+ if (jj_scan_token(DOT_T)) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_301()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_549()
+ {
+ 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_302()
+ {
+ 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_109()
+ {
+ if (jj_done) return true;
+ if (jj_3R_142()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_376()
+ {
+ 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_464()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_264()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_370()) 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_370()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_136()
+ {
+ 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_370()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_450()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_612()
+ {
+ if (jj_done) return true;
+ if (jj_3R_142()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_699()
+ {
+ 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_147()
+ {
+ if (jj_done) return true;
+ if (jj_3R_309()) return true;
+ if (jj_3R_146()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_143()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_302()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_394()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OR_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_393()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(XOR_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_392()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(XNOR_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_391()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(NOR_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_636()
+ {
+ 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_390()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(NAND_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_611()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ if (jj_3R_636()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_636()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_410()
+ {
+ if (jj_done) return true;
+ if (jj_3R_498()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_309()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_389()) {
+ jj_scanpos = xsp;
+ if (jj_3R_390()) {
+ jj_scanpos = xsp;
+ if (jj_3R_391()) {
+ jj_scanpos = xsp;
+ 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_389()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(AND_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_108()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(DOT_T)) return true;
+ if (jj_3R_142()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_548()
+ {
+ if (jj_done) return true;
+ if (jj_3R_611()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_612()) jj_scanpos = xsp;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_610()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(DOT_T)) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_59()
+ {
+ if (jj_done) return true;
+ if (jj_3R_146()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_147()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_609()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(DOT_T)) return true;
+ if (jj_3R_142()) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_547()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_609()) {
+ jj_scanpos = xsp;
+ if (jj_3R_610()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_490()
+ {
+ if (jj_done) return true;
+ if (jj_3R_549()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_489()
+ {
+ if (jj_done) return true;
+ if (jj_3R_548()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_396()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_488()) {
+ jj_scanpos = xsp;
+ if (jj_3R_489()) {
+ jj_scanpos = xsp;
+ if (jj_3R_490()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_488()
+ {
+ if (jj_done) return true;
+ if (jj_3R_547()) return true;
+ return false;
+ }
+
+ inline bool jj_3_105()
+ {
+ if (jj_done) return true;
+ if (jj_3R_139()) return true;
+ 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_263()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_487()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(VARIABLE_T)) 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_486()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SIGNAL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_395()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_485()) {
+ jj_scanpos = xsp;
+ if (jj_3R_486()) {
+ jj_scanpos = xsp;
+ if (jj_3R_487()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_485()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(CONSTANT_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_699()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_275()
+ {
+ if (jj_done) return true;
+ if (jj_3R_133()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_209()
+ {
+ if (jj_done) return true;
+ if (jj_3R_352()) return true;
+ return false;
+ }
+
+ inline bool jj_3_107()
+ {
+ if (jj_done) return true;
+ if (jj_3R_141()) return true;
+ if (jj_scan_token(BEGIN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_208()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_311()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SLSL_T)) return true;
+ if (jj_3R_395()) return true;
+ if (jj_3R_396()) 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_411()
+ {
+ if (jj_done) return true;
+ if (jj_3R_498()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_697()
+ {
+ if (jj_done) return true;
+ if (jj_3R_352()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_324()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_411()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_409()
+ {
+ if (jj_done) return true;
+ if (jj_3R_141()) 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_683()
+ {
+ 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_170()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_323()) {
+ jj_scanpos = xsp;
+ if (jj_3R_324()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_323()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_409()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(BEGIN_T)) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_410()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3_36()
+ {
+ if (jj_done) return true;
+ if (jj_3R_89()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_285()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_687()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(BEGIN_T)) return true;
+ if (jj_3R_687()) return true;
+ return false;
+ }
+
+ inline bool jj_3_35()
+ {
+ if (jj_done) return true;
+ if (jj_3R_88()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_235()
+ {
+ if (jj_done) return true;
+ if (jj_3R_133()) return true;
+ return false;
+ }
+
+ inline bool jj_3_106()
+ {
+ if (jj_done) return true;
+ if (jj_3R_140()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_139()
+ {
+ 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_637()
+ {
+ if (jj_done) return true;
+ if (jj_3R_133()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_661()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(WHEN_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_106()) jj_scanpos = xsp;
+ if (jj_3R_86()) return true;
+ if (jj_scan_token(ARROW_T)) return true;
+ if (jj_3R_687()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_649()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ if (jj_3R_661()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_661()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_471()
+ {
+ if (jj_done) return true;
+ if (jj_3R_533()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_534()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_684()
+ {
+ if (jj_done) return true;
+ if (jj_3R_234()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_585()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ALL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_584()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OTHER_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_615()
+ {
+ 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_649()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_634()
+ {
+ if (jj_done) return true;
+ if (jj_3R_656()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_583()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ if (jj_3R_634()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_634()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_533()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_583()) {
+ jj_scanpos = xsp;
+ if (jj_3R_584()) {
+ jj_scanpos = xsp;
+ if (jj_3R_585()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_656()
+ {
+ if (jj_done) return true;
+ if (jj_3R_683()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_684()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_132()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(GENERIC_T)) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_313()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_133()
+ {
+ 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_166()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_32()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3_34()
+ {
+ if (jj_done) return true;
+ if (jj_3R_87()) return true;
+ return false;
+ }
+
+ inline bool jj_3_33()
+ {
+ if (jj_done) return true;
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_537()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_536()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_131()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FUNCTION_T)) return true;
+ if (jj_3R_70()) 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_108()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PACKAGE_T)) return true;
+ if (jj_3R_70()) 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_637()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_87()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PACKAGE_T)) return true;
+ if (jj_3R_70()) 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_606()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(BOX_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_349()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ENTITY_T)) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_682()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_475()
+ {
+ if (jj_done) return true;
+ if (jj_3R_536()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_537()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_254()
+ {
+ if (jj_done) return true;
+ if (jj_3R_366()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_536()
+ {
+ if (jj_done) return true;
+ if (jj_3R_534()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_606()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_616()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_602()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FILE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_695()
+ {
+ if (jj_done) return true;
+ if (jj_3R_705()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_601()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(GROUP_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_681()
+ {
+ 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_600()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(UNITS_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_599()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LITERAL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_598()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LABEL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_722()
+ {
+ if (jj_done) return true;
+ if (jj_3R_382()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_597()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMPONENT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_721()
+ {
+ if (jj_done) return true;
+ if (jj_3R_379()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_596()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(VARIABLE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_595()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SIGNAL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_594()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(CONSTANT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_720()
+ {
+ if (jj_done) return true;
+ if (jj_3R_347()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_705()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_720()) {
+ jj_scanpos = xsp;
+ if (jj_3R_721()) {
+ jj_scanpos = xsp;
+ if (jj_3R_722()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_593()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SUBTYPE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_592()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(TYPE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_591()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PACKAGE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_590()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FUNCTION_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_589()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PROCEDURE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_680()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_588()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(CONFIGURATION_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_587()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ARCHITECTURE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_586()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ENTITY_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_534()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_586()) {
+ jj_scanpos = xsp;
+ if (jj_3R_587()) {
+ jj_scanpos = xsp;
+ if (jj_3R_588()) {
+ jj_scanpos = xsp;
+ if (jj_3R_589()) {
+ jj_scanpos = xsp;
+ if (jj_3R_590()) {
+ jj_scanpos = xsp;
+ if (jj_3R_591()) {
+ jj_scanpos = xsp;
+ if (jj_3R_592()) {
+ jj_scanpos = xsp;
+ if (jj_3R_593()) {
+ jj_scanpos = xsp;
+ if (jj_3R_594()) {
+ jj_scanpos = xsp;
+ if (jj_3R_595()) {
+ jj_scanpos = xsp;
+ 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()) {
+ jj_scanpos = xsp;
+ if (jj_3R_602()) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_253()
+ {
+ if (jj_done) return true;
+ if (jj_3R_365()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_655()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PROTECTED_T)) return true;
+ if (jj_3R_681()) 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_682()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3_103()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_564()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OPEN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_563()
+ {
+ 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_694()
+ {
+ if (jj_done) return true;
+ if (jj_3R_704()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_679()
+ {
+ 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_562()
+ {
+ 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_616()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_500()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_562()) {
+ jj_scanpos = xsp;
+ if (jj_3R_563()) {
+ jj_scanpos = xsp;
+ if (jj_3R_564()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_719()
+ {
+ if (jj_done) return true;
+ if (jj_3R_383()) return true;
+ return false;
+ }
+
+ inline bool jj_3_31()
+ {
+ 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_716()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_707()
+ {
+ 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_104()
+ {
+ if (jj_done) return true;
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_718()
+ {
+ if (jj_done) return true;
+ if (jj_3R_382()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_717()
+ {
+ if (jj_done) return true;
+ if (jj_3R_379()) return true;
+ return false;
+ }
+
+ inline bool jj_3_30()
+ {
+ if (jj_done) return true;
+ if (jj_3R_85()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_715()
+ {
+ if (jj_done) return true;
+ if (jj_3R_377()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_714()
+ {
+ if (jj_done) return true;
+ if (jj_3R_376()) return true;
+ return false;
+ }
+
+ inline bool jj_3_29()
+ {
+ if (jj_done) return true;
+ if (jj_3R_84()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_713()
+ {
+ if (jj_done) return true;
+ if (jj_3R_375()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_712()
+ {
+ if (jj_done) return true;
+ if (jj_3R_373()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_359()
+ {
+ 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_711()
+ {
+ if (jj_done) return true;
+ if (jj_3R_372()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_236()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_359()) jj_scanpos = xsp;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_710()
+ {
+ if (jj_done) return true;
+ if (jj_3R_371()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_708()
+ {
+ if (jj_done) return true;
+ if (jj_3R_93()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_704()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ 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_3R_718()) {
+ jj_scanpos = xsp;
+ if (jj_3_104()) {
+ jj_scanpos = xsp;
+ if (jj_3R_719()) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_709()
+ {
+ if (jj_done) return true;
+ if (jj_3R_519()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_163()
+ {
+ if (jj_done) return true;
+ if (jj_3R_85()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_252()
+ {
+ if (jj_done) return true;
+ if (jj_3R_364()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_162()
+ {
+ if (jj_done) return true;
+ if (jj_3R_84()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_69()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_162()) {
+ jj_scanpos = xsp;
+ if (jj_3R_163()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_522()
+ {
+ 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_472()
+ {
+ if (jj_done) return true;
+ if (jj_3R_535()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_138()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PROTECTED_T)) return true;
+ if (jj_scan_token(BODY_T)) return true;
+ if (jj_3R_679()) 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_680()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_497()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_446()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_381()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(DISCONNECT_T)) return true;
+ if (jj_3R_472()) 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_460()
+ {
+ 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_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_569()
+ {
+ if (jj_done) return true;
+ if (jj_3R_310()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_446()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_522()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_568()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_515()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_568()) {
+ jj_scanpos = xsp;
+ if (jj_3R_569()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_407()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(UNAFFECTED_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_318()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_406()) {
+ jj_scanpos = xsp;
+ if (jj_3R_407()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_406()
+ {
+ if (jj_done) return true;
+ if (jj_3R_446()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_497()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_553()
+ {
+ 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_251()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_496()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_553()) jj_scanpos = xsp;
+ if (jj_scan_token(INERTIAL_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_28()
+ {
+ if (jj_done) return true;
+ if (jj_3R_83()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_405()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_495()) {
+ jj_scanpos = xsp;
+ if (jj_3R_496()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_495()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(TRANSPORT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_27()
+ {
+ if (jj_done) return true;
+ if (jj_3R_82()) 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_156()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_155()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_134()
+ {
+ 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_463()
+ {
+ 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_375()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(101)) 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_463()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_474()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_473()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_706()
+ {
+ 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_441()
+ {
+ if (jj_done) return true;
+ if (jj_3R_521()) return true;
+ return false;
+ }
+
+ inline bool jj_3_102()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_362()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_440()) {
+ jj_scanpos = xsp;
+ if (jj_3R_441()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_440()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_102()) 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_3R_373()
+ {
+ 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_460()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_26()
+ {
+ if (jj_done) return true;
+ if (jj_3R_81()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_380()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FOR_T)) return true;
+ if (jj_3R_178()) return true;
+ if (jj_3R_332()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_567()
+ {
+ if (jj_done) return true;
+ if (jj_3R_333()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_382()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(USE_T)) return true;
+ if (jj_3R_473()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_474()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_566()
+ {
+ if (jj_done) return true;
+ if (jj_3R_81()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_502()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_566()) {
+ jj_scanpos = xsp;
+ if (jj_3R_567()) return true;
+ }
+ 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_155()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_156()) { 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_158()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_633()
+ {
+ if (jj_done) return true;
+ if (jj_3R_655()) return true;
+ return false;
+ }
+
+ inline bool jj_3_101()
+ {
+ if (jj_done) return true;
+ if (jj_3R_138()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_632()
+ {
+ if (jj_done) return true;
+ if (jj_3R_654()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_631()
+ {
+ if (jj_done) return true;
+ if (jj_3R_653()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_630()
+ {
+ if (jj_done) return true;
+ if (jj_3R_652()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_629()
+ {
+ if (jj_done) return true;
+ if (jj_3R_651()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_577()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ 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_3_101()) {
+ jj_scanpos = xsp;
+ if (jj_3R_633()) return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3_25()
+ {
+ 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_350()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(CONFIGURATION_T)) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3_97()
+ {
+ if (jj_done) return true;
+ if (jj_3R_134()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_459()
+ {
+ if (jj_done) return true;
+ if (jj_3R_526()) 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_371()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_100()) {
+ jj_scanpos = xsp;
+ if (jj_3R_459()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_320()
+ {
+ 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_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_319()
+ {
+ 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_318()) return true;
+ return false;
+ }
+
+ inline bool jj_3_99()
+ {
+ if (jj_done) return true;
+ if (jj_3R_135()) return true;
+ if (jj_3R_136()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_185()
+ {
+ if (jj_done) return true;
+ if (jj_3R_134()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_168()
+ {
+ if (jj_done) return true;
+ if (jj_3R_318()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_319()) { jj_scanpos = xsp; break; }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_320()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_366()
+ {
+ 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_72()
+ {
+ if (jj_done) return true;
+ if (jj_3R_115()) return true;
+ if (jj_scan_token(LESSTHAN_T)) return true;
+ if (jj_3R_167()) return true;
+ if (jj_3R_168()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_130()
+ {
+ if (jj_done) return true;
+ if (jj_3R_136()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3_99()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_247()
+ {
+ if (jj_done) return true;
+ if (jj_3R_109()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_365()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(UNTIL_T)) return true;
+ if (jj_3R_80()) 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_98()
+ {
+ 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_3_96()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) 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_80()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_217()
+ {
+ if (jj_done) return true;
+ if (jj_3R_310()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_216()
+ {
+ if (jj_done) return true;
+ if (jj_3R_352()) return true;
+ return false;
+ }
+
+ inline bool jj_3_24()
+ {
+ if (jj_done) return true;
+ if (jj_3R_79()) 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_3_23()
+ {
+ if (jj_done) return true;
+ if (jj_3R_78()) 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_3_22()
+ {
+ if (jj_done) return true;
+ if (jj_3R_77()) 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_3R_76()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_21()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_76()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(79)) jj_scanpos = xsp;
+ if (jj_scan_token(ASSERT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_561()
+ {
+ if (jj_done) return true;
+ if (jj_3R_79()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_560()
+ {
+ if (jj_done) return true;
+ if (jj_3R_78()) return true;
+ return false;
+ }
+
+ inline bool jj_3_20()
+ {
+ if (jj_done) return true;
+ if (jj_3R_75()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_559()
+ {
+ if (jj_done) return true;
+ if (jj_3R_77()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_74()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_372()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SUBTYPE_T)) return true;
+ if (jj_3R_70()) 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_3_19()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_74()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(79)) jj_scanpos = xsp;
+ if (jj_scan_token(PROCESS_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_627()
+ {
+ if (jj_done) return true;
+ if (jj_3R_113()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_572()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_627()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_558()
+ {
+ if (jj_done) return true;
+ if (jj_3R_88()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_73()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_18()
+ {
+ 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_3_95()
+ {
+ if (jj_done) return true;
+ if (jj_3R_133()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_516()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_313()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_557()
+ {
+ if (jj_done) return true;
+ if (jj_3R_615()) return true;
+ return false;
+ }
+
+ inline bool jj_3_94()
+ {
+ if (jj_done) return true;
+ if (jj_3R_132()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_556()
+ {
+ if (jj_done) return true;
+ if (jj_3R_75()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_555()
+ {
+ if (jj_done) return true;
+ if (jj_3R_89()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_554()
+ {
+ if (jj_done) return true;
+ if (jj_3R_614()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_498()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_554()) {
+ jj_scanpos = xsp;
+ if (jj_3R_555()) {
+ jj_scanpos = xsp;
+ if (jj_3R_556()) {
+ jj_scanpos = xsp;
+ if (jj_3R_557()) {
+ jj_scanpos = xsp;
+ if (jj_3R_558()) {
+ jj_scanpos = xsp;
+ if (jj_3R_559()) {
+ jj_scanpos = xsp;
+ if (jj_3R_560()) {
+ jj_scanpos = xsp;
+ if (jj_3R_561()) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(186)) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_518()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_570()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_17()
+ {
+ if (jj_done) return true;
+ if (jj_3R_72()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_173()
+ {
+ if (jj_done) return true;
+ if (jj_3R_325()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_517()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(84)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(52)) 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_16()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_434()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_517()) jj_scanpos = xsp;
+ if (jj_scan_token(FUNCTION_T)) return true;
+ if (jj_3R_515()) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_518()) jj_scanpos = xsp;
+ if (jj_scan_token(RETURN_T)) return true;
+ if (jj_3R_158()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_77()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_16()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(79)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_172()) {
+ jj_scanpos = xsp;
+ if (jj_3R_173()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3_15()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_15()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(79)) jj_scanpos = xsp;
+ if (jj_3R_177()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_14()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_13()
+ {
+ if (jj_done) return true;
+ if (jj_3R_71()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_88()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_14()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(79)) jj_scanpos = xsp;
+ if (jj_3R_188()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_678()
+ {
+ if (jj_done) return true;
+ if (jj_3R_693()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_470()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_347()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_433()) {
+ jj_scanpos = xsp;
+ if (jj_3R_434()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_433()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PROCEDURE_T)) return true;
+ if (jj_3R_515()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_516()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3_94()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3_95()) jj_scanpos = xsp;
+ if (jj_3R_425()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_677()
+ {
+ if (jj_done) return true;
+ if (jj_3R_692()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_652()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_677()) {
+ jj_scanpos = xsp;
+ if (jj_3R_678()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_176()
+ {
+ if (jj_done) return true;
+ if (jj_3R_329()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_175()
+ {
+ if (jj_done) return true;
+ if (jj_3R_71()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_628()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(46)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(80)) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_178()
+ {
+ if (jj_done) return true;
+ if (jj_3R_331()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_626()
+ {
+ if (jj_done) return true;
+ if (jj_3R_650()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_571()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_626()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3_92()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_674()
+ {
+ if (jj_done) return true;
+ if (jj_3R_383()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_673()
+ {
+ if (jj_done) return true;
+ if (jj_3R_382()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_78()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_3_93()
+ {
+ if (jj_done) return true;
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_672()
+ {
+ if (jj_done) return true;
+ if (jj_3R_379()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_671()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_670()
+ {
+ if (jj_done) return true;
+ if (jj_3R_377()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_669()
+ {
+ if (jj_done) return true;
+ if (jj_3R_376()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_668()
+ {
+ if (jj_done) return true;
+ if (jj_3R_375()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_574()
+ {
+ if (jj_done) return true;
+ if (jj_3R_515()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_667()
+ {
+ if (jj_done) return true;
+ if (jj_3R_373()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_469()
+ {
+ if (jj_done) return true;
+ if (jj_3R_532()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_666()
+ {
+ if (jj_done) return true;
+ if (jj_3R_372()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_665()
+ {
+ if (jj_done) return true;
+ if (jj_3R_519()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_468()
+ {
+ 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_333()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_179()
+ {
+ if (jj_done) return true;
+ if (jj_3R_332()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_664()
+ {
+ if (jj_done) return true;
+ if (jj_3R_371()) 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_663()
+ {
+ if (jj_done) return true;
+ if (jj_3R_93()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_650()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_663()) {
+ jj_scanpos = xsp;
+ 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_3R_668()) {
+ jj_scanpos = xsp;
+ if (jj_3R_669()) {
+ jj_scanpos = xsp;
+ if (jj_3R_670()) {
+ jj_scanpos = xsp;
+ if (jj_3R_671()) {
+ jj_scanpos = xsp;
+ if (jj_3R_672()) {
+ jj_scanpos = xsp;
+ if (jj_3R_673()) {
+ jj_scanpos = xsp;
+ if (jj_3_93()) {
+ jj_scanpos = xsp;
+ if (jj_3R_674()) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_378()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMPONENT_T)) return true;
+ if (jj_3R_70()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(56)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_468()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_469()) 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_470()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_462()
+ {
+ 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_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_3_91()
+ {
+ if (jj_done) return true;
+ if (jj_3R_131()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_348()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_435()) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(137)) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_435()
+ {
+ if (jj_done) return true;
+ if (jj_3R_519()) 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_3_11()
+ {
+ if (jj_done) return true;
+ if (jj_3R_69()) 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_3R_201()
+ {
+ if (jj_done) return true;
+ if (jj_3R_347()) return true;
+ if (jj_3R_348()) return true;
+ return false;
+ }
+
+ inline bool jj_3_10()
+ {
+ if (jj_done) return true;
+ if (jj_3R_68()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_337()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OTHER_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_573()
+ {
+ if (jj_done) return true;
+ if (jj_3R_628()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_200()
+ {
+ if (jj_done) return true;
+ if (jj_3R_131()) 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_90()
+ {
+ if (jj_done) return true;
+ if (jj_3R_129()) return true;
+ if (jj_3R_130()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_624()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_336()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_335()
+ {
+ 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_334()) {
+ jj_scanpos = xsp;
+ if (jj_3R_335()) {
+ jj_scanpos = xsp;
+ if (jj_3R_336()) {
+ jj_scanpos = xsp;
+ if (jj_3R_337()) return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_334()
+ {
+ if (jj_done) return true;
+ if (jj_3R_68()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_461()
+ {
+ if (jj_done) return true;
+ if (jj_3R_527()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_161()
+ {
+ if (jj_done) return true;
+ if (jj_3R_129()) return true;
+ if (jj_3R_130()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_648()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_352()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(CHARACTER_LITERAL)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_644()
+ {
+ 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_519()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(IS_T)) return true;
+ if (jj_3R_571()) return true;
+ if (jj_scan_token(BEGIN_T)) return true;
+ if (jj_3R_572()) return true;
+ if (jj_scan_token(END_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_573()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_574()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_622()
+ {
+ 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_623()
+ {
+ if (jj_done) return true;
+ if (jj_3R_622()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_685()
+ {
+ if (jj_done) return true;
+ if (jj_3R_71()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_356()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(STRINGLITERAL)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_436()
+ {
+ 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_314()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_256()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_68()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_160()) jj_scanpos = xsp;
+ if (jj_3R_130()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_161()) { jj_scanpos = xsp; break; }
+ }
+ 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_622()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_623()) { 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_624()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_660()
+ {
+ if (jj_done) return true;
+ if (jj_3R_498()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_647()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_660()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_358()
+ {
+ 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_635()
+ {
+ 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_357()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_436()) { jj_scanpos = xsp; break; }
+ }
+ 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_357()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_358()) jj_scanpos = xsp;
+ if (jj_scan_token(RBRACKET_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_686()
+ {
+ if (jj_done) return true;
+ if (jj_3R_329()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_605()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ALL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_604()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OTHER_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_603()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_635()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_535()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_603()) {
+ jj_scanpos = xsp;
+ if (jj_3R_604()) {
+ jj_scanpos = xsp;
+ if (jj_3R_605()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_501()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_565()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_579()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(BUS_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_614()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_644()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(56)) jj_scanpos = xsp;
+ if (jj_3R_645()) return true;
+ if (jj_3R_646()) return true;
+ if (jj_scan_token(BEGIN_T)) return true;
+ if (jj_3R_647()) return true;
+ if (jj_scan_token(END_T)) return true;
+ if (jj_scan_token(BLOCK_T)) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_648()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_578()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(REGISTER_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_527()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_578()) {
+ jj_scanpos = xsp;
+ if (jj_3R_579()) 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_420()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_501()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_658()
+ {
+ if (jj_done) return true;
+ if (jj_3R_532()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_686()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_657()
+ {
+ if (jj_done) return true;
+ if (jj_3R_67()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_685()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_645()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_657()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_658()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_659()
+ {
+ if (jj_done) return true;
+ if (jj_3R_141()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_374()
+ {
+ 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_461()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_462()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_646()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_659()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_300()
+ {
+ if (jj_done) return true;
+ if (jj_3R_383()) return true;
+ return false;
+ }
+
+ inline bool jj_3_89()
+ {
+ if (jj_done) return true;
+ if (jj_3R_128()) return true;
+ return false;
+ }
+
+ inline bool jj_3_7()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3_88()
+ {
+ if (jj_done) return true;
+ if (jj_3R_127()) 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_299()
+ {
+ if (jj_done) return true;
+ if (jj_3R_382()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_520()
+ {
+ if (jj_done) return true;
+ if (jj_3R_405()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_298()
+ {
+ if (jj_done) return true;
+ if (jj_3R_381()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_297()
+ {
+ if (jj_done) return true;
+ if (jj_3R_380()) return true;
+ return false;
+ }
+
+ inline bool jj_3_87()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_296()
+ {
+ if (jj_done) return true;
+ if (jj_3R_379()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_439()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_87()) jj_scanpos = xsp;
+ if (jj_3R_115()) return true;
+ if (jj_scan_token(LESSTHAN_T)) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_520()) jj_scanpos = xsp;
+ if (jj_3R_318()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_438()
+ {
+ if (jj_done) return true;
+ if (jj_3R_128()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_294()
+ {
+ if (jj_done) return true;
+ if (jj_3R_378()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_295()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_387()
+ {
+ if (jj_done) return true;
+ if (jj_3R_478()) return true;
+ if (jj_3R_68()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_293()
+ {
+ if (jj_done) return true;
+ if (jj_3R_377()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_292()
+ {
+ if (jj_done) return true;
+ if (jj_3R_376()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_361()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_437()) {
+ jj_scanpos = xsp;
+ if (jj_3R_438()) {
+ jj_scanpos = xsp;
+ if (jj_3R_439()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_437()
+ {
+ if (jj_done) return true;
+ if (jj_3R_127()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_291()
+ {
+ if (jj_done) return true;
+ if (jj_3R_375()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_290()
+ {
+ if (jj_done) return true;
+ if (jj_3R_374()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_289()
+ {
+ if (jj_done) return true;
+ if (jj_3R_373()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_288()
+ {
+ if (jj_done) return true;
+ if (jj_3R_372()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_287()
+ {
+ if (jj_done) return true;
+ if (jj_3R_371()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_422()
+ {
+ if (jj_done) return true;
+ if (jj_3R_502()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_402()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(MINUS_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_421()
+ {
+ if (jj_done) return true;
+ if (jj_3R_382()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_141()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_286()) {
+ jj_scanpos = xsp;
+ if (jj_3R_287()) {
+ jj_scanpos = xsp;
+ if (jj_3R_288()) {
+ jj_scanpos = xsp;
+ if (jj_3R_289()) {
+ jj_scanpos = xsp;
+ if (jj_3R_290()) {
+ jj_scanpos = xsp;
+ if (jj_3R_291()) {
+ jj_scanpos = xsp;
+ if (jj_3R_292()) {
+ jj_scanpos = xsp;
+ if (jj_3R_293()) {
+ jj_scanpos = xsp;
+ if (jj_3R_294()) {
+ jj_scanpos = xsp;
+ if (jj_3R_295()) {
+ jj_scanpos = xsp;
+ if (jj_3R_296()) {
+ jj_scanpos = xsp;
+ if (jj_3R_297()) {
+ jj_scanpos = xsp;
+ if (jj_3R_298()) {
+ jj_scanpos = xsp;
+ if (jj_3R_299()) {
+ jj_scanpos = xsp;
+ if (jj_3_8()) {
+ jj_scanpos = xsp;
+ if (jj_3R_300()) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(186)) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_286()
+ {
+ if (jj_done) return true;
+ if (jj_3R_93()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_314()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_401()) {
+ jj_scanpos = xsp;
+ if (jj_3R_402()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_401()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PLUS_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_546()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ROR_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_545()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ROL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_544()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SRA_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_543()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SLA_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_333()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FOR_T)) return true;
+ if (jj_3R_420()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_421()) { jj_scanpos = xsp; break; }
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_422()) { 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_542()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SRL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_541()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SLL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_478()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_541()) {
+ jj_scanpos = xsp;
+ if (jj_3R_542()) {
+ jj_scanpos = xsp;
+ if (jj_3R_543()) {
+ jj_scanpos = xsp;
+ if (jj_3R_544()) {
+ jj_scanpos = xsp;
+ if (jj_3R_545()) {
+ jj_scanpos = xsp;
+ if (jj_3R_546()) return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_245()
+ {
+ if (jj_done) return true;
+ if (jj_3R_363()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_307()
+ {
+ if (jj_done) return true;
+ if (jj_3R_68()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_387()) jj_scanpos = xsp;
+ 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_85()
+ {
+ if (jj_done) return true;
+ if (jj_3R_125()) return true;
+ return false;
+ }
+
+ inline bool jj_3_86()
+ {
+ if (jj_done) return true;
+ if (jj_3R_126()) return true;
+ return false;
+ }
+
+ inline bool jj_3_84()
+ {
+ if (jj_done) return true;
+ if (jj_3R_124()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_419()
+ {
+ if (jj_done) return true;
+ if (jj_3R_329()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_418()
+ {
+ if (jj_done) return true;
+ if (jj_3R_71()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_417()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(USE_T)) return true;
+ if (jj_3R_500()) return true;
+ return false;
+ }
+
+ inline bool jj_3_83()
+ {
+ if (jj_done) return true;
+ if (jj_3R_123()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_332()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_417()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_418()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_419()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_119()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_82()
+ {
+ if (jj_done) return true;
+ if (jj_3R_122()) return true;
+ return false;
+ }
+
+ inline bool jj_3_79()
+ {
+ 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_81()
+ {
+ if (jj_done) return true;
+ if (jj_3R_121()) return true;
+ return false;
+ }
+
+ inline bool jj_3_80()
+ {
+ 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_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_78()
+ {
+ if (jj_done) return true;
+ if (jj_3R_118()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_244()
+ {
+ if (jj_done) return true;
+ if (jj_3R_362()) return true;
+ return false;
+ }
+
+ inline bool jj_3_75()
+ {
+ 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_77()
+ {
+ if (jj_done) return true;
+ if (jj_3R_117()) return true;
+ return false;
+ }
+
+ inline bool jj_3_76()
+ {
+ if (jj_done) return true;
+ if (jj_3R_116()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_499()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_318()) return true;
+ if (jj_scan_token(WHEN_T)) return true;
+ if (jj_3R_86()) 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_76()) {
+ jj_scanpos = xsp;
+ if (jj_3_77()) {
+ jj_scanpos = xsp;
+ if (jj_3_78()) {
+ jj_scanpos = xsp;
+ if (jj_3R_244()) {
+ 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_3_86()) {
+ jj_scanpos = xsp;
+ if (jj_3R_245()) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_243()
+ {
+ if (jj_done) return true;
+ if (jj_3R_361()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_503()
+ {
+ 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_339()
+ {
+ 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_74()
+ {
+ if (jj_done) return true;
+ if (jj_3R_113()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_259()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3_74()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_267()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_423()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_503()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_379()
+ {
+ 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_471()) 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_3R_316()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_315()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_111()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_3_73()
+ {
+ if (jj_done) return true;
+ if (jj_3R_112()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_364()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ON_T)) return true;
+ if (jj_3R_423()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_355()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(RANGE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_220()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_354()) {
+ jj_scanpos = xsp;
+ if (jj_3R_355()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_354()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_412()
+ {
+ if (jj_done) return true;
+ if (jj_3R_318()) 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_499()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_691()
+ {
+ if (jj_done) return true;
+ if (jj_3R_112()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_325()
+ {
+ 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_167()) return true;
+ if (jj_3R_412()) return true;
+ if (jj_scan_token(SEMI_T)) 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_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_158()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_338()
+ {
+ 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_473()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(DOT_T)) return true;
+ if (jj_3R_100()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_166()
+ {
+ if (jj_done) return true;
+ if (jj_3R_315()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_316()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_360()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_403()
+ {
+ 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_315()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_403()) jj_scanpos = xsp;
+ if (jj_3R_404()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_248()
+ {
+ if (jj_done) return true;
+ if (jj_3R_140()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_676()
+ {
+ 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_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_3R_675()
+ {
+ if (jj_done) return true;
+ if (jj_3R_690()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_651()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_675()) {
+ jj_scanpos = xsp;
+ if (jj_3R_676()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_266()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) 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_338()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_339()) jj_scanpos = xsp;
+ 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_3_5()
+ {
+ if (jj_done) return true;
+ if (jj_3R_63()) 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_701()
+ {
+ if (jj_done) return true;
+ if (jj_3R_706()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_308()
+ {
+ if (jj_done) return true;
+ if (jj_3R_388()) return true;
+ if (jj_3R_307()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_703()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_700()
+ {
+ 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_700()) {
+ jj_scanpos = xsp;
+ if (jj_3R_701()) return true;
+ }
+ return false;
+ }
+
+ inline bool jj_3R_249()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_484()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(NOTEQU_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_483()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LESSTHAN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_482()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(GREATERTHAN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_481()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(EQU_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_480()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(GT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_388()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_479()) {
+ jj_scanpos = xsp;
+ if (jj_3R_480()) {
+ jj_scanpos = xsp;
+ 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()) return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_479()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_702()
+ {
+ if (jj_done) return true;
+ if (jj_3R_707()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_467()
+ {
+ if (jj_done) return true;
+ if (jj_3R_234()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_146()
+ {
+ if (jj_done) return true;
+ if (jj_3R_307()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_308()) jj_scanpos = xsp;
+ 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_702()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_702()) { 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_703()) jj_scanpos = xsp;
+ 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_3_71()
+ {
+ if (jj_done) return true;
+ if (jj_3R_68()) return true;
+ if (jj_3R_110()) return true;
+ if (jj_3R_68()) return true;
+ return false;
+ }
+
+ inline bool jj_3_72()
+ {
+ if (jj_done) return true;
+ if (jj_3R_111()) 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_3R_576()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(NEW_T)) return true;
+ if (jj_3R_85()) return true;
+ return false;
+ }
+
+ inline bool jj_3_70()
+ {
+ 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_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_68()) return true;
+ if (jj_3R_110()) return true;
+ if (jj_3R_68()) 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_525()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_4()) {
+ jj_scanpos = xsp;
+ if (jj_3R_576()) 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_531()
+ {
+ if (jj_done) return true;
+ if (jj_3R_310()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_530()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(CHARACTER_LITERAL)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_529()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_465()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_529()) {
+ jj_scanpos = xsp;
+ if (jj_3R_530()) {
+ jj_scanpos = xsp;
+ if (jj_3R_531()) 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_193()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_62()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_342()
+ {
+ if (jj_done) return true;
+ if (jj_3R_113()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_192()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_342()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_466()
+ {
+ 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_377()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ALIAS_T)) return true;
+ if (jj_3R_465()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_466()) jj_scanpos = xsp;
+ if (jj_scan_token(IS_T)) return true;
+ if (jj_3R_60()) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_467()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_340()
+ {
+ if (jj_done) return true;
+ if (jj_3R_423()) return true;
+ 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_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_3_3()
+ {
+ if (jj_done) return true;
+ if (jj_3R_61()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_493()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(BOX_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_494()
+ {
+ 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_404()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_492()) {
+ jj_scanpos = xsp;
+ if (jj_3R_493()) {
+ jj_scanpos = xsp;
+ if (jj_3R_494()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_492()
+ {
+ 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_226()
+ {
+ if (jj_done) return true;
+ if (jj_3R_166()) 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(15)) {
+ jj_scanpos = xsp;
+ if (jj_3R_340()) return true;
+ }
+ if (jj_scan_token(RPAREN_T)) 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_154()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_189()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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(79)) 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(56)) 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(79)) 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_153()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_341()
+ {
+ if (jj_done) return true;
+ if (jj_3R_424()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_152()
+ {
+ 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_152()) {
+ jj_scanpos = xsp;
+ if (jj_3R_153()) {
+ jj_scanpos = xsp;
+ if (jj_3R_154()) return true;
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_191()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_341()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_513()
+ {
+ if (jj_done) return true;
+ if (jj_3R_383()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_653()
+ {
+ 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_3_69()
+ {
+ if (jj_done) return true;
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_512()
+ {
+ if (jj_done) return true;
+ if (jj_3R_382()) 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_511()
+ {
+ if (jj_done) return true;
+ if (jj_3R_379()) 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_3_68()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_510()
+ {
+ if (jj_done) return true;
+ if (jj_3R_377()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_509()
+ {
+ if (jj_done) return true;
+ if (jj_3R_376()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_508()
+ {
+ if (jj_done) return true;
+ if (jj_3R_375()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_507()
+ {
+ if (jj_done) return true;
+ if (jj_3R_373()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_506()
+ {
+ if (jj_done) return true;
+ if (jj_3R_372()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_505()
+ {
+ if (jj_done) return true;
+ if (jj_3R_371()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_424()
+ {
+ 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()) {
+ jj_scanpos = xsp;
+ if (jj_3R_510()) {
+ jj_scanpos = xsp;
+ if (jj_3_68()) {
+ jj_scanpos = xsp;
+ if (jj_3R_511()) {
+ jj_scanpos = xsp;
+ if (jj_3R_512()) {
+ jj_scanpos = xsp;
+ if (jj_3_69()) {
+ jj_scanpos = xsp;
+ if (jj_3R_513()) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_504()
+ {
+ if (jj_done) return true;
+ if (jj_3R_93()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_330()
+ {
+ 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_67()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) 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_67()) 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_330()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3_65()
+ {
+ 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_351()) return true;
+ return false;
+ }
+
+ inline bool jj_3_66()
+ {
+ 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_350()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_202()
+ {
+ if (jj_done) return true;
+ if (jj_3R_349()) 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_66()) {
+ jj_scanpos = xsp;
+ if (jj_3R_205()) return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3_64()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3_63()
+ {
+ if (jj_done) return true;
+ if (jj_3R_107()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_458()
+ {
+ if (jj_done) return true;
+ if (jj_3R_109()) return true;
+ return false;
+ }
+
+ inline bool jj_3_62()
+ {
+ 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_457()
+ {
+ if (jj_done) return true;
+ if (jj_3R_525()) return true;
+ return false;
+ }
+
+ inline bool jj_3_61()
+ {
+ if (jj_done) return true;
+ if (jj_3R_62()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_456()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ inline bool jj_3_60()
+ {
+ 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_455()
+ {
+ if (jj_done) return true;
+ if (jj_3R_107()) return true;
+ return false;
+ }
+
+ inline bool jj_3_59()
+ {
+ if (jj_done) return true;
+ if (jj_3R_105()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_454()
+ {
+ if (jj_done) return true;
+ if (jj_3R_106()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_453()
+ {
+ if (jj_done) return true;
+ if (jj_3R_62()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_452()
+ {
+ 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_370()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_451()) {
+ jj_scanpos = xsp;
+ if (jj_3R_452()) {
+ jj_scanpos = xsp;
+ if (jj_3R_453()) {
+ jj_scanpos = xsp;
+ if (jj_3R_454()) {
+ jj_scanpos = xsp;
+ if (jj_3R_455()) {
+ jj_scanpos = xsp;
+ if (jj_3R_456()) {
+ jj_scanpos = xsp;
+ if (jj_3R_457()) {
+ jj_scanpos = xsp;
+ if (jj_3R_458()) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_451()
+ {
+ if (jj_done) return true;
+ if (jj_3R_105()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_329()
+ {
+ 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_166()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_582()
+ {
+ if (jj_done) return true;
+ if (jj_3R_313()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_532()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PORT_T)) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_582()) 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_360()) 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_70()) 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_58()
+ {
+ 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_408()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(IN_T)) return true;
+ if (jj_3R_69()) return true;
+ return false;
+ }
+
+ inline bool jj_3_57()
+ {
+ if (jj_done) return true;
+ if (jj_3R_87()) return true;
+ return false;
+ }
+
+ inline bool jj_3_55()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ inline bool jj_3_56()
+ {
+ if (jj_done) return true;
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_351()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PACKAGE_T)) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3_54()
+ {
+ if (jj_done) return true;
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_317()
+ {
+ if (jj_done) return true;
+ if (jj_3R_405()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_261()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_167()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(50)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_317()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_310()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(STRINGLITERAL)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_643()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(TYPE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_642()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FILE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_641()
+ {
+ 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_53()
+ {
+ if (jj_done) return true;
+ if (jj_3R_103()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_640()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(VARIABLE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_639()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SIGNAL_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_638()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(CONSTANT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_613()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ 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()) return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_353()
+ {
+ 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_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_442()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_363()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_442()) 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_52()
+ {
+ 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_70()) 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_51()
+ {
+ 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_47()
+ {
+ if (jj_done) return true;
+ if (jj_3R_99()) 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_69()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_49()
+ {
+ 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_353()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_48()
+ {
+ 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_69()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_150()
+ {
+ if (jj_done) return true;
+ if (jj_3R_311()) 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_46()
+ {
+ 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_149()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_151()
+ {
+ if (jj_done) return true;
+ if (jj_3R_98()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_148()
+ {
+ if (jj_done) return true;
+ if (jj_3R_310()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_60()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_148()) {
+ jj_scanpos = xsp;
+ if (jj_3R_149()) {
+ jj_scanpos = xsp;
+ if (jj_3R_150()) return true;
+ }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_151()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_625()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ 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_135()
+ {
+ 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_432()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LINKAGE_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_431()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(BUFFER_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[115];
+ 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[295];
+ 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 handleFlowComment(const char*);
+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..0c2c0e5
--- /dev/null
+++ b/vhdlparser/VhdlParserConstants.h
@@ -0,0 +1,950 @@
+/* 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
+#include "JavaCC.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_FLOWCHART_COMMENT = 7;
+ /** RegularExpression Id. */
+const int VHDL_COMMENT = 8;
+ /** RegularExpression Id. */
+const int MULT_DOXYGEN_VHDL_COMMENT_2008 = 9;
+ /** RegularExpression Id. */
+const int MULT_VHDL_2008_COMMENT = 10;
+ /** RegularExpression Id. */
+const int ABS_T = 11;
+ /** RegularExpression Id. */
+const int ACCESS_T = 12;
+ /** RegularExpression Id. */
+const int AFTER_T = 13;
+ /** RegularExpression Id. */
+const int ALIAS_T = 14;
+ /** RegularExpression Id. */
+const int ALL_T = 15;
+ /** RegularExpression Id. */
+const int AND_T = 16;
+ /** RegularExpression Id. */
+const int ARCHITECTURE_T = 17;
+ /** RegularExpression Id. */
+const int ARRAY_T = 18;
+ /** RegularExpression Id. */
+const int ASSERT_T = 19;
+ /** RegularExpression Id. */
+const int ASSUME_T = 20;
+ /** RegularExpression Id. */
+const int ASSUME_GUARANTEE_T = 21;
+ /** RegularExpression Id. */
+const int ATTRIBUTE_T = 22;
+ /** RegularExpression Id. */
+const int BEGIN_T = 23;
+ /** RegularExpression Id. */
+const int BLOCK_T = 24;
+ /** RegularExpression Id. */
+const int BODY_T = 25;
+ /** RegularExpression Id. */
+const int BUFFER_T = 26;
+ /** RegularExpression Id. */
+const int BUS_T = 27;
+ /** RegularExpression Id. */
+const int COMPONENT_T = 28;
+ /** RegularExpression Id. */
+const int CASE_T = 29;
+ /** RegularExpression Id. */
+const int CONFIGURATION_T = 30;
+ /** RegularExpression Id. */
+const int CONSTANT_T = 31;
+ /** RegularExpression Id. */
+const int CONTEXT_T = 32;
+ /** RegularExpression Id. */
+const int COVER_T = 33;
+ /** RegularExpression Id. */
+const int DEFAULT_T = 34;
+ /** RegularExpression Id. */
+const int DISCONNECT_T = 35;
+ /** RegularExpression Id. */
+const int DOWNTO_T = 36;
+ /** RegularExpression Id. */
+const int ELSE_T = 37;
+ /** RegularExpression Id. */
+const int ELSIF_T = 38;
+ /** RegularExpression Id. */
+const int END_T = 39;
+ /** RegularExpression Id. */
+const int ENTITY_T = 40;
+ /** RegularExpression Id. */
+const int EXIT_T = 41;
+ /** RegularExpression Id. */
+const int FAIRNESS_T = 42;
+ /** RegularExpression Id. */
+const int FILE_T = 43;
+ /** RegularExpression Id. */
+const int FOR_T = 44;
+ /** RegularExpression Id. */
+const int FORCE_T = 45;
+ /** RegularExpression Id. */
+const int FUNCTION_T = 46;
+ /** RegularExpression Id. */
+const int GENERATE_T = 47;
+ /** RegularExpression Id. */
+const int GENERIC_T = 48;
+ /** RegularExpression Id. */
+const int GROUP_T = 49;
+ /** RegularExpression Id. */
+const int GUARDED_T = 50;
+ /** RegularExpression Id. */
+const int IF_T = 51;
+ /** RegularExpression Id. */
+const int IMPURE_T = 52;
+ /** RegularExpression Id. */
+const int IN_T = 53;
+ /** RegularExpression Id. */
+const int INERTIAL_T = 54;
+ /** RegularExpression Id. */
+const int INOUT_T = 55;
+ /** RegularExpression Id. */
+const int IS_T = 56;
+ /** RegularExpression Id. */
+const int LABEL_T = 57;
+ /** RegularExpression Id. */
+const int LIBRARY_T = 58;
+ /** RegularExpression Id. */
+const int LINKAGE_T = 59;
+ /** RegularExpression Id. */
+const int LITERAL_T = 60;
+ /** RegularExpression Id. */
+const int LOOP_T = 61;
+ /** RegularExpression Id. */
+const int MAP_T = 62;
+ /** RegularExpression Id. */
+const int MOD_T = 63;
+ /** RegularExpression Id. */
+const int NAND_T = 64;
+ /** RegularExpression Id. */
+const int NEW_T = 65;
+ /** RegularExpression Id. */
+const int NEXT_T = 66;
+ /** RegularExpression Id. */
+const int NOR_T = 67;
+ /** RegularExpression Id. */
+const int NOT_T = 68;
+ /** RegularExpression Id. */
+const int NULL_T = 69;
+ /** RegularExpression Id. */
+const int OF_T = 70;
+ /** RegularExpression Id. */
+const int ON_T = 71;
+ /** RegularExpression Id. */
+const int OPEN_T = 72;
+ /** RegularExpression Id. */
+const int OR_T = 73;
+ /** RegularExpression Id. */
+const int OTHER_T = 74;
+ /** RegularExpression Id. */
+const int OUT_T = 75;
+ /** RegularExpression Id. */
+const int PACKAGE_T = 76;
+ /** RegularExpression Id. */
+const int PARAMETER_T = 77;
+ /** RegularExpression Id. */
+const int PORT_T = 78;
+ /** RegularExpression Id. */
+const int POSTPONED_T = 79;
+ /** RegularExpression Id. */
+const int PROCEDURE_T = 80;
+ /** RegularExpression Id. */
+const int PROCESS_T = 81;
+ /** RegularExpression Id. */
+const int PROPERTY_T = 82;
+ /** RegularExpression Id. */
+const int PROTECTED_T = 83;
+ /** RegularExpression Id. */
+const int PURE_T = 84;
+ /** RegularExpression Id. */
+const int RANGE_T = 85;
+ /** RegularExpression Id. */
+const int RECORD_T = 86;
+ /** RegularExpression Id. */
+const int REGISTER_T = 87;
+ /** RegularExpression Id. */
+const int REJECT_T = 88;
+ /** RegularExpression Id. */
+const int RELEASE_T = 89;
+ /** RegularExpression Id. */
+const int RESTRICT_T = 90;
+ /** RegularExpression Id. */
+const int RESTRICT_GUARANTEE_T = 91;
+ /** RegularExpression Id. */
+const int REM_T = 92;
+ /** RegularExpression Id. */
+const int REPORT_T = 93;
+ /** RegularExpression Id. */
+const int ROL_T = 94;
+ /** RegularExpression Id. */
+const int ROR_T = 95;
+ /** RegularExpression Id. */
+const int RETURN_T = 96;
+ /** RegularExpression Id. */
+const int SELECT_T = 97;
+ /** RegularExpression Id. */
+const int SEQUENCE_T = 98;
+ /** RegularExpression Id. */
+const int SEVERITY_T = 99;
+ /** RegularExpression Id. */
+const int SIGNAL_T = 100;
+ /** RegularExpression Id. */
+const int SHARED_T = 101;
+ /** RegularExpression Id. */
+const int SLA_T = 102;
+ /** RegularExpression Id. */
+const int SLL_T = 103;
+ /** RegularExpression Id. */
+const int SRA_T = 104;
+ /** RegularExpression Id. */
+const int SRL_T = 105;
+ /** RegularExpression Id. */
+const int STRONG_T = 106;
+ /** RegularExpression Id. */
+const int SUBTYPE_T = 107;
+ /** RegularExpression Id. */
+const int THEN_T = 108;
+ /** RegularExpression Id. */
+const int TO_T = 109;
+ /** RegularExpression Id. */
+const int TRANSPORT_T = 110;
+ /** RegularExpression Id. */
+const int TYPE_T = 111;
+ /** RegularExpression Id. */
+const int UNAFFECTED_T = 112;
+ /** RegularExpression Id. */
+const int UNITS_T = 113;
+ /** RegularExpression Id. */
+const int UNTIL_T = 114;
+ /** RegularExpression Id. */
+const int USE_T = 115;
+ /** RegularExpression Id. */
+const int VARIABLE_T = 116;
+ /** RegularExpression Id. */
+const int VMODE_T = 117;
+ /** RegularExpression Id. */
+const int VPROP_T = 118;
+ /** RegularExpression Id. */
+const int VUNIT_T = 119;
+ /** RegularExpression Id. */
+const int WAIT_T = 120;
+ /** RegularExpression Id. */
+const int WHEN_T = 121;
+ /** RegularExpression Id. */
+const int WHILE_T = 122;
+ /** RegularExpression Id. */
+const int WITH_T = 123;
+ /** RegularExpression Id. */
+const int XOR_T = 124;
+ /** RegularExpression Id. */
+const int XNOR_T = 125;
+ /** RegularExpression Id. */
+const int AMPERSAND_T = 126;
+ /** RegularExpression Id. */
+const int APOSTROPHE_T = 127;
+ /** RegularExpression Id. */
+const int LPAREN_T = 128;
+ /** RegularExpression Id. */
+const int RPAREN_T = 129;
+ /** RegularExpression Id. */
+const int DOUBLEMULT_T = 130;
+ /** RegularExpression Id. */
+const int MULT_T = 131;
+ /** RegularExpression Id. */
+const int PLUS_T = 132;
+ /** RegularExpression Id. */
+const int MINUS_T = 133;
+ /** RegularExpression Id. */
+const int COMMA_T = 134;
+ /** RegularExpression Id. */
+const int VARASSIGN_T = 135;
+ /** RegularExpression Id. */
+const int COLON_T = 136;
+ /** RegularExpression Id. */
+const int SEMI_T = 137;
+ /** RegularExpression Id. */
+const int LESSTHAN_T = 138;
+ /** RegularExpression Id. */
+const int GREATERTHAN_T = 139;
+ /** RegularExpression Id. */
+const int LT_T = 140;
+ /** RegularExpression Id. */
+const int GT_T = 141;
+ /** RegularExpression Id. */
+const int EQU_T = 142;
+ /** RegularExpression Id. */
+const int NOTEQU_T = 143;
+ /** RegularExpression Id. */
+const int ARROW_T = 144;
+ /** RegularExpression Id. */
+const int BOX_T = 145;
+ /** RegularExpression Id. */
+const int SLSL_T = 146;
+ /** RegularExpression Id. */
+const int RSRS_T = 147;
+ /** RegularExpression Id. */
+const int QQ_T = 148;
+ /** RegularExpression Id. */
+const int QGT_T = 149;
+ /** RegularExpression Id. */
+const int QLT_T = 150;
+ /** RegularExpression Id. */
+const int QG_T = 151;
+ /** RegularExpression Id. */
+const int QL_T = 152;
+ /** RegularExpression Id. */
+const int QEQU_T = 153;
+ /** RegularExpression Id. */
+const int QNEQU_T = 154;
+ /** RegularExpression Id. */
+const int Q_T = 155;
+ /** RegularExpression Id. */
+const int BAR_T = 156;
+ /** RegularExpression Id. */
+const int DOT_T = 157;
+ /** RegularExpression Id. */
+const int SLASH_T = 158;
+ /** RegularExpression Id. */
+const int AT_T = 159;
+ /** RegularExpression Id. */
+const int NEG_T = 160;
+ /** RegularExpression Id. */
+const int LBRACKET_T = 161;
+ /** RegularExpression Id. */
+const int RBRACKET_T = 162;
+ /** RegularExpression Id. */
+const int LBRACE = 163;
+ /** RegularExpression Id. */
+const int RBRACE = 164;
+ /** RegularExpression Id. */
+const int INTEGER = 165;
+ /** RegularExpression Id. */
+const int STRINGLITERAL = 166;
+ /** RegularExpression Id. */
+const int BASIC_IDENTIFIER = 167;
+ /** RegularExpression Id. */
+const int EXTENDED_CHARACTER = 168;
+ /** RegularExpression Id. */
+const int CHARACTER_LITERAL = 169;
+ /** RegularExpression Id. */
+const int DECIMAL_LITERAL = 170;
+ /** RegularExpression Id. */
+const int BASED_INTEGER = 171;
+ /** RegularExpression Id. */
+const int BASED_LITERAL = 172;
+ /** RegularExpression Id. */
+const int EXPONENT = 173;
+ /** RegularExpression Id. */
+const int BASIC_GRAPHIC_CHARACTER = 174;
+ /** RegularExpression Id. */
+const int GRAPHIC_CHARACTER = 175;
+ /** RegularExpression Id. */
+const int LETTER_OR_DIGIT = 176;
+ /** RegularExpression Id. */
+const int LETTER = 177;
+ /** RegularExpression Id. */
+const int UPPER_CASE_LETTER = 178;
+ /** RegularExpression Id. */
+const int BIT_STRING_LITERAL = 179;
+ /** RegularExpression Id. */
+const int BASE_SPECIFIER = 180;
+ /** RegularExpression Id. */
+const int DIGIT = 181;
+ /** RegularExpression Id. */
+const int SPECIAL_CHARACTER = 182;
+ /** RegularExpression Id. */
+const int OTHER_SPECIAL_CHARACTER = 183;
+ /** RegularExpression Id. */
+const int SPACE_CHARACTER = 184;
+ /** RegularExpression Id. */
+const int LOWER_CASE_LETTER = 185;
+ /** RegularExpression Id. */
+const int VHDL2008TOOLDIR = 186;
+
+ /** 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, 0x46, 0x4c, 0x4f, 0x57, 0x43, 0x48, 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_8[] =
+{0x22, 0x3c, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_9[] =
+{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_10[] =
+{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_11[] =
+{0x22, 0x61, 0x62, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_12[] =
+{0x22, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_13[] =
+{0x22, 0x61, 0x66, 0x74, 0x65, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_14[] =
+{0x22, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_15[] =
+{0x22, 0x61, 0x6c, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_16[] =
+{0x22, 0x61, 0x6e, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_17[] =
+{0x22, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_18[] =
+{0x22, 0x61, 0x72, 0x72, 0x61, 0x79, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_19[] =
+{0x22, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_20[] =
+{0x22, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_21[] =
+{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_22[] =
+{0x22, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_23[] =
+{0x22, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_24[] =
+{0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_25[] =
+{0x22, 0x62, 0x6f, 0x64, 0x79, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_26[] =
+{0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_27[] =
+{0x22, 0x62, 0x75, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_28[] =
+{0x22, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_29[] =
+{0x22, 0x63, 0x61, 0x73, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_30[] =
+{0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_31[] =
+{0x22, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_32[] =
+{0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_33[] =
+{0x22, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_34[] =
+{0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_35[] =
+{0x22, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_36[] =
+{0x22, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x6f, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_37[] =
+{0x22, 0x65, 0x6c, 0x73, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_38[] =
+{0x22, 0x65, 0x6c, 0x73, 0x69, 0x66, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_39[] =
+{0x22, 0x65, 0x6e, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_40[] =
+{0x22, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_41[] =
+{0x22, 0x65, 0x78, 0x69, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_42[] =
+{0x22, 0x66, 0x61, 0x69, 0x72, 0x6e, 0x65, 0x73, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_43[] =
+{0x22, 0x66, 0x69, 0x6c, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_44[] =
+{0x22, 0x66, 0x6f, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_45[] =
+{0x22, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_46[] =
+{0x22, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_47[] =
+{0x22, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_48[] =
+{0x22, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_49[] =
+{0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_50[] =
+{0x22, 0x67, 0x75, 0x61, 0x72, 0x64, 0x65, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_51[] =
+{0x22, 0x69, 0x66, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_52[] =
+{0x22, 0x69, 0x6d, 0x70, 0x75, 0x72, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_53[] =
+{0x22, 0x69, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_54[] =
+{0x22, 0x69, 0x6e, 0x65, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_55[] =
+{0x22, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_56[] =
+{0x22, 0x69, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_57[] =
+{0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_58[] =
+{0x22, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_59[] =
+{0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_60[] =
+{0x22, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_61[] =
+{0x22, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_62[] =
+{0x22, 0x6d, 0x61, 0x70, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_63[] =
+{0x22, 0x6d, 0x6f, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_64[] =
+{0x22, 0x6e, 0x61, 0x6e, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_65[] =
+{0x22, 0x6e, 0x65, 0x77, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_66[] =
+{0x22, 0x6e, 0x65, 0x78, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_67[] =
+{0x22, 0x6e, 0x6f, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_68[] =
+{0x22, 0x6e, 0x6f, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_69[] =
+{0x22, 0x6e, 0x75, 0x6c, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_70[] =
+{0x22, 0x6f, 0x66, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_71[] =
+{0x22, 0x6f, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_72[] =
+{0x22, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_73[] =
+{0x22, 0x6f, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_74[] =
+{0x22, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_75[] =
+{0x22, 0x6f, 0x75, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_76[] =
+{0x22, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_77[] =
+{0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_78[] =
+{0x22, 0x70, 0x6f, 0x72, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_79[] =
+{0x22, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_80[] =
+{0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_81[] =
+{0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_82[] =
+{0x22, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_83[] =
+{0x22, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_84[] =
+{0x22, 0x70, 0x75, 0x72, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_85[] =
+{0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_86[] =
+{0x22, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_87[] =
+{0x22, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_88[] =
+{0x22, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_89[] =
+{0x22, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_90[] =
+{0x22, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_91[] =
+{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_92[] =
+{0x22, 0x72, 0x65, 0x6d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_93[] =
+{0x22, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_94[] =
+{0x22, 0x72, 0x6f, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_95[] =
+{0x22, 0x72, 0x6f, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_96[] =
+{0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_97[] =
+{0x22, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_98[] =
+{0x22, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_99[] =
+{0x22, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_100[] =
+{0x22, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_101[] =
+{0x22, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_102[] =
+{0x22, 0x73, 0x6c, 0x61, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_103[] =
+{0x22, 0x73, 0x6c, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_104[] =
+{0x22, 0x73, 0x72, 0x61, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_105[] =
+{0x22, 0x73, 0x72, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_106[] =
+{0x22, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_107[] =
+{0x22, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_108[] =
+{0x22, 0x74, 0x68, 0x65, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_109[] =
+{0x22, 0x74, 0x6f, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_110[] =
+{0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_111[] =
+{0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_112[] =
+{0x22, 0x75, 0x6e, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_113[] =
+{0x22, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_114[] =
+{0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_115[] =
+{0x22, 0x75, 0x73, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_116[] =
+{0x22, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_117[] =
+{0x22, 0x76, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_118[] =
+{0x22, 0x76, 0x70, 0x72, 0x6f, 0x70, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_119[] =
+{0x22, 0x76, 0x75, 0x6e, 0x69, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_120[] =
+{0x22, 0x77, 0x61, 0x69, 0x74, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_121[] =
+{0x22, 0x77, 0x68, 0x65, 0x6e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_122[] =
+{0x22, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_123[] =
+{0x22, 0x77, 0x69, 0x74, 0x68, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_124[] =
+{0x22, 0x78, 0x6f, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_125[] =
+{0x22, 0x78, 0x6e, 0x6f, 0x72, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_126[] =
+{0x22, 0x26, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_127[] =
+{0x22, 0x27, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_128[] =
+{0x22, 0x28, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_129[] =
+{0x22, 0x29, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_130[] =
+{0x22, 0x2a, 0x2a, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_131[] =
+{0x22, 0x2a, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_132[] =
+{0x22, 0x2b, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_133[] =
+{0x22, 0x2d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_134[] =
+{0x22, 0x2c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_135[] =
+{0x22, 0x3a, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_136[] =
+{0x22, 0x3a, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_137[] =
+{0x22, 0x3b, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_138[] =
+{0x22, 0x3c, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_139[] =
+{0x22, 0x3e, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_140[] =
+{0x22, 0x3c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_141[] =
+{0x22, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_142[] =
+{0x22, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_143[] =
+{0x22, 0x2f, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_144[] =
+{0x22, 0x3d, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_145[] =
+{0x22, 0x3c, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_146[] =
+{0x22, 0x3c, 0x3c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_147[] =
+{0x22, 0x3e, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_148[] =
+{0x22, 0x3f, 0x3f, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_149[] =
+{0x22, 0x3f, 0x3e, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_150[] =
+{0x22, 0x3f, 0x3c, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_151[] =
+{0x22, 0x3f, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_152[] =
+{0x22, 0x3f, 0x3c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_153[] =
+{0x22, 0x3f, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_154[] =
+{0x22, 0x3f, 0x2f, 0x3d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_155[] =
+{0x22, 0x3f, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_156[] =
+{0x22, 0x7c, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_157[] =
+{0x22, 0x2e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_158[] =
+{0x22, 0x2f, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_159[] =
+{0x22, 0x40, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_160[] =
+{0x22, 0x5e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_161[] =
+{0x22, 0x5b, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_162[] =
+{0x22, 0x5d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_163[] =
+{0x22, 0x7b, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_164[] =
+{0x22, 0x7d, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_165[] =
+{0x22, 0x3c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_166[] =
+{0x22, 0x3c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_167[] =
+{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_168[] =
+{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_169[] =
+{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_170[] =
+{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_171[] =
+{0x22, 0x3c, 0x42, 0x41, 0x53, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_172[] =
+{0x22, 0x3c, 0x42, 0x41, 0x53, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_173[] =
+{0x22, 0x3c, 0x45, 0x58, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_174[] =
+{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_175[] =
+{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_176[] =
+{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_177[] =
+{0x22, 0x3c, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_178[] =
+{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_179[] =
+{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_180[] =
+{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_181[] =
+{0x22, 0x3c, 0x44, 0x49, 0x47, 0x49, 0x54, 0x3e, 0x22, 0};
+ static JAVACC_CHAR_TYPE tokenImage_arr_182[] =
+{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_183[] =
+{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_184[] =
+{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_185[] =
+{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_186[] =
+{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,
+tokenImage_arr_186,
+ };
+
+}
+}
+#endif
diff --git a/vhdlparser/VhdlParserErrorHandler.hpp b/vhdlparser/VhdlParserErrorHandler.hpp
new file mode 100644
index 0000000..d98f029
--- /dev/null
+++ b/vhdlparser/VhdlParserErrorHandler.hpp
@@ -0,0 +1,40 @@
+#ifndef VHDLPARSERERRORHANDLER_H
+#define VHDLPARSERERRORHANDLER_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <exception>
+#include "VhdlParser.h"
+#include "ErrorHandler.h"
+#include "vhdlstring.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..e8768ee
--- /dev/null
+++ b/vhdlparser/VhdlParserIF.cpp
@@ -0,0 +1,55 @@
+
+#include "VhdlParserTokenManager.h"
+#include "VhdlParserErrorHandler.hpp"
+#include "VhdlParser.h"
+#include "VhdlParserIF.h"
+#include "CharStream.h"
+
+using namespace vhdl::parser;
+
+static VhdlParser * myParser=0;
+
+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
+ {
+ Token *t = myParser->getNextToken();// step to next token
+ op=myParser->getToken(1); // get first token
+ 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..a35deb2
--- /dev/null
+++ b/vhdlparser/VhdlParserTokenManager.cc
@@ -0,0 +1,3605 @@
+/* VhdlParserTokenManager.cc */
+#include "./VhdlParserTokenManager.h"
+namespace vhdl {
+namespace parser {
+static const unsigned long long jjbitVec0[] = {
+ 0xfffffffffffffffeULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL
+};
+static const unsigned long long jjbitVec2[] = {
+ 0x0ULL, 0x0ULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL
+};
+static const unsigned long long jjbitVec3[] = {
+ 0x0ULL, 0x0ULL, 0xffffffff00000000ULL, 0xffffffffffffffffULL
+};
+static const int jjnextStates[] = {
+ 53, 54, 55, 56, 57, 60, 64, 65, 66, 47, 48, 2, 36, 37, 0, 3,
+ 4, 5, 7, 12, 13, 15, 16, 32, 33, 35, 38, 39, 41, 55, 56, 57,
+ 60, 59, 58, 60, 64, 65, 66, 67, 68, 70, 9, 10, 23, 24, 27, 28,
+ 44, 46, 49, 51, 26, 29,
+};
+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[] = {0x26, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_127[] = {0x27, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_128[] = {0x28, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_129[] = {0x29, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_130[] = {0x2a, 0x2a, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_131[] = {0x2a, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_132[] = {0x2b, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_133[] = {0x2d, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_134[] = {0x2c, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_135[] = {0x3a, 0x3d, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_136[] = {0x3a, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_137[] = {0x3b, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_138[] = {0x3c, 0x3d, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_139[] = {0x3e, 0x3d, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_140[] = {0x3c, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_141[] = {0x3e, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_142[] = {0x3d, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_143[] = {0x2f, 0x3d, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_144[] = {0x3d, 0x3e, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_145[] = {0x3c, 0x3e, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_146[] = {0x3c, 0x3c, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_147[] = {0x3e, 0x3e, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_148[] = {0x3f, 0x3f, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_149[] = {0x3f, 0x3e, 0x3d, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_150[] = {0x3f, 0x3c, 0x3d, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_151[] = {0x3f, 0x3e, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_152[] = {0x3f, 0x3c, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_153[] = {0x3f, 0x3d, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_154[] = {0x3f, 0x2f, 0x3d, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_155[] = {0x3f, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_156[] = {0x7c, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_157[] = {0x2e, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_158[] = {0x2f, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_159[] = {0x40, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_160[] = {0x5e, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_161[] = {0x5b, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_162[] = {0x5d, 0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_163[] = {0x7b, 0};
+
+static JAVACC_CHAR_TYPE jjstrLiteralChars_164[] = {0x7d, 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 JAVACC_CHAR_TYPE jjstrLiteralChars_186[] = {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,
+jjstrLiteralChars_186,
+};
+
+/** 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[] = {
+ 0xfffffffffffff801ULL, 0xffffffffffffffffULL, 0x4081fffffffffffULL,
+};
+static const unsigned long long jjtoSkip[] = {
+ 0x7deULL, 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(11, 0);
+ case 10:
+ jjmatchedKind = 3;
+ return jjMoveNfa_0(11, 0);
+ case 13:
+ jjmatchedKind = 4;
+ return jjMoveNfa_0(11, 0);
+ case 32:
+ jjmatchedKind = 1;
+ return jjMoveNfa_0(11, 0);
+ case 38:
+ jjmatchedKind = 126;
+ return jjMoveNfa_0(11, 0);
+ case 39:
+ jjmatchedKind = 127;
+ return jjMoveNfa_0(11, 0);
+ case 40:
+ jjmatchedKind = 128;
+ return jjMoveNfa_0(11, 0);
+ case 41:
+ jjmatchedKind = 129;
+ return jjMoveNfa_0(11, 0);
+ case 42:
+ jjmatchedKind = 131;
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x4ULL);
+ case 43:
+ jjmatchedKind = 132;
+ return jjMoveNfa_0(11, 0);
+ case 44:
+ jjmatchedKind = 134;
+ return jjMoveNfa_0(11, 0);
+ case 45:
+ jjmatchedKind = 133;
+ return jjMoveNfa_0(11, 0);
+ case 46:
+ jjmatchedKind = 157;
+ return jjMoveNfa_0(11, 0);
+ case 47:
+ jjmatchedKind = 158;
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x8000ULL);
+ case 58:
+ jjmatchedKind = 136;
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x80ULL);
+ case 59:
+ jjmatchedKind = 137;
+ return jjMoveNfa_0(11, 0);
+ case 60:
+ jjmatchedKind = 140;
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x60400ULL);
+ case 61:
+ jjmatchedKind = 142;
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x10000ULL);
+ case 62:
+ jjmatchedKind = 141;
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x80800ULL);
+ case 63:
+ jjmatchedKind = 155;
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x0ULL, 0x7f00000ULL);
+ case 64:
+ jjmatchedKind = 159;
+ return jjMoveNfa_0(11, 0);
+ case 65:
+ return jjMoveStringLiteralDfa1_0(0x7ff800ULL, 0x0ULL, 0x0ULL);
+ case 66:
+ return jjMoveStringLiteralDfa1_0(0xf800000ULL, 0x0ULL, 0x0ULL);
+ case 67:
+ return jjMoveStringLiteralDfa1_0(0x3f0000000ULL, 0x0ULL, 0x0ULL);
+ case 68:
+ return jjMoveStringLiteralDfa1_0(0x1c00000000ULL, 0x0ULL, 0x0ULL);
+ case 69:
+ return jjMoveStringLiteralDfa1_0(0x3e000000000ULL, 0x0ULL, 0x0ULL);
+ case 70:
+ return jjMoveStringLiteralDfa1_0(0x7c0000000000ULL, 0x0ULL, 0x0ULL);
+ case 71:
+ return jjMoveStringLiteralDfa1_0(0x7800000000000ULL, 0x0ULL, 0x0ULL);
+ case 73:
+ return jjMoveStringLiteralDfa1_0(0x1f8000000000000ULL, 0x0ULL, 0x0ULL);
+ case 76:
+ return jjMoveStringLiteralDfa1_0(0x3e00000000000000ULL, 0x0ULL, 0x0ULL);
+ case 77:
+ return jjMoveStringLiteralDfa1_0(0xc000000000000000ULL, 0x0ULL, 0x0ULL);
+ case 78:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x3fULL, 0x0ULL);
+ case 79:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xfc0ULL, 0x0ULL);
+ case 80:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x1ff000ULL, 0x0ULL);
+ case 82:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x1ffe00000ULL, 0x0ULL);
+ case 83:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xffe00000000ULL, 0x0ULL);
+ case 84:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xf00000000000ULL, 0x0ULL);
+ case 85:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xf000000000000ULL, 0x0ULL);
+ case 86:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xf0000000000000ULL, 0x0ULL);
+ case 87:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xf00000000000000ULL, 0x0ULL);
+ case 88:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x3000000000000000ULL, 0x0ULL);
+ case 91:
+ jjmatchedKind = 161;
+ return jjMoveNfa_0(11, 0);
+ case 93:
+ jjmatchedKind = 162;
+ return jjMoveNfa_0(11, 0);
+ case 94:
+ jjmatchedKind = 160;
+ return jjMoveNfa_0(11, 0);
+ case 97:
+ return jjMoveStringLiteralDfa1_0(0x7ff800ULL, 0x0ULL, 0x0ULL);
+ case 98:
+ return jjMoveStringLiteralDfa1_0(0xf800000ULL, 0x0ULL, 0x0ULL);
+ case 99:
+ return jjMoveStringLiteralDfa1_0(0x3f0000000ULL, 0x0ULL, 0x0ULL);
+ case 100:
+ return jjMoveStringLiteralDfa1_0(0x1c00000000ULL, 0x0ULL, 0x0ULL);
+ case 101:
+ return jjMoveStringLiteralDfa1_0(0x3e000000000ULL, 0x0ULL, 0x0ULL);
+ case 102:
+ return jjMoveStringLiteralDfa1_0(0x7c0000000000ULL, 0x0ULL, 0x0ULL);
+ case 103:
+ return jjMoveStringLiteralDfa1_0(0x7800000000000ULL, 0x0ULL, 0x0ULL);
+ case 105:
+ return jjMoveStringLiteralDfa1_0(0x1f8000000000000ULL, 0x0ULL, 0x0ULL);
+ case 108:
+ return jjMoveStringLiteralDfa1_0(0x3e00000000000000ULL, 0x0ULL, 0x0ULL);
+ case 109:
+ return jjMoveStringLiteralDfa1_0(0xc000000000000000ULL, 0x0ULL, 0x0ULL);
+ case 110:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x3fULL, 0x0ULL);
+ case 111:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xfc0ULL, 0x0ULL);
+ case 112:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x1ff000ULL, 0x0ULL);
+ case 114:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x1ffe00000ULL, 0x0ULL);
+ case 115:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xffe00000000ULL, 0x0ULL);
+ case 116:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xf00000000000ULL, 0x0ULL);
+ case 117:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xf000000000000ULL, 0x0ULL);
+ case 118:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xf0000000000000ULL, 0x0ULL);
+ case 119:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0xf00000000000000ULL, 0x0ULL);
+ case 120:
+ return jjMoveStringLiteralDfa1_0(0x0ULL, 0x3000000000000000ULL, 0x0ULL);
+ case 123:
+ jjmatchedKind = 163;
+ return jjMoveNfa_0(11, 0);
+ case 124:
+ jjmatchedKind = 156;
+ return jjMoveNfa_0(11, 0);
+ case 125:
+ jjmatchedKind = 164;
+ return jjMoveNfa_0(11, 0);
+ default :
+ return jjMoveNfa_0(11, 0);
+ }
+}
+
+ int VhdlParserTokenManager::jjMoveStringLiteralDfa1_0(unsigned long long active0, unsigned long long active1, unsigned long long active2){
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 0);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 42:
+ if ((active2 & 0x4ULL) != 0L)
+ {
+ jjmatchedKind = 130;
+ jjmatchedPos = 1;
+ }
+ break;
+ case 47:
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4000000ULL);
+ case 60:
+ if ((active2 & 0x40000ULL) != 0L)
+ {
+ jjmatchedKind = 146;
+ jjmatchedPos = 1;
+ }
+ else if ((active2 & 0x1000000ULL) != 0L)
+ {
+ jjmatchedKind = 152;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x400000ULL);
+ case 61:
+ if ((active2 & 0x80ULL) != 0L)
+ {
+ jjmatchedKind = 135;
+ jjmatchedPos = 1;
+ }
+ else if ((active2 & 0x400ULL) != 0L)
+ {
+ jjmatchedKind = 138;
+ jjmatchedPos = 1;
+ }
+ else if ((active2 & 0x800ULL) != 0L)
+ {
+ jjmatchedKind = 139;
+ jjmatchedPos = 1;
+ }
+ else if ((active2 & 0x8000ULL) != 0L)
+ {
+ jjmatchedKind = 143;
+ jjmatchedPos = 1;
+ }
+ else if ((active2 & 0x2000000ULL) != 0L)
+ {
+ jjmatchedKind = 153;
+ jjmatchedPos = 1;
+ }
+ break;
+ case 62:
+ if ((active2 & 0x10000ULL) != 0L)
+ {
+ jjmatchedKind = 144;
+ jjmatchedPos = 1;
+ }
+ else if ((active2 & 0x20000ULL) != 0L)
+ {
+ jjmatchedKind = 145;
+ jjmatchedPos = 1;
+ }
+ else if ((active2 & 0x80000ULL) != 0L)
+ {
+ jjmatchedKind = 147;
+ jjmatchedPos = 1;
+ }
+ else if ((active2 & 0x800000ULL) != 0L)
+ {
+ jjmatchedKind = 151;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x200000ULL);
+ case 63:
+ if ((active2 & 0x100000ULL) != 0L)
+ {
+ jjmatchedKind = 148;
+ jjmatchedPos = 1;
+ }
+ break;
+ case 65:
+ return jjMoveStringLiteralDfa2_0(active0, 0x4200040020000000ULL, active1, 0x110000000203001ULL, active2, 0L);
+ case 66:
+ return jjMoveStringLiteralDfa2_0(active0, 0x800ULL, active1, 0L, active2, 0L);
+ case 67:
+ return jjMoveStringLiteralDfa2_0(active0, 0x1000ULL, active1, 0L, active2, 0L);
+ case 69:
+ return jjMoveStringLiteralDfa2_0(active0, 0x1800400800000ULL, active1, 0xf3fc00006ULL, active2, 0L);
+ case 70:
+ if ((active0 & 0x8000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 51;
+ jjmatchedPos = 1;
+ }
+ else if ((active1 & 0x40ULL) != 0L)
+ {
+ jjmatchedKind = 70;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0x2000ULL, active1, 0L, active2, 0L);
+ case 72:
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x600102000000000ULL, active2, 0L);
+ case 73:
+ return jjMoveStringLiteralDfa2_0(active0, 0x1c00080800000000ULL, active1, 0x800001000000000ULL, active2, 0L);
+ case 76:
+ return jjMoveStringLiteralDfa2_0(active0, 0x600100c000ULL, active1, 0xc000000000ULL, active2, 0L);
+ case 77:
+ return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000ULL, active1, 0x20000000000000ULL, active2, 0L);
+ case 78:
+ if ((active0 & 0x20000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 53;
+ jjmatchedPos = 1;
+ }
+ else if ((active1 & 0x80ULL) != 0L)
+ {
+ jjmatchedKind = 71;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0xc0018000010000ULL, active1, 0x2007000000000000ULL, active2, 0L);
+ case 79:
+ if ((active1 & 0x200000000000ULL) != 0L)
+ {
+ jjmatchedKind = 109;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0xa0003013d2000000ULL, active1, 0x10000000c000c018ULL, active2, 0L);
+ case 80:
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000000100ULL, active2, 0L);
+ case 82:
+ if ((active1 & 0x200ULL) != 0L)
+ {
+ jjmatchedKind = 73;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0x2000000060000ULL, active1, 0x4300000f0000ULL, active2, 0L);
+ case 83:
+ if ((active0 & 0x100000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 56;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0x380000ULL, active1, 0x8000000000000ULL, active2, 0L);
+ case 84:
+ return jjMoveStringLiteralDfa2_0(active0, 0x400000ULL, active1, 0x40000000400ULL, active2, 0L);
+ case 85:
+ return jjMoveStringLiteralDfa2_0(active0, 0x440000c000000ULL, active1, 0x80080000100820ULL, active2, 0L);
+ case 88:
+ return jjMoveStringLiteralDfa2_0(active0, 0x20000000000ULL, active1, 0L, active2, 0L);
+ case 89:
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x800000000000ULL, active2, 0L);
+ case 97:
+ return jjMoveStringLiteralDfa2_0(active0, 0x4200040020000000ULL, active1, 0x110000000203001ULL, active2, 0L);
+ case 98:
+ return jjMoveStringLiteralDfa2_0(active0, 0x800ULL, active1, 0L, active2, 0L);
+ case 99:
+ return jjMoveStringLiteralDfa2_0(active0, 0x1000ULL, active1, 0L, active2, 0L);
+ case 101:
+ return jjMoveStringLiteralDfa2_0(active0, 0x1800400800000ULL, active1, 0xf3fc00006ULL, active2, 0L);
+ case 102:
+ if ((active0 & 0x8000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 51;
+ jjmatchedPos = 1;
+ }
+ else if ((active1 & 0x40ULL) != 0L)
+ {
+ jjmatchedKind = 70;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0x2000ULL, active1, 0L, active2, 0L);
+ case 104:
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x600102000000000ULL, active2, 0L);
+ case 105:
+ return jjMoveStringLiteralDfa2_0(active0, 0x1c00080800000000ULL, active1, 0x800001000000000ULL, active2, 0L);
+ case 108:
+ return jjMoveStringLiteralDfa2_0(active0, 0x600100c000ULL, active1, 0xc000000000ULL, active2, 0L);
+ case 109:
+ return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000ULL, active1, 0x20000000000000ULL, active2, 0L);
+ case 110:
+ if ((active0 & 0x20000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 53;
+ jjmatchedPos = 1;
+ }
+ else if ((active1 & 0x80ULL) != 0L)
+ {
+ jjmatchedKind = 71;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0xc0018000010000ULL, active1, 0x2007000000000000ULL, active2, 0L);
+ case 111:
+ if ((active1 & 0x200000000000ULL) != 0L)
+ {
+ jjmatchedKind = 109;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0xa0003013d2000000ULL, active1, 0x10000000c000c018ULL, active2, 0L);
+ case 112:
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000000100ULL, active2, 0L);
+ case 114:
+ if ((active1 & 0x200ULL) != 0L)
+ {
+ jjmatchedKind = 73;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0x2000000060000ULL, active1, 0x4300000f0000ULL, active2, 0L);
+ case 115:
+ if ((active0 & 0x100000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 56;
+ jjmatchedPos = 1;
+ }
+ return jjMoveStringLiteralDfa2_0(active0, 0x380000ULL, active1, 0x8000000000000ULL, active2, 0L);
+ case 116:
+ return jjMoveStringLiteralDfa2_0(active0, 0x400000ULL, active1, 0x40000000400ULL, active2, 0L);
+ case 117:
+ return jjMoveStringLiteralDfa2_0(active0, 0x440000c000000ULL, active1, 0x80080000100820ULL, active2, 0L);
+ case 120:
+ return jjMoveStringLiteralDfa2_0(active0, 0x20000000000ULL, active1, 0L, active2, 0L);
+ case 121:
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x800000000000ULL, active2, 0L);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 1);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 1);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 61:
+ if ((active2 & 0x200000ULL) != 0L)
+ {
+ jjmatchedKind = 149;
+ jjmatchedPos = 2;
+ }
+ else if ((active2 & 0x400000ULL) != 0L)
+ {
+ jjmatchedKind = 150;
+ jjmatchedPos = 2;
+ }
+ else if ((active2 & 0x4000000ULL) != 0L)
+ {
+ jjmatchedKind = 154;
+ jjmatchedPos = 2;
+ }
+ break;
+ case 65:
+ if ((active1 & 0x4000000000ULL) != 0L)
+ {
+ jjmatchedKind = 102;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x10000000000ULL) != 0L)
+ {
+ jjmatchedKind = 104;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000ULL, active1, 0x1402000000000ULL, active2, 0L);
+ case 66:
+ return jjMoveStringLiteralDfa3_0(active0, 0x600000000000000ULL, active1, 0x80000000000ULL, active2, 0L);
+ case 67:
+ return jjMoveStringLiteralDfa3_0(active0, 0x21000ULL, active1, 0x401000ULL, active2, 0L);
+ case 68:
+ if ((active0 & 0x10000ULL) != 0L)
+ {
+ jjmatchedKind = 16;
+ jjmatchedPos = 2;
+ }
+ else if ((active0 & 0x8000000000ULL) != 0L)
+ {
+ jjmatchedKind = 39;
+ jjmatchedPos = 2;
+ }
+ else if ((active0 & 0x8000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 63;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x2000000ULL, active1, 0L, active2, 0L);
+ case 69:
+ if ((active1 & 0x8000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 115;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000ULL, active1, 0x200100000000100ULL, active2, 0L);
+ case 70:
+ return jjMoveStringLiteralDfa3_0(active0, 0x404000000ULL, active1, 0L, active2, 0L);
+ case 71:
+ return jjMoveStringLiteralDfa3_0(active0, 0x800000ULL, active1, 0x1000800000ULL, active2, 0L);
+ case 72:
+ return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x400ULL, active2, 0L);
+ case 73:
+ return jjMoveStringLiteralDfa3_0(active0, 0x60000004000ULL, active1, 0x502000000000000ULL, active2, 0L);
+ case 74:
+ return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x1000000ULL, active2, 0L);
+ case 76:
+ if ((active0 & 0x8000ULL) != 0L)
+ {
+ jjmatchedKind = 15;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x40000000ULL) != 0L)
+ {
+ jjmatchedKind = 94;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x8000000000ULL) != 0L)
+ {
+ jjmatchedKind = 103;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x20000000000ULL) != 0L)
+ {
+ jjmatchedKind = 105;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x80000000000ULL, active1, 0x202000020ULL, active2, 0L);
+ case 77:
+ if ((active1 & 0x10000000ULL) != 0L)
+ {
+ jjmatchedKind = 92;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x10000000ULL, active1, 0L, active2, 0L);
+ case 78:
+ return jjMoveStringLiteralDfa3_0(active0, 0x801c001c0000000ULL, active1, 0x80000000200001ULL, active2, 0L);
+ case 79:
+ return jjMoveStringLiteralDfa3_0(active0, 0x2082000001000000ULL, active1, 0x20200000000f0000ULL, active2, 0L);
+ case 80:
+ if ((active0 & 0x4000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 62;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000ULL, active1, 0x800020000000ULL, active2, 0L);
+ case 81:
+ return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x400000000ULL, active2, 0L);
+ case 82:
+ if ((active0 & 0x100000000000ULL) != 0L)
+ {
+ jjmatchedKind = 44;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x8ULL) != 0L)
+ {
+ jjmatchedKind = 67;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x80000000ULL) != 0L)
+ {
+ jjmatchedKind = 95;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x1000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 124;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x200000040000ULL, active1, 0x50040000106000ULL, active2, 0L);
+ case 83:
+ if ((active0 & 0x800ULL) != 0L)
+ {
+ jjmatchedKind = 11;
+ jjmatchedPos = 2;
+ }
+ else if ((active0 & 0x8000000ULL) != 0L)
+ {
+ jjmatchedKind = 27;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x6820380000ULL, active1, 0xc008000ULL, active2, 0L);
+ case 84:
+ if ((active1 & 0x10ULL) != 0L)
+ {
+ jjmatchedKind = 68;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x800ULL) != 0L)
+ {
+ jjmatchedKind = 75;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x1000010000402000ULL, active1, 0x804000100000000ULL, active2, 0L);
+ case 86:
+ return jjMoveStringLiteralDfa3_0(active0, 0x200000000ULL, active1, 0x800000000ULL, active2, 0L);
+ case 87:
+ if ((active1 & 0x2ULL) != 0L)
+ {
+ jjmatchedKind = 65;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x1000000000ULL, active1, 0L, active2, 0L);
+ case 88:
+ return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x4ULL, active2, 0L);
+ case 97:
+ if ((active1 & 0x4000000000ULL) != 0L)
+ {
+ jjmatchedKind = 102;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x10000000000ULL) != 0L)
+ {
+ jjmatchedKind = 104;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000ULL, active1, 0x1402000000000ULL, active2, 0L);
+ case 98:
+ return jjMoveStringLiteralDfa3_0(active0, 0x600000000000000ULL, active1, 0x80000000000ULL, active2, 0L);
+ case 99:
+ return jjMoveStringLiteralDfa3_0(active0, 0x21000ULL, active1, 0x401000ULL, active2, 0L);
+ case 100:
+ if ((active0 & 0x10000ULL) != 0L)
+ {
+ jjmatchedKind = 16;
+ jjmatchedPos = 2;
+ }
+ else if ((active0 & 0x8000000000ULL) != 0L)
+ {
+ jjmatchedKind = 39;
+ jjmatchedPos = 2;
+ }
+ else if ((active0 & 0x8000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 63;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x2000000ULL, active1, 0L, active2, 0L);
+ case 101:
+ if ((active1 & 0x8000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 115;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000ULL, active1, 0x200100000000100ULL, active2, 0L);
+ case 102:
+ return jjMoveStringLiteralDfa3_0(active0, 0x404000000ULL, active1, 0L, active2, 0L);
+ case 103:
+ return jjMoveStringLiteralDfa3_0(active0, 0x800000ULL, active1, 0x1000800000ULL, active2, 0L);
+ case 104:
+ return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x400ULL, active2, 0L);
+ case 105:
+ return jjMoveStringLiteralDfa3_0(active0, 0x60000004000ULL, active1, 0x502000000000000ULL, active2, 0L);
+ case 106:
+ return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x1000000ULL, active2, 0L);
+ case 108:
+ if ((active0 & 0x8000ULL) != 0L)
+ {
+ jjmatchedKind = 15;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x40000000ULL) != 0L)
+ {
+ jjmatchedKind = 94;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x8000000000ULL) != 0L)
+ {
+ jjmatchedKind = 103;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x20000000000ULL) != 0L)
+ {
+ jjmatchedKind = 105;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x80000000000ULL, active1, 0x202000020ULL, active2, 0L);
+ case 109:
+ if ((active1 & 0x10000000ULL) != 0L)
+ {
+ jjmatchedKind = 92;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x10000000ULL, active1, 0L, active2, 0L);
+ case 110:
+ return jjMoveStringLiteralDfa3_0(active0, 0x801c001c0000000ULL, active1, 0x80000000200001ULL, active2, 0L);
+ case 111:
+ return jjMoveStringLiteralDfa3_0(active0, 0x2082000001000000ULL, active1, 0x20200000000f0000ULL, active2, 0L);
+ case 112:
+ if ((active0 & 0x4000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 62;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000ULL, active1, 0x800020000000ULL, active2, 0L);
+ case 113:
+ return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x400000000ULL, active2, 0L);
+ case 114:
+ if ((active0 & 0x100000000000ULL) != 0L)
+ {
+ jjmatchedKind = 44;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x8ULL) != 0L)
+ {
+ jjmatchedKind = 67;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x80000000ULL) != 0L)
+ {
+ jjmatchedKind = 95;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x1000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 124;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x200000040000ULL, active1, 0x50040000106000ULL, active2, 0L);
+ case 115:
+ if ((active0 & 0x800ULL) != 0L)
+ {
+ jjmatchedKind = 11;
+ jjmatchedPos = 2;
+ }
+ else if ((active0 & 0x8000000ULL) != 0L)
+ {
+ jjmatchedKind = 27;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x6820380000ULL, active1, 0xc008000ULL, active2, 0L);
+ case 116:
+ if ((active1 & 0x10ULL) != 0L)
+ {
+ jjmatchedKind = 68;
+ jjmatchedPos = 2;
+ }
+ else if ((active1 & 0x800ULL) != 0L)
+ {
+ jjmatchedKind = 75;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x1000010000402000ULL, active1, 0x804000100000000ULL, active2, 0L);
+ case 118:
+ return jjMoveStringLiteralDfa3_0(active0, 0x200000000ULL, active1, 0x800000000ULL, active2, 0L);
+ case 119:
+ if ((active1 & 0x2ULL) != 0L)
+ {
+ jjmatchedKind = 65;
+ jjmatchedPos = 2;
+ }
+ return jjMoveStringLiteralDfa3_0(active0, 0x1000000000ULL, active1, 0L, active2, 0L);
+ case 120:
+ return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x4ULL, active2, 0L);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 2);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 2);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 65:
+ return jjMoveStringLiteralDfa4_0(active0, 0x400044000ULL, active1, 0x2000ULL);
+ case 67:
+ return jjMoveStringLiteralDfa4_0(active0, 0x600801000000ULL, active1, 0x30000ULL);
+ case 68:
+ if ((active1 & 0x1ULL) != 0L)
+ {
+ jjmatchedKind = 64;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20000000000000ULL);
+ case 69:
+ if ((active0 & 0x20000000ULL) != 0L)
+ {
+ jjmatchedKind = 29;
+ jjmatchedPos = 3;
+ }
+ else if ((active0 & 0x2000000000ULL) != 0L)
+ {
+ jjmatchedKind = 37;
+ jjmatchedPos = 3;
+ }
+ else if ((active0 & 0x80000000000ULL) != 0L)
+ {
+ jjmatchedKind = 43;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x100000ULL) != 0L)
+ {
+ jjmatchedKind = 84;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x800000000000ULL) != 0L)
+ {
+ jjmatchedKind = 111;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x1201800200083000ULL, active1, 0xa03000400ULL);
+ case 70:
+ return jjMoveStringLiteralDfa4_0(active0, 0x44000000ULL, active1, 0x1000000000000ULL);
+ case 71:
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000ULL);
+ case 72:
+ if ((active1 & 0x800000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 123;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x20000ULL, active1, 0L);
+ case 73:
+ return jjMoveStringLiteralDfa4_0(active0, 0x14000800000ULL, active1, 0x94000000800000ULL);
+ case 75:
+ return jjMoveStringLiteralDfa4_0(active0, 0x800000000000000ULL, active1, 0x1000ULL);
+ case 76:
+ if ((active1 & 0x20ULL) != 0L)
+ {
+ jjmatchedKind = 69;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x400000000000000ULL);
+ case 78:
+ if ((active1 & 0x100ULL) != 0L)
+ {
+ jjmatchedKind = 72;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x100000000000ULL) != 0L)
+ {
+ jjmatchedKind = 108;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x200000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 121;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x1000000000ULL, active1, 0x401000000000ULL);
+ case 79:
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40040020400000ULL);
+ case 80:
+ if ((active0 & 0x2000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 61;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x10000000ULL, active1, 0x40000ULL);
+ case 82:
+ if ((active1 & 0x2000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 125;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x444040000400000ULL, active1, 0x2000000000ULL);
+ case 83:
+ return jjMoveStringLiteralDfa4_0(active0, 0x80000000ULL, active1, 0L);
+ case 84:
+ if ((active0 & 0x20000000000ULL) != 0L)
+ {
+ jjmatchedKind = 41;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x4ULL) != 0L)
+ {
+ jjmatchedKind = 66;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x4000ULL) != 0L)
+ {
+ jjmatchedKind = 78;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x100000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 120;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x100000000ULL, active1, 0x208000c088000ULL);
+ case 85:
+ return jjMoveStringLiteralDfa4_0(active0, 0x92000000300000ULL, active1, 0x500000000ULL);
+ case 89:
+ if ((active0 & 0x2000000ULL) != 0L)
+ {
+ jjmatchedKind = 25;
+ jjmatchedPos = 3;
+ }
+ break;
+ case 97:
+ return jjMoveStringLiteralDfa4_0(active0, 0x400044000ULL, active1, 0x2000ULL);
+ case 99:
+ return jjMoveStringLiteralDfa4_0(active0, 0x600801000000ULL, active1, 0x30000ULL);
+ case 100:
+ if ((active1 & 0x1ULL) != 0L)
+ {
+ jjmatchedKind = 64;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20000000000000ULL);
+ case 101:
+ if ((active0 & 0x20000000ULL) != 0L)
+ {
+ jjmatchedKind = 29;
+ jjmatchedPos = 3;
+ }
+ else if ((active0 & 0x2000000000ULL) != 0L)
+ {
+ jjmatchedKind = 37;
+ jjmatchedPos = 3;
+ }
+ else if ((active0 & 0x80000000000ULL) != 0L)
+ {
+ jjmatchedKind = 43;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x100000ULL) != 0L)
+ {
+ jjmatchedKind = 84;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x800000000000ULL) != 0L)
+ {
+ jjmatchedKind = 111;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x1201800200083000ULL, active1, 0xa03000400ULL);
+ case 102:
+ return jjMoveStringLiteralDfa4_0(active0, 0x44000000ULL, active1, 0x1000000000000ULL);
+ case 103:
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000ULL);
+ case 104:
+ if ((active1 & 0x800000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 123;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x20000ULL, active1, 0L);
+ case 105:
+ return jjMoveStringLiteralDfa4_0(active0, 0x14000800000ULL, active1, 0x94000000800000ULL);
+ case 107:
+ return jjMoveStringLiteralDfa4_0(active0, 0x800000000000000ULL, active1, 0x1000ULL);
+ case 108:
+ if ((active1 & 0x20ULL) != 0L)
+ {
+ jjmatchedKind = 69;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x400000000000000ULL);
+ case 110:
+ if ((active1 & 0x100ULL) != 0L)
+ {
+ jjmatchedKind = 72;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x100000000000ULL) != 0L)
+ {
+ jjmatchedKind = 108;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x200000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 121;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x1000000000ULL, active1, 0x401000000000ULL);
+ case 111:
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40040020400000ULL);
+ case 112:
+ if ((active0 & 0x2000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 61;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x10000000ULL, active1, 0x40000ULL);
+ case 114:
+ if ((active1 & 0x2000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 125;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x444040000400000ULL, active1, 0x2000000000ULL);
+ case 115:
+ return jjMoveStringLiteralDfa4_0(active0, 0x80000000ULL, active1, 0L);
+ case 116:
+ if ((active0 & 0x20000000000ULL) != 0L)
+ {
+ jjmatchedKind = 41;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x4ULL) != 0L)
+ {
+ jjmatchedKind = 66;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x4000ULL) != 0L)
+ {
+ jjmatchedKind = 78;
+ jjmatchedPos = 3;
+ }
+ else if ((active1 & 0x100000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 120;
+ jjmatchedPos = 3;
+ }
+ return jjMoveStringLiteralDfa4_0(active0, 0x100000000ULL, active1, 0x208000c088000ULL);
+ case 117:
+ return jjMoveStringLiteralDfa4_0(active0, 0x92000000300000ULL, active1, 0x500000000ULL);
+ case 121:
+ if ((active0 & 0x2000000ULL) != 0L)
+ {
+ jjmatchedKind = 25;
+ jjmatchedPos = 3;
+ }
+ break;
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 3);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 3);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 65:
+ return jjMoveStringLiteralDfa5_0(active0, 0xc00000000000000ULL, active1, 0x10001002001000ULL);
+ case 67:
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x201000000ULL);
+ case 68:
+ return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000ULL, active1, 0L);
+ case 69:
+ if ((active0 & 0x200000000000ULL) != 0L)
+ {
+ jjmatchedKind = 45;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x200000ULL) != 0L)
+ {
+ jjmatchedKind = 85;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x20000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 117;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x400000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 122;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x104000000ULL, active1, 0x24000f0000ULL);
+ case 70:
+ if ((active0 & 0x4000000000ULL) != 0L)
+ {
+ jjmatchedKind = 38;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1000000000000ULL);
+ case 73:
+ return jjMoveStringLiteralDfa5_0(active0, 0x40420000ULL, active1, 0L);
+ case 75:
+ if ((active0 & 0x1000000ULL) != 0L)
+ {
+ jjmatchedKind = 24;
+ jjmatchedPos = 4;
+ }
+ break;
+ case 76:
+ if ((active0 & 0x200000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 57;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x4000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 114;
+ jjmatchedPos = 4;
+ }
+ break;
+ case 77:
+ return jjMoveStringLiteralDfa5_0(active0, 0x300000ULL, active1, 0x2000ULL);
+ case 78:
+ if ((active0 & 0x800000ULL) != 0L)
+ {
+ jjmatchedKind = 23;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x40000000000ULL, active1, 0x40000000000ULL);
+ case 79:
+ return jjMoveStringLiteralDfa5_0(active0, 0x810000000ULL, active1, 0L);
+ case 80:
+ if ((active0 & 0x2000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 49;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x40000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 118;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000ULL);
+ case 82:
+ if ((active0 & 0x2000ULL) != 0L)
+ {
+ jjmatchedKind = 13;
+ jjmatchedPos = 4;
+ }
+ else if ((active0 & 0x200000000ULL) != 0L)
+ {
+ jjmatchedKind = 33;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x1011800000080000ULL, active1, 0x92c400400ULL);
+ case 83:
+ if ((active0 & 0x4000ULL) != 0L)
+ {
+ jjmatchedKind = 14;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x2000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 113;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x1000ULL, active1, 0x400000800000ULL);
+ case 84:
+ if ((active0 & 0x80000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 55;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x80000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 119;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x40411080000000ULL, active1, 0L);
+ case 85:
+ return jjMoveStringLiteralDfa5_0(active0, 0x400000000ULL, active1, 0L);
+ case 89:
+ if ((active0 & 0x40000ULL) != 0L)
+ {
+ jjmatchedKind = 18;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000ULL);
+ case 97:
+ return jjMoveStringLiteralDfa5_0(active0, 0xc00000000000000ULL, active1, 0x10001002001000ULL);
+ case 99:
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x201000000ULL);
+ case 100:
+ return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000ULL, active1, 0L);
+ case 101:
+ if ((active0 & 0x200000000000ULL) != 0L)
+ {
+ jjmatchedKind = 45;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x200000ULL) != 0L)
+ {
+ jjmatchedKind = 85;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x20000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 117;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x400000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 122;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x104000000ULL, active1, 0x24000f0000ULL);
+ case 102:
+ if ((active0 & 0x4000000000ULL) != 0L)
+ {
+ jjmatchedKind = 38;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1000000000000ULL);
+ case 105:
+ return jjMoveStringLiteralDfa5_0(active0, 0x40420000ULL, active1, 0L);
+ case 107:
+ if ((active0 & 0x1000000ULL) != 0L)
+ {
+ jjmatchedKind = 24;
+ jjmatchedPos = 4;
+ }
+ break;
+ case 108:
+ if ((active0 & 0x200000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 57;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x4000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 114;
+ jjmatchedPos = 4;
+ }
+ break;
+ case 109:
+ return jjMoveStringLiteralDfa5_0(active0, 0x300000ULL, active1, 0x2000ULL);
+ case 110:
+ if ((active0 & 0x800000ULL) != 0L)
+ {
+ jjmatchedKind = 23;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x40000000000ULL, active1, 0x40000000000ULL);
+ case 111:
+ return jjMoveStringLiteralDfa5_0(active0, 0x810000000ULL, active1, 0L);
+ case 112:
+ if ((active0 & 0x2000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 49;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x40000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 118;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000ULL);
+ case 114:
+ if ((active0 & 0x2000ULL) != 0L)
+ {
+ jjmatchedKind = 13;
+ jjmatchedPos = 4;
+ }
+ else if ((active0 & 0x200000000ULL) != 0L)
+ {
+ jjmatchedKind = 33;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x1011800000080000ULL, active1, 0x92c400400ULL);
+ case 115:
+ if ((active0 & 0x4000ULL) != 0L)
+ {
+ jjmatchedKind = 14;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x2000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 113;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x1000ULL, active1, 0x400000800000ULL);
+ case 116:
+ if ((active0 & 0x80000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 55;
+ jjmatchedPos = 4;
+ }
+ else if ((active1 & 0x80000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 119;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0x40411080000000ULL, active1, 0L);
+ case 117:
+ return jjMoveStringLiteralDfa5_0(active0, 0x400000000ULL, active1, 0L);
+ case 121:
+ if ((active0 & 0x40000ULL) != 0L)
+ {
+ jjmatchedKind = 18;
+ jjmatchedPos = 4;
+ }
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000ULL);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 4);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 4);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 65:
+ return jjMoveStringLiteralDfa6_0(active0, 0x1000800080000000ULL, active1, 0L);
+ case 66:
+ return jjMoveStringLiteralDfa6_0(active0, 0x400000ULL, active1, 0x10000000000000ULL);
+ case 67:
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x80000ULL);
+ case 68:
+ if ((active1 & 0x400000ULL) != 0L)
+ {
+ jjmatchedKind = 86;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x2000000000ULL) != 0L)
+ {
+ jjmatchedKind = 101;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x10000ULL);
+ case 69:
+ if ((active0 & 0x100000ULL) != 0L)
+ {
+ jjmatchedKind = 20;
+ jjmatchedPos = 5;
+ }
+ else if ((active0 & 0x10000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 52;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x4040000200000ULL, active1, 0x1000000002000ULL);
+ case 71:
+ if ((active1 & 0x40000000000ULL) != 0L)
+ {
+ jjmatchedKind = 106;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x800000040000000ULL, active1, 0x1000ULL);
+ case 73:
+ return jjMoveStringLiteralDfa6_0(active0, 0x41400000000000ULL, active1, 0x80c000000ULL);
+ case 76:
+ if ((active1 & 0x1000000000ULL) != 0L)
+ {
+ jjmatchedKind = 100;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x400000000ULL, active1, 0L);
+ case 78:
+ if ((active1 & 0x100000000ULL) != 0L)
+ {
+ jjmatchedKind = 96;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x810000000ULL, active1, 0x400000000ULL);
+ case 79:
+ if ((active0 & 0x1000000000ULL) != 0L)
+ {
+ jjmatchedKind = 36;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8000ULL);
+ case 80:
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x480000000000ULL);
+ case 82:
+ if ((active0 & 0x4000000ULL) != 0L)
+ {
+ jjmatchedKind = 26;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x400000000000000ULL, active1, 0x40000ULL);
+ case 83:
+ if ((active0 & 0x1000ULL) != 0L)
+ {
+ jjmatchedKind = 12;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x400ULL) != 0L)
+ {
+ jjmatchedKind = 74;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2020000ULL);
+ case 84:
+ if ((active0 & 0x80000ULL) != 0L)
+ {
+ jjmatchedKind = 19;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x1000000ULL) != 0L)
+ {
+ jjmatchedKind = 88;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x20000000ULL) != 0L)
+ {
+ jjmatchedKind = 93;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x200000000ULL) != 0L)
+ {
+ jjmatchedKind = 97;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x20000ULL, active1, 0x800000ULL);
+ case 88:
+ return jjMoveStringLiteralDfa6_0(active0, 0x100000000ULL, active1, 0L);
+ case 89:
+ if ((active0 & 0x10000000000ULL) != 0L)
+ {
+ jjmatchedKind = 40;
+ jjmatchedPos = 5;
+ }
+ break;
+ case 97:
+ return jjMoveStringLiteralDfa6_0(active0, 0x1000800080000000ULL, active1, 0L);
+ case 98:
+ return jjMoveStringLiteralDfa6_0(active0, 0x400000ULL, active1, 0x10000000000000ULL);
+ case 99:
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x80000ULL);
+ case 100:
+ if ((active1 & 0x400000ULL) != 0L)
+ {
+ jjmatchedKind = 86;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x2000000000ULL) != 0L)
+ {
+ jjmatchedKind = 101;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x10000ULL);
+ case 101:
+ if ((active0 & 0x100000ULL) != 0L)
+ {
+ jjmatchedKind = 20;
+ jjmatchedPos = 5;
+ }
+ else if ((active0 & 0x10000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 52;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x4040000200000ULL, active1, 0x1000000002000ULL);
+ case 103:
+ if ((active1 & 0x40000000000ULL) != 0L)
+ {
+ jjmatchedKind = 106;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x800000040000000ULL, active1, 0x1000ULL);
+ case 105:
+ return jjMoveStringLiteralDfa6_0(active0, 0x41400000000000ULL, active1, 0x80c000000ULL);
+ case 108:
+ if ((active1 & 0x1000000000ULL) != 0L)
+ {
+ jjmatchedKind = 100;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x400000000ULL, active1, 0L);
+ case 110:
+ if ((active1 & 0x100000000ULL) != 0L)
+ {
+ jjmatchedKind = 96;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x810000000ULL, active1, 0x400000000ULL);
+ case 111:
+ if ((active0 & 0x1000000000ULL) != 0L)
+ {
+ jjmatchedKind = 36;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8000ULL);
+ case 112:
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x480000000000ULL);
+ case 114:
+ if ((active0 & 0x4000000ULL) != 0L)
+ {
+ jjmatchedKind = 26;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x400000000000000ULL, active1, 0x40000ULL);
+ case 115:
+ if ((active0 & 0x1000ULL) != 0L)
+ {
+ jjmatchedKind = 12;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x400ULL) != 0L)
+ {
+ jjmatchedKind = 74;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2020000ULL);
+ case 116:
+ if ((active0 & 0x80000ULL) != 0L)
+ {
+ jjmatchedKind = 19;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x1000000ULL) != 0L)
+ {
+ jjmatchedKind = 88;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x20000000ULL) != 0L)
+ {
+ jjmatchedKind = 93;
+ jjmatchedPos = 5;
+ }
+ else if ((active1 & 0x200000000ULL) != 0L)
+ {
+ jjmatchedKind = 97;
+ jjmatchedPos = 5;
+ }
+ return jjMoveStringLiteralDfa6_0(active0, 0x20000ULL, active1, 0x800000ULL);
+ case 120:
+ return jjMoveStringLiteralDfa6_0(active0, 0x100000000ULL, active1, 0L);
+ case 121:
+ if ((active0 & 0x10000000000ULL) != 0L)
+ {
+ jjmatchedKind = 40;
+ jjmatchedPos = 5;
+ }
+ break;
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 5);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 5);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 65:
+ return jjMoveStringLiteralDfa7_0(active0, 0x40000000000000ULL, active1, 0L);
+ case 67:
+ if ((active0 & 0x1000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 48;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x100040c000000ULL);
+ case 68:
+ if ((active0 & 0x4000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 50;
+ jjmatchedPos = 6;
+ }
+ break;
+ case 69:
+ if ((active0 & 0x800000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 59;
+ jjmatchedPos = 6;
+ }
+ else if ((active1 & 0x1000ULL) != 0L)
+ {
+ jjmatchedKind = 76;
+ jjmatchedPos = 6;
+ }
+ else if ((active1 & 0x2000000ULL) != 0L)
+ {
+ jjmatchedKind = 89;
+ jjmatchedPos = 6;
+ }
+ else if ((active1 & 0x80000000000ULL) != 0L)
+ {
+ jjmatchedKind = 107;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0x10020000ULL, active1, 0x800000ULL);
+ case 76:
+ if ((active0 & 0x1000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 60;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10000000000000ULL);
+ case 78:
+ return jjMoveStringLiteralDfa7_0(active0, 0x880000000ULL, active1, 0x8000ULL);
+ case 79:
+ return jjMoveStringLiteralDfa7_0(active0, 0x400000000000ULL, active1, 0x400000000000ULL);
+ case 83:
+ if ((active1 & 0x20000ULL) != 0L)
+ {
+ jjmatchedKind = 81;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0x40000000000ULL, active1, 0L);
+ case 84:
+ if ((active0 & 0x100000000ULL) != 0L)
+ {
+ jjmatchedKind = 32;
+ jjmatchedPos = 6;
+ }
+ else if ((active0 & 0x400000000ULL) != 0L)
+ {
+ jjmatchedKind = 34;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0x800000000000ULL, active1, 0x8000c2000ULL);
+ case 85:
+ return jjMoveStringLiteralDfa7_0(active0, 0x40400000ULL, active1, 0x10000ULL);
+ case 89:
+ if ((active0 & 0x400000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 58;
+ jjmatchedPos = 6;
+ }
+ break;
+ case 95:
+ return jjMoveStringLiteralDfa7_0(active0, 0x200000ULL, active1, 0L);
+ case 97:
+ return jjMoveStringLiteralDfa7_0(active0, 0x40000000000000ULL, active1, 0L);
+ case 99:
+ if ((active0 & 0x1000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 48;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x100040c000000ULL);
+ case 100:
+ if ((active0 & 0x4000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 50;
+ jjmatchedPos = 6;
+ }
+ break;
+ case 101:
+ if ((active0 & 0x800000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 59;
+ jjmatchedPos = 6;
+ }
+ else if ((active1 & 0x1000ULL) != 0L)
+ {
+ jjmatchedKind = 76;
+ jjmatchedPos = 6;
+ }
+ else if ((active1 & 0x2000000ULL) != 0L)
+ {
+ jjmatchedKind = 89;
+ jjmatchedPos = 6;
+ }
+ else if ((active1 & 0x80000000000ULL) != 0L)
+ {
+ jjmatchedKind = 107;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0x10020000ULL, active1, 0x800000ULL);
+ case 108:
+ if ((active0 & 0x1000000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 60;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10000000000000ULL);
+ case 110:
+ return jjMoveStringLiteralDfa7_0(active0, 0x880000000ULL, active1, 0x8000ULL);
+ case 111:
+ return jjMoveStringLiteralDfa7_0(active0, 0x400000000000ULL, active1, 0x400000000000ULL);
+ case 115:
+ if ((active1 & 0x20000ULL) != 0L)
+ {
+ jjmatchedKind = 81;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0x40000000000ULL, active1, 0L);
+ case 116:
+ if ((active0 & 0x100000000ULL) != 0L)
+ {
+ jjmatchedKind = 32;
+ jjmatchedPos = 6;
+ }
+ else if ((active0 & 0x400000000ULL) != 0L)
+ {
+ jjmatchedKind = 34;
+ jjmatchedPos = 6;
+ }
+ return jjMoveStringLiteralDfa7_0(active0, 0x800000000000ULL, active1, 0x8000c2000ULL);
+ case 117:
+ return jjMoveStringLiteralDfa7_0(active0, 0x40400000ULL, active1, 0x10000ULL);
+ case 121:
+ if ((active0 & 0x400000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 58;
+ jjmatchedPos = 6;
+ }
+ break;
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 6);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 6);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 67:
+ return jjMoveStringLiteralDfa8_0(active0, 0x20000ULL, active1, 0L);
+ case 69:
+ if ((active0 & 0x800000000000ULL) != 0L)
+ {
+ jjmatchedKind = 47;
+ jjmatchedPos = 7;
+ }
+ else if ((active1 & 0x400000000ULL) != 0L)
+ {
+ jjmatchedKind = 98;
+ jjmatchedPos = 7;
+ }
+ else if ((active1 & 0x10000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 116;
+ jjmatchedPos = 7;
+ }
+ return jjMoveStringLiteralDfa8_0(active0, 0x800000000ULL, active1, 0x8a000ULL);
+ case 71:
+ return jjMoveStringLiteralDfa8_0(active0, 0x200000ULL, active1, 0L);
+ case 76:
+ if ((active0 & 0x40000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 54;
+ jjmatchedPos = 7;
+ }
+ break;
+ case 78:
+ if ((active0 & 0x400000000000ULL) != 0L)
+ {
+ jjmatchedKind = 46;
+ jjmatchedPos = 7;
+ }
+ return jjMoveStringLiteralDfa8_0(active0, 0x10000000ULL, active1, 0L);
+ case 82:
+ if ((active1 & 0x800000ULL) != 0L)
+ {
+ jjmatchedKind = 87;
+ jjmatchedPos = 7;
+ }
+ return jjMoveStringLiteralDfa8_0(active0, 0x40000000ULL, active1, 0x400000010000ULL);
+ case 83:
+ if ((active0 & 0x40000000000ULL) != 0L)
+ {
+ jjmatchedKind = 42;
+ jjmatchedPos = 7;
+ }
+ break;
+ case 84:
+ if ((active0 & 0x80000000ULL) != 0L)
+ {
+ jjmatchedKind = 31;
+ jjmatchedPos = 7;
+ }
+ else if ((active1 & 0x4000000ULL) != 0L)
+ {
+ jjmatchedKind = 90;
+ jjmatchedPos = 7;
+ }
+ return jjMoveStringLiteralDfa8_0(active0, 0x400000ULL, active1, 0x1000008000000ULL);
+ case 89:
+ if ((active1 & 0x40000ULL) != 0L)
+ {
+ jjmatchedKind = 82;
+ jjmatchedPos = 7;
+ }
+ else if ((active1 & 0x800000000ULL) != 0L)
+ {
+ jjmatchedKind = 99;
+ jjmatchedPos = 7;
+ }
+ break;
+ case 99:
+ return jjMoveStringLiteralDfa8_0(active0, 0x20000ULL, active1, 0L);
+ case 101:
+ if ((active0 & 0x800000000000ULL) != 0L)
+ {
+ jjmatchedKind = 47;
+ jjmatchedPos = 7;
+ }
+ else if ((active1 & 0x400000000ULL) != 0L)
+ {
+ jjmatchedKind = 98;
+ jjmatchedPos = 7;
+ }
+ else if ((active1 & 0x10000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 116;
+ jjmatchedPos = 7;
+ }
+ return jjMoveStringLiteralDfa8_0(active0, 0x800000000ULL, active1, 0x8a000ULL);
+ case 103:
+ return jjMoveStringLiteralDfa8_0(active0, 0x200000ULL, active1, 0L);
+ case 108:
+ if ((active0 & 0x40000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 54;
+ jjmatchedPos = 7;
+ }
+ break;
+ case 110:
+ if ((active0 & 0x400000000000ULL) != 0L)
+ {
+ jjmatchedKind = 46;
+ jjmatchedPos = 7;
+ }
+ return jjMoveStringLiteralDfa8_0(active0, 0x10000000ULL, active1, 0L);
+ case 114:
+ if ((active1 & 0x800000ULL) != 0L)
+ {
+ jjmatchedKind = 87;
+ jjmatchedPos = 7;
+ }
+ return jjMoveStringLiteralDfa8_0(active0, 0x40000000ULL, active1, 0x400000010000ULL);
+ case 115:
+ if ((active0 & 0x40000000000ULL) != 0L)
+ {
+ jjmatchedKind = 42;
+ jjmatchedPos = 7;
+ }
+ break;
+ case 116:
+ if ((active0 & 0x80000000ULL) != 0L)
+ {
+ jjmatchedKind = 31;
+ jjmatchedPos = 7;
+ }
+ else if ((active1 & 0x4000000ULL) != 0L)
+ {
+ jjmatchedKind = 90;
+ jjmatchedPos = 7;
+ }
+ return jjMoveStringLiteralDfa8_0(active0, 0x400000ULL, active1, 0x1000008000000ULL);
+ case 121:
+ if ((active1 & 0x40000ULL) != 0L)
+ {
+ jjmatchedKind = 82;
+ jjmatchedPos = 7;
+ }
+ else if ((active1 & 0x800000000ULL) != 0L)
+ {
+ jjmatchedKind = 99;
+ jjmatchedPos = 7;
+ }
+ break;
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 7);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 7);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 65:
+ return jjMoveStringLiteralDfa9_0(active0, 0x40000000ULL, active1, 0L);
+ case 67:
+ return jjMoveStringLiteralDfa9_0(active0, 0x800000000ULL, active1, 0L);
+ case 68:
+ if ((active1 & 0x8000ULL) != 0L)
+ {
+ jjmatchedKind = 79;
+ jjmatchedPos = 8;
+ }
+ else if ((active1 & 0x80000ULL) != 0L)
+ {
+ jjmatchedKind = 83;
+ jjmatchedPos = 8;
+ }
+ break;
+ case 69:
+ if ((active0 & 0x400000ULL) != 0L)
+ {
+ jjmatchedKind = 22;
+ jjmatchedPos = 8;
+ }
+ else if ((active1 & 0x10000ULL) != 0L)
+ {
+ jjmatchedKind = 80;
+ jjmatchedPos = 8;
+ }
+ return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x1000000000000ULL);
+ case 82:
+ if ((active1 & 0x2000ULL) != 0L)
+ {
+ jjmatchedKind = 77;
+ jjmatchedPos = 8;
+ }
+ break;
+ case 84:
+ if ((active0 & 0x10000000ULL) != 0L)
+ {
+ jjmatchedKind = 28;
+ jjmatchedPos = 8;
+ }
+ else if ((active1 & 0x400000000000ULL) != 0L)
+ {
+ jjmatchedKind = 110;
+ jjmatchedPos = 8;
+ }
+ return jjMoveStringLiteralDfa9_0(active0, 0x20000ULL, active1, 0L);
+ case 85:
+ return jjMoveStringLiteralDfa9_0(active0, 0x200000ULL, active1, 0L);
+ case 95:
+ return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x8000000ULL);
+ case 97:
+ return jjMoveStringLiteralDfa9_0(active0, 0x40000000ULL, active1, 0L);
+ case 99:
+ return jjMoveStringLiteralDfa9_0(active0, 0x800000000ULL, active1, 0L);
+ case 100:
+ if ((active1 & 0x8000ULL) != 0L)
+ {
+ jjmatchedKind = 79;
+ jjmatchedPos = 8;
+ }
+ else if ((active1 & 0x80000ULL) != 0L)
+ {
+ jjmatchedKind = 83;
+ jjmatchedPos = 8;
+ }
+ break;
+ case 101:
+ if ((active0 & 0x400000ULL) != 0L)
+ {
+ jjmatchedKind = 22;
+ jjmatchedPos = 8;
+ }
+ else if ((active1 & 0x10000ULL) != 0L)
+ {
+ jjmatchedKind = 80;
+ jjmatchedPos = 8;
+ }
+ return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x1000000000000ULL);
+ case 114:
+ if ((active1 & 0x2000ULL) != 0L)
+ {
+ jjmatchedKind = 77;
+ jjmatchedPos = 8;
+ }
+ break;
+ case 116:
+ if ((active0 & 0x10000000ULL) != 0L)
+ {
+ jjmatchedKind = 28;
+ jjmatchedPos = 8;
+ }
+ else if ((active1 & 0x400000000000ULL) != 0L)
+ {
+ jjmatchedKind = 110;
+ jjmatchedPos = 8;
+ }
+ return jjMoveStringLiteralDfa9_0(active0, 0x20000ULL, active1, 0L);
+ case 117:
+ return jjMoveStringLiteralDfa9_0(active0, 0x200000ULL, active1, 0L);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 8);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 8);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 65:
+ return jjMoveStringLiteralDfa10_0(active0, 0x200000ULL, active1, 0L);
+ case 68:
+ if ((active1 & 0x1000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 112;
+ jjmatchedPos = 9;
+ }
+ break;
+ case 71:
+ return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x8000000ULL);
+ case 84:
+ if ((active0 & 0x800000000ULL) != 0L)
+ {
+ jjmatchedKind = 35;
+ jjmatchedPos = 9;
+ }
+ return jjMoveStringLiteralDfa10_0(active0, 0x40000000ULL, active1, 0L);
+ case 85:
+ return jjMoveStringLiteralDfa10_0(active0, 0x20000ULL, active1, 0L);
+ case 97:
+ return jjMoveStringLiteralDfa10_0(active0, 0x200000ULL, active1, 0L);
+ case 100:
+ if ((active1 & 0x1000000000000ULL) != 0L)
+ {
+ jjmatchedKind = 112;
+ jjmatchedPos = 9;
+ }
+ break;
+ case 103:
+ return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x8000000ULL);
+ case 116:
+ if ((active0 & 0x800000000ULL) != 0L)
+ {
+ jjmatchedKind = 35;
+ jjmatchedPos = 9;
+ }
+ return jjMoveStringLiteralDfa10_0(active0, 0x40000000ULL, active1, 0L);
+ case 117:
+ return jjMoveStringLiteralDfa10_0(active0, 0x20000ULL, active1, 0L);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 9);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 9);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 73:
+ return jjMoveStringLiteralDfa11_0(active0, 0x40000000ULL, active1, 0L);
+ case 82:
+ return jjMoveStringLiteralDfa11_0(active0, 0x220000ULL, active1, 0L);
+ case 85:
+ return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0x8000000ULL);
+ case 105:
+ return jjMoveStringLiteralDfa11_0(active0, 0x40000000ULL, active1, 0L);
+ case 114:
+ return jjMoveStringLiteralDfa11_0(active0, 0x220000ULL, active1, 0L);
+ case 117:
+ return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0x8000000ULL);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 10);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 10);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 65:
+ return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0x8000000ULL);
+ case 69:
+ if ((active0 & 0x20000ULL) != 0L)
+ {
+ jjmatchedKind = 17;
+ jjmatchedPos = 11;
+ }
+ return jjMoveStringLiteralDfa12_0(active0, 0x200000ULL, active1, 0L);
+ case 79:
+ return jjMoveStringLiteralDfa12_0(active0, 0x40000000ULL, active1, 0L);
+ case 97:
+ return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0x8000000ULL);
+ case 101:
+ if ((active0 & 0x20000ULL) != 0L)
+ {
+ jjmatchedKind = 17;
+ jjmatchedPos = 11;
+ }
+ return jjMoveStringLiteralDfa12_0(active0, 0x200000ULL, active1, 0L);
+ case 111:
+ return jjMoveStringLiteralDfa12_0(active0, 0x40000000ULL, active1, 0L);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 11);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 11);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 78:
+ if ((active0 & 0x40000000ULL) != 0L)
+ {
+ jjmatchedKind = 30;
+ jjmatchedPos = 12;
+ }
+ return jjMoveStringLiteralDfa13_0(active0, 0x200000ULL, active1, 0L);
+ case 82:
+ return jjMoveStringLiteralDfa13_0(active0, 0L, active1, 0x8000000ULL);
+ case 110:
+ if ((active0 & 0x40000000ULL) != 0L)
+ {
+ jjmatchedKind = 30;
+ jjmatchedPos = 12;
+ }
+ return jjMoveStringLiteralDfa13_0(active0, 0x200000ULL, active1, 0L);
+ case 114:
+ return jjMoveStringLiteralDfa13_0(active0, 0L, active1, 0x8000000ULL);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 12);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 12);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 65:
+ return jjMoveStringLiteralDfa14_0(active0, 0L, active1, 0x8000000ULL);
+ case 84:
+ return jjMoveStringLiteralDfa14_0(active0, 0x200000ULL, active1, 0L);
+ case 97:
+ return jjMoveStringLiteralDfa14_0(active0, 0L, active1, 0x8000000ULL);
+ case 116:
+ return jjMoveStringLiteralDfa14_0(active0, 0x200000ULL, active1, 0L);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 13);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 13);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 69:
+ return jjMoveStringLiteralDfa15_0(active0, 0x200000ULL, active1, 0L);
+ case 78:
+ return jjMoveStringLiteralDfa15_0(active0, 0L, active1, 0x8000000ULL);
+ case 101:
+ return jjMoveStringLiteralDfa15_0(active0, 0x200000ULL, active1, 0L);
+ case 110:
+ return jjMoveStringLiteralDfa15_0(active0, 0L, active1, 0x8000000ULL);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 14);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 14);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 69:
+ if ((active0 & 0x200000ULL) != 0L)
+ {
+ jjmatchedKind = 21;
+ jjmatchedPos = 15;
+ }
+ break;
+ case 84:
+ return jjMoveStringLiteralDfa16_0(active0, 0L, active1, 0x8000000ULL);
+ case 101:
+ if ((active0 & 0x200000ULL) != 0L)
+ {
+ jjmatchedKind = 21;
+ jjmatchedPos = 15;
+ }
+ break;
+ case 116:
+ return jjMoveStringLiteralDfa16_0(active0, 0L, active1, 0x8000000ULL);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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(11, 15);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 15);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 69:
+ return jjMoveStringLiteralDfa17_0(active1, 0x8000000ULL);
+ case 101:
+ return jjMoveStringLiteralDfa17_0(active1, 0x8000000ULL);
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 16);
+}
+
+ int VhdlParserTokenManager::jjMoveStringLiteralDfa17_0(unsigned long long old1, unsigned long long active1){
+ if (((active1 &= old1)) == 0L)
+ return jjMoveNfa_0(11, 16);
+ if (input_stream->endOfInput()) {
+ return jjMoveNfa_0(11, 16);
+ }
+ curChar = input_stream->readChar();
+ switch(curChar)
+ {
+ case 69:
+ if ((active1 & 0x8000000ULL) != 0L)
+ {
+ jjmatchedKind = 91;
+ jjmatchedPos = 17;
+ }
+ break;
+ case 101:
+ if ((active1 & 0x8000000ULL) != 0L)
+ {
+ jjmatchedKind = 91;
+ jjmatchedPos = 17;
+ }
+ break;
+ default :
+ break;
+ }
+ return jjMoveNfa_0(11, 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 = 75;
+ int i = 1;
+ jjstateSet[0] = startState;
+ int kind = 0x7fffffff;
+ for (;;)
+ {
+ if (++jjround == 0x7fffffff)
+ ReInitRounds();
+ if (curChar < 64)
+ {
+ unsigned long long l = 1ULL << curChar;
+ (void)l;
+ do
+ {
+ switch(jjstateSet[--i])
+ {
+ case 11:
+ if ((0x3ff000000000000ULL & l) != 0L)
+ {
+ if (kind > 165)
+ kind = 165;
+ { jjCheckNAddStates(0, 8); }
+ }
+ else if ((0x100000200ULL & l) != 0L)
+ { jjCheckNAddTwoStates(0, 3); }
+ else if (curChar == 47)
+ { jjAddStates(9, 10); }
+ else if (curChar == 45)
+ { jjCheckNAddStates(11, 13); }
+ else if (curChar == 39)
+ jjstateSet[jjnewStateCnt++] = 18;
+ else if (curChar == 34)
+ { jjCheckNAddTwoStates(9, 10); }
+ if ((0x3ff000000000000ULL & l) != 0L)
+ {
+ if (kind > 171)
+ kind = 171;
+ { jjCheckNAdd(20); }
+ }
+ break;
+ case 0:
+ if ((0x100000200ULL & l) != 0L)
+ { jjCheckNAddTwoStates(0, 3); }
+ break;
+ case 1:
+ if (curChar != 33)
+ break;
+ if (kind > 6)
+ kind = 6;
+ { jjCheckNAddStates(14, 18); }
+ break;
+ case 2:
+ if (curChar == 45)
+ jjstateSet[jjnewStateCnt++] = 1;
+ break;
+ case 3:
+ if (curChar == 45)
+ { jjCheckNAdd(2); }
+ break;
+ case 4:
+ if ((0xffffffffffffdbffULL & l) == 0L)
+ break;
+ if (kind > 6)
+ kind = 6;
+ { jjCheckNAddStates(14, 18); }
+ break;
+ case 5:
+ if ((0x2400ULL & l) == 0L)
+ break;
+ if (kind > 6)
+ kind = 6;
+ { jjCheckNAddTwoStates(0, 3); }
+ break;
+ case 6:
+ if (curChar != 10)
+ break;
+ if (kind > 6)
+ kind = 6;
+ { jjCheckNAddTwoStates(0, 3); }
+ break;
+ case 7:
+ if (curChar == 13)
+ jjstateSet[jjnewStateCnt++] = 6;
+ break;
+ case 8:
+ if (curChar == 34)
+ { jjCheckNAddTwoStates(9, 10); }
+ break;
+ case 9:
+ if ((0xfffffffb00000200ULL & l) != 0L)
+ { jjCheckNAddTwoStates(9, 10); }
+ break;
+ case 10:
+ if (curChar != 34)
+ break;
+ if (kind > 166)
+ kind = 166;
+ jjstateSet[jjnewStateCnt++] = 8;
+ break;
+ case 13:
+ if ((0x3ff000000000000ULL & l) == 0L)
+ break;
+ if (kind > 167)
+ kind = 167;
+ { jjAddStates(19, 20); }
+ break;
+ case 15:
+ if ((0xfffffffb00000200ULL & l) != 0L)
+ { jjAddStates(21, 22); }
+ break;
+ case 17:
+ if (curChar == 39)
+ jjstateSet[jjnewStateCnt++] = 18;
+ break;
+ case 18:
+ if ((0xfffffffb00000200ULL & l) != 0L)
+ jjstateSet[jjnewStateCnt++] = 19;
+ break;
+ case 19:
+ if (curChar == 39 && kind > 169)
+ kind = 169;
+ break;
+ case 20:
+ if ((0x3ff000000000000ULL & l) == 0L)
+ break;
+ if (kind > 171)
+ kind = 171;
+ { jjCheckNAdd(20); }
+ break;
+ case 22:
+ if (curChar == 34)
+ { jjCheckNAddTwoStates(23, 24); }
+ break;
+ case 23:
+ if ((0x3ff000000000000ULL & l) != 0L)
+ { jjCheckNAddTwoStates(23, 24); }
+ break;
+ case 24:
+ if (curChar == 34 && kind > 179)
+ kind = 179;
+ break;
+ case 26:
+ if (curChar == 34)
+ { jjCheckNAddTwoStates(27, 28); }
+ break;
+ case 27:
+ if ((0xfffffffb00000200ULL & l) != 0L)
+ { jjCheckNAddTwoStates(27, 28); }
+ break;
+ case 28:
+ if (curChar != 34)
+ break;
+ if (kind > 186)
+ kind = 186;
+ { jjCheckNAddTwoStates(26, 29); }
+ break;
+ case 29:
+ if ((0xfffffffb00000200ULL & l) == 0L)
+ break;
+ if (kind > 186)
+ kind = 186;
+ { jjCheckNAddTwoStates(26, 29); }
+ break;
+ case 30:
+ if (curChar == 45)
+ { jjCheckNAddStates(11, 13); }
+ break;
+ case 31:
+ if (curChar != 35)
+ break;
+ if (kind > 7)
+ kind = 7;
+ { jjCheckNAddStates(23, 25); }
+ break;
+ case 32:
+ if ((0xffffffffffffdbffULL & l) == 0L)
+ break;
+ if (kind > 7)
+ kind = 7;
+ { jjCheckNAddStates(23, 25); }
+ break;
+ case 33:
+ if ((0x2400ULL & l) != 0L && kind > 7)
+ kind = 7;
+ break;
+ case 34:
+ if (curChar == 10 && kind > 7)
+ kind = 7;
+ break;
+ case 35:
+ if (curChar == 13)
+ jjstateSet[jjnewStateCnt++] = 34;
+ break;
+ case 36:
+ if (curChar == 45)
+ jjstateSet[jjnewStateCnt++] = 31;
+ break;
+ case 37:
+ if (curChar != 45)
+ break;
+ if (kind > 8)
+ kind = 8;
+ { jjCheckNAddStates(26, 28); }
+ break;
+ case 38:
+ if ((0xffffffffffffdbffULL & l) == 0L)
+ break;
+ if (kind > 8)
+ kind = 8;
+ { jjCheckNAddStates(26, 28); }
+ break;
+ case 39:
+ if ((0x2400ULL & l) != 0L && kind > 8)
+ kind = 8;
+ break;
+ case 40:
+ if (curChar == 10 && kind > 8)
+ kind = 8;
+ break;
+ case 41:
+ if (curChar == 13)
+ jjstateSet[jjnewStateCnt++] = 40;
+ break;
+ case 42:
+ if (curChar == 47)
+ { jjAddStates(9, 10); }
+ break;
+ case 43:
+ if (curChar == 33)
+ { jjCheckNAddTwoStates(44, 46); }
+ break;
+ case 44:
+ { jjCheckNAddTwoStates(44, 46); }
+ break;
+ case 45:
+ if (curChar == 47 && kind > 9)
+ kind = 9;
+ break;
+ case 46:
+ if (curChar == 42)
+ jjstateSet[jjnewStateCnt++] = 45;
+ break;
+ case 47:
+ if (curChar == 42)
+ jjstateSet[jjnewStateCnt++] = 43;
+ break;
+ case 48:
+ if (curChar == 42)
+ { jjCheckNAddTwoStates(49, 51); }
+ break;
+ case 49:
+ { jjCheckNAddTwoStates(49, 51); }
+ break;
+ case 50:
+ if (curChar == 47 && kind > 10)
+ kind = 10;
+ break;
+ case 51:
+ if (curChar == 42)
+ jjstateSet[jjnewStateCnt++] = 50;
+ break;
+ case 52:
+ if ((0x3ff000000000000ULL & l) == 0L)
+ break;
+ if (kind > 165)
+ kind = 165;
+ { jjCheckNAddStates(0, 8); }
+ break;
+ case 54:
+ if ((0x3ff000000000000ULL & l) == 0L)
+ break;
+ if (kind > 165)
+ kind = 165;
+ { jjCheckNAddTwoStates(53, 54); }
+ break;
+ case 56:
+ if ((0x3ff000000000000ULL & l) == 0L)
+ break;
+ if (kind > 170)
+ kind = 170;
+ { jjCheckNAddStates(29, 32); }
+ break;
+ case 57:
+ if (curChar == 46)
+ { jjCheckNAdd(58); }
+ break;
+ case 58:
+ if ((0x3ff000000000000ULL & l) == 0L)
+ break;
+ if (kind > 170)
+ kind = 170;
+ { jjCheckNAddStates(33, 35); }
+ break;
+ case 61:
+ if ((0x280000000000ULL & l) != 0L)
+ { jjCheckNAdd(62); }
+ break;
+ case 62:
+ if ((0x3ff000000000000ULL & l) == 0L)
+ break;
+ if (kind > 170)
+ kind = 170;
+ { jjCheckNAddTwoStates(63, 62); }
+ break;
+ case 65:
+ if ((0x3ff000000000000ULL & l) != 0L)
+ { jjCheckNAddStates(36, 38); }
+ break;
+ case 66:
+ if (curChar == 35)
+ { jjCheckNAdd(67); }
+ break;
+ case 67:
+ if ((0x3ff000000000000ULL & l) != 0L)
+ { jjCheckNAddStates(39, 41); }
+ break;
+ case 68:
+ if (curChar == 46)
+ { jjCheckNAdd(69); }
+ break;
+ case 69:
+ if ((0x3ff000000000000ULL & l) != 0L)
+ { jjCheckNAddTwoStates(69, 70); }
+ break;
+ case 70:
+ if (curChar != 35)
+ break;
+ if (kind > 172)
+ kind = 172;
+ jjstateSet[jjnewStateCnt++] = 71;
+ break;
+ case 72:
+ if ((0x280000000000ULL & l) != 0L)
+ { jjCheckNAdd(73); }
+ break;
+ case 73:
+ if ((0x3ff000000000000ULL & l) == 0L)
+ break;
+ if (kind > 172)
+ kind = 172;
+ { jjCheckNAddTwoStates(74, 73); }
+ break;
+ default : break;
+ }
+ } while(i != startsAt);
+ }
+ else if (curChar < 128)
+ {
+ unsigned long long l = 1ULL << (curChar & 077);
+ (void)l;
+ do
+ {
+ switch(jjstateSet[--i])
+ {
+ case 11:
+ if ((0x7fffffe07fffffeULL & l) != 0L)
+ {
+ if (kind > 171)
+ kind = 171;
+ { jjCheckNAdd(20); }
+ }
+ else if (curChar == 96)
+ { jjCheckNAddTwoStates(26, 29); }
+ else if (curChar == 92)
+ { jjCheckNAddTwoStates(15, 16); }
+ if ((0x7fffffe07fffffeULL & l) != 0L)
+ {
+ if (kind > 167)
+ kind = 167;
+ { jjCheckNAddTwoStates(12, 13); }
+ }
+ if ((0x100800401008004ULL & l) != 0L)
+ jjstateSet[jjnewStateCnt++] = 22;
+ break;
+ case 4:
+ if (kind > 6)
+ kind = 6;
+ { jjAddStates(14, 18); }
+ break;
+ case 9:
+ if ((0x7fffffffffffffffULL & l) != 0L)
+ { jjAddStates(42, 43); }
+ break;
+ case 12:
+ if (curChar == 95)
+ { jjCheckNAddTwoStates(12, 13); }
+ break;
+ case 13:
+ if ((0x7fffffe07fffffeULL & l) == 0L)
+ break;
+ if (kind > 167)
+ kind = 167;
+ { jjCheckNAddTwoStates(12, 13); }
+ break;
+ case 14:
+ if (curChar == 92)
+ { jjCheckNAddTwoStates(15, 16); }
+ break;
+ case 15:
+ if ((0x7fffffffffffffffULL & l) != 0L)
+ { jjCheckNAddTwoStates(15, 16); }
+ break;
+ case 16:
+ if (curChar == 92 && kind > 168)
+ kind = 168;
+ break;
+ case 18:
+ if ((0x7fffffffffffffffULL & l) != 0L)
+ jjstateSet[jjnewStateCnt++] = 19;
+ break;
+ case 20:
+ if ((0x7fffffe07fffffeULL & l) == 0L)
+ break;
+ if (kind > 171)
+ kind = 171;
+ { jjCheckNAdd(20); }
+ break;
+ case 21:
+ if ((0x100800401008004ULL & l) != 0L)
+ jjstateSet[jjnewStateCnt++] = 22;
+ break;
+ case 23:
+ if ((0x7fffffe07fffffeULL & l) != 0L)
+ { jjAddStates(44, 45); }
+ break;
+ case 25:
+ if (curChar == 96)
+ { jjCheckNAddTwoStates(26, 29); }
+ break;
+ case 27:
+ if ((0x7fffffffffffffffULL & l) != 0L)
+ { jjAddStates(46, 47); }
+ break;
+ case 29:
+ if ((0x7fffffffffffffffULL & l) == 0L)
+ break;
+ if (kind > 186)
+ kind = 186;
+ { jjCheckNAddTwoStates(26, 29); }
+ break;
+ case 32:
+ if (kind > 7)
+ kind = 7;
+ { jjAddStates(23, 25); }
+ break;
+ case 38:
+ if (kind > 8)
+ kind = 8;
+ { jjAddStates(26, 28); }
+ break;
+ case 44:
+ { jjAddStates(48, 49); }
+ break;
+ case 49:
+ { jjAddStates(50, 51); }
+ break;
+ case 53:
+ if (curChar == 95)
+ jjstateSet[jjnewStateCnt++] = 54;
+ break;
+ case 55:
+ if (curChar == 95)
+ jjstateSet[jjnewStateCnt++] = 56;
+ break;
+ case 59:
+ if (curChar == 95)
+ jjstateSet[jjnewStateCnt++] = 58;
+ break;
+ case 60:
+ if ((0x2000000020ULL & l) != 0L)
+ { jjCheckNAddTwoStates(61, 62); }
+ break;
+ case 63:
+ if (curChar == 95)
+ { jjCheckNAdd(62); }
+ break;
+ case 64:
+ if (curChar == 95)
+ jjstateSet[jjnewStateCnt++] = 65;
+ break;
+ case 67:
+ if ((0x7fffffe07fffffeULL & l) != 0L)
+ { jjCheckNAddStates(39, 41); }
+ break;
+ case 69:
+ if ((0x7fffffe07fffffeULL & l) != 0L)
+ { jjCheckNAddTwoStates(69, 70); }
+ break;
+ case 71:
+ if ((0x2000000020ULL & l) != 0L)
+ { jjCheckNAddTwoStates(72, 73); }
+ break;
+ case 74:
+ if (curChar == 95)
+ { jjCheckNAdd(73); }
+ 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 4:
+ if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+ break;
+ if (kind > 6)
+ kind = 6;
+ { jjAddStates(14, 18); }
+ break;
+ case 9:
+ if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+ { jjAddStates(42, 43); }
+ break;
+ case 15:
+ if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+ { jjAddStates(21, 22); }
+ break;
+ case 18:
+ if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+ jjstateSet[jjnewStateCnt++] = 19;
+ break;
+ case 27:
+ if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+ { jjAddStates(46, 47); }
+ break;
+ case 29:
+ if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+ break;
+ if (kind > 186)
+ kind = 186;
+ { jjAddStates(52, 53); }
+ break;
+ case 32:
+ if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+ break;
+ if (kind > 7)
+ kind = 7;
+ { jjAddStates(23, 25); }
+ break;
+ case 38:
+ if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+ break;
+ if (kind > 8)
+ kind = 8;
+ { jjAddStates(26, 28); }
+ break;
+ case 44:
+ if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+ { jjAddStates(48, 49); }
+ break;
+ case 49:
+ if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+ { jjAddStates(50, 51); }
+ 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 = 75 - 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 ((jjbitVec2[i2] & l2) != 0L);
+ default :
+ if ((jjbitVec0[i1] & l1) != 0L)
+ return true;
+ 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 :
+ 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;
+
+ 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
+ {
+ SkipLexicalActions(NULL);
+ goto EOFLoop;
+ }
+ }
+ 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();
+ }
+ errorHandler->lexicalError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, this);
+ }
+}
+
+
+void VhdlParserTokenManager::SkipLexicalActions(Token *matchedToken){
+ switch(jjmatchedKind)
+ {
+ case 3 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::lineCount();
+ break;
+ }
+ case 6 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE);
+ break;
+ }
+ case 7 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::handleFlowComment(image.data());
+ break;
+ }
+ case 8 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::lineCount(image.data());
+ break;
+ }
+ case 9 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ QCString q(image.data());
+ q.stripPrefix("/*!");
+ q.resize(q.length()-2);
+ ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
+ break;
+ }
+ case 10 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();
+ break;
+ }
+ default :
+ break;
+ }
+}
+
+void VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
+ switch(jjmatchedKind)
+ {
+ case 17 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(ARCHITECTURE_T);
+ break;
+ }
+ case 18 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(ARRAY_T);
+ break;
+ }
+ case 22 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);
+ break;
+ }
+ case 25 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(BODY_T);
+ break;
+ }
+ case 28 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(COMPONENT_T);
+ break;
+ }
+ case 30 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(CONFIGURATION_T);
+ break;
+ }
+ case 31 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(CONSTANT_T);
+ break;
+ }
+ case 32 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(CONTEXT_T);
+ break;
+ }
+ case 39 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(END_T);
+ break;
+ }
+ case 40 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(ENTITY_T);
+ break;
+ }
+ case 43 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(FILE_T);
+ break;
+ }
+ case 46 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(FUNCTION_T);
+ break;
+ }
+ case 49 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(GROUP_T);
+ break;
+ }
+ case 58 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ VhdlParser::setLineParsed(LIBRARY_T);
+ break;
+ }
+ case 76 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(PACKAGE_T);
+ break;
+ }
+ case 78 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(PORT_T);
+ break;
+ }
+ case 80 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(PROCEDURE_T);
+ break;
+ }
+ case 81 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(PROCESS_T);
+ break;
+ }
+ case 86 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(RECORD_T);
+ break;
+ }
+ case 100 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(SIGNAL_T);
+ break;
+ }
+ case 107 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(SUBTYPE_T);
+ break;
+ }
+ case 111 : {
+ image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+ ::vhdl::parser::VhdlParser::setLineParsed(TYPE_T);
+ break;
+ }
+ case 113 : {
+ 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;
+ errorHandler = new TokenManagerErrorHandler();
+ errorHandlerCreated = true;
+ }
+
+ void VhdlParserTokenManager::ReInitRounds() {
+ int i;
+ jjround = 0x80000001;
+ for (i = 75; 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;
+ if (errorHandlerCreated) delete errorHandler;
+ }
+
+}
+}
diff --git a/vhdlparser/VhdlParserTokenManager.h b/vhdlparser/VhdlParserTokenManager.h
new file mode 100644
index 0000000..3916069
--- /dev/null
+++ b/vhdlparser/VhdlParserTokenManager.h
@@ -0,0 +1,139 @@
+#ifndef VHDLPARSERTOKENMANAGER_H
+#define VHDLPARSERTOKENMANAGER_H
+#include "JavaCC.h"
+#include "CharStream.h"
+#include "Token.h"
+#include "ErrorHandler.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 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[75];
+ int jjstateSet[2 * 75];
+ JAVACC_STRING_TYPE jjimage;
+ JAVACC_STRING_TYPE image;
+ int jjimageLen;
+ int lengthOfMatch;
+ JAVACC_CHAR_TYPE curChar;
+ TokenManagerErrorHandler *errorHandler;
+ bool errorHandlerCreated;
+ public: void setErrorHandler(TokenManagerErrorHandler *eh) {
+ if (errorHandlerCreated && errorHandler != NULL) delete errorHandler;
+ errorHandler = eh;
+ errorHandlerCreated = false;
+ }
+};
+}
+}
+#endif
diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj
new file mode 100644
index 0000000..7a4283f
--- /dev/null
+++ b/vhdlparser/vhdlparser.jj
@@ -0,0 +1,2816 @@
+/******************************************************************************
+ *
+ * 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="vhdljjparser.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 handleFlowComment(const char*);
+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"
+}
+
+SKIP:
+{
+ // VHDL comment -- ......
+ // VHDL doxygen line comment --! ....
+ <#DOXYGEN_VHDL_COMMENT: (" "|"\t")*"--!"(~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
+ | <MULT_DOXYGEN_COMMENT: (<DOXYGEN_VHDL_COMMENT>)+ > { ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE); }
+ |<VHDL_FLOWCHART_COMMENT: "--#" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> { ::vhdl::parser::VhdlParser::handleFlowComment(image.data());}
+ |<VHDL_COMMENT: "--" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> { ::vhdl::parser::VhdlParser::lineCount(image.data());}
+ }
+
+// VHDL 2008 comment /* .... */
+// VHDL 2008 doxygen comment /*! .... */
+SKIP :
+{
+ <MULT_DOXYGEN_VHDL_COMMENT_2008 : "/*!" (~[])* "*/" >
+ {
+ QCString q(image.data());
+ q.stripPrefix("/*!");
+ q.resize(q.length()-2);
+ ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
+ }
+ | <MULT_VHDL_2008_COMMENT : "/*" (~[])* "*/" > {::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();}
+}
+
+/* KEYWORDS */
+
+TOKEN [IGNORE_CASE] :
+{
+ <ABS_T: "abs">
+| <ACCESS_T: "access">
+| <AFTER_T: "after">
+| <ALIAS_T: "alias">
+| <ALL_T: "all">
+| <AND_T: "and">
+| <ARCHITECTURE_T: "architecture"> {::vhdl::parser::VhdlParser::setLineParsed(ARCHITECTURE_T);}
+| <ARRAY_T: "array"> {VhdlParser::setLineParsed(ARRAY_T);}
+| <ASSERT_T: "assert">
+| <ASSUME_T: "assume">
+| <ASSUME_GUARANTEE_T: "assume_guarentee">
+| <ATTRIBUTE_T: "attribute"> {::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);}
+| <BEGIN_T: "begin">
+| <BLOCK_T: "block">
+| <BODY_T: "body"> {::vhdl::parser::VhdlParser::setLineParsed(BODY_T);}
+| <BUFFER_T: "buffer">
+| <BUS_T: "bus">
+| <COMPONENT_T: "component"> {VhdlParser::setLineParsed(COMPONENT_T);}
+| <CASE_T: "case">
+| <CONFIGURATION_T: "configuration"> {VhdlParser::setLineParsed(CONFIGURATION_T);}
+| <CONSTANT_T: "constant"> {VhdlParser::setLineParsed(CONSTANT_T);}
+| <CONTEXT_T: "context"> {VhdlParser::setLineParsed(CONTEXT_T);}
+| <COVER_T: "cover">
+| <DEFAULT_T: "default">
+| <DISCONNECT_T: "disconnect">
+| <DOWNTO_T: "downto">
+| <ELSE_T: "else">
+| <ELSIF_T: "elsif">
+| <END_T: "end"> {VhdlParser::setLineParsed(END_T);}
+| <ENTITY_T: "entity"> {VhdlParser::setLineParsed(ENTITY_T);}
+| <EXIT_T: "exit">
+| <FAIRNESS_T: "fairness">
+| <FILE_T: "file"> {VhdlParser::setLineParsed(FILE_T);}
+| <FOR_T: "for">
+| <FORCE_T: "force">
+| <FUNCTION_T: "function"> {VhdlParser::setLineParsed(FUNCTION_T);}
+| <GENERATE_T: "generate">
+| <GENERIC_T: "generic">
+| <GROUP_T: "group"> {VhdlParser::setLineParsed(GROUP_T);}
+| <GUARDED_T: "guarded">
+| <IF_T: "if">
+| <IMPURE_T: "impure">
+| <IN_T: "in">
+| <INERTIAL_T: "inertial">
+| <INOUT_T: "inout">
+| <IS_T: "is">
+| <LABEL_T: "label">
+| <LIBRARY_T: "library"> {VhdlParser::setLineParsed(LIBRARY_T);}
+| <LINKAGE_T: "linkage">
+| <LITERAL_T: "literal">
+| <LOOP_T: "loop">
+| <MAP_T: "map">
+| <MOD_T: "mod">
+| <NAND_T: "nand">
+| <NEW_T: "new">
+| <NEXT_T: "next">
+| <NOR_T: "nor">
+| <NOT_T: "not">
+| <NULL_T: "null">
+| <OF_T: "of">
+| <ON_T: "on">
+| <OPEN_T: "open">
+| <OR_T: "or">
+| <OTHER_T: "others">
+| <OUT_T: "out">
+| <PACKAGE_T: "package"> {::vhdl::parser::VhdlParser::setLineParsed(PACKAGE_T);}
+| <PARAMETER_T: "parameter">
+| <PORT_T: "port"> {::vhdl::parser::VhdlParser::setLineParsed(PORT_T);}
+| <POSTPONED_T: "postponed">
+| <PROCEDURE_T: "procedure"> {::vhdl::parser::VhdlParser::setLineParsed(PROCEDURE_T);}
+| <PROCESS_T: "process"> {::vhdl::parser::VhdlParser::setLineParsed(PROCESS_T);}
+| <PROPERTY_T: "property">
+| <PROTECTED_T: "protected">
+| <PURE_T: "pure">
+| <RANGE_T: "range">
+| <RECORD_T: "record"> {::vhdl::parser::VhdlParser::setLineParsed(RECORD_T);}
+| <REGISTER_T: "register">
+| <REJECT_T: "reject">
+| <RELEASE_T: "release">
+| <RESTRICT_T: "restrict">
+| <RESTRICT_GUARANTEE_T: "restrict_guarantee">
+| <REM_T: "rem">
+| <REPORT_T: "report">
+| <ROL_T: "rol">
+| <ROR_T: "ror">
+| <RETURN_T: "return">
+| <SELECT_T: "select">
+| <SEQUENCE_T: "sequence">
+| <SEVERITY_T: "severity">
+| <SIGNAL_T: "signal"> {::vhdl::parser::VhdlParser::setLineParsed(SIGNAL_T);}
+| <SHARED_T: "shared">
+| <SLA_T: "sla">
+| <SLL_T: "sll">
+| <SRA_T: "sra">
+| <SRL_T: "srl">
+| <STRONG_T: "strong">
+| <SUBTYPE_T: "subtype"> {::vhdl::parser::VhdlParser::setLineParsed(SUBTYPE_T);}
+| <THEN_T: "then">
+| <TO_T: "to">
+| <TRANSPORT_T: "transport">
+| <TYPE_T: "type"> {::vhdl::parser::VhdlParser::setLineParsed(TYPE_T);}
+| <UNAFFECTED_T: "unaffected">
+| <UNITS_T: "units"> {::vhdl::parser::VhdlParser::setLineParsed(UNITS_T);}
+| <UNTIL_T: "until">
+| <USE_T: "use">
+| <VARIABLE_T: "variable">
+| <VMODE_T: "vmode">
+| <VPROP_T: "vprop">
+| <VUNIT_T: "vunit">
+| <WAIT_T: "wait">
+| <WHEN_T: "when">
+| <WHILE_T: "while">
+| <WITH_T: "with">
+| <XOR_T: "xor">
+| <XNOR_T: "xnor">
+}
+
+/* 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: "|" >
+| <DOT_T: "." >
+| < SLASH_T: "/" >
+| < AT_T: "@" >
+| < NEG_T: "^" >
+| < LBRACKET_T: "[" >
+| < RBRACKET_T: "]" >
+| < LBRACE: "{" >
+| < RBRACE: "}" >
+
+}
+
+TOKEN:
+{
+ <INTEGER: <DIGIT> ((["_"])? (<DIGIT>))* >
+ | <STRINGLITERAL: (( ["\""](<GRAPHIC_CHARACTER>)*) "\"")+ >
+ | <BASIC_IDENTIFIER: (<LETTER> ( (["_"])* <LETTER_OR_DIGIT> )*) >
+ | <EXTENDED_CHARACTER: ( ["\\"](<GRAPHIC_CHARACTER>)*["\\"] ) >
+ | <CHARACTER_LITERAL: (["'"]<GRAPHIC_CHARACTER>["'"]) >
+ | <DECIMAL_LITERAL: (<INTEGER> (["."]<INTEGER>)? (<EXPONENT>)? ) >
+ | <BASED_INTEGER: <LETTER_OR_DIGIT>( <LETTER_OR_DIGIT>)* >
+ | <BASED_LITERAL: <INTEGER>["#"]<BASED_INTEGER>(["."] <BASED_INTEGER>)? ["#"] (<EXPONENT>)? >
+ | <#EXPONENT: (["e","E"] (["+","-"])? (<INTEGER>)+) >
+ | < #BASIC_GRAPHIC_CHARACTER: (<UPPER_CASE_LETTER>|<DIGIT>|<SPECIAL_CHARACTER>|<SPACE_CHARACTER>) >
+ | < #GRAPHIC_CHARACTER: ( <BASIC_GRAPHIC_CHARACTER>|<LOWER_CASE_LETTER>|<OTHER_SPECIAL_CHARACTER> ) >
+ | < #LETTER_OR_DIGIT: ( <LETTER> | <DIGIT> ) >
+ | < #LETTER: (<UPPER_CASE_LETTER>|<LOWER_CASE_LETTER>) >
+ | < #UPPER_CASE_LETTER: ["A"-"Z"] >
+ | <BIT_STRING_LITERAL : <BASE_SPECIFIER >["\""](<LETTER_OR_DIGIT>)* ["\""] >
+ | <#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"] >
+ | <VHDL2008TOOLDIR : ["`"](<GRAPHIC_CHARACTER>|<STRINGLITERAL>)+ >
+
+}
+
+QCString abstract_literal() :
+{Token *tok;}
+{
+ tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
+ | tok=<INTEGER> { return tok->image.c_str(); }
+ | tok=<BASED_LITERAL> { return tok->image.c_str(); }
+}
+
+QCString access_type_definition() :
+{Token *tok;QCString str,str1;}
+{
+tok=<ACCESS_T> str1=subtype_indication() {str=tok->image.c_str(); return str+str1;}
+}
+
+QCString actual_designator() :
+{QCString str;Token *t;}
+{
+t=<OPEN_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;}
+ |
+ <BOX_T> { return "<>";}
+ |
+ s=name() <LPAREN_T> s1=actual_designator() <RPAREN_T> {s+="(";s+=s1+")";return s;}
+
+ }
+
+QCString adding_operator () :
+{}
+{
+ <PLUS_T> { return "+";}
+ | <MINUS_T> { return "-";}
+ |<AMPERSAND_T> { return "&";}
+}
+
+QCString aggregate() : {QCString s,s1,s2;}
+{
+ <LPAREN_T> s=element_association() (<COMMA_T> s1=element_association(){s+=","+s1;})* <RPAREN_T> { return "("+s+")";}
+}
+
+QCString alias_declaration() : {QCString s,s1,s2;}
+{
+ <ALIAS_T> s2=alias_designator()
+ [ <COLON_T>{ s+=":"; } s1=subtype_indication() { s+=s1; }]
+ <IS_T> { s+=" is "; } s1=name() {s+=s1;} [s1=signature() {s+=s1;}]
+ <SEMI_T>
+{
+ 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=<CHARACTER_LITERAL> { return tok->image.c_str(); }
+ | s=operator_symbol() { return s; }
+}
+
+void allocator() :{}
+{
+ LOOKAHEAD(3)
+ <NEW_T> qualified_expression()
+ | <NEW_T> subtype_indication()
+}
+
+void architecture_body() : {QCString s,s1;}
+{
+
+ <ARCHITECTURE_T> s=identifier() <OF_T> s1=name() <IS_T>
+ {
+ 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);}
+ <BEGIN_T>
+ architecture_statement_part()
+ <END_T> [<ARCHITECTURE_T>] [name()] <SEMI_T>
+ { lastEntity=0;lastCompound=0; genLabels.resize(0); }
+}
+
+void architecture_declarative_part() : {}
+{
+ (block_declarative_item() )*
+ // | (<VHDL2008TOOLDIR>)
+}
+
+void architecture_statement_part() : {}
+{
+ (concurrent_statement())*
+ // | (<VHDL2008TOOLDIR>)
+}
+
+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;}
+{
+ <ASSERT_T> s=condition() [ t=<REPORT_T> s1=expression() ] [t1=<SEVERITY_T> 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=<COLON_T> ] s1=assertion() <SEMI_T>
+ {
+ if(t) s+=":";
+ return s+s1+";";
+ }
+}
+QCString association_element() : {QCString s,s1;}
+{
+ [LOOKAHEAD(formal_part() <ARROW_T>) s=formal_part() <ARROW_T> ] s1=actual_part()
+ { return s+" => "+s1;}
+}
+
+QCString association_list (): {QCString s,s1;}
+{
+s=association_element() (<COMMA_T> s1=association_element() { s+=","+s1; })* { return s; }
+}
+
+QCString attribute_declaration() : {QCString s,s1;}
+{
+ <ATTRIBUTE_T> s=identifier() <COLON_T> s1=type_mark() <SEMI_T>
+ {
+ 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=<RANGE_T> { return tok->image.c_str(); }
+}
+
+QCString attribute_name (): {QCString s,s1;}
+{
+ s=identifier() <APOSTROPHE_T> s1=name(){ s+="'"+s1; }[LOOKAHEAD(1)<LPAREN_T>s1=expression() <RPAREN_T> {s+"("+s1+")";}] { return s; }
+}
+
+
+QCString attribute_specification(): {QCString s,s1,s2;}
+{
+ <ATTRIBUTE_T> s=attribute_designator() <OF_T> s1=entity_specification() <IS_T> s2=expression() <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+";";
+ }
+}
+
+QCString base() : {Token *tok;}
+{
+ tok=<INTEGER> { return tok->image.c_str();}
+}
+
+QCString base_specifier (): {Token *tok;}
+{
+ tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
+}
+
+QCString base_unit_declaration() :
+{QCString s;}
+{
+ s=identifier() { return s; }
+}
+
+QCString based_integer() : {Token *tok;}
+{
+ tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
+}
+
+QCString based_literal(): {Token *tok;}
+{
+ tok=<BASED_LITERAL> { return tok->image.c_str();}
+}
+
+QCString basic_identifier() : {Token *tok;}
+{
+ tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
+}
+
+void binding_indication() : {}
+{
+ [ <USE_T> entity_aspect() ]
+ [ generic_map_aspect() ]
+ [ port_map_aspect() ]
+}
+
+QCString bit_string_literal (): {Token *tok;}
+{
+ tok=<BIT_STRING_LITERAL> { return tok->image.c_str();}
+}
+
+
+QCString bit_value() : {Token *tok;}
+{
+ tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
+}
+
+void block_configuration() : {}
+{
+ <FOR_T> block_specification()
+ ( use_clause() )*
+ ( configuration_item())*
+ <END_T> <FOR_T> <SEMI_T>
+}
+
+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()
+| <VHDL2008TOOLDIR>
+}
+
+void block_declarative_part() : {}
+{
+ (block_declarative_item() )*
+}
+
+void block_header() : {}
+{
+[LOOKAHEAD(generic_clause()) generic_clause()[ generic_map_aspect() <SEMI_T> ] ]
+[ port_clause() [ port_map_aspect() <SEMI_T> ] ]
+}
+
+void block_specification() : {}
+{
+ name()[LOOKAHEAD(1) <LPAREN_T> index_specification() <RPAREN_T>]
+}
+
+void block_statement() : {QCString s;}
+{
+ s=identifier() <COLON_T>
+ <BLOCK_T> { pushLabel(genLabels,s); }[ <LPAREN_T> expression() <RPAREN_T> ] [ <IS_T> ]
+ block_header()
+ block_declarative_part()
+ <BEGIN_T>
+ block_statement_part()
+ <END_T> <BLOCK_T> [ identifier() ] <SEMI_T>
+ {
+ genLabels=popLabel(genLabels);
+ }
+}
+
+void block_statement_part() : {}
+{
+ ( concurrent_statement() )*
+}
+
+void case_statement() : {QCString s;}
+{
+[ identifier() <COLON_T> ]
+ <CASE_T> s=expression()
+ {
+ QCString ca="case "+s;
+ FlowChart::addFlowChart(FlowChart::CASE_NO,0,ca);
+ }
+ <IS_T>
+ case_statement_alternative()
+ ( case_statement_alternative ())*
+ <END_T> <CASE_T> [ identifier() ] <SEMI_T>
+ {
+ FlowChart::moveToPrevLevel();
+ FlowChart::addFlowChart(FlowChart::END_CASE,"end case",0);
+ }
+}
+
+void case_statement_alternative() : {QCString s;}
+{
+ <WHEN_T> s=choices() <ARROW_T>
+ {
+ QCString t="when ";
+ t+=s+"=> ";
+ FlowChart::addFlowChart(FlowChart::WHEN_NO,s.data(),t);
+ }
+ sequence_of_statement(){FlowChart::moveToPrevLevel(); }
+}
+
+QCString character_literal() : {Token *tok;}
+{
+ tok=<CHARACTER_LITERAL>{ return tok->image.c_str();}
+}
+
+QCString choice() : {QCString s;}
+{
+ LOOKAHEAD(simple_expression())
+ s=simple_expression(){ return s; }
+ |
+ LOOKAHEAD(discrete_range())
+ s=discrete_range(){ return s; }
+ |
+ LOOKAHEAD(identifier())
+ s=identifier(){ return s; }
+ | <OTHER_T> { return " others "; }
+}
+
+QCString choices() : {QCString s,s1;}
+{
+ s=choice() (<BAR_T> s1=choice(){s+="|";s+=s1;})* { return s; }
+}
+
+void component_configuration () :{}
+{
+ <FOR_T> component_specification()
+ [ binding_indication() <SEMI_T> ]
+ [ block_configuration() ]
+ <END_T> <FOR_T> <SEMI_T>
+}
+void component_declaration() : {QCString s;}
+{
+ <COMPONENT_T> s=identifier() [ <IS_T> ]
+ { currP=VhdlDocGen::COMPONENT; }
+ [ generic_clause() ]
+ [ port_clause() ]
+ {
+ addVhdlType(s.data(),getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0,Public);
+ currP=0;
+ }
+ <END_T> <COMPONENT_T> [ identifier() ] <SEMI_T>
+
+}
+
+void component_instantiation_statement() : {QCString s,s1;}
+{
+
+s=identifier() <COLON_T>
+ s1=instantiation_unit()
+ {
+ addCompInst(s.lower().data(),s1.lower().data(),0,getLine());
+ }
+ [ LOOKAHEAD(generic_map_aspect()) generic_map_aspect() ]
+ [ port_map_aspect() ] <SEMI_T>
+}
+
+void component_specification() : {}
+{
+instantiation_list() <COLON_T> 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() <COLON_T> ] [ <POSTPONED_T> ] assertion() <SEMI_T>
+}
+
+void concurrent_procedure_call_statement() : {}
+{
+[ LOOKAHEAD(2) identifier() <COLON_T> ] [ <POSTPONED_T> ] procedure_call() <SEMI_T>
+}
+
+void concurrent_signal_assignment_statement() : {}
+{
+[ LOOKAHEAD(2) identifier() <COLON_T> ] [<POSTPONED_T> ]
+(
+LOOKAHEAD(conditional_signal_assignment() )
+ conditional_signal_assignment()
+| selected_signal_assignment()
+
+)
+}
+
+void concurrent_statement() : {}
+{
+
+// try {
+LOOKAHEAD([identifier() ":"] <BLOCK_T>)
+block_statement()
+|
+LOOKAHEAD([identifier() ":"] [<POSTPONED_T>] <PROCESS_T>)
+process_statement()
+|
+LOOKAHEAD(generate_statement())
+generate_statement()
+|
+case_scheme()
+|
+LOOKAHEAD([identifier() ":"] [<POSTPONED_T>] <ASSERT_T>)
+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()
+| <VHDL2008TOOLDIR>
+ /*
+ 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;}
+{
+ <UNTIL_T> s=condition()
+ {
+ return " until "+s;
+ }
+}
+
+void conditional_signal_assignment() : {}
+{
+ // LOOKAHEAD( target() "<=" options_() conditional_waveforms() ";")
+ target() <LESSTHAN_T> options() conditional_waveforms() <SEMI_T>
+}
+
+void conditional_waveforms() : {}
+{
+waveform()
+ ( LOOKAHEAD(<WHEN_T> condition() <ELSE_T>)
+ <WHEN_T> condition() <ELSE_T> waveform() )*
+ [ <WHEN_T> condition() ]
+}
+
+// ( waveform() < WHEN_T> condition() <ELSE_T> )*
+// waveform() [ <WHEN_T> condition() ]
+
+//waveform()
+ // ( LOOKAHEAD( <WHEN> condition() <ELSE>)
+ // <WHEN> condition() <ELSE> waveform() )*
+ //[ <WHEN> condition() ]
+
+void configuration_declaration() : {QCString s,s1;}
+{
+ <CONFIGURATION_T> s=identifier() <OF_T> s1=name() <IS_T>
+ {
+
+ confName=s+"::"+s1;
+ addVhdlType(s.data(),getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public);
+ }
+ configuration_declarative_part()
+ block_configuration()
+ <END_T> [ <CONFIGURATION_T> ] [ name() ] <SEMI_T>
+ { 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() : {}
+{
+<FOR_T> component_specification() binding_indication() <SEMI_T>
+}
+
+QCString constant_declaration() : {QCString s,s1,s2;Token *t=0;}
+{
+ <CONSTANT_T> s=identifier_list() <COLON_T> s1= subtype_indication() [ t=<VARASSIGN_T> s2=expression() ] <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;
+ }
+}
+
+QCString constraint_array_definition (): {QCString s,s1;}
+{
+<ARRAY_T> s=index_constraint() <OF_T> 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=<DECIMAL_LITERAL> { return tok->image.c_str(); }
+}
+
+
+QCString delay_mechanism (): {QCString s;}
+{
+<TRANSPORT_T> { return " transport ";}
+| [ <REJECT_T> s=expression() {s.prepend(" reject ");}] <INERTIAL_T> { return s+" inertial "; }
+}
+
+void design_file() : {}
+{
+ (design_unit() )+ {}
+ | <EOF>
+}
+
+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=<TO_T> { return tok->image.c_str();}
+| tok=<DOWNTO_T> { return tok->image.c_str();}
+}
+
+void disconnection_specification() : {}
+{
+<DISCONNECT_T> guarded_signal_specificatio() <AFTER_T> expression() <SEMI_T>
+}
+
+void guarded_signal_specificatio() : {}
+{
+ signal_list() <COLON_T> 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() <ARROW_T>) s=choices() <ARROW_T> ] s1=expression()
+ {
+if(!s.isEmpty())
+ return s+"=>"+s1;
+return s1;
+ }
+}
+
+QCString element_declaration() : {QCString s,s1;}
+{
+s=identifier_list() <COLON_T> s1=subtype_indication() <SEMI_T> {return s+":"+s1;}
+}
+
+
+QCString entity_aspect() : {Token *tok;QCString s,s1;}
+{
+tok=<ENTITY_T> s=name() [ LOOKAHEAD(1)<LPAREN_T> s1=identifier() <RPAREN_T> {s+="("+s1+")";} ] { return s;}
+| tok=<CONFIGURATION_T> s=name() { return tok->image.c_str()+s;}
+| tok=<OPEN_T> { return tok->image.c_str(); }
+}
+
+QCString entity_class() : {}
+{
+<ENTITY_T> { return "entity";}
+| <ARCHITECTURE_T> {return "architecture";}
+| <CONFIGURATION_T> {return "configuration";}
+| <PROCEDURE_T> {return "procedure";}
+| <FUNCTION_T> {return "function";}
+| <PACKAGE_T> {return "package";}
+| <TYPE_T> {return "type";}
+| <SUBTYPE_T> {return "subtype";}
+| <CONSTANT_T> {return "constant";}
+| <SIGNAL_T> {return "signal";}
+| <VARIABLE_T> {return "variable";}
+| <COMPONENT_T> {return "component";}
+| <LABEL_T> {return "label";}
+| <LITERAL_T> {return "literal";}
+| <UNITS_T> {return "units";}
+| <GROUP_T> {return "group";}
+| <FILE_T> {return "file";}
+}
+
+QCString entity_class_entry() : {QCString s;}
+{
+ s=entity_class() [ <BOX_T> {s+="<>";} ] { return s;}
+}
+
+QCString entity_class_entry_list() : {QCString s,s1,s2;}
+{
+ ( s1=entity_class_entry() {s+=s1;} )(<COMMA_T> s=entity_class_entry(){s2+=",";s2+=s;} )* { return s1+s2;}
+}
+
+void entity_declaration() : {QCString s;}
+{
+ // try{
+ <ENTITY_T> s=identifier() <IS_T>
+ {
+ lastEntity=current;
+ lastCompound=0;
+ addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
+ }
+ entity_header()
+ entity_declarative_part ()
+ [ <BEGIN_T> entity_statement_part() ]
+ <END_T> [ <ENTITY_T> ] [ name() ]
+ // }catch(...){error_skipto(SEMI_T);}
+ <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()
+| <VHDL2008TOOLDIR>
+}
+
+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;}
+| <OTHER_T> { return "other";}
+| <ALL_T> {return "all";}
+}
+
+QCString entity_specification() : {QCString s,s1;}
+{
+s=entity_name_list() <COLON_T> 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;}
+{
+ <LPAREN_T>s=enumeration_literal() (LOOKAHEAD(1)<COMMA_T> s1=enumeration_literal() {s+=",";s+=s1;} )* <RPAREN_T>
+ { return "("+s+")";}
+}
+
+QCString exit_statement() : {QCString s,s1,s2;Token *t=0;Token *t1=0;}
+{
+[ s=identifier() t=<COLON_T> ] <EXIT_T> [ s1=identifier() ]
+[ t1=<WHEN_T> s2=condition() ] <SEMI_T>
+{
+ lab.resize(0);
+ if(t) s+=":";
+ if(t1) s2.prepend(" when ");
+ FlowChart::addFlowChart(FlowChart::EXIT_NO,"exit",s2.data(),s1.data());
+
+ return s+s1+s2+";";
+}
+}
+
+QCString expression (): {QCString s,s1,s2;}
+{
+s=relation() ( s1=logop() s2=relation() {s+=s1;s+=s2;} )*
+{ return s; }
+}
+
+QCString logop() : {}
+{
+ <AND_T> { return "and" ;}
+ |<NAND_T> { return "nand" ;}
+ |<NOR_T> { return "nor" ;}
+ |<XNOR_T> { return "xnor" ;}
+ |<XOR_T> { return "xor" ;}
+ |<OR_T> { return "or" ;}
+ }
+
+QCString extended_identifier (): {Token *t;}
+{
+ t=<EXTENDED_CHARACTER> { return t->image.c_str(); }
+}
+
+QCString factor(): {QCString s,s1;}
+{
+s=primary() [LOOKAHEAD(1) <DOUBLEMULT_T> s1=primary(){ s+="**";s+=s1;} ] { return s;}
+| <ABS_T> s=primary(){ s1 = "abs "; return s1+s; }
+| <NOT_T> s=primary(){s1="not ";return s1+s;}
+}
+
+QCString file_declaration() : {QCString s,s1,s2,s3;}
+{
+ <FILE_T> s=identifier_list() <COLON_T> s2=subtype_indication() [ s3=file_open_information() ] <SEMI_T>
+ {
+ 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;}
+{
+ [ <OPEN_T> s=expression() ] <IS_T> s1=file_logical_name() {s2="open "+s+" is "+s1; return s2; }
+}
+
+QCString file_type_definition() : {QCString s,s1;}
+{
+ <FILE_T> <OF_T> 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=<INTEGER> { return tok->image.c_str();}
+}
+
+
+QCString formal_parameter_list() : {QCString s;}
+{
+ s=interface_list(){ return s; }
+}
+
+QCString formal_part() : {QCString s,s1;}
+{
+s=name() [<LPAREN_T> formal_designator() <RPAREN_T> {s+"("+s1+")";}] {return s;}
+}
+
+QCString full_type_declaration() : {QCString s,s1,s2;}
+{
+<TYPE_T> s=identifier() <IS_T>
+ try{
+ s2=type_definition()
+ }catch(...){error_skipto(SEMI_T);}
+ <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() <LPAREN_T> s1=actual_parameter_part() <RPAREN_T> { return s+"("+s1+")";}
+}
+
+void generate_statement() : {QCString s;}
+{
+s=identifier() <COLON_T>
+ try{
+ generate_scheme() <GENERATE_T>
+ { pushLabel(genLabels,s); }
+ generate_statement_body1()
+ <END_T>
+ }catch(...){error_skipto(GENERATE_T);}
+ <GENERATE_T> [ identifier() ] <SEMI_T> {genLabels=popLabel(genLabels); }
+}
+
+void generate_scheme() : {}
+{
+<FOR_T> parameter_specification()
+| <IF_T> condition()
+}
+
+void generic_clause() : {QCString s;}
+{
+ <GENERIC_T> <LPAREN_T> { parse_sec=GEN_SEC; } s=generic_list() <RPAREN_T> <SEMI_T> { parse_sec=0; }
+}
+
+QCString generic_list() : {QCString s;}
+{
+ s=interface_list() { return s; }
+}
+
+void generic_map_aspect() : {}
+{
+ <GENERIC_T> <MAP_T> <LPAREN_T> association_list() <RPAREN_T>
+}
+
+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())(<COMMA_T> s=group_constituent(){s2+=",";s2+=s1;})* { return s+s2;}
+}
+
+QCString group_declaration() : {QCString s,s1,s2;}
+{
+ <GROUP_T> s=identifier() <COLON_T> s1=identifier() <LPAREN_T> s2=group_constituent_list() <RPAREN_T> <SEMI_T>
+ {
+ return "group "+s+":"+s1+"("+s2+");";
+ }
+}
+
+QCString group_template_declaration() : {QCString s,s1;}
+{
+ <GROUP_T> s=identifier() <IS_T> <LPAREN_T> s1=entity_class_entry_list() <RPAREN_T> <SEMI_T>
+ {
+ return "group "+s+ "is ("+s1+");";
+ }
+ }
+
+void guarded_signal_specification() : {}
+{
+ signal_list() <COLON_T> type_mark()
+}
+
+QCString identifier() : {Token *tok;}
+{
+ tok=<EXTENDED_CHARACTER>{ return tok->image.c_str(); }
+ |tok=<BASIC_IDENTIFIER> { return tok->image.c_str(); }
+}
+
+QCString identifier_list() : {QCString str,str1;}
+{
+ str=identifier() (<COMMA_T> str1=identifier() {str+=",";str+=str1;})* { return str; }
+}
+
+void if_statement() : {QCString s,s1;}
+{
+[LOOKAHEAD(1) identifier() <COLON_T> ]
+ <IF_T> s=condition() <THEN_T>
+ {
+ s.prepend("if ");
+ FlowChart::addFlowChart(FlowChart::IF_NO,0,s);
+ }
+ sequence_of_statement()
+ (
+ <ELSIF_T> s1=condition() <THEN_T>
+ {
+ s1.prepend("elsif ");
+ FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data());
+ }
+ sequence_of_statement()
+ )*
+ [LOOKAHEAD(1) <ELSE_T>
+ {
+ FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
+ }
+ sequence_of_statement() ] <END_T> <IF_T> [ identifier() ] <SEMI_T>
+ {
+ FlowChart::moveToPrevLevel();
+ FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0);
+ }
+}
+
+QCString incomplete_type_declaration() : {QCString s;}
+{
+ <TYPE_T> s=identifier() <SEMI_T>
+ {
+ return "type "+s+";";
+ }
+}
+
+QCString index_constraint() : {QCString s="("; QCString s1,s2;}
+{
+ //try{
+ <LPAREN_T> s2=discrete_range(){s+=s2;}(LOOKAHEAD(1)<COMMA_T> s1=discrete_range(){s+=",";s+=s1;})* <RPAREN_T> {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() <RANGE_T> <BOX_T> { return s+" range <> ";}
+}
+
+QCString instantiation_unit() : {QCString s,s1,s2;Token *tok;}
+{
+[ tok=<COMPONENT_T> ] s=identifier() {s1="component"; return s; }
+| tok=<ENTITY_T> s2=name() {s=tok->image.c_str()+s2;} [ <LPAREN_T> s1=identifier() <RPAREN_T> {s+="(";s+=s1;s+=")" ;}] { return s;}
+| <CONFIGURATION_T> s=name() {s1="configuration ";return s;}
+}
+
+QCString instantiation_list() : {QCString s;Token *tok;}
+{
+ s=identifier_list() { return s;}
+| tok=<OTHER_T> {return tok->image.c_str();}
+| tok=<ALL_T> {return tok->image.c_str();}
+}
+
+QCString integer() : {Token *t;}
+{
+ t=<INTEGER> {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;}
+{
+<FILE_T> s=identifier_list() <COLON_T> 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) <SEMI_T> 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=<VARIABLE_T> | tok=<SIGNAL_T> | tok=<CONSTANT_T>|tok=<SHARED_T>) ]
+ s=identifier_list() <COLON_T> [ s1=mode() ]
+ s2=subtype_indication() [ tok1=<BUS_T> ] [ tok2=<VARASSIGN_T> 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(),s1.data(),s2.data(),s3.data(),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 <<port %s >>\n",$$.data());
+ } // if component
+ return it;
+ }
+}
+
+QCString iteration_scheme() : {QCString s;}
+{
+<WHILE_T> s=condition()
+{
+ s.prepend("while ");
+ FlowChart::addFlowChart(FlowChart::WHILE_NO,0,s.data(),lab.data());
+ lab="";
+ return s;
+}
+| <FOR_T> s=parameter_specification()
+{
+ QCString q=lab+" for "+s;
+ FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
+ lab="";
+ return q;
+}
+}
+
+QCString label() : {QCString s;}
+{
+ s=identifier() { return s;}
+}
+
+QCString library_clause() : {QCString s;}
+{
+ (<LIBRARY_T> s=identifier_list() <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;
+ }
+}
+
+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;}
+| <NULL_T> {return "null";}
+}
+
+QCString logical_operator() : {QCString s;}
+{
+ s=logop() { return s;}
+}
+
+QCString loop_statement() : {QCString s,s1,s2,s3;}
+{
+[ s=identifier() <COLON_T> {s+=":";} ]
+ [ s1=iteration_scheme() ]
+ {
+ if(s1.isEmpty())
+ FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
+ }
+ <LOOP_T>
+ s2=sequence_of_statement()
+ <END_T> <LOOP_T> [ s3=identifier() ] <SEMI_T>
+ {
+ QCString q = s+" loop "+s2+" end loop" +s3;
+ QCString endLoop="end loop" + s3;
+ FlowChart::moveToPrevLevel();
+ FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0);
+ return q;
+ }
+
+}
+
+
+QCString miscellaneous_operator():{Token *t=0;}
+{
+ <DOUBLEMULT_T> {return "**";}
+ | <ABS_T> {return "abs";}
+ | <NOT_T> {return "not";}
+}
+
+QCString mode() : {Token *tok;}
+{
+tok=<IN_T> { return "in"; }
+| tok=<OUT_T> { return "out"; }
+| tok=<INOUT_T> { return "inout"; }
+| tok=<BUFFER_T> { return "buffer"; }
+| tok=<LINKAGE_T> { return "linkage"; }
+}
+
+QCString multiplying_operation() : {Token *tok;}
+{
+tok=<MULT_T> { return tok->image.c_str(); }
+| tok=<SLASH_T> { return tok->image.c_str(); }
+| tok=<MOD_T> { return tok->image.c_str(); }
+| tok=<REM_T> { 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(<DOT_T> suffix())
+ <DOT_T> s1=suffix(){s+=".";s+=s1;}
+|
+ LOOKAHEAD(test_att_name())
+ s1=test_att_name() { s+=s1;}
+ |
+ LOOKAHEAD( <LPAREN_T> discrete_range() <RPAREN_T>)
+ <LPAREN_T> s1=discrete_range() <RPAREN_T> {s+="(";s+=s1;s+=")";}
+ |
+ LOOKAHEAD( "(" expression() ("," expression() )* ")" )
+ <LPAREN_T> s1=expression() {s+="(";s+=s1;} (LOOKAHEAD(1) <COMMA_T> s1=expression(){s+=",";s+=s1;})* <RPAREN_T> { s+=")";}
+
+ )
+ {return s;}
+ }
+
+ QCString test_att_name() : {QCString s,s1;}
+ {
+ [ LOOKAHEAD(<LBRACKET_T>) s1=signature() {s=s1;}]
+ <APOSTROPHE_T> s1=attribute_designator() {s+="'";s+=s1;}
+ [LOOKAHEAD(1) <LPAREN_T> s1=expression() <RPAREN_T> {s+="(";s+=s1;s+=")";}]
+ { return s;}
+ }
+
+ QCString indexed_name() : {QCString s,s1,s2;}
+ {
+ s2=identifier() <LPAREN_T> s1=expression(){s=s2+"("+s1;} (<COMMA_T> s1=expression(){s+=",";s+=s1;})* <RPAREN_T> {return s+")";}
+ }
+
+QCString next_statement() : {QCString s,s1,s2;Token *t=0;Token *t1=0;}
+{
+[LOOKAHEAD(1) s=identifier() t=<COLON_T> ] <NEXT_T> [ s1=identifier() ]
+[LOOKAHEAD(1) t1=<WHEN_T> s2=condition() ] <SEMI_T>
+{
+ if(t) s+=":";
+ FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data());
+ lab.resize(0);
+ if(t1) s2.prepend("when ");
+ return s+s1+s2+";";
+}
+}
+
+QCString null_statement() : {QCString s;}
+{
+[ s=identifier() <COLON_T> {s+=":";}] <NULL_T> <SEMI_T>{return s+="null";}
+}
+
+QCString numeric_literal() : {QCString s;}
+{
+
+ LOOKAHEAD(physical_literal())
+ s=physical_literal(){ return s;}
+ | s=abstract_literal() { return s;}
+}
+
+QCString object_class() : {}
+{
+<CONSTANT_T> { return "constant"; }
+|<SIGNAL_T> { return "signal"; }
+|<VARIABLE_T> { return "variable"; }
+|<SHARED_T> <VARIABLE_T> { return "shared variable"; }
+|<FILE_T> { return "file"; }
+|<TYPE_T> { return "type"; }
+}
+
+QCString operator_symbol() : {Token *tok;}
+{
+tok=<STRINGLITERAL> {return tok->image.c_str();}
+}
+
+void options() : {}
+{
+ [ <GUARDED_T> ] [ delay_mechanism() ]
+}
+
+void package_body() : {QCString s;}
+{
+<PACKAGE_T> <BODY_T> s=name() <IS_T>
+ {
+ lastCompound=current;
+ s.prepend("_");
+ addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
+ }
+ package_body_declarative_part()
+
+<END_T> [<PACKAGE_T> <BODY_T> ] [ name() ] <SEMI_T> { 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;}
+{
+
+ <PACKAGE_T> s=identifier() <IS_T>
+ {
+ 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()
+<END_T> [ <PACKAGE_T>] [ name() ] <SEMI_T>
+{ lastEntity=0;lastCompound=0; genLabels.resize(0); }
+}
+
+void geninter():{}
+{
+ [gen_interface_list() <SEMI_T> [gen_assoc_list() <SEMI_T>]]
+}
+
+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() <IN_T> 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;}
+{
+ <UNITS_T>
+ s=identifier()<SEMI_T>
+ (s1=secondary_unit_declaration(){s2+=s1;s2+="#";})*
+ <END_T> <UNITS_T> [name()]
+ {
+ current->args=s2;
+ current->args.prepend("units");
+ current->spec=VhdlDocGen::UNITS;
+ return s2;
+ }
+}
+
+void port_clause() : {}
+{
+ <PORT_T> <LPAREN_T> port_list()<RPAREN_T> <SEMI_T>{ currP=0; }
+}
+
+QCString port_list() : {QCString s;}
+{
+ s=interface_list(){return s;}
+}
+
+void port_map_aspect() : {}
+{
+ <PORT_T> <MAP_T> <LPAREN_T> association_list() <RPAREN_T>
+}
+
+QCString primary() : {QCString s,s1;}
+{
+LOOKAHEAD(function_call())
+s=function_call() { return s;}
+|
+LOOKAHEAD(<LPAREN_T> expression() <RPAREN_T>)
+ <LPAREN_T> s1=expression() <RPAREN_T>{ 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() [ <LPAREN_T> s1=actual_parameter_part() <RPAREN_T>{ s1.prepend("("); s1.append(")");}]
+{ return s+s1;}
+ }
+
+QCString procedure_call_statement() : {QCString s,s1;}
+{
+[LOOKAHEAD(2) s=identifier() <COLON_T> { s+=":"; }] s1=procedure_call() <SEMI_T>
+{
+ 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() <COLON_T> ]
+[ <POSTPONED_T> ]
+ {
+ currP=VhdlDocGen::PROCESS;
+ current->startLine=getLine();
+ current->bodyLine=getLine();
+ }
+ <PROCESS_T>
+ //try{
+ [ <LPAREN_T> (tok=<ALL_T> | s1=sensitivity_list()) <RPAREN_T> ] [ <IS_T> ]
+ s2=process_declarative_part()
+ {
+ if (s2.data())
+ FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s2.data(),0);
+ FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
+ }
+ <BEGIN_T>
+ process_statement_part()
+ <END_T> [ <POSTPONED_T> ]
+ // }catch(...){error_skipto(PROCESS_T);}
+ <PROCESS_T> [ identifier() ] <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 process_statement_part() : {}
+{
+ (sequential_statement())*
+}
+
+QCString qualified_expression() : {QCString s,s1;}
+{
+ s1=identifier() <APOSTROPHE_T> {s=s1+"'";}
+ (
+ LOOKAHEAD(aggregate())
+ s1=aggregate(){s+=s1;}
+ | <LPAREN_T> s1=expression() <RPAREN_T>{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;}
+{
+<RANGE_T> s=range(){return " range "+s;}
+}
+
+void record_type_definition() : {}
+{
+ <RECORD_T>
+ // try{
+ (element_declaration())+
+ // }catch(...){error_skipto(END_T);}
+ <END_T>
+ <RECORD_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() : {}
+{
+ <LT_T> {return "<";}
+ |<GT_T> {return ">";}
+ |<EQU_T> {return "=";}
+ |<GREATERTHAN_T> {return ">=";}
+ |<LESSTHAN_T> {return "<=";}
+ |<NOTEQU_T> {return "/=";}
+
+}
+
+QCString report_statement() : {Token *t=0;Token *t1=0;QCString s,s1,s2;}
+{
+[ s=identifier() t=<COLON_T> ]
+ <REPORT_T> s1=expression()
+ [ t1=<SEVERITY_T> s2=expression() ] <SEMI_T>
+ {
+ if(t) s.append(":");
+ s1.prepend(" report ");
+ if(t1) s2.prepend(" severity ");
+ return s+s1+s2+";";
+ }
+}
+
+QCString return_statement() : {QCString s,s1;}
+{
+[ s=identifier() <COLON_T> { s+=":";}] <RETURN_T> [ s1=expression() ] <SEMI_T>
+{ 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() <EQU_T> s1=physical_literal() <SEMI_T> { return s+"="+s1; }
+}
+
+QCString selected_name() : {QCString s,s1;}
+{
+ s=identifier() <DOT_T> s1=suffix(){ return s+"."+s1;}
+}
+
+void selected_signal_assignment() : {}
+{
+ <WITH_T> expression() <SELECT_T>
+
+ target() < LESSTHAN_T> options() selected_waveforms() <SEMI_T>
+}
+
+void selected_waveforms() : {}
+{
+ waveform() <WHEN_T> choices()(<COMMA_T> waveform() <WHEN_T> choices())*
+}
+
+QCString sensitivity_clause() : {QCString s;}
+{
+ <ON_T> s=sensitivity_list()
+ {
+ s.prepend(" on ");
+ return s;
+ }
+}
+
+QCString sensitivity_list() : {QCString s,s1;}
+{
+ s=name() (<COMMA_T> s1=name(){s+=",";s+=s1;} )* { return s;}
+}
+
+QCString sequence_of_statement() : {QCString s,s1;}
+{
+ ( LOOKAHEAD(3) s1=sequential_statement() {s+=s1;} )* { return s;}
+}
+
+QCString sequential_statement() :{QCString s;}
+{
+ LOOKAHEAD( [ identifier() ":" ] target() "<=")
+ s=signal_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
+ LOOKAHEAD(3)
+ s=assertion_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
+ LOOKAHEAD(3)
+ s=report_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
+ LOOKAHEAD(3)
+ s=wait_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
+ LOOKAHEAD( [ identifier() ":" ] target() ":=" )
+ s=variable_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
+ LOOKAHEAD(3)
+ s=procedure_call_statement(){ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; }
+ |
+ LOOKAHEAD(3)
+ if_statement(){return s;}
+ |
+ LOOKAHEAD(3)
+ case_statement(){return s;}
+ |
+ LOOKAHEAD(3)
+ loop_statement(){return s;}
+ |
+ LOOKAHEAD(3)
+ s=next_statement() {return s;}
+ |
+ LOOKAHEAD(3)
+ s=exit_statement(){return s;}
+ |
+ LOOKAHEAD(3)
+ s=return_statement(){FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);return s;}
+ |
+ s=null_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+}
+
+QCString shift_expression() : {QCString s,s1,s2;}
+{
+ s=simple_expression() [ s1=shift_operator() s2=simple_expression() ] { return s+s1+s2;}
+}
+QCString shift_operator() : {}
+{
+ <SLL_T> { return "sll";}
+ | <SRL_T> { return "srl";}
+ | <SLA_T> { return "sla";}
+ | <SRA_T> { return "sra";}
+ | <ROL_T> { return "rol";}
+ | <ROR_T> { return "ror";}
+}
+
+QCString sign() : {}
+{
+ <PLUS_T> { return "+";}
+ | <MINUS_T> { 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() <COLON_T> {s+=":";} ]
+s1=target() <LESSTHAN_T>
+[ s2=delay_mechanism() ]
+s3=waveform() <SEMI_T>
+{
+ return s+s1+"<="+s2+s3+";";
+}
+
+}
+
+void semi() : {}
+{
+<SEMI_T>
+}
+
+void signal_declaration() : { Token* tok=0;QCString s,s1,s2,s3,s4;}
+{
+<SIGNAL_T> s=identifier_list() <COLON_T> s1=subtype_indication() [ s2=signal_kind() ] [ tok=<VARASSIGN_T> s3=expression() ] <SEMI_T>
+ {
+ if(tok)
+ s3.prepend(":=");
+ s4=s1+s2+s3;
+ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
+ }
+}
+QCString signal_kind() : {}
+{
+ <REGISTER_T> { return "register";}
+ | <BUS_T> { return "bus";}
+}
+
+QCString signal_list() : {QCString s,s1;}
+{
+ s=name() (<COMMA_T> s1=name() { s+=",";s+=s1;})*
+| <OTHER_T> { return "other";}
+| <ALL_T> { return "all";}
+}
+
+QCString signature() : {QCString s,s1,s2;}
+{
+<LBRACKET_T>
+ [ s=name() (<COMMA_T> s1=name() {s+=",";s+=s1; })* ]
+ [ <RETURN_T> s1=name() {s+="return ";s+=s1;}]
+ <RBRACKET_T>
+ { s1="["+s+"]";return s1;}
+ }
+
+QCString simple_expression(): {QCString s,s1,s2;}
+{
+[ s=sign() ] s1=term() {s+=s1;} ( LOOKAHEAD(adding_operator() term()) s1=adding_operator() s2=term() {s+=s1;s+=s2;})* { return s;}
+}
+
+void simple_name() : {}
+{
+name()
+}
+
+QCString slice_name() : {QCString s,s1;}
+{
+ s=identifier() <LPAREN_T> s1=discrete_range() <RPAREN_T> {return s+"("+s1+")";}
+}
+
+QCString string_literal() : {Token *tok;}
+{
+tok=<STRINGLITERAL> {return tok->image.c_str();}
+}
+
+ void subprogram_body() : {QCString s;}
+{
+//subprogram_specification()
+<IS_T>
+ //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);}
+<BEGIN_T>
+subprogram_statement_part()
+<END_T> [ subprogram_kind() ] [ designator() ] <SEMI_T>
+ {
+ 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()
+ | <SEMI_T>
+}
+
+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() : {}
+{
+ <FUNCTION_T>
+ |<PROCEDURE_T>
+}
+
+void subprogram_specification() : {QCString s;Token *tok=0;Token *t;}
+{
+ <PROCEDURE_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) <LPAREN_T> { param_sec=PARAM_SEC; } interface_list() { param_sec=0; }<RPAREN_T> ]
+ [LOOKAHEAD(2) gen_interface_list()]
+ [ LOOKAHEAD(2) gen_assoc_list()]
+ param()
+ { newEntry(); }
+|
+ [ (tok=<PURE_T> | tok=<IMPURE_T>) ] t=<FUNCTION_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; } <LPAREN_T> formal_parameter_list() <RPAREN_T> { param_sec=0; }]
+ <RETURN_T> s=type_mark()
+ {
+ tempEntry=current;
+ current->type=s;
+ newEntry();
+ }
+}
+
+void subprogram_statement_part() : {}
+{
+ (sequential_statement())*
+}
+
+QCString subtype_declaration() : {QCString s,s1;}
+{
+<SUBTYPE_T> s=identifier() <IS_T> s1=subtype_indication() <SEMI_T>
+ {
+ 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;}
+| <ALL_T> {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;}
+{
+<FOR_T> s=expression()
+{
+ return " for "+s;
+}
+}
+
+QCString type_conversion() : {QCString s,s1;}
+{
+ s=name() <LPAREN_T> s1=expression() <RPAREN_T> { 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;}
+{
+<ARRAY_T> <LPAREN_T> s=index_subtype_definition() ( <COMMA_T> s1=index_subtype_definition(){s3+=",";s3+=s1;})* <RPAREN_T>
+ <OF_T> s2=subtype_indication() {return "array("+s+s3+") of "+s2;}
+}
+
+ QCString use_clause() : {QCString s,s1;}
+{
+ <USE_T> s=selected_name()(<COMMA_T> s1=selected_name(){s+=",";s+=s1;})* <SEMI_T>
+ {
+ QStringList ql1=QStringList::split(",",s,FALSE);
+ for (uint j=0;j<ql1.count();j++)
+ {
+ QStringList ql=QStringList::split(".",ql1[j],FALSE);
+ QCString it=ql[1].utf8();
+ if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
+ {
+ VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
+ }
+ }
+ s1="use "+s;
+ return s1;
+ }
+}
+
+QCString variable_assignment_statement() : {QCString s,s1,s2;}
+{
+[LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";}]
+ s1=target() <VARASSIGN_T> s2=expression() <SEMI_T>
+ {return s+s1+":="+s2+";";}
+ |
+ selected_variable_assignment() { return ""; }
+}
+
+QCString variable_declaration() : {Token *tok=0;Token *t1=0;QCString s,s1,s2;}
+{
+[ tok=<SHARED_T> ] <VARIABLE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
+[ t1=<VARASSIGN_T> s2=expression() ] <SEMI_T>
+
+{
+ int spec;
+ if(t1)
+ s2.prepend(":=");
+ QCString val=" variable "+s+":"+s1+s2+";";
+ QCString it=s1;
+ if(tok != 0)
+ {
+ it.prepend(" shared ");
+ val.prepend(" shared");
+ spec=VhdlDocGen::SHAREDVARIABLE;
+ }
+ else
+ spec=VhdlDocGen::SHAREDVARIABLE;
+
+ if(t1){
+ it+=":=";
+ it+=s2;
+ }
+ 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() t=<COLON_T> ] <WAIT_T> [ s1=sensitivity_clause() ] [ s2=condition_clause() ] [ s3=timeout_clause() ] <SEMI_T>
+{
+ if(t) s.append(":");
+ return s+" wait "+s1+s2+s3+";";
+}
+}
+
+QCString waveform() : {QCString s,s1;}
+{
+s=waveform_element() (LOOKAHEAD(1) <COMMA_T> s1=waveform_element(){s+=","; s+=s1;})* { return s;}
+|
+<UNAFFECTED_T> { return " unaffected ";}
+
+}
+
+QCString waveform_element() : {QCString s,s1;}
+{
+ s=expression() [ <AFTER_T> s1=expression(){ s1.prepend(" after ");} ]
+ { return s+s1;}
+//<NULL_T> [ <AFTER_T> expression() ]
+}
+
+// -----------------------------------------------------------------
+// VHDL 2002
+// -----------------------------------------------------------------
+
+QCString protected_type_body() :{ }
+{
+ // try{
+ <PROTECTED_T> <BODY_T>
+ protected_type_body_declarative_part()
+
+ //}catch(...){error_skipto(END_T);}
+ <END_T><PROTECTED_T> <BODY_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() : { }
+ {
+ <PROTECTED_T>
+ try{
+ protected_type_declarative_part()
+ }catch(...){error_skipto(END_T);}
+ <END_T><PROTECTED_T> [ identifier() ] { return "";}
+ }
+
+
+void protected_type_declarative_item(): { }
+{
+ subprogram_specification()
+ | attribute_specification()
+ | use_clause()
+}
+
+void protected_type_declarative_part() : {}
+{
+ (protected_type_declarative_item ()<SEMI_T>)*
+}
+
+// -----------------------------------------------------------------
+// VHDL 2008
+// -----------------------------------------------------------------
+
+QCString context_ref() : {QCString s;}
+{
+ <CONTEXT_T> s=identifier_list() <SEMI_T>
+ {
+ return "context "+s ;
+ }
+}
+
+void context_declaration(): {QCString s,s1;}
+{
+ <CONTEXT_T> s=identifier() <IS_T> { parse_sec=CONTEXT_SEC; } (s1=libustcont_stats())* <END_T> [ <CONTEXT_T> ][identifier()] <SEMI_T>
+ {
+ 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;}
+ {
+ <PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() s2=signature() [gen_assoc_list()] <SEMI_T>
+ {
+ 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;}
+{
+ <PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() [gen_assoc_list()]
+ {
+ current->name=s;
+ return "package "+s+" is new "+s1;
+ }
+}
+
+QCString subprogram_instantiation_declaration():{QCString s,s1,s2;}
+{
+ <FUNCTION_T> s=identifier() <IS_T> <NEW_T> s1=name() s2=signature() [gen_assoc_list()] <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;
+ }
+}
+
+
+void gen_assoc_list():{}
+{
+ <GENERIC_T> <MAP_T> <LPAREN_T> association_list()<RPAREN_T>
+}
+
+void gen_interface_list() : {}
+{
+ <GENERIC_T><LPAREN_T>
+ {
+ //int u=s_str.iLine;
+ parse_sec=GEN_SEC;
+ }
+ interface_list()
+ {
+ // QCString vo=$3;
+ parse_sec=0;
+ }
+ <RPAREN_T>
+}
+
+void case_scheme (): {}
+{
+ <CASE_T> expression() <GENERATE_T> when_stats() [LOOKAHEAD(3) ttend()] <END_T>
+ <GENERATE_T> generate_statement_body() <SEMI_T>
+}
+
+void when_stats() : {}
+{
+ (
+ <WHEN_T> [LOOKAHEAD(2) label() <COLON_T>] choices() <ARROW_T> generate_statement_body()
+ )+
+}
+
+void ttend(): {}
+{
+ <END_T> [identifier()] <SEMI_T>
+ }
+
+
+void generate_statement_body() : {}
+{
+ <BEGIN_T> generate_statement_body()
+}
+
+void generate_statement_body1() : {}
+{
+ LOOKAHEAD(block_declarative_item()<BEGIN_T> )
+ (block_declarative_item() )* <BEGIN_T> (concurrent_statement())*
+ | (concurrent_statement())*
+}
+
+QCString external_name(): {QCString s,s1,s2;}
+{
+ <SLSL_T> s=sig_stat() s1=external_pathname() <COLON_T> s2=subtype_indication() <RSRS_T>
+ {
+ QCString t="<<"+s;
+ QCString t1=s1+":"+s2+">>";
+ return s+s1;
+ }
+}
+
+QCString sig_stat(): {Token *t;}
+{
+ t=<CONSTANT_T> { return t->image.data(); }
+ | t=<SIGNAL_T> { return t->image.data(); }
+ | t=<VARIABLE_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(<DOT_T> pathname_element_list())
+ <DOT_T> s=pathname_element_list() s1=identifier() { return "."+s+s1;}
+| <DOT_T> 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;}
+{
+ (<NEG_T> <DOT_T>{s+="^.";})+ {return s; }
+}
+
+QCString pathname_element ():{QCString s,s1;}
+{
+ s=identifier() [<LPAREN_T> s1=expression() <RPAREN_T>]
+ {
+ if(!s1.isEmpty())
+ return s+"("+s1+")";
+
+ return s;
+ }
+ }
+
+QCString pathname_element_list():{QCString s,s1,s2;}
+{
+ ( s=pathname_element() <DOT_T> ) {s+=".";} (LOOKAHEAD(pathname_element() <DOT_T>) s1=pathname_element() <DOT_T> {s2+=s1;s2+="."; })*
+ { return s+s2; }
+}
+
+QCString package_path_name():{QCString s;}
+{
+ <AT_T> s=name() { return "@"+s; }
+}
+
+void conditional_signal_assignment_wave(): {}
+{
+ LOOKAHEAD(conditional_force_assignment())
+ conditional_force_assignment()
+ |conditional_waveform_assignment()
+}
+
+void conditional_waveform_assignment():{}
+{
+ target() <LESSTHAN_T> [LOOKAHEAD(1) delay_mechanism() ] waveform_element() <WHEN_T> expression() [else_wave_list()] <SEMI_T>
+ }
+
+void else_wave_list(): {}
+{
+<ELSE_T> expression() [ <WHEN_T> expression()]
+}
+
+void conditional_force_assignment(): {}
+{
+ target() <LESSTHAN_T> <FORCE_T> [inout_stat()] expression() <WHEN_T> [expression() else_stat()] <SEMI_T>
+}
+
+void selected_signal_assignment_wave() : {}
+{
+ LOOKAHEAD(selected_force_assignment() )
+ selected_force_assignment()
+| selected_waveform_assignment()
+}
+
+void selected_variable_assignment():{}
+{
+ <WITH_T> expression() <SELECT_T> [<Q_T>] select_name() <VARASSIGN_T> sel_var_list() // { $$=""; }
+}
+
+void select_name(): {}
+{
+ LOOKAHEAD(aggregate())
+ aggregate()
+ | name()
+
+}
+
+void selected_waveform_assignment():{}
+{
+ <WITH_T> expression() <SELECT_T> [<Q_T>]
+ target() <LESSTHAN_T> [delay_mechanism()] sel_wave_list()
+}
+
+void selected_force_assignment():{}
+{
+<WITH_T> expression() <SELECT_T> [<Q_T>] target() <LESSTHAN_T> <FORCE_T>
+ [inout_stat()] sel_var_list()
+}
+
+void sel_var_list(): {}
+{
+ (expression() <WHEN_T> choices() (<COMMA_T>|<SEMI_T>))(LOOKAHEAD(expression() <WHEN_T>) expression() <WHEN_T> choices() (<COMMA_T>|<SEMI_T>))*
+
+}
+
+
+void sel_wave_list() : {}
+{
+ waveform_element() <WHEN_T> choices() (LOOKAHEAD(1) <COMMA_T> sel_wave_list())* <SEMI_T>
+ // | sel_wave_list_1()
+}
+
+void inout_stat(): {}
+{
+ <IN_T>
+ | <OUT_T>
+ }
+
+void else_stat(): {}
+{
+ (<ELSE_T> expression() [LOOKAHEAD(1) <WHEN_T> expression()])+
+}
+
+
+
+QCString interface_subprogram_declaration(): {QCString s;}
+{
+ s=iproc() { return s;}
+ | s=ifunc() { return s; }
+}
+
+QCString iproc(): {QCString s,s1;}
+ {
+ <PROCEDURE_T> 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=<PURE_T> | t=<IMPURE_T> ] <FUNCTION_T> s=name() s1=param() <RETURN_T> s2=name() [t1=<IS_T> (s3=identifier() | t2=<BOX_T>)]
+ {
+ 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=<PARAMETER_T> ] { param_sec=PARAM_SEC; }
+ [ <LPAREN_T> s1=interface_list() <RPAREN_T>]
+ {
+ 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..ec13907
--- /dev/null
+++ b/vhdlparser/vhdlstring.h
@@ -0,0 +1,101 @@
+#ifndef VHDLSTRING_H
+#define VHDLSTRING_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/** @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<pos+len ? m_len-pos : len;
+ memcpy(s,m_str+pos,r);
+ return r;
+ }
+ const char *c_str() const { return m_str; }
+ const char *data() const { return m_str; }
+ int size() const { return m_len; }
+ int length() const { return m_len; }
+ char & operator[](int i) { return m_str[i]; }
+ const char &operator[](int i) const { return m_str[i]; }
+ void clear() { free(m_str); init(); }
+ VhdlString operator+=(char c) { char s[2]; s[0]=c; s[1]=0; return append(s); }
+
+ private:
+ void init() { m_str=(char*)calloc(1,1); m_len=0; }
+ char *m_str;
+ int m_len;
+};
+
+#endif
diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj
index 366dfb4..882e514 100644
--- a/winbuild/Doxygen.vcproj
+++ b/winbuild/Doxygen.vcproj
@@ -95,7 +95,7 @@
Name="VCCLCompilerTool"
AdditionalOptions="/Zm200 "
Optimization="0"
- AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,$(IntDir),."
+ AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,..\vhdlparser,$(IntDir),."
PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -127,7 +127,7 @@
SuppressStartupBanner="true"
AdditionalLibraryDirectories="Debug"
GenerateManifest="false"
- IgnoreDefaultLibraryNames="libcmtd.lib"
+ IgnoreDefaultLibraryNames="libcmtd.lib libcpmtd.lib libcmt.lib"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug\doxygen\$(TargetName).pdb"
SubSystem="1"
@@ -217,7 +217,7 @@
Name="VCCLCompilerTool"
AdditionalOptions="/Zm200 /bigobj"
Optimization="0"
- AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,$(IntDir),."
+ AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,..\vhdlparser,$(IntDir),."
PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -340,7 +340,7 @@
InlineFunctionExpansion="2"
OmitFramePointers="true"
WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,$(IntDir),."
+ AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,..\vhdlparser,$(IntDir),."
PreprocessorDefinitions="WIN32;_CINDEX_LIB_;_CINDEX_LIB_;NDEBUG;_CONSOLE; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
StringPooling="true"
RuntimeLibrary="0"
@@ -463,7 +463,7 @@
InlineFunctionExpansion="2"
OmitFramePointers="true"
WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,$(IntDir),."
+ AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,..\vhdlparser,$(IntDir),."
PreprocessorDefinitions="WIN32;_CINDEX_LIB_;_CINDEX_LIB_;NDEBUG;_CONSOLE; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
StringPooling="true"
RuntimeLibrary="0"
@@ -543,6 +543,10 @@
>
</File>
<File
+ RelativePath="..\vhdlparser\CharStream.cc"
+ >
+ </File>
+ <File
RelativePath="..\src\cite.cpp"
>
</File>
@@ -683,6 +687,10 @@
>
</File>
<File
+ RelativePath="..\src\fileparser.cpp"
+ >
+ </File>
+ <File
RelativePath="..\src\formula.cpp"
>
</File>
@@ -827,10 +835,18 @@
>
</File>
<File
+ RelativePath="..\vhdlparser\ParseException.cc"
+ >
+ </File>
+ <File
RelativePath="..\src\perlmodgen.cpp"
>
</File>
<File
+ RelativePath="..\src\plantuml.cpp"
+ >
+ </File>
+ <File
RelativePath="..\src\portable.cpp"
>
</File>
@@ -911,6 +927,14 @@
>
</File>
<File
+ RelativePath="..\vhdlparser\Token.cc"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\TokenMgrError.cc"
+ >
+ </File>
+ <File
RelativePath="..\src\tooltip.cpp"
>
</File>
@@ -927,6 +951,22 @@
>
</File>
<File
+ RelativePath="..\src\vhdljjparser.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\VhdlParser.cc"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\VhdlParserIF.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\VhdlParserTokenManager.cc"
+ >
+ </File>
+ <File
RelativePath="..\src\xmldocvisitor.cpp"
>
</File>
@@ -1180,42 +1220,6 @@
/>
</FileConfiguration>
</File>
- <File
- RelativePath="..\src\vhdlscanner.l"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Lex"
- Case="true"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Lex"
- Case="true"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Lex"
- Case="true"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Lex"
- Case="true"
- />
- </FileConfiguration>
- </File>
</Filter>
<Filter
Name="Python Files"
@@ -2211,6 +2215,10 @@
>
</File>
<File
+ RelativePath="..\vhdlparser\CharStream.h"
+ >
+ </File>
+ <File
RelativePath="..\src\cite.h"
>
</File>
@@ -2363,6 +2371,10 @@
>
</File>
<File
+ RelativePath="..\vhdlparser\ErrorHandler.h"
+ >
+ </File>
+ <File
RelativePath="..\src\example.h"
>
</File>
@@ -2379,6 +2391,10 @@
>
</File>
<File
+ RelativePath="..\src\fileparser.h"
+ >
+ </File>
+ <File
RelativePath="$(IntDir)\footer_html.h"
>
</File>
@@ -2455,6 +2471,10 @@
>
</File>
<File
+ RelativePath="..\vhdlparser\JavaCC.h"
+ >
+ </File>
+ <File
RelativePath="$(IntDir)\jquery_fx_js.h"
>
</File>
@@ -2587,6 +2607,10 @@
>
</File>
<File
+ RelativePath="..\vhdlparser\ParseException.h"
+ >
+ </File>
+ <File
RelativePath="..\src\parserintf.h"
>
</File>
@@ -2595,6 +2619,10 @@
>
</File>
<File
+ RelativePath="..\src\plantuml.h"
+ >
+ </File>
+ <File
RelativePath="..\src\portable.h"
>
</File>
@@ -2703,6 +2731,18 @@
>
</File>
<File
+ RelativePath="..\vhdlparser\Token.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\TokenManager.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\TokenMgrError.h"
+ >
+ </File>
+ <File
RelativePath="..\src\tooltip.h"
>
</File>
@@ -2907,11 +2947,31 @@
>
</File>
<File
- RelativePath="$(IntDir)\vhdlscanner.cpp"
+ RelativePath="..\src\vhdljjparser.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\vhdlparser.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\VhdlParserConstants.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\VhdlParserErrorHandler.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\VhdlParserIF.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vhdlparser\VhdlParserTokenManager.h"
>
</File>
<File
- RelativePath="..\src\vhdlscanner.h"
+ RelativePath="..\vhdlparser\vhdlstring.h"
>
</File>
<File