]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Revert BaseTools: PYTHON3 migration
authorLiming Gao <liming.gao@intel.com>
Mon, 15 Oct 2018 00:27:53 +0000 (08:27 +0800)
committerLiming Gao <liming.gao@intel.com>
Mon, 15 Oct 2018 00:29:14 +0000 (08:29 +0800)
This reverts commit 6693f359b3c213513c5096a06c6f67244a44dc52..
678f85131238622e576705117e299d81cff755c9.

Python3 migration is the fundamental change. It requires every developer
to install Python3. Before this migration, the well communication and wide
verification must be done. But now, most people is not aware of this change,
and not try it. So, Python3 migration is reverted and be moved to edk2-staging
Python3 branch for the edk2 user evaluation.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Liming Gao <liming.gao@intel.com>
183 files changed:
BaseTools/Bin/CYGWIN_NT-5.1-i686/Ecc
BaseTools/Bin/CYGWIN_NT-5.1-i686/GenDepex
BaseTools/Bin/CYGWIN_NT-5.1-i686/GenFds
BaseTools/Bin/CYGWIN_NT-5.1-i686/TargetTool
BaseTools/Bin/CYGWIN_NT-5.1-i686/Trim
BaseTools/Bin/CYGWIN_NT-5.1-i686/build
BaseTools/BinWrappers/PosixLike/BPDG
BaseTools/BinWrappers/PosixLike/Ecc
BaseTools/BinWrappers/PosixLike/GenDepex
BaseTools/BinWrappers/PosixLike/GenFds
BaseTools/BinWrappers/PosixLike/GenPatchPcdTable
BaseTools/BinWrappers/PosixLike/GenerateCapsule
BaseTools/BinWrappers/PosixLike/PatchPcdValue
BaseTools/BinWrappers/PosixLike/Pkcs7Sign
BaseTools/BinWrappers/PosixLike/Rsa2048Sha256GenerateKeys
BaseTools/BinWrappers/PosixLike/Rsa2048Sha256Sign
BaseTools/BinWrappers/PosixLike/TargetTool
BaseTools/BinWrappers/PosixLike/Trim
BaseTools/BinWrappers/PosixLike/UPT
BaseTools/BinWrappers/PosixLike/build
BaseTools/BinWrappers/WindowsLike/BPDG.bat
BaseTools/BinWrappers/WindowsLike/Ecc.bat
BaseTools/BinWrappers/WindowsLike/GenDepex.bat
BaseTools/BinWrappers/WindowsLike/GenFds.bat
BaseTools/BinWrappers/WindowsLike/GenPatchPcdTable.bat
BaseTools/BinWrappers/WindowsLike/GenerateCapsule.bat
BaseTools/BinWrappers/WindowsLike/PatchPcdValue.bat
BaseTools/BinWrappers/WindowsLike/Pkcs7Sign.bat
BaseTools/BinWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.bat
BaseTools/BinWrappers/WindowsLike/Rsa2048Sha256Sign.bat
BaseTools/BinWrappers/WindowsLike/TargetTool.bat
BaseTools/BinWrappers/WindowsLike/Trim.bat
BaseTools/BinWrappers/WindowsLike/UPT.bat
BaseTools/BinWrappers/WindowsLike/build.bat
BaseTools/Makefile
BaseTools/Scripts/PackageDocumentTools/Readme.md
BaseTools/Scripts/PackageDocumentTools/packagedoc_cli.py
BaseTools/Scripts/PackageDocumentTools/packagedocapp.pyw
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/doxygen.py
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/efibinary.py
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/ini.py
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/edk2/model/baseobject.py
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/edk2/model/dec.py
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/edk2/model/doxygengen.py
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/edk2/model/doxygengen_spec.py
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/edk2/model/dsc.py
BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/edk2/model/inf.py
BaseTools/Source/C/Makefile
BaseTools/Source/C/PyUtility/Makefile [new file with mode: 0644]
BaseTools/Source/C/PyUtility/PyUtility.c [new file with mode: 0644]
BaseTools/Source/C/PyUtility/setup.py [new file with mode: 0644]
BaseTools/Source/C/TianoCompress/TianoCompress.c
BaseTools/Source/C/TianoCompress/TianoCompress.h
BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools/Source/Python/AutoGen/BuildEngine.py
BaseTools/Source/Python/AutoGen/GenC.py
BaseTools/Source/Python/AutoGen/GenMake.py
BaseTools/Source/Python/AutoGen/GenPcdDb.py
BaseTools/Source/Python/AutoGen/GenVar.py
BaseTools/Source/Python/AutoGen/IdfClassObject.py
BaseTools/Source/Python/AutoGen/InfSectionParser.py
BaseTools/Source/Python/AutoGen/StrGather.py
BaseTools/Source/Python/AutoGen/UniClassObject.py
BaseTools/Source/Python/AutoGen/ValidCheckingInfoObject.py
BaseTools/Source/Python/BPDG/BPDG.py
BaseTools/Source/Python/BPDG/GenVpd.py
BaseTools/Source/Python/Common/Database.py
BaseTools/Source/Python/Common/EdkLogger.py
BaseTools/Source/Python/Common/Expression.py
BaseTools/Source/Python/Common/LongFilePathOs.py
BaseTools/Source/Python/Common/LongFilePathSupport.py
BaseTools/Source/Python/Common/Misc.py
BaseTools/Source/Python/Common/Parsing.py
BaseTools/Source/Python/Common/PyUtility.pyd [new file with mode: 0644]
BaseTools/Source/Python/Common/RangeExpression.py
BaseTools/Source/Python/Common/StringUtils.py
BaseTools/Source/Python/Common/TargetTxtClassObject.py
BaseTools/Source/Python/Common/ToolDefClassObject.py
BaseTools/Source/Python/Common/VpdInfoFile.py
BaseTools/Source/Python/Ecc/C.g4 [deleted file]
BaseTools/Source/Python/Ecc/CLexer.py
BaseTools/Source/Python/Ecc/CListener.py [deleted file]
BaseTools/Source/Python/Ecc/CParser.py
BaseTools/Source/Python/Ecc/Check.py
BaseTools/Source/Python/Ecc/CodeFragmentCollector.py
BaseTools/Source/Python/Ecc/EccMain.py
BaseTools/Source/Python/Ecc/FileProfile.py
BaseTools/Source/Python/Ecc/MetaDataParser.py
BaseTools/Source/Python/Ecc/c.py
BaseTools/Source/Python/Eot/CLexer.py
BaseTools/Source/Python/Eot/CListener.py [deleted file]
BaseTools/Source/Python/Eot/CParser.py
BaseTools/Source/Python/Eot/CodeFragmentCollector.py
BaseTools/Source/Python/Eot/Eot.py [new file with mode: 0644]
BaseTools/Source/Python/Eot/EotMain.py [deleted file]
BaseTools/Source/Python/Eot/InfParserLite.py
BaseTools/Source/Python/Eot/Parser.py
BaseTools/Source/Python/Eot/Report.py
BaseTools/Source/Python/GenFds/AprioriSection.py
BaseTools/Source/Python/GenFds/Capsule.py
BaseTools/Source/Python/GenFds/CapsuleData.py
BaseTools/Source/Python/GenFds/CompressSection.py
BaseTools/Source/Python/GenFds/DataSection.py
BaseTools/Source/Python/GenFds/DepexSection.py
BaseTools/Source/Python/GenFds/EfiSection.py
BaseTools/Source/Python/GenFds/Fd.py
BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools/Source/Python/GenFds/FfsFileStatement.py
BaseTools/Source/Python/GenFds/FfsInfStatement.py
BaseTools/Source/Python/GenFds/Fv.py
BaseTools/Source/Python/GenFds/FvImageSection.py
BaseTools/Source/Python/GenFds/GenFds.py
BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
BaseTools/Source/Python/GenFds/GuidSection.py
BaseTools/Source/Python/GenFds/OptRomFileStatement.py
BaseTools/Source/Python/GenFds/OptRomInfStatement.py
BaseTools/Source/Python/GenFds/OptionRom.py
BaseTools/Source/Python/GenFds/Region.py
BaseTools/Source/Python/GenFds/RuleComplexFile.py
BaseTools/Source/Python/GenFds/RuleSimpleFile.py
BaseTools/Source/Python/GenFds/Section.py
BaseTools/Source/Python/GenFds/UiSection.py
BaseTools/Source/Python/GenFds/VerSection.py
BaseTools/Source/Python/GenFds/Vtf.py
BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py
BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py
BaseTools/Source/Python/Pkcs7Sign/Pkcs7Sign.py
BaseTools/Source/Python/Rsa2048Sha256Sign/Rsa2048Sha256GenerateKeys.py
BaseTools/Source/Python/Rsa2048Sha256Sign/Rsa2048Sha256Sign.py
BaseTools/Source/Python/Table/TableDataModel.py
BaseTools/Source/Python/Table/TableDec.py
BaseTools/Source/Python/Table/TableDsc.py
BaseTools/Source/Python/Table/TableEotReport.py
BaseTools/Source/Python/Table/TableFdf.py
BaseTools/Source/Python/Table/TableFile.py
BaseTools/Source/Python/Table/TableFunction.py
BaseTools/Source/Python/Table/TableIdentifier.py
BaseTools/Source/Python/Table/TableInf.py
BaseTools/Source/Python/Table/TablePcd.py
BaseTools/Source/Python/Table/TableQuery.py
BaseTools/Source/Python/Table/TableReport.py
BaseTools/Source/Python/TargetTool/TargetTool.py
BaseTools/Source/Python/Trim/Trim.py
BaseTools/Source/Python/UPT/Core/FileHook.py
BaseTools/Source/Python/UPT/Core/IpiDb.py
BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py
BaseTools/Source/Python/UPT/Library/CommentGenerating.py
BaseTools/Source/Python/UPT/Library/CommentParsing.py
BaseTools/Source/Python/UPT/Library/ExpressionValidate.py
BaseTools/Source/Python/UPT/Library/Misc.py
BaseTools/Source/Python/UPT/Library/ParserValidate.py
BaseTools/Source/Python/UPT/Library/Parsing.py
BaseTools/Source/Python/UPT/Library/StringUtils.py
BaseTools/Source/Python/UPT/Library/UniClassObject.py
BaseTools/Source/Python/UPT/Logger/StringTable.py
BaseTools/Source/Python/UPT/MkPkg.py
BaseTools/Source/Python/UPT/Parser/DecParser.py
BaseTools/Source/Python/UPT/Parser/DecParserMisc.py
BaseTools/Source/Python/UPT/Parser/InfAsBuiltProcess.py
BaseTools/Source/Python/UPT/Parser/InfParser.py
BaseTools/Source/Python/UPT/Parser/InfSectionParser.py
BaseTools/Source/Python/UPT/PomAdapter/DecPomAlignment.py
BaseTools/Source/Python/UPT/UPT.py
BaseTools/Source/Python/UPT/UnitTest/DecParserTest.py
BaseTools/Source/Python/UPT/UnitTest/InfBinarySectionTest.py
BaseTools/Source/Python/UPT/Xml/IniToXml.py
BaseTools/Source/Python/UPT/Xml/XmlParserMisc.py
BaseTools/Source/Python/Workspace/BuildClassObject.py
BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools/Source/Python/Workspace/InfBuildData.py
BaseTools/Source/Python/Workspace/MetaDataTable.py
BaseTools/Source/Python/Workspace/MetaFileParser.py
BaseTools/Source/Python/Workspace/MetaFileTable.py
BaseTools/Source/Python/Workspace/WorkspaceCommon.py
BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
BaseTools/Source/Python/build/BuildReport.py
BaseTools/Source/Python/build/build.py
BaseTools/Tests/CheckUnicodeSourceFiles.py
BaseTools/Tests/GNUmakefile
BaseTools/Tests/TestTools.py
BaseTools/toolsetup.bat
edksetup.sh

index 0b173eb33c68ecdbc0169c3e054b75a2772349a1..214d88fff1b15a998a523628d97ecbb8d93a2e1a 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a $PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 0b173eb33c68ecdbc0169c3e054b75a2772349a1..214d88fff1b15a998a523628d97ecbb8d93a2e1a 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a $PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 0b173eb33c68ecdbc0169c3e054b75a2772349a1..214d88fff1b15a998a523628d97ecbb8d93a2e1a 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a $PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 0b173eb33c68ecdbc0169c3e054b75a2772349a1..214d88fff1b15a998a523628d97ecbb8d93a2e1a 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a $PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 736ff12f14aedac476a18d5a69b8d8d077fa6014..7cac4f7c4fff29fbb4981a25c4492d38317a1fca 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a $PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 0b173eb33c68ecdbc0169c3e054b75a2772349a1..214d88fff1b15a998a523628d97ecbb8d93a2e1a 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a $PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 99dcf99657b863a171ad701f17292229a3039cdf..276c7ea20733d78a8ebd1fe1152f6e54b1ffc4ce 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 0032408fa133ace0f4c47b07a66cb4e65be89abb..11429640283c69da29429a10c796cdb2adea8126 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index f1bd62d7bd6da5b4ac9b1e4abf76b0822b68a155..dad174788bc3e8515267b76b272ace08ebbc9de1 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 99dcf99657b863a171ad701f17292229a3039cdf..276c7ea20733d78a8ebd1fe1152f6e54b1ffc4ce 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 76effb6da078ae795b92d73a25ebce8c2fa39cfa..01ae23ddeb4f8845ce89ec4656d12ef43bf6a58b 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 3a1bd4d4e9401b69cd56cf2c85979e4461aeec9f..59a6c8ba431ec1ef634a572a2a3eecc6f9a4e10d 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 76effb6da078ae795b92d73a25ebce8c2fa39cfa..01ae23ddeb4f8845ce89ec4656d12ef43bf6a58b 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 76effb6da078ae795b92d73a25ebce8c2fa39cfa..01ae23ddeb4f8845ce89ec4656d12ef43bf6a58b 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 0d7872d24d952d37b7a76e92c9f5392b33916fd2..1bc1054a3452a196cdfa1d2e18dde0f7250f20a2 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 76effb6da078ae795b92d73a25ebce8c2fa39cfa..01ae23ddeb4f8845ce89ec4656d12ef43bf6a58b 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 76effb6da078ae795b92d73a25ebce8c2fa39cfa..01ae23ddeb4f8845ce89ec4656d12ef43bf6a58b 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index f36bd69d26fd648758f8c2bcc6ab00793257eca4..6c8dde5bec3eae83e0762f8f36eeb3ab279e86df 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 76effb6da078ae795b92d73a25ebce8c2fa39cfa..01ae23ddeb4f8845ce89ec4656d12ef43bf6a58b 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 76effb6da078ae795b92d73a25ebce8c2fa39cfa..01ae23ddeb4f8845ce89ec4656d12ef43bf6a58b 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a PYTHON3 command is available, use it in preference to python
-if command -v $PYTHON3 >/dev/null 2>&1; then
-    python_exe=$PYTHON3
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
 fi
 
 full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
index 8e2211e3c1f4840e151f231cf01f5b8418692ef3..98095cfbd4390c89f17ce74d486951933f2e8dc4 100644 (file)
@@ -1,4 +1,4 @@
 @setlocal\r
 @set ToolName=%~n0%\r
 @set PYTHONPATH=%PYTHONPATH%;%BASE_TOOLS_PATH%\Source\Python\r
-@%PYTHON3% -m %ToolName%.%ToolName% %*\r
+@%PYTHON_HOME%\python.exe -m %ToolName%.%ToolName% %*\r
index 151d9e730d5d5f34349f6df30582e163cb318ce0..8705e7541e62fd24dba5c3e718700163fdf2fe06 100644 (file)
@@ -1,4 +1,4 @@
 @setlocal\r
 @set ToolName=%~n0%\r
 @set PYTHONPATH=%PYTHONPATH%;%BASE_TOOLS_PATH%\Source\Python\r
-@%PYTHON3% -m %ToolName%.EccMain %*\r
+@%PYTHON_HOME%\python.exe -m %ToolName%.EccMain %*\r
index e8e5753ce3942616dfe6099393033bd4963162a2..ffc783d2bebf1930b1f194d68f7e87a98488a20d 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\AutoGen\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\AutoGen\%ToolName%.py %*\r
index 8e2211e3c1f4840e151f231cf01f5b8418692ef3..98095cfbd4390c89f17ce74d486951933f2e8dc4 100644 (file)
@@ -1,4 +1,4 @@
 @setlocal\r
 @set ToolName=%~n0%\r
 @set PYTHONPATH=%PYTHONPATH%;%BASE_TOOLS_PATH%\Source\Python\r
-@%PYTHON3% -m %ToolName%.%ToolName% %*\r
+@%PYTHON_HOME%\python.exe -m %ToolName%.%ToolName% %*\r
index 160347c7008ad637e7ce65edf33c277e1d1c1c62..9fbb704a6eb00baca50f39f0cc3fa6b9d30525f3 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
index a498b1efc540306e797282725903086b6416be42..ca442d181b8d7bc3aeb6c87c7dc2dc62bab9beb1 100644 (file)
@@ -1 +1 @@
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\Capsule\GenerateCapsule.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\Capsule\GenerateCapsule.py %*\r
index 160347c7008ad637e7ce65edf33c277e1d1c1c62..9fbb704a6eb00baca50f39f0cc3fa6b9d30525f3 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
index 160347c7008ad637e7ce65edf33c277e1d1c1c62..9fbb704a6eb00baca50f39f0cc3fa6b9d30525f3 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
index c3323a742d526e05d1563d1c77b5eb2f689a2e17..df9336567cb56cbc8434397af1b941b3641248d3 100644 (file)
@@ -1 +1 @@
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\Rsa2048Sha256Sign\Rsa2048Sha256GenerateKeys.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\Rsa2048Sha256Sign\Rsa2048Sha256GenerateKeys.py %*\r
index 160347c7008ad637e7ce65edf33c277e1d1c1c62..9fbb704a6eb00baca50f39f0cc3fa6b9d30525f3 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
index 160347c7008ad637e7ce65edf33c277e1d1c1c62..9fbb704a6eb00baca50f39f0cc3fa6b9d30525f3 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
index 160347c7008ad637e7ce65edf33c277e1d1c1c62..9fbb704a6eb00baca50f39f0cc3fa6b9d30525f3 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
index 160347c7008ad637e7ce65edf33c277e1d1c1c62..9fbb704a6eb00baca50f39f0cc3fa6b9d30525f3 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
index 160347c7008ad637e7ce65edf33c277e1d1c1c62..9fbb704a6eb00baca50f39f0cc3fa6b9d30525f3 100644 (file)
@@ -1,3 +1,3 @@
 @setlocal\r
 @set ToolName=%~n0%\r
-@%PYTHON3% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
+@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*\r
index 316f725bd9f21eb1e909856c8c30507aed5c2095..b98cd85cb7264ef23bc8bb715be221f00978d241 100644 (file)
 !ERROR "BASE_TOOLS_PATH is not set! Please run toolsetup.bat first!"\r
 !ENDIF\r
 \r
-SUBDIRS = $(BASE_TOOLS_PATH)\Source\C\r
+SUBDIRS = $(BASE_TOOLS_PATH)\Source\C $(BASE_TOOLS_PATH)\Source\Python\r
 \r
-all: c\r
+all: c python\r
 \r
 c :\r
-  @$(PYTHON3) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $(BASE_TOOLS_PATH)\Source\C\r
+  @$(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $(BASE_TOOLS_PATH)\Source\C\r
 \r
 python:\r
-  @$(PYTHON3) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $(BASE_TOOLS_PATH)\Source\Python\r
+  @$(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $(BASE_TOOLS_PATH)\Source\Python\r
 \r
 subdirs: $(SUBDIRS)\r
-  @$(PYTHON3) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $**\r
+  @$(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $**\r
 \r
 .PHONY: clean\r
 clean:\r
-  $(PYTHON3) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py clean $(SUBDIRS)\r
+  $(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py clean $(SUBDIRS)\r
 \r
 .PHONY: cleanall\r
 cleanall:\r
-  $(PYTHON3) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  cleanall $(SUBDIRS)\r
+  $(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  cleanall $(SUBDIRS)\r
 \r
index f8f81e35ab2df1f0f6f58716e1bc3b3cd3f21d5b..dfc2892c41503deeec7542ff4ca7a6b4d0bbad9e 100644 (file)
@@ -1,6 +1,6 @@
 Prerequisite Tools:\r
-1. Install Python 3.6.6 from https://www.python.org/downloads/release/python-366/\r
-2. Install wxPython 4.0.3 from https://pypi.org/project/wxPython/#files\r
+1. Install Python 2.7.3 from https://www.python.org/download/releases/2.7.3/\r
+2. Install wxPython 2.8.12.1 from https://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/\r
    generally the libraries will be installed at python's subfolder, for example in windows: c:\python27\Lib\site-packages\\r
 3. Install DoxyGen 1.8.6 from https://sourceforge.net/projects/doxygen/files/rel-1.8.6/\r
 4. (Windows only) Install Htmlhelp tool from https://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx\r
index 94c004902f23f3a3cf1cb390f716cc2e8106314c..4deeee01a5e87ecb1e10b09e91c27efa9fae9216 100644 (file)
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import print_function\r
 import os, sys, logging, traceback, subprocess\r
 from optparse import OptionParser\r
 \r
-from .plugins.EdkPlugins.edk2.model import baseobject\r
-from .plugins.EdkPlugins.edk2.model import doxygengen\r
+import plugins.EdkPlugins.edk2.model.baseobject as baseobject\r
+import plugins.EdkPlugins.edk2.model.doxygengen as doxygengen\r
 \r
 gArchMarcoDict = {'ALL'      : 'MDE_CPU_IA32 MDE_CPU_X64 MDE_CPU_EBC MDE_CPU_IPF _MSC_EXTENSIONS __GNUC__ __INTEL_COMPILER',\r
                   'IA32_MSFT': 'MDE_CPU_IA32 _MSC_EXTENSIONS',\r
@@ -37,7 +38,7 @@ def parseCmdArgs():
                       help='Specify the absolute path of doxygen tools installation. For example: C:\\Program Files\\doxygen\bin\doxygen.exe')\r
     parser.add_option('-o', '--output', action='store', dest='OutputPath',\r
                       help='Specify the document output path. For example: c:\\docoutput')\r
-    parser.add_option('-a', '--arch', action='store', dest='Arch', choices=list(gArchMarcoDict.keys()),\r
+    parser.add_option('-a', '--arch', action='store', dest='Arch', choices=gArchMarcoDict.keys(),\r
                       help='Specify the architecture used in preprocess package\'s source. For example: -a IA32_MSFT')\r
     parser.add_option('-m', '--mode', action='store', dest='DocumentMode', choices=['CHM', 'HTML'],\r
                       help='Specify the document mode from : CHM or HTML')\r
index f81ecfdc4cda849b485ebea2ce1bf14abeb7e7c2..28f6f9bf5cceaf941ee0feb46a187349c48e7e9b 100644 (file)
@@ -18,8 +18,8 @@ import os, sys, wx, logging
 import wx.stc\r
 import wx.lib.newevent\r
 import wx.lib.agw.genericmessagedialog as GMD\r
-from plugins.EdkPlugins.edk2.model import baseobject\r
-from plugins.EdkPlugins.edk2.model import doxygengen\r
+import plugins.EdkPlugins.edk2.model.baseobject as baseobject\r
+import plugins.EdkPlugins.edk2.model.doxygengen as doxygengen\r
 \r
 if hasattr(sys, "frozen"):\r
     appPath = os.path.abspath(os.path.dirname(sys.executable))\r
@@ -42,7 +42,7 @@ class PackageDocApp(wx.App):
 \r
         frame.Show(True)\r
 \r
-        self.Bind(EVT_APP_CALLBACK, self.OnAppCallBack)\r
+        EVT_APP_CALLBACK( self, self.OnAppCallBack)\r
         return True\r
 \r
     def GetLogger(self):\r
@@ -60,13 +60,13 @@ class PackageDocApp(wx.App):
 \r
 class PackageDocMainFrame(wx.Frame):\r
     def __init__(self, parent, title):\r
-        wx.Frame.__init__(self, parent, -1, title, size=(550, 350), style=wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.CAPTION|wx.CLOSE_BOX )\r
+        wx.Frame.__init__(self, parent, -1, title, size=(550, 290), style=wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.CAPTION|wx.CLOSE_BOX )\r
 \r
         panel = wx.Panel(self)\r
         sizer = wx.BoxSizer(wx.VERTICAL)\r
 \r
         subsizer = wx.GridBagSizer(5, 10)\r
-        subsizer.AddGrowableCol(0)\r
+        subsizer.AddGrowableCol(1)\r
         subsizer.Add(wx.StaticText(panel, -1, "Workspace Location : "), (0, 0), flag=wx.ALIGN_CENTER_VERTICAL)\r
         self._workspacePathCtrl = wx.ComboBox(panel, -1)\r
         list = self.GetConfigure("WorkspacePath")\r
@@ -76,9 +76,9 @@ class PackageDocMainFrame(wx.Frame):
             self._workspacePathCtrl.SetValue(list[len(list) - 1])\r
 \r
         subsizer.Add(self._workspacePathCtrl, (0, 1), flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)\r
-        self._workspacePathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN))\r
+        self._workspacePathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))\r
         subsizer.Add(self._workspacePathBt, (0, 2), flag=wx.ALIGN_CENTER_VERTICAL)\r
-        self.Bind(wx.EVT_BUTTON, self.OnBrowsePath, self._workspacePathBt)\r
+        wx.EVT_BUTTON(self._workspacePathBt, self._workspacePathBt.GetId(), self.OnBrowsePath)\r
 \r
         subsizer.Add(wx.StaticText(panel, -1, "Package DEC Location : "), (1, 0), flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)\r
         self._packagePathCtrl = wx.ComboBox(panel, -1)\r
@@ -88,9 +88,9 @@ class PackageDocMainFrame(wx.Frame):
                 self._packagePathCtrl.Append(item)\r
             self._packagePathCtrl.SetValue(list[len(list) - 1])\r
         subsizer.Add(self._packagePathCtrl, (1, 1), flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)\r
-        self._packagePathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN))\r
+        self._packagePathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))\r
         subsizer.Add(self._packagePathBt, (1, 2), flag=wx.ALIGN_CENTER_VERTICAL)\r
-        self.Bind(wx.EVT_BUTTON, self.OnBrowsePath, self._packagePathBt)\r
+        wx.EVT_BUTTON(self._packagePathBt, self._packagePathBt.GetId(), self.OnBrowsePath)\r
 \r
         subsizer.Add(wx.StaticText(panel, -1, "Doxygen Tool Location : "), (2, 0), flag=wx.ALIGN_CENTER_VERTICAL)\r
         self._doxygenPathCtrl = wx.TextCtrl(panel, -1)\r
@@ -103,10 +103,10 @@ class PackageDocMainFrame(wx.Frame):
             else:\r
                 self._doxygenPathCtrl.SetValue('/usr/bin/doxygen')\r
 \r
-        self._doxygenPathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN))\r
+        self._doxygenPathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))\r
         subsizer.Add(self._doxygenPathCtrl, (2, 1), flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)\r
         subsizer.Add(self._doxygenPathBt, (2, 2), flag=wx.ALIGN_CENTER_VERTICAL)\r
-        self.Bind(wx.EVT_BUTTON, self.OnBrowsePath, self._doxygenPathBt)\r
+        wx.EVT_BUTTON(self._doxygenPathBt, self._doxygenPathBt.GetId(), self.OnBrowsePath)\r
 \r
         subsizer.Add(wx.StaticText(panel, -1, "CHM Tool Location : "), (3, 0), flag=wx.ALIGN_CENTER_VERTICAL)\r
         self._chmPathCtrl = wx.TextCtrl(panel, -1)\r
@@ -116,10 +116,10 @@ class PackageDocMainFrame(wx.Frame):
         else:\r
             self._chmPathCtrl.SetValue('C:\\Program Files\\HTML Help Workshop\\hhc.exe')\r
 \r
-        self._chmPathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN))\r
+        self._chmPathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))\r
         subsizer.Add(self._chmPathCtrl, (3, 1), flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)\r
         subsizer.Add(self._chmPathBt, (3, 2), flag=wx.ALIGN_CENTER_VERTICAL)\r
-        self.Bind(wx.EVT_BUTTON, self.OnBrowsePath, self._chmPathBt)\r
+        wx.EVT_BUTTON(self._chmPathBt, self._chmPathBt.GetId(), self.OnBrowsePath)\r
 \r
         subsizer.Add(wx.StaticText(panel, -1, "Output Location : "), (4, 0), flag=wx.ALIGN_CENTER_VERTICAL)\r
         self._outputPathCtrl = wx.ComboBox(panel, -1)\r
@@ -130,9 +130,9 @@ class PackageDocMainFrame(wx.Frame):
             self._outputPathCtrl.SetValue(list[len(list) - 1])\r
 \r
         subsizer.Add(self._outputPathCtrl, (4, 1), flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)\r
-        self._outputPathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN))\r
+        self._outputPathBt = wx.BitmapButton(panel, -1, bitmap=wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))\r
         subsizer.Add(self._outputPathBt, (4, 2), flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)\r
-        self.Bind(wx.EVT_BUTTON, self.OnBrowsePath, self._outputPathBt)\r
+        wx.EVT_BUTTON(self._outputPathBt, self._outputPathBt.GetId(), self.OnBrowsePath)\r
 \r
         subsizer.Add(wx.StaticText(panel, -1, "Architecture Specified : "), (5, 0), flag=wx.ALIGN_CENTER_VERTICAL)\r
         self._archCtrl = wx.ComboBox(panel, -1, value='ALL', choices=['ALL', 'IA32/MSFT', 'IA32/GNU', 'X64/INTEL', 'X64/GNU', 'IPF/MSFT', 'IPF/GNU', 'EBC/INTEL'],\r
@@ -164,7 +164,7 @@ class PackageDocMainFrame(wx.Frame):
     def SaveConfigure(self, name, value):\r
         if value ==None or len(value) == 0:\r
             return\r
-        config = wx.ConfigBase.Get()\r
+        config = wx.ConfigBase_Get()\r
         oldvalues = config.Read(name, '').split(';')\r
         if len(oldvalues) >= 10:\r
             oldvalues.remove(oldvalues[0])\r
@@ -177,7 +177,7 @@ class PackageDocMainFrame(wx.Frame):
         config.Write(name, ';'.join(oldvalues))\r
 \r
     def GetConfigure(self, name):\r
-        config = wx.ConfigBase.Get()\r
+        config = wx.ConfigBase_Get()\r
         values = config.Read(name, '').split(';')\r
         list = []\r
         for item in values:\r
@@ -416,10 +416,10 @@ class ProgressDialog(wx.Dialog):
         logging.getLogger('').addHandler(self._loghandle)\r
         logging.getLogger('app').addHandler(self._loghandle)\r
 \r
-        self.Bind(wx.EVT_BUTTON, self.OnButtonClose, self._closeBt)\r
-        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateCloseButton)\r
-        self.Bind(wx.EVT_BUTTON, self.OnGotoOutput, self._gotoOuputBt)\r
-        self.Bind(EVT_LOG, self.OnPostLog)\r
+        wx.EVT_BUTTON(self._closeBt, self._closeBt.GetId(), self.OnButtonClose)\r
+        wx.EVT_UPDATE_UI(self, self._closeBt.GetId(), self.OnUpdateCloseButton)\r
+        wx.EVT_BUTTON(self._gotoOuputBt, self._gotoOuputBt.GetId(), self.OnGotoOutput)\r
+        EVT_LOG(self, self.OnPostLog)\r
 \r
         self._process     = None\r
         self._pid         = None\r
@@ -720,7 +720,7 @@ class ProgressDialog(wx.Dialog):
             lines = f.readlines()\r
             f.close()\r
             bfound = False\r
-            for index in range(len(lines)):\r
+            for index in xrange(len(lines)):\r
                 if lines[index].find('<a class="el" href="files.html" target="basefrm">File List</a>') != -1:\r
                     lines[index] = "<!-- %s" % lines[index]\r
                     bfound = True\r
@@ -745,7 +745,7 @@ class ProgressDialog(wx.Dialog):
             lines = f.readlines()\r
             f.close()\r
             bfound = False\r
-            for index in range(len(lines)):\r
+            for index in xrange(len(lines)):\r
                 if not bfound:\r
                     if lines[index].find('<param name="Local" value="files.html">') != -1:\r
                         lines[index] = '<!-- %s' % lines[index]\r
@@ -969,7 +969,7 @@ class ProgressDialog(wx.Dialog):
             fd = open(path, 'r')\r
             text = fd.read()\r
             fd.close()\r
-        except Exception as e:\r
+        except Exception, e:\r
             self.LogMessage ("   <<<Fail to open file %s" % path)\r
             return\r
         text = text.replace ('.s.dox', '.s')\r
@@ -982,7 +982,7 @@ class ProgressDialog(wx.Dialog):
             fd = open(path, 'w')\r
             fd.write(text)\r
             fd.close()\r
-        except Exception as e:\r
+        except Exception, e:\r
             self.LogMessage ("    <<<Fail to fixup file %s" % path)\r
             return\r
         self.LogMessage('    >>> Finish to fixup .dox postfix for file %s \n' % path)\r
@@ -993,7 +993,7 @@ class ProgressDialog(wx.Dialog):
             fd = open(path, 'r')\r
             lines = fd.readlines()\r
             fd.close()\r
-        except Exception as e:\r
+        except Exception, e:\r
             self.LogMessage ("   <<<Fail to open file %s" % path)\r
             return\r
         for line in lines:\r
@@ -1004,7 +1004,7 @@ class ProgressDialog(wx.Dialog):
             fd = open(path, 'w')\r
             fd.write("".join(lines))\r
             fd.close()\r
-        except Exception as e:\r
+        except Exception, e:\r
             self.LogMessage ("    <<<Fail to fixup file %s" % path)\r
             return\r
         self.LogMessage('    >>> Finish to fixup .decdoxygen postfix for file %s \n' % path)\r
index 4b3303c658497cf82259e825ded7e30575ef6a77..d1e21135cf052925745df67cf750de0cb6af6d06 100644 (file)
@@ -11,6 +11,8 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 import os\r
 \r
 from .message import *\r
@@ -65,7 +67,7 @@ class Page(BaseDoxygeItem):
 \r
     def AddSection(self, section):\r
         self.mSections.append(section)\r
-        self.mSections.sort(key=lambda x: x.mName.lower())\r
+        self.mSections.sort(cmp=lambda x, y: cmp(x.mName.lower(), y.mName.lower()))\r
 \r
     def Generate(self):\r
         if self.mIsMainPage:\r
@@ -78,7 +80,7 @@ class Page(BaseDoxygeItem):
             self.mText.append(self.mDescription)\r
         endIndex = len(self.mText)\r
 \r
-        self.mSections.sort(key=lambda x: x.mName.lower())\r
+        self.mSections.sort()\r
         for sect in self.mSections:\r
             self.mText += sect.Generate()\r
 \r
@@ -90,7 +92,7 @@ class Page(BaseDoxygeItem):
             self.mText.insert(endIndex, '<ul>')\r
             endIndex += 1\r
             if self.mIsSort:\r
-                self.mSubPages.sort(key=lambda x: x.mName.lower())\r
+                self.mSubPages.sort(cmp=lambda x, y: cmp(x.mName.lower(), y.mName.lower()))\r
             for page in self.mSubPages:\r
                 self.mText.insert(endIndex, '<li>\subpage %s \"%s\" </li>' % (page.mTag, page.mName))\r
                 endIndex += 1\r
index d522e33c4a491cea180bf32f9a6cf2632ddf474e..290287b817e775367c7ebc00b1c2a09aee9362d6 100644 (file)
@@ -11,6 +11,7 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import print_function\r
 import array\r
 import uuid\r
 import re\r
index d5299e60bcdbdf8903cb65e0807e066ca615df4d..6e6f3f4b97952d572d145980955b40bcab7a36aa 100644 (file)
@@ -11,6 +11,7 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import absolute_import\r
 from .message import *\r
 import re\r
 import os\r
@@ -24,7 +25,7 @@ class BaseINIFile(object):
         @return: instance of this class\r
 \r
         """\r
-        if len(args) == 0: return object.__new__(cls)\r
+        if len(args) == 0: return object.__new__(cls, *args, **kwargs)\r
         filename = args[0]\r
         parent   = None\r
         if len(args) > 1:\r
@@ -32,7 +33,7 @@ class BaseINIFile(object):
 \r
         key = os.path.normpath(filename)\r
         if key not in cls._objs.keys():\r
-            cls._objs[key] = object.__new__(cls)\r
+            cls._objs[key] = object.__new__(cls, *args, **kwargs)\r
 \r
         if parent is not None:\r
             cls._objs[key].AddParent(parent)\r
index f123f6a915ae94034a51a3de5ec7de491774885f..b49c87c8bdab3353d3ef76ae300b6bcf24856914 100644 (file)
 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-from ...basemodel import ini as ini\r
-from ..model import dsc as dsc\r
-from ..model import inf as inf\r
-from ..model import dec as dec\r
+import plugins.EdkPlugins.basemodel.ini as ini\r
+import plugins.EdkPlugins.edk2.model.dsc as dsc\r
+import plugins.EdkPlugins.edk2.model.inf as inf\r
+import plugins.EdkPlugins.edk2.model.dec as dec\r
 import os\r
-from ...basemodel.message import *\r
+from plugins.EdkPlugins.basemodel.message import *\r
 \r
 class SurfaceObject(object):\r
     _objs = {}\r
@@ -25,7 +25,7 @@ class SurfaceObject(object):
         @return: instance of this class\r
 \r
         """\r
-        obj = object.__new__(cls)\r
+        obj = object.__new__(cls, *args, **kwargs)\r
         if "None" not in cls._objs:\r
             cls._objs["None"] = []\r
         cls._objs["None"].append(obj)\r
@@ -846,7 +846,7 @@ class SurfaceItem(object):
                 ErrorMsg("%s item is duplicated defined in packages: %s and %s" %\r
                          (name, parent.GetFilename(), cls._objs[name].GetParent().GetFilename()))\r
                 return None\r
-            obj = object.__new__(cls)\r
+            obj = object.__new__(cls, *args, **kwargs)\r
             cls._objs[name] = obj\r
             return obj\r
         elif issubclass(parent.__class__, Module):\r
index 3d210f72ac74a0555d2bc9670020fd81fef8239f..9ff0df3851543f62f47076371f0aea4d3d24ee9d 100644 (file)
@@ -11,9 +11,9 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
-from ...basemodel import ini\r
+import plugins.EdkPlugins.basemodel.ini as ini\r
 import re, os\r
-from ...basemodel.message import *\r
+from plugins.EdkPlugins.basemodel.message import *\r
 \r
 class DECFile(ini.BaseINIFile):\r
 \r
index 25b6a613b14be65dbb22d79b44bb4b50667fd6e7..c22d362ff3e12acba99a54c172162c604270d480 100644 (file)
@@ -16,7 +16,7 @@
 """This file produce action class to generate doxygen document for edk2 codebase.\r
    The action classes are shared by GUI and command line tools.\r
 """\r
-from ...basemodel import doxygen\r
+import plugins.EdkPlugins.basemodel.doxygen as doxygen\r
 import os\r
 try:\r
     import wx\r
@@ -24,9 +24,9 @@ try:
 except:\r
     gInGui = False\r
 import re\r
-from ..model import inf\r
-from ..model import dec\r
-from ...basemodel.message import *\r
+import plugins.EdkPlugins.edk2.model.inf as inf\r
+import plugins.EdkPlugins.edk2.model.dec as dec\r
+from plugins.EdkPlugins.basemodel.message import *\r
 \r
 _ignore_dir = ['.svn', '_svn', 'cvs']\r
 _inf_key_description_mapping_table = {\r
@@ -386,7 +386,7 @@ class PackageDocumentAction(DoxygenAction):
         configFile.AddFile(path)\r
 \r
         no = 0\r
-        for no in range(len(lines)):\r
+        for no in xrange(len(lines)):\r
             if len(lines[no].strip()) == 0:\r
                 continue\r
             if lines[no].strip()[:2] in ['##', '//', '/*', '*/']:\r
@@ -1000,7 +1000,7 @@ class PackageDocumentAction(DoxygenAction):
         #file = textfile.TextFile(path)\r
 \r
         try:\r
-            file = open(path, 'r')\r
+            file = open(path, 'rb')\r
         except (IOError, OSError) as msg:\r
             return None\r
 \r
index c9f67f2e40b06864b5bec98d20262af9120162c7..4bae6968a96e9513b4a0f8c966c5ef1fe7fc6160 100644 (file)
@@ -13,7 +13,7 @@
 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-from ...basemodel import doxygen\r
+import plugins.EdkPlugins.basemodel.doxygen as doxygen\r
 import os\r
 try:\r
     import wx\r
@@ -21,9 +21,9 @@ try:
 except:\r
     gInGui = False\r
 import re\r
-from ..model import inf\r
-from ..model import dec\r
-from ...basemodel.message import *\r
+import plugins.EdkPlugins.edk2.model.inf as inf\r
+import plugins.EdkPlugins.edk2.model.dec as dec\r
+from plugins.EdkPlugins.basemodel.message import *\r
 \r
 _ignore_dir = ['.svn', '_svn', 'cvs']\r
 _inf_key_description_mapping_table = {\r
@@ -388,7 +388,7 @@ class PackageDocumentAction(DoxygenAction):
         configFile.AddFile(path)\r
         return\r
         no = 0\r
-        for no in range(len(lines)):\r
+        for no in xrange(len(lines)):\r
             if len(lines[no].strip()) == 0:\r
                 continue\r
             if lines[no].strip()[:2] in ['##', '//', '/*', '*/']:\r
@@ -1003,7 +1003,7 @@ class PackageDocumentAction(DoxygenAction):
         #file = textfile.TextFile(path)\r
 \r
         try:\r
-            file = open(path, 'r')\r
+            file = open(path, 'rb')\r
         except (IOError, OSError) as msg:\r
             return None\r
 \r
index 6f59e566b8f6d12f53cac7a1a07f25829cdb13c8..0628fa7408261f2463f7c84b1cd4bca750314373 100644 (file)
@@ -11,9 +11,9 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
-from ...basemodel import ini\r
+import plugins.EdkPlugins.basemodel.ini as ini\r
 import re, os\r
-from ...basemodel.message import *\r
+from plugins.EdkPlugins.basemodel.message import *\r
 \r
 class DSCFile(ini.BaseINIFile):\r
     def GetSectionInstance(self, parent, name, isCombined=False):\r
index cf2e49d3afebaf6a7d8d460b9f64340076c8ff90..793e95efedcc7167fea997037908a13906af2351 100644 (file)
@@ -11,9 +11,9 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
-from ...basemodel import ini\r
+import plugins.EdkPlugins.basemodel.ini as ini\r
 import re, os\r
-from ...basemodel.message import *\r
+from plugins.EdkPlugins.basemodel.message import *\r
 \r
 class INFFile(ini.BaseINIFile):\r
     _libobjs = {}\r
index ac9adb287dcc599c4bf0ed533ae96f1b0ff4aaf9..1246d23afd3fa9d42df083e45b721ddecd2936c2 100644 (file)
@@ -43,7 +43,7 @@ libs: $(LIBRARIES)
        @echo # Build libraries\r
        @echo ######################\r
        @if not exist $(LIB_PATH) mkdir $(LIB_PATH)\r
-       @$(PYTHON3) Makefiles\NmakeSubdirs.py all $**\r
+       @$(PYTHON_HOME)\python.exe Makefiles\NmakeSubdirs.py all $**\r
 \r
 apps: $(APPLICATIONS)\r
        @echo.\r
@@ -51,7 +51,7 @@ apps: $(APPLICATIONS)
        @echo # Build executables\r
        @echo ######################\r
        @if not exist $(BIN_PATH) mkdir $(BIN_PATH)\r
-       @$(PYTHON3) Makefiles\NmakeSubdirs.py all $**\r
+       @$(PYTHON_HOME)\python.exe Makefiles\NmakeSubdirs.py all $**\r
 \r
 install: $(LIB_PATH) $(BIN_PATH)\r
        @echo.\r
@@ -65,11 +65,11 @@ install: $(LIB_PATH) $(BIN_PATH)
 \r
 .PHONY: clean\r
 clean:\r
-  @$(PYTHON3) Makefiles\NmakeSubdirs.py clean $(LIBRARIES) $(APPLICATIONS)\r
+  @$(PYTHON_HOME)\python.exe Makefiles\NmakeSubdirs.py clean $(LIBRARIES) $(APPLICATIONS)\r
 \r
 .PHONY: cleanall\r
 cleanall:\r
-  @$(PYTHON3) Makefiles\NmakeSubdirs.py cleanall $(LIBRARIES) $(APPLICATIONS)\r
+  @$(PYTHON_HOME)\python.exe Makefiles\NmakeSubdirs.py cleanall $(LIBRARIES) $(APPLICATIONS)\r
 \r
 !INCLUDE Makefiles\ms.rule\r
 \r
diff --git a/BaseTools/Source/C/PyUtility/Makefile b/BaseTools/Source/C/PyUtility/Makefile
new file mode 100644 (file)
index 0000000..5829070
--- /dev/null
@@ -0,0 +1,25 @@
+## @file\r
+# Makefile\r
+#\r
+# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+# This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution.    The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+\r
+!INCLUDE ..\Makefiles\ms.common\r
+\r
+APPNAME = GenSec\r
+\r
+LIBS = $(LIB_PATH)\Common.lib\r
+\r
+OBJECTS = PyUtility.obj\r
+\r
+#CFLAGS = $(CFLAGS) /nodefaultlib:libc.lib\r
+\r
+!INCLUDE ..\Makefiles\ms.app\r
+\r
diff --git a/BaseTools/Source/C/PyUtility/PyUtility.c b/BaseTools/Source/C/PyUtility/PyUtility.c
new file mode 100644 (file)
index 0000000..d14b872
--- /dev/null
@@ -0,0 +1,106 @@
+/** @file\r
+Python Utility\r
+\r
+Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available\r
+under the terms and conditions of the BSD License which accompanies this\r
+distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <Python.h>\r
+#include <Windows.h>\r
+#include <Common/UefiBaseTypes.h>\r
+\r
+/*\r
+ SaveFileToDisk(FilePath, Content)\r
+*/\r
+STATIC\r
+PyObject*\r
+SaveFileToDisk (\r
+  PyObject    *Self,\r
+  PyObject    *Args\r
+  )\r
+{\r
+  CHAR8         *File;\r
+  UINT8         *Data;\r
+  UINTN         DataLength;\r
+  UINTN         WriteBytes;\r
+  UINTN         Status;\r
+  HANDLE        FileHandle;\r
+  PyObject      *ReturnValue = Py_False;\r
+\r
+  Status = PyArg_ParseTuple(\r
+            Args,\r
+            "ss#",\r
+            &File,\r
+            &Data,\r
+            &DataLength\r
+            );\r
+  if (Status == 0) {\r
+    return NULL;\r
+  }\r
+\r
+  FileHandle = CreateFile(\r
+                File,\r
+                GENERIC_WRITE,\r
+                FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_SHARE_DELETE,\r
+                NULL,\r
+                CREATE_ALWAYS,\r
+                FILE_ATTRIBUTE_NORMAL,\r
+                NULL\r
+                );\r
+  if (FileHandle == INVALID_HANDLE_VALUE) {\r
+    PyErr_SetString(PyExc_Exception, "File creation failure");\r
+    return NULL;\r
+  }\r
+\r
+  while (WriteFile(FileHandle, Data, DataLength, &WriteBytes, NULL)) {\r
+    if (DataLength <= WriteBytes) {\r
+      DataLength = 0;\r
+      break;\r
+    }\r
+\r
+    Data += WriteBytes;\r
+    DataLength -= WriteBytes;\r
+  }\r
+\r
+  if (DataLength != 0) {\r
+    // file saved unsuccessfully\r
+    PyErr_SetString(PyExc_Exception, "File write failure");\r
+    goto Done;\r
+  }\r
+\r
+  //\r
+  // Flush buffer may slow down the whole build performance (average 10s slower)\r
+  //\r
+  //if (!FlushFileBuffers(FileHandle)) {\r
+  //  PyErr_SetString(PyExc_Exception, "File flush failure");\r
+  //  goto Done;\r
+  //}\r
+\r
+  // success!\r
+  ReturnValue = Py_True;\r
+\r
+Done:\r
+  CloseHandle(FileHandle);\r
+  return ReturnValue;\r
+}\r
+\r
+STATIC INT8 SaveFileToDiskDocs[] = "SaveFileToDisk(): Make sure the file is saved to disk\n";\r
+\r
+STATIC PyMethodDef PyUtility_Funcs[] = {\r
+  {"SaveFileToDisk", (PyCFunction)SaveFileToDisk, METH_VARARGS, SaveFileToDiskDocs},\r
+  {NULL, NULL, 0, NULL}\r
+};\r
+\r
+PyMODINIT_FUNC\r
+initPyUtility(VOID) {\r
+  Py_InitModule3("PyUtility", PyUtility_Funcs, "Utilties Module Implemented C Language");\r
+}\r
+\r
+\r
diff --git a/BaseTools/Source/C/PyUtility/setup.py b/BaseTools/Source/C/PyUtility/setup.py
new file mode 100644 (file)
index 0000000..e4d407d
--- /dev/null
@@ -0,0 +1,42 @@
+## @file\r
+# package and install PyEfiCompressor extension\r
+#\r
+#  Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>\r
+#\r
+#  This program and the accompanying materials\r
+#  are licensed and made available under the terms and conditions of the BSD License\r
+#  which accompanies this distribution.  The full text of the license may be found at\r
+#  http://opensource.org/licenses/bsd-license.php\r
+#\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+\r
+##\r
+# Import Modules\r
+#\r
+from distutils.core import setup, Extension\r
+import os\r
+\r
+if 'BASE_TOOLS_PATH' not in os.environ:\r
+    raise "Please define BASE_TOOLS_PATH to the root of base tools tree"\r
+\r
+BaseToolsDir = os.environ['BASE_TOOLS_PATH']\r
+setup(\r
+    name="PyUtility",\r
+    version="0.01",\r
+    ext_modules=[\r
+        Extension(\r
+            'PyUtility',\r
+            sources=[\r
+                'PyUtility.c'\r
+                ],\r
+            include_dirs=[\r
+                os.path.join(BaseToolsDir, 'Source', 'C', 'Include'),\r
+                os.path.join(BaseToolsDir, 'Source', 'C', 'Include', 'Ia32'),\r
+                os.path.join(BaseToolsDir, 'Source', 'C', 'Common')\r
+                ],\r
+            )\r
+        ],\r
+  )\r
+\r
index b88d7da2ed2f8ec459de82569b46e9ba51a5c078..9a548fae1e13eaacdad99f97c0de43a844976564 100644 (file)
@@ -17,7 +17,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 \r
 #include "Compress.h"\r
-#include "Decompress.h"\r
 #include "TianoCompress.h"\r
 #include "EfiUtilityMsgs.h"\r
 #include "ParseInf.h"\r
@@ -66,7 +65,6 @@ static BOOLEAN QuietMode = FALSE;
 //\r
 STATIC BOOLEAN ENCODE = FALSE;\r
 STATIC BOOLEAN DECODE = FALSE;\r
-STATIC BOOLEAN UEFIMODE = FALSE;\r
 STATIC UINT8  *mSrc, *mDst, *mSrcUpperLimit, *mDstUpperLimit;\r
 STATIC UINT8  *mLevel, *mText, *mChildCount, *mBuf, mCLen[NC], mPTLen[NPT], *mLen;\r
 STATIC INT16  mHeap[NC + 1];\r
@@ -1705,8 +1703,6 @@ Returns:
   // Details Option\r
   //\r
   fprintf (stdout, "Options:\n");\r
-  fprintf (stdout, "  --uefi\n\\r
-            Enable UefiCompress, use TianoCompress when without this option\n");\r
   fprintf (stdout, "  -o FileName, --output FileName\n\\r
             File will be created to store the ouput content.\n");\r
   fprintf (stdout, "  -v, --verbose\n\\r
@@ -1826,13 +1822,6 @@ Returns:
       continue;\r
     }\r
 \r
-    if (stricmp(argv[0], "--uefi") == 0) {\r
-      UEFIMODE = TRUE;\r
-      argc--;\r
-      argv++;\r
-      continue;\r
-    }\r
-\r
     if (stricmp (argv[0], "--debug") == 0) {\r
       argc-=2;\r
       argv++;\r
@@ -1950,11 +1939,7 @@ Returns:
   if (DebugMode) {\r
     DebugMsg(UTILITY_NAME, 0, DebugLevel, "Encoding", NULL);\r
   }\r
-  if (UEFIMODE) {\r
-    Status = EfiCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
-  } else {\r
-    Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
-  }\r
+  Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
 \r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
     OutBuffer = (UINT8 *) malloc (DstSize);\r
@@ -1964,11 +1949,7 @@ Returns:
     }\r
   }\r
 \r
-  if (UEFIMODE) {\r
-    Status = EfiCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
-  } else {\r
-    Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
-  }\r
+  Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
   if (Status != EFI_SUCCESS) {\r
     Error (NULL, 0, 0007, "Error compressing file", NULL);\r
     goto ERROR;\r
@@ -1998,46 +1979,32 @@ Returns:
   if (DebugMode) {\r
     DebugMsg(UTILITY_NAME, 0, DebugLevel, "Decoding\n", NULL);\r
   }\r
+  //\r
+  // Get Compressed file original size\r
+  //\r
+  Src     = (UINT8 *)FileBuffer;\r
+  OrigSize  = Src[4] + (Src[5] << 8) + (Src[6] << 16) + (Src[7] << 24);\r
 \r
-  if (UEFIMODE) {\r
-    Status = Extract((VOID *)FileBuffer, InputLength, (VOID *)&OutBuffer, &DstSize, 1);\r
-    if (Status != EFI_SUCCESS) {\r
-      goto ERROR;\r
-    }\r
-    fwrite(OutBuffer, (size_t)(DstSize), 1, OutputFile);\r
-  } else {\r
-    //\r
-    // Get Compressed file original size\r
-    //\r
-    Src     = (UINT8 *)FileBuffer;\r
-    OrigSize  = Src[4] + (Src[5] << 8) + (Src[6] << 16) + (Src[7] << 24);\r
-\r
-    //\r
-    // Allocate OutputBuffer\r
-    //\r
-    OutBuffer = (UINT8 *)malloc(OrigSize);\r
-    if (OutBuffer == NULL) {\r
-      Error (NULL, 0, 4001, "Resource:", "Memory cannot be allocated!");\r
-      goto ERROR;\r
-     }\r
+  //\r
+  // Allocate OutputBuffer\r
+  //\r
+  OutBuffer = (UINT8 *)malloc(OrigSize);\r
+  if (OutBuffer == NULL) {\r
+    Error (NULL, 0, 4001, "Resource:", "Memory cannot be allocated!");\r
+    goto ERROR;\r
+   }\r
 \r
-    Status = TDecompress((VOID *)FileBuffer, (VOID *)OutBuffer, (VOID *)Scratch, 2);\r
-    if (Status != EFI_SUCCESS) {\r
-      goto ERROR;\r
-    }\r
-    fwrite(OutBuffer, (size_t)(Scratch->mOrigSize), 1, OutputFile);\r
+  Status = Decompress((VOID *)FileBuffer, (VOID *)OutBuffer, (VOID *)Scratch, 2);\r
+  if (Status != EFI_SUCCESS) {\r
+   goto ERROR;\r
   }\r
+\r
+  fwrite(OutBuffer, (size_t)(Scratch->mOrigSize), 1, OutputFile);\r
   fclose(OutputFile);\r
   fclose(InputFile);\r
-  if (Scratch != NULL) {\r
-    free(Scratch);\r
-  }\r
-  if (FileBuffer != NULL) {\r
-    free(FileBuffer);\r
-  }\r
-  if (OutBuffer != NULL) {\r
-    free(OutBuffer);\r
-  }\r
+  free(Scratch);\r
+  free(FileBuffer);\r
+  free(OutBuffer);\r
 \r
   if (DebugMode) {\r
     DebugMsg(UTILITY_NAME, 0, DebugLevel, "Encoding successful!\n", NULL);\r
@@ -2667,7 +2634,7 @@ Done:
 \r
 RETURN_STATUS\r
 EFIAPI\r
-TDecompress (\r
+Decompress (\r
   IN VOID  *Source,\r
   IN OUT VOID    *Destination,\r
   IN OUT VOID    *Scratch,\r
index 1297982e273628f59892ef30de4783baccaaf2b7..d75c00d26fd92bd39c2479c2cf460f79974e4dbc 100644 (file)
@@ -427,7 +427,7 @@ Decode (
 \r
 RETURN_STATUS\r
 EFIAPI\r
-TDecompress (\r
+Decompress (\r
   IN VOID  *Source,\r
   IN OUT VOID    *Destination,\r
   IN OUT VOID    *Scratch,\r
index c8309d5ed3a698fc435841507bf275c8d9188477..7c0bb47f777577a3c134f1b88844127274a0dceb 100644 (file)
@@ -15,6 +15,8 @@
 \r
 ## Import Modules\r
 #\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 import re\r
 import os.path as path\r
@@ -198,11 +200,11 @@ class AutoGen(object):
             # if it exists, just return it directly\r
             return cls.__ObjectCache[Key]\r
             # it didnt exist. create it, cache it, then return it\r
-        RetVal = cls.__ObjectCache[Key] = super().__new__(cls)\r
+        RetVal = cls.__ObjectCache[Key] = super(AutoGen, cls).__new__(cls)\r
         return RetVal\r
 \r
     def __init__ (self, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs):\r
-        super().__init__()\r
+        super(AutoGen, self).__init__(self, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
 \r
     ## hash() operator\r
     #\r
@@ -235,7 +237,7 @@ class WorkspaceAutoGen(AutoGen):
     # call super().__init__ then call the worker function with different parameter count\r
     def __init__(self, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs):\r
         if not hasattr(self, "_Init"):\r
-            super().__init__(Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
+            super(WorkspaceAutoGen, self).__init__(Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
             self._InitWorker(Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
             self._Init = True\r
 \r
@@ -295,7 +297,7 @@ class WorkspaceAutoGen(AutoGen):
             SkippedArchList = set(self.ArchList).symmetric_difference(set(self.Platform.SupArchList))\r
             EdkLogger.verbose("\nArch [%s] is ignored because the platform supports [%s] only!"\r
                               % (" ".join(SkippedArchList), " ".join(self.Platform.SupArchList)))\r
-        self.ArchList = tuple(sorted(ArchList))\r
+        self.ArchList = tuple(ArchList)\r
 \r
         # Validate build target\r
         if self.BuildTarget not in self.Platform.BuildTargets:\r
@@ -518,7 +520,7 @@ class WorkspaceAutoGen(AutoGen):
             for BuildData in PGen.BuildDatabase._CACHE_.values():\r
                 if BuildData.Arch != Arch:\r
                     continue\r
-                for key in list(BuildData.Pcds.keys()):\r
+                for key in BuildData.Pcds:\r
                     for SinglePcd in GlobalData.MixedPcd:\r
                         if (BuildData.Pcds[key].TokenCName, BuildData.Pcds[key].TokenSpaceGuidCName) == SinglePcd:\r
                             for item in GlobalData.MixedPcd[SinglePcd]:\r
@@ -616,17 +618,17 @@ class WorkspaceAutoGen(AutoGen):
         #\r
         content = 'gCommandLineDefines: '\r
         content += str(GlobalData.gCommandLineDefines)\r
-        content += "\n"\r
+        content += os.linesep\r
         content += 'BuildOptionPcd: '\r
         content += str(GlobalData.BuildOptionPcd)\r
-        content += "\n"\r
+        content += os.linesep\r
         content += 'Active Platform: '\r
         content += str(self.Platform)\r
-        content += "\n"\r
+        content += os.linesep\r
         if self.FdfFile:\r
             content += 'Flash Image Definition: '\r
             content += str(self.FdfFile)\r
-            content += "\n"\r
+            content += os.linesep\r
         SaveFileOnChange(os.path.join(self.BuildDir, 'BuildOptions'), content, False)\r
 \r
         #\r
@@ -636,7 +638,7 @@ class WorkspaceAutoGen(AutoGen):
         if Pa.PcdTokenNumber:\r
             if Pa.DynamicPcdList:\r
                 for Pcd in Pa.DynamicPcdList:\r
-                    PcdTokenNumber += "\n"\r
+                    PcdTokenNumber += os.linesep\r
                     PcdTokenNumber += str((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))\r
                     PcdTokenNumber += ' : '\r
                     PcdTokenNumber += str(Pa.PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName])\r
@@ -661,7 +663,7 @@ class WorkspaceAutoGen(AutoGen):
             for files in AllWorkSpaceMetaFiles:\r
                 if files.endswith('.dec'):\r
                     continue\r
-                f = open(files, 'rb')\r
+                f = open(files, 'r')\r
                 Content = f.read()\r
                 f.close()\r
                 m.update(Content)\r
@@ -677,7 +679,7 @@ class WorkspaceAutoGen(AutoGen):
         if not os.path.exists(self.BuildDir):\r
             os.makedirs(self.BuildDir)\r
         with open(os.path.join(self.BuildDir, 'AutoGen'), 'w+') as file:\r
-            for f in sorted(AllWorkSpaceMetaFiles):\r
+            for f in AllWorkSpaceMetaFiles:\r
                 print(f, file=file)\r
         return True\r
 \r
@@ -690,7 +692,7 @@ class WorkspaceAutoGen(AutoGen):
         HashFile = os.path.join(PkgDir, Pkg.PackageName + '.hash')\r
         m = hashlib.md5()\r
         # Get .dec file's hash value\r
-        f = open(Pkg.MetaFile.Path, 'rb')\r
+        f = open(Pkg.MetaFile.Path, 'r')\r
         Content = f.read()\r
         f.close()\r
         m.update(Content)\r
@@ -700,7 +702,7 @@ class WorkspaceAutoGen(AutoGen):
                 for Root, Dirs, Files in os.walk(str(inc)):\r
                     for File in sorted(Files):\r
                         File_Path = os.path.join(Root, File)\r
-                        f = open(File_Path, 'rb')\r
+                        f = open(File_Path, 'r')\r
                         Content = f.read()\r
                         f.close()\r
                         m.update(Content)\r
@@ -864,7 +866,7 @@ class WorkspaceAutoGen(AutoGen):
     def _CheckAllPcdsTokenValueConflict(self):\r
         for Pa in self.AutoGenObjectList:\r
             for Package in Pa.PackageList:\r
-                PcdList = list(Package.Pcds.values())\r
+                PcdList = Package.Pcds.values()\r
                 PcdList.sort(key=lambda x: int(x.TokenValue, 0))\r
                 Count = 0\r
                 while (Count < len(PcdList) - 1) :\r
@@ -910,7 +912,7 @@ class WorkspaceAutoGen(AutoGen):
                         Count += SameTokenValuePcdListCount\r
                     Count += 1\r
 \r
-                PcdList = list(Package.Pcds.values())\r
+                PcdList = Package.Pcds.values()\r
                 PcdList.sort(key=lambda x: "%s.%s" % (x.TokenSpaceGuidCName, x.TokenCName))\r
                 Count = 0\r
                 while (Count < len(PcdList) - 1) :\r
@@ -973,7 +975,7 @@ class PlatformAutoGen(AutoGen):
     # call super().__init__ then call the worker function with different parameter count\r
     def __init__(self, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs):\r
         if not hasattr(self, "_Init"):\r
-            super().__init__(self, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
+            super(PlatformAutoGen, self).__init__(self, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
             self._InitWorker(Workspace, MetaFile, Target, Toolchain, Arch)\r
             self._Init = True\r
     #\r
@@ -1179,7 +1181,7 @@ class PlatformAutoGen(AutoGen):
                 if os.path.exists(VpdMapFilePath):\r
                     OrgVpdFile.Read(VpdMapFilePath)\r
                     PcdItems = OrgVpdFile.GetOffset(PcdNvStoreDfBuffer[0])\r
-                    NvStoreOffset = list(PcdItems.values())[0].strip() if PcdItems else '0'\r
+                    NvStoreOffset = PcdItems.values()[0].strip() if PcdItems else '0'\r
                 else:\r
                     EdkLogger.error("build", FILE_READ_FAILURE, "Can not find VPD map file %s to fix up VPD offset." % VpdMapFilePath)\r
 \r
@@ -1229,7 +1231,7 @@ class PlatformAutoGen(AutoGen):
             FdfModuleList.append(os.path.normpath(InfName))\r
         for M in self._MaList:\r
 #            F is the Module for which M is the module autogen\r
-            for PcdFromModule in list(M.ModulePcdList) + list(M.LibraryPcdList):\r
+            for PcdFromModule in M.ModulePcdList + M.LibraryPcdList:\r
                 # make sure that the "VOID*" kind of datum has MaxDatumSize set\r
                 if PcdFromModule.DatumType == TAB_VOID and not PcdFromModule.MaxDatumSize:\r
                     NoDatumTypePcdList.add("%s.%s [%s]" % (PcdFromModule.TokenSpaceGuidCName, PcdFromModule.TokenCName, M.MetaFile))\r
@@ -1378,7 +1380,7 @@ class PlatformAutoGen(AutoGen):
         if (self.Workspace.ArchList[-1] == self.Arch):\r
             for Pcd in self._DynamicPcdList:\r
                 # just pick the a value to determine whether is unicode string type\r
-                Sku = list(Pcd.SkuInfoList.values())[0]\r
+                Sku = Pcd.SkuInfoList.values()[0]\r
                 Sku.VpdOffset = Sku.VpdOffset.strip()\r
 \r
                 if Pcd.DatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, TAB_VOID, "BOOLEAN"]:\r
@@ -1477,7 +1479,7 @@ class PlatformAutoGen(AutoGen):
                         if not FoundFlag :\r
                             # just pick the a value to determine whether is unicode string type\r
                             SkuValueMap = {}\r
-                            SkuObjList = list(DscPcdEntry.SkuInfoList.items())\r
+                            SkuObjList = DscPcdEntry.SkuInfoList.items()\r
                             DefaultSku = DscPcdEntry.SkuInfoList.get(TAB_DEFAULT)\r
                             if DefaultSku:\r
                                 defaultindex = SkuObjList.index((TAB_DEFAULT, DefaultSku))\r
@@ -1503,7 +1505,7 @@ class PlatformAutoGen(AutoGen):
                                             DscPcdEntry.TokenSpaceGuidValue = eachDec.Guids[DecPcdEntry.TokenSpaceGuidCName]\r
                                             # Only fix the value while no value provided in DSC file.\r
                                             if not Sku.DefaultValue:\r
-                                                DscPcdEntry.SkuInfoList[list(DscPcdEntry.SkuInfoList.keys())[0]].DefaultValue = DecPcdEntry.DefaultValue\r
+                                                DscPcdEntry.SkuInfoList[DscPcdEntry.SkuInfoList.keys()[0]].DefaultValue = DecPcdEntry.DefaultValue\r
 \r
                                 if DscPcdEntry not in self._DynamicPcdList:\r
                                     self._DynamicPcdList.append(DscPcdEntry)\r
@@ -1579,7 +1581,7 @@ class PlatformAutoGen(AutoGen):
             # Delete the DynamicPcdList At the last time enter into this function\r
             for Pcd in self._DynamicPcdList:\r
                 # just pick the a value to determine whether is unicode string type\r
-                Sku = list(Pcd.SkuInfoList.values())[0]\r
+                Sku = Pcd.SkuInfoList.values()[0]\r
                 Sku.VpdOffset = Sku.VpdOffset.strip()\r
 \r
                 if Pcd.DatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, TAB_VOID, "BOOLEAN"]:\r
@@ -1598,14 +1600,11 @@ class PlatformAutoGen(AutoGen):
         self._DynamicPcdList.extend(list(UnicodePcdArray))\r
         self._DynamicPcdList.extend(list(HiiPcdArray))\r
         self._DynamicPcdList.extend(list(OtherPcdArray))\r
-        #python3.6 set is not ordered at all\r
-        self._DynamicPcdList = sorted(self._DynamicPcdList, key=lambda x:(x.TokenSpaceGuidCName, x.TokenCName))\r
-        self._NonDynamicPcdList = sorted(self._NonDynamicPcdList, key=lambda x: (x.TokenSpaceGuidCName, x.TokenCName))\r
         allskuset = [(SkuName, Sku.SkuId) for pcd in self._DynamicPcdList for (SkuName, Sku) in pcd.SkuInfoList.items()]\r
         for pcd in self._DynamicPcdList:\r
             if len(pcd.SkuInfoList) == 1:\r
                 for (SkuName, SkuId) in allskuset:\r
-                    if isinstance(SkuId, str) and eval(SkuId) == 0 or SkuId == 0:\r
+                    if type(SkuId) in (str, unicode) and eval(SkuId) == 0 or SkuId == 0:\r
                         continue\r
                     pcd.SkuInfoList[SkuName] = copy.deepcopy(pcd.SkuInfoList[TAB_DEFAULT])\r
                     pcd.SkuInfoList[SkuName].SkuId = SkuId\r
@@ -2147,7 +2146,7 @@ class PlatformAutoGen(AutoGen):
                     Pcd.MaxDatumSize = str(len(Value.split(',')))\r
                 else:\r
                     Pcd.MaxDatumSize = str(len(Value) - 1)\r
-        return list(Pcds.values())\r
+        return Pcds.values()\r
 \r
     ## Resolve library names to library modules\r
     #\r
@@ -2251,7 +2250,7 @@ class PlatformAutoGen(AutoGen):
         # Use the highest priority value.\r
         #\r
         if (len(OverrideList) >= 2):\r
-            KeyList = list(OverrideList.keys())\r
+            KeyList = OverrideList.keys()\r
             for Index in range(len(KeyList)):\r
                 NowKey = KeyList[Index]\r
                 Target1, ToolChain1, Arch1, CommandType1, Attr1 = NowKey.split("_")\r
@@ -2373,11 +2372,11 @@ class PlatformAutoGen(AutoGen):
                     if Attr == TAB_TOD_DEFINES_BUILDRULEORDER:\r
                         BuildRuleOrder = Options[Tool][Attr]\r
 \r
-        AllTools = set(list(ModuleOptions.keys()) + list(PlatformOptions.keys()) +\r
-                       list(PlatformModuleOptions.keys()) + list(ModuleTypeOptions.keys()) +\r
-                       list(self.ToolDefinition.keys()))\r
+        AllTools = set(ModuleOptions.keys() + PlatformOptions.keys() +\r
+                       PlatformModuleOptions.keys() + ModuleTypeOptions.keys() +\r
+                       self.ToolDefinition.keys())\r
         BuildOptions = defaultdict(lambda: defaultdict(str))\r
-        for Tool in sorted(AllTools):\r
+        for Tool in AllTools:\r
             for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, ModuleTypeOptions, PlatformModuleOptions]:\r
                 if Tool not in Options:\r
                     continue\r
@@ -2428,7 +2427,7 @@ class ModuleAutoGen(AutoGen):
     # call super().__init__ then call the worker function with different parameter count\r
     def __init__(self, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs):\r
         if not hasattr(self, "_Init"):\r
-            super().__init__(Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
+            super(ModuleAutoGen, self).__init__(Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
             self._InitWorker(Workspace, MetaFile, Target, Toolchain, Arch, *args)\r
             self._Init = True\r
 \r
@@ -2442,7 +2441,7 @@ class ModuleAutoGen(AutoGen):
             EdkLogger.verbose("Module [%s] for [%s] is not employed by active platform\n" \\r
                               % (MetaFile, Arch))\r
             return None\r
-        return super().__new__(cls, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
+        return super(ModuleAutoGen, cls).__new__(cls, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs)\r
 \r
     ## Initialize ModuleAutoGen\r
     #\r
@@ -3159,12 +3158,12 @@ class ModuleAutoGen(AutoGen):
     @cached_property\r
     def IntroTargetList(self):\r
         self.Targets\r
-        return sorted(self._IntroBuildTargetList, key=lambda x: str(x.Target))\r
+        return self._IntroBuildTargetList\r
 \r
     @cached_property\r
     def CodaTargetList(self):\r
         self.Targets\r
-        return sorted(self._FinalBuildTargetList, key=lambda x: str(x.Target))\r
+        return self._FinalBuildTargetList\r
 \r
     @cached_property\r
     def FileTypes(self):\r
@@ -3210,7 +3209,7 @@ class ModuleAutoGen(AutoGen):
             AutoFile = PathClass(gAutoGenStringFileName % {"module_name":self.Name}, self.DebugDir)\r
             RetVal[AutoFile] = str(StringH)\r
             self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE)\r
-        if UniStringBinBuffer is not None and UniStringBinBuffer.getvalue() != b"":\r
+        if UniStringBinBuffer is not None and UniStringBinBuffer.getvalue() != "":\r
             AutoFile = PathClass(gAutoGenStringFormFileName % {"module_name":self.Name}, self.OutputDir)\r
             RetVal[AutoFile] = UniStringBinBuffer.getvalue()\r
             AutoFile.IsBinary = True\r
@@ -3221,7 +3220,7 @@ class ModuleAutoGen(AutoGen):
             AutoFile = PathClass(gAutoGenImageDefFileName % {"module_name":self.Name}, self.DebugDir)\r
             RetVal[AutoFile] = str(StringIdf)\r
             self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE)\r
-        if IdfGenBinBuffer is not None and IdfGenBinBuffer.getvalue() != b"":\r
+        if IdfGenBinBuffer is not None and IdfGenBinBuffer.getvalue() != "":\r
             AutoFile = PathClass(gAutoGenIdfFileName % {"module_name":self.Name}, self.OutputDir)\r
             RetVal[AutoFile] = IdfGenBinBuffer.getvalue()\r
             AutoFile.IsBinary = True\r
@@ -3439,7 +3438,7 @@ class ModuleAutoGen(AutoGen):
             return None\r
         MapFileName = os.path.join(self.OutputDir, self.Name + ".map")\r
         EfiFileName = os.path.join(self.OutputDir, self.Name + ".efi")\r
-        VfrUniOffsetList = GetVariableOffset(MapFileName, EfiFileName, list(VfrUniBaseName.values()))\r
+        VfrUniOffsetList = GetVariableOffset(MapFileName, EfiFileName, VfrUniBaseName.values())\r
         if not VfrUniOffsetList:\r
             return None\r
 \r
@@ -3452,7 +3451,7 @@ class ModuleAutoGen(AutoGen):
             EdkLogger.error("build", FILE_OPEN_FAILURE, "File open failed for %s" % UniVfrOffsetFileName, None)\r
 \r
         # Use a instance of BytesIO to cache data\r
-        fStringIO = BytesIO()\r
+        fStringIO = BytesIO('')\r
 \r
         for Item in VfrUniOffsetList:\r
             if (Item[0].find("Strings") != -1):\r
@@ -3462,7 +3461,8 @@ class ModuleAutoGen(AutoGen):
                 # { 0x8913c5e0, 0x33f6, 0x4d86, { 0x9b, 0xf1, 0x43, 0xef, 0x89, 0xfc, 0x6, 0x66 } }\r
                 #\r
                 UniGuid = [0xe0, 0xc5, 0x13, 0x89, 0xf6, 0x33, 0x86, 0x4d, 0x9b, 0xf1, 0x43, 0xef, 0x89, 0xfc, 0x6, 0x66]\r
-                fStringIO.write(bytes(UniGuid))\r
+                UniGuid = [chr(ItemGuid) for ItemGuid in UniGuid]\r
+                fStringIO.write(''.join(UniGuid))\r
                 UniValue = pack ('Q', int (Item[1], 16))\r
                 fStringIO.write (UniValue)\r
             else:\r
@@ -3472,7 +3472,8 @@ class ModuleAutoGen(AutoGen):
                 # { 0xd0bc7cb4, 0x6a47, 0x495f, { 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2 } };\r
                 #\r
                 VfrGuid = [0xb4, 0x7c, 0xbc, 0xd0, 0x47, 0x6a, 0x5f, 0x49, 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2]\r
-                fStringIO.write(bytes(VfrGuid))\r
+                VfrGuid = [chr(ItemGuid) for ItemGuid in VfrGuid]\r
+                fStringIO.write(''.join(VfrGuid))\r
                 VfrValue = pack ('Q', int (Item[1], 16))\r
                 fStringIO.write (VfrValue)\r
         #\r
@@ -3524,7 +3525,7 @@ class ModuleAutoGen(AutoGen):
         Packages = []\r
         PcdCheckList = []\r
         PcdTokenSpaceList = []\r
-        for Pcd in list(self.ModulePcdList) + list(self.LibraryPcdList):\r
+        for Pcd in self.ModulePcdList + self.LibraryPcdList:\r
             if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:\r
                 PatchablePcds.append(Pcd)\r
                 PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, TAB_PCDS_PATCHABLE_IN_MODULE))\r
@@ -3636,10 +3637,6 @@ class ModuleAutoGen(AutoGen):
                 AsBuiltInfDict['binary_item'].append('PE32|' + self.Name + '.efi')\r
             else:\r
                 AsBuiltInfDict['binary_item'].append('BIN|' + File)\r
-        if not self.DepexGenerated:\r
-            DepexFile = os.path.join(self.OutputDir, self.Name + '.depex')\r
-            if os.path.exists(DepexFile):\r
-                self.DepexGenerated = True\r
         if self.DepexGenerated:\r
             self.OutputFile.add(self.Name + '.depex')\r
             if self.ModuleType in [SUP_MODULE_PEIM]:\r
@@ -3736,7 +3733,7 @@ class ModuleAutoGen(AutoGen):
                         Padding = '0x00, '\r
                         if Unicode:\r
                             Padding = Padding * 2\r
-                            ArraySize = ArraySize // 2\r
+                            ArraySize = ArraySize / 2\r
                         if ArraySize < (len(PcdValue) + 1):\r
                             if Pcd.MaxSizeUserSet:\r
                                 EdkLogger.error("build", AUTOGEN_ERROR,\r
@@ -3896,7 +3893,7 @@ class ModuleAutoGen(AutoGen):
             if os.path.exists (self.TimeStampPath):\r
                 os.remove (self.TimeStampPath)\r
             with open(self.TimeStampPath, 'w+') as file:\r
-                for f in sorted(FileSet):\r
+                for f in FileSet:\r
                     print(f, file=file)\r
 \r
         # Ignore generating makefile when it is a binary module\r
@@ -4024,29 +4021,29 @@ class ModuleAutoGen(AutoGen):
             GlobalData.gModuleHash[self.Arch] = {}\r
         m = hashlib.md5()\r
         # Add Platform level hash\r
-        m.update(GlobalData.gPlatformHash.encode('utf-8'))\r
+        m.update(GlobalData.gPlatformHash)\r
         # Add Package level hash\r
         if self.DependentPackageList:\r
             for Pkg in sorted(self.DependentPackageList, key=lambda x: x.PackageName):\r
                 if Pkg.PackageName in GlobalData.gPackageHash[self.Arch]:\r
-                    m.update(GlobalData.gPackageHash[self.Arch][Pkg.PackageName].encode('utf-8'))\r
+                    m.update(GlobalData.gPackageHash[self.Arch][Pkg.PackageName])\r
 \r
         # Add Library hash\r
         if self.LibraryAutoGenList:\r
             for Lib in sorted(self.LibraryAutoGenList, key=lambda x: x.Name):\r
                 if Lib.Name not in GlobalData.gModuleHash[self.Arch]:\r
                     Lib.GenModuleHash()\r
-                m.update(GlobalData.gModuleHash[self.Arch][Lib.Name].encode('utf-8'))\r
+                m.update(GlobalData.gModuleHash[self.Arch][Lib.Name])\r
 \r
         # Add Module self\r
-        f = open(str(self.MetaFile), 'rb')\r
+        f = open(str(self.MetaFile), 'r')\r
         Content = f.read()\r
         f.close()\r
         m.update(Content)\r
         # Add Module's source files\r
         if self.SourceFileList:\r
             for File in sorted(self.SourceFileList, key=lambda x: str(x)):\r
-                f = open(str(File), 'rb')\r
+                f = open(str(File), 'r')\r
                 Content = f.read()\r
                 f.close()\r
                 m.update(Content)\r
index 86a3c09ad50d2b5b0f073a898c7b36b7958028f0..ac7a6687552cde3366a6c2f3fb8b6cafea649666 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
 import Common.LongFilePathOs as os\r
 import re\r
 import copy\r
index 4db5330e51cbd080fd7f2fbdff5b5b6910108d7b..09626d0b96102d9799bab76e6c498969bb3d96d0 100644 (file)
@@ -13,6 +13,7 @@
 \r
 ## Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import string\r
 import collections\r
 import struct\r
@@ -936,7 +937,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
         if Info.IsLibrary:\r
             PcdList = Info.LibraryPcdList\r
         else:\r
-            PcdList = list(Info.ModulePcdList) + list(Info.LibraryPcdList)\r
+            PcdList = Info.ModulePcdList + Info.LibraryPcdList\r
         PcdExCNameTest = 0\r
         for PcdModule in PcdList:\r
             if PcdModule.Type in PCD_DYNAMIC_EX_TYPE_SET and Pcd.TokenCName == PcdModule.TokenCName:\r
@@ -970,7 +971,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
                 AutoGenH.Append('#define %s(Value)  LibPcdSetEx%sS(&%s, %s, (Value))\n' % (SetModeStatusName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName))\r
     elif Pcd.Type in PCD_DYNAMIC_TYPE_SET:\r
         PcdCNameTest = 0\r
-        for PcdModule in list(Info.LibraryPcdList) + list(Info.ModulePcdList):\r
+        for PcdModule in Info.LibraryPcdList + Info.ModulePcdList:\r
             if PcdModule.Type in PCD_DYNAMIC_TYPE_SET and Pcd.TokenCName == PcdModule.TokenCName:\r
                 PcdCNameTest += 1\r
             # get out early once we found > 1...\r
@@ -1011,10 +1012,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
                     Value = Value[:-1]\r
                 ValueNumber = int (Value, 0)\r
             except:\r
-                try:\r
-                    ValueNumber = int(Value.lstrip('0'))\r
-                except:\r
-                    EdkLogger.error("build", AUTOGEN_ERROR,\r
+                EdkLogger.error("build", AUTOGEN_ERROR,\r
                                 "PCD value is not valid dec or hex number for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, TokenCName),\r
                                 ExtraData="[%s]" % str(Info))\r
             if ValueNumber < 0:\r
@@ -1053,7 +1051,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
                     else:\r
                         NewValue = NewValue + str(ord(Value[Index]) % 0x100) + ', '\r
                 if Unicode:\r
-                    ArraySize = ArraySize // 2\r
+                    ArraySize = ArraySize / 2\r
                 Value = NewValue + '0 }'\r
             if ArraySize < ValueSize:\r
                 if Pcd.MaxSizeUserSet:\r
@@ -1063,7 +1061,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
                 else:\r
                     ArraySize = Pcd.GetPcdSize()\r
                     if Unicode:\r
-                        ArraySize = ArraySize // 2\r
+                        ArraySize = ArraySize / 2\r
             Array = '[%d]' % ArraySize\r
         #\r
         # skip casting for fixed at build since it breaks ARM assembly.\r
@@ -1798,7 +1796,7 @@ def CreateIdfFileCode(Info, AutoGenC, StringH, IdfGenCFlag, IdfGenBinBuffer):
                                 TempBuffer += Buffer\r
                             elif File.Ext.upper() == '.JPG':\r
                                 ImageType, = struct.unpack('4s', Buffer[6:10])\r
-                                if ImageType != b'JFIF':\r
+                                if ImageType != 'JFIF':\r
                                     EdkLogger.error("build", FILE_TYPE_MISMATCH, "The file %s is not a standard JPG file." % File.Path)\r
                                 TempBuffer = pack('B', EFI_HII_IIBT_IMAGE_JPEG)\r
                                 TempBuffer += pack('I', len(Buffer))\r
@@ -1898,7 +1896,7 @@ def CreateIdfFileCode(Info, AutoGenC, StringH, IdfGenCFlag, IdfGenBinBuffer):
 \r
 def BmpImageDecoder(File, Buffer, PaletteIndex, TransParent):\r
     ImageType, = struct.unpack('2s', Buffer[0:2])\r
-    if ImageType!= b'BM': # BMP file type is 'BM'\r
+    if ImageType!= 'BM': # BMP file type is 'BM'\r
         EdkLogger.error("build", FILE_TYPE_MISMATCH, "The file %s is not a standard BMP file." % File.Path)\r
     BMP_IMAGE_HEADER = collections.namedtuple('BMP_IMAGE_HEADER', ['bfSize', 'bfReserved1', 'bfReserved2', 'bfOffBits', 'biSize', 'biWidth', 'biHeight', 'biPlanes', 'biBitCount', 'biCompression', 'biSizeImage', 'biXPelsPerMeter', 'biYPelsPerMeter', 'biClrUsed', 'biClrImportant'])\r
     BMP_IMAGE_HEADER_STRUCT = struct.Struct('IHHIIIIHHIIIIII')\r
@@ -1922,7 +1920,7 @@ def BmpImageDecoder(File, Buffer, PaletteIndex, TransParent):
         else:\r
             ImageBuffer = pack('B', EFI_HII_IIBT_IMAGE_1BIT)\r
         ImageBuffer += pack('B', PaletteIndex)\r
-        Width = (BmpHeader.biWidth + 7)//8\r
+        Width = (BmpHeader.biWidth + 7)/8\r
         if BmpHeader.bfOffBits > BMP_IMAGE_HEADER_STRUCT.size + 2:\r
             PaletteBuffer = Buffer[BMP_IMAGE_HEADER_STRUCT.size + 2 : BmpHeader.bfOffBits]\r
     elif BmpHeader.biBitCount == 4:\r
@@ -1931,7 +1929,7 @@ def BmpImageDecoder(File, Buffer, PaletteIndex, TransParent):
         else:\r
             ImageBuffer = pack('B', EFI_HII_IIBT_IMAGE_4BIT)\r
         ImageBuffer += pack('B', PaletteIndex)\r
-        Width = (BmpHeader.biWidth + 1)//2\r
+        Width = (BmpHeader.biWidth + 1)/2\r
         if BmpHeader.bfOffBits > BMP_IMAGE_HEADER_STRUCT.size + 2:\r
             PaletteBuffer = Buffer[BMP_IMAGE_HEADER_STRUCT.size + 2 : BmpHeader.bfOffBits]\r
     elif BmpHeader.biBitCount == 8:\r
@@ -1970,7 +1968,7 @@ def BmpImageDecoder(File, Buffer, PaletteIndex, TransParent):
         for Index in range(0, len(PaletteBuffer)):\r
             if Index % 4 == 3:\r
                 continue\r
-            PaletteTemp += bytes([PaletteBuffer[Index]])\r
+            PaletteTemp += PaletteBuffer[Index]\r
         PaletteBuffer = PaletteTemp[1:]\r
     return ImageBuffer, PaletteBuffer\r
 \r
@@ -2068,7 +2066,7 @@ def CreateCode(Info, AutoGenC, AutoGenH, StringH, UniGenCFlag, UniGenBinBuffer,
             if Guid in Info.Module.GetGuidsUsedByPcd():\r
                 continue\r
             GuidMacros.append('#define %s %s' % (Guid, Info.Module.Guids[Guid]))\r
-        for Guid, Value in list(Info.Module.Protocols.items()) + list(Info.Module.Ppis.items()):\r
+        for Guid, Value in Info.Module.Protocols.items() + Info.Module.Ppis.items():\r
             GuidMacros.append('#define %s %s' % (Guid, Value))\r
         # supports FixedAtBuild and FeaturePcd usage in VFR file\r
         if Info.VfrFileList and Info.ModulePcdList:\r
index 2f6fe06764773788e533cb87d021c5ef81755158..b4377eef17d7e3e3004b8f47fbb143eb0aaea75c 100644 (file)
@@ -13,6 +13,7 @@
 \r
 ## Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 import sys\r
 import string\r
@@ -491,7 +492,7 @@ cleanlib:
             # EdkII modules always use "_ModuleEntryPoint" as entry point\r
             ImageEntryPoint = "_ModuleEntryPoint"\r
 \r
-        for k, v in MyAgo.Module.Defines.items():\r
+        for k, v in MyAgo.Module.Defines.iteritems():\r
             if k not in MyAgo.Macros:\r
                 MyAgo.Macros[k] = v\r
 \r
@@ -503,7 +504,7 @@ cleanlib:
             MyAgo.Macros['IMAGE_ENTRY_POINT'] = ImageEntryPoint\r
 \r
         PCI_COMPRESS_Flag = False\r
-        for k, v in MyAgo.Module.Defines.items():\r
+        for k, v in MyAgo.Module.Defines.iteritems():\r
             if 'PCI_COMPRESS' == k and 'TRUE' == v:\r
                 PCI_COMPRESS_Flag = True\r
 \r
@@ -654,7 +655,7 @@ cleanlib:
             "module_relative_directory" : MyAgo.SourceDir,\r
             "module_dir"                : mws.join (self.Macros["WORKSPACE"], MyAgo.SourceDir),\r
             "package_relative_directory": package_rel_dir,\r
-            "module_extra_defines"      : ["%s = %s" % (k, v) for k, v in MyAgo.Module.Defines.items()],\r
+            "module_extra_defines"      : ["%s = %s" % (k, v) for k, v in MyAgo.Module.Defines.iteritems()],\r
 \r
             "architecture"              : MyAgo.Arch,\r
             "toolchain_tag"             : MyAgo.ToolChain,\r
@@ -668,8 +669,8 @@ cleanlib:
             "separator"                 : Separator,\r
             "module_tool_definitions"   : ToolsDef,\r
 \r
-            "shell_command_code"        : list(self._SHELL_CMD_[self._FileType].keys()),\r
-            "shell_command"             : list(self._SHELL_CMD_[self._FileType].values()),\r
+            "shell_command_code"        : self._SHELL_CMD_[self._FileType].keys(),\r
+            "shell_command"             : self._SHELL_CMD_[self._FileType].values(),\r
 \r
             "module_entry_point"        : ModuleEntryPoint,\r
             "image_entry_point"         : ImageEntryPoint,\r
@@ -917,7 +918,7 @@ cleanlib:
         #\r
         # Extract common files list in the dependency files\r
         #\r
-        for File in sorted(DepSet, key=lambda x: str(x)):\r
+        for File in DepSet:\r
             self.CommonFileDependency.append(self.PlaceMacro(File.Path, self.Macros))\r
 \r
         for File in FileDependencyDict:\r
@@ -926,11 +927,11 @@ cleanlib:
                 continue\r
             NewDepSet = set(FileDependencyDict[File])\r
             NewDepSet -= DepSet\r
-            FileDependencyDict[File] = ["$(COMMON_DEPS)"] + sorted(NewDepSet, key=lambda x: str(x))\r
+            FileDependencyDict[File] = ["$(COMMON_DEPS)"] + list(NewDepSet)\r
 \r
         # Convert target description object to target string in makefile\r
         for Type in self._AutoGenObject.Targets:\r
-            for T in sorted(self._AutoGenObject.Targets[Type], key=lambda x: str(x)):\r
+            for T in self._AutoGenObject.Targets[Type]:\r
                 # Generate related macros if needed\r
                 if T.GenFileListMacro and T.FileListMacro not in self.FileListMacros:\r
                     self.FileListMacros[T.FileListMacro] = []\r
@@ -1031,7 +1032,7 @@ cleanlib:
                 CurrentFileDependencyList = DepDb[F]\r
             else:\r
                 try:\r
-                    Fd = open(F.Path, 'rb')\r
+                    Fd = open(F.Path, 'r')\r
                 except BaseException as X:\r
                     EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=F.Path + "\n\t" + str(X))\r
 \r
@@ -1041,14 +1042,8 @@ cleanlib:
                     continue\r
 \r
                 if FileContent[0] == 0xff or FileContent[0] == 0xfe:\r
-                    FileContent = str(FileContent, encoding="utf-16")\r
-                    IncludedFileList = gIncludePattern.findall(FileContent)\r
-                else:\r
-                    try:\r
-                        FileContent = str(FileContent, encoding="utf-8")\r
-                        IncludedFileList = gIncludePattern.findall(FileContent)\r
-                    except:\r
-                        continue\r
+                    FileContent = unicode(FileContent, "utf-16")\r
+                IncludedFileList = gIncludePattern.findall(FileContent)\r
 \r
                 for Inc in IncludedFileList:\r
                     Inc = Inc.strip()\r
@@ -1097,7 +1092,7 @@ cleanlib:
         DependencySet.update(ForceList)\r
         if File in DependencySet:\r
             DependencySet.remove(File)\r
-        DependencyList = sorted(DependencySet, key=lambda x: str(x))  # remove duplicate ones\r
+        DependencyList = list(DependencySet)  # remove duplicate ones\r
 \r
         return DependencyList\r
 \r
@@ -1274,8 +1269,8 @@ ${BEGIN}\t-@${create_directory_command}\n${END}\
             "separator"                 : Separator,\r
             "module_tool_definitions"   : ToolsDef,\r
 \r
-            "shell_command_code"        : list(self._SHELL_CMD_[self._FileType].keys()),\r
-            "shell_command"             : list(self._SHELL_CMD_[self._FileType].values()),\r
+            "shell_command_code"        : self._SHELL_CMD_[self._FileType].keys(),\r
+            "shell_command"             : self._SHELL_CMD_[self._FileType].values(),\r
 \r
             "create_directory_command"  : self.GetCreateDirectoryCommand(self.IntermediateDirectoryList),\r
             "custom_makefile_content"   : CustomMakefile\r
@@ -1448,8 +1443,8 @@ cleanlib:
 \r
             "toolchain_tag"             : MyAgo.ToolChain,\r
             "build_target"              : MyAgo.BuildTarget,\r
-            "shell_command_code"        : list(self._SHELL_CMD_[self._FileType].keys()),\r
-            "shell_command"             : list(self._SHELL_CMD_[self._FileType].values()),\r
+            "shell_command_code"        : self._SHELL_CMD_[self._FileType].keys(),\r
+            "shell_command"             : self._SHELL_CMD_[self._FileType].values(),\r
             "build_architecture_list"   : MyAgo.Arch,\r
             "architecture"              : MyAgo.Arch,\r
             "separator"                 : Separator,\r
@@ -1584,8 +1579,8 @@ class TopLevelMakefile(BuildFile):
 \r
             "toolchain_tag"             : MyAgo.ToolChain,\r
             "build_target"              : MyAgo.BuildTarget,\r
-            "shell_command_code"        : list(self._SHELL_CMD_[self._FileType].keys()),\r
-            "shell_command"             : list(self._SHELL_CMD_[self._FileType].values()),\r
+            "shell_command_code"        : self._SHELL_CMD_[self._FileType].keys(),\r
+            "shell_command"             : self._SHELL_CMD_[self._FileType].values(),\r
             'arch'                      : list(MyAgo.ArchList),\r
             "build_architecture_list"   : ','.join(MyAgo.ArchList),\r
             "separator"                 : Separator,\r
index 68f92ef0637327d6d47515853d573a9a15a199a9..876fcf1efb8a269c0b3f769355da3a8858c81120 100644 (file)
@@ -10,6 +10,7 @@
 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
+from __future__ import absolute_import\r
 from io import BytesIO\r
 from Common.Misc import *\r
 from Common.StringUtils import StringToArray\r
@@ -257,7 +258,7 @@ class DbItemList:
             # Variable length, need to calculate one by one\r
             #\r
             assert(Index < len(self.RawDataList))\r
-            for ItemIndex in range(Index):\r
+            for ItemIndex in xrange(Index):\r
                 Offset += len(self.RawDataList[ItemIndex])\r
         else:\r
             Offset = self.ItemSize * Index\r
@@ -291,7 +292,7 @@ class DbItemList:
 \r
         PackStr = PACK_CODE_BY_SIZE[self.ItemSize]\r
 \r
-        Buffer = bytearray()\r
+        Buffer = ''\r
         for Datas in self.RawDataList:\r
             if type(Datas) in (list, tuple):\r
                 for Data in Datas:\r
@@ -316,7 +317,7 @@ class DbExMapTblItemList (DbItemList):
         DbItemList.__init__(self, ItemSize, DataList, RawDataList)\r
 \r
     def PackData(self):\r
-        Buffer = bytearray()\r
+        Buffer = ''\r
         PackStr = "=LHH"\r
         for Datas in self.RawDataList:\r
             Buffer += pack(PackStr,\r
@@ -344,7 +345,7 @@ class DbComItemList (DbItemList):
             assert(False)\r
         else:\r
             assert(Index < len(self.RawDataList))\r
-            for ItemIndex in range(Index):\r
+            for ItemIndex in xrange(Index):\r
                 Offset += len(self.RawDataList[ItemIndex]) * self.ItemSize\r
 \r
         return Offset\r
@@ -365,7 +366,7 @@ class DbComItemList (DbItemList):
     def PackData(self):\r
         PackStr = PACK_CODE_BY_SIZE[self.ItemSize]\r
 \r
-        Buffer = bytearray()\r
+        Buffer = ''\r
         for DataList in self.RawDataList:\r
             for Data in DataList:\r
                 if type(Data) in (list, tuple):\r
@@ -386,7 +387,7 @@ class DbVariableTableItemList (DbComItemList):
 \r
     def PackData(self):\r
         PackStr = "=LLHHLHH"\r
-        Buffer = bytearray()\r
+        Buffer = ''\r
         for DataList in self.RawDataList:\r
             for Data in DataList:\r
                 Buffer += pack(PackStr,\r
@@ -410,7 +411,7 @@ class DbStringHeadTableItemList(DbItemList):
             # Variable length, need to calculate one by one\r
             #\r
             assert(Index < len(self.RawDataList))\r
-            for ItemIndex in range(Index):\r
+            for ItemIndex in xrange(Index):\r
                 Offset += len(self.RawDataList[ItemIndex])\r
         else:\r
             for innerIndex in range(Index):\r
@@ -447,7 +448,7 @@ class DbSkuHeadTableItemList (DbItemList):
 \r
     def PackData(self):\r
         PackStr = "=LL"\r
-        Buffer = bytearray()\r
+        Buffer = ''\r
         for Data in self.RawDataList:\r
             Buffer += pack(PackStr,\r
                            GetIntegerValue(Data[0]),\r
@@ -469,7 +470,7 @@ class DbSizeTableItemList (DbItemList):
         return length * self.ItemSize\r
     def PackData(self):\r
         PackStr = "=H"\r
-        Buffer = bytearray()\r
+        Buffer = ''\r
         for Data in self.RawDataList:\r
             Buffer += pack(PackStr,\r
                            GetIntegerValue(Data[0]))\r
@@ -494,14 +495,14 @@ class DbStringItemList (DbComItemList):
         assert(len(RawDataList) == len(LenList))\r
         DataList = []\r
         # adjust DataList according to the LenList\r
-        for Index in range(len(RawDataList)):\r
+        for Index in xrange(len(RawDataList)):\r
             Len = LenList[Index]\r
             RawDatas = RawDataList[Index]\r
             assert(Len >= len(RawDatas))\r
             ActualDatas = []\r
-            for i in range(len(RawDatas)):\r
+            for i in xrange(len(RawDatas)):\r
                 ActualDatas.append(RawDatas[i])\r
-            for i in range(len(RawDatas), Len):\r
+            for i in xrange(len(RawDatas), Len):\r
                 ActualDatas.append(0)\r
             DataList.append(ActualDatas)\r
         self.LenList = LenList\r
@@ -510,7 +511,7 @@ class DbStringItemList (DbComItemList):
         Offset = 0\r
 \r
         assert(Index < len(self.LenList))\r
-        for ItemIndex in range(Index):\r
+        for ItemIndex in xrange(Index):\r
             Offset += self.LenList[ItemIndex]\r
 \r
         return Offset\r
@@ -611,7 +612,7 @@ def BuildExDataBase(Dict):
     DbVardefValueUint32 = DbItemList(4, RawDataList = VardefValueUint32)\r
     VpdHeadValue = Dict['VPD_DB_VALUE']\r
     DbVpdHeadValue = DbComItemList(4, RawDataList = VpdHeadValue)\r
-    ExMapTable = list(zip(Dict['EXMAPPING_TABLE_EXTOKEN'], Dict['EXMAPPING_TABLE_LOCAL_TOKEN'], Dict['EXMAPPING_TABLE_GUID_INDEX']))\r
+    ExMapTable = zip(Dict['EXMAPPING_TABLE_EXTOKEN'], Dict['EXMAPPING_TABLE_LOCAL_TOKEN'], Dict['EXMAPPING_TABLE_GUID_INDEX'])\r
     DbExMapTable = DbExMapTblItemList(8, RawDataList = ExMapTable)\r
     LocalTokenNumberTable = Dict['LOCAL_TOKEN_NUMBER_DB_VALUE']\r
     DbLocalTokenNumberTable = DbItemList(4, RawDataList = LocalTokenNumberTable)\r
@@ -645,7 +646,7 @@ def BuildExDataBase(Dict):
     PcdNameOffsetTable = Dict['PCD_NAME_OFFSET']\r
     DbPcdNameOffsetTable = DbItemList(4, RawDataList = PcdNameOffsetTable)\r
 \r
-    SizeTableValue = list(zip(Dict['SIZE_TABLE_MAXIMUM_LENGTH'], Dict['SIZE_TABLE_CURRENT_LENGTH']))\r
+    SizeTableValue = zip(Dict['SIZE_TABLE_MAXIMUM_LENGTH'], Dict['SIZE_TABLE_CURRENT_LENGTH'])\r
     DbSizeTableValue = DbSizeTableItemList(2, RawDataList = SizeTableValue)\r
     InitValueUint16 = Dict['INIT_DB_VALUE_UINT16']\r
     DbInitValueUint16 = DbComItemList(2, RawDataList = InitValueUint16)\r
@@ -698,7 +699,7 @@ def BuildExDataBase(Dict):
 \r
     # Get offset of SkuId table in the database\r
     SkuIdTableOffset = FixedHeaderLen\r
-    for DbIndex in range(len(DbTotal)):\r
+    for DbIndex in xrange(len(DbTotal)):\r
         if DbTotal[DbIndex] is SkuidValue:\r
             break\r
         SkuIdTableOffset += DbItemTotal[DbIndex].GetListSize()\r
@@ -710,7 +711,7 @@ def BuildExDataBase(Dict):
     for (LocalTokenNumberTableIndex, (Offset, Table)) in enumerate(LocalTokenNumberTable):\r
         DbIndex = 0\r
         DbOffset = FixedHeaderLen\r
-        for DbIndex in range(len(DbTotal)):\r
+        for DbIndex in xrange(len(DbTotal)):\r
             if DbTotal[DbIndex] is Table:\r
                 DbOffset += DbItemTotal[DbIndex].GetInterOffset(Offset)\r
                 break\r
@@ -736,7 +737,7 @@ def BuildExDataBase(Dict):
             (VariableHeadGuidIndex, VariableHeadStringIndex, SKUVariableOffset, VariableOffset, VariableRefTable, VariableAttribute) = VariableEntryPerSku[:]\r
             DbIndex = 0\r
             DbOffset = FixedHeaderLen\r
-            for DbIndex in range(len(DbTotal)):\r
+            for DbIndex in xrange(len(DbTotal)):\r
                 if DbTotal[DbIndex] is VariableRefTable:\r
                     DbOffset += DbItemTotal[DbIndex].GetInterOffset(VariableOffset)\r
                     break\r
@@ -756,7 +757,7 @@ def BuildExDataBase(Dict):
 \r
     # calculate various table offset now\r
     DbTotalLength = FixedHeaderLen\r
-    for DbIndex in range(len(DbItemTotal)):\r
+    for DbIndex in xrange(len(DbItemTotal)):\r
         if DbItemTotal[DbIndex] is DbLocalTokenNumberTable:\r
             LocalTokenNumberTableOffset = DbTotalLength\r
         elif DbItemTotal[DbIndex] is DbExMapTable:\r
@@ -849,7 +850,7 @@ def BuildExDataBase(Dict):
     Index = 0\r
     for Item in DbItemTotal:\r
         Index +=1\r
-        b = bytes(Item.PackData())\r
+        b = Item.PackData()\r
         Buffer += b\r
         if Index == InitTableNum:\r
             if len(Buffer) % 8:\r
@@ -917,9 +918,9 @@ def CreatePcdDataBase(PcdDBData):
     totallenbuff = pack("=L", totallen)\r
     newbuffer = databasebuff[:32]\r
     for i in range(4):\r
-        newbuffer += bytes([totallenbuff[i]])\r
+        newbuffer += totallenbuff[i]\r
     for i in range(36, totallen):\r
-        newbuffer += bytes([databasebuff[i]])\r
+        newbuffer += databasebuff[i]\r
 \r
     return newbuffer\r
 \r
@@ -962,7 +963,7 @@ def NewCreatePcdDatabasePhaseSpecificAutoGen(Platform, Phase):
             AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer, VarCheckTab = CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdSet_Sku[(skuname, skuid)], Phase)\r
             final_data = ()\r
             for item in PcdDbBuffer:\r
-                final_data += unpack("B", bytes([item]))\r
+                final_data += unpack("B", item)\r
             PcdDBData[(skuname, skuid)] = (PcdDbBuffer, final_data)\r
             PcdDriverAutoGenData[(skuname, skuid)] = (AdditionalAutoGenH, AdditionalAutoGenC)\r
             VarCheckTableData[(skuname, skuid)] = VarCheckTab\r
@@ -975,7 +976,7 @@ def NewCreatePcdDatabasePhaseSpecificAutoGen(Platform, Phase):
         AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer, VarCheckTab = CreatePcdDatabasePhaseSpecificAutoGen (Platform, {}, Phase)\r
         final_data = ()\r
         for item in PcdDbBuffer:\r
-            final_data += unpack("B", bytes([item]))\r
+            final_data += unpack("B", item)\r
         PcdDBData[(TAB_DEFAULT, "0")] = (PcdDbBuffer, final_data)\r
 \r
     return AdditionalAutoGenH, AdditionalAutoGenC, CreatePcdDataBase(PcdDBData)\r
@@ -1348,7 +1349,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
 \r
                 DbValueList.append(Sku.DefaultValue)\r
 \r
-        Pcd.TokenTypeList = sorted(set(Pcd.TokenTypeList))\r
+        Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))\r
         if Pcd.DatumType == TAB_VOID:\r
             Dict['SIZE_TABLE_CNAME'].append(CName)\r
             Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)\r
@@ -1449,7 +1450,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
             Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CNameBinArray.split(","))\r
 \r
 \r
-        Pcd.TokenTypeList = sorted(set(Pcd.TokenTypeList))\r
+        Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))\r
 \r
         # search the Offset and Table, used by LocalTokenNumberTableOffset\r
         if 'PCD_TYPE_HII' in Pcd.TokenTypeList:\r
index d06fbe7e177c9e0e4436d370307ed90a2363eb33..036f00e2bbb104337b5d2642c593c2664a28183b 100644 (file)
@@ -66,7 +66,7 @@ class VariableMgr(object):
                 data = value_list[0]\r
                 value_list = []\r
                 for data_byte in pack(data_flag, int(data, 16) if data.upper().startswith('0X') else int(data)):\r
-                    value_list.append(hex(unpack("B", bytes([data_byte]))[0]))\r
+                    value_list.append(hex(unpack("B", data_byte)[0]))\r
             newvalue[int(item.var_offset, 16) if item.var_offset.upper().startswith("0X") else int(item.var_offset)] = value_list\r
         try:\r
             newvaluestr = "{" + ",".join(VariableMgr.assemble_variable(newvalue)) +"}"\r
@@ -87,13 +87,13 @@ class VariableMgr(object):
                 data = value_list[0]\r
                 value_list = []\r
                 for data_byte in pack(data_flag, int(data, 16) if data.upper().startswith('0X') else int(data)):\r
-                    value_list.append(hex(unpack("B", bytes([data_byte]))[0]))\r
+                    value_list.append(hex(unpack("B", data_byte)[0]))\r
             newvalue[int(item.var_offset, 16) if item.var_offset.upper().startswith("0X") else int(item.var_offset)] = (value_list,item.pcdname,item.PcdDscLine)\r
         for offset in newvalue:\r
             value_list,itemPcdname,itemPcdDscLine = newvalue[offset]\r
             if offset > len(BaseValue) or (offset + len(value_list) > len(BaseValue)):\r
                 EdkLogger.error("build", AUTOGEN_ERROR, "The EFI Variable referred by PCD %s in line %s exceeds variable size: %s\n" % (itemPcdname,itemPcdDscLine,hex(len(BaseValue))))\r
-            for i in range(len(value_list)):\r
+            for i in xrange(len(value_list)):\r
                 BaseValue[offset + i] = value_list[i]\r
         newvaluestr =  "{" + ",".join(BaseValue) +"}"\r
         return newvaluestr\r
@@ -129,7 +129,7 @@ class VariableMgr(object):
         for current_valuedict_key in ordered_valuedict_keys:\r
             if current_valuedict_key < len(var_value):\r
                 raise\r
-            for _ in range(current_valuedict_key - len(var_value)):\r
+            for _ in xrange(current_valuedict_key - len(var_value)):\r
                 var_value.append('0x00')\r
             var_value += valuedict[current_valuedict_key]\r
         return var_value\r
@@ -161,7 +161,7 @@ class VariableMgr(object):
 \r
             default_data_array = ()\r
             for item in default_data_buffer:\r
-                default_data_array += unpack("B", bytes([item]))\r
+                default_data_array += unpack("B", item)\r
 \r
             var_data[(DataType.TAB_DEFAULT, DataType.TAB_DEFAULT_STORES_DEFAULT)][index] = (default_data_buffer, sku_var_info[(DataType.TAB_DEFAULT, DataType.TAB_DEFAULT_STORES_DEFAULT)])\r
 \r
@@ -179,7 +179,7 @@ class VariableMgr(object):
 \r
                 others_data_array = ()\r
                 for item in others_data_buffer:\r
-                    others_data_array += unpack("B", bytes([item]))\r
+                    others_data_array += unpack("B", item)\r
 \r
                 data_delta = VariableMgr.calculate_delta(default_data_array, others_data_array)\r
 \r
@@ -195,7 +195,7 @@ class VariableMgr(object):
             return []\r
 \r
         pcds_default_data = var_data.get((DataType.TAB_DEFAULT, DataType.TAB_DEFAULT_STORES_DEFAULT), {})\r
-        NvStoreDataBuffer = bytearray()\r
+        NvStoreDataBuffer = ""\r
         var_data_offset = collections.OrderedDict()\r
         offset = NvStorageHeaderSize\r
         for default_data, default_info in pcds_default_data.values():\r
@@ -222,7 +222,7 @@ class VariableMgr(object):
 \r
         nv_default_part = VariableMgr.AlignData(VariableMgr.PACK_DEFAULT_DATA(0, 0, VariableMgr.unpack_data(variable_storage_header_buffer+NvStoreDataBuffer)), 8)\r
 \r
-        data_delta_structure_buffer = bytearray()\r
+        data_delta_structure_buffer = ""\r
         for skuname, defaultstore in var_data:\r
             if (skuname, defaultstore) == (DataType.TAB_DEFAULT, DataType.TAB_DEFAULT_STORES_DEFAULT):\r
                 continue\r
@@ -254,7 +254,7 @@ class VariableMgr(object):
     def unpack_data(data):\r
         final_data = ()\r
         for item in data:\r
-            final_data += unpack("B", bytes([item]))\r
+            final_data += unpack("B", item)\r
         return final_data\r
 \r
     @staticmethod\r
@@ -322,7 +322,7 @@ class VariableMgr(object):
 \r
     @staticmethod\r
     def PACK_VARIABLES_DATA(var_value,data_type, tail = None):\r
-        Buffer = bytearray()\r
+        Buffer = ""\r
         data_len = 0\r
         if data_type == DataType.TAB_VOID:\r
             for value_char in var_value.strip("{").strip("}").split(","):\r
@@ -352,7 +352,7 @@ class VariableMgr(object):
 \r
     @staticmethod\r
     def PACK_DEFAULT_DATA(defaultstoragename, skuid, var_value):\r
-        Buffer = bytearray()\r
+        Buffer = ""\r
         Buffer += pack("=L", 4+8+8)\r
         Buffer += pack("=Q", int(skuid))\r
         Buffer += pack("=Q", int(defaultstoragename))\r
@@ -377,7 +377,7 @@ class VariableMgr(object):
     def PACK_DELTA_DATA(self, skuname, defaultstoragename, delta_list):\r
         skuid = self.GetSkuId(skuname)\r
         defaultstorageid = self.GetDefaultStoreId(defaultstoragename)\r
-        Buffer = bytearray()\r
+        Buffer = ""\r
         Buffer += pack("=L", 4+8+8)\r
         Buffer += pack("=Q", int(skuid))\r
         Buffer += pack("=Q", int(defaultstorageid))\r
@@ -400,7 +400,7 @@ class VariableMgr(object):
 \r
     @staticmethod\r
     def PACK_VARIABLE_NAME(var_name):\r
-        Buffer = bytearray()\r
+        Buffer = ""\r
         for name_char in var_name.strip("{").strip("}").split(","):\r
             Buffer += pack("=B", int(name_char, 16))\r
 \r
index f96a16ababe8736447a7ffbdc03d1a0279a3aacf..b227b10258da8b73bcc7414f68e8aee0b5e30a1c 100644 (file)
@@ -13,6 +13,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 from Common.BuildToolError import *\r
 from Common.StringUtils import GetLineNo\r
index 09e9af3fb49e97e365c2c6ef30cdfee6f193b29a..d98508973841ed61ec9562151dd3cc3d2d5983d7 100644 (file)
@@ -34,7 +34,7 @@ class InfSectionParser():
         SectionData = []\r
 \r
         try:\r
-            FileLinesList = open(self._FilePath, "r").readlines()\r
+            FileLinesList = open(self._FilePath, "r", 0).readlines()\r
         except BaseException:\r
             EdkLogger.error("build", AUTOGEN_ERROR, 'File %s is opened failed.' % self._FilePath)\r
 \r
index 73b2d0a3da14079d74b01f35570c24f048936a60..361d499076850042adfd03f6587457a1876700b4 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import re\r
 import Common.EdkLogger as EdkLogger\r
 from Common.BuildToolError import *\r
@@ -122,8 +123,6 @@ def DecToHexList(Dec, Digit = 8):
 # @retval:       A list for formatted hex string\r
 #\r
 def AscToHexList(Ascii):\r
-    if isinstance(Ascii, bytes):\r
-        return ['0x{0:02X}'.format(Item) for Item in Ascii]\r
     return ['0x{0:02X}'.format(ord(Item)) for Item in Ascii]\r
 \r
 ## Create content of .h file\r
@@ -552,9 +551,9 @@ def GetStringFiles(UniFilList, SourceFileList, IncludeList, IncludePathList, Ski
             #\r
             # support ISO 639-2 codes in .UNI files of EDK Shell\r
             #\r
-            Uni = UniFileClassObject(sorted (UniFilList, key=lambda x: x.File), True, IncludePathList)\r
+            Uni = UniFileClassObject(sorted (UniFilList), True, IncludePathList)\r
         else:\r
-            Uni = UniFileClassObject(sorted (UniFilList, key=lambda x: x.File), IsCompatibleMode, IncludePathList)\r
+            Uni = UniFileClassObject(sorted (UniFilList), IsCompatibleMode, IncludePathList)\r
     else:\r
         EdkLogger.error("UnicodeStringGather", AUTOGEN_ERROR, 'No unicode files given')\r
 \r
index 1c86be4429adfc91e7dc820d84e62ee2ed62f31a..384f31b165de08222f36e8f5330549ec7182da7e 100644 (file)
@@ -16,6 +16,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
 import Common.LongFilePathOs as os, codecs, re\r
 import distutils.util\r
 import Common.EdkLogger as EdkLogger\r
@@ -45,6 +46,18 @@ BACK_SLASH_PLACEHOLDER = u'\u0006'
 \r
 gIncludePattern = re.compile("^#include +[\"<]+([^\"< >]+)[>\"]+$", re.MULTILINE | re.UNICODE)\r
 \r
+## Convert a python unicode string to a normal string\r
+#\r
+# Convert a python unicode string to a normal string\r
+# UniToStr(u'I am a string') is 'I am a string'\r
+#\r
+# @param Uni:  The python unicode string\r
+#\r
+# @retval:     The formatted normal string\r
+#\r
+def UniToStr(Uni):\r
+    return repr(Uni)[2:-1]\r
+\r
 ## Convert a unicode string to a Hex list\r
 #\r
 # Convert a unicode string to a Hex list\r
@@ -426,7 +439,7 @@ class UniFileClassObject(object):
                 if EndPos != -1 and EndPos - StartPos == 6 :\r
                     if g4HexChar.match(Line[StartPos + 2 : EndPos], re.UNICODE):\r
                         EndStr = Line[EndPos: ]\r
-                        UniStr = Line[StartPos + 2: EndPos]\r
+                        UniStr = ('\u' + (Line[StartPos + 2 : EndPos])).decode('unicode_escape')\r
                         if EndStr.startswith(u'\\x') and len(EndStr) >= 7:\r
                             if EndStr[6] == u'\\' and g4HexChar.match(EndStr[2 : 6], re.UNICODE):\r
                                 Line = Line[0 : StartPos] + UniStr + EndStr\r
index 77518fc1cc1e107a304b174ad561d4f7ac8f6121..edd40a1498ffd4ffc8c5d6247d087479127c22d1 100644 (file)
@@ -41,7 +41,7 @@ class VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER(object):
             os.mkdir(dest)\r
         BinFileName = "PcdVarCheck.bin"\r
         BinFilePath = os.path.join(dest, BinFileName)\r
-        Buffer = bytearray()\r
+        Buffer = ''\r
         index = 0\r
         for var_check_tab in self.var_check_info:\r
             index += 1\r
@@ -57,7 +57,7 @@ class VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER(object):
                 itemIndex += 1\r
                 realLength += 5\r
                 for v_data in item.data:\r
-                    if isinstance(v_data, int):\r
+                    if type(v_data) in (int, long):\r
                         realLength += item.StorageWidth\r
                     else:\r
                         realLength += item.StorageWidth\r
@@ -137,7 +137,7 @@ class VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER(object):
                 Buffer += b\r
                 realLength += 1\r
                 for v_data in item.data:\r
-                    if isinstance(v_data, int):\r
+                    if type(v_data) in (int, long):\r
                         b = pack(PACK_CODE_BY_SIZE[item.StorageWidth], v_data)\r
                         Buffer += b\r
                         realLength += item.StorageWidth\r
@@ -241,7 +241,7 @@ class VAR_CHECK_PCD_VALID_OBJ(object):
 \r
 class VAR_CHECK_PCD_VALID_LIST(VAR_CHECK_PCD_VALID_OBJ):\r
     def __init__(self, VarOffset, validlist, PcdDataType):\r
-        super().__init__(VarOffset, validlist, PcdDataType)\r
+        super(VAR_CHECK_PCD_VALID_LIST, self).__init__(VarOffset, validlist, PcdDataType)\r
         self.Type = 1\r
         valid_num_list = []\r
         for item in self.rawdata:\r
@@ -261,7 +261,7 @@ class VAR_CHECK_PCD_VALID_LIST(VAR_CHECK_PCD_VALID_OBJ):
 \r
 class VAR_CHECK_PCD_VALID_RANGE(VAR_CHECK_PCD_VALID_OBJ):\r
     def __init__(self, VarOffset, validrange, PcdDataType):\r
-        super().__init__(VarOffset, validrange, PcdDataType)\r
+        super(VAR_CHECK_PCD_VALID_RANGE, self).__init__(VarOffset, validrange, PcdDataType)\r
         self.Type = 2\r
         RangeExpr = ""\r
         i = 0\r
index 15d4261677ef00d56cf808d07218d141011db710..2ec1516c0a08da6b52ae6d0b4aafd91e0d82811d 100644 (file)
@@ -20,6 +20,8 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 import sys\r
 import encodings.ascii\r
index fc47a4b2520f3d05aa437499f75dbee308bc3e49..d7852d29eed09df7b016ab7fadc8aff991973146 100644 (file)
@@ -13,6 +13,7 @@
 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 from io import BytesIO\r
 from . import StringTable as st\r
@@ -185,7 +186,7 @@ class PcdEntry:
             EdkLogger.error("BPDG", BuildToolError.RESOURCE_OVERFLOW,\r
                             "PCD value string %s is exceed to size %d(File: %s Line: %s)" % (ValueString, Size, self.FileName, self.Lineno))\r
         try:\r
-            self.PcdValue = pack('%ds' % Size, bytes(ValueString, 'utf-8'))\r
+            self.PcdValue = pack('%ds' % Size, ValueString)\r
         except:\r
             EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID,\r
                             "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno))\r
@@ -211,7 +212,7 @@ class PcdEntry:
 \r
         ReturnArray = array.array('B')\r
 \r
-        for Index in range(len(ValueList)):\r
+        for Index in xrange(len(ValueList)):\r
             Value = None\r
             if ValueList[Index].lower().startswith('0x'):\r
                 # translate hex value\r
@@ -237,7 +238,7 @@ class PcdEntry:
 \r
             ReturnArray.append(Value)\r
 \r
-        for Index in range(len(ValueList), Size):\r
+        for Index in xrange(len(ValueList), Size):\r
             ReturnArray.append(0)\r
 \r
         self.PcdValue = ReturnArray.tolist()\r
@@ -272,7 +273,7 @@ class PcdEntry:
                                 "Invalid unicode character %s in unicode string %s(File: %s Line: %s)" % \\r
                                 (Value, UnicodeString, self.FileName, self.Lineno))\r
 \r
-        for Index in range(len(UnicodeString) * 2, Size):\r
+        for Index in xrange(len(UnicodeString) * 2, Size):\r
             ReturnArray.append(0)\r
 \r
         self.PcdValue = ReturnArray.tolist()\r
@@ -305,7 +306,7 @@ class GenVPD :
         self.PcdFixedOffsetSizeList  = []\r
         self.PcdUnknownOffsetList    = []\r
         try:\r
-            fInputfile = open(InputFileName, "r")\r
+            fInputfile = open(InputFileName, "r", 0)\r
             try:\r
                 self.FileLinesList = fInputfile.readlines()\r
             except:\r
@@ -430,7 +431,7 @@ class GenVPD :
                             EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, 'The offset value of PCD %s should be %s-byte aligned.' % (PCD.PcdCName, Alignment))\r
                 else:\r
                     if PCD.PcdOccupySize % Alignment != 0:\r
-                        PCD.PcdOccupySize = (PCD.PcdOccupySize // Alignment + 1) * Alignment\r
+                        PCD.PcdOccupySize = (PCD.PcdOccupySize / Alignment + 1) * Alignment\r
 \r
                 PackSize = PCD.PcdOccupySize\r
                 if PCD._IsBoolean(PCD.PcdValue, PCD.PcdSize):\r
@@ -508,7 +509,7 @@ class GenVPD :
             NowOffset = 0\r
             for Pcd in self.PcdUnknownOffsetList :\r
                 if NowOffset % Pcd.Alignment != 0:\r
-                    NowOffset = (NowOffset // Pcd.Alignment + 1) * Pcd.Alignment\r
+                    NowOffset = (NowOffset/ Pcd.Alignment + 1) * Pcd.Alignment\r
                 Pcd.PcdBinOffset = NowOffset\r
                 Pcd.PcdOffset    = str(hex(Pcd.PcdBinOffset))\r
                 NowOffset       += Pcd.PcdOccupySize\r
@@ -572,7 +573,7 @@ class GenVPD :
                         # Not been fixed\r
                         if eachUnfixedPcd.PcdOffset == '*' :\r
                             if LastOffset % eachUnfixedPcd.Alignment != 0:\r
-                                LastOffset = (LastOffset // eachUnfixedPcd.Alignment + 1) * eachUnfixedPcd.Alignment\r
+                                LastOffset = (LastOffset / eachUnfixedPcd.Alignment + 1) * eachUnfixedPcd.Alignment\r
                             # The offset un-fixed pcd can write into this free space\r
                             if needFixPcdSize <= (NowOffset - LastOffset) :\r
                                 # Change the offset value of un-fixed pcd\r
@@ -626,7 +627,7 @@ class GenVPD :
 \r
             NeedFixPcd.PcdBinOffset = LastPcd.PcdBinOffset + LastPcd.PcdOccupySize\r
             if NeedFixPcd.PcdBinOffset % NeedFixPcd.Alignment != 0:\r
-                NeedFixPcd.PcdBinOffset = (NeedFixPcd.PcdBinOffset // NeedFixPcd.Alignment + 1) * NeedFixPcd.Alignment\r
+                NeedFixPcd.PcdBinOffset = (NeedFixPcd.PcdBinOffset / NeedFixPcd.Alignment + 1) * NeedFixPcd.Alignment\r
 \r
             NeedFixPcd.PcdOffset    = str(hex(NeedFixPcd.PcdBinOffset))\r
 \r
@@ -650,13 +651,13 @@ class GenVPD :
             EdkLogger.error("BPDG", BuildToolError.FILE_OPEN_FAILURE, "File open failed for %s" % self.VpdFileName, None)\r
 \r
         try :\r
-            fMapFile = open(MapFileName, "w")\r
+            fMapFile = open(MapFileName, "w", 0)\r
         except:\r
             # Open failed\r
             EdkLogger.error("BPDG", BuildToolError.FILE_OPEN_FAILURE, "File open failed for %s" % self.MapFileName, None)\r
 \r
         # Use a instance of BytesIO to cache data\r
-        fStringIO = BytesIO()\r
+        fStringIO = BytesIO('')\r
 \r
         # Write the header of map file.\r
         try :\r
@@ -674,7 +675,8 @@ class GenVPD :
             # Write Vpd binary file\r
             fStringIO.seek (eachPcd.PcdBinOffset)\r
             if isinstance(eachPcd.PcdValue, list):\r
-                fStringIO.write(bytes(eachPcd.PcdValue))\r
+                ValueList = [chr(Item) for Item in eachPcd.PcdValue]\r
+                fStringIO.write(''.join(ValueList))\r
             else:\r
                 fStringIO.write (eachPcd.PcdValue)\r
 \r
index 0888edf37ad836e970decaab6bad41f970de3780..1c543aeb41b15efeead4a0f023856e97ad175d85 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import sqlite3\r
 import Common.LongFilePathOs as os\r
 \r
index d70b24e6427f3220b83ba13c98f5d54a103f180e..af7707482ccb7d897bb8a7d3b18094196fb45aa3 100644 (file)
@@ -12,6 +12,7 @@
 #\r
 \r
 ## Import modules\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os, sys, logging\r
 import traceback\r
 from  .BuildToolError import *\r
index 5e4e66a10e7ba05c01e379c6a11055ea5a5cc32f..ff9271031b0e3351e441fdd4ff195212e1b64dd2 100644 (file)
@@ -12,6 +12,8 @@
 \r
 ## Import Modules\r
 #\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 from Common.GlobalData import *\r
 from CommonDataClass.Exceptions import BadExpression\r
 from CommonDataClass.Exceptions import WrnExpression\r
@@ -204,7 +206,7 @@ SupportedInMacroList = ['TARGET', 'TOOL_CHAIN_TAG', 'ARCH', 'FAMILY']
 \r
 class BaseExpression(object):\r
     def __init__(self, *args, **kwargs):\r
-        super().__init__()\r
+        super(BaseExpression, self).__init__()\r
 \r
     # Check if current token matches the operators given from parameter\r
     def _IsOperator(self, OpSet):\r
@@ -324,7 +326,7 @@ class ValueExpression(BaseExpression):
         return Val\r
 \r
     def __init__(self, Expression, SymbolTable={}):\r
-        super().__init__(self, Expression, SymbolTable)\r
+        super(ValueExpression, self).__init__(self, Expression, SymbolTable)\r
         self._NoProcess = False\r
         if not isinstance(Expression, type('')):\r
             self._Expr = Expression\r
@@ -425,13 +427,6 @@ class ValueExpression(BaseExpression):
                 else:\r
                     Val = Val3\r
                 continue\r
-            #\r
-            # PEP 238 -- Changing the Division Operator\r
-            # x/y to return a reasonable approximation of the mathematical result of the division ("true division")\r
-            # x//y to return the floor ("floor division")\r
-            #\r
-            if Op == '/':\r
-                Op = '//'\r
             try:\r
                 Val = self.Eval(Op, Val, EvalFunc())\r
             except WrnExpression as Warn:\r
@@ -905,7 +900,7 @@ class ValueExpressionEx(ValueExpression):
                     if TmpValue.bit_length() == 0:\r
                         PcdValue = '{0x00}'\r
                     else:\r
-                        for I in range((TmpValue.bit_length() + 7) // 8):\r
+                        for I in range((TmpValue.bit_length() + 7) / 8):\r
                             TmpList.append('0x%02x' % ((TmpValue >> I * 8) & 0xff))\r
                         PcdValue = '{' + ', '.join(TmpList) + '}'\r
                 except:\r
@@ -1033,7 +1028,7 @@ class ValueExpressionEx(ValueExpression):
 if __name__ == '__main__':\r
     pass\r
     while True:\r
-        input = input('Input expr: ')\r
+        input = raw_input('Input expr: ')\r
         if input in 'qQ':\r
             break\r
         try:\r
index 12796b26826d74f4d25e28730a15b42afd3a10b5..53528546b7822df9dbbc39eb409d69d2b75476a6 100644 (file)
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import absolute_import\r
 import os\r
 from . import LongFilePathOsPath\r
 from Common.LongFilePathSupport import LongFilePath\r
+from Common.LongFilePathSupport import UniToStr\r
 import time\r
 \r
 path = LongFilePathOsPath\r
@@ -62,7 +64,7 @@ def listdir(path):
     List = []\r
     uList = os.listdir(u"%s" % LongFilePath(path))\r
     for Item in uList:\r
-        List.append(Item)\r
+        List.append(UniToStr(Item))\r
     return List\r
 \r
 environ = os.environ\r
index 7eb141053afeaab994593f649a113c562ef87312..b3e3c8ea643f058412e17dbe19f5ff550e6aa668 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # Override built in function file.open to provide support for long file path\r
 #\r
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>\r
 # This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.  The full text of the license may be found at\r
@@ -49,3 +49,15 @@ def CopyLongFilePath(src, dst):
     with open(LongFilePath(src), 'rb') as fsrc:\r
         with open(LongFilePath(dst), 'wb') as fdst:\r
             shutil.copyfileobj(fsrc, fdst)\r
+\r
+## Convert a python unicode string to a normal string\r
+#\r
+# Convert a python unicode string to a normal string\r
+# UniToStr(u'I am a string') is 'I am a string'\r
+#\r
+# @param Uni:  The python unicode string\r
+#\r
+# @retval:     The formatted normal string\r
+#\r
+def UniToStr(Uni):\r
+    return repr(Uni)[2:-1]\r
index 2ac592d26bac82e78fb39cf95f30fc0e9a4e7da2..0efd8b05a87798a093759be5e0d6f251dfcc0cbb 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 import sys\r
 import string\r
@@ -24,8 +25,8 @@ import pickle
 import array\r
 import shutil\r
 from struct import pack\r
-from collections import UserDict as IterableUserDict\r
-from collections import OrderedDict\r
+from UserDict import IterableUserDict\r
+from UserList import UserList\r
 \r
 from Common import EdkLogger as EdkLogger\r
 from Common import GlobalData as GlobalData\r
@@ -454,16 +455,13 @@ def RemoveDirectory(Directory, Recursively=False):
 #   @retval     False           If the file content is the same\r
 #\r
 def SaveFileOnChange(File, Content, IsBinaryFile=True):\r
+    if not IsBinaryFile:\r
+        Content = Content.replace("\n", os.linesep)\r
+\r
     if os.path.exists(File):\r
         try:\r
-            if isinstance(Content, bytes):\r
-                with open(File, "rb") as f:\r
-                    if Content == f.read():\r
-                        return False\r
-            else:\r
-                with open(File, "r") as f:\r
-                    if Content == f.read():\r
-                        return False\r
+            if Content == open(File, "rb").read():\r
+                return False\r
         except:\r
             EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=File)\r
 \r
@@ -477,12 +475,19 @@ def SaveFileOnChange(File, Content, IsBinaryFile=True):
             EdkLogger.error(None, PERMISSION_FAILURE, "Do not have write permission on directory %s" % DirName)\r
 \r
     try:\r
-        if isinstance(Content, bytes):\r
-            with open(File, "wb") as Fd:\r
+        if GlobalData.gIsWindows:\r
+            try:\r
+                from .PyUtility import SaveFileToDisk\r
+                if not SaveFileToDisk(File, Content):\r
+                    EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData=File)\r
+            except:\r
+                Fd = open(File, "wb")\r
                 Fd.write(Content)\r
+                Fd.close()\r
         else:\r
-            with open(File, "w") as Fd:\r
-                Fd.write(Content)\r
+            Fd = open(File, "wb")\r
+            Fd.write(Content)\r
+            Fd.close()\r
     except IOError as X:\r
         EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s' % X)\r
 \r
@@ -641,7 +646,7 @@ def RealPath2(File, Dir='', OverrideDir=''):
 #\r
 def GuidValue(CName, PackageList, Inffile = None):\r
     for P in PackageList:\r
-        GuidKeys = list(P.Guids.keys())\r
+        GuidKeys = P.Guids.keys()\r
         if Inffile and P._PrivateGuids:\r
             if not Inffile.startswith(P.MetaFile.Dir):\r
                 GuidKeys = [x for x in P.Guids if x not in P._PrivateGuids]\r
@@ -660,7 +665,7 @@ def GuidValue(CName, PackageList, Inffile = None):
 #\r
 def ProtocolValue(CName, PackageList, Inffile = None):\r
     for P in PackageList:\r
-        ProtocolKeys = list(P.Protocols.keys())\r
+        ProtocolKeys = P.Protocols.keys()\r
         if Inffile and P._PrivateProtocols:\r
             if not Inffile.startswith(P.MetaFile.Dir):\r
                 ProtocolKeys = [x for x in P.Protocols if x not in P._PrivateProtocols]\r
@@ -679,7 +684,7 @@ def ProtocolValue(CName, PackageList, Inffile = None):
 #\r
 def PpiValue(CName, PackageList, Inffile = None):\r
     for P in PackageList:\r
-        PpiKeys = list(P.Ppis.keys())\r
+        PpiKeys = P.Ppis.keys()\r
         if Inffile and P._PrivatePpis:\r
             if not Inffile.startswith(P.MetaFile.Dir):\r
                 PpiKeys = [x for x in P.Ppis if x not in P._PrivatePpis]\r
@@ -975,7 +980,7 @@ class sdict(IterableUserDict):
 \r
     ## append support\r
     def append(self, sdict):\r
-        for key in sdict.keys():\r
+        for key in sdict:\r
             if key not in self._key_list:\r
                 self._key_list.append(key)\r
             IterableUserDict.__setitem__(self, key, sdict[key])\r
@@ -1015,11 +1020,11 @@ class sdict(IterableUserDict):
 \r
     ## Keys interation support\r
     def iterkeys(self):\r
-        return self.keys()\r
+        return iter(self.keys())\r
 \r
     ## Values interation support\r
     def itervalues(self):\r
-        return self.values()\r
+        return iter(self.values())\r
 \r
     ## Return value related to a key, and remove the (key, value) from the dict\r
     def pop(self, key, *dv):\r
@@ -1028,7 +1033,7 @@ class sdict(IterableUserDict):
             value = self[key]\r
             self.__delitem__(key)\r
         elif len(dv) != 0 :\r
-            value = dv[0]\r
+            value = kv[0]\r
         return value\r
 \r
     ## Return (key, value) pair, and remove the (key, value) from the dict\r
@@ -1292,12 +1297,12 @@ def ParseDevPathValue (Value):
     if err:\r
         raise BadExpression("DevicePath: %s" % str(err))\r
     Size = len(out.split())\r
-    out = ','.join(out.decode(encoding='utf-8', errors='ignore').split())\r
+    out = ','.join(out.split())\r
     return '{' + out + '}', Size\r
 \r
 def ParseFieldValue (Value):\r
     if isinstance(Value, type(0)):\r
-        return Value, (Value.bit_length() + 7) // 8\r
+        return Value, (Value.bit_length() + 7) / 8\r
     if not isinstance(Value, type('')):\r
         raise BadExpression('Type %s is %s' %(Value, type(Value)))\r
     Value = Value.strip()\r
@@ -1331,7 +1336,7 @@ def ParseFieldValue (Value):
         if Value[0] == '"' and Value[-1] == '"':\r
             Value = Value[1:-1]\r
         try:\r
-            Value = "{" + ','.join([str(i) for i in uuid.UUID(Value).bytes_le]) + "}"\r
+            Value = "'" + uuid.UUID(Value).get_bytes_le() + "'"\r
         except ValueError as Message:\r
             raise BadExpression(Message)\r
         Value, Size = ParseFieldValue(Value)\r
@@ -1418,12 +1423,12 @@ def ParseFieldValue (Value):
             raise BadExpression("invalid hex value: %s" % Value)\r
         if Value == 0:\r
             return 0, 1\r
-        return Value, (Value.bit_length() + 7) // 8\r
+        return Value, (Value.bit_length() + 7) / 8\r
     if Value[0].isdigit():\r
         Value = int(Value, 10)\r
         if Value == 0:\r
             return 0, 1\r
-        return Value, (Value.bit_length() + 7) // 8\r
+        return Value, (Value.bit_length() + 7) / 8\r
     if Value.lower() == 'true':\r
         return 1, 1\r
     if Value.lower() == 'false':\r
@@ -1584,19 +1589,15 @@ def CheckPcdDatum(Type, Value):
             return False, "Invalid value [%s] of type [%s]; must be one of TRUE, True, true, 0x1, 0x01, 1"\\r
                           ", FALSE, False, false, 0x0, 0x00, 0" % (Value, Type)\r
     elif Type in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64]:\r
+        if Value and int(Value, 0) < 0:\r
+            return False, "PCD can't be set to negative value[%s] for datum type [%s]" % (Value, Type)\r
         try:\r
-            Val = int(Value, 0)\r
+            Value = long(Value, 0)\r
+            if Value > MAX_VAL_TYPE[Type]:\r
+                return False, "Too large PCD value[%s] for datum type [%s]" % (Value, Type)\r
         except:\r
-            try:\r
-                Val = int(Value.lstrip('0'))\r
-            except:\r
-                return False, "Invalid value [%s] of type [%s];" \\r
-                              " must be a hexadecimal, decimal or octal in C language format." % (Value, Type)\r
-        if Val > MAX_VAL_TYPE[Type]:\r
-            return False, "Too large PCD value[%s] for datum type [%s]" % (Value, Type)\r
-        if Val < 0:\r
-            return False, "PCD can't be set to negative value[%s] for datum type [%s]" % (Value, Type)\r
-\r
+            return False, "Invalid value [%s] of type [%s];"\\r
+                          " must be a hexadecimal, decimal or octal in C language format." % (Value, Type)\r
     else:\r
         return True, "StructurePcd"\r
 \r
@@ -1634,7 +1635,7 @@ def SplitOption(OptionString):
 def CommonPath(PathList):\r
     P1 = min(PathList).split(os.path.sep)\r
     P2 = max(PathList).split(os.path.sep)\r
-    for Index in range(min(len(P1), len(P2))):\r
+    for Index in xrange(min(len(P1), len(P2))):\r
         if P1[Index] != P2[Index]:\r
             return os.path.sep.join(P1[:Index])\r
     return os.path.sep.join(P1)\r
@@ -1859,7 +1860,7 @@ class PeImageClass():
         ByteArray = array.array('B')\r
         ByteArray.fromfile(PeObject, 4)\r
         # PE signature should be 'PE\0\0'\r
-        if ByteArray.tostring() != b'PE\0\0':\r
+        if ByteArray.tostring() != 'PE\0\0':\r
             self.ErrorInfo = self.FileName + ' has no valid PE signature PE00'\r
             return\r
 \r
@@ -1951,7 +1952,7 @@ class SkuClass():
                             ExtraData = "SKU-ID [%s] value %s exceeds the max value of UINT64"\r
                                       % (SkuName, SkuId))\r
 \r
-        self.AvailableSkuIds = OrderedDict()\r
+        self.AvailableSkuIds = sdict()\r
         self.SkuIdSet = []\r
         self.SkuIdNumberSet = []\r
         self.SkuData = SkuIds\r
@@ -1961,7 +1962,7 @@ class SkuClass():
             self.SkuIdSet = ['DEFAULT']\r
             self.SkuIdNumberSet = ['0U']\r
         elif SkuIdentifier == 'ALL':\r
-            self.SkuIdSet = list(SkuIds.keys())\r
+            self.SkuIdSet = SkuIds.keys()\r
             self.SkuIdNumberSet = [num[0].strip() + 'U' for num in SkuIds.values()]\r
         else:\r
             r = SkuIdentifier.split('|')\r
@@ -2081,7 +2082,7 @@ def PackRegistryFormatGuid(Guid):
 #   @retval     Value    The integer value that the input represents\r
 #\r
 def GetIntegerValue(Input):\r
-    if isinstance(Input, int):\r
+    if type(Input) in (int, long):\r
         return Input\r
     String = Input\r
     if String.endswith("U"):\r
index ad90afab800224d1b09862254836a995a137bb13..889251b69935dd779ef5daf73cf64659b9752a22 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from .StringUtils import *\r
 from CommonDataClass.DataClass import *\r
 from .DataType import *\r
diff --git a/BaseTools/Source/Python/Common/PyUtility.pyd b/BaseTools/Source/Python/Common/PyUtility.pyd
new file mode 100644 (file)
index 0000000..856b508
Binary files /dev/null and b/BaseTools/Source/Python/Common/PyUtility.pyd differ
index f6c4dcd66634952491a03386d57a122dfa23e405..407dc06ccf0b598b03a9a25bf6f80114364a13d5 100644 (file)
@@ -12,6 +12,7 @@
 \r
 # # Import Modules\r
 #\r
+from __future__ import print_function\r
 from Common.GlobalData import *\r
 from CommonDataClass.Exceptions import BadExpression\r
 from CommonDataClass.Exceptions import WrnExpression\r
@@ -347,7 +348,7 @@ class RangeExpression(BaseExpression):
 \r
 \r
     def __init__(self, Expression, PcdDataType, SymbolTable = {}):\r
-        super().__init__(self, Expression, PcdDataType, SymbolTable)\r
+        super(RangeExpression, self).__init__(self, Expression, PcdDataType, SymbolTable)\r
         self._NoProcess = False\r
         if not isinstance(Expression, type('')):\r
             self._Expr = Expression\r
index 794f4573fec2e5ea20db0d30f81b27e4466cd9ab..d5afde7a95a5c1ad9edf317fc195dbd387bf03de 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import re\r
 from . import DataType\r
 import Common.LongFilePathOs as os\r
@@ -98,7 +99,7 @@ def GetSplitValueList(String, SplitTag=DataType.TAB_VALUE_SPLIT, MaxSplit= -1):
 # @retval list() A list for splitted string\r
 #\r
 def GetSplitList(String, SplitStr=DataType.TAB_VALUE_SPLIT, MaxSplit= -1):\r
-    return list(map(lambda l: l.strip(), String.split(SplitStr, MaxSplit)))\r
+    return map(lambda l: l.strip(), String.split(SplitStr, MaxSplit))\r
 \r
 ## MergeArches\r
 #\r
@@ -544,7 +545,7 @@ def GetSingleValueOfKeyFromLines(Lines, Dictionary, CommentCharacter, KeySplitCh
                 #\r
                 LineList[1] = CleanString(LineList[1], CommentCharacter)\r
                 if ValueSplitFlag:\r
-                    Value = list(map(string.strip, LineList[1].split(ValueSplitCharacter)))\r
+                    Value = map(string.strip, LineList[1].split(ValueSplitCharacter))\r
                 else:\r
                     Value = CleanString(LineList[1], CommentCharacter).splitlines()\r
 \r
@@ -612,7 +613,7 @@ def PreCheck(FileName, FileContent, SupSectionTag):
         #\r
         # Regenerate FileContent\r
         #\r
-        NewFileContent = NewFileContent + Line + '\n'\r
+        NewFileContent = NewFileContent + Line + '\r\n'\r
 \r
     if IsFailed:\r
        EdkLogger.error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError=EdkLogger.IsRaiseError)\r
@@ -750,7 +751,7 @@ def SplitString(String):
 # @param StringList:  A list for strings to be converted\r
 #\r
 def ConvertToSqlString(StringList):\r
-    return list(map(lambda s: s.replace("'", "''"), StringList))\r
+    return map(lambda s: s.replace("'", "''"), StringList)\r
 \r
 ## Convert To Sql String\r
 #\r
@@ -815,7 +816,11 @@ def GetHelpTextList(HelpTextClassList):
     return List\r
 \r
 def StringToArray(String):\r
-    if String.startswith('L"'):\r
+    if isinstance(String, unicode):\r
+        if len(unicode) == 0:\r
+            return "{0x00,0x00}"\r
+        return "{%s,0x00,0x00}" % ",".join("0x%02x,0x00" % ord(C) for C in String)\r
+    elif String.startswith('L"'):\r
         if String == "L\"\"":\r
             return "{0x00,0x00}"\r
         else:\r
@@ -838,7 +843,9 @@ def StringToArray(String):
             return '{%s,0,0}' % ','.join(String.split())\r
 \r
 def StringArrayLength(String):\r
-    if String.startswith('L"'):\r
+    if isinstance(String, unicode):\r
+        return (len(String) + 1) * 2 + 1;\r
+    elif String.startswith('L"'):\r
         return (len(String) - 3 + 1) * 2\r
     elif String.startswith('"'):\r
         return (len(String) - 2 + 1)\r
index 35b170e086287c68b21e39c62d9e4b45fcdf95a6..55a2f564821e11f6e10c1329e4a866c0ed457289 100644 (file)
@@ -14,6 +14,8 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 from . import EdkLogger\r
 from . import DataType\r
index 5a961c3d944aa096848652a98d7b3de159bbebfb..05a1ddfbcc89dcd056938bec7779f6af636a2c1f 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 import re\r
 from . import EdkLogger\r
index 3fadd693ead6b6784fd4fd563c5e2a2d936a78a8..0485bf482ec0509f1af450e1b394137b80241282 100644 (file)
@@ -15,6 +15,7 @@
 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
+from __future__ import print_function\r
 import Common.LongFilePathOs as os\r
 import re\r
 import Common.EdkLogger as EdkLogger\r
@@ -91,18 +92,18 @@ class VpdInfoFile:
         if (Vpd is None):\r
             EdkLogger.error("VpdInfoFile", BuildToolError.ATTRIBUTE_UNKNOWN_ERROR, "Invalid VPD PCD entry.")\r
 \r
-        if not (Offset >= "0" or Offset == "*"):\r
+        if not (Offset >= 0 or Offset == "*"):\r
             EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID, "Invalid offset parameter: %s." % Offset)\r
 \r
         if Vpd.DatumType == TAB_VOID:\r
-            if Vpd.MaxDatumSize <= "0":\r
+            if Vpd.MaxDatumSize <= 0:\r
                 EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID,\r
                                 "Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName))\r
         elif Vpd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
             if not Vpd.MaxDatumSize:\r
                 Vpd.MaxDatumSize = MAX_SIZE_TYPE[Vpd.DatumType]\r
         else:\r
-            if Vpd.MaxDatumSize <= "0":\r
+            if Vpd.MaxDatumSize <= 0:\r
                 EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID,\r
                                 "Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName))\r
 \r
@@ -126,7 +127,7 @@ class VpdInfoFile:
                             "Invalid parameter FilePath: %s." % FilePath)\r
 \r
         Content = FILE_COMMENT_TEMPLATE\r
-        Pcds = sorted(self._VpdArray.keys(), key=lambda x: x.TokenCName)\r
+        Pcds = sorted(self._VpdArray.keys())\r
         for Pcd in Pcds:\r
             i = 0\r
             PcdTokenCName = Pcd.TokenCName\r
@@ -248,7 +249,7 @@ def CallExtenalBPDGTool(ToolPath, VpdFileName):
     except Exception as X:\r
         EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, ExtraData=str(X))\r
     (out, error) = PopenObject.communicate()\r
-    print(out.decode(encoding='utf-8', errors='ignore'))\r
+    print(out)\r
     while PopenObject.returncode is None :\r
         PopenObject.wait()\r
 \r
diff --git a/BaseTools/Source/Python/Ecc/C.g4 b/BaseTools/Source/Python/Ecc/C.g4
deleted file mode 100644 (file)
index 7e0a4dd..0000000
+++ /dev/null
@@ -1,636 +0,0 @@
-/* @file\r
- This file is used to be the grammar file of ECC tool\r
-\r
- Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution.  The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-*/\r
-\r
-\r
-grammar C;\r
-options {\r
-    language=Python;\r
-}\r
-\r
-@header {\r
-## @file\r
-# The file defines the parser for C source files.\r
-#\r
-# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE.\r
-# This file is generated by running:\r
-# java org.antlr.Tool C.g\r
-#\r
-# Copyright (c) 2009 - 2010, Intel Corporation  All rights reserved.\r
-#\r
-# This program and the accompanying materials are licensed and made available\r
-# under the terms and conditions of the BSD License which accompanies this\r
-# distribution.  The full text of the license may be found at:\r
-#   http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-##\r
-\r
-import Ecc.CodeFragment as CodeFragment\r
-import Ecc.FileProfile as FileProfile\r
-}\r
-\r
-@members {\r
-        \r
-def printTokenInfo(self, line, offset, tokenText):\r
-    print(str(line)+ ',' + str(offset) + ':' + str(tokenText))\r
-    \r
-def StorePredicateExpression(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-    PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-    FileProfile.PredicateExpressionList.append(PredExp)\r
-    \r
-def StoreEnumerationDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-    EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-    FileProfile.EnumerationDefinitionList.append(EnumDef)\r
-    \r
-def StoreStructUnionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-    SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-    FileProfile.StructUnionDefinitionList.append(SUDef)\r
-    \r
-def StoreTypedefDefinition(self, StartLine, StartOffset, EndLine, EndOffset, FromText, ToText):\r
-    Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-    FileProfile.TypedefDefinitionList.append(Tdef)\r
-\r
-def StoreFunctionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText, LeftBraceLine, LeftBraceOffset, DeclLine, DeclOffset):\r
-    FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))\r
-    FileProfile.FunctionDefinitionList.append(FuncDef)\r
-    \r
-def StoreVariableDeclaration(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText):\r
-    VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-    FileProfile.VariableDeclarationList.append(VarDecl)\r
-\r
-def StoreFunctionCalling(self, StartLine, StartOffset, EndLine, EndOffset, FuncName, ParamList):\r
-    FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))\r
-    FileProfile.FunctionCallingList.append(FuncCall)\r
-\r
-}\r
-\r
-translation_unit\r
-    : external_declaration*\r
-    ;\r
-\r
-\r
-external_declaration\r
-    :   ( declaration_specifiers? declarator declaration* '{' )\r
-    |   function_definition\r
-    |   declaration\r
-    |   macro_statement (';')?\r
-    ;\r
-\r
-function_definition\r
-locals [String ModifierText = '', String DeclText = '', int LBLine = 0, int LBOffset = 0, int DeclLine = 0, int DeclOffset = 0]\r
-@init {\r
-ModifierText = '';\r
-DeclText = '';\r
-LBLine = 0;\r
-LBOffset = 0;\r
-DeclLine = 0;\r
-DeclOffset = 0;\r
-}\r
-@after{\r
-self.StoreFunctionDefinition(localctx.start.line, localctx.start.column, localctx.stop.line, localctx.stop.column, ModifierText, DeclText, LBLine, LBOffset, DeclLine, DeclOffset)\r
-}\r
-    :    d=declaration_specifiers? declarator\r
-    (   declaration+ a=compound_statement  // K&R style\r
-    |   b=compound_statement        // ANSI style\r
-    )   { \r
-if localctx.d != None:\r
-    ModifierText = $declaration_specifiers.text\r
-else:\r
-    ModifierText = ''\r
-DeclText = $declarator.text\r
-DeclLine = $declarator.start.line\r
-DeclOffset = $declarator.start.column\r
-if localctx.a != None:\r
-    LBLine = $a.start.line\r
-    LBOffset = $a.start.column\r
-else:\r
-    LBLine = $b.start.line\r
-    LBOffset = $b.start.column\r
-        }\r
-    ;\r
-\r
-\r
-declaration_specifiers\r
-    :   (   storage_class_specifier\r
-        |   type_specifier\r
-        |   type_qualifier\r
-        )+\r
-    ;\r
-\r
-declaration\r
-    : a='typedef' b=declaration_specifiers? c=init_declarator_list d=';' \r
-    {\r
-if localctx.b is not None:\r
-    self.StoreTypedefDefinition(localctx.a.line, localctx.a.column, $d.line, localctx.d.column, $b.text, $c.text)\r
-else:\r
-    self.StoreTypedefDefinition(localctx.a.line, localctx.a.column, $d.line, localctx.d.column, '', $c.text)\r
-    }\r
-    | s=declaration_specifiers t=init_declarator_list? e=';' \r
-    {\r
-if localctx.t is not None:\r
-    self.StoreVariableDeclaration($s.start.line, $s.start.column, $t.start.line, $t.start.column, $s.text, $t.text)\r
-}\r
-    ;\r
-\r
-init_declarator_list\r
-    : init_declarator (',' init_declarator)*\r
-    ;\r
-\r
-init_declarator\r
-    : declarator ('=' initializer)? \r
-    ;\r
-\r
-storage_class_specifier\r
-    : 'extern'\r
-    | 'static'\r
-    | 'auto'\r
-    | 'register'\r
-    | 'STATIC'\r
-    ;\r
-\r
-type_specifier\r
-    : 'void'\r
-    | 'char'\r
-    | 'short'\r
-    | 'int'\r
-    | 'long'\r
-    | 'float'\r
-    | 'double'\r
-    | 'signed'\r
-    | 'unsigned'\r
-    | s=struct_or_union_specifier\r
-    {\r
-if localctx.s.stop is not None:\r
-    self.StoreStructUnionDefinition($s.start.line, $s.start.column, $s.stop.line, $s.stop.column, $s.text)\r
-}\r
-    | e=enum_specifier\r
-    {\r
-if localctx.e.stop is not None:\r
-    self.StoreEnumerationDefinition($e.start.line, $e.start.column, $e.stop.line, $e.stop.column, $e.text)\r
-}\r
-    | (IDENTIFIER type_qualifier* declarator) \r
-    |  type_id\r
-    ;\r
-\r
-type_id\r
-    :   IDENTIFIER\r
-        //{self.printTokenInfo($a.line, $a.pos, $a.text)}\r
-    ;\r
-\r
-struct_or_union_specifier\r
-    : struct_or_union IDENTIFIER? '{' struct_declaration_list '}'\r
-    | struct_or_union IDENTIFIER\r
-    ;\r
-\r
-struct_or_union\r
-    : 'struct'\r
-    | 'union'\r
-    ;\r
-\r
-struct_declaration_list\r
-    : struct_declaration+\r
-    ;\r
-\r
-struct_declaration\r
-    : specifier_qualifier_list struct_declarator_list ';'\r
-    ;\r
-\r
-specifier_qualifier_list\r
-    : ( type_qualifier | type_specifier )+\r
-    ;\r
-\r
-struct_declarator_list\r
-    : struct_declarator (',' struct_declarator)*\r
-    ;\r
-\r
-struct_declarator\r
-    : declarator (':' constant_expression)?\r
-    | ':' constant_expression\r
-    ;\r
-\r
-enum_specifier\r
-    : 'enum' '{' enumerator_list ','? '}'\r
-    | 'enum' IDENTIFIER '{' enumerator_list ','? '}'\r
-    | 'enum' IDENTIFIER\r
-    ;\r
-\r
-enumerator_list\r
-    : enumerator (',' enumerator)*\r
-    ;\r
-\r
-enumerator\r
-    : IDENTIFIER ('=' constant_expression)?\r
-    ;\r
-\r
-type_qualifier\r
-    : 'const'\r
-    | 'volatile'\r
-    | 'IN'\r
-    | 'OUT'\r
-    | 'OPTIONAL'\r
-    | 'CONST'\r
-    | 'UNALIGNED'\r
-    | 'VOLATILE'\r
-    | 'GLOBAL_REMOVE_IF_UNREFERENCED'\r
-    | 'EFIAPI'\r
-    | 'EFI_BOOTSERVICE'\r
-    | 'EFI_RUNTIMESERVICE'\r
-    | 'PACKED'\r
-    ;\r
-\r
-declarator\r
-    : pointer? ('EFIAPI')? ('EFI_BOOTSERVICE')? ('EFI_RUNTIMESERVICE')? direct_declarator\r
-//  | ('EFIAPI')? ('EFI_BOOTSERVICE')? ('EFI_RUNTIMESERVICE')? pointer? direct_declarator\r
-    | pointer\r
-    ;\r
-\r
-direct_declarator\r
-    : IDENTIFIER declarator_suffix*\r
-    | '(' ('EFIAPI')? declarator ')' declarator_suffix+\r
-    ;\r
-\r
-declarator_suffix\r
-    :   '[' constant_expression ']'\r
-    |   '[' ']'\r
-    |   '(' parameter_type_list ')'\r
-    |   '(' identifier_list ')'\r
-    |   '(' ')'\r
-    ;\r
-\r
-pointer\r
-    : '*' type_qualifier+ pointer?\r
-    | '*' pointer\r
-    | '*'\r
-    ;\r
-\r
-parameter_type_list\r
-    : parameter_list (',' ('OPTIONAL')? '...')?\r
-    ;\r
-\r
-parameter_list\r
-    : parameter_declaration (',' ('OPTIONAL')? parameter_declaration)*\r
-    ;\r
-\r
-parameter_declaration\r
-    : declaration_specifiers (declarator|abstract_declarator)* ('OPTIONAL')?\r
-    //accomerdate user-defined type only, no declarator follow.\r
-    | pointer* IDENTIFIER\r
-    ;\r
-\r
-identifier_list\r
-    : IDENTIFIER\r
-    (',' IDENTIFIER)*\r
-    ;\r
-\r
-type_name\r
-    : specifier_qualifier_list abstract_declarator?\r
-    | type_id\r
-    ;\r
-\r
-abstract_declarator\r
-    : pointer direct_abstract_declarator?\r
-    | direct_abstract_declarator\r
-    ;\r
-\r
-direct_abstract_declarator\r
-    :   ( '(' abstract_declarator ')' | abstract_declarator_suffix ) abstract_declarator_suffix*\r
-    ;\r
-\r
-abstract_declarator_suffix\r
-    :   '[' ']'\r
-    |   '[' constant_expression ']'\r
-    |   '(' ')'\r
-    |   '(' parameter_type_list ')'\r
-    ;\r
-    \r
-initializer\r
-\r
-    : assignment_expression\r
-    | '{' initializer_list ','? '}'\r
-    ;\r
-\r
-initializer_list\r
-    : initializer (',' initializer )*\r
-    ;\r
-\r
-// E x p r e s s i o n s\r
-\r
-argument_expression_list\r
-    :   assignment_expression ('OPTIONAL')? (',' assignment_expression ('OPTIONAL')?)*\r
-    ;\r
-\r
-additive_expression\r
-    : (multiplicative_expression) ('+' multiplicative_expression | '-' multiplicative_expression)*\r
-    ;\r
-\r
-multiplicative_expression\r
-    : (cast_expression) ('*' cast_expression | '/' cast_expression | '%' cast_expression)*\r
-    ;\r
-\r
-cast_expression\r
-    : '(' type_name ')' cast_expression\r
-    | unary_expression\r
-    ;\r
-\r
-unary_expression\r
-    : postfix_expression\r
-    | '++' unary_expression\r
-    | '--' unary_expression\r
-    | unary_operator cast_expression\r
-    | 'sizeof' unary_expression\r
-    | 'sizeof' '(' type_name ')'\r
-    ;\r
-\r
-postfix_expression\r
-locals [FuncCallText='']\r
-@init\r
-    {\r
-self.FuncCallText=''\r
-    }\r
-    :   p=primary_expression {self.FuncCallText += $p.text}\r
-        (   '[' expression ']'\r
-        |   '(' a=')'{self.StoreFunctionCalling($p.start.line, $p.start.column, $a.line, localctx.a.column, self.FuncCallText, '')}\r
-        |   '(' c=argument_expression_list b=')' {self.StoreFunctionCalling($p.start.line, $p.start.column, $b.line, localctx.b.column, self.FuncCallText, $c.text)}\r
-        |   '(' macro_parameter_list ')'\r
-        |   '.' x=IDENTIFIER {self.FuncCallText += '.' + $x.text}\r
-        |   '*' y=IDENTIFIER {self.FuncCallText = $y.text}\r
-        |   '->' z=IDENTIFIER {self.FuncCallText += '->' + $z.text}\r
-        |   '++'\r
-        |   '--'\r
-        )*\r
-    ;\r
-    \r
-macro_parameter_list\r
-    : parameter_declaration (',' parameter_declaration)*\r
-    ;\r
-\r
-unary_operator\r
-    : '&'\r
-    | '*'\r
-    | '+'\r
-    | '-'\r
-    | '~'\r
-    | '!'\r
-    ;\r
-\r
-primary_expression\r
-    : IDENTIFIER\r
-    | constant\r
-    | '(' expression ')'\r
-    ;\r
-\r
-constant\r
-    :   HEX_LITERAL\r
-    |   OCTAL_LITERAL\r
-    |   DECIMAL_LITERAL\r
-    |   CHARACTER_LITERAL\r
-    |   (IDENTIFIER* STRING_LITERAL+)+ IDENTIFIER*\r
-    |   FLOATING_POINT_LITERAL\r
-    ;\r
-\r
-/////\r
-\r
-expression\r
-    : assignment_expression (',' assignment_expression)*\r
-    ;\r
-\r
-constant_expression\r
-    : conditional_expression\r
-    ;\r
-\r
-assignment_expression\r
-    : lvalue assignment_operator assignment_expression\r
-    | conditional_expression\r
-    ;\r
-    \r
-lvalue\r
-    :   unary_expression\r
-    ;\r
-\r
-assignment_operator\r
-    : '='\r
-    | '*='\r
-    | '/='\r
-    | '%='\r
-    | '+='\r
-    | '-='\r
-    | '<<='\r
-    | '>>='\r
-    | '&='\r
-    | '^='\r
-    | '|='\r
-    ;\r
-\r
-conditional_expression\r
-    : e=logical_or_expression ('?' expression ':' conditional_expression {self.StorePredicateExpression($e.start.line, $e.start.column, $e.stop.line, $e.stop.column, $e.text)})?\r
-    ;\r
-\r
-logical_or_expression\r
-    : logical_and_expression ('||' logical_and_expression)*\r
-    ;\r
-\r
-logical_and_expression\r
-    : inclusive_or_expression ('&&' inclusive_or_expression)*\r
-    ;\r
-\r
-inclusive_or_expression\r
-    : exclusive_or_expression ('|' exclusive_or_expression)*\r
-    ;\r
-\r
-exclusive_or_expression\r
-    : and_expression ('^' and_expression)*\r
-    ;\r
-\r
-and_expression\r
-    : equality_expression ('&' equality_expression)*\r
-    ;\r
-equality_expression\r
-    : relational_expression (('=='|'!=') relational_expression )*\r
-    ;\r
-\r
-relational_expression\r
-    : shift_expression (('<'|'>'|'<='|'>=') shift_expression)*\r
-    ;\r
-\r
-shift_expression\r
-    : additive_expression (('<<'|'>>') additive_expression)*\r
-    ;\r
-\r
-// S t a t e m e n t s\r
-\r
-statement\r
-    : labeled_statement\r
-    | compound_statement\r
-    | expression_statement\r
-    | selection_statement\r
-    | iteration_statement\r
-    | jump_statement\r
-    | macro_statement\r
-    | asm2_statement\r
-    | asm1_statement\r
-    | asm_statement\r
-    | declaration\r
-    ;\r
-\r
-asm2_statement\r
-    : '__asm__'? IDENTIFIER '(' (~(';'))* ')' ';'\r
-    ;\r
-    \r
-asm1_statement\r
-    : '_asm' '{' (~('}'))* '}'\r
-    ;\r
-\r
-asm_statement\r
-    : '__asm' '{' (~('}'))* '}'\r
-    ;\r
-    \r
-macro_statement\r
-    : IDENTIFIER '(' declaration*  statement_list? expression? ')'\r
-    ;\r
-    \r
-labeled_statement\r
-    : IDENTIFIER ':' statement\r
-    | 'case' constant_expression ':' statement\r
-    | 'default' ':' statement\r
-    ;\r
-\r
-compound_statement\r
-    : '{' declaration* statement_list? '}'\r
-    ;\r
-\r
-statement_list\r
-    : statement+\r
-    ;\r
-\r
-expression_statement\r
-    : ';'\r
-    | expression ';'\r
-    ;\r
-\r
-selection_statement\r
-    : 'if' '(' e=expression ')' {self.StorePredicateExpression($e.start.line, $e.start.column, $e.stop.line, $e.stop.column, $e.text)} statement (:'else' statement)?\r
-    | 'switch' '(' expression ')' statement\r
-    ;\r
-\r
-iteration_statement\r
-    : 'while' '(' e=expression ')' statement {self.StorePredicateExpression($e.start.line, $e.start.column, $e.stop.line, $e.stop.column, $e.text)}\r
-    | 'do' statement 'while' '(' e=expression ')' ';' {self.StorePredicateExpression($e.start.line, $e.start.column, $e.stop.line, $e.stop.column, $e.text)}\r
-    //| 'for' '(' expression_statement e=expression_statement expression? ')' statement {self.StorePredicateExpression($e.start.line, $e.start.column, $e.stop.line, $e.stop.column, $e.text)}\r
-    ;\r
-\r
-jump_statement\r
-    : 'goto' IDENTIFIER ';'\r
-    | 'continue' ';'\r
-    | 'break' ';'\r
-    | 'return' ';'\r
-    | 'return' expression ';'\r
-    ;\r
-\r
-IDENTIFIER\r
-    :   LETTER (LETTER|'0'..'9')*\r
-    ;\r
-    \r
-fragment\r
-LETTER\r
-    :   '$'\r
-    |  'A'..'Z'\r
-    |  'a'..'z'\r
-    |   '_'\r
-    ;\r
-\r
-CHARACTER_LITERAL\r
-    :   ('L')? '\'' ( EscapeSequence | ~('\''|'\\') ) '\''\r
-    ;\r
-\r
-STRING_LITERAL\r
-    :  ('L')? '"' ( EscapeSequence | ~('\\'|'"') )* '"'\r
-    ;\r
-    \r
-HEX_LITERAL : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ;\r
-\r
-DECIMAL_LITERAL : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ;\r
-\r
-OCTAL_LITERAL : '0' ('0'..'7')+ IntegerTypeSuffix? ;\r
-\r
-fragment\r
-HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\r
-\r
-fragment\r
-IntegerTypeSuffix\r
-    : ('u'|'U')\r
-    | ('l'|'L')\r
-    | ('u'|'U')  ('l'|'L')\r
-    | ('u'|'U')  ('l'|'L') ('l'|'L')\r
-    ;\r
-\r
-FLOATING_POINT_LITERAL\r
-    :   ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix?\r
-    |   '.' ('0'..'9')+ Exponent? FloatTypeSuffix?\r
-    |   ('0'..'9')+ Exponent FloatTypeSuffix?\r
-    |   ('0'..'9')+ Exponent? FloatTypeSuffix\r
-    ;\r
-\r
-fragment\r
-Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;\r
-\r
-fragment\r
-FloatTypeSuffix : ('f'|'F'|'d'|'D') ;\r
-\r
-fragment\r
-EscapeSequence\r
-    :  '\\' ('b'|'t'|'n'|'f'|'r'|'\''|'\\')\r
-    |   OctalEscape\r
-    ;\r
-\r
-fragment\r
-OctalEscape\r
-    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')\r
-    |   '\\' ('0'..'7') ('0'..'7')\r
-    |   '\\' ('0'..'7')\r
-    ;\r
-\r
-fragment\r
-UnicodeEscape\r
-    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit\r
-    ;\r
-\r
-WS  :  (' '|'\r'|'\t'|'\u000C'|'\n') \r
-       -> channel(HIDDEN)\r
-    ;\r
-\r
-// ingore '\' of line concatenation\r
-BS  : ('\\') \r
-      -> channel(HIDDEN)\r
-    ;\r
-    \r
-UnicodeVocabulary\r
-    : '\u0003'..'\uFFFE'\r
-    ;\r
-\r
-COMMENT\r
-    : '/*' .*? '*/'\r
-      -> channel(HIDDEN)\r
-    ;\r
-\r
-LINE_COMMENT\r
-    : '//' ~('\n'|'\r')* '\r'? '\n' \r
-      -> channel(HIDDEN)\r
-    ;\r
-\r
-// ignore #line info for now\r
-LINE_COMMAND \r
-    : '#' ~('\n'|'\r')* '\r'? '\n' \r
-      -> channel(HIDDEN)\r
-    ;\r
index 364d86881b15378c69625f074656f23452a067de..b9e57c1b5554949b2a430c365e9cdd3890050f0e 100644 (file)
@@ -1,18 +1,16 @@
-# Generated from C.g4 by ANTLR 4.7.1\r
-from antlr4 import *\r
-from io import StringIO\r
-from typing.io import TextIO\r
-import sys\r
+# $ANTLR 3.0.1 C.g 2010-02-23 09:58:53\r
 \r
+from antlr3 import *\r
+from antlr3.compat import set, frozenset\r
 \r
 ## @file\r
-# The file defines the parser for C source files.\r
+# The file defines the Lexer for C source files.\r
 #\r
 # THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE.\r
 # This file is generated by running:\r
 # java org.antlr.Tool C.g\r
 #\r
-# Copyright (c) 2009 - 2010, Intel Corporation  All rights reserved.\r
+# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available\r
 # under the terms and conditions of the BSD License which accompanies this\r
@@ -24,609 +22,4926 @@ import sys
 #\r
 ##\r
 \r
-import Ecc.CodeFragment as CodeFragment\r
-import Ecc.FileProfile as FileProfile\r
-\r
-\r
-def serializedATN():\r
-    with StringIO() as buf:\r
-        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2k")\r
-        buf.write("\u0383\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7")\r
-        buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r")\r
-        buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23")\r
-        buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30")\r
-        buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36")\r
-        buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%")\r
-        buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.")\r
-        buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64")\r
-        buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:")\r
-        buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t")\r
-        buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t")\r
-        buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT\4U\t")\r
-        buf.write("U\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4")\r
-        buf.write("^\t^\4_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4")\r
-        buf.write("g\tg\4h\th\4i\ti\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to\4")\r
-        buf.write("p\tp\4q\tq\4r\tr\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3")\r
-        buf.write("\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7")\r
-        buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\n\3")\r
-        buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13")\r
-        buf.write("\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\16")\r
-        buf.write("\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20")\r
-        buf.write("\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22")\r
-        buf.write("\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23")\r
-        buf.write("\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25")\r
-        buf.write("\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27")\r
-        buf.write("\3\27\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\32")\r
-        buf.write("\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33")\r
-        buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\36")\r
-        buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37")\r
-        buf.write("\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3!\3!\3")\r
-        buf.write("!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3")\r
-        buf.write("\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"")\r
-        buf.write("\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3#")\r
-        buf.write("\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3%\3")\r
-        buf.write("%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3")\r
-        buf.write("&\3&\3&\3&\3&\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3")\r
-        buf.write(",\3,\3,\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3\61\3\61")\r
-        buf.write("\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\64")\r
-        buf.write("\3\64\3\65\3\65\3\65\3\66\3\66\3\67\3\67\38\38\39\39\3")\r
-        buf.write("9\3:\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3=\3>\3>\3>\3>\3?\3")\r
-        buf.write("?\3?\3?\3@\3@\3@\3A\3A\3A\3B\3B\3B\3C\3C\3D\3D\3D\3E\3")\r
-        buf.write("E\3E\3F\3F\3G\3G\3H\3H\3H\3I\3I\3I\3J\3J\3K\3K\3L\3L\3")\r
-        buf.write("L\3M\3M\3M\3N\3N\3N\3O\3O\3O\3P\3P\3P\3P\3P\3P\3P\3P\3")\r
-        buf.write("Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3R\3S\3S\3S\3S\3S\3T\3T\3")\r
-        buf.write("T\3T\3T\3T\3T\3T\3U\3U\3U\3V\3V\3V\3V\3V\3W\3W\3W\3W\3")\r
-        buf.write("W\3W\3W\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\3[\3")\r
-        buf.write("[\3[\3[\3[\3[\3[\3[\3[\3\\\3\\\3\\\3\\\3\\\3\\\3]\3]\3")\r
-        buf.write("]\3]\3]\3]\3]\3^\3^\3^\7^\u02b2\n^\f^\16^\u02b5\13^\3")\r
-        buf.write("_\3_\3`\5`\u02ba\n`\3`\3`\3`\5`\u02bf\n`\3`\3`\3a\5a\u02c4")\r
-        buf.write("\na\3a\3a\3a\7a\u02c9\na\fa\16a\u02cc\13a\3a\3a\3b\3b")\r
-        buf.write("\3b\6b\u02d3\nb\rb\16b\u02d4\3b\5b\u02d8\nb\3c\3c\3c\7")\r
-        buf.write("c\u02dd\nc\fc\16c\u02e0\13c\5c\u02e2\nc\3c\5c\u02e5\n")\r
-        buf.write("c\3d\3d\6d\u02e9\nd\rd\16d\u02ea\3d\5d\u02ee\nd\3e\3e")\r
-        buf.write("\3f\3f\3f\3f\3f\3f\5f\u02f8\nf\3g\6g\u02fb\ng\rg\16g\u02fc")\r
-        buf.write("\3g\3g\7g\u0301\ng\fg\16g\u0304\13g\3g\5g\u0307\ng\3g")\r
-        buf.write("\5g\u030a\ng\3g\3g\6g\u030e\ng\rg\16g\u030f\3g\5g\u0313")\r
-        buf.write("\ng\3g\5g\u0316\ng\3g\6g\u0319\ng\rg\16g\u031a\3g\3g\5")\r
-        buf.write("g\u031f\ng\3g\6g\u0322\ng\rg\16g\u0323\3g\5g\u0327\ng")\r
-        buf.write("\3g\5g\u032a\ng\3h\3h\5h\u032e\nh\3h\6h\u0331\nh\rh\16")\r
-        buf.write("h\u0332\3i\3i\3j\3j\3j\5j\u033a\nj\3k\3k\3k\3k\3k\3k\3")\r
-        buf.write("k\3k\3k\5k\u0345\nk\3l\3l\3l\3l\3l\3l\3l\3m\3m\3m\3m\3")\r
-        buf.write("n\3n\3n\3n\3o\3o\3p\3p\3p\3p\7p\u035c\np\fp\16p\u035f")\r
-        buf.write("\13p\3p\3p\3p\3p\3p\3q\3q\3q\3q\7q\u036a\nq\fq\16q\u036d")\r
-        buf.write("\13q\3q\5q\u0370\nq\3q\3q\3q\3q\3r\3r\7r\u0378\nr\fr\16")\r
-        buf.write("r\u037b\13r\3r\5r\u037e\nr\3r\3r\3r\3r\3\u035d\2s\3\3")\r
-        buf.write("\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16")\r
-        buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61")\r
-        buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*")\r
-        buf.write("S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u<w")\r
-        buf.write("=y>{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b")\r
-        buf.write("G\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009b")\r
-        buf.write("O\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00ab")\r
-        buf.write("W\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb")\r
-        buf.write("_\u00bd\2\u00bf`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9\2\u00cb")\r
-        buf.write("\2\u00cde\u00cf\2\u00d1\2\u00d3\2\u00d5\2\u00d7\2\u00d9")\r
-        buf.write("f\u00dbg\u00ddh\u00dfi\u00e1j\u00e3k\3\2\20\6\2&&C\\a")\r
-        buf.write("ac|\4\2))^^\4\2$$^^\4\2ZZzz\5\2\62;CHch\6\2NNWWnnww\4")\r
-        buf.write("\2WWww\4\2NNnn\4\2GGgg\4\2--//\6\2FFHHffhh\t\2))^^ddh")\r
-        buf.write("hppttvv\5\2\13\f\16\17\"\"\4\2\f\f\17\17\2\u03a2\2\3\3")\r
-        buf.write("\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2")\r
-        buf.write("\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2")\r
-        buf.write("\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2")\r
-        buf.write("\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2")\r
-        buf.write("\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3")\r
-        buf.write("\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2")\r
-        buf.write("\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3")\r
-        buf.write("\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K")\r
-        buf.write("\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2")\r
-        buf.write("U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2")\r
-        buf.write("\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2")\r
-        buf.write("\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2")\r
-        buf.write("\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3")\r
-        buf.write("\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083")\r
-        buf.write("\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2")\r
-        buf.write("\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091")\r
-        buf.write("\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2")\r
-        buf.write("\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f")\r
-        buf.write("\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2")\r
-        buf.write("\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad")\r
-        buf.write("\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2")\r
-        buf.write("\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb")\r
-        buf.write("\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2")\r
-        buf.write("\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00cd\3\2\2\2\2\u00d9")\r
-        buf.write("\3\2\2\2\2\u00db\3\2\2\2\2\u00dd\3\2\2\2\2\u00df\3\2\2")\r
-        buf.write("\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\3\u00e5\3\2\2\2\5\u00e7")\r
-        buf.write("\3\2\2\2\7\u00e9\3\2\2\2\t\u00f1\3\2\2\2\13\u00f3\3\2")\r
-        buf.write("\2\2\r\u00f5\3\2\2\2\17\u00fc\3\2\2\2\21\u0103\3\2\2\2")\r
-        buf.write("\23\u0108\3\2\2\2\25\u0111\3\2\2\2\27\u0118\3\2\2\2\31")\r
-        buf.write("\u011d\3\2\2\2\33\u0122\3\2\2\2\35\u0128\3\2\2\2\37\u012c")\r
-        buf.write("\3\2\2\2!\u0131\3\2\2\2#\u0137\3\2\2\2%\u013e\3\2\2\2")\r
-        buf.write("\'\u0145\3\2\2\2)\u014e\3\2\2\2+\u0150\3\2\2\2-\u0157")\r
-        buf.write("\3\2\2\2/\u015d\3\2\2\2\61\u015f\3\2\2\2\63\u0164\3\2")\r
-        buf.write("\2\2\65\u016a\3\2\2\2\67\u0173\3\2\2\29\u0176\3\2\2\2")\r
-        buf.write(";\u017a\3\2\2\2=\u0183\3\2\2\2?\u0189\3\2\2\2A\u0193\3")\r
-        buf.write("\2\2\2C\u019c\3\2\2\2E\u01ba\3\2\2\2G\u01c1\3\2\2\2I\u01d1")\r
-        buf.write("\3\2\2\2K\u01e4\3\2\2\2M\u01eb\3\2\2\2O\u01ed\3\2\2\2")\r
-        buf.write("Q\u01ef\3\2\2\2S\u01f1\3\2\2\2U\u01f3\3\2\2\2W\u01f5\3")\r
-        buf.write("\2\2\2Y\u01f9\3\2\2\2[\u01fb\3\2\2\2]\u01fd\3\2\2\2_\u01ff")\r
-        buf.write("\3\2\2\2a\u0201\3\2\2\2c\u0204\3\2\2\2e\u0207\3\2\2\2")\r
-        buf.write("g\u020e\3\2\2\2i\u0210\3\2\2\2k\u0213\3\2\2\2m\u0215\3")\r
-        buf.write("\2\2\2o\u0217\3\2\2\2q\u0219\3\2\2\2s\u021c\3\2\2\2u\u021f")\r
-        buf.write("\3\2\2\2w\u0222\3\2\2\2y\u0225\3\2\2\2{\u0228\3\2\2\2")\r
-        buf.write("}\u022c\3\2\2\2\177\u0230\3\2\2\2\u0081\u0233\3\2\2\2")\r
-        buf.write("\u0083\u0236\3\2\2\2\u0085\u0239\3\2\2\2\u0087\u023b\3")\r
-        buf.write("\2\2\2\u0089\u023e\3\2\2\2\u008b\u0241\3\2\2\2\u008d\u0243")\r
-        buf.write("\3\2\2\2\u008f\u0245\3\2\2\2\u0091\u0248\3\2\2\2\u0093")\r
-        buf.write("\u024b\3\2\2\2\u0095\u024d\3\2\2\2\u0097\u024f\3\2\2\2")\r
-        buf.write("\u0099\u0252\3\2\2\2\u009b\u0255\3\2\2\2\u009d\u0258\3")\r
-        buf.write("\2\2\2\u009f\u025b\3\2\2\2\u00a1\u0263\3\2\2\2\u00a3\u0268")\r
-        buf.write("\3\2\2\2\u00a5\u026e\3\2\2\2\u00a7\u0273\3\2\2\2\u00a9")\r
-        buf.write("\u027b\3\2\2\2\u00ab\u027e\3\2\2\2\u00ad\u0283\3\2\2\2")\r
-        buf.write("\u00af\u028a\3\2\2\2\u00b1\u0290\3\2\2\2\u00b3\u0293\3")\r
-        buf.write("\2\2\2\u00b5\u0298\3\2\2\2\u00b7\u02a1\3\2\2\2\u00b9\u02a7")\r
-        buf.write("\3\2\2\2\u00bb\u02ae\3\2\2\2\u00bd\u02b6\3\2\2\2\u00bf")\r
-        buf.write("\u02b9\3\2\2\2\u00c1\u02c3\3\2\2\2\u00c3\u02cf\3\2\2\2")\r
-        buf.write("\u00c5\u02e1\3\2\2\2\u00c7\u02e6\3\2\2\2\u00c9\u02ef\3")\r
-        buf.write("\2\2\2\u00cb\u02f7\3\2\2\2\u00cd\u0329\3\2\2\2\u00cf\u032b")\r
-        buf.write("\3\2\2\2\u00d1\u0334\3\2\2\2\u00d3\u0339\3\2\2\2\u00d5")\r
-        buf.write("\u0344\3\2\2\2\u00d7\u0346\3\2\2\2\u00d9\u034d\3\2\2\2")\r
-        buf.write("\u00db\u0351\3\2\2\2\u00dd\u0355\3\2\2\2\u00df\u0357\3")\r
-        buf.write("\2\2\2\u00e1\u0365\3\2\2\2\u00e3\u0375\3\2\2\2\u00e5\u00e6")\r
-        buf.write("\7}\2\2\u00e6\4\3\2\2\2\u00e7\u00e8\7=\2\2\u00e8\6\3\2")\r
-        buf.write("\2\2\u00e9\u00ea\7v\2\2\u00ea\u00eb\7{\2\2\u00eb\u00ec")\r
-        buf.write("\7r\2\2\u00ec\u00ed\7g\2\2\u00ed\u00ee\7f\2\2\u00ee\u00ef")\r
-        buf.write("\7g\2\2\u00ef\u00f0\7h\2\2\u00f0\b\3\2\2\2\u00f1\u00f2")\r
-        buf.write("\7.\2\2\u00f2\n\3\2\2\2\u00f3\u00f4\7?\2\2\u00f4\f\3\2")\r
-        buf.write("\2\2\u00f5\u00f6\7g\2\2\u00f6\u00f7\7z\2\2\u00f7\u00f8")\r
-        buf.write("\7v\2\2\u00f8\u00f9\7g\2\2\u00f9\u00fa\7t\2\2\u00fa\u00fb")\r
-        buf.write("\7p\2\2\u00fb\16\3\2\2\2\u00fc\u00fd\7u\2\2\u00fd\u00fe")\r
-        buf.write("\7v\2\2\u00fe\u00ff\7c\2\2\u00ff\u0100\7v\2\2\u0100\u0101")\r
-        buf.write("\7k\2\2\u0101\u0102\7e\2\2\u0102\20\3\2\2\2\u0103\u0104")\r
-        buf.write("\7c\2\2\u0104\u0105\7w\2\2\u0105\u0106\7v\2\2\u0106\u0107")\r
-        buf.write("\7q\2\2\u0107\22\3\2\2\2\u0108\u0109\7t\2\2\u0109\u010a")\r
-        buf.write("\7g\2\2\u010a\u010b\7i\2\2\u010b\u010c\7k\2\2\u010c\u010d")\r
-        buf.write("\7u\2\2\u010d\u010e\7v\2\2\u010e\u010f\7g\2\2\u010f\u0110")\r
-        buf.write("\7t\2\2\u0110\24\3\2\2\2\u0111\u0112\7U\2\2\u0112\u0113")\r
-        buf.write("\7V\2\2\u0113\u0114\7C\2\2\u0114\u0115\7V\2\2\u0115\u0116")\r
-        buf.write("\7K\2\2\u0116\u0117\7E\2\2\u0117\26\3\2\2\2\u0118\u0119")\r
-        buf.write("\7x\2\2\u0119\u011a\7q\2\2\u011a\u011b\7k\2\2\u011b\u011c")\r
-        buf.write("\7f\2\2\u011c\30\3\2\2\2\u011d\u011e\7e\2\2\u011e\u011f")\r
-        buf.write("\7j\2\2\u011f\u0120\7c\2\2\u0120\u0121\7t\2\2\u0121\32")\r
-        buf.write("\3\2\2\2\u0122\u0123\7u\2\2\u0123\u0124\7j\2\2\u0124\u0125")\r
-        buf.write("\7q\2\2\u0125\u0126\7t\2\2\u0126\u0127\7v\2\2\u0127\34")\r
-        buf.write("\3\2\2\2\u0128\u0129\7k\2\2\u0129\u012a\7p\2\2\u012a\u012b")\r
-        buf.write("\7v\2\2\u012b\36\3\2\2\2\u012c\u012d\7n\2\2\u012d\u012e")\r
-        buf.write("\7q\2\2\u012e\u012f\7p\2\2\u012f\u0130\7i\2\2\u0130 \3")\r
-        buf.write("\2\2\2\u0131\u0132\7h\2\2\u0132\u0133\7n\2\2\u0133\u0134")\r
-        buf.write("\7q\2\2\u0134\u0135\7c\2\2\u0135\u0136\7v\2\2\u0136\"")\r
-        buf.write("\3\2\2\2\u0137\u0138\7f\2\2\u0138\u0139\7q\2\2\u0139\u013a")\r
-        buf.write("\7w\2\2\u013a\u013b\7d\2\2\u013b\u013c\7n\2\2\u013c\u013d")\r
-        buf.write("\7g\2\2\u013d$\3\2\2\2\u013e\u013f\7u\2\2\u013f\u0140")\r
-        buf.write("\7k\2\2\u0140\u0141\7i\2\2\u0141\u0142\7p\2\2\u0142\u0143")\r
-        buf.write("\7g\2\2\u0143\u0144\7f\2\2\u0144&\3\2\2\2\u0145\u0146")\r
-        buf.write("\7w\2\2\u0146\u0147\7p\2\2\u0147\u0148\7u\2\2\u0148\u0149")\r
-        buf.write("\7k\2\2\u0149\u014a\7i\2\2\u014a\u014b\7p\2\2\u014b\u014c")\r
-        buf.write("\7g\2\2\u014c\u014d\7f\2\2\u014d(\3\2\2\2\u014e\u014f")\r
-        buf.write("\7\177\2\2\u014f*\3\2\2\2\u0150\u0151\7u\2\2\u0151\u0152")\r
-        buf.write("\7v\2\2\u0152\u0153\7t\2\2\u0153\u0154\7w\2\2\u0154\u0155")\r
-        buf.write("\7e\2\2\u0155\u0156\7v\2\2\u0156,\3\2\2\2\u0157\u0158")\r
-        buf.write("\7w\2\2\u0158\u0159\7p\2\2\u0159\u015a\7k\2\2\u015a\u015b")\r
-        buf.write("\7q\2\2\u015b\u015c\7p\2\2\u015c.\3\2\2\2\u015d\u015e")\r
-        buf.write("\7<\2\2\u015e\60\3\2\2\2\u015f\u0160\7g\2\2\u0160\u0161")\r
-        buf.write("\7p\2\2\u0161\u0162\7w\2\2\u0162\u0163\7o\2\2\u0163\62")\r
-        buf.write("\3\2\2\2\u0164\u0165\7e\2\2\u0165\u0166\7q\2\2\u0166\u0167")\r
-        buf.write("\7p\2\2\u0167\u0168\7u\2\2\u0168\u0169\7v\2\2\u0169\64")\r
-        buf.write("\3\2\2\2\u016a\u016b\7x\2\2\u016b\u016c\7q\2\2\u016c\u016d")\r
-        buf.write("\7n\2\2\u016d\u016e\7c\2\2\u016e\u016f\7v\2\2\u016f\u0170")\r
-        buf.write("\7k\2\2\u0170\u0171\7n\2\2\u0171\u0172\7g\2\2\u0172\66")\r
-        buf.write("\3\2\2\2\u0173\u0174\7K\2\2\u0174\u0175\7P\2\2\u01758")\r
-        buf.write("\3\2\2\2\u0176\u0177\7Q\2\2\u0177\u0178\7W\2\2\u0178\u0179")\r
-        buf.write("\7V\2\2\u0179:\3\2\2\2\u017a\u017b\7Q\2\2\u017b\u017c")\r
-        buf.write("\7R\2\2\u017c\u017d\7V\2\2\u017d\u017e\7K\2\2\u017e\u017f")\r
-        buf.write("\7Q\2\2\u017f\u0180\7P\2\2\u0180\u0181\7C\2\2\u0181\u0182")\r
-        buf.write("\7N\2\2\u0182<\3\2\2\2\u0183\u0184\7E\2\2\u0184\u0185")\r
-        buf.write("\7Q\2\2\u0185\u0186\7P\2\2\u0186\u0187\7U\2\2\u0187\u0188")\r
-        buf.write("\7V\2\2\u0188>\3\2\2\2\u0189\u018a\7W\2\2\u018a\u018b")\r
-        buf.write("\7P\2\2\u018b\u018c\7C\2\2\u018c\u018d\7N\2\2\u018d\u018e")\r
-        buf.write("\7K\2\2\u018e\u018f\7I\2\2\u018f\u0190\7P\2\2\u0190\u0191")\r
-        buf.write("\7G\2\2\u0191\u0192\7F\2\2\u0192@\3\2\2\2\u0193\u0194")\r
-        buf.write("\7X\2\2\u0194\u0195\7Q\2\2\u0195\u0196\7N\2\2\u0196\u0197")\r
-        buf.write("\7C\2\2\u0197\u0198\7V\2\2\u0198\u0199\7K\2\2\u0199\u019a")\r
-        buf.write("\7N\2\2\u019a\u019b\7G\2\2\u019bB\3\2\2\2\u019c\u019d")\r
-        buf.write("\7I\2\2\u019d\u019e\7N\2\2\u019e\u019f\7Q\2\2\u019f\u01a0")\r
-        buf.write("\7D\2\2\u01a0\u01a1\7C\2\2\u01a1\u01a2\7N\2\2\u01a2\u01a3")\r
-        buf.write("\7a\2\2\u01a3\u01a4\7T\2\2\u01a4\u01a5\7G\2\2\u01a5\u01a6")\r
-        buf.write("\7O\2\2\u01a6\u01a7\7Q\2\2\u01a7\u01a8\7X\2\2\u01a8\u01a9")\r
-        buf.write("\7G\2\2\u01a9\u01aa\7a\2\2\u01aa\u01ab\7K\2\2\u01ab\u01ac")\r
-        buf.write("\7H\2\2\u01ac\u01ad\7a\2\2\u01ad\u01ae\7W\2\2\u01ae\u01af")\r
-        buf.write("\7P\2\2\u01af\u01b0\7T\2\2\u01b0\u01b1\7G\2\2\u01b1\u01b2")\r
-        buf.write("\7H\2\2\u01b2\u01b3\7G\2\2\u01b3\u01b4\7T\2\2\u01b4\u01b5")\r
-        buf.write("\7G\2\2\u01b5\u01b6\7P\2\2\u01b6\u01b7\7E\2\2\u01b7\u01b8")\r
-        buf.write("\7G\2\2\u01b8\u01b9\7F\2\2\u01b9D\3\2\2\2\u01ba\u01bb")\r
-        buf.write("\7G\2\2\u01bb\u01bc\7H\2\2\u01bc\u01bd\7K\2\2\u01bd\u01be")\r
-        buf.write("\7C\2\2\u01be\u01bf\7R\2\2\u01bf\u01c0\7K\2\2\u01c0F\3")\r
-        buf.write("\2\2\2\u01c1\u01c2\7G\2\2\u01c2\u01c3\7H\2\2\u01c3\u01c4")\r
-        buf.write("\7K\2\2\u01c4\u01c5\7a\2\2\u01c5\u01c6\7D\2\2\u01c6\u01c7")\r
-        buf.write("\7Q\2\2\u01c7\u01c8\7Q\2\2\u01c8\u01c9\7V\2\2\u01c9\u01ca")\r
-        buf.write("\7U\2\2\u01ca\u01cb\7G\2\2\u01cb\u01cc\7T\2\2\u01cc\u01cd")\r
-        buf.write("\7X\2\2\u01cd\u01ce\7K\2\2\u01ce\u01cf\7E\2\2\u01cf\u01d0")\r
-        buf.write("\7G\2\2\u01d0H\3\2\2\2\u01d1\u01d2\7G\2\2\u01d2\u01d3")\r
-        buf.write("\7H\2\2\u01d3\u01d4\7K\2\2\u01d4\u01d5\7a\2\2\u01d5\u01d6")\r
-        buf.write("\7T\2\2\u01d6\u01d7\7W\2\2\u01d7\u01d8\7P\2\2\u01d8\u01d9")\r
-        buf.write("\7V\2\2\u01d9\u01da\7K\2\2\u01da\u01db\7O\2\2\u01db\u01dc")\r
-        buf.write("\7G\2\2\u01dc\u01dd\7U\2\2\u01dd\u01de\7G\2\2\u01de\u01df")\r
-        buf.write("\7T\2\2\u01df\u01e0\7X\2\2\u01e0\u01e1\7K\2\2\u01e1\u01e2")\r
-        buf.write("\7E\2\2\u01e2\u01e3\7G\2\2\u01e3J\3\2\2\2\u01e4\u01e5")\r
-        buf.write("\7R\2\2\u01e5\u01e6\7C\2\2\u01e6\u01e7\7E\2\2\u01e7\u01e8")\r
-        buf.write("\7M\2\2\u01e8\u01e9\7G\2\2\u01e9\u01ea\7F\2\2\u01eaL\3")\r
-        buf.write("\2\2\2\u01eb\u01ec\7*\2\2\u01ecN\3\2\2\2\u01ed\u01ee\7")\r
-        buf.write("+\2\2\u01eeP\3\2\2\2\u01ef\u01f0\7]\2\2\u01f0R\3\2\2\2")\r
-        buf.write("\u01f1\u01f2\7_\2\2\u01f2T\3\2\2\2\u01f3\u01f4\7,\2\2")\r
-        buf.write("\u01f4V\3\2\2\2\u01f5\u01f6\7\60\2\2\u01f6\u01f7\7\60")\r
-        buf.write("\2\2\u01f7\u01f8\7\60\2\2\u01f8X\3\2\2\2\u01f9\u01fa\7")\r
-        buf.write("-\2\2\u01faZ\3\2\2\2\u01fb\u01fc\7/\2\2\u01fc\\\3\2\2")\r
-        buf.write("\2\u01fd\u01fe\7\61\2\2\u01fe^\3\2\2\2\u01ff\u0200\7\'")\r
-        buf.write("\2\2\u0200`\3\2\2\2\u0201\u0202\7-\2\2\u0202\u0203\7-")\r
-        buf.write("\2\2\u0203b\3\2\2\2\u0204\u0205\7/\2\2\u0205\u0206\7/")\r
-        buf.write("\2\2\u0206d\3\2\2\2\u0207\u0208\7u\2\2\u0208\u0209\7k")\r
-        buf.write("\2\2\u0209\u020a\7|\2\2\u020a\u020b\7g\2\2\u020b\u020c")\r
-        buf.write("\7q\2\2\u020c\u020d\7h\2\2\u020df\3\2\2\2\u020e\u020f")\r
-        buf.write("\7\60\2\2\u020fh\3\2\2\2\u0210\u0211\7/\2\2\u0211\u0212")\r
-        buf.write("\7@\2\2\u0212j\3\2\2\2\u0213\u0214\7(\2\2\u0214l\3\2\2")\r
-        buf.write("\2\u0215\u0216\7\u0080\2\2\u0216n\3\2\2\2\u0217\u0218")\r
-        buf.write("\7#\2\2\u0218p\3\2\2\2\u0219\u021a\7,\2\2\u021a\u021b")\r
-        buf.write("\7?\2\2\u021br\3\2\2\2\u021c\u021d\7\61\2\2\u021d\u021e")\r
-        buf.write("\7?\2\2\u021et\3\2\2\2\u021f\u0220\7\'\2\2\u0220\u0221")\r
-        buf.write("\7?\2\2\u0221v\3\2\2\2\u0222\u0223\7-\2\2\u0223\u0224")\r
-        buf.write("\7?\2\2\u0224x\3\2\2\2\u0225\u0226\7/\2\2\u0226\u0227")\r
-        buf.write("\7?\2\2\u0227z\3\2\2\2\u0228\u0229\7>\2\2\u0229\u022a")\r
-        buf.write("\7>\2\2\u022a\u022b\7?\2\2\u022b|\3\2\2\2\u022c\u022d")\r
-        buf.write("\7@\2\2\u022d\u022e\7@\2\2\u022e\u022f\7?\2\2\u022f~\3")\r
-        buf.write("\2\2\2\u0230\u0231\7(\2\2\u0231\u0232\7?\2\2\u0232\u0080")\r
-        buf.write("\3\2\2\2\u0233\u0234\7`\2\2\u0234\u0235\7?\2\2\u0235\u0082")\r
-        buf.write("\3\2\2\2\u0236\u0237\7~\2\2\u0237\u0238\7?\2\2\u0238\u0084")\r
-        buf.write("\3\2\2\2\u0239\u023a\7A\2\2\u023a\u0086\3\2\2\2\u023b")\r
-        buf.write("\u023c\7~\2\2\u023c\u023d\7~\2\2\u023d\u0088\3\2\2\2\u023e")\r
-        buf.write("\u023f\7(\2\2\u023f\u0240\7(\2\2\u0240\u008a\3\2\2\2\u0241")\r
-        buf.write("\u0242\7~\2\2\u0242\u008c\3\2\2\2\u0243\u0244\7`\2\2\u0244")\r
-        buf.write("\u008e\3\2\2\2\u0245\u0246\7?\2\2\u0246\u0247\7?\2\2\u0247")\r
-        buf.write("\u0090\3\2\2\2\u0248\u0249\7#\2\2\u0249\u024a\7?\2\2\u024a")\r
-        buf.write("\u0092\3\2\2\2\u024b\u024c\7>\2\2\u024c\u0094\3\2\2\2")\r
-        buf.write("\u024d\u024e\7@\2\2\u024e\u0096\3\2\2\2\u024f\u0250\7")\r
-        buf.write(">\2\2\u0250\u0251\7?\2\2\u0251\u0098\3\2\2\2\u0252\u0253")\r
-        buf.write("\7@\2\2\u0253\u0254\7?\2\2\u0254\u009a\3\2\2\2\u0255\u0256")\r
-        buf.write("\7>\2\2\u0256\u0257\7>\2\2\u0257\u009c\3\2\2\2\u0258\u0259")\r
-        buf.write("\7@\2\2\u0259\u025a\7@\2\2\u025a\u009e\3\2\2\2\u025b\u025c")\r
-        buf.write("\7a\2\2\u025c\u025d\7a\2\2\u025d\u025e\7c\2\2\u025e\u025f")\r
-        buf.write("\7u\2\2\u025f\u0260\7o\2\2\u0260\u0261\7a\2\2\u0261\u0262")\r
-        buf.write("\7a\2\2\u0262\u00a0\3\2\2\2\u0263\u0264\7a\2\2\u0264\u0265")\r
-        buf.write("\7c\2\2\u0265\u0266\7u\2\2\u0266\u0267\7o\2\2\u0267\u00a2")\r
-        buf.write("\3\2\2\2\u0268\u0269\7a\2\2\u0269\u026a\7a\2\2\u026a\u026b")\r
-        buf.write("\7c\2\2\u026b\u026c\7u\2\2\u026c\u026d\7o\2\2\u026d\u00a4")\r
-        buf.write("\3\2\2\2\u026e\u026f\7e\2\2\u026f\u0270\7c\2\2\u0270\u0271")\r
-        buf.write("\7u\2\2\u0271\u0272\7g\2\2\u0272\u00a6\3\2\2\2\u0273\u0274")\r
-        buf.write("\7f\2\2\u0274\u0275\7g\2\2\u0275\u0276\7h\2\2\u0276\u0277")\r
-        buf.write("\7c\2\2\u0277\u0278\7w\2\2\u0278\u0279\7n\2\2\u0279\u027a")\r
-        buf.write("\7v\2\2\u027a\u00a8\3\2\2\2\u027b\u027c\7k\2\2\u027c\u027d")\r
-        buf.write("\7h\2\2\u027d\u00aa\3\2\2\2\u027e\u027f\7g\2\2\u027f\u0280")\r
-        buf.write("\7n\2\2\u0280\u0281\7u\2\2\u0281\u0282\7g\2\2\u0282\u00ac")\r
-        buf.write("\3\2\2\2\u0283\u0284\7u\2\2\u0284\u0285\7y\2\2\u0285\u0286")\r
-        buf.write("\7k\2\2\u0286\u0287\7v\2\2\u0287\u0288\7e\2\2\u0288\u0289")\r
-        buf.write("\7j\2\2\u0289\u00ae\3\2\2\2\u028a\u028b\7y\2\2\u028b\u028c")\r
-        buf.write("\7j\2\2\u028c\u028d\7k\2\2\u028d\u028e\7n\2\2\u028e\u028f")\r
-        buf.write("\7g\2\2\u028f\u00b0\3\2\2\2\u0290\u0291\7f\2\2\u0291\u0292")\r
-        buf.write("\7q\2\2\u0292\u00b2\3\2\2\2\u0293\u0294\7i\2\2\u0294\u0295")\r
-        buf.write("\7q\2\2\u0295\u0296\7v\2\2\u0296\u0297\7q\2\2\u0297\u00b4")\r
-        buf.write("\3\2\2\2\u0298\u0299\7e\2\2\u0299\u029a\7q\2\2\u029a\u029b")\r
-        buf.write("\7p\2\2\u029b\u029c\7v\2\2\u029c\u029d\7k\2\2\u029d\u029e")\r
-        buf.write("\7p\2\2\u029e\u029f\7w\2\2\u029f\u02a0\7g\2\2\u02a0\u00b6")\r
-        buf.write("\3\2\2\2\u02a1\u02a2\7d\2\2\u02a2\u02a3\7t\2\2\u02a3\u02a4")\r
-        buf.write("\7g\2\2\u02a4\u02a5\7c\2\2\u02a5\u02a6\7m\2\2\u02a6\u00b8")\r
-        buf.write("\3\2\2\2\u02a7\u02a8\7t\2\2\u02a8\u02a9\7g\2\2\u02a9\u02aa")\r
-        buf.write("\7v\2\2\u02aa\u02ab\7w\2\2\u02ab\u02ac\7t\2\2\u02ac\u02ad")\r
-        buf.write("\7p\2\2\u02ad\u00ba\3\2\2\2\u02ae\u02b3\5\u00bd_\2\u02af")\r
-        buf.write("\u02b2\5\u00bd_\2\u02b0\u02b2\4\62;\2\u02b1\u02af\3\2")\r
-        buf.write("\2\2\u02b1\u02b0\3\2\2\2\u02b2\u02b5\3\2\2\2\u02b3\u02b1")\r
-        buf.write("\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u00bc\3\2\2\2\u02b5")\r
-        buf.write("\u02b3\3\2\2\2\u02b6\u02b7\t\2\2\2\u02b7\u00be\3\2\2\2")\r
-        buf.write("\u02b8\u02ba\7N\2\2\u02b9\u02b8\3\2\2\2\u02b9\u02ba\3")\r
-        buf.write("\2\2\2\u02ba\u02bb\3\2\2\2\u02bb\u02be\7)\2\2\u02bc\u02bf")\r
-        buf.write("\5\u00d3j\2\u02bd\u02bf\n\3\2\2\u02be\u02bc\3\2\2\2\u02be")\r
-        buf.write("\u02bd\3\2\2\2\u02bf\u02c0\3\2\2\2\u02c0\u02c1\7)\2\2")\r
-        buf.write("\u02c1\u00c0\3\2\2\2\u02c2\u02c4\7N\2\2\u02c3\u02c2\3")\r
-        buf.write("\2\2\2\u02c3\u02c4\3\2\2\2\u02c4\u02c5\3\2\2\2\u02c5\u02ca")\r
-        buf.write("\7$\2\2\u02c6\u02c9\5\u00d3j\2\u02c7\u02c9\n\4\2\2\u02c8")\r
-        buf.write("\u02c6\3\2\2\2\u02c8\u02c7\3\2\2\2\u02c9\u02cc\3\2\2\2")\r
-        buf.write("\u02ca\u02c8\3\2\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02cd\3")\r
-        buf.write("\2\2\2\u02cc\u02ca\3\2\2\2\u02cd\u02ce\7$\2\2\u02ce\u00c2")\r
-        buf.write("\3\2\2\2\u02cf\u02d0\7\62\2\2\u02d0\u02d2\t\5\2\2\u02d1")\r
-        buf.write("\u02d3\5\u00c9e\2\u02d2\u02d1\3\2\2\2\u02d3\u02d4\3\2")\r
-        buf.write("\2\2\u02d4\u02d2\3\2\2\2\u02d4\u02d5\3\2\2\2\u02d5\u02d7")\r
-        buf.write("\3\2\2\2\u02d6\u02d8\5\u00cbf\2\u02d7\u02d6\3\2\2\2\u02d7")\r
-        buf.write("\u02d8\3\2\2\2\u02d8\u00c4\3\2\2\2\u02d9\u02e2\7\62\2")\r
-        buf.write("\2\u02da\u02de\4\63;\2\u02db\u02dd\4\62;\2\u02dc\u02db")\r
-        buf.write("\3\2\2\2\u02dd\u02e0\3\2\2\2\u02de\u02dc\3\2\2\2\u02de")\r
-        buf.write("\u02df\3\2\2\2\u02df\u02e2\3\2\2\2\u02e0\u02de\3\2\2\2")\r
-        buf.write("\u02e1\u02d9\3\2\2\2\u02e1\u02da\3\2\2\2\u02e2\u02e4\3")\r
-        buf.write("\2\2\2\u02e3\u02e5\5\u00cbf\2\u02e4\u02e3\3\2\2\2\u02e4")\r
-        buf.write("\u02e5\3\2\2\2\u02e5\u00c6\3\2\2\2\u02e6\u02e8\7\62\2")\r
-        buf.write("\2\u02e7\u02e9\4\629\2\u02e8\u02e7\3\2\2\2\u02e9\u02ea")\r
-        buf.write("\3\2\2\2\u02ea\u02e8\3\2\2\2\u02ea\u02eb\3\2\2\2\u02eb")\r
-        buf.write("\u02ed\3\2\2\2\u02ec\u02ee\5\u00cbf\2\u02ed\u02ec\3\2")\r
-        buf.write("\2\2\u02ed\u02ee\3\2\2\2\u02ee\u00c8\3\2\2\2\u02ef\u02f0")\r
-        buf.write("\t\6\2\2\u02f0\u00ca\3\2\2\2\u02f1\u02f8\t\7\2\2\u02f2")\r
-        buf.write("\u02f3\t\b\2\2\u02f3\u02f8\t\t\2\2\u02f4\u02f5\t\b\2\2")\r
-        buf.write("\u02f5\u02f6\t\t\2\2\u02f6\u02f8\t\t\2\2\u02f7\u02f1\3")\r
-        buf.write("\2\2\2\u02f7\u02f2\3\2\2\2\u02f7\u02f4\3\2\2\2\u02f8\u00cc")\r
-        buf.write("\3\2\2\2\u02f9\u02fb\4\62;\2\u02fa\u02f9\3\2\2\2\u02fb")\r
-        buf.write("\u02fc\3\2\2\2\u02fc\u02fa\3\2\2\2\u02fc\u02fd\3\2\2\2")\r
-        buf.write("\u02fd\u02fe\3\2\2\2\u02fe\u0302\7\60\2\2\u02ff\u0301")\r
-        buf.write("\4\62;\2\u0300\u02ff\3\2\2\2\u0301\u0304\3\2\2\2\u0302")\r
-        buf.write("\u0300\3\2\2\2\u0302\u0303\3\2\2\2\u0303\u0306\3\2\2\2")\r
-        buf.write("\u0304\u0302\3\2\2\2\u0305\u0307\5\u00cfh\2\u0306\u0305")\r
-        buf.write("\3\2\2\2\u0306\u0307\3\2\2\2\u0307\u0309\3\2\2\2\u0308")\r
-        buf.write("\u030a\5\u00d1i\2\u0309\u0308\3\2\2\2\u0309\u030a\3\2")\r
-        buf.write("\2\2\u030a\u032a\3\2\2\2\u030b\u030d\7\60\2\2\u030c\u030e")\r
-        buf.write("\4\62;\2\u030d\u030c\3\2\2\2\u030e\u030f\3\2\2\2\u030f")\r
-        buf.write("\u030d\3\2\2\2\u030f\u0310\3\2\2\2\u0310\u0312\3\2\2\2")\r
-        buf.write("\u0311\u0313\5\u00cfh\2\u0312\u0311\3\2\2\2\u0312\u0313")\r
-        buf.write("\3\2\2\2\u0313\u0315\3\2\2\2\u0314\u0316\5\u00d1i\2\u0315")\r
-        buf.write("\u0314\3\2\2\2\u0315\u0316\3\2\2\2\u0316\u032a\3\2\2\2")\r
-        buf.write("\u0317\u0319\4\62;\2\u0318\u0317\3\2\2\2\u0319\u031a\3")\r
-        buf.write("\2\2\2\u031a\u0318\3\2\2\2\u031a\u031b\3\2\2\2\u031b\u031c")\r
-        buf.write("\3\2\2\2\u031c\u031e\5\u00cfh\2\u031d\u031f\5\u00d1i\2")\r
-        buf.write("\u031e\u031d\3\2\2\2\u031e\u031f\3\2\2\2\u031f\u032a\3")\r
-        buf.write("\2\2\2\u0320\u0322\4\62;\2\u0321\u0320\3\2\2\2\u0322\u0323")\r
-        buf.write("\3\2\2\2\u0323\u0321\3\2\2\2\u0323\u0324\3\2\2\2\u0324")\r
-        buf.write("\u0326\3\2\2\2\u0325\u0327\5\u00cfh\2\u0326\u0325\3\2")\r
-        buf.write("\2\2\u0326\u0327\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u032a")\r
-        buf.write("\5\u00d1i\2\u0329\u02fa\3\2\2\2\u0329\u030b\3\2\2\2\u0329")\r
-        buf.write("\u0318\3\2\2\2\u0329\u0321\3\2\2\2\u032a\u00ce\3\2\2\2")\r
-        buf.write("\u032b\u032d\t\n\2\2\u032c\u032e\t\13\2\2\u032d\u032c")\r
-        buf.write("\3\2\2\2\u032d\u032e\3\2\2\2\u032e\u0330\3\2\2\2\u032f")\r
-        buf.write("\u0331\4\62;\2\u0330\u032f\3\2\2\2\u0331\u0332\3\2\2\2")\r
-        buf.write("\u0332\u0330\3\2\2\2\u0332\u0333\3\2\2\2\u0333\u00d0\3")\r
-        buf.write("\2\2\2\u0334\u0335\t\f\2\2\u0335\u00d2\3\2\2\2\u0336\u0337")\r
-        buf.write("\7^\2\2\u0337\u033a\t\r\2\2\u0338\u033a\5\u00d5k\2\u0339")\r
-        buf.write("\u0336\3\2\2\2\u0339\u0338\3\2\2\2\u033a\u00d4\3\2\2\2")\r
-        buf.write("\u033b\u033c\7^\2\2\u033c\u033d\4\62\65\2\u033d\u033e")\r
-        buf.write("\4\629\2\u033e\u0345\4\629\2\u033f\u0340\7^\2\2\u0340")\r
-        buf.write("\u0341\4\629\2\u0341\u0345\4\629\2\u0342\u0343\7^\2\2")\r
-        buf.write("\u0343\u0345\4\629\2\u0344\u033b\3\2\2\2\u0344\u033f\3")\r
-        buf.write("\2\2\2\u0344\u0342\3\2\2\2\u0345\u00d6\3\2\2\2\u0346\u0347")\r
-        buf.write("\7^\2\2\u0347\u0348\7w\2\2\u0348\u0349\5\u00c9e\2\u0349")\r
-        buf.write("\u034a\5\u00c9e\2\u034a\u034b\5\u00c9e\2\u034b\u034c\5")\r
-        buf.write("\u00c9e\2\u034c\u00d8\3\2\2\2\u034d\u034e\t\16\2\2\u034e")\r
-        buf.write("\u034f\3\2\2\2\u034f\u0350\bm\2\2\u0350\u00da\3\2\2\2")\r
-        buf.write("\u0351\u0352\7^\2\2\u0352\u0353\3\2\2\2\u0353\u0354\b")\r
-        buf.write("n\2\2\u0354\u00dc\3\2\2\2\u0355\u0356\4\5\0\2\u0356\u00de")\r
-        buf.write("\3\2\2\2\u0357\u0358\7\61\2\2\u0358\u0359\7,\2\2\u0359")\r
-        buf.write("\u035d\3\2\2\2\u035a\u035c\13\2\2\2\u035b\u035a\3\2\2")\r
-        buf.write("\2\u035c\u035f\3\2\2\2\u035d\u035e\3\2\2\2\u035d\u035b")\r
-        buf.write("\3\2\2\2\u035e\u0360\3\2\2\2\u035f\u035d\3\2\2\2\u0360")\r
-        buf.write("\u0361\7,\2\2\u0361\u0362\7\61\2\2\u0362\u0363\3\2\2\2")\r
-        buf.write("\u0363\u0364\bp\2\2\u0364\u00e0\3\2\2\2\u0365\u0366\7")\r
-        buf.write("\61\2\2\u0366\u0367\7\61\2\2\u0367\u036b\3\2\2\2\u0368")\r
-        buf.write("\u036a\n\17\2\2\u0369\u0368\3\2\2\2\u036a\u036d\3\2\2")\r
-        buf.write("\2\u036b\u0369\3\2\2\2\u036b\u036c\3\2\2\2\u036c\u036f")\r
-        buf.write("\3\2\2\2\u036d\u036b\3\2\2\2\u036e\u0370\7\17\2\2\u036f")\r
-        buf.write("\u036e\3\2\2\2\u036f\u0370\3\2\2\2\u0370\u0371\3\2\2\2")\r
-        buf.write("\u0371\u0372\7\f\2\2\u0372\u0373\3\2\2\2\u0373\u0374\b")\r
-        buf.write("q\2\2\u0374\u00e2\3\2\2\2\u0375\u0379\7%\2\2\u0376\u0378")\r
-        buf.write("\n\17\2\2\u0377\u0376\3\2\2\2\u0378\u037b\3\2\2\2\u0379")\r
-        buf.write("\u0377\3\2\2\2\u0379\u037a\3\2\2\2\u037a\u037d\3\2\2\2")\r
-        buf.write("\u037b\u0379\3\2\2\2\u037c\u037e\7\17\2\2\u037d\u037c")\r
-        buf.write("\3\2\2\2\u037d\u037e\3\2\2\2\u037e\u037f\3\2\2\2\u037f")\r
-        buf.write("\u0380\7\f\2\2\u0380\u0381\3\2\2\2\u0381\u0382\br\2\2")\r
-        buf.write("\u0382\u00e4\3\2\2\2\'\2\u02b1\u02b3\u02b9\u02be\u02c3")\r
-        buf.write("\u02c8\u02ca\u02d4\u02d7\u02de\u02e1\u02e4\u02ea\u02ed")\r
-        buf.write("\u02f7\u02fc\u0302\u0306\u0309\u030f\u0312\u0315\u031a")\r
-        buf.write("\u031e\u0323\u0326\u0329\u032d\u0332\u0339\u0344\u035d")\r
-        buf.write("\u036b\u036f\u0379\u037d\3\2\3\2")\r
-        return buf.getvalue()\r
 \r
 \r
+# for convenience in actions\r
+HIDDEN = BaseRecognizer.HIDDEN\r
+\r
+# token types\r
+T114=114\r
+T115=115\r
+T116=116\r
+T117=117\r
+FloatTypeSuffix=16\r
+LETTER=11\r
+T29=29\r
+T28=28\r
+T27=27\r
+T26=26\r
+T25=25\r
+EOF=-1\r
+STRING_LITERAL=9\r
+FLOATING_POINT_LITERAL=10\r
+T38=38\r
+T37=37\r
+T39=39\r
+T34=34\r
+COMMENT=22\r
+T33=33\r
+T36=36\r
+T35=35\r
+T30=30\r
+T32=32\r
+T31=31\r
+LINE_COMMENT=23\r
+IntegerTypeSuffix=14\r
+CHARACTER_LITERAL=8\r
+T49=49\r
+T48=48\r
+T100=100\r
+T43=43\r
+T42=42\r
+T102=102\r
+T41=41\r
+T101=101\r
+T40=40\r
+T47=47\r
+T46=46\r
+T45=45\r
+T44=44\r
+T109=109\r
+T107=107\r
+T108=108\r
+T105=105\r
+WS=19\r
+T106=106\r
+T103=103\r
+T104=104\r
+T50=50\r
+LINE_COMMAND=24\r
+T59=59\r
+T113=113\r
+T52=52\r
+T112=112\r
+T51=51\r
+T111=111\r
+T54=54\r
+T110=110\r
+EscapeSequence=12\r
+DECIMAL_LITERAL=7\r
+T53=53\r
+T56=56\r
+T55=55\r
+T58=58\r
+T57=57\r
+T75=75\r
+T76=76\r
+T73=73\r
+T74=74\r
+T79=79\r
+T77=77\r
+T78=78\r
+Exponent=15\r
+HexDigit=13\r
+T72=72\r
+T71=71\r
+T70=70\r
+T62=62\r
+T63=63\r
+T64=64\r
+T65=65\r
+T66=66\r
+T67=67\r
+T68=68\r
+T69=69\r
+IDENTIFIER=4\r
+UnicodeVocabulary=21\r
+HEX_LITERAL=5\r
+T61=61\r
+T60=60\r
+T99=99\r
+T97=97\r
+BS=20\r
+T98=98\r
+T95=95\r
+T96=96\r
+OCTAL_LITERAL=6\r
+T94=94\r
+Tokens=118\r
+T93=93\r
+T92=92\r
+T91=91\r
+T90=90\r
+T88=88\r
+T89=89\r
+T84=84\r
+T85=85\r
+T86=86\r
+T87=87\r
+UnicodeEscape=18\r
+T81=81\r
+T80=80\r
+T83=83\r
+OctalEscape=17\r
+T82=82\r
+\r
 class CLexer(Lexer):\r
 \r
-    atn = ATNDeserializer().deserialize(serializedATN())\r
-\r
-    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]\r
-\r
-    T__0 = 1\r
-    T__1 = 2\r
-    T__2 = 3\r
-    T__3 = 4\r
-    T__4 = 5\r
-    T__5 = 6\r
-    T__6 = 7\r
-    T__7 = 8\r
-    T__8 = 9\r
-    T__9 = 10\r
-    T__10 = 11\r
-    T__11 = 12\r
-    T__12 = 13\r
-    T__13 = 14\r
-    T__14 = 15\r
-    T__15 = 16\r
-    T__16 = 17\r
-    T__17 = 18\r
-    T__18 = 19\r
-    T__19 = 20\r
-    T__20 = 21\r
-    T__21 = 22\r
-    T__22 = 23\r
-    T__23 = 24\r
-    T__24 = 25\r
-    T__25 = 26\r
-    T__26 = 27\r
-    T__27 = 28\r
-    T__28 = 29\r
-    T__29 = 30\r
-    T__30 = 31\r
-    T__31 = 32\r
-    T__32 = 33\r
-    T__33 = 34\r
-    T__34 = 35\r
-    T__35 = 36\r
-    T__36 = 37\r
-    T__37 = 38\r
-    T__38 = 39\r
-    T__39 = 40\r
-    T__40 = 41\r
-    T__41 = 42\r
-    T__42 = 43\r
-    T__43 = 44\r
-    T__44 = 45\r
-    T__45 = 46\r
-    T__46 = 47\r
-    T__47 = 48\r
-    T__48 = 49\r
-    T__49 = 50\r
-    T__50 = 51\r
-    T__51 = 52\r
-    T__52 = 53\r
-    T__53 = 54\r
-    T__54 = 55\r
-    T__55 = 56\r
-    T__56 = 57\r
-    T__57 = 58\r
-    T__58 = 59\r
-    T__59 = 60\r
-    T__60 = 61\r
-    T__61 = 62\r
-    T__62 = 63\r
-    T__63 = 64\r
-    T__64 = 65\r
-    T__65 = 66\r
-    T__66 = 67\r
-    T__67 = 68\r
-    T__68 = 69\r
-    T__69 = 70\r
-    T__70 = 71\r
-    T__71 = 72\r
-    T__72 = 73\r
-    T__73 = 74\r
-    T__74 = 75\r
-    T__75 = 76\r
-    T__76 = 77\r
-    T__77 = 78\r
-    T__78 = 79\r
-    T__79 = 80\r
-    T__80 = 81\r
-    T__81 = 82\r
-    T__82 = 83\r
-    T__83 = 84\r
-    T__84 = 85\r
-    T__85 = 86\r
-    T__86 = 87\r
-    T__87 = 88\r
-    T__88 = 89\r
-    T__89 = 90\r
-    T__90 = 91\r
-    T__91 = 92\r
-    IDENTIFIER = 93\r
-    CHARACTER_LITERAL = 94\r
-    STRING_LITERAL = 95\r
-    HEX_LITERAL = 96\r
-    DECIMAL_LITERAL = 97\r
-    OCTAL_LITERAL = 98\r
-    FLOATING_POINT_LITERAL = 99\r
-    WS = 100\r
-    BS = 101\r
-    UnicodeVocabulary = 102\r
-    COMMENT = 103\r
-    LINE_COMMENT = 104\r
-    LINE_COMMAND = 105\r
-\r
-    channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]\r
-\r
-    modeNames = [ "DEFAULT_MODE" ]\r
-\r
-    literalNames = [ "<INVALID>",\r
-            "'{'", "';'", "'typedef'", "','", "'='", "'extern'", "'static'", \r
-            "'auto'", "'register'", "'STATIC'", "'void'", "'char'", "'short'", \r
-            "'int'", "'long'", "'float'", "'double'", "'signed'", "'unsigned'", \r
-            "'}'", "'struct'", "'union'", "':'", "'enum'", "'const'", "'volatile'", \r
-            "'IN'", "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'", "'VOLATILE'", \r
-            "'GLOBAL_REMOVE_IF_UNREFERENCED'", "'EFIAPI'", "'EFI_BOOTSERVICE'", \r
-            "'EFI_RUNTIMESERVICE'", "'PACKED'", "'('", "')'", "'['", "']'", \r
-            "'*'", "'...'", "'+'", "'-'", "'/'", "'%'", "'++'", "'--'", \r
-            "'sizeof'", "'.'", "'->'", "'&'", "'~'", "'!'", "'*='", "'/='", \r
-            "'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='", \r
-            "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'<'", \r
-            "'>'", "'<='", "'>='", "'<<'", "'>>'", "'__asm__'", "'_asm'", \r
-            "'__asm'", "'case'", "'default'", "'if'", "'else'", "'switch'", \r
-            "'while'", "'do'", "'goto'", "'continue'", "'break'", "'return'" ]\r
-\r
-    symbolicNames = [ "<INVALID>",\r
-            "IDENTIFIER", "CHARACTER_LITERAL", "STRING_LITERAL", "HEX_LITERAL", \r
-            "DECIMAL_LITERAL", "OCTAL_LITERAL", "FLOATING_POINT_LITERAL", \r
-            "WS", "BS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT", \r
-            "LINE_COMMAND" ]\r
-\r
-    ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", \r
-                  "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", \r
-                  "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", \r
-                  "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", \r
-                  "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", \r
-                  "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", \r
-                  "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", \r
-                  "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", \r
-                  "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", \r
-                  "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", \r
-                  "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", \r
-                  "T__68", "T__69", "T__70", "T__71", "T__72", "T__73", \r
-                  "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", \r
-                  "T__80", "T__81", "T__82", "T__83", "T__84", "T__85", \r
-                  "T__86", "T__87", "T__88", "T__89", "T__90", "T__91", \r
-                  "IDENTIFIER", "LETTER", "CHARACTER_LITERAL", "STRING_LITERAL", \r
-                  "HEX_LITERAL", "DECIMAL_LITERAL", "OCTAL_LITERAL", "HexDigit", \r
-                  "IntegerTypeSuffix", "FLOATING_POINT_LITERAL", "Exponent", \r
-                  "FloatTypeSuffix", "EscapeSequence", "OctalEscape", "UnicodeEscape", \r
-                  "WS", "BS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT", \r
-                  "LINE_COMMAND" ]\r
-\r
-    grammarFileName = "C.g4"\r
-\r
-    def __init__(self, input=None, output:TextIO = sys.stdout):\r
-        super().__init__(input, output)\r
-        self.checkVersion("4.7.1")\r
-        self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache())\r
-        self._actions = None\r
-        self._predicates = None\r
-\r
-\r
-            \r
-    def printTokenInfo(self, line, offset, tokenText):\r
-        print(str(line)+ ',' + str(offset) + ':' + str(tokenText))\r
-        \r
-    def StorePredicateExpression(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.PredicateExpressionList.append(PredExp)\r
-        \r
-    def StoreEnumerationDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.EnumerationDefinitionList.append(EnumDef)\r
-        \r
-    def StoreStructUnionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.StructUnionDefinitionList.append(SUDef)\r
-        \r
-    def StoreTypedefDefinition(self, StartLine, StartOffset, EndLine, EndOffset, FromText, ToText):\r
-        Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.TypedefDefinitionList.append(Tdef)\r
-\r
-    def StoreFunctionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText, LeftBraceLine, LeftBraceOffset, DeclLine, DeclOffset):\r
-        FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))\r
-        FileProfile.FunctionDefinitionList.append(FuncDef)\r
-        \r
-    def StoreVariableDeclaration(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText):\r
-        VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.VariableDeclarationList.append(VarDecl)\r
-\r
-    def StoreFunctionCalling(self, StartLine, StartOffset, EndLine, EndOffset, FuncName, ParamList):\r
-        FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.FunctionCallingList.append(FuncCall)\r
+    grammarFileName = "C.g"\r
+\r
+    def __init__(self, input=None):\r
+        Lexer.__init__(self, input)\r
+        self.dfa25 = self.DFA25(\r
+            self, 25,\r
+            eot = self.DFA25_eot,\r
+            eof = self.DFA25_eof,\r
+            min = self.DFA25_min,\r
+            max = self.DFA25_max,\r
+            accept = self.DFA25_accept,\r
+            special = self.DFA25_special,\r
+            transition = self.DFA25_transition\r
+            )\r
+        self.dfa35 = self.DFA35(\r
+            self, 35,\r
+            eot = self.DFA35_eot,\r
+            eof = self.DFA35_eof,\r
+            min = self.DFA35_min,\r
+            max = self.DFA35_max,\r
+            accept = self.DFA35_accept,\r
+            special = self.DFA35_special,\r
+            transition = self.DFA35_transition\r
+            )\r
+\r
+\r
+\r
+\r
+\r
+\r
+    # $ANTLR start T25\r
+    def mT25(self, ):\r
+\r
+        try:\r
+            self.type = T25\r
+\r
+            # C.g:27:5: ( ';' )\r
+            # C.g:27:7: ';'\r
+            self.match(u';')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T25\r
+\r
+\r
+\r
+    # $ANTLR start T26\r
+    def mT26(self, ):\r
+\r
+        try:\r
+            self.type = T26\r
+\r
+            # C.g:28:5: ( 'typedef' )\r
+            # C.g:28:7: 'typedef'\r
+            self.match("typedef")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T26\r
+\r
+\r
+\r
+    # $ANTLR start T27\r
+    def mT27(self, ):\r
+\r
+        try:\r
+            self.type = T27\r
+\r
+            # C.g:29:5: ( ',' )\r
+            # C.g:29:7: ','\r
+            self.match(u',')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T27\r
+\r
+\r
+\r
+    # $ANTLR start T28\r
+    def mT28(self, ):\r
+\r
+        try:\r
+            self.type = T28\r
+\r
+            # C.g:30:5: ( '=' )\r
+            # C.g:30:7: '='\r
+            self.match(u'=')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T28\r
+\r
+\r
+\r
+    # $ANTLR start T29\r
+    def mT29(self, ):\r
+\r
+        try:\r
+            self.type = T29\r
+\r
+            # C.g:31:5: ( 'extern' )\r
+            # C.g:31:7: 'extern'\r
+            self.match("extern")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T29\r
+\r
+\r
+\r
+    # $ANTLR start T30\r
+    def mT30(self, ):\r
+\r
+        try:\r
+            self.type = T30\r
+\r
+            # C.g:32:5: ( 'static' )\r
+            # C.g:32:7: 'static'\r
+            self.match("static")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T30\r
+\r
+\r
+\r
+    # $ANTLR start T31\r
+    def mT31(self, ):\r
+\r
+        try:\r
+            self.type = T31\r
+\r
+            # C.g:33:5: ( 'auto' )\r
+            # C.g:33:7: 'auto'\r
+            self.match("auto")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T31\r
+\r
+\r
+\r
+    # $ANTLR start T32\r
+    def mT32(self, ):\r
+\r
+        try:\r
+            self.type = T32\r
+\r
+            # C.g:34:5: ( 'register' )\r
+            # C.g:34:7: 'register'\r
+            self.match("register")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T32\r
+\r
+\r
+\r
+    # $ANTLR start T33\r
+    def mT33(self, ):\r
+\r
+        try:\r
+            self.type = T33\r
+\r
+            # C.g:35:5: ( 'STATIC' )\r
+            # C.g:35:7: 'STATIC'\r
+            self.match("STATIC")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T33\r
+\r
+\r
+\r
+    # $ANTLR start T34\r
+    def mT34(self, ):\r
+\r
+        try:\r
+            self.type = T34\r
+\r
+            # C.g:36:5: ( 'void' )\r
+            # C.g:36:7: 'void'\r
+            self.match("void")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T34\r
+\r
+\r
+\r
+    # $ANTLR start T35\r
+    def mT35(self, ):\r
+\r
+        try:\r
+            self.type = T35\r
+\r
+            # C.g:37:5: ( 'char' )\r
+            # C.g:37:7: 'char'\r
+            self.match("char")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T35\r
+\r
+\r
+\r
+    # $ANTLR start T36\r
+    def mT36(self, ):\r
+\r
+        try:\r
+            self.type = T36\r
+\r
+            # C.g:38:5: ( 'short' )\r
+            # C.g:38:7: 'short'\r
+            self.match("short")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T36\r
+\r
+\r
+\r
+    # $ANTLR start T37\r
+    def mT37(self, ):\r
+\r
+        try:\r
+            self.type = T37\r
+\r
+            # C.g:39:5: ( 'int' )\r
+            # C.g:39:7: 'int'\r
+            self.match("int")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T37\r
+\r
+\r
+\r
+    # $ANTLR start T38\r
+    def mT38(self, ):\r
+\r
+        try:\r
+            self.type = T38\r
+\r
+            # C.g:40:5: ( 'long' )\r
+            # C.g:40:7: 'long'\r
+            self.match("long")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T38\r
+\r
+\r
+\r
+    # $ANTLR start T39\r
+    def mT39(self, ):\r
+\r
+        try:\r
+            self.type = T39\r
+\r
+            # C.g:41:5: ( 'float' )\r
+            # C.g:41:7: 'float'\r
+            self.match("float")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T39\r
+\r
+\r
+\r
+    # $ANTLR start T40\r
+    def mT40(self, ):\r
+\r
+        try:\r
+            self.type = T40\r
+\r
+            # C.g:42:5: ( 'double' )\r
+            # C.g:42:7: 'double'\r
+            self.match("double")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T40\r
+\r
+\r
+\r
+    # $ANTLR start T41\r
+    def mT41(self, ):\r
+\r
+        try:\r
+            self.type = T41\r
+\r
+            # C.g:43:5: ( 'signed' )\r
+            # C.g:43:7: 'signed'\r
+            self.match("signed")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T41\r
+\r
+\r
+\r
+    # $ANTLR start T42\r
+    def mT42(self, ):\r
+\r
+        try:\r
+            self.type = T42\r
+\r
+            # C.g:44:5: ( 'unsigned' )\r
+            # C.g:44:7: 'unsigned'\r
+            self.match("unsigned")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T42\r
+\r
+\r
+\r
+    # $ANTLR start T43\r
+    def mT43(self, ):\r
+\r
+        try:\r
+            self.type = T43\r
+\r
+            # C.g:45:5: ( '{' )\r
+            # C.g:45:7: '{'\r
+            self.match(u'{')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T43\r
+\r
+\r
+\r
+    # $ANTLR start T44\r
+    def mT44(self, ):\r
+\r
+        try:\r
+            self.type = T44\r
+\r
+            # C.g:46:5: ( '}' )\r
+            # C.g:46:7: '}'\r
+            self.match(u'}')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T44\r
+\r
+\r
+\r
+    # $ANTLR start T45\r
+    def mT45(self, ):\r
+\r
+        try:\r
+            self.type = T45\r
+\r
+            # C.g:47:5: ( 'struct' )\r
+            # C.g:47:7: 'struct'\r
+            self.match("struct")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T45\r
+\r
+\r
+\r
+    # $ANTLR start T46\r
+    def mT46(self, ):\r
+\r
+        try:\r
+            self.type = T46\r
+\r
+            # C.g:48:5: ( 'union' )\r
+            # C.g:48:7: 'union'\r
+            self.match("union")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T46\r
+\r
+\r
+\r
+    # $ANTLR start T47\r
+    def mT47(self, ):\r
+\r
+        try:\r
+            self.type = T47\r
+\r
+            # C.g:49:5: ( ':' )\r
+            # C.g:49:7: ':'\r
+            self.match(u':')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T47\r
+\r
+\r
+\r
+    # $ANTLR start T48\r
+    def mT48(self, ):\r
+\r
+        try:\r
+            self.type = T48\r
+\r
+            # C.g:50:5: ( 'enum' )\r
+            # C.g:50:7: 'enum'\r
+            self.match("enum")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T48\r
+\r
+\r
+\r
+    # $ANTLR start T49\r
+    def mT49(self, ):\r
+\r
+        try:\r
+            self.type = T49\r
+\r
+            # C.g:51:5: ( 'const' )\r
+            # C.g:51:7: 'const'\r
+            self.match("const")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T49\r
+\r
+\r
+\r
+    # $ANTLR start T50\r
+    def mT50(self, ):\r
+\r
+        try:\r
+            self.type = T50\r
+\r
+            # C.g:52:5: ( 'volatile' )\r
+            # C.g:52:7: 'volatile'\r
+            self.match("volatile")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T50\r
+\r
+\r
+\r
+    # $ANTLR start T51\r
+    def mT51(self, ):\r
+\r
+        try:\r
+            self.type = T51\r
+\r
+            # C.g:53:5: ( 'IN' )\r
+            # C.g:53:7: 'IN'\r
+            self.match("IN")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T51\r
+\r
+\r
+\r
+    # $ANTLR start T52\r
+    def mT52(self, ):\r
+\r
+        try:\r
+            self.type = T52\r
+\r
+            # C.g:54:5: ( 'OUT' )\r
+            # C.g:54:7: 'OUT'\r
+            self.match("OUT")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T52\r
+\r
+\r
+\r
+    # $ANTLR start T53\r
+    def mT53(self, ):\r
+\r
+        try:\r
+            self.type = T53\r
+\r
+            # C.g:55:5: ( 'OPTIONAL' )\r
+            # C.g:55:7: 'OPTIONAL'\r
+            self.match("OPTIONAL")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T53\r
+\r
+\r
+\r
+    # $ANTLR start T54\r
+    def mT54(self, ):\r
+\r
+        try:\r
+            self.type = T54\r
+\r
+            # C.g:56:5: ( 'CONST' )\r
+            # C.g:56:7: 'CONST'\r
+            self.match("CONST")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T54\r
+\r
+\r
+\r
+    # $ANTLR start T55\r
+    def mT55(self, ):\r
+\r
+        try:\r
+            self.type = T55\r
+\r
+            # C.g:57:5: ( 'UNALIGNED' )\r
+            # C.g:57:7: 'UNALIGNED'\r
+            self.match("UNALIGNED")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T55\r
+\r
+\r
+\r
+    # $ANTLR start T56\r
+    def mT56(self, ):\r
+\r
+        try:\r
+            self.type = T56\r
+\r
+            # C.g:58:5: ( 'VOLATILE' )\r
+            # C.g:58:7: 'VOLATILE'\r
+            self.match("VOLATILE")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T56\r
+\r
+\r
+\r
+    # $ANTLR start T57\r
+    def mT57(self, ):\r
+\r
+        try:\r
+            self.type = T57\r
+\r
+            # C.g:59:5: ( 'GLOBAL_REMOVE_IF_UNREFERENCED' )\r
+            # C.g:59:7: 'GLOBAL_REMOVE_IF_UNREFERENCED'\r
+            self.match("GLOBAL_REMOVE_IF_UNREFERENCED")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T57\r
+\r
+\r
+\r
+    # $ANTLR start T58\r
+    def mT58(self, ):\r
+\r
+        try:\r
+            self.type = T58\r
+\r
+            # C.g:60:5: ( 'EFIAPI' )\r
+            # C.g:60:7: 'EFIAPI'\r
+            self.match("EFIAPI")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T58\r
+\r
+\r
+\r
+    # $ANTLR start T59\r
+    def mT59(self, ):\r
+\r
+        try:\r
+            self.type = T59\r
+\r
+            # C.g:61:5: ( 'EFI_BOOTSERVICE' )\r
+            # C.g:61:7: 'EFI_BOOTSERVICE'\r
+            self.match("EFI_BOOTSERVICE")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T59\r
+\r
+\r
+\r
+    # $ANTLR start T60\r
+    def mT60(self, ):\r
+\r
+        try:\r
+            self.type = T60\r
+\r
+            # C.g:62:5: ( 'EFI_RUNTIMESERVICE' )\r
+            # C.g:62:7: 'EFI_RUNTIMESERVICE'\r
+            self.match("EFI_RUNTIMESERVICE")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T60\r
+\r
+\r
+\r
+    # $ANTLR start T61\r
+    def mT61(self, ):\r
+\r
+        try:\r
+            self.type = T61\r
+\r
+            # C.g:63:5: ( 'PACKED' )\r
+            # C.g:63:7: 'PACKED'\r
+            self.match("PACKED")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T61\r
+\r
+\r
+\r
+    # $ANTLR start T62\r
+    def mT62(self, ):\r
+\r
+        try:\r
+            self.type = T62\r
+\r
+            # C.g:64:5: ( '(' )\r
+            # C.g:64:7: '('\r
+            self.match(u'(')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T62\r
+\r
+\r
+\r
+    # $ANTLR start T63\r
+    def mT63(self, ):\r
+\r
+        try:\r
+            self.type = T63\r
+\r
+            # C.g:65:5: ( ')' )\r
+            # C.g:65:7: ')'\r
+            self.match(u')')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T63\r
+\r
+\r
+\r
+    # $ANTLR start T64\r
+    def mT64(self, ):\r
+\r
+        try:\r
+            self.type = T64\r
+\r
+            # C.g:66:5: ( '[' )\r
+            # C.g:66:7: '['\r
+            self.match(u'[')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T64\r
+\r
+\r
+\r
+    # $ANTLR start T65\r
+    def mT65(self, ):\r
+\r
+        try:\r
+            self.type = T65\r
+\r
+            # C.g:67:5: ( ']' )\r
+            # C.g:67:7: ']'\r
+            self.match(u']')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T65\r
+\r
+\r
+\r
+    # $ANTLR start T66\r
+    def mT66(self, ):\r
+\r
+        try:\r
+            self.type = T66\r
+\r
+            # C.g:68:5: ( '*' )\r
+            # C.g:68:7: '*'\r
+            self.match(u'*')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T66\r
+\r
+\r
+\r
+    # $ANTLR start T67\r
+    def mT67(self, ):\r
+\r
+        try:\r
+            self.type = T67\r
+\r
+            # C.g:69:5: ( '...' )\r
+            # C.g:69:7: '...'\r
+            self.match("...")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T67\r
+\r
+\r
+\r
+    # $ANTLR start T68\r
+    def mT68(self, ):\r
+\r
+        try:\r
+            self.type = T68\r
+\r
+            # C.g:70:5: ( '+' )\r
+            # C.g:70:7: '+'\r
+            self.match(u'+')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T68\r
+\r
+\r
+\r
+    # $ANTLR start T69\r
+    def mT69(self, ):\r
+\r
+        try:\r
+            self.type = T69\r
+\r
+            # C.g:71:5: ( '-' )\r
+            # C.g:71:7: '-'\r
+            self.match(u'-')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T69\r
+\r
+\r
+\r
+    # $ANTLR start T70\r
+    def mT70(self, ):\r
+\r
+        try:\r
+            self.type = T70\r
+\r
+            # C.g:72:5: ( '/' )\r
+            # C.g:72:7: '/'\r
+            self.match(u'/')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T70\r
+\r
+\r
+\r
+    # $ANTLR start T71\r
+    def mT71(self, ):\r
+\r
+        try:\r
+            self.type = T71\r
+\r
+            # C.g:73:5: ( '%' )\r
+            # C.g:73:7: '%'\r
+            self.match(u'%')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T71\r
+\r
+\r
+\r
+    # $ANTLR start T72\r
+    def mT72(self, ):\r
+\r
+        try:\r
+            self.type = T72\r
+\r
+            # C.g:74:5: ( '++' )\r
+            # C.g:74:7: '++'\r
+            self.match("++")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T72\r
+\r
+\r
+\r
+    # $ANTLR start T73\r
+    def mT73(self, ):\r
+\r
+        try:\r
+            self.type = T73\r
+\r
+            # C.g:75:5: ( '--' )\r
+            # C.g:75:7: '--'\r
+            self.match("--")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T73\r
+\r
+\r
+\r
+    # $ANTLR start T74\r
+    def mT74(self, ):\r
+\r
+        try:\r
+            self.type = T74\r
+\r
+            # C.g:76:5: ( 'sizeof' )\r
+            # C.g:76:7: 'sizeof'\r
+            self.match("sizeof")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T74\r
+\r
+\r
+\r
+    # $ANTLR start T75\r
+    def mT75(self, ):\r
+\r
+        try:\r
+            self.type = T75\r
+\r
+            # C.g:77:5: ( '.' )\r
+            # C.g:77:7: '.'\r
+            self.match(u'.')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T75\r
+\r
+\r
+\r
+    # $ANTLR start T76\r
+    def mT76(self, ):\r
+\r
+        try:\r
+            self.type = T76\r
+\r
+            # C.g:78:5: ( '->' )\r
+            # C.g:78:7: '->'\r
+            self.match("->")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T76\r
+\r
+\r
+\r
+    # $ANTLR start T77\r
+    def mT77(self, ):\r
+\r
+        try:\r
+            self.type = T77\r
+\r
+            # C.g:79:5: ( '&' )\r
+            # C.g:79:7: '&'\r
+            self.match(u'&')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T77\r
+\r
+\r
+\r
+    # $ANTLR start T78\r
+    def mT78(self, ):\r
+\r
+        try:\r
+            self.type = T78\r
+\r
+            # C.g:80:5: ( '~' )\r
+            # C.g:80:7: '~'\r
+            self.match(u'~')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T78\r
+\r
+\r
+\r
+    # $ANTLR start T79\r
+    def mT79(self, ):\r
+\r
+        try:\r
+            self.type = T79\r
+\r
+            # C.g:81:5: ( '!' )\r
+            # C.g:81:7: '!'\r
+            self.match(u'!')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T79\r
+\r
+\r
+\r
+    # $ANTLR start T80\r
+    def mT80(self, ):\r
+\r
+        try:\r
+            self.type = T80\r
+\r
+            # C.g:82:5: ( '*=' )\r
+            # C.g:82:7: '*='\r
+            self.match("*=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T80\r
+\r
+\r
+\r
+    # $ANTLR start T81\r
+    def mT81(self, ):\r
+\r
+        try:\r
+            self.type = T81\r
+\r
+            # C.g:83:5: ( '/=' )\r
+            # C.g:83:7: '/='\r
+            self.match("/=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T81\r
+\r
+\r
+\r
+    # $ANTLR start T82\r
+    def mT82(self, ):\r
+\r
+        try:\r
+            self.type = T82\r
+\r
+            # C.g:84:5: ( '%=' )\r
+            # C.g:84:7: '%='\r
+            self.match("%=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T82\r
+\r
+\r
+\r
+    # $ANTLR start T83\r
+    def mT83(self, ):\r
+\r
+        try:\r
+            self.type = T83\r
+\r
+            # C.g:85:5: ( '+=' )\r
+            # C.g:85:7: '+='\r
+            self.match("+=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T83\r
+\r
+\r
+\r
+    # $ANTLR start T84\r
+    def mT84(self, ):\r
+\r
+        try:\r
+            self.type = T84\r
+\r
+            # C.g:86:5: ( '-=' )\r
+            # C.g:86:7: '-='\r
+            self.match("-=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T84\r
+\r
+\r
+\r
+    # $ANTLR start T85\r
+    def mT85(self, ):\r
+\r
+        try:\r
+            self.type = T85\r
+\r
+            # C.g:87:5: ( '<<=' )\r
+            # C.g:87:7: '<<='\r
+            self.match("<<=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T85\r
+\r
+\r
+\r
+    # $ANTLR start T86\r
+    def mT86(self, ):\r
+\r
+        try:\r
+            self.type = T86\r
+\r
+            # C.g:88:5: ( '>>=' )\r
+            # C.g:88:7: '>>='\r
+            self.match(">>=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T86\r
+\r
+\r
+\r
+    # $ANTLR start T87\r
+    def mT87(self, ):\r
+\r
+        try:\r
+            self.type = T87\r
+\r
+            # C.g:89:5: ( '&=' )\r
+            # C.g:89:7: '&='\r
+            self.match("&=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T87\r
+\r
+\r
+\r
+    # $ANTLR start T88\r
+    def mT88(self, ):\r
+\r
+        try:\r
+            self.type = T88\r
+\r
+            # C.g:90:5: ( '^=' )\r
+            # C.g:90:7: '^='\r
+            self.match("^=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T88\r
+\r
+\r
+\r
+    # $ANTLR start T89\r
+    def mT89(self, ):\r
+\r
+        try:\r
+            self.type = T89\r
+\r
+            # C.g:91:5: ( '|=' )\r
+            # C.g:91:7: '|='\r
+            self.match("|=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T89\r
+\r
+\r
+\r
+    # $ANTLR start T90\r
+    def mT90(self, ):\r
+\r
+        try:\r
+            self.type = T90\r
+\r
+            # C.g:92:5: ( '?' )\r
+            # C.g:92:7: '?'\r
+            self.match(u'?')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T90\r
+\r
+\r
+\r
+    # $ANTLR start T91\r
+    def mT91(self, ):\r
+\r
+        try:\r
+            self.type = T91\r
+\r
+            # C.g:93:5: ( '||' )\r
+            # C.g:93:7: '||'\r
+            self.match("||")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T91\r
+\r
+\r
+\r
+    # $ANTLR start T92\r
+    def mT92(self, ):\r
+\r
+        try:\r
+            self.type = T92\r
+\r
+            # C.g:94:5: ( '&&' )\r
+            # C.g:94:7: '&&'\r
+            self.match("&&")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T92\r
+\r
+\r
+\r
+    # $ANTLR start T93\r
+    def mT93(self, ):\r
+\r
+        try:\r
+            self.type = T93\r
+\r
+            # C.g:95:5: ( '|' )\r
+            # C.g:95:7: '|'\r
+            self.match(u'|')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T93\r
+\r
+\r
+\r
+    # $ANTLR start T94\r
+    def mT94(self, ):\r
+\r
+        try:\r
+            self.type = T94\r
+\r
+            # C.g:96:5: ( '^' )\r
+            # C.g:96:7: '^'\r
+            self.match(u'^')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T94\r
+\r
+\r
+\r
+    # $ANTLR start T95\r
+    def mT95(self, ):\r
+\r
+        try:\r
+            self.type = T95\r
+\r
+            # C.g:97:5: ( '==' )\r
+            # C.g:97:7: '=='\r
+            self.match("==")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T95\r
+\r
+\r
+\r
+    # $ANTLR start T96\r
+    def mT96(self, ):\r
+\r
+        try:\r
+            self.type = T96\r
+\r
+            # C.g:98:5: ( '!=' )\r
+            # C.g:98:7: '!='\r
+            self.match("!=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T96\r
+\r
+\r
+\r
+    # $ANTLR start T97\r
+    def mT97(self, ):\r
+\r
+        try:\r
+            self.type = T97\r
+\r
+            # C.g:99:5: ( '<' )\r
+            # C.g:99:7: '<'\r
+            self.match(u'<')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T97\r
+\r
+\r
+\r
+    # $ANTLR start T98\r
+    def mT98(self, ):\r
+\r
+        try:\r
+            self.type = T98\r
+\r
+            # C.g:100:5: ( '>' )\r
+            # C.g:100:7: '>'\r
+            self.match(u'>')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T98\r
+\r
+\r
+\r
+    # $ANTLR start T99\r
+    def mT99(self, ):\r
+\r
+        try:\r
+            self.type = T99\r
+\r
+            # C.g:101:5: ( '<=' )\r
+            # C.g:101:7: '<='\r
+            self.match("<=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T99\r
+\r
+\r
+\r
+    # $ANTLR start T100\r
+    def mT100(self, ):\r
+\r
+        try:\r
+            self.type = T100\r
+\r
+            # C.g:102:6: ( '>=' )\r
+            # C.g:102:8: '>='\r
+            self.match(">=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T100\r
+\r
+\r
+\r
+    # $ANTLR start T101\r
+    def mT101(self, ):\r
+\r
+        try:\r
+            self.type = T101\r
+\r
+            # C.g:103:6: ( '<<' )\r
+            # C.g:103:8: '<<'\r
+            self.match("<<")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T101\r
+\r
+\r
+\r
+    # $ANTLR start T102\r
+    def mT102(self, ):\r
+\r
+        try:\r
+            self.type = T102\r
+\r
+            # C.g:104:6: ( '>>' )\r
+            # C.g:104:8: '>>'\r
+            self.match(">>")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T102\r
+\r
+\r
+\r
+    # $ANTLR start T103\r
+    def mT103(self, ):\r
+\r
+        try:\r
+            self.type = T103\r
+\r
+            # C.g:105:6: ( '__asm__' )\r
+            # C.g:105:8: '__asm__'\r
+            self.match("__asm__")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T103\r
+\r
+\r
+\r
+    # $ANTLR start T104\r
+    def mT104(self, ):\r
+\r
+        try:\r
+            self.type = T104\r
+\r
+            # C.g:106:6: ( '_asm' )\r
+            # C.g:106:8: '_asm'\r
+            self.match("_asm")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T104\r
+\r
+\r
+\r
+    # $ANTLR start T105\r
+    def mT105(self, ):\r
+\r
+        try:\r
+            self.type = T105\r
+\r
+            # C.g:107:6: ( '__asm' )\r
+            # C.g:107:8: '__asm'\r
+            self.match("__asm")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T105\r
+\r
+\r
+\r
+    # $ANTLR start T106\r
+    def mT106(self, ):\r
+\r
+        try:\r
+            self.type = T106\r
+\r
+            # C.g:108:6: ( 'case' )\r
+            # C.g:108:8: 'case'\r
+            self.match("case")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T106\r
+\r
+\r
+\r
+    # $ANTLR start T107\r
+    def mT107(self, ):\r
+\r
+        try:\r
+            self.type = T107\r
+\r
+            # C.g:109:6: ( 'default' )\r
+            # C.g:109:8: 'default'\r
+            self.match("default")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T107\r
+\r
+\r
+\r
+    # $ANTLR start T108\r
+    def mT108(self, ):\r
+\r
+        try:\r
+            self.type = T108\r
+\r
+            # C.g:110:6: ( 'if' )\r
+            # C.g:110:8: 'if'\r
+            self.match("if")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T108\r
+\r
+\r
+\r
+    # $ANTLR start T109\r
+    def mT109(self, ):\r
+\r
+        try:\r
+            self.type = T109\r
+\r
+            # C.g:111:6: ( 'else' )\r
+            # C.g:111:8: 'else'\r
+            self.match("else")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T109\r
+\r
+\r
+\r
+    # $ANTLR start T110\r
+    def mT110(self, ):\r
+\r
+        try:\r
+            self.type = T110\r
+\r
+            # C.g:112:6: ( 'switch' )\r
+            # C.g:112:8: 'switch'\r
+            self.match("switch")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T110\r
+\r
+\r
+\r
+    # $ANTLR start T111\r
+    def mT111(self, ):\r
+\r
+        try:\r
+            self.type = T111\r
+\r
+            # C.g:113:6: ( 'while' )\r
+            # C.g:113:8: 'while'\r
+            self.match("while")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T111\r
+\r
+\r
+\r
+    # $ANTLR start T112\r
+    def mT112(self, ):\r
+\r
+        try:\r
+            self.type = T112\r
+\r
+            # C.g:114:6: ( 'do' )\r
+            # C.g:114:8: 'do'\r
+            self.match("do")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T112\r
+\r
+\r
+\r
+    # $ANTLR start T113\r
+    def mT113(self, ):\r
+\r
+        try:\r
+            self.type = T113\r
+\r
+            # C.g:115:6: ( 'for' )\r
+            # C.g:115:8: 'for'\r
+            self.match("for")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T113\r
+\r
+\r
+\r
+    # $ANTLR start T114\r
+    def mT114(self, ):\r
+\r
+        try:\r
+            self.type = T114\r
+\r
+            # C.g:116:6: ( 'goto' )\r
+            # C.g:116:8: 'goto'\r
+            self.match("goto")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T114\r
+\r
+\r
+\r
+    # $ANTLR start T115\r
+    def mT115(self, ):\r
+\r
+        try:\r
+            self.type = T115\r
+\r
+            # C.g:117:6: ( 'continue' )\r
+            # C.g:117:8: 'continue'\r
+            self.match("continue")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T115\r
+\r
+\r
+\r
+    # $ANTLR start T116\r
+    def mT116(self, ):\r
+\r
+        try:\r
+            self.type = T116\r
+\r
+            # C.g:118:6: ( 'break' )\r
+            # C.g:118:8: 'break'\r
+            self.match("break")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T116\r
+\r
+\r
+\r
+    # $ANTLR start T117\r
+    def mT117(self, ):\r
+\r
+        try:\r
+            self.type = T117\r
+\r
+            # C.g:119:6: ( 'return' )\r
+            # C.g:119:8: 'return'\r
+            self.match("return")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T117\r
+\r
+\r
+\r
+    # $ANTLR start IDENTIFIER\r
+    def mIDENTIFIER(self, ):\r
+\r
+        try:\r
+            self.type = IDENTIFIER\r
+\r
+            # C.g:586:2: ( LETTER ( LETTER | '0' .. '9' )* )\r
+            # C.g:586:4: LETTER ( LETTER | '0' .. '9' )*\r
+            self.mLETTER()\r
+\r
+            # C.g:586:11: ( LETTER | '0' .. '9' )*\r
+            while True: #loop1\r
+                alt1 = 2\r
+                LA1_0 = self.input.LA(1)\r
+\r
+                if (LA1_0 == u'$' or (u'0' <= LA1_0 <= u'9') or (u'A' <= LA1_0 <= u'Z') or LA1_0 == u'_' or (u'a' <= LA1_0 <= u'z')) :\r
+                    alt1 = 1\r
+\r
+\r
+                if alt1 == 1:\r
+                    # C.g:\r
+                    if self.input.LA(1) == u'$' or (u'0' <= self.input.LA(1) <= u'9') or (u'A' <= self.input.LA(1) <= u'Z') or self.input.LA(1) == u'_' or (u'a' <= self.input.LA(1) <= u'z'):\r
+                        self.input.consume();\r
+\r
+                    else:\r
+                        mse = MismatchedSetException(None, self.input)\r
+                        self.recover(mse)\r
+                        raise mse\r
+\r
+\r
+\r
+\r
+                else:\r
+                    break #loop1\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end IDENTIFIER\r
+\r
+\r
+\r
+    # $ANTLR start LETTER\r
+    def mLETTER(self, ):\r
+\r
+        try:\r
+            # C.g:591:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' )\r
+            # C.g:\r
+            if self.input.LA(1) == u'$' or (u'A' <= self.input.LA(1) <= u'Z') or self.input.LA(1) == u'_' or (u'a' <= self.input.LA(1) <= u'z'):\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end LETTER\r
+\r
+\r
+\r
+    # $ANTLR start CHARACTER_LITERAL\r
+    def mCHARACTER_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = CHARACTER_LITERAL\r
+\r
+            # C.g:598:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )\r
+            # C.g:598:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''\r
+            # C.g:598:9: ( 'L' )?\r
+            alt2 = 2\r
+            LA2_0 = self.input.LA(1)\r
+\r
+            if (LA2_0 == u'L') :\r
+                alt2 = 1\r
+            if alt2 == 1:\r
+                # C.g:598:10: 'L'\r
+                self.match(u'L')\r
+\r
+\r
+\r
+\r
+            self.match(u'\'')\r
+\r
+            # C.g:598:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )\r
+            alt3 = 2\r
+            LA3_0 = self.input.LA(1)\r
+\r
+            if (LA3_0 == u'\\') :\r
+                alt3 = 1\r
+            elif ((u'\u0000' <= LA3_0 <= u'&') or (u'(' <= LA3_0 <= u'[') or (u']' <= LA3_0 <= u'\uFFFE')) :\r
+                alt3 = 2\r
+            else:\r
+                nvae = NoViableAltException("598:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt3 == 1:\r
+                # C.g:598:23: EscapeSequence\r
+                self.mEscapeSequence()\r
+\r
+\r
+\r
+            elif alt3 == 2:\r
+                # C.g:598:40: ~ ( '\\'' | '\\\\' )\r
+                if (u'\u0000' <= self.input.LA(1) <= u'&') or (u'(' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'):\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+            self.match(u'\'')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end CHARACTER_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start STRING_LITERAL\r
+    def mSTRING_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = STRING_LITERAL\r
+\r
+            # C.g:602:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )\r
+            # C.g:602:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'\r
+            # C.g:602:8: ( 'L' )?\r
+            alt4 = 2\r
+            LA4_0 = self.input.LA(1)\r
+\r
+            if (LA4_0 == u'L') :\r
+                alt4 = 1\r
+            if alt4 == 1:\r
+                # C.g:602:9: 'L'\r
+                self.match(u'L')\r
+\r
+\r
+\r
+\r
+            self.match(u'"')\r
+\r
+            # C.g:602:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*\r
+            while True: #loop5\r
+                alt5 = 3\r
+                LA5_0 = self.input.LA(1)\r
+\r
+                if (LA5_0 == u'\\') :\r
+                    alt5 = 1\r
+                elif ((u'\u0000' <= LA5_0 <= u'!') or (u'#' <= LA5_0 <= u'[') or (u']' <= LA5_0 <= u'\uFFFE')) :\r
+                    alt5 = 2\r
+\r
+\r
+                if alt5 == 1:\r
+                    # C.g:602:21: EscapeSequence\r
+                    self.mEscapeSequence()\r
+\r
+\r
+\r
+                elif alt5 == 2:\r
+                    # C.g:602:38: ~ ( '\\\\' | '\"' )\r
+                    if (u'\u0000' <= self.input.LA(1) <= u'!') or (u'#' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'):\r
+                        self.input.consume();\r
+\r
+                    else:\r
+                        mse = MismatchedSetException(None, self.input)\r
+                        self.recover(mse)\r
+                        raise mse\r
+\r
+\r
+\r
+\r
+                else:\r
+                    break #loop5\r
+\r
+\r
+            self.match(u'"')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end STRING_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start HEX_LITERAL\r
+    def mHEX_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = HEX_LITERAL\r
+\r
+            # C.g:605:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )\r
+            # C.g:605:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?\r
+            self.match(u'0')\r
+\r
+            if self.input.LA(1) == u'X' or self.input.LA(1) == u'x':\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+            # C.g:605:29: ( HexDigit )+\r
+            cnt6 = 0\r
+            while True: #loop6\r
+                alt6 = 2\r
+                LA6_0 = self.input.LA(1)\r
+\r
+                if ((u'0' <= LA6_0 <= u'9') or (u'A' <= LA6_0 <= u'F') or (u'a' <= LA6_0 <= u'f')) :\r
+                    alt6 = 1\r
+\r
+\r
+                if alt6 == 1:\r
+                    # C.g:605:29: HexDigit\r
+                    self.mHexDigit()\r
+\r
+\r
+\r
+                else:\r
+                    if cnt6 >= 1:\r
+                        break #loop6\r
+\r
+                    eee = EarlyExitException(6, self.input)\r
+                    raise eee\r
+\r
+                cnt6 += 1\r
+\r
+\r
+            # C.g:605:39: ( IntegerTypeSuffix )?\r
+            alt7 = 2\r
+            LA7_0 = self.input.LA(1)\r
+\r
+            if (LA7_0 == u'L' or LA7_0 == u'U' or LA7_0 == u'l' or LA7_0 == u'u') :\r
+                alt7 = 1\r
+            if alt7 == 1:\r
+                # C.g:605:39: IntegerTypeSuffix\r
+                self.mIntegerTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end HEX_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start DECIMAL_LITERAL\r
+    def mDECIMAL_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = DECIMAL_LITERAL\r
+\r
+            # C.g:607:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )\r
+            # C.g:607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?\r
+            # C.g:607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )\r
+            alt9 = 2\r
+            LA9_0 = self.input.LA(1)\r
+\r
+            if (LA9_0 == u'0') :\r
+                alt9 = 1\r
+            elif ((u'1' <= LA9_0 <= u'9')) :\r
+                alt9 = 2\r
+            else:\r
+                nvae = NoViableAltException("607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt9 == 1:\r
+                # C.g:607:20: '0'\r
+                self.match(u'0')\r
+\r
+\r
+\r
+            elif alt9 == 2:\r
+                # C.g:607:26: '1' .. '9' ( '0' .. '9' )*\r
+                self.matchRange(u'1', u'9')\r
+\r
+                # C.g:607:35: ( '0' .. '9' )*\r
+                while True: #loop8\r
+                    alt8 = 2\r
+                    LA8_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA8_0 <= u'9')) :\r
+                        alt8 = 1\r
+\r
+\r
+                    if alt8 == 1:\r
+                        # C.g:607:35: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop8\r
+\r
+\r
+\r
+\r
+\r
+            # C.g:607:46: ( IntegerTypeSuffix )?\r
+            alt10 = 2\r
+            LA10_0 = self.input.LA(1)\r
+\r
+            if (LA10_0 == u'L' or LA10_0 == u'U' or LA10_0 == u'l' or LA10_0 == u'u') :\r
+                alt10 = 1\r
+            if alt10 == 1:\r
+                # C.g:607:46: IntegerTypeSuffix\r
+                self.mIntegerTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end DECIMAL_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start OCTAL_LITERAL\r
+    def mOCTAL_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = OCTAL_LITERAL\r
+\r
+            # C.g:609:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )\r
+            # C.g:609:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?\r
+            self.match(u'0')\r
+\r
+            # C.g:609:21: ( '0' .. '7' )+\r
+            cnt11 = 0\r
+            while True: #loop11\r
+                alt11 = 2\r
+                LA11_0 = self.input.LA(1)\r
+\r
+                if ((u'0' <= LA11_0 <= u'7')) :\r
+                    alt11 = 1\r
+\r
+\r
+                if alt11 == 1:\r
+                    # C.g:609:22: '0' .. '7'\r
+                    self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+                else:\r
+                    if cnt11 >= 1:\r
+                        break #loop11\r
+\r
+                    eee = EarlyExitException(11, self.input)\r
+                    raise eee\r
+\r
+                cnt11 += 1\r
+\r
+\r
+            # C.g:609:33: ( IntegerTypeSuffix )?\r
+            alt12 = 2\r
+            LA12_0 = self.input.LA(1)\r
+\r
+            if (LA12_0 == u'L' or LA12_0 == u'U' or LA12_0 == u'l' or LA12_0 == u'u') :\r
+                alt12 = 1\r
+            if alt12 == 1:\r
+                # C.g:609:33: IntegerTypeSuffix\r
+                self.mIntegerTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end OCTAL_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start HexDigit\r
+    def mHexDigit(self, ):\r
+\r
+        try:\r
+            # C.g:612:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )\r
+            # C.g:612:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )\r
+            if (u'0' <= self.input.LA(1) <= u'9') or (u'A' <= self.input.LA(1) <= u'F') or (u'a' <= self.input.LA(1) <= u'f'):\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end HexDigit\r
+\r
+\r
+\r
+    # $ANTLR start IntegerTypeSuffix\r
+    def mIntegerTypeSuffix(self, ):\r
+\r
+        try:\r
+            # C.g:616:2: ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) )\r
+            alt13 = 4\r
+            LA13_0 = self.input.LA(1)\r
+\r
+            if (LA13_0 == u'U' or LA13_0 == u'u') :\r
+                LA13_1 = self.input.LA(2)\r
+\r
+                if (LA13_1 == u'L' or LA13_1 == u'l') :\r
+                    LA13_3 = self.input.LA(3)\r
+\r
+                    if (LA13_3 == u'L' or LA13_3 == u'l') :\r
+                        alt13 = 4\r
+                    else:\r
+                        alt13 = 3\r
+                else:\r
+                    alt13 = 1\r
+            elif (LA13_0 == u'L' or LA13_0 == u'l') :\r
+                alt13 = 2\r
+            else:\r
+                nvae = NoViableAltException("614:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) );", 13, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt13 == 1:\r
+                # C.g:616:4: ( 'u' | 'U' )\r
+                if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+            elif alt13 == 2:\r
+                # C.g:617:4: ( 'l' | 'L' )\r
+                if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+            elif alt13 == 3:\r
+                # C.g:618:4: ( 'u' | 'U' ) ( 'l' | 'L' )\r
+                if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+                if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+            elif alt13 == 4:\r
+                # C.g:619:4: ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' )\r
+                if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+                if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+                if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end IntegerTypeSuffix\r
+\r
+\r
+\r
+    # $ANTLR start FLOATING_POINT_LITERAL\r
+    def mFLOATING_POINT_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = FLOATING_POINT_LITERAL\r
+\r
+            # C.g:623:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix )\r
+            alt25 = 4\r
+            alt25 = self.dfa25.predict(self.input)\r
+            if alt25 == 1:\r
+                # C.g:623:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?\r
+                # C.g:623:9: ( '0' .. '9' )+\r
+                cnt14 = 0\r
+                while True: #loop14\r
+                    alt14 = 2\r
+                    LA14_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA14_0 <= u'9')) :\r
+                        alt14 = 1\r
+\r
+\r
+                    if alt14 == 1:\r
+                        # C.g:623:10: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        if cnt14 >= 1:\r
+                            break #loop14\r
+\r
+                        eee = EarlyExitException(14, self.input)\r
+                        raise eee\r
+\r
+                    cnt14 += 1\r
+\r
+\r
+                self.match(u'.')\r
+\r
+                # C.g:623:25: ( '0' .. '9' )*\r
+                while True: #loop15\r
+                    alt15 = 2\r
+                    LA15_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA15_0 <= u'9')) :\r
+                        alt15 = 1\r
+\r
+\r
+                    if alt15 == 1:\r
+                        # C.g:623:26: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop15\r
+\r
+\r
+                # C.g:623:37: ( Exponent )?\r
+                alt16 = 2\r
+                LA16_0 = self.input.LA(1)\r
+\r
+                if (LA16_0 == u'E' or LA16_0 == u'e') :\r
+                    alt16 = 1\r
+                if alt16 == 1:\r
+                    # C.g:623:37: Exponent\r
+                    self.mExponent()\r
+\r
+\r
+\r
+\r
+                # C.g:623:47: ( FloatTypeSuffix )?\r
+                alt17 = 2\r
+                LA17_0 = self.input.LA(1)\r
+\r
+                if (LA17_0 == u'D' or LA17_0 == u'F' or LA17_0 == u'd' or LA17_0 == u'f') :\r
+                    alt17 = 1\r
+                if alt17 == 1:\r
+                    # C.g:623:47: FloatTypeSuffix\r
+                    self.mFloatTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt25 == 2:\r
+                # C.g:624:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?\r
+                self.match(u'.')\r
+\r
+                # C.g:624:13: ( '0' .. '9' )+\r
+                cnt18 = 0\r
+                while True: #loop18\r
+                    alt18 = 2\r
+                    LA18_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA18_0 <= u'9')) :\r
+                        alt18 = 1\r
+\r
+\r
+                    if alt18 == 1:\r
+                        # C.g:624:14: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        if cnt18 >= 1:\r
+                            break #loop18\r
+\r
+                        eee = EarlyExitException(18, self.input)\r
+                        raise eee\r
+\r
+                    cnt18 += 1\r
+\r
+\r
+                # C.g:624:25: ( Exponent )?\r
+                alt19 = 2\r
+                LA19_0 = self.input.LA(1)\r
+\r
+                if (LA19_0 == u'E' or LA19_0 == u'e') :\r
+                    alt19 = 1\r
+                if alt19 == 1:\r
+                    # C.g:624:25: Exponent\r
+                    self.mExponent()\r
+\r
+\r
+\r
+\r
+                # C.g:624:35: ( FloatTypeSuffix )?\r
+                alt20 = 2\r
+                LA20_0 = self.input.LA(1)\r
+\r
+                if (LA20_0 == u'D' or LA20_0 == u'F' or LA20_0 == u'd' or LA20_0 == u'f') :\r
+                    alt20 = 1\r
+                if alt20 == 1:\r
+                    # C.g:624:35: FloatTypeSuffix\r
+                    self.mFloatTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt25 == 3:\r
+                # C.g:625:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?\r
+                # C.g:625:9: ( '0' .. '9' )+\r
+                cnt21 = 0\r
+                while True: #loop21\r
+                    alt21 = 2\r
+                    LA21_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA21_0 <= u'9')) :\r
+                        alt21 = 1\r
+\r
+\r
+                    if alt21 == 1:\r
+                        # C.g:625:10: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        if cnt21 >= 1:\r
+                            break #loop21\r
+\r
+                        eee = EarlyExitException(21, self.input)\r
+                        raise eee\r
+\r
+                    cnt21 += 1\r
+\r
+\r
+                self.mExponent()\r
+\r
+                # C.g:625:30: ( FloatTypeSuffix )?\r
+                alt22 = 2\r
+                LA22_0 = self.input.LA(1)\r
+\r
+                if (LA22_0 == u'D' or LA22_0 == u'F' or LA22_0 == u'd' or LA22_0 == u'f') :\r
+                    alt22 = 1\r
+                if alt22 == 1:\r
+                    # C.g:625:30: FloatTypeSuffix\r
+                    self.mFloatTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt25 == 4:\r
+                # C.g:626:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix\r
+                # C.g:626:9: ( '0' .. '9' )+\r
+                cnt23 = 0\r
+                while True: #loop23\r
+                    alt23 = 2\r
+                    LA23_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA23_0 <= u'9')) :\r
+                        alt23 = 1\r
+\r
+\r
+                    if alt23 == 1:\r
+                        # C.g:626:10: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        if cnt23 >= 1:\r
+                            break #loop23\r
+\r
+                        eee = EarlyExitException(23, self.input)\r
+                        raise eee\r
+\r
+                    cnt23 += 1\r
+\r
+\r
+                # C.g:626:21: ( Exponent )?\r
+                alt24 = 2\r
+                LA24_0 = self.input.LA(1)\r
+\r
+                if (LA24_0 == u'E' or LA24_0 == u'e') :\r
+                    alt24 = 1\r
+                if alt24 == 1:\r
+                    # C.g:626:21: Exponent\r
+                    self.mExponent()\r
+\r
+\r
+\r
+\r
+                self.mFloatTypeSuffix()\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end FLOATING_POINT_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start Exponent\r
+    def mExponent(self, ):\r
+\r
+        try:\r
+            # C.g:630:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )\r
+            # C.g:630:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+\r
+            if self.input.LA(1) == u'E' or self.input.LA(1) == u'e':\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+            # C.g:630:22: ( '+' | '-' )?\r
+            alt26 = 2\r
+            LA26_0 = self.input.LA(1)\r
+\r
+            if (LA26_0 == u'+' or LA26_0 == u'-') :\r
+                alt26 = 1\r
+            if alt26 == 1:\r
+                # C.g:\r
+                if self.input.LA(1) == u'+' or self.input.LA(1) == u'-':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+            # C.g:630:33: ( '0' .. '9' )+\r
+            cnt27 = 0\r
+            while True: #loop27\r
+                alt27 = 2\r
+                LA27_0 = self.input.LA(1)\r
+\r
+                if ((u'0' <= LA27_0 <= u'9')) :\r
+                    alt27 = 1\r
+\r
+\r
+                if alt27 == 1:\r
+                    # C.g:630:34: '0' .. '9'\r
+                    self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                else:\r
+                    if cnt27 >= 1:\r
+                        break #loop27\r
+\r
+                    eee = EarlyExitException(27, self.input)\r
+                    raise eee\r
+\r
+                cnt27 += 1\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end Exponent\r
+\r
+\r
+\r
+    # $ANTLR start FloatTypeSuffix\r
+    def mFloatTypeSuffix(self, ):\r
+\r
+        try:\r
+            # C.g:633:17: ( ( 'f' | 'F' | 'd' | 'D' ) )\r
+            # C.g:633:19: ( 'f' | 'F' | 'd' | 'D' )\r
+            if self.input.LA(1) == u'D' or self.input.LA(1) == u'F' or self.input.LA(1) == u'd' or self.input.LA(1) == u'f':\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end FloatTypeSuffix\r
+\r
+\r
+\r
+    # $ANTLR start EscapeSequence\r
+    def mEscapeSequence(self, ):\r
+\r
+        try:\r
+            # C.g:637:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )\r
+            alt28 = 2\r
+            LA28_0 = self.input.LA(1)\r
+\r
+            if (LA28_0 == u'\\') :\r
+                LA28_1 = self.input.LA(2)\r
+\r
+                if (LA28_1 == u'"' or LA28_1 == u'\'' or LA28_1 == u'\\' or LA28_1 == u'b' or LA28_1 == u'f' or LA28_1 == u'n' or LA28_1 == u'r' or LA28_1 == u't') :\r
+                    alt28 = 1\r
+                elif ((u'0' <= LA28_1 <= u'7')) :\r
+                    alt28 = 2\r
+                else:\r
+                    nvae = NoViableAltException("635:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input)\r
+\r
+                    raise nvae\r
+\r
+            else:\r
+                nvae = NoViableAltException("635:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt28 == 1:\r
+                # C.g:637:8: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )\r
+                self.match(u'\\')\r
+\r
+                if self.input.LA(1) == u'"' or self.input.LA(1) == u'\'' or self.input.LA(1) == u'\\' or self.input.LA(1) == u'b' or self.input.LA(1) == u'f' or self.input.LA(1) == u'n' or self.input.LA(1) == u'r' or self.input.LA(1) == u't':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+            elif alt28 == 2:\r
+                # C.g:638:9: OctalEscape\r
+                self.mOctalEscape()\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end EscapeSequence\r
+\r
+\r
+\r
+    # $ANTLR start OctalEscape\r
+    def mOctalEscape(self, ):\r
+\r
+        try:\r
+            # C.g:643:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )\r
+            alt29 = 3\r
+            LA29_0 = self.input.LA(1)\r
+\r
+            if (LA29_0 == u'\\') :\r
+                LA29_1 = self.input.LA(2)\r
+\r
+                if ((u'0' <= LA29_1 <= u'3')) :\r
+                    LA29_2 = self.input.LA(3)\r
+\r
+                    if ((u'0' <= LA29_2 <= u'7')) :\r
+                        LA29_4 = self.input.LA(4)\r
+\r
+                        if ((u'0' <= LA29_4 <= u'7')) :\r
+                            alt29 = 1\r
+                        else:\r
+                            alt29 = 2\r
+                    else:\r
+                        alt29 = 3\r
+                elif ((u'4' <= LA29_1 <= u'7')) :\r
+                    LA29_3 = self.input.LA(3)\r
+\r
+                    if ((u'0' <= LA29_3 <= u'7')) :\r
+                        alt29 = 2\r
+                    else:\r
+                        alt29 = 3\r
+                else:\r
+                    nvae = NoViableAltException("641:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input)\r
+\r
+                    raise nvae\r
+\r
+            else:\r
+                nvae = NoViableAltException("641:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt29 == 1:\r
+                # C.g:643:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )\r
+                self.match(u'\\')\r
+\r
+                # C.g:643:14: ( '0' .. '3' )\r
+                # C.g:643:15: '0' .. '3'\r
+                self.matchRange(u'0', u'3')\r
+\r
+\r
+\r
+\r
+                # C.g:643:25: ( '0' .. '7' )\r
+                # C.g:643:26: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+                # C.g:643:36: ( '0' .. '7' )\r
+                # C.g:643:37: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt29 == 2:\r
+                # C.g:644:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )\r
+                self.match(u'\\')\r
+\r
+                # C.g:644:14: ( '0' .. '7' )\r
+                # C.g:644:15: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+                # C.g:644:25: ( '0' .. '7' )\r
+                # C.g:644:26: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt29 == 3:\r
+                # C.g:645:9: '\\\\' ( '0' .. '7' )\r
+                self.match(u'\\')\r
+\r
+                # C.g:645:14: ( '0' .. '7' )\r
+                # C.g:645:15: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end OctalEscape\r
+\r
+\r
+\r
+    # $ANTLR start UnicodeEscape\r
+    def mUnicodeEscape(self, ):\r
+\r
+        try:\r
+            # C.g:650:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )\r
+            # C.g:650:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit\r
+            self.match(u'\\')\r
+\r
+            self.match(u'u')\r
+\r
+            self.mHexDigit()\r
+\r
+            self.mHexDigit()\r
+\r
+            self.mHexDigit()\r
+\r
+            self.mHexDigit()\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end UnicodeEscape\r
+\r
+\r
+\r
+    # $ANTLR start WS\r
+    def mWS(self, ):\r
+\r
+        try:\r
+            self.type = WS\r
+\r
+            # C.g:653:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )\r
+            # C.g:653:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' )\r
+            if (u'\t' <= self.input.LA(1) <= u'\n') or (u'\f' <= self.input.LA(1) <= u'\r') or self.input.LA(1) == u' ':\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end WS\r
+\r
+\r
+\r
+    # $ANTLR start BS\r
+    def mBS(self, ):\r
+\r
+        try:\r
+            self.type = BS\r
+\r
+            # C.g:657:5: ( ( '\\\\' ) )\r
+            # C.g:657:7: ( '\\\\' )\r
+            # C.g:657:7: ( '\\\\' )\r
+            # C.g:657:8: '\\\\'\r
+            self.match(u'\\')\r
+\r
+\r
+\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end BS\r
+\r
+\r
+\r
+    # $ANTLR start UnicodeVocabulary\r
+    def mUnicodeVocabulary(self, ):\r
+\r
+        try:\r
+            self.type = UnicodeVocabulary\r
+\r
+            # C.g:665:5: ( '\\u0003' .. '\\uFFFE' )\r
+            # C.g:665:7: '\\u0003' .. '\\uFFFE'\r
+            self.matchRange(u'\u0003', u'\uFFFE')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end UnicodeVocabulary\r
+\r
+\r
+\r
+    # $ANTLR start COMMENT\r
+    def mCOMMENT(self, ):\r
+\r
+        try:\r
+            self.type = COMMENT\r
+\r
+            # C.g:668:5: ( '/*' ( options {greedy=false; } : . )* '*/' )\r
+            # C.g:668:9: '/*' ( options {greedy=false; } : . )* '*/'\r
+            self.match("/*")\r
+\r
+\r
+            # C.g:668:14: ( options {greedy=false; } : . )*\r
+            while True: #loop30\r
+                alt30 = 2\r
+                LA30_0 = self.input.LA(1)\r
+\r
+                if (LA30_0 == u'*') :\r
+                    LA30_1 = self.input.LA(2)\r
+\r
+                    if (LA30_1 == u'/') :\r
+                        alt30 = 2\r
+                    elif ((u'\u0000' <= LA30_1 <= u'.') or (u'0' <= LA30_1 <= u'\uFFFE')) :\r
+                        alt30 = 1\r
+\r
+\r
+                elif ((u'\u0000' <= LA30_0 <= u')') or (u'+' <= LA30_0 <= u'\uFFFE')) :\r
+                    alt30 = 1\r
+\r
+\r
+                if alt30 == 1:\r
+                    # C.g:668:42: .\r
+                    self.matchAny()\r
+\r
+\r
+\r
+                else:\r
+                    break #loop30\r
+\r
+\r
+            self.match("*/")\r
+\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end COMMENT\r
+\r
+\r
+\r
+    # $ANTLR start LINE_COMMENT\r
+    def mLINE_COMMENT(self, ):\r
+\r
+        try:\r
+            self.type = LINE_COMMENT\r
+\r
+            # C.g:673:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )\r
+            # C.g:673:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'\r
+            self.match("//")\r
+\r
+\r
+            # C.g:673:12: (~ ( '\\n' | '\\r' ) )*\r
+            while True: #loop31\r
+                alt31 = 2\r
+                LA31_0 = self.input.LA(1)\r
+\r
+                if ((u'\u0000' <= LA31_0 <= u'\t') or (u'\u000B' <= LA31_0 <= u'\f') or (u'\u000E' <= LA31_0 <= u'\uFFFE')) :\r
+                    alt31 = 1\r
+\r
+\r
+                if alt31 == 1:\r
+                    # C.g:673:12: ~ ( '\\n' | '\\r' )\r
+                    if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'):\r
+                        self.input.consume();\r
+\r
+                    else:\r
+                        mse = MismatchedSetException(None, self.input)\r
+                        self.recover(mse)\r
+                        raise mse\r
+\r
+\r
+\r
+\r
+                else:\r
+                    break #loop31\r
+\r
+\r
+            # C.g:673:26: ( '\\r' )?\r
+            alt32 = 2\r
+            LA32_0 = self.input.LA(1)\r
+\r
+            if (LA32_0 == u'\r') :\r
+                alt32 = 1\r
+            if alt32 == 1:\r
+                # C.g:673:26: '\\r'\r
+                self.match(u'\r')\r
+\r
+\r
+\r
+\r
+            self.match(u'\n')\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end LINE_COMMENT\r
+\r
+\r
+\r
+    # $ANTLR start LINE_COMMAND\r
+    def mLINE_COMMAND(self, ):\r
+\r
+        try:\r
+            self.type = LINE_COMMAND\r
+\r
+            # C.g:678:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )\r
+            # C.g:678:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'\r
+            self.match(u'#')\r
+\r
+            # C.g:678:11: (~ ( '\\n' | '\\r' ) )*\r
+            while True: #loop33\r
+                alt33 = 2\r
+                LA33_0 = self.input.LA(1)\r
+\r
+                if ((u'\u0000' <= LA33_0 <= u'\t') or (u'\u000B' <= LA33_0 <= u'\f') or (u'\u000E' <= LA33_0 <= u'\uFFFE')) :\r
+                    alt33 = 1\r
+\r
+\r
+                if alt33 == 1:\r
+                    # C.g:678:11: ~ ( '\\n' | '\\r' )\r
+                    if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'):\r
+                        self.input.consume();\r
+\r
+                    else:\r
+                        mse = MismatchedSetException(None, self.input)\r
+                        self.recover(mse)\r
+                        raise mse\r
+\r
+\r
+\r
+\r
+                else:\r
+                    break #loop33\r
+\r
+\r
+            # C.g:678:25: ( '\\r' )?\r
+            alt34 = 2\r
+            LA34_0 = self.input.LA(1)\r
+\r
+            if (LA34_0 == u'\r') :\r
+                alt34 = 1\r
+            if alt34 == 1:\r
+                # C.g:678:25: '\\r'\r
+                self.match(u'\r')\r
+\r
+\r
+\r
+\r
+            self.match(u'\n')\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end LINE_COMMAND\r
+\r
+\r
+\r
+    def mTokens(self):\r
+        # C.g:1:8: ( T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | T99 | T100 | T101 | T102 | T103 | T104 | T105 | T106 | T107 | T108 | T109 | T110 | T111 | T112 | T113 | T114 | T115 | T116 | T117 | IDENTIFIER | CHARACTER_LITERAL | STRING_LITERAL | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | WS | BS | UnicodeVocabulary | COMMENT | LINE_COMMENT | LINE_COMMAND )\r
+        alt35 = 106\r
+        alt35 = self.dfa35.predict(self.input)\r
+        if alt35 == 1:\r
+            # C.g:1:10: T25\r
+            self.mT25()\r
+\r
+\r
+\r
+        elif alt35 == 2:\r
+            # C.g:1:14: T26\r
+            self.mT26()\r
+\r
+\r
+\r
+        elif alt35 == 3:\r
+            # C.g:1:18: T27\r
+            self.mT27()\r
+\r
+\r
+\r
+        elif alt35 == 4:\r
+            # C.g:1:22: T28\r
+            self.mT28()\r
+\r
+\r
+\r
+        elif alt35 == 5:\r
+            # C.g:1:26: T29\r
+            self.mT29()\r
+\r
+\r
+\r
+        elif alt35 == 6:\r
+            # C.g:1:30: T30\r
+            self.mT30()\r
+\r
+\r
+\r
+        elif alt35 == 7:\r
+            # C.g:1:34: T31\r
+            self.mT31()\r
+\r
+\r
+\r
+        elif alt35 == 8:\r
+            # C.g:1:38: T32\r
+            self.mT32()\r
+\r
+\r
+\r
+        elif alt35 == 9:\r
+            # C.g:1:42: T33\r
+            self.mT33()\r
+\r
+\r
+\r
+        elif alt35 == 10:\r
+            # C.g:1:46: T34\r
+            self.mT34()\r
+\r
+\r
+\r
+        elif alt35 == 11:\r
+            # C.g:1:50: T35\r
+            self.mT35()\r
+\r
+\r
+\r
+        elif alt35 == 12:\r
+            # C.g:1:54: T36\r
+            self.mT36()\r
+\r
+\r
+\r
+        elif alt35 == 13:\r
+            # C.g:1:58: T37\r
+            self.mT37()\r
+\r
+\r
+\r
+        elif alt35 == 14:\r
+            # C.g:1:62: T38\r
+            self.mT38()\r
+\r
+\r
+\r
+        elif alt35 == 15:\r
+            # C.g:1:66: T39\r
+            self.mT39()\r
+\r
+\r
+\r
+        elif alt35 == 16:\r
+            # C.g:1:70: T40\r
+            self.mT40()\r
+\r
+\r
+\r
+        elif alt35 == 17:\r
+            # C.g:1:74: T41\r
+            self.mT41()\r
+\r
+\r
+\r
+        elif alt35 == 18:\r
+            # C.g:1:78: T42\r
+            self.mT42()\r
+\r
+\r
+\r
+        elif alt35 == 19:\r
+            # C.g:1:82: T43\r
+            self.mT43()\r
+\r
+\r
+\r
+        elif alt35 == 20:\r
+            # C.g:1:86: T44\r
+            self.mT44()\r
+\r
+\r
+\r
+        elif alt35 == 21:\r
+            # C.g:1:90: T45\r
+            self.mT45()\r
+\r
+\r
+\r
+        elif alt35 == 22:\r
+            # C.g:1:94: T46\r
+            self.mT46()\r
+\r
+\r
+\r
+        elif alt35 == 23:\r
+            # C.g:1:98: T47\r
+            self.mT47()\r
+\r
+\r
+\r
+        elif alt35 == 24:\r
+            # C.g:1:102: T48\r
+            self.mT48()\r
+\r
+\r
+\r
+        elif alt35 == 25:\r
+            # C.g:1:106: T49\r
+            self.mT49()\r
+\r
+\r
+\r
+        elif alt35 == 26:\r
+            # C.g:1:110: T50\r
+            self.mT50()\r
+\r
+\r
+\r
+        elif alt35 == 27:\r
+            # C.g:1:114: T51\r
+            self.mT51()\r
+\r
+\r
+\r
+        elif alt35 == 28:\r
+            # C.g:1:118: T52\r
+            self.mT52()\r
+\r
+\r
+\r
+        elif alt35 == 29:\r
+            # C.g:1:122: T53\r
+            self.mT53()\r
+\r
+\r
+\r
+        elif alt35 == 30:\r
+            # C.g:1:126: T54\r
+            self.mT54()\r
+\r
+\r
+\r
+        elif alt35 == 31:\r
+            # C.g:1:130: T55\r
+            self.mT55()\r
+\r
+\r
+\r
+        elif alt35 == 32:\r
+            # C.g:1:134: T56\r
+            self.mT56()\r
+\r
+\r
+\r
+        elif alt35 == 33:\r
+            # C.g:1:138: T57\r
+            self.mT57()\r
+\r
+\r
+\r
+        elif alt35 == 34:\r
+            # C.g:1:142: T58\r
+            self.mT58()\r
+\r
+\r
+\r
+        elif alt35 == 35:\r
+            # C.g:1:146: T59\r
+            self.mT59()\r
+\r
+\r
+\r
+        elif alt35 == 36:\r
+            # C.g:1:150: T60\r
+            self.mT60()\r
+\r
+\r
+\r
+        elif alt35 == 37:\r
+            # C.g:1:154: T61\r
+            self.mT61()\r
+\r
+\r
+\r
+        elif alt35 == 38:\r
+            # C.g:1:158: T62\r
+            self.mT62()\r
+\r
+\r
+\r
+        elif alt35 == 39:\r
+            # C.g:1:162: T63\r
+            self.mT63()\r
+\r
+\r
+\r
+        elif alt35 == 40:\r
+            # C.g:1:166: T64\r
+            self.mT64()\r
+\r
+\r
+\r
+        elif alt35 == 41:\r
+            # C.g:1:170: T65\r
+            self.mT65()\r
+\r
+\r
+\r
+        elif alt35 == 42:\r
+            # C.g:1:174: T66\r
+            self.mT66()\r
+\r
+\r
+\r
+        elif alt35 == 43:\r
+            # C.g:1:178: T67\r
+            self.mT67()\r
+\r
+\r
+\r
+        elif alt35 == 44:\r
+            # C.g:1:182: T68\r
+            self.mT68()\r
+\r
+\r
+\r
+        elif alt35 == 45:\r
+            # C.g:1:186: T69\r
+            self.mT69()\r
+\r
+\r
+\r
+        elif alt35 == 46:\r
+            # C.g:1:190: T70\r
+            self.mT70()\r
+\r
+\r
+\r
+        elif alt35 == 47:\r
+            # C.g:1:194: T71\r
+            self.mT71()\r
+\r
+\r
+\r
+        elif alt35 == 48:\r
+            # C.g:1:198: T72\r
+            self.mT72()\r
+\r
+\r
+\r
+        elif alt35 == 49:\r
+            # C.g:1:202: T73\r
+            self.mT73()\r
+\r
+\r
+\r
+        elif alt35 == 50:\r
+            # C.g:1:206: T74\r
+            self.mT74()\r
+\r
+\r
+\r
+        elif alt35 == 51:\r
+            # C.g:1:210: T75\r
+            self.mT75()\r
+\r
+\r
+\r
+        elif alt35 == 52:\r
+            # C.g:1:214: T76\r
+            self.mT76()\r
+\r
+\r
+\r
+        elif alt35 == 53:\r
+            # C.g:1:218: T77\r
+            self.mT77()\r
+\r
+\r
+\r
+        elif alt35 == 54:\r
+            # C.g:1:222: T78\r
+            self.mT78()\r
+\r
+\r
+\r
+        elif alt35 == 55:\r
+            # C.g:1:226: T79\r
+            self.mT79()\r
+\r
+\r
+\r
+        elif alt35 == 56:\r
+            # C.g:1:230: T80\r
+            self.mT80()\r
+\r
+\r
+\r
+        elif alt35 == 57:\r
+            # C.g:1:234: T81\r
+            self.mT81()\r
+\r
+\r
+\r
+        elif alt35 == 58:\r
+            # C.g:1:238: T82\r
+            self.mT82()\r
+\r
+\r
+\r
+        elif alt35 == 59:\r
+            # C.g:1:242: T83\r
+            self.mT83()\r
+\r
+\r
+\r
+        elif alt35 == 60:\r
+            # C.g:1:246: T84\r
+            self.mT84()\r
+\r
+\r
+\r
+        elif alt35 == 61:\r
+            # C.g:1:250: T85\r
+            self.mT85()\r
+\r
+\r
+\r
+        elif alt35 == 62:\r
+            # C.g:1:254: T86\r
+            self.mT86()\r
+\r
+\r
+\r
+        elif alt35 == 63:\r
+            # C.g:1:258: T87\r
+            self.mT87()\r
+\r
+\r
+\r
+        elif alt35 == 64:\r
+            # C.g:1:262: T88\r
+            self.mT88()\r
+\r
+\r
+\r
+        elif alt35 == 65:\r
+            # C.g:1:266: T89\r
+            self.mT89()\r
+\r
+\r
+\r
+        elif alt35 == 66:\r
+            # C.g:1:270: T90\r
+            self.mT90()\r
+\r
+\r
+\r
+        elif alt35 == 67:\r
+            # C.g:1:274: T91\r
+            self.mT91()\r
+\r
+\r
+\r
+        elif alt35 == 68:\r
+            # C.g:1:278: T92\r
+            self.mT92()\r
+\r
+\r
+\r
+        elif alt35 == 69:\r
+            # C.g:1:282: T93\r
+            self.mT93()\r
+\r
+\r
+\r
+        elif alt35 == 70:\r
+            # C.g:1:286: T94\r
+            self.mT94()\r
+\r
+\r
+\r
+        elif alt35 == 71:\r
+            # C.g:1:290: T95\r
+            self.mT95()\r
+\r
+\r
+\r
+        elif alt35 == 72:\r
+            # C.g:1:294: T96\r
+            self.mT96()\r
+\r
+\r
+\r
+        elif alt35 == 73:\r
+            # C.g:1:298: T97\r
+            self.mT97()\r
+\r
+\r
+\r
+        elif alt35 == 74:\r
+            # C.g:1:302: T98\r
+            self.mT98()\r
+\r
+\r
+\r
+        elif alt35 == 75:\r
+            # C.g:1:306: T99\r
+            self.mT99()\r
+\r
+\r
+\r
+        elif alt35 == 76:\r
+            # C.g:1:310: T100\r
+            self.mT100()\r
+\r
+\r
+\r
+        elif alt35 == 77:\r
+            # C.g:1:315: T101\r
+            self.mT101()\r
+\r
+\r
+\r
+        elif alt35 == 78:\r
+            # C.g:1:320: T102\r
+            self.mT102()\r
+\r
+\r
+\r
+        elif alt35 == 79:\r
+            # C.g:1:325: T103\r
+            self.mT103()\r
+\r
+\r
+\r
+        elif alt35 == 80:\r
+            # C.g:1:330: T104\r
+            self.mT104()\r
+\r
+\r
+\r
+        elif alt35 == 81:\r
+            # C.g:1:335: T105\r
+            self.mT105()\r
+\r
+\r
+\r
+        elif alt35 == 82:\r
+            # C.g:1:340: T106\r
+            self.mT106()\r
+\r
+\r
+\r
+        elif alt35 == 83:\r
+            # C.g:1:345: T107\r
+            self.mT107()\r
+\r
+\r
+\r
+        elif alt35 == 84:\r
+            # C.g:1:350: T108\r
+            self.mT108()\r
+\r
+\r
+\r
+        elif alt35 == 85:\r
+            # C.g:1:355: T109\r
+            self.mT109()\r
+\r
+\r
+\r
+        elif alt35 == 86:\r
+            # C.g:1:360: T110\r
+            self.mT110()\r
+\r
+\r
+\r
+        elif alt35 == 87:\r
+            # C.g:1:365: T111\r
+            self.mT111()\r
+\r
+\r
+\r
+        elif alt35 == 88:\r
+            # C.g:1:370: T112\r
+            self.mT112()\r
+\r
+\r
+\r
+        elif alt35 == 89:\r
+            # C.g:1:375: T113\r
+            self.mT113()\r
+\r
+\r
+\r
+        elif alt35 == 90:\r
+            # C.g:1:380: T114\r
+            self.mT114()\r
+\r
+\r
+\r
+        elif alt35 == 91:\r
+            # C.g:1:385: T115\r
+            self.mT115()\r
+\r
+\r
+\r
+        elif alt35 == 92:\r
+            # C.g:1:390: T116\r
+            self.mT116()\r
+\r
+\r
+\r
+        elif alt35 == 93:\r
+            # C.g:1:395: T117\r
+            self.mT117()\r
+\r
+\r
+\r
+        elif alt35 == 94:\r
+            # C.g:1:400: IDENTIFIER\r
+            self.mIDENTIFIER()\r
+\r
+\r
+\r
+        elif alt35 == 95:\r
+            # C.g:1:411: CHARACTER_LITERAL\r
+            self.mCHARACTER_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 96:\r
+            # C.g:1:429: STRING_LITERAL\r
+            self.mSTRING_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 97:\r
+            # C.g:1:444: HEX_LITERAL\r
+            self.mHEX_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 98:\r
+            # C.g:1:456: DECIMAL_LITERAL\r
+            self.mDECIMAL_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 99:\r
+            # C.g:1:472: OCTAL_LITERAL\r
+            self.mOCTAL_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 100:\r
+            # C.g:1:486: FLOATING_POINT_LITERAL\r
+            self.mFLOATING_POINT_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 101:\r
+            # C.g:1:509: WS\r
+            self.mWS()\r
+\r
+\r
+\r
+        elif alt35 == 102:\r
+            # C.g:1:512: BS\r
+            self.mBS()\r
+\r
+\r
+\r
+        elif alt35 == 103:\r
+            # C.g:1:515: UnicodeVocabulary\r
+            self.mUnicodeVocabulary()\r
+\r
+\r
+\r
+        elif alt35 == 104:\r
+            # C.g:1:533: COMMENT\r
+            self.mCOMMENT()\r
+\r
+\r
+\r
+        elif alt35 == 105:\r
+            # C.g:1:541: LINE_COMMENT\r
+            self.mLINE_COMMENT()\r
+\r
+\r
+\r
+        elif alt35 == 106:\r
+            # C.g:1:554: LINE_COMMAND\r
+            self.mLINE_COMMAND()\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+    # lookup tables for DFA #25\r
+\r
+    DFA25_eot = DFA.unpack(\r
+        u"\7\uffff\1\10\2\uffff"\r
+        )\r
+\r
+    DFA25_eof = DFA.unpack(\r
+        u"\12\uffff"\r
+        )\r
+\r
+    DFA25_min = DFA.unpack(\r
+        u"\2\56\2\uffff\1\53\1\uffff\2\60\2\uffff"\r
+        )\r
+\r
+    DFA25_max = DFA.unpack(\r
+        u"\1\71\1\146\2\uffff\1\71\1\uffff\1\71\1\146\2\uffff"\r
+        )\r
+\r
+    DFA25_accept = DFA.unpack(\r
+        u"\2\uffff\1\2\1\1\1\uffff\1\4\2\uffff\2\3"\r
+        )\r
+\r
+    DFA25_special = DFA.unpack(\r
+        u"\12\uffff"\r
+        )\r
+\r
+\r
+    DFA25_transition = [\r
+        DFA.unpack(u"\1\2\1\uffff\12\1"),\r
+        DFA.unpack(u"\1\3\1\uffff\12\1\12\uffff\1\5\1\4\1\5\35\uffff\1\5"\r
+        u"\1\4\1\5"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\6\1\uffff\1\6\2\uffff\12\7"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\12\7"),\r
+        DFA.unpack(u"\12\7\12\uffff\1\11\1\uffff\1\11\35\uffff\1\11\1\uffff"\r
+        u"\1\11"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"")\r
+    ]\r
+\r
+    # class definition for DFA #25\r
+\r
+    DFA25 = DFA\r
+    # lookup tables for DFA #35\r
+\r
+    DFA35_eot = DFA.unpack(\r
+        u"\2\uffff\1\76\1\uffff\1\101\14\76\3\uffff\10\76\4\uffff\1\151\1"\r
+        u"\153\1\157\1\163\1\167\1\171\1\174\1\uffff\1\177\1\u0082\1\u0085"\r
+        u"\1\u0087\1\u008a\1\uffff\5\76\1\uffff\2\73\2\u0095\2\uffff\1\73"\r
+        u"\2\uffff\1\76\4\uffff\16\76\1\u00ad\5\76\1\u00b4\1\76\3\uffff\1"\r
+        u"\u00b7\10\76\34\uffff\1\u00c1\2\uffff\1\u00c3\10\uffff\5\76\3\uffff"\r
+        u"\1\u00c9\1\uffff\1\u0095\3\uffff\23\76\1\uffff\1\u00de\1\76\1\u00e0"\r
+        u"\3\76\1\uffff\2\76\1\uffff\1\76\1\u00e7\6\76\4\uffff\5\76\1\uffff"\r
+        u"\1\76\1\u00f5\1\76\1\u00f7\6\76\1\u00fe\4\76\1\u0103\1\u0104\2"\r
+        u"\76\1\u0107\1\uffff\1\u0108\1\uffff\6\76\1\uffff\10\76\1\u0118"\r
+        u"\1\76\1\u011a\2\76\1\uffff\1\76\1\uffff\5\76\1\u0123\1\uffff\4"\r
+        u"\76\2\uffff\1\76\1\u0129\2\uffff\1\u012a\3\76\1\u012e\1\76\1\u0130"\r
+        u"\7\76\1\u0139\1\uffff\1\u013a\1\uffff\1\u013b\1\76\1\u013d\1\u013e"\r
+        u"\1\u013f\1\u0140\1\u0141\1\u0142\1\uffff\1\76\1\u0144\1\u0145\2"\r
+        u"\76\2\uffff\1\76\1\u0149\1\76\1\uffff\1\76\1\uffff\5\76\1\u0151"\r
+        u"\1\u0152\1\76\3\uffff\1\u0154\6\uffff\1\76\2\uffff\2\76\1\u0158"\r
+        u"\1\uffff\7\76\2\uffff\1\u0160\1\uffff\1\u0161\1\u0162\1\u0163\1"\r
+        u"\uffff\1\u0164\1\u0165\1\76\1\u0167\3\76\6\uffff\1\u016b\1\uffff"\r
+        u"\3\76\1\uffff\21\76\1\u0180\2\76\1\uffff\3\76\1\u0186\1\76\1\uffff"\r
+        u"\11\76\1\u0191\1\uffff"\r
+        )\r
+\r
+    DFA35_eof = DFA.unpack(\r
+        u"\u0192\uffff"\r
+        )\r
+\r
+    DFA35_min = DFA.unpack(\r
+        u"\1\3\1\uffff\1\171\1\uffff\1\75\1\154\1\150\1\165\1\145\1\124\1"\r
+        u"\157\1\141\1\146\1\157\1\154\1\145\1\156\3\uffff\1\116\1\120\1"\r
+        u"\117\1\116\1\117\1\114\1\106\1\101\4\uffff\1\75\1\56\1\53\1\55"\r
+        u"\1\52\1\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff\1\137\1\150\1\157"\r
+        u"\1\162\1\42\1\uffff\2\0\2\56\2\uffff\1\0\2\uffff\1\160\4\uffff"\r
+        u"\1\163\1\164\1\165\1\151\1\141\1\147\1\157\1\164\1\147\1\101\1"\r
+        u"\151\1\163\1\156\1\141\1\44\1\164\1\156\1\162\1\157\1\146\1\44"\r
+        u"\1\151\3\uffff\1\44\2\124\1\116\1\101\1\114\1\117\1\111\1\103\34"\r
+        u"\uffff\1\75\2\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145"\r
+        u"\3\uffff\1\56\1\uffff\1\56\3\uffff\3\145\1\155\2\164\1\165\1\145"\r
+        u"\1\156\1\162\1\157\1\151\1\165\1\124\1\141\1\144\1\145\1\163\1"\r
+        u"\162\1\uffff\1\44\1\147\1\44\2\141\1\142\1\uffff\1\151\1\157\1"\r
+        u"\uffff\1\111\1\44\1\123\1\114\1\101\1\102\1\101\1\113\4\uffff\1"\r
+        u"\163\1\155\1\154\1\157\1\141\1\uffff\1\144\1\44\1\162\1\44\1\143"\r
+        u"\1\151\1\143\1\157\1\145\1\164\1\44\1\163\1\162\1\111\1\164\2\44"\r
+        u"\1\151\1\164\1\44\1\uffff\1\44\1\uffff\1\164\1\165\1\154\1\147"\r
+        u"\1\156\1\117\1\uffff\1\124\1\111\1\124\1\101\1\102\1\120\1\105"\r
+        u"\1\155\1\44\1\145\1\44\1\153\1\145\1\uffff\1\156\1\uffff\1\150"\r
+        u"\1\143\1\164\1\146\1\144\1\44\1\uffff\1\164\1\156\1\103\1\151\2"\r
+        u"\uffff\1\156\1\44\2\uffff\1\44\1\154\1\145\1\156\1\44\1\116\1\44"\r
+        u"\1\107\1\111\1\114\1\125\1\117\1\111\1\104\1\44\1\uffff\1\44\1"\r
+        u"\uffff\1\44\1\146\6\44\1\uffff\1\145\2\44\1\154\1\165\2\uffff\1"\r
+        u"\164\1\44\1\145\1\uffff\1\101\1\uffff\1\116\1\114\1\137\1\116\1"\r
+        u"\117\2\44\1\137\3\uffff\1\44\6\uffff\1\162\2\uffff\2\145\1\44\1"\r
+        u"\uffff\1\144\1\114\2\105\1\122\2\124\2\uffff\1\44\1\uffff\3\44"\r
+        u"\1\uffff\2\44\1\104\1\44\1\105\1\111\1\123\6\uffff\1\44\1\uffff"\r
+        u"\2\115\1\105\1\uffff\1\117\1\105\1\122\1\126\1\123\1\126\2\105"\r
+        u"\1\111\1\137\1\122\1\103\1\111\1\126\1\105\1\106\1\111\1\44\1\137"\r
+        u"\1\103\1\uffff\1\125\1\105\1\116\1\44\1\122\1\uffff\1\105\1\106"\r
+        u"\1\105\1\122\1\105\1\116\1\103\1\105\1\104\1\44\1\uffff"\r
+        )\r
+\r
+    DFA35_max = DFA.unpack(\r
+        u"\1\ufffe\1\uffff\1\171\1\uffff\1\75\1\170\1\167\1\165\1\145\1\124"\r
+        u"\2\157\1\156\3\157\1\156\3\uffff\1\116\1\125\1\117\1\116\1\117"\r
+        u"\1\114\1\106\1\101\4\uffff\1\75\1\71\1\75\1\76\3\75\1\uffff\2\75"\r
+        u"\1\76\1\75\1\174\1\uffff\1\141\1\150\1\157\1\162\1\47\1\uffff\2"\r
+        u"\ufffe\1\170\1\146\2\uffff\1\ufffe\2\uffff\1\160\4\uffff\1\163"\r
+        u"\1\164\1\165\1\151\1\162\1\172\1\157\2\164\1\101\1\154\1\163\1"\r
+        u"\156\1\141\1\172\1\164\1\156\1\162\1\157\1\146\1\172\1\163\3\uffff"\r
+        u"\1\172\2\124\1\116\1\101\1\114\1\117\1\111\1\103\34\uffff\1\75"\r
+        u"\2\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145\3\uffff\1"\r
+        u"\146\1\uffff\1\146\3\uffff\3\145\1\155\2\164\1\165\1\145\1\156"\r
+        u"\1\162\1\157\1\151\1\165\1\124\1\141\1\144\1\145\1\164\1\162\1"\r
+        u"\uffff\1\172\1\147\1\172\2\141\1\142\1\uffff\1\151\1\157\1\uffff"\r
+        u"\1\111\1\172\1\123\1\114\1\101\1\102\1\137\1\113\4\uffff\1\163"\r
+        u"\1\155\1\154\1\157\1\141\1\uffff\1\144\1\172\1\162\1\172\1\143"\r
+        u"\1\151\1\143\1\157\1\145\1\164\1\172\1\163\1\162\1\111\1\164\2"\r
+        u"\172\1\151\1\164\1\172\1\uffff\1\172\1\uffff\1\164\1\165\1\154"\r
+        u"\1\147\1\156\1\117\1\uffff\1\124\1\111\1\124\1\101\1\122\1\120"\r
+        u"\1\105\1\155\1\172\1\145\1\172\1\153\1\145\1\uffff\1\156\1\uffff"\r
+        u"\1\150\1\143\1\164\1\146\1\144\1\172\1\uffff\1\164\1\156\1\103"\r
+        u"\1\151\2\uffff\1\156\1\172\2\uffff\1\172\1\154\1\145\1\156\1\172"\r
+        u"\1\116\1\172\1\107\1\111\1\114\1\125\1\117\1\111\1\104\1\172\1"\r
+        u"\uffff\1\172\1\uffff\1\172\1\146\6\172\1\uffff\1\145\2\172\1\154"\r
+        u"\1\165\2\uffff\1\164\1\172\1\145\1\uffff\1\101\1\uffff\1\116\1"\r
+        u"\114\1\137\1\116\1\117\2\172\1\137\3\uffff\1\172\6\uffff\1\162"\r
+        u"\2\uffff\2\145\1\172\1\uffff\1\144\1\114\2\105\1\122\2\124\2\uffff"\r
+        u"\1\172\1\uffff\3\172\1\uffff\2\172\1\104\1\172\1\105\1\111\1\123"\r
+        u"\6\uffff\1\172\1\uffff\2\115\1\105\1\uffff\1\117\1\105\1\122\1"\r
+        u"\126\1\123\1\126\2\105\1\111\1\137\1\122\1\103\1\111\1\126\1\105"\r
+        u"\1\106\1\111\1\172\1\137\1\103\1\uffff\1\125\1\105\1\116\1\172"\r
+        u"\1\122\1\uffff\1\105\1\106\1\105\1\122\1\105\1\116\1\103\1\105"\r
+        u"\1\104\1\172\1\uffff"\r
+        )\r
+\r
+    DFA35_accept = DFA.unpack(\r
+        u"\1\uffff\1\1\1\uffff\1\3\15\uffff\1\23\1\24\1\27\10\uffff\1\46"\r
+        u"\1\47\1\50\1\51\7\uffff\1\66\5\uffff\1\102\5\uffff\1\136\4\uffff"\r
+        u"\1\145\1\146\1\uffff\1\147\1\1\1\uffff\1\136\1\3\1\107\1\4\26\uffff"\r
+        u"\1\23\1\24\1\27\11\uffff\1\46\1\47\1\50\1\51\1\70\1\52\1\53\1\63"\r
+        u"\1\144\1\73\1\60\1\54\1\74\1\64\1\61\1\55\1\150\1\151\1\71\1\56"\r
+        u"\1\72\1\57\1\77\1\104\1\65\1\66\1\110\1\67\1\uffff\1\113\1\111"\r
+        u"\1\uffff\1\114\1\112\1\100\1\106\1\103\1\101\1\105\1\102\5\uffff"\r
+        u"\1\140\1\137\1\141\1\uffff\1\142\1\uffff\1\145\1\146\1\152\23\uffff"\r
+        u"\1\124\6\uffff\1\130\2\uffff\1\33\10\uffff\1\75\1\115\1\76\1\116"\r
+        u"\5\uffff\1\143\24\uffff\1\15\1\uffff\1\131\6\uffff\1\34\15\uffff"\r
+        u"\1\125\1\uffff\1\30\6\uffff\1\7\4\uffff\1\12\1\122\2\uffff\1\13"\r
+        u"\1\16\17\uffff\1\120\1\uffff\1\132\10\uffff\1\14\5\uffff\1\31\1"\r
+        u"\17\3\uffff\1\26\1\uffff\1\36\10\uffff\1\121\1\127\1\134\1\uffff"\r
+        u"\1\5\1\126\1\6\1\25\1\62\1\21\1\uffff\1\135\1\11\3\uffff\1\20\7"\r
+        u"\uffff\1\42\1\45\1\uffff\1\2\3\uffff\1\123\7\uffff\1\117\1\10\1"\r
+        u"\32\1\133\1\22\1\35\1\uffff\1\40\3\uffff\1\37\24\uffff\1\43\5\uffff"\r
+        u"\1\44\12\uffff\1\41"\r
+        )\r
+\r
+    DFA35_special = DFA.unpack(\r
+        u"\u0192\uffff"\r
+        )\r
+\r
+\r
+    DFA35_transition = [\r
+        DFA.unpack(u"\6\73\2\70\1\73\2\70\22\73\1\70\1\50\1\65\1\72\1\63"\r
+        u"\1\45\1\46\1\64\1\34\1\35\1\40\1\42\1\3\1\43\1\41\1\44\1\66\11"\r
+        u"\67\1\23\1\1\1\51\1\4\1\52\1\55\1\73\2\63\1\26\1\63\1\32\1\63\1"\r
+        u"\31\1\63\1\24\2\63\1\62\2\63\1\25\1\33\2\63\1\11\1\63\1\27\1\30"\r
+        u"\4\63\1\36\1\71\1\37\1\53\1\56\1\73\1\7\1\61\1\13\1\17\1\5\1\16"\r
+        u"\1\60\1\63\1\14\2\63\1\15\5\63\1\10\1\6\1\2\1\20\1\12\1\57\3\63"\r
+        u"\1\21\1\54\1\22\1\47\uff80\73"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\75"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\100"),\r
+        DFA.unpack(u"\1\102\1\uffff\1\104\11\uffff\1\103"),\r
+        DFA.unpack(u"\1\110\1\107\12\uffff\1\106\2\uffff\1\105"),\r
+        DFA.unpack(u"\1\111"),\r
+        DFA.unpack(u"\1\112"),\r
+        DFA.unpack(u"\1\113"),\r
+        DFA.unpack(u"\1\114"),\r
+        DFA.unpack(u"\1\115\6\uffff\1\117\6\uffff\1\116"),\r
+        DFA.unpack(u"\1\120\7\uffff\1\121"),\r
+        DFA.unpack(u"\1\122"),\r
+        DFA.unpack(u"\1\124\2\uffff\1\123"),\r
+        DFA.unpack(u"\1\125\11\uffff\1\126"),\r
+        DFA.unpack(u"\1\127"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\133"),\r
+        DFA.unpack(u"\1\134\4\uffff\1\135"),\r
+        DFA.unpack(u"\1\136"),\r
+        DFA.unpack(u"\1\137"),\r
+        DFA.unpack(u"\1\140"),\r
+        DFA.unpack(u"\1\141"),\r
+        DFA.unpack(u"\1\142"),\r
+        DFA.unpack(u"\1\143"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\150"),\r
+        DFA.unpack(u"\1\152\1\uffff\12\154"),\r
+        DFA.unpack(u"\1\156\21\uffff\1\155"),\r
+        DFA.unpack(u"\1\162\17\uffff\1\160\1\161"),\r
+        DFA.unpack(u"\1\164\4\uffff\1\165\15\uffff\1\166"),\r
+        DFA.unpack(u"\1\170"),\r
+        DFA.unpack(u"\1\173\26\uffff\1\172"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\176"),\r
+        DFA.unpack(u"\1\u0080\1\u0081"),\r
+        DFA.unpack(u"\1\u0084\1\u0083"),\r
+        DFA.unpack(u"\1\u0086"),\r
+        DFA.unpack(u"\1\u0089\76\uffff\1\u0088"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u008c\1\uffff\1\u008d"),\r
+        DFA.unpack(u"\1\u008e"),\r
+        DFA.unpack(u"\1\u008f"),\r
+        DFA.unpack(u"\1\u0090"),\r
+        DFA.unpack(u"\1\u0091\4\uffff\1\u0092"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\47\u0092\1\uffff\uffd7\u0092"),\r
+        DFA.unpack(u"\uffff\u0091"),\r
+        DFA.unpack(u"\1\154\1\uffff\10\u0094\2\154\12\uffff\3\154\21\uffff"\r
+        u"\1\u0093\13\uffff\3\154\21\uffff\1\u0093"),\r
+        DFA.unpack(u"\1\154\1\uffff\12\u0096\12\uffff\3\154\35\uffff\3\154"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\uffff\u0099"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u009a"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u009b"),\r
+        DFA.unpack(u"\1\u009c"),\r
+        DFA.unpack(u"\1\u009d"),\r
+        DFA.unpack(u"\1\u009e"),\r
+        DFA.unpack(u"\1\u009f\20\uffff\1\u00a0"),\r
+        DFA.unpack(u"\1\u00a2\22\uffff\1\u00a1"),\r
+        DFA.unpack(u"\1\u00a3"),\r
+        DFA.unpack(u"\1\u00a4"),\r
+        DFA.unpack(u"\1\u00a5\14\uffff\1\u00a6"),\r
+        DFA.unpack(u"\1\u00a7"),\r
+        DFA.unpack(u"\1\u00a9\2\uffff\1\u00a8"),\r
+        DFA.unpack(u"\1\u00aa"),\r
+        DFA.unpack(u"\1\u00ab"),\r
+        DFA.unpack(u"\1\u00ac"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00ae"),\r
+        DFA.unpack(u"\1\u00af"),\r
+        DFA.unpack(u"\1\u00b0"),\r
+        DFA.unpack(u"\1\u00b1"),\r
+        DFA.unpack(u"\1\u00b2"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\24\76\1\u00b3\5\76"),\r
+        DFA.unpack(u"\1\u00b6\11\uffff\1\u00b5"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00b8"),\r
+        DFA.unpack(u"\1\u00b9"),\r
+        DFA.unpack(u"\1\u00ba"),\r
+        DFA.unpack(u"\1\u00bb"),\r
+        DFA.unpack(u"\1\u00bc"),\r
+        DFA.unpack(u"\1\u00bd"),\r
+        DFA.unpack(u"\1\u00be"),\r
+        DFA.unpack(u"\1\u00bf"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00c0"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00c2"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00c4"),\r
+        DFA.unpack(u"\1\u00c5"),\r
+        DFA.unpack(u"\1\u00c6"),\r
+        DFA.unpack(u"\1\u00c7"),\r
+        DFA.unpack(u"\1\u00c8"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\154\1\uffff\10\u0094\2\154\12\uffff\3\154\35\uffff"\r
+        u"\3\154"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\154\1\uffff\12\u0096\12\uffff\3\154\35\uffff\3\154"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00ca"),\r
+        DFA.unpack(u"\1\u00cb"),\r
+        DFA.unpack(u"\1\u00cc"),\r
+        DFA.unpack(u"\1\u00cd"),\r
+        DFA.unpack(u"\1\u00ce"),\r
+        DFA.unpack(u"\1\u00cf"),\r
+        DFA.unpack(u"\1\u00d0"),\r
+        DFA.unpack(u"\1\u00d1"),\r
+        DFA.unpack(u"\1\u00d2"),\r
+        DFA.unpack(u"\1\u00d3"),\r
+        DFA.unpack(u"\1\u00d4"),\r
+        DFA.unpack(u"\1\u00d5"),\r
+        DFA.unpack(u"\1\u00d6"),\r
+        DFA.unpack(u"\1\u00d7"),\r
+        DFA.unpack(u"\1\u00d8"),\r
+        DFA.unpack(u"\1\u00d9"),\r
+        DFA.unpack(u"\1\u00da"),\r
+        DFA.unpack(u"\1\u00dc\1\u00db"),\r
+        DFA.unpack(u"\1\u00dd"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00df"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00e1"),\r
+        DFA.unpack(u"\1\u00e2"),\r
+        DFA.unpack(u"\1\u00e3"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00e4"),\r
+        DFA.unpack(u"\1\u00e5"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00e6"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00e8"),\r
+        DFA.unpack(u"\1\u00e9"),\r
+        DFA.unpack(u"\1\u00ea"),\r
+        DFA.unpack(u"\1\u00eb"),\r
+        DFA.unpack(u"\1\u00ed\35\uffff\1\u00ec"),\r
+        DFA.unpack(u"\1\u00ee"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00ef"),\r
+        DFA.unpack(u"\1\u00f0"),\r
+        DFA.unpack(u"\1\u00f1"),\r
+        DFA.unpack(u"\1\u00f2"),\r
+        DFA.unpack(u"\1\u00f3"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00f4"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00f6"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00f8"),\r
+        DFA.unpack(u"\1\u00f9"),\r
+        DFA.unpack(u"\1\u00fa"),\r
+        DFA.unpack(u"\1\u00fb"),\r
+        DFA.unpack(u"\1\u00fc"),\r
+        DFA.unpack(u"\1\u00fd"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00ff"),\r
+        DFA.unpack(u"\1\u0100"),\r
+        DFA.unpack(u"\1\u0101"),\r
+        DFA.unpack(u"\1\u0102"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0105"),\r
+        DFA.unpack(u"\1\u0106"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0109"),\r
+        DFA.unpack(u"\1\u010a"),\r
+        DFA.unpack(u"\1\u010b"),\r
+        DFA.unpack(u"\1\u010c"),\r
+        DFA.unpack(u"\1\u010d"),\r
+        DFA.unpack(u"\1\u010e"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u010f"),\r
+        DFA.unpack(u"\1\u0110"),\r
+        DFA.unpack(u"\1\u0111"),\r
+        DFA.unpack(u"\1\u0112"),\r
+        DFA.unpack(u"\1\u0114\17\uffff\1\u0113"),\r
+        DFA.unpack(u"\1\u0115"),\r
+        DFA.unpack(u"\1\u0116"),\r
+        DFA.unpack(u"\1\u0117"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0119"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u011b"),\r
+        DFA.unpack(u"\1\u011c"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u011d"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u011e"),\r
+        DFA.unpack(u"\1\u011f"),\r
+        DFA.unpack(u"\1\u0120"),\r
+        DFA.unpack(u"\1\u0121"),\r
+        DFA.unpack(u"\1\u0122"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0124"),\r
+        DFA.unpack(u"\1\u0125"),\r
+        DFA.unpack(u"\1\u0126"),\r
+        DFA.unpack(u"\1\u0127"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0128"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u012b"),\r
+        DFA.unpack(u"\1\u012c"),\r
+        DFA.unpack(u"\1\u012d"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u012f"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0131"),\r
+        DFA.unpack(u"\1\u0132"),\r
+        DFA.unpack(u"\1\u0133"),\r
+        DFA.unpack(u"\1\u0134"),\r
+        DFA.unpack(u"\1\u0135"),\r
+        DFA.unpack(u"\1\u0136"),\r
+        DFA.unpack(u"\1\u0137"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\u0138\1"\r
+        u"\uffff\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u013c"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0143"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0146"),\r
+        DFA.unpack(u"\1\u0147"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0148"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u014a"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u014b"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u014c"),\r
+        DFA.unpack(u"\1\u014d"),\r
+        DFA.unpack(u"\1\u014e"),\r
+        DFA.unpack(u"\1\u014f"),\r
+        DFA.unpack(u"\1\u0150"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0153"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0155"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0156"),\r
+        DFA.unpack(u"\1\u0157"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0159"),\r
+        DFA.unpack(u"\1\u015a"),\r
+        DFA.unpack(u"\1\u015b"),\r
+        DFA.unpack(u"\1\u015c"),\r
+        DFA.unpack(u"\1\u015d"),\r
+        DFA.unpack(u"\1\u015e"),\r
+        DFA.unpack(u"\1\u015f"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0166"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0168"),\r
+        DFA.unpack(u"\1\u0169"),\r
+        DFA.unpack(u"\1\u016a"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u016c"),\r
+        DFA.unpack(u"\1\u016d"),\r
+        DFA.unpack(u"\1\u016e"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u016f"),\r
+        DFA.unpack(u"\1\u0170"),\r
+        DFA.unpack(u"\1\u0171"),\r
+        DFA.unpack(u"\1\u0172"),\r
+        DFA.unpack(u"\1\u0173"),\r
+        DFA.unpack(u"\1\u0174"),\r
+        DFA.unpack(u"\1\u0175"),\r
+        DFA.unpack(u"\1\u0176"),\r
+        DFA.unpack(u"\1\u0177"),\r
+        DFA.unpack(u"\1\u0178"),\r
+        DFA.unpack(u"\1\u0179"),\r
+        DFA.unpack(u"\1\u017a"),\r
+        DFA.unpack(u"\1\u017b"),\r
+        DFA.unpack(u"\1\u017c"),\r
+        DFA.unpack(u"\1\u017d"),\r
+        DFA.unpack(u"\1\u017e"),\r
+        DFA.unpack(u"\1\u017f"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0181"),\r
+        DFA.unpack(u"\1\u0182"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0183"),\r
+        DFA.unpack(u"\1\u0184"),\r
+        DFA.unpack(u"\1\u0185"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0187"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0188"),\r
+        DFA.unpack(u"\1\u0189"),\r
+        DFA.unpack(u"\1\u018a"),\r
+        DFA.unpack(u"\1\u018b"),\r
+        DFA.unpack(u"\1\u018c"),\r
+        DFA.unpack(u"\1\u018d"),\r
+        DFA.unpack(u"\1\u018e"),\r
+        DFA.unpack(u"\1\u018f"),\r
+        DFA.unpack(u"\1\u0190"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"")\r
+    ]\r
+\r
+    # class definition for DFA #35\r
 \r
+    DFA35 = DFA\r
 \r
 \r
diff --git a/BaseTools/Source/Python/Ecc/CListener.py b/BaseTools/Source/Python/Ecc/CListener.py
deleted file mode 100644 (file)
index 6824c94..0000000
+++ /dev/null
@@ -1,672 +0,0 @@
-# Generated from C.g4 by ANTLR 4.7.1\r
-from antlr4 import *\r
-if __name__ is not None and "." in __name__:\r
-    from .CParser import CParser\r
-else:\r
-    from CParser import CParser\r
-\r
-## @file\r
-# The file defines the parser for C source files.\r
-#\r
-# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE.\r
-# This file is generated by running:\r
-# java org.antlr.Tool C.g\r
-#\r
-# Copyright (c) 2009 - 2010, Intel Corporation  All rights reserved.\r
-#\r
-# This program and the accompanying materials are licensed and made available\r
-# under the terms and conditions of the BSD License which accompanies this\r
-# distribution.  The full text of the license may be found at:\r
-#   http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-##\r
-\r
-import Ecc.CodeFragment as CodeFragment\r
-import Ecc.FileProfile as FileProfile\r
-\r
-\r
-# This class defines a complete listener for a parse tree produced by CParser.\r
-class CListener(ParseTreeListener):\r
-\r
-    # Enter a parse tree produced by CParser#translation_unit.\r
-    def enterTranslation_unit(self, ctx:CParser.Translation_unitContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#translation_unit.\r
-    def exitTranslation_unit(self, ctx:CParser.Translation_unitContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#external_declaration.\r
-    def enterExternal_declaration(self, ctx:CParser.External_declarationContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#external_declaration.\r
-    def exitExternal_declaration(self, ctx:CParser.External_declarationContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#function_definition.\r
-    def enterFunction_definition(self, ctx:CParser.Function_definitionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#function_definition.\r
-    def exitFunction_definition(self, ctx:CParser.Function_definitionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#declaration_specifiers.\r
-    def enterDeclaration_specifiers(self, ctx:CParser.Declaration_specifiersContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#declaration_specifiers.\r
-    def exitDeclaration_specifiers(self, ctx:CParser.Declaration_specifiersContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#declaration.\r
-    def enterDeclaration(self, ctx:CParser.DeclarationContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#declaration.\r
-    def exitDeclaration(self, ctx:CParser.DeclarationContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#init_declarator_list.\r
-    def enterInit_declarator_list(self, ctx:CParser.Init_declarator_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#init_declarator_list.\r
-    def exitInit_declarator_list(self, ctx:CParser.Init_declarator_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#init_declarator.\r
-    def enterInit_declarator(self, ctx:CParser.Init_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#init_declarator.\r
-    def exitInit_declarator(self, ctx:CParser.Init_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#storage_class_specifier.\r
-    def enterStorage_class_specifier(self, ctx:CParser.Storage_class_specifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#storage_class_specifier.\r
-    def exitStorage_class_specifier(self, ctx:CParser.Storage_class_specifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#type_specifier.\r
-    def enterType_specifier(self, ctx:CParser.Type_specifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#type_specifier.\r
-    def exitType_specifier(self, ctx:CParser.Type_specifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#type_id.\r
-    def enterType_id(self, ctx:CParser.Type_idContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#type_id.\r
-    def exitType_id(self, ctx:CParser.Type_idContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_or_union_specifier.\r
-    def enterStruct_or_union_specifier(self, ctx:CParser.Struct_or_union_specifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_or_union_specifier.\r
-    def exitStruct_or_union_specifier(self, ctx:CParser.Struct_or_union_specifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_or_union.\r
-    def enterStruct_or_union(self, ctx:CParser.Struct_or_unionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_or_union.\r
-    def exitStruct_or_union(self, ctx:CParser.Struct_or_unionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_declaration_list.\r
-    def enterStruct_declaration_list(self, ctx:CParser.Struct_declaration_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_declaration_list.\r
-    def exitStruct_declaration_list(self, ctx:CParser.Struct_declaration_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_declaration.\r
-    def enterStruct_declaration(self, ctx:CParser.Struct_declarationContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_declaration.\r
-    def exitStruct_declaration(self, ctx:CParser.Struct_declarationContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#specifier_qualifier_list.\r
-    def enterSpecifier_qualifier_list(self, ctx:CParser.Specifier_qualifier_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#specifier_qualifier_list.\r
-    def exitSpecifier_qualifier_list(self, ctx:CParser.Specifier_qualifier_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_declarator_list.\r
-    def enterStruct_declarator_list(self, ctx:CParser.Struct_declarator_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_declarator_list.\r
-    def exitStruct_declarator_list(self, ctx:CParser.Struct_declarator_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_declarator.\r
-    def enterStruct_declarator(self, ctx:CParser.Struct_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_declarator.\r
-    def exitStruct_declarator(self, ctx:CParser.Struct_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#enum_specifier.\r
-    def enterEnum_specifier(self, ctx:CParser.Enum_specifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#enum_specifier.\r
-    def exitEnum_specifier(self, ctx:CParser.Enum_specifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#enumerator_list.\r
-    def enterEnumerator_list(self, ctx:CParser.Enumerator_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#enumerator_list.\r
-    def exitEnumerator_list(self, ctx:CParser.Enumerator_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#enumerator.\r
-    def enterEnumerator(self, ctx:CParser.EnumeratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#enumerator.\r
-    def exitEnumerator(self, ctx:CParser.EnumeratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#type_qualifier.\r
-    def enterType_qualifier(self, ctx:CParser.Type_qualifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#type_qualifier.\r
-    def exitType_qualifier(self, ctx:CParser.Type_qualifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#declarator.\r
-    def enterDeclarator(self, ctx:CParser.DeclaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#declarator.\r
-    def exitDeclarator(self, ctx:CParser.DeclaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#direct_declarator.\r
-    def enterDirect_declarator(self, ctx:CParser.Direct_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#direct_declarator.\r
-    def exitDirect_declarator(self, ctx:CParser.Direct_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#declarator_suffix.\r
-    def enterDeclarator_suffix(self, ctx:CParser.Declarator_suffixContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#declarator_suffix.\r
-    def exitDeclarator_suffix(self, ctx:CParser.Declarator_suffixContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#pointer.\r
-    def enterPointer(self, ctx:CParser.PointerContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#pointer.\r
-    def exitPointer(self, ctx:CParser.PointerContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#parameter_type_list.\r
-    def enterParameter_type_list(self, ctx:CParser.Parameter_type_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#parameter_type_list.\r
-    def exitParameter_type_list(self, ctx:CParser.Parameter_type_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#parameter_list.\r
-    def enterParameter_list(self, ctx:CParser.Parameter_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#parameter_list.\r
-    def exitParameter_list(self, ctx:CParser.Parameter_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#parameter_declaration.\r
-    def enterParameter_declaration(self, ctx:CParser.Parameter_declarationContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#parameter_declaration.\r
-    def exitParameter_declaration(self, ctx:CParser.Parameter_declarationContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#identifier_list.\r
-    def enterIdentifier_list(self, ctx:CParser.Identifier_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#identifier_list.\r
-    def exitIdentifier_list(self, ctx:CParser.Identifier_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#type_name.\r
-    def enterType_name(self, ctx:CParser.Type_nameContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#type_name.\r
-    def exitType_name(self, ctx:CParser.Type_nameContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#abstract_declarator.\r
-    def enterAbstract_declarator(self, ctx:CParser.Abstract_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#abstract_declarator.\r
-    def exitAbstract_declarator(self, ctx:CParser.Abstract_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#direct_abstract_declarator.\r
-    def enterDirect_abstract_declarator(self, ctx:CParser.Direct_abstract_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#direct_abstract_declarator.\r
-    def exitDirect_abstract_declarator(self, ctx:CParser.Direct_abstract_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#abstract_declarator_suffix.\r
-    def enterAbstract_declarator_suffix(self, ctx:CParser.Abstract_declarator_suffixContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#abstract_declarator_suffix.\r
-    def exitAbstract_declarator_suffix(self, ctx:CParser.Abstract_declarator_suffixContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#initializer.\r
-    def enterInitializer(self, ctx:CParser.InitializerContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#initializer.\r
-    def exitInitializer(self, ctx:CParser.InitializerContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#initializer_list.\r
-    def enterInitializer_list(self, ctx:CParser.Initializer_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#initializer_list.\r
-    def exitInitializer_list(self, ctx:CParser.Initializer_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#argument_expression_list.\r
-    def enterArgument_expression_list(self, ctx:CParser.Argument_expression_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#argument_expression_list.\r
-    def exitArgument_expression_list(self, ctx:CParser.Argument_expression_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#additive_expression.\r
-    def enterAdditive_expression(self, ctx:CParser.Additive_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#additive_expression.\r
-    def exitAdditive_expression(self, ctx:CParser.Additive_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#multiplicative_expression.\r
-    def enterMultiplicative_expression(self, ctx:CParser.Multiplicative_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#multiplicative_expression.\r
-    def exitMultiplicative_expression(self, ctx:CParser.Multiplicative_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#cast_expression.\r
-    def enterCast_expression(self, ctx:CParser.Cast_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#cast_expression.\r
-    def exitCast_expression(self, ctx:CParser.Cast_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#unary_expression.\r
-    def enterUnary_expression(self, ctx:CParser.Unary_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#unary_expression.\r
-    def exitUnary_expression(self, ctx:CParser.Unary_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#postfix_expression.\r
-    def enterPostfix_expression(self, ctx:CParser.Postfix_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#postfix_expression.\r
-    def exitPostfix_expression(self, ctx:CParser.Postfix_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#macro_parameter_list.\r
-    def enterMacro_parameter_list(self, ctx:CParser.Macro_parameter_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#macro_parameter_list.\r
-    def exitMacro_parameter_list(self, ctx:CParser.Macro_parameter_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#unary_operator.\r
-    def enterUnary_operator(self, ctx:CParser.Unary_operatorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#unary_operator.\r
-    def exitUnary_operator(self, ctx:CParser.Unary_operatorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#primary_expression.\r
-    def enterPrimary_expression(self, ctx:CParser.Primary_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#primary_expression.\r
-    def exitPrimary_expression(self, ctx:CParser.Primary_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#constant.\r
-    def enterConstant(self, ctx:CParser.ConstantContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#constant.\r
-    def exitConstant(self, ctx:CParser.ConstantContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#expression.\r
-    def enterExpression(self, ctx:CParser.ExpressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#expression.\r
-    def exitExpression(self, ctx:CParser.ExpressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#constant_expression.\r
-    def enterConstant_expression(self, ctx:CParser.Constant_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#constant_expression.\r
-    def exitConstant_expression(self, ctx:CParser.Constant_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#assignment_expression.\r
-    def enterAssignment_expression(self, ctx:CParser.Assignment_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#assignment_expression.\r
-    def exitAssignment_expression(self, ctx:CParser.Assignment_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#lvalue.\r
-    def enterLvalue(self, ctx:CParser.LvalueContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#lvalue.\r
-    def exitLvalue(self, ctx:CParser.LvalueContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#assignment_operator.\r
-    def enterAssignment_operator(self, ctx:CParser.Assignment_operatorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#assignment_operator.\r
-    def exitAssignment_operator(self, ctx:CParser.Assignment_operatorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#conditional_expression.\r
-    def enterConditional_expression(self, ctx:CParser.Conditional_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#conditional_expression.\r
-    def exitConditional_expression(self, ctx:CParser.Conditional_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#logical_or_expression.\r
-    def enterLogical_or_expression(self, ctx:CParser.Logical_or_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#logical_or_expression.\r
-    def exitLogical_or_expression(self, ctx:CParser.Logical_or_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#logical_and_expression.\r
-    def enterLogical_and_expression(self, ctx:CParser.Logical_and_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#logical_and_expression.\r
-    def exitLogical_and_expression(self, ctx:CParser.Logical_and_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#inclusive_or_expression.\r
-    def enterInclusive_or_expression(self, ctx:CParser.Inclusive_or_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#inclusive_or_expression.\r
-    def exitInclusive_or_expression(self, ctx:CParser.Inclusive_or_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#exclusive_or_expression.\r
-    def enterExclusive_or_expression(self, ctx:CParser.Exclusive_or_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#exclusive_or_expression.\r
-    def exitExclusive_or_expression(self, ctx:CParser.Exclusive_or_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#and_expression.\r
-    def enterAnd_expression(self, ctx:CParser.And_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#and_expression.\r
-    def exitAnd_expression(self, ctx:CParser.And_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#equality_expression.\r
-    def enterEquality_expression(self, ctx:CParser.Equality_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#equality_expression.\r
-    def exitEquality_expression(self, ctx:CParser.Equality_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#relational_expression.\r
-    def enterRelational_expression(self, ctx:CParser.Relational_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#relational_expression.\r
-    def exitRelational_expression(self, ctx:CParser.Relational_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#shift_expression.\r
-    def enterShift_expression(self, ctx:CParser.Shift_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#shift_expression.\r
-    def exitShift_expression(self, ctx:CParser.Shift_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#statement.\r
-    def enterStatement(self, ctx:CParser.StatementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#statement.\r
-    def exitStatement(self, ctx:CParser.StatementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#asm2_statement.\r
-    def enterAsm2_statement(self, ctx:CParser.Asm2_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#asm2_statement.\r
-    def exitAsm2_statement(self, ctx:CParser.Asm2_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#asm1_statement.\r
-    def enterAsm1_statement(self, ctx:CParser.Asm1_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#asm1_statement.\r
-    def exitAsm1_statement(self, ctx:CParser.Asm1_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#asm_statement.\r
-    def enterAsm_statement(self, ctx:CParser.Asm_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#asm_statement.\r
-    def exitAsm_statement(self, ctx:CParser.Asm_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#macro_statement.\r
-    def enterMacro_statement(self, ctx:CParser.Macro_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#macro_statement.\r
-    def exitMacro_statement(self, ctx:CParser.Macro_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#labeled_statement.\r
-    def enterLabeled_statement(self, ctx:CParser.Labeled_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#labeled_statement.\r
-    def exitLabeled_statement(self, ctx:CParser.Labeled_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#compound_statement.\r
-    def enterCompound_statement(self, ctx:CParser.Compound_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#compound_statement.\r
-    def exitCompound_statement(self, ctx:CParser.Compound_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#statement_list.\r
-    def enterStatement_list(self, ctx:CParser.Statement_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#statement_list.\r
-    def exitStatement_list(self, ctx:CParser.Statement_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#expression_statement.\r
-    def enterExpression_statement(self, ctx:CParser.Expression_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#expression_statement.\r
-    def exitExpression_statement(self, ctx:CParser.Expression_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#selection_statement.\r
-    def enterSelection_statement(self, ctx:CParser.Selection_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#selection_statement.\r
-    def exitSelection_statement(self, ctx:CParser.Selection_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#iteration_statement.\r
-    def enterIteration_statement(self, ctx:CParser.Iteration_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#iteration_statement.\r
-    def exitIteration_statement(self, ctx:CParser.Iteration_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#jump_statement.\r
-    def enterJump_statement(self, ctx:CParser.Jump_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#jump_statement.\r
-    def exitJump_statement(self, ctx:CParser.Jump_statementContext):\r
-        pass\r
-\r
-\r
index e9de2d805c25f7e6481fcae39c640b7baff473bc..a3ab8e7bf48ca27cf4c1c05c6245f11871260804 100644 (file)
@@ -1,10 +1,9 @@
-# Generated from C.g4 by ANTLR 4.7.1\r
-# encoding: utf-8\r
-from antlr4 import *\r
-from io import StringIO\r
-from typing.io import TextIO\r
-import sys\r
+# $ANTLR 3.0.1 C.g 2010-02-23 09:58:53\r
 \r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
+from antlr3 import *\r
+from antlr3.compat import set, frozenset\r
 \r
 ## @file\r
 # The file defines the parser for C source files.\r
@@ -13,7 +12,7 @@ import sys
 # This file is generated by running:\r
 # java org.antlr.Tool C.g\r
 #\r
-# Copyright (c) 2009 - 2010, Intel Corporation  All rights reserved.\r
+# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available\r
 # under the terms and conditions of the BSD License which accompanies this\r
@@ -25,5925 +24,18816 @@ import sys
 #\r
 ##\r
 \r
-import Ecc.CodeFragment as CodeFragment\r
-import Ecc.FileProfile as FileProfile\r
-\r
-def serializedATN():\r
-    with StringIO() as buf:\r
-        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3k")\r
-        buf.write("\u0380\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7")\r
-        buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16")\r
-        buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23")\r
-        buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31")\r
-        buf.write("\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36")\r
-        buf.write("\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t")\r
-        buf.write("&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4")\r
-        buf.write("/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t\64")\r
-        buf.write("\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t")\r
-        buf.write(";\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\t")\r
-        buf.write("D\4E\tE\4F\tF\4G\tG\4H\tH\3\2\7\2\u0092\n\2\f\2\16\2\u0095")\r
-        buf.write("\13\2\3\3\5\3\u0098\n\3\3\3\3\3\7\3\u009c\n\3\f\3\16\3")\r
-        buf.write("\u009f\13\3\3\3\3\3\3\3\3\3\3\3\3\3\5\3\u00a7\n\3\5\3")\r
-        buf.write("\u00a9\n\3\3\4\5\4\u00ac\n\4\3\4\3\4\6\4\u00b0\n\4\r\4")\r
-        buf.write("\16\4\u00b1\3\4\3\4\3\4\5\4\u00b7\n\4\3\4\3\4\3\5\3\5")\r
-        buf.write("\3\5\6\5\u00be\n\5\r\5\16\5\u00bf\3\6\3\6\5\6\u00c4\n")\r
-        buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u00cc\n\6\3\6\3\6\3\6\5")\r
-        buf.write("\6\u00d1\n\6\3\7\3\7\3\7\7\7\u00d6\n\7\f\7\16\7\u00d9")\r
-        buf.write("\13\7\3\b\3\b\3\b\5\b\u00de\n\b\3\t\3\t\3\n\3\n\3\n\3")\r
-        buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n")\r
-        buf.write("\7\n\u00f3\n\n\f\n\16\n\u00f6\13\n\3\n\3\n\5\n\u00fa\n")\r
-        buf.write("\n\3\13\3\13\3\f\3\f\5\f\u0100\n\f\3\f\3\f\3\f\3\f\3\f")\r
-        buf.write("\3\f\3\f\5\f\u0109\n\f\3\r\3\r\3\16\6\16\u010e\n\16\r")\r
-        buf.write("\16\16\16\u010f\3\17\3\17\3\17\3\17\3\20\3\20\6\20\u0118")\r
-        buf.write("\n\20\r\20\16\20\u0119\3\21\3\21\3\21\7\21\u011f\n\21")\r
-        buf.write("\f\21\16\21\u0122\13\21\3\22\3\22\3\22\5\22\u0127\n\22")\r
-        buf.write("\3\22\3\22\5\22\u012b\n\22\3\23\3\23\3\23\3\23\5\23\u0131")\r
-        buf.write("\n\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u013a\n")\r
-        buf.write("\23\3\23\3\23\3\23\3\23\5\23\u0140\n\23\3\24\3\24\3\24")\r
-        buf.write("\7\24\u0145\n\24\f\24\16\24\u0148\13\24\3\25\3\25\3\25")\r
-        buf.write("\5\25\u014d\n\25\3\26\3\26\3\27\5\27\u0152\n\27\3\27\5")\r
-        buf.write("\27\u0155\n\27\3\27\5\27\u0158\n\27\3\27\5\27\u015b\n")\r
-        buf.write("\27\3\27\3\27\5\27\u015f\n\27\3\30\3\30\7\30\u0163\n\30")\r
-        buf.write("\f\30\16\30\u0166\13\30\3\30\3\30\5\30\u016a\n\30\3\30")\r
-        buf.write("\3\30\3\30\6\30\u016f\n\30\r\30\16\30\u0170\5\30\u0173")\r
-        buf.write("\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31")\r
-        buf.write("\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u0185\n\31\3\32\3")\r
-        buf.write("\32\6\32\u0189\n\32\r\32\16\32\u018a\3\32\5\32\u018e\n")\r
-        buf.write("\32\3\32\3\32\3\32\5\32\u0193\n\32\3\33\3\33\3\33\5\33")\r
-        buf.write("\u0198\n\33\3\33\5\33\u019b\n\33\3\34\3\34\3\34\5\34\u01a0")\r
-        buf.write("\n\34\3\34\7\34\u01a3\n\34\f\34\16\34\u01a6\13\34\3\35")\r
-        buf.write("\3\35\3\35\7\35\u01ab\n\35\f\35\16\35\u01ae\13\35\3\35")\r
-        buf.write("\5\35\u01b1\n\35\3\35\7\35\u01b4\n\35\f\35\16\35\u01b7")\r
-        buf.write("\13\35\3\35\5\35\u01ba\n\35\3\36\3\36\3\36\7\36\u01bf")\r
-        buf.write("\n\36\f\36\16\36\u01c2\13\36\3\37\3\37\5\37\u01c6\n\37")\r
-        buf.write("\3\37\5\37\u01c9\n\37\3 \3 \5 \u01cd\n \3 \5 \u01d0\n")\r
-        buf.write(" \3!\3!\3!\3!\3!\5!\u01d7\n!\3!\7!\u01da\n!\f!\16!\u01dd")\r
-        buf.write("\13!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5")\r
-        buf.write("\"\u01eb\n\"\3#\3#\3#\3#\5#\u01f1\n#\3#\3#\5#\u01f5\n")\r
-        buf.write("#\3$\3$\3$\7$\u01fa\n$\f$\16$\u01fd\13$\3%\3%\5%\u0201")\r
-        buf.write("\n%\3%\3%\3%\5%\u0206\n%\7%\u0208\n%\f%\16%\u020b\13%")\r
-        buf.write("\3&\3&\3&\3&\3&\7&\u0212\n&\f&\16&\u0215\13&\3\'\3\'\3")\r
-        buf.write("\'\3\'\3\'\3\'\3\'\7\'\u021e\n\'\f\'\16\'\u0221\13\'\3")\r
-        buf.write("(\3(\3(\3(\3(\3(\5(\u0229\n(\3)\3)\3)\3)\3)\3)\3)\3)\3")\r
-        buf.write(")\3)\3)\3)\3)\3)\3)\5)\u023a\n)\3*\3*\3*\3*\3*\3*\3*\3")\r
-        buf.write("*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3")\r
-        buf.write("*\3*\3*\3*\7*\u0259\n*\f*\16*\u025c\13*\3+\3+\3+\7+\u0261")\r
-        buf.write("\n+\f+\16+\u0264\13+\3,\3,\3-\3-\3-\3-\3-\3-\5-\u026e")\r
-        buf.write("\n-\3.\3.\3.\3.\3.\7.\u0275\n.\f.\16.\u0278\13.\3.\6.")\r
-        buf.write("\u027b\n.\r.\16.\u027c\6.\u027f\n.\r.\16.\u0280\3.\7.")\r
-        buf.write("\u0284\n.\f.\16.\u0287\13.\3.\5.\u028a\n.\3/\3/\3/\7/")\r
-        buf.write("\u028f\n/\f/\16/\u0292\13/\3\60\3\60\3\61\3\61\3\61\3")\r
-        buf.write("\61\3\61\5\61\u029b\n\61\3\62\3\62\3\63\3\63\3\64\3\64")\r
-        buf.write("\3\64\3\64\3\64\3\64\3\64\5\64\u02a8\n\64\3\65\3\65\3")\r
-        buf.write("\65\7\65\u02ad\n\65\f\65\16\65\u02b0\13\65\3\66\3\66\3")\r
-        buf.write("\66\7\66\u02b5\n\66\f\66\16\66\u02b8\13\66\3\67\3\67\3")\r
-        buf.write("\67\7\67\u02bd\n\67\f\67\16\67\u02c0\13\67\38\38\38\7")\r
-        buf.write("8\u02c5\n8\f8\168\u02c8\138\39\39\39\79\u02cd\n9\f9\16")\r
-        buf.write("9\u02d0\139\3:\3:\3:\7:\u02d5\n:\f:\16:\u02d8\13:\3;\3")\r
-        buf.write(";\3;\7;\u02dd\n;\f;\16;\u02e0\13;\3<\3<\3<\7<\u02e5\n")\r
-        buf.write("<\f<\16<\u02e8\13<\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\5")\r
-        buf.write("=\u02f5\n=\3>\5>\u02f8\n>\3>\3>\3>\7>\u02fd\n>\f>\16>")\r
-        buf.write("\u0300\13>\3>\3>\3>\3?\3?\3?\7?\u0308\n?\f?\16?\u030b")\r
-        buf.write("\13?\3?\3?\3@\3@\3@\7@\u0312\n@\f@\16@\u0315\13@\3@\3")\r
-        buf.write("@\3A\3A\3A\7A\u031c\nA\fA\16A\u031f\13A\3A\5A\u0322\n")\r
-        buf.write("A\3A\5A\u0325\nA\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3")\r
-        buf.write("B\5B\u0334\nB\3C\3C\7C\u0338\nC\fC\16C\u033b\13C\3C\5")\r
-        buf.write("C\u033e\nC\3C\3C\3D\6D\u0343\nD\rD\16D\u0344\3E\3E\3E")\r
-        buf.write("\3E\5E\u034b\nE\3F\3F\3F\3F\3F\3F\3F\3F\5F\u0355\nF\3")\r
-        buf.write("F\3F\3F\3F\3F\3F\5F\u035d\nF\3G\3G\3G\3G\3G\3G\3G\3G\3")\r
-        buf.write("G\3G\3G\3G\3G\3G\3G\3G\5G\u036f\nG\3H\3H\3H\3H\3H\3H\3")\r
-        buf.write("H\3H\3H\3H\3H\3H\3H\5H\u037e\nH\3H\2\2I\2\4\6\b\n\f\16")\r
-        buf.write("\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDF")\r
-        buf.write("HJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086")\r
-        buf.write("\u0088\u008a\u008c\u008e\2\f\3\2\b\f\3\2\27\30\3\2\33")\r
-        buf.write("\'\5\2,,./\679\4\2\7\7:C\3\2IJ\3\2KN\3\2OP\3\2\4\4\3\2")\r
-        buf.write("\26\26\2\u03d8\2\u0093\3\2\2\2\4\u00a8\3\2\2\2\6\u00ab")\r
-        buf.write("\3\2\2\2\b\u00bd\3\2\2\2\n\u00d0\3\2\2\2\f\u00d2\3\2\2")\r
-        buf.write("\2\16\u00da\3\2\2\2\20\u00df\3\2\2\2\22\u00f9\3\2\2\2")\r
-        buf.write("\24\u00fb\3\2\2\2\26\u0108\3\2\2\2\30\u010a\3\2\2\2\32")\r
-        buf.write("\u010d\3\2\2\2\34\u0111\3\2\2\2\36\u0117\3\2\2\2 \u011b")\r
-        buf.write("\3\2\2\2\"\u012a\3\2\2\2$\u013f\3\2\2\2&\u0141\3\2\2\2")\r
-        buf.write("(\u0149\3\2\2\2*\u014e\3\2\2\2,\u015e\3\2\2\2.\u0172\3")\r
-        buf.write("\2\2\2\60\u0184\3\2\2\2\62\u0192\3\2\2\2\64\u0194\3\2")\r
-        buf.write("\2\2\66\u019c\3\2\2\28\u01b9\3\2\2\2:\u01bb\3\2\2\2<\u01c8")\r
-        buf.write("\3\2\2\2>\u01cf\3\2\2\2@\u01d6\3\2\2\2B\u01ea\3\2\2\2")\r
-        buf.write("D\u01f4\3\2\2\2F\u01f6\3\2\2\2H\u01fe\3\2\2\2J\u020c\3")\r
-        buf.write("\2\2\2L\u0216\3\2\2\2N\u0228\3\2\2\2P\u0239\3\2\2\2R\u023b")\r
-        buf.write("\3\2\2\2T\u025d\3\2\2\2V\u0265\3\2\2\2X\u026d\3\2\2\2")\r
-        buf.write("Z\u0289\3\2\2\2\\\u028b\3\2\2\2^\u0293\3\2\2\2`\u029a")\r
-        buf.write("\3\2\2\2b\u029c\3\2\2\2d\u029e\3\2\2\2f\u02a0\3\2\2\2")\r
-        buf.write("h\u02a9\3\2\2\2j\u02b1\3\2\2\2l\u02b9\3\2\2\2n\u02c1\3")\r
-        buf.write("\2\2\2p\u02c9\3\2\2\2r\u02d1\3\2\2\2t\u02d9\3\2\2\2v\u02e1")\r
-        buf.write("\3\2\2\2x\u02f4\3\2\2\2z\u02f7\3\2\2\2|\u0304\3\2\2\2")\r
-        buf.write("~\u030e\3\2\2\2\u0080\u0318\3\2\2\2\u0082\u0333\3\2\2")\r
-        buf.write("\2\u0084\u0335\3\2\2\2\u0086\u0342\3\2\2\2\u0088\u034a")\r
-        buf.write("\3\2\2\2\u008a\u035c\3\2\2\2\u008c\u036e\3\2\2\2\u008e")\r
-        buf.write("\u037d\3\2\2\2\u0090\u0092\5\4\3\2\u0091\u0090\3\2\2\2")\r
-        buf.write("\u0092\u0095\3\2\2\2\u0093\u0091\3\2\2\2\u0093\u0094\3")\r
-        buf.write("\2\2\2\u0094\3\3\2\2\2\u0095\u0093\3\2\2\2\u0096\u0098")\r
-        buf.write("\5\b\5\2\u0097\u0096\3\2\2\2\u0097\u0098\3\2\2\2\u0098")\r
-        buf.write("\u0099\3\2\2\2\u0099\u009d\5,\27\2\u009a\u009c\5\n\6\2")\r
-        buf.write("\u009b\u009a\3\2\2\2\u009c\u009f\3\2\2\2\u009d\u009b\3")\r
-        buf.write("\2\2\2\u009d\u009e\3\2\2\2\u009e\u00a0\3\2\2\2\u009f\u009d")\r
-        buf.write("\3\2\2\2\u00a0\u00a1\7\3\2\2\u00a1\u00a9\3\2\2\2\u00a2")\r
-        buf.write("\u00a9\5\6\4\2\u00a3\u00a9\5\n\6\2\u00a4\u00a6\5\u0080")\r
-        buf.write("A\2\u00a5\u00a7\7\4\2\2\u00a6\u00a5\3\2\2\2\u00a6\u00a7")\r
-        buf.write("\3\2\2\2\u00a7\u00a9\3\2\2\2\u00a8\u0097\3\2\2\2\u00a8")\r
-        buf.write("\u00a2\3\2\2\2\u00a8\u00a3\3\2\2\2\u00a8\u00a4\3\2\2\2")\r
-        buf.write("\u00a9\5\3\2\2\2\u00aa\u00ac\5\b\5\2\u00ab\u00aa\3\2\2")\r
-        buf.write("\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00b6")\r
-        buf.write("\5,\27\2\u00ae\u00b0\5\n\6\2\u00af\u00ae\3\2\2\2\u00b0")\r
-        buf.write("\u00b1\3\2\2\2\u00b1\u00af\3\2\2\2\u00b1\u00b2\3\2\2\2")\r
-        buf.write("\u00b2\u00b3\3\2\2\2\u00b3\u00b4\5\u0084C\2\u00b4\u00b7")\r
-        buf.write("\3\2\2\2\u00b5\u00b7\5\u0084C\2\u00b6\u00af\3\2\2\2\u00b6")\r
-        buf.write("\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00b9\b\4\1\2")\r
-        buf.write("\u00b9\7\3\2\2\2\u00ba\u00be\5\20\t\2\u00bb\u00be\5\22")\r
-        buf.write("\n\2\u00bc\u00be\5*\26\2\u00bd\u00ba\3\2\2\2\u00bd\u00bb")\r
-        buf.write("\3\2\2\2\u00bd\u00bc\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf")\r
-        buf.write("\u00bd\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\t\3\2\2\2\u00c1")\r
-        buf.write("\u00c3\7\5\2\2\u00c2\u00c4\5\b\5\2\u00c3\u00c2\3\2\2\2")\r
-        buf.write("\u00c3\u00c4\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\u00c6\5")\r
-        buf.write("\f\7\2\u00c6\u00c7\7\4\2\2\u00c7\u00c8\b\6\1\2\u00c8\u00d1")\r
-        buf.write("\3\2\2\2\u00c9\u00cb\5\b\5\2\u00ca\u00cc\5\f\7\2\u00cb")\r
-        buf.write("\u00ca\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2")\r
-        buf.write("\u00cd\u00ce\7\4\2\2\u00ce\u00cf\b\6\1\2\u00cf\u00d1\3")\r
-        buf.write("\2\2\2\u00d0\u00c1\3\2\2\2\u00d0\u00c9\3\2\2\2\u00d1\13")\r
-        buf.write("\3\2\2\2\u00d2\u00d7\5\16\b\2\u00d3\u00d4\7\6\2\2\u00d4")\r
-        buf.write("\u00d6\5\16\b\2\u00d5\u00d3\3\2\2\2\u00d6\u00d9\3\2\2")\r
-        buf.write("\2\u00d7\u00d5\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8\r\3\2")\r
-        buf.write("\2\2\u00d9\u00d7\3\2\2\2\u00da\u00dd\5,\27\2\u00db\u00dc")\r
-        buf.write("\7\7\2\2\u00dc\u00de\5D#\2\u00dd\u00db\3\2\2\2\u00dd\u00de")\r
-        buf.write("\3\2\2\2\u00de\17\3\2\2\2\u00df\u00e0\t\2\2\2\u00e0\21")\r
-        buf.write("\3\2\2\2\u00e1\u00fa\7\r\2\2\u00e2\u00fa\7\16\2\2\u00e3")\r
-        buf.write("\u00fa\7\17\2\2\u00e4\u00fa\7\20\2\2\u00e5\u00fa\7\21")\r
-        buf.write("\2\2\u00e6\u00fa\7\22\2\2\u00e7\u00fa\7\23\2\2\u00e8\u00fa")\r
-        buf.write("\7\24\2\2\u00e9\u00fa\7\25\2\2\u00ea\u00eb\5\26\f\2\u00eb")\r
-        buf.write("\u00ec\b\n\1\2\u00ec\u00fa\3\2\2\2\u00ed\u00ee\5$\23\2")\r
-        buf.write("\u00ee\u00ef\b\n\1\2\u00ef\u00fa\3\2\2\2\u00f0\u00f4\7")\r
-        buf.write("_\2\2\u00f1\u00f3\5*\26\2\u00f2\u00f1\3\2\2\2\u00f3\u00f6")\r
-        buf.write("\3\2\2\2\u00f4\u00f2\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5")\r
-        buf.write("\u00f7\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7\u00fa\5,\27\2")\r
-        buf.write("\u00f8\u00fa\5\24\13\2\u00f9\u00e1\3\2\2\2\u00f9\u00e2")\r
-        buf.write("\3\2\2\2\u00f9\u00e3\3\2\2\2\u00f9\u00e4\3\2\2\2\u00f9")\r
-        buf.write("\u00e5\3\2\2\2\u00f9\u00e6\3\2\2\2\u00f9\u00e7\3\2\2\2")\r
-        buf.write("\u00f9\u00e8\3\2\2\2\u00f9\u00e9\3\2\2\2\u00f9\u00ea\3")\r
-        buf.write("\2\2\2\u00f9\u00ed\3\2\2\2\u00f9\u00f0\3\2\2\2\u00f9\u00f8")\r
-        buf.write("\3\2\2\2\u00fa\23\3\2\2\2\u00fb\u00fc\7_\2\2\u00fc\25")\r
-        buf.write("\3\2\2\2\u00fd\u00ff\5\30\r\2\u00fe\u0100\7_\2\2\u00ff")\r
-        buf.write("\u00fe\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\u0101\3\2\2\2")\r
-        buf.write("\u0101\u0102\7\3\2\2\u0102\u0103\5\32\16\2\u0103\u0104")\r
-        buf.write("\7\26\2\2\u0104\u0109\3\2\2\2\u0105\u0106\5\30\r\2\u0106")\r
-        buf.write("\u0107\7_\2\2\u0107\u0109\3\2\2\2\u0108\u00fd\3\2\2\2")\r
-        buf.write("\u0108\u0105\3\2\2\2\u0109\27\3\2\2\2\u010a\u010b\t\3")\r
-        buf.write("\2\2\u010b\31\3\2\2\2\u010c\u010e\5\34\17\2\u010d\u010c")\r
-        buf.write("\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u010d\3\2\2\2\u010f")\r
-        buf.write("\u0110\3\2\2\2\u0110\33\3\2\2\2\u0111\u0112\5\36\20\2")\r
-        buf.write("\u0112\u0113\5 \21\2\u0113\u0114\7\4\2\2\u0114\35\3\2")\r
-        buf.write("\2\2\u0115\u0118\5*\26\2\u0116\u0118\5\22\n\2\u0117\u0115")\r
-        buf.write("\3\2\2\2\u0117\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119")\r
-        buf.write("\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a\37\3\2\2\2\u011b")\r
-        buf.write("\u0120\5\"\22\2\u011c\u011d\7\6\2\2\u011d\u011f\5\"\22")\r
-        buf.write("\2\u011e\u011c\3\2\2\2\u011f\u0122\3\2\2\2\u0120\u011e")\r
-        buf.write("\3\2\2\2\u0120\u0121\3\2\2\2\u0121!\3\2\2\2\u0122\u0120")\r
-        buf.write("\3\2\2\2\u0123\u0126\5,\27\2\u0124\u0125\7\31\2\2\u0125")\r
-        buf.write("\u0127\5^\60\2\u0126\u0124\3\2\2\2\u0126\u0127\3\2\2\2")\r
-        buf.write("\u0127\u012b\3\2\2\2\u0128\u0129\7\31\2\2\u0129\u012b")\r
-        buf.write("\5^\60\2\u012a\u0123\3\2\2\2\u012a\u0128\3\2\2\2\u012b")\r
-        buf.write("#\3\2\2\2\u012c\u012d\7\32\2\2\u012d\u012e\7\3\2\2\u012e")\r
-        buf.write("\u0130\5&\24\2\u012f\u0131\7\6\2\2\u0130\u012f\3\2\2\2")\r
-        buf.write("\u0130\u0131\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0133\7")\r
-        buf.write("\26\2\2\u0133\u0140\3\2\2\2\u0134\u0135\7\32\2\2\u0135")\r
-        buf.write("\u0136\7_\2\2\u0136\u0137\7\3\2\2\u0137\u0139\5&\24\2")\r
-        buf.write("\u0138\u013a\7\6\2\2\u0139\u0138\3\2\2\2\u0139\u013a\3")\r
-        buf.write("\2\2\2\u013a\u013b\3\2\2\2\u013b\u013c\7\26\2\2\u013c")\r
-        buf.write("\u0140\3\2\2\2\u013d\u013e\7\32\2\2\u013e\u0140\7_\2\2")\r
-        buf.write("\u013f\u012c\3\2\2\2\u013f\u0134\3\2\2\2\u013f\u013d\3")\r
-        buf.write("\2\2\2\u0140%\3\2\2\2\u0141\u0146\5(\25\2\u0142\u0143")\r
-        buf.write("\7\6\2\2\u0143\u0145\5(\25\2\u0144\u0142\3\2\2\2\u0145")\r
-        buf.write("\u0148\3\2\2\2\u0146\u0144\3\2\2\2\u0146\u0147\3\2\2\2")\r
-        buf.write("\u0147\'\3\2\2\2\u0148\u0146\3\2\2\2\u0149\u014c\7_\2")\r
-        buf.write("\2\u014a\u014b\7\7\2\2\u014b\u014d\5^\60\2\u014c\u014a")\r
-        buf.write("\3\2\2\2\u014c\u014d\3\2\2\2\u014d)\3\2\2\2\u014e\u014f")\r
-        buf.write("\t\4\2\2\u014f+\3\2\2\2\u0150\u0152\5\62\32\2\u0151\u0150")\r
-        buf.write("\3\2\2\2\u0151\u0152\3\2\2\2\u0152\u0154\3\2\2\2\u0153")\r
-        buf.write("\u0155\7$\2\2\u0154\u0153\3\2\2\2\u0154\u0155\3\2\2\2")\r
-        buf.write("\u0155\u0157\3\2\2\2\u0156\u0158\7%\2\2\u0157\u0156\3")\r
-        buf.write("\2\2\2\u0157\u0158\3\2\2\2\u0158\u015a\3\2\2\2\u0159\u015b")\r
-        buf.write("\7&\2\2\u015a\u0159\3\2\2\2\u015a\u015b\3\2\2\2\u015b")\r
-        buf.write("\u015c\3\2\2\2\u015c\u015f\5.\30\2\u015d\u015f\5\62\32")\r
-        buf.write("\2\u015e\u0151\3\2\2\2\u015e\u015d\3\2\2\2\u015f-\3\2")\r
-        buf.write("\2\2\u0160\u0164\7_\2\2\u0161\u0163\5\60\31\2\u0162\u0161")\r
-        buf.write("\3\2\2\2\u0163\u0166\3\2\2\2\u0164\u0162\3\2\2\2\u0164")\r
-        buf.write("\u0165\3\2\2\2\u0165\u0173\3\2\2\2\u0166\u0164\3\2\2\2")\r
-        buf.write("\u0167\u0169\7(\2\2\u0168\u016a\7$\2\2\u0169\u0168\3\2")\r
-        buf.write("\2\2\u0169\u016a\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u016c")\r
-        buf.write("\5,\27\2\u016c\u016e\7)\2\2\u016d\u016f\5\60\31\2\u016e")\r
-        buf.write("\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u016e\3\2\2\2")\r
-        buf.write("\u0170\u0171\3\2\2\2\u0171\u0173\3\2\2\2\u0172\u0160\3")\r
-        buf.write("\2\2\2\u0172\u0167\3\2\2\2\u0173/\3\2\2\2\u0174\u0175")\r
-        buf.write("\7*\2\2\u0175\u0176\5^\60\2\u0176\u0177\7+\2\2\u0177\u0185")\r
-        buf.write("\3\2\2\2\u0178\u0179\7*\2\2\u0179\u0185\7+\2\2\u017a\u017b")\r
-        buf.write("\7(\2\2\u017b\u017c\5\64\33\2\u017c\u017d\7)\2\2\u017d")\r
-        buf.write("\u0185\3\2\2\2\u017e\u017f\7(\2\2\u017f\u0180\5:\36\2")\r
-        buf.write("\u0180\u0181\7)\2\2\u0181\u0185\3\2\2\2\u0182\u0183\7")\r
-        buf.write("(\2\2\u0183\u0185\7)\2\2\u0184\u0174\3\2\2\2\u0184\u0178")\r
-        buf.write("\3\2\2\2\u0184\u017a\3\2\2\2\u0184\u017e\3\2\2\2\u0184")\r
-        buf.write("\u0182\3\2\2\2\u0185\61\3\2\2\2\u0186\u0188\7,\2\2\u0187")\r
-        buf.write("\u0189\5*\26\2\u0188\u0187\3\2\2\2\u0189\u018a\3\2\2\2")\r
-        buf.write("\u018a\u0188\3\2\2\2\u018a\u018b\3\2\2\2\u018b\u018d\3")\r
-        buf.write("\2\2\2\u018c\u018e\5\62\32\2\u018d\u018c\3\2\2\2\u018d")\r
-        buf.write("\u018e\3\2\2\2\u018e\u0193\3\2\2\2\u018f\u0190\7,\2\2")\r
-        buf.write("\u0190\u0193\5\62\32\2\u0191\u0193\7,\2\2\u0192\u0186")\r
-        buf.write("\3\2\2\2\u0192\u018f\3\2\2\2\u0192\u0191\3\2\2\2\u0193")\r
-        buf.write("\63\3\2\2\2\u0194\u019a\5\66\34\2\u0195\u0197\7\6\2\2")\r
-        buf.write("\u0196\u0198\7\37\2\2\u0197\u0196\3\2\2\2\u0197\u0198")\r
-        buf.write("\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019b\7-\2\2\u019a")\r
-        buf.write("\u0195\3\2\2\2\u019a\u019b\3\2\2\2\u019b\65\3\2\2\2\u019c")\r
-        buf.write("\u01a4\58\35\2\u019d\u019f\7\6\2\2\u019e\u01a0\7\37\2")\r
-        buf.write("\2\u019f\u019e\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0\u01a1")\r
-        buf.write("\3\2\2\2\u01a1\u01a3\58\35\2\u01a2\u019d\3\2\2\2\u01a3")\r
-        buf.write("\u01a6\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a4\u01a5\3\2\2\2")\r
-        buf.write("\u01a5\67\3\2\2\2\u01a6\u01a4\3\2\2\2\u01a7\u01ac\5\b")\r
-        buf.write("\5\2\u01a8\u01ab\5,\27\2\u01a9\u01ab\5> \2\u01aa\u01a8")\r
-        buf.write("\3\2\2\2\u01aa\u01a9\3\2\2\2\u01ab\u01ae\3\2\2\2\u01ac")\r
-        buf.write("\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01b0\3\2\2\2")\r
-        buf.write("\u01ae\u01ac\3\2\2\2\u01af\u01b1\7\37\2\2\u01b0\u01af")\r
-        buf.write("\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1\u01ba\3\2\2\2\u01b2")\r
-        buf.write("\u01b4\5\62\32\2\u01b3\u01b2\3\2\2\2\u01b4\u01b7\3\2\2")\r
-        buf.write("\2\u01b5\u01b3\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\u01b8")\r
-        buf.write("\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b8\u01ba\7_\2\2\u01b9")\r
-        buf.write("\u01a7\3\2\2\2\u01b9\u01b5\3\2\2\2\u01ba9\3\2\2\2\u01bb")\r
-        buf.write("\u01c0\7_\2\2\u01bc\u01bd\7\6\2\2\u01bd\u01bf\7_\2\2\u01be")\r
-        buf.write("\u01bc\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0\u01be\3\2\2\2")\r
-        buf.write("\u01c0\u01c1\3\2\2\2\u01c1;\3\2\2\2\u01c2\u01c0\3\2\2")\r
-        buf.write("\2\u01c3\u01c5\5\36\20\2\u01c4\u01c6\5> \2\u01c5\u01c4")\r
-        buf.write("\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c9\3\2\2\2\u01c7")\r
-        buf.write("\u01c9\5\24\13\2\u01c8\u01c3\3\2\2\2\u01c8\u01c7\3\2\2")\r
-        buf.write("\2\u01c9=\3\2\2\2\u01ca\u01cc\5\62\32\2\u01cb\u01cd\5")\r
-        buf.write("@!\2\u01cc\u01cb\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd\u01d0")\r
-        buf.write("\3\2\2\2\u01ce\u01d0\5@!\2\u01cf\u01ca\3\2\2\2\u01cf\u01ce")\r
-        buf.write("\3\2\2\2\u01d0?\3\2\2\2\u01d1\u01d2\7(\2\2\u01d2\u01d3")\r
-        buf.write("\5> \2\u01d3\u01d4\7)\2\2\u01d4\u01d7\3\2\2\2\u01d5\u01d7")\r
-        buf.write("\5B\"\2\u01d6\u01d1\3\2\2\2\u01d6\u01d5\3\2\2\2\u01d7")\r
-        buf.write("\u01db\3\2\2\2\u01d8\u01da\5B\"\2\u01d9\u01d8\3\2\2\2")\r
-        buf.write("\u01da\u01dd\3\2\2\2\u01db\u01d9\3\2\2\2\u01db\u01dc\3")\r
-        buf.write("\2\2\2\u01dcA\3\2\2\2\u01dd\u01db\3\2\2\2\u01de\u01df")\r
-        buf.write("\7*\2\2\u01df\u01eb\7+\2\2\u01e0\u01e1\7*\2\2\u01e1\u01e2")\r
-        buf.write("\5^\60\2\u01e2\u01e3\7+\2\2\u01e3\u01eb\3\2\2\2\u01e4")\r
-        buf.write("\u01e5\7(\2\2\u01e5\u01eb\7)\2\2\u01e6\u01e7\7(\2\2\u01e7")\r
-        buf.write("\u01e8\5\64\33\2\u01e8\u01e9\7)\2\2\u01e9\u01eb\3\2\2")\r
-        buf.write("\2\u01ea\u01de\3\2\2\2\u01ea\u01e0\3\2\2\2\u01ea\u01e4")\r
-        buf.write("\3\2\2\2\u01ea\u01e6\3\2\2\2\u01ebC\3\2\2\2\u01ec\u01f5")\r
-        buf.write("\5`\61\2\u01ed\u01ee\7\3\2\2\u01ee\u01f0\5F$\2\u01ef\u01f1")\r
-        buf.write("\7\6\2\2\u01f0\u01ef\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1")\r
-        buf.write("\u01f2\3\2\2\2\u01f2\u01f3\7\26\2\2\u01f3\u01f5\3\2\2")\r
-        buf.write("\2\u01f4\u01ec\3\2\2\2\u01f4\u01ed\3\2\2\2\u01f5E\3\2")\r
-        buf.write("\2\2\u01f6\u01fb\5D#\2\u01f7\u01f8\7\6\2\2\u01f8\u01fa")\r
-        buf.write("\5D#\2\u01f9\u01f7\3\2\2\2\u01fa\u01fd\3\2\2\2\u01fb\u01f9")\r
-        buf.write("\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fcG\3\2\2\2\u01fd\u01fb")\r
-        buf.write("\3\2\2\2\u01fe\u0200\5`\61\2\u01ff\u0201\7\37\2\2\u0200")\r
-        buf.write("\u01ff\3\2\2\2\u0200\u0201\3\2\2\2\u0201\u0209\3\2\2\2")\r
-        buf.write("\u0202\u0203\7\6\2\2\u0203\u0205\5`\61\2\u0204\u0206\7")\r
-        buf.write("\37\2\2\u0205\u0204\3\2\2\2\u0205\u0206\3\2\2\2\u0206")\r
-        buf.write("\u0208\3\2\2\2\u0207\u0202\3\2\2\2\u0208\u020b\3\2\2\2")\r
-        buf.write("\u0209\u0207\3\2\2\2\u0209\u020a\3\2\2\2\u020aI\3\2\2")\r
-        buf.write("\2\u020b\u0209\3\2\2\2\u020c\u0213\5L\'\2\u020d\u020e")\r
-        buf.write("\7.\2\2\u020e\u0212\5L\'\2\u020f\u0210\7/\2\2\u0210\u0212")\r
-        buf.write("\5L\'\2\u0211\u020d\3\2\2\2\u0211\u020f\3\2\2\2\u0212")\r
-        buf.write("\u0215\3\2\2\2\u0213\u0211\3\2\2\2\u0213\u0214\3\2\2\2")\r
-        buf.write("\u0214K\3\2\2\2\u0215\u0213\3\2\2\2\u0216\u021f\5N(\2")\r
-        buf.write("\u0217\u0218\7,\2\2\u0218\u021e\5N(\2\u0219\u021a\7\60")\r
-        buf.write("\2\2\u021a\u021e\5N(\2\u021b\u021c\7\61\2\2\u021c\u021e")\r
-        buf.write("\5N(\2\u021d\u0217\3\2\2\2\u021d\u0219\3\2\2\2\u021d\u021b")\r
-        buf.write("\3\2\2\2\u021e\u0221\3\2\2\2\u021f\u021d\3\2\2\2\u021f")\r
-        buf.write("\u0220\3\2\2\2\u0220M\3\2\2\2\u0221\u021f\3\2\2\2\u0222")\r
-        buf.write("\u0223\7(\2\2\u0223\u0224\5<\37\2\u0224\u0225\7)\2\2\u0225")\r
-        buf.write("\u0226\5N(\2\u0226\u0229\3\2\2\2\u0227\u0229\5P)\2\u0228")\r
-        buf.write("\u0222\3\2\2\2\u0228\u0227\3\2\2\2\u0229O\3\2\2\2\u022a")\r
-        buf.write("\u023a\5R*\2\u022b\u022c\7\62\2\2\u022c\u023a\5P)\2\u022d")\r
-        buf.write("\u022e\7\63\2\2\u022e\u023a\5P)\2\u022f\u0230\5V,\2\u0230")\r
-        buf.write("\u0231\5N(\2\u0231\u023a\3\2\2\2\u0232\u0233\7\64\2\2")\r
-        buf.write("\u0233\u023a\5P)\2\u0234\u0235\7\64\2\2\u0235\u0236\7")\r
-        buf.write("(\2\2\u0236\u0237\5<\37\2\u0237\u0238\7)\2\2\u0238\u023a")\r
-        buf.write("\3\2\2\2\u0239\u022a\3\2\2\2\u0239\u022b\3\2\2\2\u0239")\r
-        buf.write("\u022d\3\2\2\2\u0239\u022f\3\2\2\2\u0239\u0232\3\2\2\2")\r
-        buf.write("\u0239\u0234\3\2\2\2\u023aQ\3\2\2\2\u023b\u023c\5X-\2")\r
-        buf.write("\u023c\u025a\b*\1\2\u023d\u023e\7*\2\2\u023e\u023f\5\\")\r
-        buf.write("/\2\u023f\u0240\7+\2\2\u0240\u0259\3\2\2\2\u0241\u0242")\r
-        buf.write("\7(\2\2\u0242\u0243\7)\2\2\u0243\u0259\b*\1\2\u0244\u0245")\r
-        buf.write("\7(\2\2\u0245\u0246\5H%\2\u0246\u0247\7)\2\2\u0247\u0248")\r
-        buf.write("\b*\1\2\u0248\u0259\3\2\2\2\u0249\u024a\7(\2\2\u024a\u024b")\r
-        buf.write("\5T+\2\u024b\u024c\7)\2\2\u024c\u0259\3\2\2\2\u024d\u024e")\r
-        buf.write("\7\65\2\2\u024e\u024f\7_\2\2\u024f\u0259\b*\1\2\u0250")\r
-        buf.write("\u0251\7,\2\2\u0251\u0252\7_\2\2\u0252\u0259\b*\1\2\u0253")\r
-        buf.write("\u0254\7\66\2\2\u0254\u0255\7_\2\2\u0255\u0259\b*\1\2")\r
-        buf.write("\u0256\u0259\7\62\2\2\u0257\u0259\7\63\2\2\u0258\u023d")\r
-        buf.write("\3\2\2\2\u0258\u0241\3\2\2\2\u0258\u0244\3\2\2\2\u0258")\r
-        buf.write("\u0249\3\2\2\2\u0258\u024d\3\2\2\2\u0258\u0250\3\2\2\2")\r
-        buf.write("\u0258\u0253\3\2\2\2\u0258\u0256\3\2\2\2\u0258\u0257\3")\r
-        buf.write("\2\2\2\u0259\u025c\3\2\2\2\u025a\u0258\3\2\2\2\u025a\u025b")\r
-        buf.write("\3\2\2\2\u025bS\3\2\2\2\u025c\u025a\3\2\2\2\u025d\u0262")\r
-        buf.write("\58\35\2\u025e\u025f\7\6\2\2\u025f\u0261\58\35\2\u0260")\r
-        buf.write("\u025e\3\2\2\2\u0261\u0264\3\2\2\2\u0262\u0260\3\2\2\2")\r
-        buf.write("\u0262\u0263\3\2\2\2\u0263U\3\2\2\2\u0264\u0262\3\2\2")\r
-        buf.write("\2\u0265\u0266\t\5\2\2\u0266W\3\2\2\2\u0267\u026e\7_\2")\r
-        buf.write("\2\u0268\u026e\5Z.\2\u0269\u026a\7(\2\2\u026a\u026b\5")\r
-        buf.write("\\/\2\u026b\u026c\7)\2\2\u026c\u026e\3\2\2\2\u026d\u0267")\r
-        buf.write("\3\2\2\2\u026d\u0268\3\2\2\2\u026d\u0269\3\2\2\2\u026e")\r
-        buf.write("Y\3\2\2\2\u026f\u028a\7b\2\2\u0270\u028a\7d\2\2\u0271")\r
-        buf.write("\u028a\7c\2\2\u0272\u028a\7`\2\2\u0273\u0275\7_\2\2\u0274")\r
-        buf.write("\u0273\3\2\2\2\u0275\u0278\3\2\2\2\u0276\u0274\3\2\2\2")\r
-        buf.write("\u0276\u0277\3\2\2\2\u0277\u027a\3\2\2\2\u0278\u0276\3")\r
-        buf.write("\2\2\2\u0279\u027b\7a\2\2\u027a\u0279\3\2\2\2\u027b\u027c")\r
-        buf.write("\3\2\2\2\u027c\u027a\3\2\2\2\u027c\u027d\3\2\2\2\u027d")\r
-        buf.write("\u027f\3\2\2\2\u027e\u0276\3\2\2\2\u027f\u0280\3\2\2\2")\r
-        buf.write("\u0280\u027e\3\2\2\2\u0280\u0281\3\2\2\2\u0281\u0285\3")\r
-        buf.write("\2\2\2\u0282\u0284\7_\2\2\u0283\u0282\3\2\2\2\u0284\u0287")\r
-        buf.write("\3\2\2\2\u0285\u0283\3\2\2\2\u0285\u0286\3\2\2\2\u0286")\r
-        buf.write("\u028a\3\2\2\2\u0287\u0285\3\2\2\2\u0288\u028a\7e\2\2")\r
-        buf.write("\u0289\u026f\3\2\2\2\u0289\u0270\3\2\2\2\u0289\u0271\3")\r
-        buf.write("\2\2\2\u0289\u0272\3\2\2\2\u0289\u027e\3\2\2\2\u0289\u0288")\r
-        buf.write("\3\2\2\2\u028a[\3\2\2\2\u028b\u0290\5`\61\2\u028c\u028d")\r
-        buf.write("\7\6\2\2\u028d\u028f\5`\61\2\u028e\u028c\3\2\2\2\u028f")\r
-        buf.write("\u0292\3\2\2\2\u0290\u028e\3\2\2\2\u0290\u0291\3\2\2\2")\r
-        buf.write("\u0291]\3\2\2\2\u0292\u0290\3\2\2\2\u0293\u0294\5f\64")\r
-        buf.write("\2\u0294_\3\2\2\2\u0295\u0296\5b\62\2\u0296\u0297\5d\63")\r
-        buf.write("\2\u0297\u0298\5`\61\2\u0298\u029b\3\2\2\2\u0299\u029b")\r
-        buf.write("\5f\64\2\u029a\u0295\3\2\2\2\u029a\u0299\3\2\2\2\u029b")\r
-        buf.write("a\3\2\2\2\u029c\u029d\5P)\2\u029dc\3\2\2\2\u029e\u029f")\r
-        buf.write("\t\6\2\2\u029fe\3\2\2\2\u02a0\u02a7\5h\65\2\u02a1\u02a2")\r
-        buf.write("\7D\2\2\u02a2\u02a3\5\\/\2\u02a3\u02a4\7\31\2\2\u02a4")\r
-        buf.write("\u02a5\5f\64\2\u02a5\u02a6\b\64\1\2\u02a6\u02a8\3\2\2")\r
-        buf.write("\2\u02a7\u02a1\3\2\2\2\u02a7\u02a8\3\2\2\2\u02a8g\3\2")\r
-        buf.write("\2\2\u02a9\u02ae\5j\66\2\u02aa\u02ab\7E\2\2\u02ab\u02ad")\r
-        buf.write("\5j\66\2\u02ac\u02aa\3\2\2\2\u02ad\u02b0\3\2\2\2\u02ae")\r
-        buf.write("\u02ac\3\2\2\2\u02ae\u02af\3\2\2\2\u02afi\3\2\2\2\u02b0")\r
-        buf.write("\u02ae\3\2\2\2\u02b1\u02b6\5l\67\2\u02b2\u02b3\7F\2\2")\r
-        buf.write("\u02b3\u02b5\5l\67\2\u02b4\u02b2\3\2\2\2\u02b5\u02b8\3")\r
-        buf.write("\2\2\2\u02b6\u02b4\3\2\2\2\u02b6\u02b7\3\2\2\2\u02b7k")\r
-        buf.write("\3\2\2\2\u02b8\u02b6\3\2\2\2\u02b9\u02be\5n8\2\u02ba\u02bb")\r
-        buf.write("\7G\2\2\u02bb\u02bd\5n8\2\u02bc\u02ba\3\2\2\2\u02bd\u02c0")\r
-        buf.write("\3\2\2\2\u02be\u02bc\3\2\2\2\u02be\u02bf\3\2\2\2\u02bf")\r
-        buf.write("m\3\2\2\2\u02c0\u02be\3\2\2\2\u02c1\u02c6\5p9\2\u02c2")\r
-        buf.write("\u02c3\7H\2\2\u02c3\u02c5\5p9\2\u02c4\u02c2\3\2\2\2\u02c5")\r
-        buf.write("\u02c8\3\2\2\2\u02c6\u02c4\3\2\2\2\u02c6\u02c7\3\2\2\2")\r
-        buf.write("\u02c7o\3\2\2\2\u02c8\u02c6\3\2\2\2\u02c9\u02ce\5r:\2")\r
-        buf.write("\u02ca\u02cb\7\67\2\2\u02cb\u02cd\5r:\2\u02cc\u02ca\3")\r
-        buf.write("\2\2\2\u02cd\u02d0\3\2\2\2\u02ce\u02cc\3\2\2\2\u02ce\u02cf")\r
-        buf.write("\3\2\2\2\u02cfq\3\2\2\2\u02d0\u02ce\3\2\2\2\u02d1\u02d6")\r
-        buf.write("\5t;\2\u02d2\u02d3\t\7\2\2\u02d3\u02d5\5t;\2\u02d4\u02d2")\r
-        buf.write("\3\2\2\2\u02d5\u02d8\3\2\2\2\u02d6\u02d4\3\2\2\2\u02d6")\r
-        buf.write("\u02d7\3\2\2\2\u02d7s\3\2\2\2\u02d8\u02d6\3\2\2\2\u02d9")\r
-        buf.write("\u02de\5v<\2\u02da\u02db\t\b\2\2\u02db\u02dd\5v<\2\u02dc")\r
-        buf.write("\u02da\3\2\2\2\u02dd\u02e0\3\2\2\2\u02de\u02dc\3\2\2\2")\r
-        buf.write("\u02de\u02df\3\2\2\2\u02dfu\3\2\2\2\u02e0\u02de\3\2\2")\r
-        buf.write("\2\u02e1\u02e6\5J&\2\u02e2\u02e3\t\t\2\2\u02e3\u02e5\5")\r
-        buf.write("J&\2\u02e4\u02e2\3\2\2\2\u02e5\u02e8\3\2\2\2\u02e6\u02e4")\r
-        buf.write("\3\2\2\2\u02e6\u02e7\3\2\2\2\u02e7w\3\2\2\2\u02e8\u02e6")\r
-        buf.write("\3\2\2\2\u02e9\u02f5\5\u0082B\2\u02ea\u02f5\5\u0084C\2")\r
-        buf.write("\u02eb\u02f5\5\u0088E\2\u02ec\u02f5\5\u008aF\2\u02ed\u02f5")\r
-        buf.write("\5\u008cG\2\u02ee\u02f5\5\u008eH\2\u02ef\u02f5\5\u0080")\r
-        buf.write("A\2\u02f0\u02f5\5z>\2\u02f1\u02f5\5|?\2\u02f2\u02f5\5")\r
-        buf.write("~@\2\u02f3\u02f5\5\n\6\2\u02f4\u02e9\3\2\2\2\u02f4\u02ea")\r
-        buf.write("\3\2\2\2\u02f4\u02eb\3\2\2\2\u02f4\u02ec\3\2\2\2\u02f4")\r
-        buf.write("\u02ed\3\2\2\2\u02f4\u02ee\3\2\2\2\u02f4\u02ef\3\2\2\2")\r
-        buf.write("\u02f4\u02f0\3\2\2\2\u02f4\u02f1\3\2\2\2\u02f4\u02f2\3")\r
-        buf.write("\2\2\2\u02f4\u02f3\3\2\2\2\u02f5y\3\2\2\2\u02f6\u02f8")\r
-        buf.write("\7Q\2\2\u02f7\u02f6\3\2\2\2\u02f7\u02f8\3\2\2\2\u02f8")\r
-        buf.write("\u02f9\3\2\2\2\u02f9\u02fa\7_\2\2\u02fa\u02fe\7(\2\2\u02fb")\r
-        buf.write("\u02fd\n\n\2\2\u02fc\u02fb\3\2\2\2\u02fd\u0300\3\2\2\2")\r
-        buf.write("\u02fe\u02fc\3\2\2\2\u02fe\u02ff\3\2\2\2\u02ff\u0301\3")\r
-        buf.write("\2\2\2\u0300\u02fe\3\2\2\2\u0301\u0302\7)\2\2\u0302\u0303")\r
-        buf.write("\7\4\2\2\u0303{\3\2\2\2\u0304\u0305\7R\2\2\u0305\u0309")\r
-        buf.write("\7\3\2\2\u0306\u0308\n\13\2\2\u0307\u0306\3\2\2\2\u0308")\r
-        buf.write("\u030b\3\2\2\2\u0309\u0307\3\2\2\2\u0309\u030a\3\2\2\2")\r
-        buf.write("\u030a\u030c\3\2\2\2\u030b\u0309\3\2\2\2\u030c\u030d\7")\r
-        buf.write("\26\2\2\u030d}\3\2\2\2\u030e\u030f\7S\2\2\u030f\u0313")\r
-        buf.write("\7\3\2\2\u0310\u0312\n\13\2\2\u0311\u0310\3\2\2\2\u0312")\r
-        buf.write("\u0315\3\2\2\2\u0313\u0311\3\2\2\2\u0313\u0314\3\2\2\2")\r
-        buf.write("\u0314\u0316\3\2\2\2\u0315\u0313\3\2\2\2\u0316\u0317\7")\r
-        buf.write("\26\2\2\u0317\177\3\2\2\2\u0318\u0319\7_\2\2\u0319\u031d")\r
-        buf.write("\7(\2\2\u031a\u031c\5\n\6\2\u031b\u031a\3\2\2\2\u031c")\r
-        buf.write("\u031f\3\2\2\2\u031d\u031b\3\2\2\2\u031d\u031e\3\2\2\2")\r
-        buf.write("\u031e\u0321\3\2\2\2\u031f\u031d\3\2\2\2\u0320\u0322\5")\r
-        buf.write("\u0086D\2\u0321\u0320\3\2\2\2\u0321\u0322\3\2\2\2\u0322")\r
-        buf.write("\u0324\3\2\2\2\u0323\u0325\5\\/\2\u0324\u0323\3\2\2\2")\r
-        buf.write("\u0324\u0325\3\2\2\2\u0325\u0326\3\2\2\2\u0326\u0327\7")\r
-        buf.write(")\2\2\u0327\u0081\3\2\2\2\u0328\u0329\7_\2\2\u0329\u032a")\r
-        buf.write("\7\31\2\2\u032a\u0334\5x=\2\u032b\u032c\7T\2\2\u032c\u032d")\r
-        buf.write("\5^\60\2\u032d\u032e\7\31\2\2\u032e\u032f\5x=\2\u032f")\r
-        buf.write("\u0334\3\2\2\2\u0330\u0331\7U\2\2\u0331\u0332\7\31\2\2")\r
-        buf.write("\u0332\u0334\5x=\2\u0333\u0328\3\2\2\2\u0333\u032b\3\2")\r
-        buf.write("\2\2\u0333\u0330\3\2\2\2\u0334\u0083\3\2\2\2\u0335\u0339")\r
-        buf.write("\7\3\2\2\u0336\u0338\5\n\6\2\u0337\u0336\3\2\2\2\u0338")\r
-        buf.write("\u033b\3\2\2\2\u0339\u0337\3\2\2\2\u0339\u033a\3\2\2\2")\r
-        buf.write("\u033a\u033d\3\2\2\2\u033b\u0339\3\2\2\2\u033c\u033e\5")\r
-        buf.write("\u0086D\2\u033d\u033c\3\2\2\2\u033d\u033e\3\2\2\2\u033e")\r
-        buf.write("\u033f\3\2\2\2\u033f\u0340\7\26\2\2\u0340\u0085\3\2\2")\r
-        buf.write("\2\u0341\u0343\5x=\2\u0342\u0341\3\2\2\2\u0343\u0344\3")\r
-        buf.write("\2\2\2\u0344\u0342\3\2\2\2\u0344\u0345\3\2\2\2\u0345\u0087")\r
-        buf.write("\3\2\2\2\u0346\u034b\7\4\2\2\u0347\u0348\5\\/\2\u0348")\r
-        buf.write("\u0349\7\4\2\2\u0349\u034b\3\2\2\2\u034a\u0346\3\2\2\2")\r
-        buf.write("\u034a\u0347\3\2\2\2\u034b\u0089\3\2\2\2\u034c\u034d\7")\r
-        buf.write("V\2\2\u034d\u034e\7(\2\2\u034e\u034f\5\\/\2\u034f\u0350")\r
-        buf.write("\7)\2\2\u0350\u0351\bF\1\2\u0351\u0354\5x=\2\u0352\u0353")\r
-        buf.write("\7W\2\2\u0353\u0355\5x=\2\u0354\u0352\3\2\2\2\u0354\u0355")\r
-        buf.write("\3\2\2\2\u0355\u035d\3\2\2\2\u0356\u0357\7X\2\2\u0357")\r
-        buf.write("\u0358\7(\2\2\u0358\u0359\5\\/\2\u0359\u035a\7)\2\2\u035a")\r
-        buf.write("\u035b\5x=\2\u035b\u035d\3\2\2\2\u035c\u034c\3\2\2\2\u035c")\r
-        buf.write("\u0356\3\2\2\2\u035d\u008b\3\2\2\2\u035e\u035f\7Y\2\2")\r
-        buf.write("\u035f\u0360\7(\2\2\u0360\u0361\5\\/\2\u0361\u0362\7)")\r
-        buf.write("\2\2\u0362\u0363\5x=\2\u0363\u0364\bG\1\2\u0364\u036f")\r
-        buf.write("\3\2\2\2\u0365\u0366\7Z\2\2\u0366\u0367\5x=\2\u0367\u0368")\r
-        buf.write("\7Y\2\2\u0368\u0369\7(\2\2\u0369\u036a\5\\/\2\u036a\u036b")\r
-        buf.write("\7)\2\2\u036b\u036c\7\4\2\2\u036c\u036d\bG\1\2\u036d\u036f")\r
-        buf.write("\3\2\2\2\u036e\u035e\3\2\2\2\u036e\u0365\3\2\2\2\u036f")\r
-        buf.write("\u008d\3\2\2\2\u0370\u0371\7[\2\2\u0371\u0372\7_\2\2\u0372")\r
-        buf.write("\u037e\7\4\2\2\u0373\u0374\7\\\2\2\u0374\u037e\7\4\2\2")\r
-        buf.write("\u0375\u0376\7]\2\2\u0376\u037e\7\4\2\2\u0377\u0378\7")\r
-        buf.write("^\2\2\u0378\u037e\7\4\2\2\u0379\u037a\7^\2\2\u037a\u037b")\r
-        buf.write("\5\\/\2\u037b\u037c\7\4\2\2\u037c\u037e\3\2\2\2\u037d")\r
-        buf.write("\u0370\3\2\2\2\u037d\u0373\3\2\2\2\u037d\u0375\3\2\2\2")\r
-        buf.write("\u037d\u0377\3\2\2\2\u037d\u0379\3\2\2\2\u037e\u008f\3")\r
-        buf.write("\2\2\2o\u0093\u0097\u009d\u00a6\u00a8\u00ab\u00b1\u00b6")\r
-        buf.write("\u00bd\u00bf\u00c3\u00cb\u00d0\u00d7\u00dd\u00f4\u00f9")\r
-        buf.write("\u00ff\u0108\u010f\u0117\u0119\u0120\u0126\u012a\u0130")\r
-        buf.write("\u0139\u013f\u0146\u014c\u0151\u0154\u0157\u015a\u015e")\r
-        buf.write("\u0164\u0169\u0170\u0172\u0184\u018a\u018d\u0192\u0197")\r
-        buf.write("\u019a\u019f\u01a4\u01aa\u01ac\u01b0\u01b5\u01b9\u01c0")\r
-        buf.write("\u01c5\u01c8\u01cc\u01cf\u01d6\u01db\u01ea\u01f0\u01f4")\r
-        buf.write("\u01fb\u0200\u0205\u0209\u0211\u0213\u021d\u021f\u0228")\r
-        buf.write("\u0239\u0258\u025a\u0262\u026d\u0276\u027c\u0280\u0285")\r
-        buf.write("\u0289\u0290\u029a\u02a7\u02ae\u02b6\u02be\u02c6\u02ce")\r
-        buf.write("\u02d6\u02de\u02e6\u02f4\u02f7\u02fe\u0309\u0313\u031d")\r
-        buf.write("\u0321\u0324\u0333\u0339\u033d\u0344\u034a\u0354\u035c")\r
-        buf.write("\u036e\u037d")\r
-        return buf.getvalue()\r
-\r
-\r
-class CParser ( Parser ):\r
-\r
-    grammarFileName = "C.g4"\r
-\r
-    atn = ATNDeserializer().deserialize(serializedATN())\r
-\r
-    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]\r
-\r
-    sharedContextCache = PredictionContextCache()\r
-\r
-    literalNames = [ "<INVALID>", "'{'", "';'", "'typedef'", "','", "'='", \r
-                     "'extern'", "'static'", "'auto'", "'register'", "'STATIC'", \r
-                     "'void'", "'char'", "'short'", "'int'", "'long'", "'float'", \r
-                     "'double'", "'signed'", "'unsigned'", "'}'", "'struct'", \r
-                     "'union'", "':'", "'enum'", "'const'", "'volatile'", \r
-                     "'IN'", "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'", \r
-                     "'VOLATILE'", "'GLOBAL_REMOVE_IF_UNREFERENCED'", "'EFIAPI'", \r
-                     "'EFI_BOOTSERVICE'", "'EFI_RUNTIMESERVICE'", "'PACKED'", \r
-                     "'('", "')'", "'['", "']'", "'*'", "'...'", "'+'", \r
-                     "'-'", "'/'", "'%'", "'++'", "'--'", "'sizeof'", "'.'", \r
-                     "'->'", "'&'", "'~'", "'!'", "'*='", "'/='", "'%='", \r
-                     "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='", \r
-                     "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", \r
-                     "'<'", "'>'", "'<='", "'>='", "'<<'", "'>>'", "'__asm__'", \r
-                     "'_asm'", "'__asm'", "'case'", "'default'", "'if'", \r
-                     "'else'", "'switch'", "'while'", "'do'", "'goto'", \r
-                     "'continue'", "'break'", "'return'" ]\r
-\r
-    symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "IDENTIFIER", "CHARACTER_LITERAL", "STRING_LITERAL", \r
-                      "HEX_LITERAL", "DECIMAL_LITERAL", "OCTAL_LITERAL", \r
-                      "FLOATING_POINT_LITERAL", "WS", "BS", "UnicodeVocabulary", \r
-                      "COMMENT", "LINE_COMMENT", "LINE_COMMAND" ]\r
-\r
-    RULE_translation_unit = 0\r
-    RULE_external_declaration = 1\r
-    RULE_function_definition = 2\r
-    RULE_declaration_specifiers = 3\r
-    RULE_declaration = 4\r
-    RULE_init_declarator_list = 5\r
-    RULE_init_declarator = 6\r
-    RULE_storage_class_specifier = 7\r
-    RULE_type_specifier = 8\r
-    RULE_type_id = 9\r
-    RULE_struct_or_union_specifier = 10\r
-    RULE_struct_or_union = 11\r
-    RULE_struct_declaration_list = 12\r
-    RULE_struct_declaration = 13\r
-    RULE_specifier_qualifier_list = 14\r
-    RULE_struct_declarator_list = 15\r
-    RULE_struct_declarator = 16\r
-    RULE_enum_specifier = 17\r
-    RULE_enumerator_list = 18\r
-    RULE_enumerator = 19\r
-    RULE_type_qualifier = 20\r
-    RULE_declarator = 21\r
-    RULE_direct_declarator = 22\r
-    RULE_declarator_suffix = 23\r
-    RULE_pointer = 24\r
-    RULE_parameter_type_list = 25\r
-    RULE_parameter_list = 26\r
-    RULE_parameter_declaration = 27\r
-    RULE_identifier_list = 28\r
-    RULE_type_name = 29\r
-    RULE_abstract_declarator = 30\r
-    RULE_direct_abstract_declarator = 31\r
-    RULE_abstract_declarator_suffix = 32\r
-    RULE_initializer = 33\r
-    RULE_initializer_list = 34\r
-    RULE_argument_expression_list = 35\r
-    RULE_additive_expression = 36\r
-    RULE_multiplicative_expression = 37\r
-    RULE_cast_expression = 38\r
-    RULE_unary_expression = 39\r
-    RULE_postfix_expression = 40\r
-    RULE_macro_parameter_list = 41\r
-    RULE_unary_operator = 42\r
-    RULE_primary_expression = 43\r
-    RULE_constant = 44\r
-    RULE_expression = 45\r
-    RULE_constant_expression = 46\r
-    RULE_assignment_expression = 47\r
-    RULE_lvalue = 48\r
-    RULE_assignment_operator = 49\r
-    RULE_conditional_expression = 50\r
-    RULE_logical_or_expression = 51\r
-    RULE_logical_and_expression = 52\r
-    RULE_inclusive_or_expression = 53\r
-    RULE_exclusive_or_expression = 54\r
-    RULE_and_expression = 55\r
-    RULE_equality_expression = 56\r
-    RULE_relational_expression = 57\r
-    RULE_shift_expression = 58\r
-    RULE_statement = 59\r
-    RULE_asm2_statement = 60\r
-    RULE_asm1_statement = 61\r
-    RULE_asm_statement = 62\r
-    RULE_macro_statement = 63\r
-    RULE_labeled_statement = 64\r
-    RULE_compound_statement = 65\r
-    RULE_statement_list = 66\r
-    RULE_expression_statement = 67\r
-    RULE_selection_statement = 68\r
-    RULE_iteration_statement = 69\r
-    RULE_jump_statement = 70\r
-\r
-    ruleNames =  [ "translation_unit", "external_declaration", "function_definition", \r
-                   "declaration_specifiers", "declaration", "init_declarator_list", \r
-                   "init_declarator", "storage_class_specifier", "type_specifier", \r
-                   "type_id", "struct_or_union_specifier", "struct_or_union", \r
-                   "struct_declaration_list", "struct_declaration", "specifier_qualifier_list", \r
-                   "struct_declarator_list", "struct_declarator", "enum_specifier", \r
-                   "enumerator_list", "enumerator", "type_qualifier", "declarator", \r
-                   "direct_declarator", "declarator_suffix", "pointer", \r
-                   "parameter_type_list", "parameter_list", "parameter_declaration", \r
-                   "identifier_list", "type_name", "abstract_declarator", \r
-                   "direct_abstract_declarator", "abstract_declarator_suffix", \r
-                   "initializer", "initializer_list", "argument_expression_list", \r
-                   "additive_expression", "multiplicative_expression", "cast_expression", \r
-                   "unary_expression", "postfix_expression", "macro_parameter_list", \r
-                   "unary_operator", "primary_expression", "constant", "expression", \r
-                   "constant_expression", "assignment_expression", "lvalue", \r
-                   "assignment_operator", "conditional_expression", "logical_or_expression", \r
-                   "logical_and_expression", "inclusive_or_expression", \r
-                   "exclusive_or_expression", "and_expression", "equality_expression", \r
-                   "relational_expression", "shift_expression", "statement", \r
-                   "asm2_statement", "asm1_statement", "asm_statement", \r
-                   "macro_statement", "labeled_statement", "compound_statement", \r
-                   "statement_list", "expression_statement", "selection_statement", \r
-                   "iteration_statement", "jump_statement" ]\r
-\r
-    EOF = Token.EOF\r
-    T__0=1\r
-    T__1=2\r
-    T__2=3\r
-    T__3=4\r
-    T__4=5\r
-    T__5=6\r
-    T__6=7\r
-    T__7=8\r
-    T__8=9\r
-    T__9=10\r
-    T__10=11\r
-    T__11=12\r
-    T__12=13\r
-    T__13=14\r
-    T__14=15\r
-    T__15=16\r
-    T__16=17\r
-    T__17=18\r
-    T__18=19\r
-    T__19=20\r
-    T__20=21\r
-    T__21=22\r
-    T__22=23\r
-    T__23=24\r
-    T__24=25\r
-    T__25=26\r
-    T__26=27\r
-    T__27=28\r
-    T__28=29\r
-    T__29=30\r
-    T__30=31\r
-    T__31=32\r
-    T__32=33\r
-    T__33=34\r
-    T__34=35\r
-    T__35=36\r
-    T__36=37\r
-    T__37=38\r
-    T__38=39\r
-    T__39=40\r
-    T__40=41\r
-    T__41=42\r
-    T__42=43\r
-    T__43=44\r
-    T__44=45\r
-    T__45=46\r
-    T__46=47\r
-    T__47=48\r
-    T__48=49\r
-    T__49=50\r
-    T__50=51\r
-    T__51=52\r
-    T__52=53\r
-    T__53=54\r
-    T__54=55\r
-    T__55=56\r
-    T__56=57\r
-    T__57=58\r
-    T__58=59\r
-    T__59=60\r
-    T__60=61\r
-    T__61=62\r
-    T__62=63\r
-    T__63=64\r
-    T__64=65\r
-    T__65=66\r
-    T__66=67\r
-    T__67=68\r
-    T__68=69\r
-    T__69=70\r
-    T__70=71\r
-    T__71=72\r
-    T__72=73\r
-    T__73=74\r
-    T__74=75\r
-    T__75=76\r
-    T__76=77\r
-    T__77=78\r
-    T__78=79\r
-    T__79=80\r
-    T__80=81\r
-    T__81=82\r
-    T__82=83\r
-    T__83=84\r
-    T__84=85\r
-    T__85=86\r
-    T__86=87\r
-    T__87=88\r
-    T__88=89\r
-    T__89=90\r
-    T__90=91\r
-    T__91=92\r
-    IDENTIFIER=93\r
-    CHARACTER_LITERAL=94\r
-    STRING_LITERAL=95\r
-    HEX_LITERAL=96\r
-    DECIMAL_LITERAL=97\r
-    OCTAL_LITERAL=98\r
-    FLOATING_POINT_LITERAL=99\r
-    WS=100\r
-    BS=101\r
-    UnicodeVocabulary=102\r
-    COMMENT=103\r
-    LINE_COMMENT=104\r
-    LINE_COMMAND=105\r
-\r
-    def __init__(self, input:TokenStream, output:TextIO = sys.stdout):\r
-        super().__init__(input, output)\r
-        self.checkVersion("4.7.1")\r
-        self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache)\r
-        self._predicates = None\r
-\r
-\r
-\r
-            \r
+from Ecc import CodeFragment\r
+from Ecc import FileProfile\r
+\r
+\r
+\r
+# for convenience in actions\r
+HIDDEN = BaseRecognizer.HIDDEN\r
+\r
+# token types\r
+BS=20\r
+LINE_COMMENT=23\r
+FloatTypeSuffix=16\r
+IntegerTypeSuffix=14\r
+LETTER=11\r
+OCTAL_LITERAL=6\r
+CHARACTER_LITERAL=8\r
+Exponent=15\r
+EOF=-1\r
+HexDigit=13\r
+STRING_LITERAL=9\r
+WS=19\r
+FLOATING_POINT_LITERAL=10\r
+IDENTIFIER=4\r
+UnicodeEscape=18\r
+LINE_COMMAND=24\r
+UnicodeVocabulary=21\r
+HEX_LITERAL=5\r
+COMMENT=22\r
+DECIMAL_LITERAL=7\r
+EscapeSequence=12\r
+OctalEscape=17\r
+\r
+# token names\r
+tokenNames = [\r
+    "<invalid>", "<EOR>", "<DOWN>", "<UP>",\r
+    "IDENTIFIER", "HEX_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", "CHARACTER_LITERAL",\r
+    "STRING_LITERAL", "FLOATING_POINT_LITERAL", "LETTER", "EscapeSequence",\r
+    "HexDigit", "IntegerTypeSuffix", "Exponent", "FloatTypeSuffix", "OctalEscape",\r
+    "UnicodeEscape", "WS", "BS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT",\r
+    "LINE_COMMAND", "';'", "'typedef'", "','", "'='", "'extern'", "'static'",\r
+    "'auto'", "'register'", "'STATIC'", "'void'", "'char'", "'short'", "'int'",\r
+    "'long'", "'float'", "'double'", "'signed'", "'unsigned'", "'{'", "'}'",\r
+    "'struct'", "'union'", "':'", "'enum'", "'const'", "'volatile'", "'IN'",\r
+    "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'", "'VOLATILE'", "'GLOBAL_REMOVE_IF_UNREFERENCED'",\r
+    "'EFIAPI'", "'EFI_BOOTSERVICE'", "'EFI_RUNTIMESERVICE'", "'PACKED'",\r
+    "'('", "')'", "'['", "']'", "'*'", "'...'", "'+'", "'-'", "'/'", "'%'",\r
+    "'++'", "'--'", "'sizeof'", "'.'", "'->'", "'&'", "'~'", "'!'", "'*='",\r
+    "'/='", "'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='",\r
+    "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'<'", "'>'", "'<='",\r
+    "'>='", "'<<'", "'>>'", "'__asm__'", "'_asm'", "'__asm'", "'case'",\r
+    "'default'", "'if'", "'else'", "'switch'", "'while'", "'do'", "'for'",\r
+    "'goto'", "'continue'", "'break'", "'return'"\r
+]\r
+\r
+\r
+class function_definition_scope(object):\r
+    def __init__(self):\r
+        self.ModifierText = None\r
+        self.DeclText = None\r
+        self.LBLine = None\r
+        self.LBOffset = None\r
+        self.DeclLine = None\r
+        self.DeclOffset = None\r
+class postfix_expression_scope(object):\r
+    def __init__(self):\r
+        self.FuncCallText = None\r
+\r
+\r
+class CParser(Parser):\r
+    grammarFileName = "C.g"\r
+    tokenNames = tokenNames\r
+\r
+    def __init__(self, input):\r
+        Parser.__init__(self, input)\r
+        self.ruleMemo = {}\r
+\r
+        self.function_definition_stack = []\r
+        self.postfix_expression_stack = []\r
+\r
     def printTokenInfo(self, line, offset, tokenText):\r
         print(str(line)+ ',' + str(offset) + ':' + str(tokenText))\r
-        \r
+\r
     def StorePredicateExpression(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.PredicateExpressionList.append(PredExp)\r
-        \r
+      PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.PredicateExpressionList.append(PredExp)\r
+\r
     def StoreEnumerationDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.EnumerationDefinitionList.append(EnumDef)\r
-        \r
+      EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.EnumerationDefinitionList.append(EnumDef)\r
+\r
     def StoreStructUnionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.StructUnionDefinitionList.append(SUDef)\r
-        \r
+      SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.StructUnionDefinitionList.append(SUDef)\r
+\r
     def StoreTypedefDefinition(self, StartLine, StartOffset, EndLine, EndOffset, FromText, ToText):\r
-        Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.TypedefDefinitionList.append(Tdef)\r
+      Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.TypedefDefinitionList.append(Tdef)\r
 \r
     def StoreFunctionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText, LeftBraceLine, LeftBraceOffset, DeclLine, DeclOffset):\r
-        FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))\r
-        FileProfile.FunctionDefinitionList.append(FuncDef)\r
-        \r
+      FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))\r
+      FileProfile.FunctionDefinitionList.append(FuncDef)\r
+\r
     def StoreVariableDeclaration(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText):\r
-        VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.VariableDeclarationList.append(VarDecl)\r
+      VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.VariableDeclarationList.append(VarDecl)\r
 \r
     def StoreFunctionCalling(self, StartLine, StartOffset, EndLine, EndOffset, FuncName, ParamList):\r
-        FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.FunctionCallingList.append(FuncCall)\r
+      FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.FunctionCallingList.append(FuncCall)\r
 \r
 \r
 \r
-    class Translation_unitContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR start translation_unit\r
+    # C.g:102:1: translation_unit : ( external_declaration )* ;\r
+    def translation_unit(self, ):\r
 \r
-        def external_declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.External_declarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.External_declarationContext,i)\r
+        translation_unit_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 1):\r
+                    return\r
 \r
+                # C.g:103:2: ( ( external_declaration )* )\r
+                # C.g:103:4: ( external_declaration )*\r
+                # C.g:103:4: ( external_declaration )*\r
+                while True: #loop1\r
+                    alt1 = 2\r
+                    LA1_0 = self.input.LA(1)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_translation_unit\r
+                    if (LA1_0 == IDENTIFIER or LA1_0 == 26 or (29 <= LA1_0 <= 42) or (45 <= LA1_0 <= 46) or (48 <= LA1_0 <= 62) or LA1_0 == 66) :\r
+                        alt1 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterTranslation_unit" ):\r
-                listener.enterTranslation_unit(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitTranslation_unit" ):\r
-                listener.exitTranslation_unit(self)\r
+                    if alt1 == 1:\r
+                        # C.g:0:0: external_declaration\r
+                        self.following.append(self.FOLLOW_external_declaration_in_translation_unit74)\r
+                        self.external_declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
 \r
 \r
+                    else:\r
+                        break #loop1\r
 \r
 \r
-    def translation_unit(self):\r
 \r
-        localctx = CParser.Translation_unitContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 0, self.RULE_translation_unit)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 145\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__2) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36) | (1 << CParser.T__37) | (1 << CParser.T__41))) != 0) or _la==CParser.IDENTIFIER:\r
-                self.state = 142\r
-                self.external_declaration()\r
-                self.state = 147\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 1, translation_unit_StartIndex)\r
+\r
+            pass\r
 \r
-    class External_declarationContext(ParserRuleContext):\r
+        return\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end translation_unit\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
 \r
+    # $ANTLR start external_declaration\r
+    # C.g:114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );\r
+    def external_declaration(self, ):\r
 \r
-        def declaration_specifiers(self):\r
-            return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)\r
+        external_declaration_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 2):\r
+                    return\r
 \r
+                # C.g:119:2: ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? )\r
+                alt3 = 3\r
+                LA3_0 = self.input.LA(1)\r
 \r
-        def declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclarationContext,i)\r
+                if ((29 <= LA3_0 <= 33)) :\r
+                    LA3_1 = self.input.LA(2)\r
 \r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
-        def function_definition(self):\r
-            return self.getTypedRuleContext(CParser.Function_definitionContext,0)\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 1, self.input)\r
 \r
+                        raise nvae\r
 \r
-        def macro_statement(self):\r
-            return self.getTypedRuleContext(CParser.Macro_statementContext,0)\r
+                elif (LA3_0 == 34) :\r
+                    LA3_2 = self.input.LA(2)\r
 \r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_external_declaration\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 2, self.input)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterExternal_declaration" ):\r
-                listener.enterExternal_declaration(self)\r
+                        raise nvae\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitExternal_declaration" ):\r
-                listener.exitExternal_declaration(self)\r
+                elif (LA3_0 == 35) :\r
+                    LA3_3 = self.input.LA(2)\r
 \r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 3, self.input)\r
 \r
+                        raise nvae\r
 \r
-    def external_declaration(self):\r
+                elif (LA3_0 == 36) :\r
+                    LA3_4 = self.input.LA(2)\r
 \r
-        localctx = CParser.External_declarationContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 2, self.RULE_external_declaration)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 166\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,4,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 149\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,1,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 148\r
-                    self.declaration_specifiers()\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 4, self.input)\r
 \r
-                self.state = 151\r
-                self.declarator()\r
-                self.state = 155\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__2) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36))) != 0) or _la==CParser.IDENTIFIER:\r
-                    self.state = 152\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 37) :\r
+                    LA3_5 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 5, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 38) :\r
+                    LA3_6 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 6, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 39) :\r
+                    LA3_7 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 7, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 40) :\r
+                    LA3_8 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 8, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 41) :\r
+                    LA3_9 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 9, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 42) :\r
+                    LA3_10 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 10, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif ((45 <= LA3_0 <= 46)) :\r
+                    LA3_11 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 11, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 48) :\r
+                    LA3_12 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 12, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == IDENTIFIER) :\r
+                    LA3_13 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    elif (True) :\r
+                        alt3 = 3\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 13, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 58) :\r
+                    LA3_14 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 14, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 66) and (self.synpred4()):\r
+                    alt3 = 1\r
+                elif (LA3_0 == 59) :\r
+                    LA3_16 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 16, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 60) :\r
+                    LA3_17 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 17, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif ((49 <= LA3_0 <= 57) or LA3_0 == 61) :\r
+                    LA3_18 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 18, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 62) and (self.synpred4()):\r
+                    alt3 = 1\r
+                elif (LA3_0 == 26) :\r
+                    alt3 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt3 == 1:\r
+                    # C.g:119:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition\r
+                    self.following.append(self.FOLLOW_function_definition_in_external_declaration113)\r
+                    self.function_definition()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt3 == 2:\r
+                    # C.g:120:4: declaration\r
+                    self.following.append(self.FOLLOW_declaration_in_external_declaration118)\r
                     self.declaration()\r
-                    self.state = 157\r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
-\r
-                self.state = 158\r
-                self.match(CParser.T__0)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 160\r
-                self.function_definition()\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 161\r
-                self.declaration()\r
-                pass\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
 \r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 162\r
-                self.macro_statement()\r
-                self.state = 164\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__1:\r
-                    self.state = 163\r
-                    self.match(CParser.T__1)\r
 \r
+                elif alt3 == 3:\r
+                    # C.g:121:4: macro_statement ( ';' )?\r
+                    self.following.append(self.FOLLOW_macro_statement_in_external_declaration123)\r
+                    self.macro_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:121:20: ( ';' )?\r
+                    alt2 = 2\r
+                    LA2_0 = self.input.LA(1)\r
 \r
-                pass\r
+                    if (LA2_0 == 25) :\r
+                        alt2 = 1\r
+                    if alt2 == 1:\r
+                        # C.g:121:21: ';'\r
+                        self.match(self.input, 25, self.FOLLOW_25_in_external_declaration126)\r
+                        if self.failed:\r
+                            return\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 2, external_declaration_StartIndex)\r
 \r
-    class Function_definitionContext(ParserRuleContext):\r
+            pass\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.ModifierText = ''\r
-            self.DeclText = ''\r
-            self.LBLine = 0\r
-            self.LBOffset = 0\r
-            self.DeclLine = 0\r
-            self.DeclOffset = 0\r
-            self.d = None # Declaration_specifiersContext\r
-            self._declaration_specifiers = None # Declaration_specifiersContext\r
-            self._declarator = None # DeclaratorContext\r
-            self.a = None # Compound_statementContext\r
-            self.b = None # Compound_statementContext\r
+        return\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
+    # $ANTLR end external_declaration\r
 \r
+    class function_definition_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
 \r
-        def compound_statement(self):\r
-            return self.getTypedRuleContext(CParser.Compound_statementContext,0)\r
 \r
 \r
-        def declaration_specifiers(self):\r
-            return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)\r
+    # $ANTLR start function_definition\r
+    # C.g:126:1: function_definition : (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ;\r
+    def function_definition(self, ):\r
+        self.function_definition_stack.append(function_definition_scope())\r
+        retval = self.function_definition_return()\r
+        retval.start = self.input.LT(1)\r
+        function_definition_StartIndex = self.input.index()\r
+        d = None\r
 \r
+        a = None\r
 \r
-        def declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclarationContext,i)\r
+        b = None\r
 \r
+        declarator1 = None\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_function_definition\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterFunction_definition" ):\r
-                listener.enterFunction_definition(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitFunction_definition" ):\r
-                listener.exitFunction_definition(self)\r
+        self.function_definition_stack[-1].ModifierText =  ''\r
+        self.function_definition_stack[-1].DeclText =  ''\r
+        self.function_definition_stack[-1].LBLine =  0\r
+        self.function_definition_stack[-1].LBOffset =  0\r
+        self.function_definition_stack[-1].DeclLine =  0\r
+        self.function_definition_stack[-1].DeclOffset =  0\r
 \r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 3):\r
+                    return retval\r
+\r
+                # C.g:146:2: ( (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) )\r
+                # C.g:146:4: (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement )\r
+                # C.g:146:5: (d= declaration_specifiers )?\r
+                alt4 = 2\r
+                LA4 = self.input.LA(1)\r
+                if LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33 or LA4 == 34 or LA4 == 35 or LA4 == 36 or LA4 == 37 or LA4 == 38 or LA4 == 39 or LA4 == 40 or LA4 == 41 or LA4 == 42 or LA4 == 45 or LA4 == 46 or LA4 == 48 or LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57 or LA4 == 61:\r
+                    alt4 = 1\r
+                elif LA4 == IDENTIFIER:\r
+                    LA4 = self.input.LA(2)\r
+                    if LA4 == 66:\r
+                        alt4 = 1\r
+                    elif LA4 == 58:\r
+                        LA4_21 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 59:\r
+                        LA4_22 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 60:\r
+                        LA4_23 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == IDENTIFIER:\r
+                        LA4_24 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 62:\r
+                        LA4_25 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33:\r
+                        LA4_26 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 34:\r
+                        LA4_27 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 35:\r
+                        LA4_28 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 36:\r
+                        LA4_29 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 37:\r
+                        LA4_30 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 38:\r
+                        LA4_31 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 39:\r
+                        LA4_32 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 40:\r
+                        LA4_33 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 41:\r
+                        LA4_34 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 42:\r
+                        LA4_35 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 45 or LA4 == 46:\r
+                        LA4_36 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 48:\r
+                        LA4_37 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57 or LA4 == 61:\r
+                        LA4_38 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                elif LA4 == 58:\r
+                    LA4_14 = self.input.LA(2)\r
+\r
+                    if (self.synpred7()) :\r
+                        alt4 = 1\r
+                elif LA4 == 59:\r
+                    LA4_16 = self.input.LA(2)\r
+\r
+                    if (self.synpred7()) :\r
+                        alt4 = 1\r
+                elif LA4 == 60:\r
+                    LA4_17 = self.input.LA(2)\r
+\r
+                    if (self.synpred7()) :\r
+                        alt4 = 1\r
+                if alt4 == 1:\r
+                    # C.g:0:0: d= declaration_specifiers\r
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_function_definition157)\r
+                    d = self.declaration_specifiers()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+\r
+                self.following.append(self.FOLLOW_declarator_in_function_definition160)\r
+                declarator1 = self.declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:147:3: ( ( declaration )+ a= compound_statement | b= compound_statement )\r
+                alt6 = 2\r
+                LA6_0 = self.input.LA(1)\r
+\r
+                if (LA6_0 == IDENTIFIER or LA6_0 == 26 or (29 <= LA6_0 <= 42) or (45 <= LA6_0 <= 46) or (48 <= LA6_0 <= 61)) :\r
+                    alt6 = 1\r
+                elif (LA6_0 == 43) :\r
+                    alt6 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
 \r
+                    nvae = NoViableAltException("147:3: ( ( declaration )+ a= compound_statement | b= compound_statement )", 6, 0, self.input)\r
 \r
+                    raise nvae\r
 \r
-    def function_definition(self):\r
+                if alt6 == 1:\r
+                    # C.g:147:5: ( declaration )+ a= compound_statement\r
+                    # C.g:147:5: ( declaration )+\r
+                    cnt5 = 0\r
+                    while True: #loop5\r
+                        alt5 = 2\r
+                        LA5_0 = self.input.LA(1)\r
 \r
-        localctx = CParser.Function_definitionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 4, self.RULE_function_definition)\r
+                        if (LA5_0 == IDENTIFIER or LA5_0 == 26 or (29 <= LA5_0 <= 42) or (45 <= LA5_0 <= 46) or (48 <= LA5_0 <= 61)) :\r
+                            alt5 = 1\r
 \r
-        ModifierText = '';\r
-        DeclText = '';\r
-        LBLine = 0;\r
-        LBOffset = 0;\r
-        DeclLine = 0;\r
-        DeclOffset = 0;\r
 \r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 169\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,5,self._ctx)\r
-            if la_ == 1:\r
-                self.state = 168\r
-                localctx.d = localctx._declaration_specifiers = self.declaration_specifiers()\r
-\r
-\r
-            self.state = 171\r
-            localctx._declarator = self.declarator()\r
-            self.state = 180\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__2, CParser.T__5, CParser.T__6, CParser.T__7, CParser.T__8, CParser.T__9, CParser.T__10, CParser.T__11, CParser.T__12, CParser.T__13, CParser.T__14, CParser.T__15, CParser.T__16, CParser.T__17, CParser.T__18, CParser.T__20, CParser.T__21, CParser.T__23, CParser.T__24, CParser.T__25, CParser.T__26, CParser.T__27, CParser.T__28, CParser.T__29, CParser.T__30, CParser.T__31, CParser.T__32, CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__36, CParser.IDENTIFIER]:\r
-                self.state = 173 \r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while True:\r
-                    self.state = 172\r
-                    self.declaration()\r
-                    self.state = 175 \r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
-                    if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__2) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36))) != 0) or _la==CParser.IDENTIFIER):\r
-                        break\r
-\r
-                self.state = 177\r
-                localctx.a = self.compound_statement()\r
-                pass\r
-            elif token in [CParser.T__0]:\r
-                self.state = 179\r
-                localctx.b = self.compound_statement()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                        if alt5 == 1:\r
+                            # C.g:0:0: declaration\r
+                            self.following.append(self.FOLLOW_declaration_in_function_definition166)\r
+                            self.declaration()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return retval\r
 \r
-             \r
-            if localctx.d != None:\r
-                ModifierText = (None if localctx._declaration_specifiers is None else self._input.getText((localctx._declaration_specifiers.start,localctx._declaration_specifiers.stop)))\r
-            else:\r
-                ModifierText = ''\r
-            DeclText = (None if localctx._declarator is None else self._input.getText((localctx._declarator.start,localctx._declarator.stop)))\r
-            DeclLine = (None if localctx._declarator is None else localctx._declarator.start).line\r
-            DeclOffset = (None if localctx._declarator is None else localctx._declarator.start).column\r
-            if localctx.a != None:\r
-                LBLine = (None if localctx.a is None else localctx.a.start).line\r
-                LBOffset = (None if localctx.a is None else localctx.a.start).column\r
-            else:\r
-                LBLine = (None if localctx.b is None else localctx.b.start).line\r
-                LBOffset = (None if localctx.b is None else localctx.b.start).column\r
-                    \r
-            self._ctx.stop = self._input.LT(-1)\r
 \r
-            self.StoreFunctionDefinition(localctx.start.line, localctx.start.column, localctx.stop.line, localctx.stop.column, ModifierText, DeclText, LBLine, LBOffset, DeclLine, DeclOffset)\r
+                        else:\r
+                            if cnt5 >= 1:\r
+                                break #loop5\r
+\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return retval\r
+\r
+                            eee = EarlyExitException(5, self.input)\r
+                            raise eee\r
+\r
+                        cnt5 += 1\r
+\r
+\r
+                    self.following.append(self.FOLLOW_compound_statement_in_function_definition171)\r
+                    a = self.compound_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt6 == 2:\r
+                    # C.g:148:5: b= compound_statement\r
+                    self.following.append(self.FOLLOW_compound_statement_in_function_definition180)\r
+                    b = self.compound_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+\r
+                if self.backtracking == 0:\r
+\r
+                    if d is not None:\r
+                      self.function_definition_stack[-1].ModifierText = self.input.toString(d.start, d.stop)\r
+                    else:\r
+                      self.function_definition_stack[-1].ModifierText = ''\r
+                    self.function_definition_stack[-1].DeclText = self.input.toString(declarator1.start, declarator1.stop)\r
+                    self.function_definition_stack[-1].DeclLine = declarator1.start.line\r
+                    self.function_definition_stack[-1].DeclOffset = declarator1.start.charPositionInLine\r
+                    if a is not None:\r
+                      self.function_definition_stack[-1].LBLine = a.start.line\r
+                      self.function_definition_stack[-1].LBOffset = a.start.charPositionInLine\r
+                    else:\r
+                      self.function_definition_stack[-1].LBLine = b.start.line\r
+                      self.function_definition_stack[-1].LBOffset = b.start.charPositionInLine\r
+\r
+\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+                if self.backtracking == 0:\r
+\r
+                    self.StoreFunctionDefinition(retval.start.line, retval.start.charPositionInLine, retval.stop.line, retval.stop.charPositionInLine, self.function_definition_stack[-1].ModifierText, self.function_definition_stack[-1].DeclText, self.function_definition_stack[-1].LBLine, self.function_definition_stack[-1].LBOffset, self.function_definition_stack[-1].DeclLine, self.function_definition_stack[-1].DeclOffset)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 3, function_definition_StartIndex)\r
 \r
-    class Declaration_specifiersContext(ParserRuleContext):\r
+            self.function_definition_stack.pop()\r
+            pass\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+        return retval\r
 \r
-        def storage_class_specifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Storage_class_specifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Storage_class_specifierContext,i)\r
+    # $ANTLR end function_definition\r
 \r
 \r
-        def type_specifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_specifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_specifierContext,i)\r
+    # $ANTLR start declaration\r
+    # C.g:166:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );\r
+    def declaration(self, ):\r
 \r
+        declaration_StartIndex = self.input.index()\r
+        a = None\r
+        d = None\r
+        e = None\r
+        b = None\r
+\r
+        c = None\r
+\r
+        s = None\r
+\r
+        t = None\r
 \r
-        def type_qualifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_qualifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_qualifierContext,i)\r
 \r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 4):\r
+                    return\r
+\r
+                # C.g:167:2: (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' )\r
+                alt9 = 2\r
+                LA9_0 = self.input.LA(1)\r
+\r
+                if (LA9_0 == 26) :\r
+                    alt9 = 1\r
+                elif (LA9_0 == IDENTIFIER or (29 <= LA9_0 <= 42) or (45 <= LA9_0 <= 46) or (48 <= LA9_0 <= 61)) :\r
+                    alt9 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("166:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );", 9, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt9 == 1:\r
+                    # C.g:167:4: a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';'\r
+                    a = self.input.LT(1)\r
+                    self.match(self.input, 26, self.FOLLOW_26_in_declaration203)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:167:17: (b= declaration_specifiers )?\r
+                    alt7 = 2\r
+                    LA7 = self.input.LA(1)\r
+                    if LA7 == 29 or LA7 == 30 or LA7 == 31 or LA7 == 32 or LA7 == 33 or LA7 == 34 or LA7 == 35 or LA7 == 36 or LA7 == 37 or LA7 == 38 or LA7 == 39 or LA7 == 40 or LA7 == 41 or LA7 == 42 or LA7 == 45 or LA7 == 46 or LA7 == 48 or LA7 == 49 or LA7 == 50 or LA7 == 51 or LA7 == 52 or LA7 == 53 or LA7 == 54 or LA7 == 55 or LA7 == 56 or LA7 == 57 or LA7 == 61:\r
+                        alt7 = 1\r
+                    elif LA7 == IDENTIFIER:\r
+                        LA7_13 = self.input.LA(2)\r
+\r
+                        if (LA7_13 == 62) :\r
+                            LA7_21 = self.input.LA(3)\r
+\r
+                            if (self.synpred10()) :\r
+                                alt7 = 1\r
+                        elif (LA7_13 == IDENTIFIER or (29 <= LA7_13 <= 42) or (45 <= LA7_13 <= 46) or (48 <= LA7_13 <= 61) or LA7_13 == 66) :\r
+                            alt7 = 1\r
+                    elif LA7 == 58:\r
+                        LA7_14 = self.input.LA(2)\r
+\r
+                        if (self.synpred10()) :\r
+                            alt7 = 1\r
+                    elif LA7 == 59:\r
+                        LA7_16 = self.input.LA(2)\r
+\r
+                        if (self.synpred10()) :\r
+                            alt7 = 1\r
+                    elif LA7 == 60:\r
+                        LA7_17 = self.input.LA(2)\r
+\r
+                        if (self.synpred10()) :\r
+                            alt7 = 1\r
+                    if alt7 == 1:\r
+                        # C.g:0:0: b= declaration_specifiers\r
+                        self.following.append(self.FOLLOW_declaration_specifiers_in_declaration207)\r
+                        b = self.declaration_specifiers()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    self.following.append(self.FOLLOW_init_declarator_list_in_declaration216)\r
+                    c = self.init_declarator_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    d = self.input.LT(1)\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_declaration220)\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+\r
+                        if b is not None:\r
+                          self.StoreTypedefDefinition(a.line, a.charPositionInLine, d.line, d.charPositionInLine, self.input.toString(b.start, b.stop), self.input.toString(c.start, c.stop))\r
+                        else:\r
+                          self.StoreTypedefDefinition(a.line, a.charPositionInLine, d.line, d.charPositionInLine, '', self.input.toString(c.start, c.stop))\r
+\r
+\r
+\r
+\r
+                elif alt9 == 2:\r
+                    # C.g:175:4: s= declaration_specifiers (t= init_declarator_list )? e= ';'\r
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_declaration234)\r
+                    s = self.declaration_specifiers()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:175:30: (t= init_declarator_list )?\r
+                    alt8 = 2\r
+                    LA8_0 = self.input.LA(1)\r
+\r
+                    if (LA8_0 == IDENTIFIER or (58 <= LA8_0 <= 60) or LA8_0 == 62 or LA8_0 == 66) :\r
+                        alt8 = 1\r
+                    if alt8 == 1:\r
+                        # C.g:0:0: t= init_declarator_list\r
+                        self.following.append(self.FOLLOW_init_declarator_list_in_declaration238)\r
+                        t = self.init_declarator_list()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    e = self.input.LT(1)\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_declaration243)\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+\r
+                        if t is not None:\r
+                          self.StoreVariableDeclaration(s.start.line, s.start.charPositionInLine, t.start.line, t.start.charPositionInLine, self.input.toString(s.start, s.stop), self.input.toString(t.start, t.stop))\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 4, declaration_StartIndex)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_declaration_specifiers\r
+            pass\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDeclaration_specifiers" ):\r
-                listener.enterDeclaration_specifiers(self)\r
+        return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDeclaration_specifiers" ):\r
-                listener.exitDeclaration_specifiers(self)\r
+    # $ANTLR end declaration\r
 \r
+    class declaration_specifiers_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
 \r
 \r
 \r
-    def declaration_specifiers(self):\r
+    # $ANTLR start declaration_specifiers\r
+    # C.g:182:1: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ;\r
+    def declaration_specifiers(self, ):\r
 \r
-        localctx = CParser.Declaration_specifiersContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 6, self.RULE_declaration_specifiers)\r
+        retval = self.declaration_specifiers_return()\r
+        retval.start = self.input.LT(1)\r
+        declaration_specifiers_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 187 \r
-            self._errHandler.sync(self)\r
-            _alt = 1\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt == 1:\r
-                    self.state = 187\r
-                    self._errHandler.sync(self)\r
-                    token = self._input.LA(1)\r
-                    if token in [CParser.T__5, CParser.T__6, CParser.T__7, CParser.T__8, CParser.T__9]:\r
-                        self.state = 184\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 5):\r
+                    return retval\r
+\r
+                # C.g:183:2: ( ( storage_class_specifier | type_specifier | type_qualifier )+ )\r
+                # C.g:183:6: ( storage_class_specifier | type_specifier | type_qualifier )+\r
+                # C.g:183:6: ( storage_class_specifier | type_specifier | type_qualifier )+\r
+                cnt10 = 0\r
+                while True: #loop10\r
+                    alt10 = 4\r
+                    LA10 = self.input.LA(1)\r
+                    if LA10 == 58:\r
+                        LA10_2 = self.input.LA(2)\r
+\r
+                        if (self.synpred15()) :\r
+                            alt10 = 3\r
+\r
+\r
+                    elif LA10 == 59:\r
+                        LA10_3 = self.input.LA(2)\r
+\r
+                        if (self.synpred15()) :\r
+                            alt10 = 3\r
+\r
+\r
+                    elif LA10 == 60:\r
+                        LA10_4 = self.input.LA(2)\r
+\r
+                        if (self.synpred15()) :\r
+                            alt10 = 3\r
+\r
+\r
+                    elif LA10 == IDENTIFIER:\r
+                        LA10_5 = self.input.LA(2)\r
+\r
+                        if (self.synpred14()) :\r
+                            alt10 = 2\r
+\r
+\r
+                    elif LA10 == 53:\r
+                        LA10_9 = self.input.LA(2)\r
+\r
+                        if (self.synpred15()) :\r
+                            alt10 = 3\r
+\r
+\r
+                    elif LA10 == 29 or LA10 == 30 or LA10 == 31 or LA10 == 32 or LA10 == 33:\r
+                        alt10 = 1\r
+                    elif LA10 == 34 or LA10 == 35 or LA10 == 36 or LA10 == 37 or LA10 == 38 or LA10 == 39 or LA10 == 40 or LA10 == 41 or LA10 == 42 or LA10 == 45 or LA10 == 46 or LA10 == 48:\r
+                        alt10 = 2\r
+                    elif LA10 == 49 or LA10 == 50 or LA10 == 51 or LA10 == 52 or LA10 == 54 or LA10 == 55 or LA10 == 56 or LA10 == 57 or LA10 == 61:\r
+                        alt10 = 3\r
+\r
+                    if alt10 == 1:\r
+                        # C.g:183:10: storage_class_specifier\r
+                        self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers264)\r
                         self.storage_class_specifier()\r
-                        pass\r
-                    elif token in [CParser.T__10, CParser.T__11, CParser.T__12, CParser.T__13, CParser.T__14, CParser.T__15, CParser.T__16, CParser.T__17, CParser.T__18, CParser.T__20, CParser.T__21, CParser.T__23, CParser.IDENTIFIER]:\r
-                        self.state = 185\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    elif alt10 == 2:\r
+                        # C.g:184:7: type_specifier\r
+                        self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers272)\r
                         self.type_specifier()\r
-                        pass\r
-                    elif token in [CParser.T__24, CParser.T__25, CParser.T__26, CParser.T__27, CParser.T__28, CParser.T__29, CParser.T__30, CParser.T__31, CParser.T__32, CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__36]:\r
-                        self.state = 186\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    elif alt10 == 3:\r
+                        # C.g:185:13: type_qualifier\r
+                        self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers286)\r
                         self.type_qualifier()\r
-                        pass\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
                     else:\r
-                        raise NoViableAltException(self)\r
+                        if cnt10 >= 1:\r
+                            break #loop10\r
 \r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
 \r
-                else:\r
-                    raise NoViableAltException(self)\r
-                self.state = 189 \r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,9,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        eee = EarlyExitException(10, self.input)\r
+                        raise eee\r
 \r
-    class DeclarationContext(ParserRuleContext):\r
+                    cnt10 += 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.a = None # Token\r
-            self.b = None # Declaration_specifiersContext\r
-            self.c = None # Init_declarator_listContext\r
-            self.d = None # Token\r
-            self.s = None # Declaration_specifiersContext\r
-            self.t = None # Init_declarator_listContext\r
-            self.e = None # Token\r
 \r
-        def init_declarator_list(self):\r
-            return self.getTypedRuleContext(CParser.Init_declarator_listContext,0)\r
 \r
 \r
-        def declaration_specifiers(self):\r
-            return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)\r
 \r
+                retval.stop = self.input.LT(-1)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_declaration\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDeclaration" ):\r
-                listener.enterDeclaration(self)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 5, declaration_specifiers_StartIndex)\r
+\r
+            pass\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDeclaration" ):\r
-                listener.exitDeclaration(self)\r
+        return retval\r
 \r
+    # $ANTLR end declaration_specifiers\r
 \r
+    class init_declarator_list_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
 \r
 \r
-    def declaration(self):\r
 \r
-        localctx = CParser.DeclarationContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 8, self.RULE_declaration)\r
-        self._la = 0 # Token type\r
+    # $ANTLR start init_declarator_list\r
+    # C.g:189:1: init_declarator_list : init_declarator ( ',' init_declarator )* ;\r
+    def init_declarator_list(self, ):\r
+\r
+        retval = self.init_declarator_list_return()\r
+        retval.start = self.input.LT(1)\r
+        init_declarator_list_StartIndex = self.input.index()\r
         try:\r
-            self.state = 206\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__2]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 191\r
-                localctx.a = self.match(CParser.T__2)\r
-                self.state = 193\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,10,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 192\r
-                    localctx.b = self.declaration_specifiers()\r
-\r
-\r
-                self.state = 195\r
-                localctx.c = self.init_declarator_list()\r
-                self.state = 196\r
-                localctx.d = self.match(CParser.T__1)\r
-\r
-                if localctx.b is not None:\r
-                    self.StoreTypedefDefinition(localctx.a.line, localctx.a.column, (0 if localctx.d is None else localctx.d.line), localctx.d.column, (None if localctx.b is None else self._input.getText((localctx.b.start,localctx.b.stop))), (None if localctx.c is None else self._input.getText((localctx.c.start,localctx.c.stop))))\r
-                else:\r
-                    self.StoreTypedefDefinition(localctx.a.line, localctx.a.column, (0 if localctx.d is None else localctx.d.line), localctx.d.column, '', (None if localctx.c is None else self._input.getText((localctx.c.start,localctx.c.stop))))\r
-                    \r
-                pass\r
-            elif token in [CParser.T__5, CParser.T__6, CParser.T__7, CParser.T__8, CParser.T__9, CParser.T__10, CParser.T__11, CParser.T__12, CParser.T__13, CParser.T__14, CParser.T__15, CParser.T__16, CParser.T__17, CParser.T__18, CParser.T__20, CParser.T__21, CParser.T__23, CParser.T__24, CParser.T__25, CParser.T__26, CParser.T__27, CParser.T__28, CParser.T__29, CParser.T__30, CParser.T__31, CParser.T__32, CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__36, CParser.IDENTIFIER]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 199\r
-                localctx.s = self.declaration_specifiers()\r
-                self.state = 201\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (CParser.T__33 - 34)) | (1 << (CParser.T__34 - 34)) | (1 << (CParser.T__35 - 34)) | (1 << (CParser.T__37 - 34)) | (1 << (CParser.T__41 - 34)) | (1 << (CParser.IDENTIFIER - 34)))) != 0):\r
-                    self.state = 200\r
-                    localctx.t = self.init_declarator_list()\r
-\r
-\r
-                self.state = 203\r
-                localctx.e = self.match(CParser.T__1)\r
-\r
-                if localctx.t is not None:\r
-                    self.StoreVariableDeclaration((None if localctx.s is None else localctx.s.start).line, (None if localctx.s is None else localctx.s.start).column, (None if localctx.t is None else localctx.t.start).line, (None if localctx.t is None else localctx.t.start).column, (None if localctx.s is None else self._input.getText((localctx.s.start,localctx.s.stop))), (None if localctx.t is None else self._input.getText((localctx.t.start,localctx.t.stop))))\r
-\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 6):\r
+                    return retval\r
+\r
+                # C.g:190:2: ( init_declarator ( ',' init_declarator )* )\r
+                # C.g:190:4: init_declarator ( ',' init_declarator )*\r
+                self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list308)\r
+                self.init_declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:190:20: ( ',' init_declarator )*\r
+                while True: #loop11\r
+                    alt11 = 2\r
+                    LA11_0 = self.input.LA(1)\r
+\r
+                    if (LA11_0 == 27) :\r
+                        alt11 = 1\r
+\r
+\r
+                    if alt11 == 1:\r
+                        # C.g:190:21: ',' init_declarator\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_init_declarator_list311)\r
+                        if self.failed:\r
+                            return retval\r
+                        self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list313)\r
+                        self.init_declarator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    else:\r
+                        break #loop11\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Init_declarator_listContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def init_declarator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Init_declaratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Init_declaratorContext,i)\r
 \r
+                retval.stop = self.input.LT(-1)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_init_declarator_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInit_declarator_list" ):\r
-                listener.enterInit_declarator_list(self)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 6, init_declarator_list_StartIndex)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInit_declarator_list" ):\r
-                listener.exitInit_declarator_list(self)\r
+            pass\r
 \r
+        return retval\r
 \r
+    # $ANTLR end init_declarator_list\r
 \r
 \r
-    def init_declarator_list(self):\r
+    # $ANTLR start init_declarator\r
+    # C.g:193:1: init_declarator : declarator ( '=' initializer )? ;\r
+    def init_declarator(self, ):\r
 \r
-        localctx = CParser.Init_declarator_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 10, self.RULE_init_declarator_list)\r
-        self._la = 0 # Token type\r
+        init_declarator_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 208\r
-            self.init_declarator()\r
-            self.state = 213\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 209\r
-                self.match(CParser.T__3)\r
-                self.state = 210\r
-                self.init_declarator()\r
-                self.state = 215\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 7):\r
+                    return\r
+\r
+                # C.g:194:2: ( declarator ( '=' initializer )? )\r
+                # C.g:194:4: declarator ( '=' initializer )?\r
+                self.following.append(self.FOLLOW_declarator_in_init_declarator326)\r
+                self.declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:194:15: ( '=' initializer )?\r
+                alt12 = 2\r
+                LA12_0 = self.input.LA(1)\r
 \r
-    class Init_declaratorContext(ParserRuleContext):\r
+                if (LA12_0 == 28) :\r
+                    alt12 = 1\r
+                if alt12 == 1:\r
+                    # C.g:194:16: '=' initializer\r
+                    self.match(self.input, 28, self.FOLLOW_28_in_init_declarator329)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_initializer_in_init_declarator331)\r
+                    self.initializer()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
 \r
 \r
-        def initializer(self):\r
-            return self.getTypedRuleContext(CParser.InitializerContext,0)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_init_declarator\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInit_declarator" ):\r
-                listener.enterInit_declarator(self)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 7, init_declarator_StartIndex)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInit_declarator" ):\r
-                listener.exitInit_declarator(self)\r
+            pass\r
 \r
+        return\r
 \r
+    # $ANTLR end init_declarator\r
 \r
 \r
-    def init_declarator(self):\r
+    # $ANTLR start storage_class_specifier\r
+    # C.g:197:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' );\r
+    def storage_class_specifier(self, ):\r
 \r
-        localctx = CParser.Init_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 12, self.RULE_init_declarator)\r
-        self._la = 0 # Token type\r
+        storage_class_specifier_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 216\r
-            self.declarator()\r
-            self.state = 219\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__4:\r
-                self.state = 217\r
-                self.match(CParser.T__4)\r
-                self.state = 218\r
-                self.initializer()\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 8):\r
+                    return\r
+\r
+                # C.g:198:2: ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' )\r
+                # C.g:\r
+                if (29 <= self.input.LA(1) <= 33):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_storage_class_specifier0\r
+                        )\r
+                    raise mse\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Storage_class_specifierContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_storage_class_specifier\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 8, storage_class_specifier_StartIndex)\r
+\r
+            pass\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStorage_class_specifier" ):\r
-                listener.enterStorage_class_specifier(self)\r
+        return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStorage_class_specifier" ):\r
-                listener.exitStorage_class_specifier(self)\r
+    # $ANTLR end storage_class_specifier\r
 \r
 \r
+    # $ANTLR start type_specifier\r
+    # C.g:205:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id );\r
+    def type_specifier(self, ):\r
 \r
+        type_specifier_StartIndex = self.input.index()\r
+        s = None\r
+\r
+        e = None\r
 \r
-    def storage_class_specifier(self):\r
 \r
-        localctx = CParser.Storage_class_specifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 14, self.RULE_storage_class_specifier)\r
-        self._la = 0 # Token type\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 221\r
-            _la = self._input.LA(1)\r
-            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9))) != 0)):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 9):\r
+                    return\r
+\r
+                # C.g:206:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id )\r
+                alt13 = 12\r
+                LA13_0 = self.input.LA(1)\r
+\r
+                if (LA13_0 == 34) :\r
+                    alt13 = 1\r
+                elif (LA13_0 == 35) :\r
+                    alt13 = 2\r
+                elif (LA13_0 == 36) :\r
+                    alt13 = 3\r
+                elif (LA13_0 == 37) :\r
+                    alt13 = 4\r
+                elif (LA13_0 == 38) :\r
+                    alt13 = 5\r
+                elif (LA13_0 == 39) :\r
+                    alt13 = 6\r
+                elif (LA13_0 == 40) :\r
+                    alt13 = 7\r
+                elif (LA13_0 == 41) :\r
+                    alt13 = 8\r
+                elif (LA13_0 == 42) :\r
+                    alt13 = 9\r
+                elif ((45 <= LA13_0 <= 46)) :\r
+                    alt13 = 10\r
+                elif (LA13_0 == 48) :\r
+                    alt13 = 11\r
+                elif (LA13_0 == IDENTIFIER) and (self.synpred34()):\r
+                    alt13 = 12\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
 \r
-    class Type_specifierContext(ParserRuleContext):\r
+                    nvae = NoViableAltException("205:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id );", 13, 0, self.input)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.s = None # Struct_or_union_specifierContext\r
-            self.e = None # Enum_specifierContext\r
+                    raise nvae\r
 \r
-        def struct_or_union_specifier(self):\r
-            return self.getTypedRuleContext(CParser.Struct_or_union_specifierContext,0)\r
+                if alt13 == 1:\r
+                    # C.g:206:4: 'void'\r
+                    self.match(self.input, 34, self.FOLLOW_34_in_type_specifier376)\r
+                    if self.failed:\r
+                        return\r
 \r
 \r
-        def enum_specifier(self):\r
-            return self.getTypedRuleContext(CParser.Enum_specifierContext,0)\r
+                elif alt13 == 2:\r
+                    # C.g:207:4: 'char'\r
+                    self.match(self.input, 35, self.FOLLOW_35_in_type_specifier381)\r
+                    if self.failed:\r
+                        return\r
 \r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                elif alt13 == 3:\r
+                    # C.g:208:4: 'short'\r
+                    self.match(self.input, 36, self.FOLLOW_36_in_type_specifier386)\r
+                    if self.failed:\r
+                        return\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
 \r
+                elif alt13 == 4:\r
+                    # C.g:209:4: 'int'\r
+                    self.match(self.input, 37, self.FOLLOW_37_in_type_specifier391)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 5:\r
+                    # C.g:210:4: 'long'\r
+                    self.match(self.input, 38, self.FOLLOW_38_in_type_specifier396)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 6:\r
+                    # C.g:211:4: 'float'\r
+                    self.match(self.input, 39, self.FOLLOW_39_in_type_specifier401)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 7:\r
+                    # C.g:212:4: 'double'\r
+                    self.match(self.input, 40, self.FOLLOW_40_in_type_specifier406)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 8:\r
+                    # C.g:213:4: 'signed'\r
+                    self.match(self.input, 41, self.FOLLOW_41_in_type_specifier411)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 9:\r
+                    # C.g:214:4: 'unsigned'\r
+                    self.match(self.input, 42, self.FOLLOW_42_in_type_specifier416)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 10:\r
+                    # C.g:215:4: s= struct_or_union_specifier\r
+                    self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier423)\r
+                    s = self.struct_or_union_specifier()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+\r
+                        if s.stop is not None:\r
+                          self.StoreStructUnionDefinition(s.start.line, s.start.charPositionInLine, s.stop.line, s.stop.charPositionInLine, self.input.toString(s.start, s.stop))\r
 \r
-        def type_qualifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_qualifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_qualifierContext,i)\r
 \r
 \r
-        def type_id(self):\r
-            return self.getTypedRuleContext(CParser.Type_idContext,0)\r
 \r
+                elif alt13 == 11:\r
+                    # C.g:220:4: e= enum_specifier\r
+                    self.following.append(self.FOLLOW_enum_specifier_in_type_specifier433)\r
+                    e = self.enum_specifier()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_type_specifier\r
+                        if e.stop is not None:\r
+                          self.StoreEnumerationDefinition(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterType_specifier" ):\r
-                listener.enterType_specifier(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitType_specifier" ):\r
-                listener.exitType_specifier(self)\r
 \r
 \r
+                elif alt13 == 12:\r
+                    # C.g:225:4: ( IDENTIFIER ( type_qualifier )* declarator )=> type_id\r
+                    self.following.append(self.FOLLOW_type_id_in_type_specifier451)\r
+                    self.type_id()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
 \r
 \r
-    def type_specifier(self):\r
 \r
-        localctx = CParser.Type_specifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 16, self.RULE_type_specifier)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 9, type_specifier_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end type_specifier\r
+\r
+\r
+    # $ANTLR start type_id\r
+    # C.g:228:1: type_id : IDENTIFIER ;\r
+    def type_id(self, ):\r
+\r
+        type_id_StartIndex = self.input.index()\r
         try:\r
-            self.state = 247\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,16,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 223\r
-                self.match(CParser.T__10)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 224\r
-                self.match(CParser.T__11)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 225\r
-                self.match(CParser.T__12)\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 226\r
-                self.match(CParser.T__13)\r
-                pass\r
-\r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 227\r
-                self.match(CParser.T__14)\r
-                pass\r
-\r
-            elif la_ == 6:\r
-                self.enterOuterAlt(localctx, 6)\r
-                self.state = 228\r
-                self.match(CParser.T__15)\r
-                pass\r
-\r
-            elif la_ == 7:\r
-                self.enterOuterAlt(localctx, 7)\r
-                self.state = 229\r
-                self.match(CParser.T__16)\r
-                pass\r
-\r
-            elif la_ == 8:\r
-                self.enterOuterAlt(localctx, 8)\r
-                self.state = 230\r
-                self.match(CParser.T__17)\r
-                pass\r
-\r
-            elif la_ == 9:\r
-                self.enterOuterAlt(localctx, 9)\r
-                self.state = 231\r
-                self.match(CParser.T__18)\r
-                pass\r
-\r
-            elif la_ == 10:\r
-                self.enterOuterAlt(localctx, 10)\r
-                self.state = 232\r
-                localctx.s = self.struct_or_union_specifier()\r
-\r
-                if localctx.s.stop is not None:\r
-                    self.StoreStructUnionDefinition((None if localctx.s is None else localctx.s.start).line, (None if localctx.s is None else localctx.s.start).column, (None if localctx.s is None else localctx.s.stop).line, (None if localctx.s is None else localctx.s.stop).column, (None if localctx.s is None else self._input.getText((localctx.s.start,localctx.s.stop))))\r
-\r
-                pass\r
-\r
-            elif la_ == 11:\r
-                self.enterOuterAlt(localctx, 11)\r
-                self.state = 235\r
-                localctx.e = self.enum_specifier()\r
-\r
-                if localctx.e.stop is not None:\r
-                    self.StoreEnumerationDefinition((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
-\r
-                pass\r
-\r
-            elif la_ == 12:\r
-                self.enterOuterAlt(localctx, 12)\r
-                self.state = 238\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 242\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,15,self._ctx)\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt==1:\r
-                        self.state = 239\r
-                        self.type_qualifier() \r
-                    self.state = 244\r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,15,self._ctx)\r
-\r
-                self.state = 245\r
-                self.declarator()\r
-                pass\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 10):\r
+                    return\r
 \r
-            elif la_ == 13:\r
-                self.enterOuterAlt(localctx, 13)\r
-                self.state = 246\r
-                self.type_id()\r
-                pass\r
+                # C.g:229:5: ( IDENTIFIER )\r
+                # C.g:229:9: IDENTIFIER\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id467)\r
+                if self.failed:\r
+                    return\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 10, type_id_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end type_id\r
+\r
+    class struct_or_union_specifier_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
 \r
-    class Type_idContext(ParserRuleContext):\r
+    # $ANTLR start struct_or_union_specifier\r
+    # C.g:233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );\r
+    def struct_or_union_specifier(self, ):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+        retval = self.struct_or_union_specifier_return()\r
+        retval.start = self.input.LT(1)\r
+        struct_or_union_specifier_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 11):\r
+                    return retval\r
+\r
+                # C.g:235:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER )\r
+                alt15 = 2\r
+                LA15_0 = self.input.LA(1)\r
+\r
+                if ((45 <= LA15_0 <= 46)) :\r
+                    LA15_1 = self.input.LA(2)\r
+\r
+                    if (LA15_1 == IDENTIFIER) :\r
+                        LA15_2 = self.input.LA(3)\r
+\r
+                        if (LA15_2 == 43) :\r
+                            alt15 = 1\r
+                        elif (LA15_2 == EOF or LA15_2 == IDENTIFIER or LA15_2 == 25 or LA15_2 == 27 or (29 <= LA15_2 <= 42) or (45 <= LA15_2 <= 64) or LA15_2 == 66) :\r
+                            alt15 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return retval\r
+\r
+                            nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 2, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif (LA15_1 == 43) :\r
+                        alt15 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                        nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 1, self.input)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_type_id\r
+                        raise nvae\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterType_id" ):\r
-                listener.enterType_id(self)\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
+\r
+                    nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt15 == 1:\r
+                    # C.g:235:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}'\r
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier494)\r
+                    self.struct_or_union()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    # C.g:235:20: ( IDENTIFIER )?\r
+                    alt14 = 2\r
+                    LA14_0 = self.input.LA(1)\r
+\r
+                    if (LA14_0 == IDENTIFIER) :\r
+                        alt14 = 1\r
+                    if alt14 == 1:\r
+                        # C.g:0:0: IDENTIFIER\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier496)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    self.match(self.input, 43, self.FOLLOW_43_in_struct_or_union_specifier499)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier501)\r
+                    self.struct_declaration_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 44, self.FOLLOW_44_in_struct_or_union_specifier503)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt15 == 2:\r
+                    # C.g:236:4: struct_or_union IDENTIFIER\r
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier508)\r
+                    self.struct_or_union()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier510)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 11, struct_or_union_specifier_StartIndex)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitType_id" ):\r
-                listener.exitType_id(self)\r
+            pass\r
 \r
+        return retval\r
 \r
+    # $ANTLR end struct_or_union_specifier\r
 \r
 \r
-    def type_id(self):\r
+    # $ANTLR start struct_or_union\r
+    # C.g:239:1: struct_or_union : ( 'struct' | 'union' );\r
+    def struct_or_union(self, ):\r
 \r
-        localctx = CParser.Type_idContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 18, self.RULE_type_id)\r
+        struct_or_union_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 249\r
-            self.match(CParser.IDENTIFIER)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 12):\r
+                    return\r
+\r
+                # C.g:240:2: ( 'struct' | 'union' )\r
+                # C.g:\r
+                if (45 <= self.input.LA(1) <= 46):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_struct_or_union0\r
+                        )\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 12, struct_or_union_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_or_union\r
+\r
+\r
+    # $ANTLR start struct_declaration_list\r
+    # C.g:244:1: struct_declaration_list : ( struct_declaration )+ ;\r
+    def struct_declaration_list(self, ):\r
+\r
+        struct_declaration_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 13):\r
+                    return\r
+\r
+                # C.g:245:2: ( ( struct_declaration )+ )\r
+                # C.g:245:4: ( struct_declaration )+\r
+                # C.g:245:4: ( struct_declaration )+\r
+                cnt16 = 0\r
+                while True: #loop16\r
+                    alt16 = 2\r
+                    LA16_0 = self.input.LA(1)\r
+\r
+                    if (LA16_0 == IDENTIFIER or (34 <= LA16_0 <= 42) or (45 <= LA16_0 <= 46) or (48 <= LA16_0 <= 61)) :\r
+                        alt16 = 1\r
+\r
+\r
+                    if alt16 == 1:\r
+                        # C.g:0:0: struct_declaration\r
+                        self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list537)\r
+                        self.struct_declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        if cnt16 >= 1:\r
+                            break #loop16\r
+\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        eee = EarlyExitException(16, self.input)\r
+                        raise eee\r
+\r
+                    cnt16 += 1\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 13, struct_declaration_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_declaration_list\r
+\r
+\r
+    # $ANTLR start struct_declaration\r
+    # C.g:248:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;\r
+    def struct_declaration(self, ):\r
+\r
+        struct_declaration_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 14):\r
+                    return\r
+\r
+                # C.g:249:2: ( specifier_qualifier_list struct_declarator_list ';' )\r
+                # C.g:249:4: specifier_qualifier_list struct_declarator_list ';'\r
+                self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration549)\r
+                self.specifier_qualifier_list()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration551)\r
+                self.struct_declarator_list()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration553)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 14, struct_declaration_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_declaration\r
+\r
+\r
+    # $ANTLR start specifier_qualifier_list\r
+    # C.g:252:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ;\r
+    def specifier_qualifier_list(self, ):\r
+\r
+        specifier_qualifier_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 15):\r
+                    return\r
+\r
+                # C.g:253:2: ( ( type_qualifier | type_specifier )+ )\r
+                # C.g:253:4: ( type_qualifier | type_specifier )+\r
+                # C.g:253:4: ( type_qualifier | type_specifier )+\r
+                cnt17 = 0\r
+                while True: #loop17\r
+                    alt17 = 3\r
+                    LA17 = self.input.LA(1)\r
+                    if LA17 == 58:\r
+                        LA17_2 = self.input.LA(2)\r
+\r
+                        if (self.synpred39()) :\r
+                            alt17 = 1\r
+\r
+\r
+                    elif LA17 == 59:\r
+                        LA17_3 = self.input.LA(2)\r
+\r
+                        if (self.synpred39()) :\r
+                            alt17 = 1\r
+\r
+\r
+                    elif LA17 == 60:\r
+                        LA17_4 = self.input.LA(2)\r
+\r
+                        if (self.synpred39()) :\r
+                            alt17 = 1\r
+\r
+\r
+                    elif LA17 == IDENTIFIER:\r
+                        LA17 = self.input.LA(2)\r
+                        if LA17 == EOF or LA17 == IDENTIFIER or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48 or LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 58 or LA17 == 59 or LA17 == 60 or LA17 == 61 or LA17 == 63 or LA17 == 66:\r
+                            alt17 = 2\r
+                        elif LA17 == 62:\r
+                            LA17_94 = self.input.LA(3)\r
+\r
+                            if (self.synpred40()) :\r
+                                alt17 = 2\r
+\r
+\r
+                        elif LA17 == 47:\r
+                            LA17_95 = self.input.LA(3)\r
+\r
+                            if (self.synpred40()) :\r
+                                alt17 = 2\r
+\r
+\r
+                        elif LA17 == 64:\r
+                            LA17_96 = self.input.LA(3)\r
+\r
+                            if (self.synpred40()) :\r
+                                alt17 = 2\r
+\r
+\r
+\r
+                    elif LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 61:\r
+                        alt17 = 1\r
+                    elif LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48:\r
+                        alt17 = 2\r
+\r
+                    if alt17 == 1:\r
+                        # C.g:253:6: type_qualifier\r
+                        self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list566)\r
+                        self.type_qualifier()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt17 == 2:\r
+                        # C.g:253:23: type_specifier\r
+                        self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list570)\r
+                        self.type_specifier()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        if cnt17 >= 1:\r
+                            break #loop17\r
+\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        eee = EarlyExitException(17, self.input)\r
+                        raise eee\r
+\r
+                    cnt17 += 1\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 15, specifier_qualifier_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end specifier_qualifier_list\r
+\r
+\r
+    # $ANTLR start struct_declarator_list\r
+    # C.g:256:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;\r
+    def struct_declarator_list(self, ):\r
+\r
+        struct_declarator_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 16):\r
+                    return\r
+\r
+                # C.g:257:2: ( struct_declarator ( ',' struct_declarator )* )\r
+                # C.g:257:4: struct_declarator ( ',' struct_declarator )*\r
+                self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list584)\r
+                self.struct_declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:257:22: ( ',' struct_declarator )*\r
+                while True: #loop18\r
+                    alt18 = 2\r
+                    LA18_0 = self.input.LA(1)\r
+\r
+                    if (LA18_0 == 27) :\r
+                        alt18 = 1\r
+\r
+\r
+                    if alt18 == 1:\r
+                        # C.g:257:23: ',' struct_declarator\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_struct_declarator_list587)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list589)\r
+                        self.struct_declarator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop18\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 16, struct_declarator_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_declarator_list\r
+\r
+\r
+    # $ANTLR start struct_declarator\r
+    # C.g:260:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );\r
+    def struct_declarator(self, ):\r
+\r
+        struct_declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 17):\r
+                    return\r
+\r
+                # C.g:261:2: ( declarator ( ':' constant_expression )? | ':' constant_expression )\r
+                alt20 = 2\r
+                LA20_0 = self.input.LA(1)\r
+\r
+                if (LA20_0 == IDENTIFIER or (58 <= LA20_0 <= 60) or LA20_0 == 62 or LA20_0 == 66) :\r
+                    alt20 = 1\r
+                elif (LA20_0 == 47) :\r
+                    alt20 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("260:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 20, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt20 == 1:\r
+                    # C.g:261:4: declarator ( ':' constant_expression )?\r
+                    self.following.append(self.FOLLOW_declarator_in_struct_declarator602)\r
+                    self.declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:261:15: ( ':' constant_expression )?\r
+                    alt19 = 2\r
+                    LA19_0 = self.input.LA(1)\r
+\r
+                    if (LA19_0 == 47) :\r
+                        alt19 = 1\r
+                    if alt19 == 1:\r
+                        # C.g:261:16: ':' constant_expression\r
+                        self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator605)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_constant_expression_in_struct_declarator607)\r
+                        self.constant_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt20 == 2:\r
+                    # C.g:262:4: ':' constant_expression\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator614)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_struct_declarator616)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 17, struct_declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_declarator\r
+\r
+    class enum_specifier_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start enum_specifier\r
+    # C.g:265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );\r
+    def enum_specifier(self, ):\r
+\r
+        retval = self.enum_specifier_return()\r
+        retval.start = self.input.LT(1)\r
+        enum_specifier_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 18):\r
+                    return retval\r
+\r
+                # C.g:267:2: ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER )\r
+                alt23 = 3\r
+                LA23_0 = self.input.LA(1)\r
+\r
+                if (LA23_0 == 48) :\r
+                    LA23_1 = self.input.LA(2)\r
+\r
+                    if (LA23_1 == IDENTIFIER) :\r
+                        LA23_2 = self.input.LA(3)\r
+\r
+                        if (LA23_2 == 43) :\r
+                            alt23 = 2\r
+                        elif (LA23_2 == EOF or LA23_2 == IDENTIFIER or LA23_2 == 25 or LA23_2 == 27 or (29 <= LA23_2 <= 42) or (45 <= LA23_2 <= 64) or LA23_2 == 66) :\r
+                            alt23 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return retval\r
+\r
+                            nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 2, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif (LA23_1 == 43) :\r
+                        alt23 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
+\r
+                        nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
+\r
+                    nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt23 == 1:\r
+                    # C.g:267:4: 'enum' '{' enumerator_list ( ',' )? '}'\r
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier634)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier636)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier638)\r
+                    self.enumerator_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    # C.g:267:31: ( ',' )?\r
+                    alt21 = 2\r
+                    LA21_0 = self.input.LA(1)\r
+\r
+                    if (LA21_0 == 27) :\r
+                        alt21 = 1\r
+                    if alt21 == 1:\r
+                        # C.g:0:0: ','\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier640)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier643)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt23 == 2:\r
+                    # C.g:268:4: 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}'\r
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier648)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier650)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier652)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier654)\r
+                    self.enumerator_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    # C.g:268:42: ( ',' )?\r
+                    alt22 = 2\r
+                    LA22_0 = self.input.LA(1)\r
+\r
+                    if (LA22_0 == 27) :\r
+                        alt22 = 1\r
+                    if alt22 == 1:\r
+                        # C.g:0:0: ','\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier656)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier659)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt23 == 3:\r
+                    # C.g:269:4: 'enum' IDENTIFIER\r
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier664)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier666)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 18, enum_specifier_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end enum_specifier\r
+\r
+\r
+    # $ANTLR start enumerator_list\r
+    # C.g:272:1: enumerator_list : enumerator ( ',' enumerator )* ;\r
+    def enumerator_list(self, ):\r
+\r
+        enumerator_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 19):\r
+                    return\r
+\r
+                # C.g:273:2: ( enumerator ( ',' enumerator )* )\r
+                # C.g:273:4: enumerator ( ',' enumerator )*\r
+                self.following.append(self.FOLLOW_enumerator_in_enumerator_list677)\r
+                self.enumerator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:273:15: ( ',' enumerator )*\r
+                while True: #loop24\r
+                    alt24 = 2\r
+                    LA24_0 = self.input.LA(1)\r
+\r
+                    if (LA24_0 == 27) :\r
+                        LA24_1 = self.input.LA(2)\r
+\r
+                        if (LA24_1 == IDENTIFIER) :\r
+                            alt24 = 1\r
+\r
+\r
+\r
+\r
+                    if alt24 == 1:\r
+                        # C.g:273:16: ',' enumerator\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_enumerator_list680)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_enumerator_in_enumerator_list682)\r
+                        self.enumerator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop24\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 19, enumerator_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end enumerator_list\r
+\r
+\r
+    # $ANTLR start enumerator\r
+    # C.g:276:1: enumerator : IDENTIFIER ( '=' constant_expression )? ;\r
+    def enumerator(self, ):\r
+\r
+        enumerator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 20):\r
+                    return\r
+\r
+                # C.g:277:2: ( IDENTIFIER ( '=' constant_expression )? )\r
+                # C.g:277:4: IDENTIFIER ( '=' constant_expression )?\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator695)\r
+                if self.failed:\r
+                    return\r
+                # C.g:277:15: ( '=' constant_expression )?\r
+                alt25 = 2\r
+                LA25_0 = self.input.LA(1)\r
+\r
+                if (LA25_0 == 28) :\r
+                    alt25 = 1\r
+                if alt25 == 1:\r
+                    # C.g:277:16: '=' constant_expression\r
+                    self.match(self.input, 28, self.FOLLOW_28_in_enumerator698)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_enumerator700)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 20, enumerator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end enumerator\r
+\r
+\r
+    # $ANTLR start type_qualifier\r
+    # C.g:280:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' | 'PACKED' );\r
+    def type_qualifier(self, ):\r
+\r
+        type_qualifier_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 21):\r
+                    return\r
+\r
+                # C.g:281:2: ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' | 'PACKED' )\r
+                # C.g:\r
+                if (49 <= self.input.LA(1) <= 61):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_type_qualifier0\r
+                        )\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 21, type_qualifier_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end type_qualifier\r
+\r
+    class declarator_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start declarator\r
+    # C.g:296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );\r
+    def declarator(self, ):\r
+\r
+        retval = self.declarator_return()\r
+        retval.start = self.input.LT(1)\r
+        declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 22):\r
+                    return retval\r
+\r
+                # C.g:297:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer )\r
+                alt30 = 2\r
+                LA30_0 = self.input.LA(1)\r
+\r
+                if (LA30_0 == 66) :\r
+                    LA30_1 = self.input.LA(2)\r
+\r
+                    if (self.synpred66()) :\r
+                        alt30 = 1\r
+                    elif (True) :\r
+                        alt30 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
+\r
+                        nvae = NoViableAltException("296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA30_0 == IDENTIFIER or (58 <= LA30_0 <= 60) or LA30_0 == 62) :\r
+                    alt30 = 1\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
+\r
+                    nvae = NoViableAltException("296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt30 == 1:\r
+                    # C.g:297:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator\r
+                    # C.g:297:4: ( pointer )?\r
+                    alt26 = 2\r
+                    LA26_0 = self.input.LA(1)\r
+\r
+                    if (LA26_0 == 66) :\r
+                        alt26 = 1\r
+                    if alt26 == 1:\r
+                        # C.g:0:0: pointer\r
+                        self.following.append(self.FOLLOW_pointer_in_declarator784)\r
+                        self.pointer()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    # C.g:297:13: ( 'EFIAPI' )?\r
+                    alt27 = 2\r
+                    LA27_0 = self.input.LA(1)\r
+\r
+                    if (LA27_0 == 58) :\r
+                        alt27 = 1\r
+                    if alt27 == 1:\r
+                        # C.g:297:14: 'EFIAPI'\r
+                        self.match(self.input, 58, self.FOLLOW_58_in_declarator788)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    # C.g:297:25: ( 'EFI_BOOTSERVICE' )?\r
+                    alt28 = 2\r
+                    LA28_0 = self.input.LA(1)\r
+\r
+                    if (LA28_0 == 59) :\r
+                        alt28 = 1\r
+                    if alt28 == 1:\r
+                        # C.g:297:26: 'EFI_BOOTSERVICE'\r
+                        self.match(self.input, 59, self.FOLLOW_59_in_declarator793)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    # C.g:297:46: ( 'EFI_RUNTIMESERVICE' )?\r
+                    alt29 = 2\r
+                    LA29_0 = self.input.LA(1)\r
+\r
+                    if (LA29_0 == 60) :\r
+                        alt29 = 1\r
+                    if alt29 == 1:\r
+                        # C.g:297:47: 'EFI_RUNTIMESERVICE'\r
+                        self.match(self.input, 60, self.FOLLOW_60_in_declarator798)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    self.following.append(self.FOLLOW_direct_declarator_in_declarator802)\r
+                    self.direct_declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt30 == 2:\r
+                    # C.g:299:4: pointer\r
+                    self.following.append(self.FOLLOW_pointer_in_declarator808)\r
+                    self.pointer()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 22, declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end declarator\r
+\r
+\r
+    # $ANTLR start direct_declarator\r
+    # C.g:302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );\r
+    def direct_declarator(self, ):\r
+\r
+        direct_declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23):\r
+                    return\r
+\r
+                # C.g:303:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ )\r
+                alt34 = 2\r
+                LA34_0 = self.input.LA(1)\r
+\r
+                if (LA34_0 == IDENTIFIER) :\r
+                    alt34 = 1\r
+                elif (LA34_0 == 62) :\r
+                    alt34 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt34 == 1:\r
+                    # C.g:303:4: IDENTIFIER ( declarator_suffix )*\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator819)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:303:15: ( declarator_suffix )*\r
+                    while True: #loop31\r
+                        alt31 = 2\r
+                        LA31_0 = self.input.LA(1)\r
+\r
+                        if (LA31_0 == 62) :\r
+                            LA31 = self.input.LA(2)\r
+                            if LA31 == 63:\r
+                                LA31_30 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 58:\r
+                                LA31_31 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 66:\r
+                                LA31_32 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 59:\r
+                                LA31_33 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 60:\r
+                                LA31_34 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == IDENTIFIER:\r
+                                LA31_35 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33:\r
+                                LA31_37 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 34:\r
+                                LA31_38 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 35:\r
+                                LA31_39 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 36:\r
+                                LA31_40 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 37:\r
+                                LA31_41 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 38:\r
+                                LA31_42 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 39:\r
+                                LA31_43 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 40:\r
+                                LA31_44 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 41:\r
+                                LA31_45 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 42:\r
+                                LA31_46 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 45 or LA31 == 46:\r
+                                LA31_47 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 48:\r
+                                LA31_48 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 49 or LA31 == 50 or LA31 == 51 or LA31 == 52 or LA31 == 53 or LA31 == 54 or LA31 == 55 or LA31 == 56 or LA31 == 57 or LA31 == 61:\r
+                                LA31_49 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+\r
+                        elif (LA31_0 == 64) :\r
+                            LA31 = self.input.LA(2)\r
+                            if LA31 == 65:\r
+                                LA31_51 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 62:\r
+                                LA31_52 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == IDENTIFIER:\r
+                                LA31_53 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == HEX_LITERAL:\r
+                                LA31_54 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == OCTAL_LITERAL:\r
+                                LA31_55 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == DECIMAL_LITERAL:\r
+                                LA31_56 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == CHARACTER_LITERAL:\r
+                                LA31_57 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == STRING_LITERAL:\r
+                                LA31_58 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == FLOATING_POINT_LITERAL:\r
+                                LA31_59 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 72:\r
+                                LA31_60 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 73:\r
+                                LA31_61 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 66 or LA31 == 68 or LA31 == 69 or LA31 == 77 or LA31 == 78 or LA31 == 79:\r
+                                LA31_62 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 74:\r
+                                LA31_63 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+\r
+\r
+\r
+                        if alt31 == 1:\r
+                            # C.g:0:0: declarator_suffix\r
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator821)\r
+                            self.declarator_suffix()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            break #loop31\r
+\r
+\r
+\r
+\r
+                elif alt34 == 2:\r
+                    # C.g:304:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator827)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:304:8: ( 'EFIAPI' )?\r
+                    alt32 = 2\r
+                    LA32_0 = self.input.LA(1)\r
+\r
+                    if (LA32_0 == 58) :\r
+                        LA32_1 = self.input.LA(2)\r
+\r
+                        if (self.synpred69()) :\r
+                            alt32 = 1\r
+                    if alt32 == 1:\r
+                        # C.g:304:9: 'EFIAPI'\r
+                        self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator830)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    self.following.append(self.FOLLOW_declarator_in_direct_declarator834)\r
+                    self.declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_direct_declarator836)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:304:35: ( declarator_suffix )+\r
+                    cnt33 = 0\r
+                    while True: #loop33\r
+                        alt33 = 2\r
+                        LA33_0 = self.input.LA(1)\r
+\r
+                        if (LA33_0 == 62) :\r
+                            LA33 = self.input.LA(2)\r
+                            if LA33 == 63:\r
+                                LA33_30 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 58:\r
+                                LA33_31 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 66:\r
+                                LA33_32 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 59:\r
+                                LA33_33 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 60:\r
+                                LA33_34 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == IDENTIFIER:\r
+                                LA33_35 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 29 or LA33 == 30 or LA33 == 31 or LA33 == 32 or LA33 == 33:\r
+                                LA33_37 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 34:\r
+                                LA33_38 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 35:\r
+                                LA33_39 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 36:\r
+                                LA33_40 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 37:\r
+                                LA33_41 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 38:\r
+                                LA33_42 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 39:\r
+                                LA33_43 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 40:\r
+                                LA33_44 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 41:\r
+                                LA33_45 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 42:\r
+                                LA33_46 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 45 or LA33 == 46:\r
+                                LA33_47 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 48:\r
+                                LA33_48 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 49 or LA33 == 50 or LA33 == 51 or LA33 == 52 or LA33 == 53 or LA33 == 54 or LA33 == 55 or LA33 == 56 or LA33 == 57 or LA33 == 61:\r
+                                LA33_49 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+\r
+                        elif (LA33_0 == 64) :\r
+                            LA33 = self.input.LA(2)\r
+                            if LA33 == 65:\r
+                                LA33_51 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 62:\r
+                                LA33_52 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == IDENTIFIER:\r
+                                LA33_53 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == HEX_LITERAL:\r
+                                LA33_54 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == OCTAL_LITERAL:\r
+                                LA33_55 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == DECIMAL_LITERAL:\r
+                                LA33_56 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == CHARACTER_LITERAL:\r
+                                LA33_57 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == STRING_LITERAL:\r
+                                LA33_58 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == FLOATING_POINT_LITERAL:\r
+                                LA33_59 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 72:\r
+                                LA33_60 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 73:\r
+                                LA33_61 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 66 or LA33 == 68 or LA33 == 69 or LA33 == 77 or LA33 == 78 or LA33 == 79:\r
+                                LA33_62 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 74:\r
+                                LA33_63 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+\r
+\r
+\r
+                        if alt33 == 1:\r
+                            # C.g:0:0: declarator_suffix\r
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator838)\r
+                            self.declarator_suffix()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            if cnt33 >= 1:\r
+                                break #loop33\r
+\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            eee = EarlyExitException(33, self.input)\r
+                            raise eee\r
+\r
+                        cnt33 += 1\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 23, direct_declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end direct_declarator\r
+\r
+\r
+    # $ANTLR start declarator_suffix\r
+    # C.g:307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );\r
+    def declarator_suffix(self, ):\r
+\r
+        declarator_suffix_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 24):\r
+                    return\r
+\r
+                # C.g:308:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )\r
+                alt35 = 5\r
+                LA35_0 = self.input.LA(1)\r
+\r
+                if (LA35_0 == 64) :\r
+                    LA35_1 = self.input.LA(2)\r
+\r
+                    if (LA35_1 == 65) :\r
+                        alt35 = 2\r
+                    elif ((IDENTIFIER <= LA35_1 <= FLOATING_POINT_LITERAL) or LA35_1 == 62 or LA35_1 == 66 or (68 <= LA35_1 <= 69) or (72 <= LA35_1 <= 74) or (77 <= LA35_1 <= 79)) :\r
+                        alt35 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA35_0 == 62) :\r
+                    LA35 = self.input.LA(2)\r
+                    if LA35 == 63:\r
+                        alt35 = 5\r
+                    elif LA35 == 29 or LA35 == 30 or LA35 == 31 or LA35 == 32 or LA35 == 33 or LA35 == 34 or LA35 == 35 or LA35 == 36 or LA35 == 37 or LA35 == 38 or LA35 == 39 or LA35 == 40 or LA35 == 41 or LA35 == 42 or LA35 == 45 or LA35 == 46 or LA35 == 48 or LA35 == 49 or LA35 == 50 or LA35 == 51 or LA35 == 52 or LA35 == 53 or LA35 == 54 or LA35 == 55 or LA35 == 56 or LA35 == 57 or LA35 == 58 or LA35 == 59 or LA35 == 60 or LA35 == 61 or LA35 == 66:\r
+                        alt35 = 3\r
+                    elif LA35 == IDENTIFIER:\r
+                        LA35_29 = self.input.LA(3)\r
+\r
+                        if (self.synpred73()) :\r
+                            alt35 = 3\r
+                        elif (self.synpred74()) :\r
+                            alt35 = 4\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 29, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 2, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt35 == 1:\r
+                    # C.g:308:6: '[' constant_expression ']'\r
+                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix852)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix854)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 65, self.FOLLOW_65_in_declarator_suffix856)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt35 == 2:\r
+                    # C.g:309:9: '[' ']'\r
+                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix866)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 65, self.FOLLOW_65_in_declarator_suffix868)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt35 == 3:\r
+                    # C.g:310:9: '(' parameter_type_list ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix878)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix880)\r
+                    self.parameter_type_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix882)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt35 == 4:\r
+                    # C.g:311:9: '(' identifier_list ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix892)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix894)\r
+                    self.identifier_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix896)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt35 == 5:\r
+                    # C.g:312:9: '(' ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix906)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix908)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 24, declarator_suffix_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end declarator_suffix\r
+\r
+\r
+    # $ANTLR start pointer\r
+    # C.g:315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );\r
+    def pointer(self, ):\r
+\r
+        pointer_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 25):\r
+                    return\r
+\r
+                # C.g:316:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' )\r
+                alt38 = 3\r
+                LA38_0 = self.input.LA(1)\r
+\r
+                if (LA38_0 == 66) :\r
+                    LA38 = self.input.LA(2)\r
+                    if LA38 == 66:\r
+                        LA38_2 = self.input.LA(3)\r
+\r
+                        if (self.synpred78()) :\r
+                            alt38 = 2\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 2, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == 58:\r
+                        LA38_3 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 3, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == 59:\r
+                        LA38_4 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 4, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == 60:\r
+                        LA38_5 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 5, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == EOF or LA38 == IDENTIFIER or LA38 == 25 or LA38 == 26 or LA38 == 27 or LA38 == 28 or LA38 == 29 or LA38 == 30 or LA38 == 31 or LA38 == 32 or LA38 == 33 or LA38 == 34 or LA38 == 35 or LA38 == 36 or LA38 == 37 or LA38 == 38 or LA38 == 39 or LA38 == 40 or LA38 == 41 or LA38 == 42 or LA38 == 43 or LA38 == 45 or LA38 == 46 or LA38 == 47 or LA38 == 48 or LA38 == 62 or LA38 == 63 or LA38 == 64:\r
+                        alt38 = 3\r
+                    elif LA38 == 53:\r
+                        LA38_21 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 21, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == 49 or LA38 == 50 or LA38 == 51 or LA38 == 52 or LA38 == 54 or LA38 == 55 or LA38 == 56 or LA38 == 57 or LA38 == 61:\r
+                        LA38_29 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 29, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt38 == 1:\r
+                    # C.g:316:4: '*' ( type_qualifier )+ ( pointer )?\r
+                    self.match(self.input, 66, self.FOLLOW_66_in_pointer919)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:316:8: ( type_qualifier )+\r
+                    cnt36 = 0\r
+                    while True: #loop36\r
+                        alt36 = 2\r
+                        LA36 = self.input.LA(1)\r
+                        if LA36 == 58:\r
+                            LA36_2 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+                        elif LA36 == 59:\r
+                            LA36_3 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+                        elif LA36 == 60:\r
+                            LA36_4 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+                        elif LA36 == 53:\r
+                            LA36_20 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+                        elif LA36 == 49 or LA36 == 50 or LA36 == 51 or LA36 == 52 or LA36 == 54 or LA36 == 55 or LA36 == 56 or LA36 == 57 or LA36 == 61:\r
+                            LA36_28 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+\r
+                        if alt36 == 1:\r
+                            # C.g:0:0: type_qualifier\r
+                            self.following.append(self.FOLLOW_type_qualifier_in_pointer921)\r
+                            self.type_qualifier()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            if cnt36 >= 1:\r
+                                break #loop36\r
+\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            eee = EarlyExitException(36, self.input)\r
+                            raise eee\r
+\r
+                        cnt36 += 1\r
+\r
+\r
+                    # C.g:316:24: ( pointer )?\r
+                    alt37 = 2\r
+                    LA37_0 = self.input.LA(1)\r
+\r
+                    if (LA37_0 == 66) :\r
+                        LA37_1 = self.input.LA(2)\r
+\r
+                        if (self.synpred76()) :\r
+                            alt37 = 1\r
+                    if alt37 == 1:\r
+                        # C.g:0:0: pointer\r
+                        self.following.append(self.FOLLOW_pointer_in_pointer924)\r
+                        self.pointer()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt38 == 2:\r
+                    # C.g:317:4: '*' pointer\r
+                    self.match(self.input, 66, self.FOLLOW_66_in_pointer930)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_pointer_in_pointer932)\r
+                    self.pointer()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt38 == 3:\r
+                    # C.g:318:4: '*'\r
+                    self.match(self.input, 66, self.FOLLOW_66_in_pointer937)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 25, pointer_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end pointer\r
+\r
+\r
+    # $ANTLR start parameter_type_list\r
+    # C.g:321:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ;\r
+    def parameter_type_list(self, ):\r
+\r
+        parameter_type_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 26):\r
+                    return\r
+\r
+                # C.g:322:2: ( parameter_list ( ',' ( 'OPTIONAL' )? '...' )? )\r
+                # C.g:322:4: parameter_list ( ',' ( 'OPTIONAL' )? '...' )?\r
+                self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list948)\r
+                self.parameter_list()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:322:19: ( ',' ( 'OPTIONAL' )? '...' )?\r
+                alt40 = 2\r
+                LA40_0 = self.input.LA(1)\r
+\r
+                if (LA40_0 == 27) :\r
+                    alt40 = 1\r
+                if alt40 == 1:\r
+                    # C.g:322:20: ',' ( 'OPTIONAL' )? '...'\r
+                    self.match(self.input, 27, self.FOLLOW_27_in_parameter_type_list951)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:322:24: ( 'OPTIONAL' )?\r
+                    alt39 = 2\r
+                    LA39_0 = self.input.LA(1)\r
+\r
+                    if (LA39_0 == 53) :\r
+                        alt39 = 1\r
+                    if alt39 == 1:\r
+                        # C.g:322:25: 'OPTIONAL'\r
+                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_type_list954)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    self.match(self.input, 67, self.FOLLOW_67_in_parameter_type_list958)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 26, parameter_type_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end parameter_type_list\r
+\r
+\r
+    # $ANTLR start parameter_list\r
+    # C.g:325:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ;\r
+    def parameter_list(self, ):\r
+\r
+        parameter_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 27):\r
+                    return\r
+\r
+                # C.g:326:2: ( parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* )\r
+                # C.g:326:4: parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )*\r
+                self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list971)\r
+                self.parameter_declaration()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:326:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )*\r
+                while True: #loop42\r
+                    alt42 = 2\r
+                    LA42_0 = self.input.LA(1)\r
+\r
+                    if (LA42_0 == 27) :\r
+                        LA42_1 = self.input.LA(2)\r
+\r
+                        if (LA42_1 == 53) :\r
+                            LA42_3 = self.input.LA(3)\r
+\r
+                            if (self.synpred82()) :\r
+                                alt42 = 1\r
+\r
+\r
+                        elif (LA42_1 == IDENTIFIER or (29 <= LA42_1 <= 42) or (45 <= LA42_1 <= 46) or (48 <= LA42_1 <= 52) or (54 <= LA42_1 <= 61) or LA42_1 == 66) :\r
+                            alt42 = 1\r
+\r
+\r
+\r
+\r
+                    if alt42 == 1:\r
+                        # C.g:326:27: ',' ( 'OPTIONAL' )? parameter_declaration\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_parameter_list974)\r
+                        if self.failed:\r
+                            return\r
+                        # C.g:326:31: ( 'OPTIONAL' )?\r
+                        alt41 = 2\r
+                        LA41_0 = self.input.LA(1)\r
+\r
+                        if (LA41_0 == 53) :\r
+                            LA41_1 = self.input.LA(2)\r
+\r
+                            if (self.synpred81()) :\r
+                                alt41 = 1\r
+                        if alt41 == 1:\r
+                            # C.g:326:32: 'OPTIONAL'\r
+                            self.match(self.input, 53, self.FOLLOW_53_in_parameter_list977)\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+\r
+                        self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list981)\r
+                        self.parameter_declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop42\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 27, parameter_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end parameter_list\r
+\r
+\r
+    # $ANTLR start parameter_declaration\r
+    # C.g:329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );\r
+    def parameter_declaration(self, ):\r
+\r
+        parameter_declaration_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 28):\r
+                    return\r
+\r
+                # C.g:330:2: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER )\r
+                alt46 = 2\r
+                LA46 = self.input.LA(1)\r
+                if LA46 == 29 or LA46 == 30 or LA46 == 31 or LA46 == 32 or LA46 == 33 or LA46 == 34 or LA46 == 35 or LA46 == 36 or LA46 == 37 or LA46 == 38 or LA46 == 39 or LA46 == 40 or LA46 == 41 or LA46 == 42 or LA46 == 45 or LA46 == 46 or LA46 == 48 or LA46 == 49 or LA46 == 50 or LA46 == 51 or LA46 == 52 or LA46 == 53 or LA46 == 54 or LA46 == 55 or LA46 == 56 or LA46 == 57 or LA46 == 58 or LA46 == 59 or LA46 == 60 or LA46 == 61:\r
+                    alt46 = 1\r
+                elif LA46 == IDENTIFIER:\r
+                    LA46_13 = self.input.LA(2)\r
+\r
+                    if (self.synpred86()) :\r
+                        alt46 = 1\r
+                    elif (True) :\r
+                        alt46 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 13, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA46 == 66:\r
+                    alt46 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt46 == 1:\r
+                    # C.g:330:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )?\r
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration994)\r
+                    self.declaration_specifiers()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:330:27: ( declarator | abstract_declarator )*\r
+                    while True: #loop43\r
+                        alt43 = 3\r
+                        LA43 = self.input.LA(1)\r
+                        if LA43 == 66:\r
+                            LA43_5 = self.input.LA(2)\r
+\r
+                            if (self.synpred83()) :\r
+                                alt43 = 1\r
+                            elif (self.synpred84()) :\r
+                                alt43 = 2\r
+\r
+\r
+                        elif LA43 == IDENTIFIER or LA43 == 58 or LA43 == 59 or LA43 == 60:\r
+                            alt43 = 1\r
+                        elif LA43 == 62:\r
+                            LA43 = self.input.LA(2)\r
+                            if LA43 == 29 or LA43 == 30 or LA43 == 31 or LA43 == 32 or LA43 == 33 or LA43 == 34 or LA43 == 35 or LA43 == 36 or LA43 == 37 or LA43 == 38 or LA43 == 39 or LA43 == 40 or LA43 == 41 or LA43 == 42 or LA43 == 45 or LA43 == 46 or LA43 == 48 or LA43 == 49 or LA43 == 50 or LA43 == 51 or LA43 == 52 or LA43 == 53 or LA43 == 54 or LA43 == 55 or LA43 == 56 or LA43 == 57 or LA43 == 61 or LA43 == 63 or LA43 == 64:\r
+                                alt43 = 2\r
+                            elif LA43 == IDENTIFIER:\r
+                                LA43_37 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 58:\r
+                                LA43_38 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 66:\r
+                                LA43_39 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 59:\r
+                                LA43_40 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 60:\r
+                                LA43_41 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 62:\r
+                                LA43_43 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+\r
+                        elif LA43 == 64:\r
+                            alt43 = 2\r
+\r
+                        if alt43 == 1:\r
+                            # C.g:330:28: declarator\r
+                            self.following.append(self.FOLLOW_declarator_in_parameter_declaration997)\r
+                            self.declarator()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        elif alt43 == 2:\r
+                            # C.g:330:39: abstract_declarator\r
+                            self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration999)\r
+                            self.abstract_declarator()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            break #loop43\r
+\r
+\r
+                    # C.g:330:61: ( 'OPTIONAL' )?\r
+                    alt44 = 2\r
+                    LA44_0 = self.input.LA(1)\r
+\r
+                    if (LA44_0 == 53) :\r
+                        alt44 = 1\r
+                    if alt44 == 1:\r
+                        # C.g:330:62: 'OPTIONAL'\r
+                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_declaration1004)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt46 == 2:\r
+                    # C.g:332:4: ( pointer )* IDENTIFIER\r
+                    # C.g:332:4: ( pointer )*\r
+                    while True: #loop45\r
+                        alt45 = 2\r
+                        LA45_0 = self.input.LA(1)\r
+\r
+                        if (LA45_0 == 66) :\r
+                            alt45 = 1\r
+\r
+\r
+                        if alt45 == 1:\r
+                            # C.g:0:0: pointer\r
+                            self.following.append(self.FOLLOW_pointer_in_parameter_declaration1013)\r
+                            self.pointer()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            break #loop45\r
+\r
+\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration1016)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 28, parameter_declaration_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end parameter_declaration\r
+\r
+\r
+    # $ANTLR start identifier_list\r
+    # C.g:335:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ;\r
+    def identifier_list(self, ):\r
+\r
+        identifier_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 29):\r
+                    return\r
+\r
+                # C.g:336:2: ( IDENTIFIER ( ',' IDENTIFIER )* )\r
+                # C.g:336:4: IDENTIFIER ( ',' IDENTIFIER )*\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1027)\r
+                if self.failed:\r
+                    return\r
+                # C.g:337:2: ( ',' IDENTIFIER )*\r
+                while True: #loop47\r
+                    alt47 = 2\r
+                    LA47_0 = self.input.LA(1)\r
+\r
+                    if (LA47_0 == 27) :\r
+                        alt47 = 1\r
+\r
+\r
+                    if alt47 == 1:\r
+                        # C.g:337:3: ',' IDENTIFIER\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1031)\r
+                        if self.failed:\r
+                            return\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1033)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop47\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 29, identifier_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end identifier_list\r
+\r
+\r
+    # $ANTLR start type_name\r
+    # C.g:340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );\r
+    def type_name(self, ):\r
+\r
+        type_name_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 30):\r
+                    return\r
+\r
+                # C.g:341:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id )\r
+                alt49 = 2\r
+                LA49_0 = self.input.LA(1)\r
+\r
+                if ((34 <= LA49_0 <= 42) or (45 <= LA49_0 <= 46) or (48 <= LA49_0 <= 61)) :\r
+                    alt49 = 1\r
+                elif (LA49_0 == IDENTIFIER) :\r
+                    LA49_13 = self.input.LA(2)\r
+\r
+                    if (self.synpred90()) :\r
+                        alt49 = 1\r
+                    elif (True) :\r
+                        alt49 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 13, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt49 == 1:\r
+                    # C.g:341:4: specifier_qualifier_list ( abstract_declarator )?\r
+                    self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1046)\r
+                    self.specifier_qualifier_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:341:29: ( abstract_declarator )?\r
+                    alt48 = 2\r
+                    LA48_0 = self.input.LA(1)\r
+\r
+                    if (LA48_0 == 62 or LA48_0 == 64 or LA48_0 == 66) :\r
+                        alt48 = 1\r
+                    if alt48 == 1:\r
+                        # C.g:0:0: abstract_declarator\r
+                        self.following.append(self.FOLLOW_abstract_declarator_in_type_name1048)\r
+                        self.abstract_declarator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt49 == 2:\r
+                    # C.g:342:4: type_id\r
+                    self.following.append(self.FOLLOW_type_id_in_type_name1054)\r
+                    self.type_id()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 30, type_name_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end type_name\r
+\r
+\r
+    # $ANTLR start abstract_declarator\r
+    # C.g:345:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );\r
+    def abstract_declarator(self, ):\r
+\r
+        abstract_declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 31):\r
+                    return\r
+\r
+                # C.g:346:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator )\r
+                alt51 = 2\r
+                LA51_0 = self.input.LA(1)\r
+\r
+                if (LA51_0 == 66) :\r
+                    alt51 = 1\r
+                elif (LA51_0 == 62 or LA51_0 == 64) :\r
+                    alt51 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("345:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 51, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt51 == 1:\r
+                    # C.g:346:4: pointer ( direct_abstract_declarator )?\r
+                    self.following.append(self.FOLLOW_pointer_in_abstract_declarator1065)\r
+                    self.pointer()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:346:12: ( direct_abstract_declarator )?\r
+                    alt50 = 2\r
+                    LA50_0 = self.input.LA(1)\r
+\r
+                    if (LA50_0 == 62) :\r
+                        LA50 = self.input.LA(2)\r
+                        if LA50 == 63:\r
+                            LA50_12 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 58:\r
+                            LA50_13 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 66:\r
+                            LA50_14 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 59:\r
+                            LA50_15 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 60:\r
+                            LA50_16 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == IDENTIFIER:\r
+                            LA50_17 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 62:\r
+                            LA50_18 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 64:\r
+                            LA50_19 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 29 or LA50 == 30 or LA50 == 31 or LA50 == 32 or LA50 == 33:\r
+                            LA50_20 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 34:\r
+                            LA50_21 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 35:\r
+                            LA50_22 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 36:\r
+                            LA50_23 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 37:\r
+                            LA50_24 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 38:\r
+                            LA50_25 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 39:\r
+                            LA50_26 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 40:\r
+                            LA50_27 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 41:\r
+                            LA50_28 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 42:\r
+                            LA50_29 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 45 or LA50 == 46:\r
+                            LA50_30 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 48:\r
+                            LA50_31 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 49 or LA50 == 50 or LA50 == 51 or LA50 == 52 or LA50 == 53 or LA50 == 54 or LA50 == 55 or LA50 == 56 or LA50 == 57 or LA50 == 61:\r
+                            LA50_32 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                    elif (LA50_0 == 64) :\r
+                        LA50 = self.input.LA(2)\r
+                        if LA50 == 65:\r
+                            LA50_33 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 62:\r
+                            LA50_34 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == IDENTIFIER:\r
+                            LA50_35 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == HEX_LITERAL:\r
+                            LA50_36 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == OCTAL_LITERAL:\r
+                            LA50_37 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == DECIMAL_LITERAL:\r
+                            LA50_38 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == CHARACTER_LITERAL:\r
+                            LA50_39 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == STRING_LITERAL:\r
+                            LA50_40 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == FLOATING_POINT_LITERAL:\r
+                            LA50_41 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 72:\r
+                            LA50_42 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 73:\r
+                            LA50_43 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 66 or LA50 == 68 or LA50 == 69 or LA50 == 77 or LA50 == 78 or LA50 == 79:\r
+                            LA50_44 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 74:\r
+                            LA50_45 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                    if alt50 == 1:\r
+                        # C.g:0:0: direct_abstract_declarator\r
+                        self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1067)\r
+                        self.direct_abstract_declarator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt51 == 2:\r
+                    # C.g:347:4: direct_abstract_declarator\r
+                    self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1073)\r
+                    self.direct_abstract_declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 31, abstract_declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end abstract_declarator\r
+\r
+\r
+    # $ANTLR start direct_abstract_declarator\r
+    # C.g:350:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ;\r
+    def direct_abstract_declarator(self, ):\r
+\r
+        direct_abstract_declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 32):\r
+                    return\r
+\r
+                # C.g:351:2: ( ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* )\r
+                # C.g:351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )*\r
+                # C.g:351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )\r
+                alt52 = 2\r
+                LA52_0 = self.input.LA(1)\r
+\r
+                if (LA52_0 == 62) :\r
+                    LA52 = self.input.LA(2)\r
+                    if LA52 == IDENTIFIER or LA52 == 29 or LA52 == 30 or LA52 == 31 or LA52 == 32 or LA52 == 33 or LA52 == 34 or LA52 == 35 or LA52 == 36 or LA52 == 37 or LA52 == 38 or LA52 == 39 or LA52 == 40 or LA52 == 41 or LA52 == 42 or LA52 == 45 or LA52 == 46 or LA52 == 48 or LA52 == 49 or LA52 == 50 or LA52 == 51 or LA52 == 52 or LA52 == 53 or LA52 == 54 or LA52 == 55 or LA52 == 56 or LA52 == 57 or LA52 == 58 or LA52 == 59 or LA52 == 60 or LA52 == 61 or LA52 == 63:\r
+                        alt52 = 2\r
+                    elif LA52 == 66:\r
+                        LA52_18 = self.input.LA(3)\r
+\r
+                        if (self.synpred93()) :\r
+                            alt52 = 1\r
+                        elif (True) :\r
+                            alt52 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 18, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA52 == 62 or LA52 == 64:\r
+                        alt52 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA52_0 == 64) :\r
+                    alt52 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt52 == 1:\r
+                    # C.g:351:6: '(' abstract_declarator ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1086)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1088)\r
+                    self.abstract_declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_direct_abstract_declarator1090)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt52 == 2:\r
+                    # C.g:351:36: abstract_declarator_suffix\r
+                    self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1094)\r
+                    self.abstract_declarator_suffix()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+                # C.g:351:65: ( abstract_declarator_suffix )*\r
+                while True: #loop53\r
+                    alt53 = 2\r
+                    LA53_0 = self.input.LA(1)\r
+\r
+                    if (LA53_0 == 62) :\r
+                        LA53 = self.input.LA(2)\r
+                        if LA53 == 63:\r
+                            LA53_12 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 58:\r
+                            LA53_13 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 66:\r
+                            LA53_14 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 59:\r
+                            LA53_15 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 60:\r
+                            LA53_16 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == IDENTIFIER:\r
+                            LA53_17 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 29 or LA53 == 30 or LA53 == 31 or LA53 == 32 or LA53 == 33:\r
+                            LA53_19 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 34:\r
+                            LA53_20 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 35:\r
+                            LA53_21 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 36:\r
+                            LA53_22 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 37:\r
+                            LA53_23 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 38:\r
+                            LA53_24 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 39:\r
+                            LA53_25 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 40:\r
+                            LA53_26 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 41:\r
+                            LA53_27 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 42:\r
+                            LA53_28 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 45 or LA53 == 46:\r
+                            LA53_29 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 48:\r
+                            LA53_30 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 49 or LA53 == 50 or LA53 == 51 or LA53 == 52 or LA53 == 53 or LA53 == 54 or LA53 == 55 or LA53 == 56 or LA53 == 57 or LA53 == 61:\r
+                            LA53_31 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+\r
+                    elif (LA53_0 == 64) :\r
+                        LA53 = self.input.LA(2)\r
+                        if LA53 == 65:\r
+                            LA53_33 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 62:\r
+                            LA53_34 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == IDENTIFIER:\r
+                            LA53_35 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == HEX_LITERAL:\r
+                            LA53_36 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == OCTAL_LITERAL:\r
+                            LA53_37 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == DECIMAL_LITERAL:\r
+                            LA53_38 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == CHARACTER_LITERAL:\r
+                            LA53_39 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == STRING_LITERAL:\r
+                            LA53_40 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == FLOATING_POINT_LITERAL:\r
+                            LA53_41 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 72:\r
+                            LA53_42 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 73:\r
+                            LA53_43 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 66 or LA53 == 68 or LA53 == 69 or LA53 == 77 or LA53 == 78 or LA53 == 79:\r
+                            LA53_44 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 74:\r
+                            LA53_45 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+\r
+\r
+\r
+                    if alt53 == 1:\r
+                        # C.g:0:0: abstract_declarator_suffix\r
+                        self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1098)\r
+                        self.abstract_declarator_suffix()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop53\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 32, direct_abstract_declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end direct_abstract_declarator\r
+\r
+\r
+    # $ANTLR start abstract_declarator_suffix\r
+    # C.g:354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );\r
+    def abstract_declarator_suffix(self, ):\r
+\r
+        abstract_declarator_suffix_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 33):\r
+                    return\r
+\r
+                # C.g:355:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' )\r
+                alt54 = 4\r
+                LA54_0 = self.input.LA(1)\r
+\r
+                if (LA54_0 == 64) :\r
+                    LA54_1 = self.input.LA(2)\r
+\r
+                    if (LA54_1 == 65) :\r
+                        alt54 = 1\r
+                    elif ((IDENTIFIER <= LA54_1 <= FLOATING_POINT_LITERAL) or LA54_1 == 62 or LA54_1 == 66 or (68 <= LA54_1 <= 69) or (72 <= LA54_1 <= 74) or (77 <= LA54_1 <= 79)) :\r
+                        alt54 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA54_0 == 62) :\r
+                    LA54_2 = self.input.LA(2)\r
+\r
+                    if (LA54_2 == 63) :\r
+                        alt54 = 3\r
+                    elif (LA54_2 == IDENTIFIER or (29 <= LA54_2 <= 42) or (45 <= LA54_2 <= 46) or (48 <= LA54_2 <= 61) or LA54_2 == 66) :\r
+                        alt54 = 4\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 2, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt54 == 1:\r
+                    # C.g:355:4: '[' ']'\r
+                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1110)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 65, self.FOLLOW_65_in_abstract_declarator_suffix1112)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt54 == 2:\r
+                    # C.g:356:4: '[' constant_expression ']'\r
+                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1117)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1119)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 65, self.FOLLOW_65_in_abstract_declarator_suffix1121)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt54 == 3:\r
+                    # C.g:357:4: '(' ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1126)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1128)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt54 == 4:\r
+                    # C.g:358:4: '(' parameter_type_list ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1133)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1135)\r
+                    self.parameter_type_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1137)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 33, abstract_declarator_suffix_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end abstract_declarator_suffix\r
+\r
+\r
+    # $ANTLR start initializer\r
+    # C.g:361:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );\r
+    def initializer(self, ):\r
+\r
+        initializer_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 34):\r
+                    return\r
+\r
+                # C.g:363:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' )\r
+                alt56 = 2\r
+                LA56_0 = self.input.LA(1)\r
+\r
+                if ((IDENTIFIER <= LA56_0 <= FLOATING_POINT_LITERAL) or LA56_0 == 62 or LA56_0 == 66 or (68 <= LA56_0 <= 69) or (72 <= LA56_0 <= 74) or (77 <= LA56_0 <= 79)) :\r
+                    alt56 = 1\r
+                elif (LA56_0 == 43) :\r
+                    alt56 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("361:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 56, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt56 == 1:\r
+                    # C.g:363:4: assignment_expression\r
+                    self.following.append(self.FOLLOW_assignment_expression_in_initializer1150)\r
+                    self.assignment_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt56 == 2:\r
+                    # C.g:364:4: '{' initializer_list ( ',' )? '}'\r
+                    self.match(self.input, 43, self.FOLLOW_43_in_initializer1155)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_initializer_list_in_initializer1157)\r
+                    self.initializer_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:364:25: ( ',' )?\r
+                    alt55 = 2\r
+                    LA55_0 = self.input.LA(1)\r
+\r
+                    if (LA55_0 == 27) :\r
+                        alt55 = 1\r
+                    if alt55 == 1:\r
+                        # C.g:0:0: ','\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_initializer1159)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    self.match(self.input, 44, self.FOLLOW_44_in_initializer1162)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 34, initializer_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end initializer\r
+\r
+\r
+    # $ANTLR start initializer_list\r
+    # C.g:367:1: initializer_list : initializer ( ',' initializer )* ;\r
+    def initializer_list(self, ):\r
+\r
+        initializer_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 35):\r
+                    return\r
+\r
+                # C.g:368:2: ( initializer ( ',' initializer )* )\r
+                # C.g:368:4: initializer ( ',' initializer )*\r
+                self.following.append(self.FOLLOW_initializer_in_initializer_list1173)\r
+                self.initializer()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:368:16: ( ',' initializer )*\r
+                while True: #loop57\r
+                    alt57 = 2\r
+                    LA57_0 = self.input.LA(1)\r
+\r
+                    if (LA57_0 == 27) :\r
+                        LA57_1 = self.input.LA(2)\r
+\r
+                        if ((IDENTIFIER <= LA57_1 <= FLOATING_POINT_LITERAL) or LA57_1 == 43 or LA57_1 == 62 or LA57_1 == 66 or (68 <= LA57_1 <= 69) or (72 <= LA57_1 <= 74) or (77 <= LA57_1 <= 79)) :\r
+                            alt57 = 1\r
+\r
+\r
+\r
+\r
+                    if alt57 == 1:\r
+                        # C.g:368:17: ',' initializer\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1176)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_initializer_in_initializer_list1178)\r
+                        self.initializer()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop57\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 35, initializer_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end initializer_list\r
+\r
+    class argument_expression_list_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start argument_expression_list\r
+    # C.g:373:1: argument_expression_list : assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* ;\r
+    def argument_expression_list(self, ):\r
+\r
+        retval = self.argument_expression_list_return()\r
+        retval.start = self.input.LT(1)\r
+        argument_expression_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 36):\r
+                    return retval\r
+\r
+                # C.g:374:2: ( assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* )\r
+                # C.g:374:6: assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )*\r
+                self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1196)\r
+                self.assignment_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:374:28: ( 'OPTIONAL' )?\r
+                alt58 = 2\r
+                LA58_0 = self.input.LA(1)\r
+\r
+                if (LA58_0 == 53) :\r
+                    alt58 = 1\r
+                if alt58 == 1:\r
+                    # C.g:374:29: 'OPTIONAL'\r
+                    self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1199)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+\r
+                # C.g:374:42: ( ',' assignment_expression ( 'OPTIONAL' )? )*\r
+                while True: #loop60\r
+                    alt60 = 2\r
+                    LA60_0 = self.input.LA(1)\r
+\r
+                    if (LA60_0 == 27) :\r
+                        alt60 = 1\r
+\r
+\r
+                    if alt60 == 1:\r
+                        # C.g:374:43: ',' assignment_expression ( 'OPTIONAL' )?\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1204)\r
+                        if self.failed:\r
+                            return retval\r
+                        self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1206)\r
+                        self.assignment_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+                        # C.g:374:69: ( 'OPTIONAL' )?\r
+                        alt59 = 2\r
+                        LA59_0 = self.input.LA(1)\r
+\r
+                        if (LA59_0 == 53) :\r
+                            alt59 = 1\r
+                        if alt59 == 1:\r
+                            # C.g:374:70: 'OPTIONAL'\r
+                            self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1209)\r
+                            if self.failed:\r
+                                return retval\r
+\r
+\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop60\r
+\r
+\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 36, argument_expression_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end argument_expression_list\r
+\r
+\r
+    # $ANTLR start additive_expression\r
+    # C.g:377:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ;\r
+    def additive_expression(self, ):\r
+\r
+        additive_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 37):\r
+                    return\r
+\r
+                # C.g:378:2: ( ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* )\r
+                # C.g:378:4: ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )*\r
+                # C.g:378:4: ( multiplicative_expression )\r
+                # C.g:378:5: multiplicative_expression\r
+                self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1225)\r
+                self.multiplicative_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+                # C.g:378:32: ( '+' multiplicative_expression | '-' multiplicative_expression )*\r
+                while True: #loop61\r
+                    alt61 = 3\r
+                    LA61_0 = self.input.LA(1)\r
+\r
+                    if (LA61_0 == 68) :\r
+                        alt61 = 1\r
+                    elif (LA61_0 == 69) :\r
+                        alt61 = 2\r
+\r
+\r
+                    if alt61 == 1:\r
+                        # C.g:378:33: '+' multiplicative_expression\r
+                        self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1229)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1231)\r
+                        self.multiplicative_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt61 == 2:\r
+                        # C.g:378:65: '-' multiplicative_expression\r
+                        self.match(self.input, 69, self.FOLLOW_69_in_additive_expression1235)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1237)\r
+                        self.multiplicative_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop61\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 37, additive_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end additive_expression\r
+\r
+\r
+    # $ANTLR start multiplicative_expression\r
+    # C.g:381:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ;\r
+    def multiplicative_expression(self, ):\r
+\r
+        multiplicative_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 38):\r
+                    return\r
+\r
+                # C.g:382:2: ( ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* )\r
+                # C.g:382:4: ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*\r
+                # C.g:382:4: ( cast_expression )\r
+                # C.g:382:5: cast_expression\r
+                self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1251)\r
+                self.cast_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+                # C.g:382:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*\r
+                while True: #loop62\r
+                    alt62 = 4\r
+                    LA62 = self.input.LA(1)\r
+                    if LA62 == 66:\r
+                        alt62 = 1\r
+                    elif LA62 == 70:\r
+                        alt62 = 2\r
+                    elif LA62 == 71:\r
+                        alt62 = 3\r
+\r
+                    if alt62 == 1:\r
+                        # C.g:382:23: '*' cast_expression\r
+                        self.match(self.input, 66, self.FOLLOW_66_in_multiplicative_expression1255)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1257)\r
+                        self.cast_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt62 == 2:\r
+                        # C.g:382:45: '/' cast_expression\r
+                        self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1261)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1263)\r
+                        self.cast_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt62 == 3:\r
+                        # C.g:382:67: '%' cast_expression\r
+                        self.match(self.input, 71, self.FOLLOW_71_in_multiplicative_expression1267)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1269)\r
+                        self.cast_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop62\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 38, multiplicative_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end multiplicative_expression\r
+\r
+\r
+    # $ANTLR start cast_expression\r
+    # C.g:385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );\r
+    def cast_expression(self, ):\r
+\r
+        cast_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 39):\r
+                    return\r
+\r
+                # C.g:386:2: ( '(' type_name ')' cast_expression | unary_expression )\r
+                alt63 = 2\r
+                LA63_0 = self.input.LA(1)\r
+\r
+                if (LA63_0 == 62) :\r
+                    LA63 = self.input.LA(2)\r
+                    if LA63 == 34 or LA63 == 35 or LA63 == 36 or LA63 == 37 or LA63 == 38 or LA63 == 39 or LA63 == 40 or LA63 == 41 or LA63 == 42 or LA63 == 45 or LA63 == 46 or LA63 == 48 or LA63 == 49 or LA63 == 50 or LA63 == 51 or LA63 == 52 or LA63 == 53 or LA63 == 54 or LA63 == 55 or LA63 == 56 or LA63 == 57 or LA63 == 58 or LA63 == 59 or LA63 == 60 or LA63 == 61:\r
+                        alt63 = 1\r
+                    elif LA63 == IDENTIFIER:\r
+                        LA63_25 = self.input.LA(3)\r
+\r
+                        if (self.synpred109()) :\r
+                            alt63 = 1\r
+                        elif (True) :\r
+                            alt63 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 25, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA63 == HEX_LITERAL or LA63 == OCTAL_LITERAL or LA63 == DECIMAL_LITERAL or LA63 == CHARACTER_LITERAL or LA63 == STRING_LITERAL or LA63 == FLOATING_POINT_LITERAL or LA63 == 62 or LA63 == 66 or LA63 == 68 or LA63 == 69 or LA63 == 72 or LA63 == 73 or LA63 == 74 or LA63 == 77 or LA63 == 78 or LA63 == 79:\r
+                        alt63 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif ((IDENTIFIER <= LA63_0 <= FLOATING_POINT_LITERAL) or LA63_0 == 66 or (68 <= LA63_0 <= 69) or (72 <= LA63_0 <= 74) or (77 <= LA63_0 <= 79)) :\r
+                    alt63 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt63 == 1:\r
+                    # C.g:386:4: '(' type_name ')' cast_expression\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_cast_expression1282)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_type_name_in_cast_expression1284)\r
+                    self.type_name()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_cast_expression1286)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_cast_expression_in_cast_expression1288)\r
+                    self.cast_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt63 == 2:\r
+                    # C.g:387:4: unary_expression\r
+                    self.following.append(self.FOLLOW_unary_expression_in_cast_expression1293)\r
+                    self.unary_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 39, cast_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end cast_expression\r
+\r
+\r
+    # $ANTLR start unary_expression\r
+    # C.g:390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );\r
+    def unary_expression(self, ):\r
+\r
+        unary_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 40):\r
+                    return\r
+\r
+                # C.g:391:2: ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' )\r
+                alt64 = 6\r
+                LA64 = self.input.LA(1)\r
+                if LA64 == IDENTIFIER or LA64 == HEX_LITERAL or LA64 == OCTAL_LITERAL or LA64 == DECIMAL_LITERAL or LA64 == CHARACTER_LITERAL or LA64 == STRING_LITERAL or LA64 == FLOATING_POINT_LITERAL or LA64 == 62:\r
+                    alt64 = 1\r
+                elif LA64 == 72:\r
+                    alt64 = 2\r
+                elif LA64 == 73:\r
+                    alt64 = 3\r
+                elif LA64 == 66 or LA64 == 68 or LA64 == 69 or LA64 == 77 or LA64 == 78 or LA64 == 79:\r
+                    alt64 = 4\r
+                elif LA64 == 74:\r
+                    LA64_12 = self.input.LA(2)\r
+\r
+                    if (LA64_12 == 62) :\r
+                        LA64_13 = self.input.LA(3)\r
+\r
+                        if (self.synpred114()) :\r
+                            alt64 = 5\r
+                        elif (True) :\r
+                            alt64 = 6\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 13, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif ((IDENTIFIER <= LA64_12 <= FLOATING_POINT_LITERAL) or LA64_12 == 66 or (68 <= LA64_12 <= 69) or (72 <= LA64_12 <= 74) or (77 <= LA64_12 <= 79)) :\r
+                        alt64 = 5\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 12, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt64 == 1:\r
+                    # C.g:391:4: postfix_expression\r
+                    self.following.append(self.FOLLOW_postfix_expression_in_unary_expression1304)\r
+                    self.postfix_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 2:\r
+                    # C.g:392:4: '++' unary_expression\r
+                    self.match(self.input, 72, self.FOLLOW_72_in_unary_expression1309)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1311)\r
+                    self.unary_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 3:\r
+                    # C.g:393:4: '--' unary_expression\r
+                    self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1316)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1318)\r
+                    self.unary_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 4:\r
+                    # C.g:394:4: unary_operator cast_expression\r
+                    self.following.append(self.FOLLOW_unary_operator_in_unary_expression1323)\r
+                    self.unary_operator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_cast_expression_in_unary_expression1325)\r
+                    self.cast_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 5:\r
+                    # C.g:395:4: 'sizeof' unary_expression\r
+                    self.match(self.input, 74, self.FOLLOW_74_in_unary_expression1330)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1332)\r
+                    self.unary_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 6:\r
+                    # C.g:396:4: 'sizeof' '(' type_name ')'\r
+                    self.match(self.input, 74, self.FOLLOW_74_in_unary_expression1337)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_unary_expression1339)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_type_name_in_unary_expression1341)\r
+                    self.type_name()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_unary_expression1343)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 40, unary_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end unary_expression\r
+\r
+\r
+    # $ANTLR start postfix_expression\r
+    # C.g:399:1: postfix_expression : p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ;\r
+    def postfix_expression(self, ):\r
+        self.postfix_expression_stack.append(postfix_expression_scope())\r
+        postfix_expression_StartIndex = self.input.index()\r
+        a = None\r
+        b = None\r
+        x = None\r
+        y = None\r
+        z = None\r
+        p = None\r
+\r
+        c = None\r
+\r
+\r
+\r
+        self.postfix_expression_stack[-1].FuncCallText =  ''\r
+\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 41):\r
+                    return\r
+\r
+                # C.g:406:2: (p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* )\r
+                # C.g:406:6: p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )*\r
+                self.following.append(self.FOLLOW_primary_expression_in_postfix_expression1367)\r
+                p = self.primary_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                if self.backtracking == 0:\r
+                    self.postfix_expression_stack[-1].FuncCallText += self.input.toString(p.start, p.stop)\r
+\r
+                # C.g:407:9: ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )*\r
+                while True: #loop65\r
+                    alt65 = 10\r
+                    LA65 = self.input.LA(1)\r
+                    if LA65 == 66:\r
+                        LA65_1 = self.input.LA(2)\r
+\r
+                        if (LA65_1 == IDENTIFIER) :\r
+                            LA65_30 = self.input.LA(3)\r
+\r
+                            if (self.synpred120()) :\r
+                                alt65 = 6\r
+\r
+\r
+\r
+\r
+                    elif LA65 == 64:\r
+                        alt65 = 1\r
+                    elif LA65 == 62:\r
+                        LA65 = self.input.LA(2)\r
+                        if LA65 == 63:\r
+                            alt65 = 2\r
+                        elif LA65 == 29 or LA65 == 30 or LA65 == 31 or LA65 == 32 or LA65 == 33 or LA65 == 34 or LA65 == 35 or LA65 == 36 or LA65 == 37 or LA65 == 38 or LA65 == 39 or LA65 == 40 or LA65 == 41 or LA65 == 42 or LA65 == 45 or LA65 == 46 or LA65 == 48 or LA65 == 49 or LA65 == 50 or LA65 == 51 or LA65 == 52 or LA65 == 53 or LA65 == 54 or LA65 == 55 or LA65 == 56 or LA65 == 57 or LA65 == 58 or LA65 == 59 or LA65 == 60 or LA65 == 61:\r
+                            alt65 = 4\r
+                        elif LA65 == IDENTIFIER:\r
+                            LA65_55 = self.input.LA(3)\r
+\r
+                            if (self.synpred117()) :\r
+                                alt65 = 3\r
+                            elif (self.synpred118()) :\r
+                                alt65 = 4\r
+\r
+\r
+                        elif LA65 == 66:\r
+                            LA65_57 = self.input.LA(3)\r
+\r
+                            if (self.synpred117()) :\r
+                                alt65 = 3\r
+                            elif (self.synpred118()) :\r
+                                alt65 = 4\r
+\r
+\r
+                        elif LA65 == HEX_LITERAL or LA65 == OCTAL_LITERAL or LA65 == DECIMAL_LITERAL or LA65 == CHARACTER_LITERAL or LA65 == STRING_LITERAL or LA65 == FLOATING_POINT_LITERAL or LA65 == 62 or LA65 == 68 or LA65 == 69 or LA65 == 72 or LA65 == 73 or LA65 == 74 or LA65 == 77 or LA65 == 78 or LA65 == 79:\r
+                            alt65 = 3\r
+\r
+                    elif LA65 == 75:\r
+                        alt65 = 5\r
+                    elif LA65 == 76:\r
+                        alt65 = 7\r
+                    elif LA65 == 72:\r
+                        alt65 = 8\r
+                    elif LA65 == 73:\r
+                        alt65 = 9\r
+\r
+                    if alt65 == 1:\r
+                        # C.g:407:13: '[' expression ']'\r
+                        self.match(self.input, 64, self.FOLLOW_64_in_postfix_expression1383)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_expression_in_postfix_expression1385)\r
+                        self.expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+                        self.match(self.input, 65, self.FOLLOW_65_in_postfix_expression1387)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt65 == 2:\r
+                        # C.g:408:13: '(' a= ')'\r
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1401)\r
+                        if self.failed:\r
+                            return\r
+                        a = self.input.LT(1)\r
+                        self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1405)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, a.line, a.charPositionInLine, self.postfix_expression_stack[-1].FuncCallText, '')\r
+\r
+\r
+\r
+                    elif alt65 == 3:\r
+                        # C.g:409:13: '(' c= argument_expression_list b= ')'\r
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1420)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_argument_expression_list_in_postfix_expression1424)\r
+                        c = self.argument_expression_list()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+                        b = self.input.LT(1)\r
+                        self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1428)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, b.line, b.charPositionInLine, self.postfix_expression_stack[-1].FuncCallText, self.input.toString(c.start, c.stop))\r
+\r
+\r
+\r
+                    elif alt65 == 4:\r
+                        # C.g:410:13: '(' macro_parameter_list ')'\r
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1444)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_macro_parameter_list_in_postfix_expression1446)\r
+                        self.macro_parameter_list()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+                        self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1448)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt65 == 5:\r
+                        # C.g:411:13: '.' x= IDENTIFIER\r
+                        self.match(self.input, 75, self.FOLLOW_75_in_postfix_expression1462)\r
+                        if self.failed:\r
+                            return\r
+                        x = self.input.LT(1)\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1466)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.postfix_expression_stack[-1].FuncCallText += '.' + x.text\r
+\r
+\r
+\r
+                    elif alt65 == 6:\r
+                        # C.g:412:13: '*' y= IDENTIFIER\r
+                        self.match(self.input, 66, self.FOLLOW_66_in_postfix_expression1482)\r
+                        if self.failed:\r
+                            return\r
+                        y = self.input.LT(1)\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1486)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.postfix_expression_stack[-1].FuncCallText = y.text\r
+\r
+\r
+\r
+                    elif alt65 == 7:\r
+                        # C.g:413:13: '->' z= IDENTIFIER\r
+                        self.match(self.input, 76, self.FOLLOW_76_in_postfix_expression1502)\r
+                        if self.failed:\r
+                            return\r
+                        z = self.input.LT(1)\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1506)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.postfix_expression_stack[-1].FuncCallText += '->' + z.text\r
+\r
+\r
+\r
+                    elif alt65 == 8:\r
+                        # C.g:414:13: '++'\r
+                        self.match(self.input, 72, self.FOLLOW_72_in_postfix_expression1522)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt65 == 9:\r
+                        # C.g:415:13: '--'\r
+                        self.match(self.input, 73, self.FOLLOW_73_in_postfix_expression1536)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop65\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 41, postfix_expression_StartIndex)\r
+\r
+            self.postfix_expression_stack.pop()\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end postfix_expression\r
+\r
+\r
+    # $ANTLR start macro_parameter_list\r
+    # C.g:419:1: macro_parameter_list : parameter_declaration ( ',' parameter_declaration )* ;\r
+    def macro_parameter_list(self, ):\r
+\r
+        macro_parameter_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 42):\r
+                    return\r
+\r
+                # C.g:420:2: ( parameter_declaration ( ',' parameter_declaration )* )\r
+                # C.g:420:4: parameter_declaration ( ',' parameter_declaration )*\r
+                self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1559)\r
+                self.parameter_declaration()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:420:26: ( ',' parameter_declaration )*\r
+                while True: #loop66\r
+                    alt66 = 2\r
+                    LA66_0 = self.input.LA(1)\r
+\r
+                    if (LA66_0 == 27) :\r
+                        alt66 = 1\r
+\r
+\r
+                    if alt66 == 1:\r
+                        # C.g:420:27: ',' parameter_declaration\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_macro_parameter_list1562)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1564)\r
+                        self.parameter_declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop66\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 42, macro_parameter_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end macro_parameter_list\r
+\r
+\r
+    # $ANTLR start unary_operator\r
+    # C.g:423:1: unary_operator : ( '&' | '*' | '+' | '-' | '~' | '!' );\r
+    def unary_operator(self, ):\r
+\r
+        unary_operator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 43):\r
+                    return\r
+\r
+                # C.g:424:2: ( '&' | '*' | '+' | '-' | '~' | '!' )\r
+                # C.g:\r
+                if self.input.LA(1) == 66 or (68 <= self.input.LA(1) <= 69) or (77 <= self.input.LA(1) <= 79):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_unary_operator0\r
+                        )\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 43, unary_operator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end unary_operator\r
+\r
+    class primary_expression_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start primary_expression\r
+    # C.g:432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );\r
+    def primary_expression(self, ):\r
+\r
+        retval = self.primary_expression_return()\r
+        retval.start = self.input.LT(1)\r
+        primary_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 44):\r
+                    return retval\r
+\r
+                # C.g:433:2: ( IDENTIFIER | constant | '(' expression ')' )\r
+                alt67 = 3\r
+                LA67 = self.input.LA(1)\r
+                if LA67 == IDENTIFIER:\r
+                    LA67_1 = self.input.LA(2)\r
+\r
+                    if (LA67_1 == EOF or LA67_1 == 25 or (27 <= LA67_1 <= 28) or LA67_1 == 44 or LA67_1 == 47 or LA67_1 == 53 or (62 <= LA67_1 <= 66) or (68 <= LA67_1 <= 73) or (75 <= LA67_1 <= 77) or (80 <= LA67_1 <= 102)) :\r
+                        alt67 = 1\r
+                    elif (LA67_1 == IDENTIFIER or LA67_1 == STRING_LITERAL) :\r
+                        alt67 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
+\r
+                        nvae = NoViableAltException("432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA67 == HEX_LITERAL or LA67 == OCTAL_LITERAL or LA67 == DECIMAL_LITERAL or LA67 == CHARACTER_LITERAL or LA67 == STRING_LITERAL or LA67 == FLOATING_POINT_LITERAL:\r
+                    alt67 = 2\r
+                elif LA67 == 62:\r
+                    alt67 = 3\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
+\r
+                    nvae = NoViableAltException("432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt67 == 1:\r
+                    # C.g:433:4: IDENTIFIER\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_primary_expression1613)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt67 == 2:\r
+                    # C.g:434:4: constant\r
+                    self.following.append(self.FOLLOW_constant_in_primary_expression1618)\r
+                    self.constant()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt67 == 3:\r
+                    # C.g:435:4: '(' expression ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_primary_expression1623)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.following.append(self.FOLLOW_expression_in_primary_expression1625)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_primary_expression1627)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 44, primary_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end primary_expression\r
+\r
+\r
+    # $ANTLR start constant\r
+    # C.g:438:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL );\r
+    def constant(self, ):\r
+\r
+        constant_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 45):\r
+                    return\r
+\r
+                # C.g:439:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL )\r
+                alt72 = 6\r
+                LA72 = self.input.LA(1)\r
+                if LA72 == HEX_LITERAL:\r
+                    alt72 = 1\r
+                elif LA72 == OCTAL_LITERAL:\r
+                    alt72 = 2\r
+                elif LA72 == DECIMAL_LITERAL:\r
+                    alt72 = 3\r
+                elif LA72 == CHARACTER_LITERAL:\r
+                    alt72 = 4\r
+                elif LA72 == IDENTIFIER or LA72 == STRING_LITERAL:\r
+                    alt72 = 5\r
+                elif LA72 == FLOATING_POINT_LITERAL:\r
+                    alt72 = 6\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("438:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL );", 72, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt72 == 1:\r
+                    # C.g:439:9: HEX_LITERAL\r
+                    self.match(self.input, HEX_LITERAL, self.FOLLOW_HEX_LITERAL_in_constant1643)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt72 == 2:\r
+                    # C.g:440:9: OCTAL_LITERAL\r
+                    self.match(self.input, OCTAL_LITERAL, self.FOLLOW_OCTAL_LITERAL_in_constant1653)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt72 == 3:\r
+                    # C.g:441:9: DECIMAL_LITERAL\r
+                    self.match(self.input, DECIMAL_LITERAL, self.FOLLOW_DECIMAL_LITERAL_in_constant1663)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt72 == 4:\r
+                    # C.g:442:7: CHARACTER_LITERAL\r
+                    self.match(self.input, CHARACTER_LITERAL, self.FOLLOW_CHARACTER_LITERAL_in_constant1671)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt72 == 5:\r
+                    # C.g:443:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )*\r
+                    # C.g:443:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+\r
+                    cnt70 = 0\r
+                    while True: #loop70\r
+                        alt70 = 2\r
+                        LA70_0 = self.input.LA(1)\r
+\r
+                        if (LA70_0 == IDENTIFIER) :\r
+                            LA70_1 = self.input.LA(2)\r
+\r
+                            if (LA70_1 == STRING_LITERAL) :\r
+                                alt70 = 1\r
+                            elif (LA70_1 == IDENTIFIER) :\r
+                                LA70_33 = self.input.LA(3)\r
+\r
+                                if (self.synpred138()) :\r
+                                    alt70 = 1\r
+\r
+\r
+\r
+\r
+                        elif (LA70_0 == STRING_LITERAL) :\r
+                            alt70 = 1\r
+\r
+\r
+                        if alt70 == 1:\r
+                            # C.g:443:8: ( IDENTIFIER )* ( STRING_LITERAL )+\r
+                            # C.g:443:8: ( IDENTIFIER )*\r
+                            while True: #loop68\r
+                                alt68 = 2\r
+                                LA68_0 = self.input.LA(1)\r
+\r
+                                if (LA68_0 == IDENTIFIER) :\r
+                                    alt68 = 1\r
+\r
+\r
+                                if alt68 == 1:\r
+                                    # C.g:0:0: IDENTIFIER\r
+                                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1680)\r
+                                    if self.failed:\r
+                                        return\r
+\r
+\r
+                                else:\r
+                                    break #loop68\r
+\r
+\r
+                            # C.g:443:20: ( STRING_LITERAL )+\r
+                            cnt69 = 0\r
+                            while True: #loop69\r
+                                alt69 = 2\r
+                                LA69_0 = self.input.LA(1)\r
+\r
+                                if (LA69_0 == STRING_LITERAL) :\r
+                                    LA69_31 = self.input.LA(2)\r
+\r
+                                    if (self.synpred137()) :\r
+                                        alt69 = 1\r
+\r
+\r
+\r
+\r
+                                if alt69 == 1:\r
+                                    # C.g:0:0: STRING_LITERAL\r
+                                    self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_constant1683)\r
+                                    if self.failed:\r
+                                        return\r
+\r
+\r
+                                else:\r
+                                    if cnt69 >= 1:\r
+                                        break #loop69\r
+\r
+                                    if self.backtracking > 0:\r
+                                        self.failed = True\r
+                                        return\r
+\r
+                                    eee = EarlyExitException(69, self.input)\r
+                                    raise eee\r
+\r
+                                cnt69 += 1\r
+\r
+\r
+\r
+\r
+                        else:\r
+                            if cnt70 >= 1:\r
+                                break #loop70\r
+\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            eee = EarlyExitException(70, self.input)\r
+                            raise eee\r
+\r
+                        cnt70 += 1\r
+\r
+\r
+                    # C.g:443:38: ( IDENTIFIER )*\r
+                    while True: #loop71\r
+                        alt71 = 2\r
+                        LA71_0 = self.input.LA(1)\r
+\r
+                        if (LA71_0 == IDENTIFIER) :\r
+                            alt71 = 1\r
+\r
+\r
+                        if alt71 == 1:\r
+                            # C.g:0:0: IDENTIFIER\r
+                            self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1688)\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            break #loop71\r
+\r
+\r
+\r
+\r
+                elif alt72 == 6:\r
+                    # C.g:444:9: FLOATING_POINT_LITERAL\r
+                    self.match(self.input, FLOATING_POINT_LITERAL, self.FOLLOW_FLOATING_POINT_LITERAL_in_constant1699)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 45, constant_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end constant\r
+\r
+    class expression_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start expression\r
+    # C.g:449:1: expression : assignment_expression ( ',' assignment_expression )* ;\r
+    def expression(self, ):\r
+\r
+        retval = self.expression_return()\r
+        retval.start = self.input.LT(1)\r
+        expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 46):\r
+                    return retval\r
+\r
+                # C.g:450:2: ( assignment_expression ( ',' assignment_expression )* )\r
+                # C.g:450:4: assignment_expression ( ',' assignment_expression )*\r
+                self.following.append(self.FOLLOW_assignment_expression_in_expression1715)\r
+                self.assignment_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:450:26: ( ',' assignment_expression )*\r
+                while True: #loop73\r
+                    alt73 = 2\r
+                    LA73_0 = self.input.LA(1)\r
+\r
+                    if (LA73_0 == 27) :\r
+                        alt73 = 1\r
+\r
+\r
+                    if alt73 == 1:\r
+                        # C.g:450:27: ',' assignment_expression\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_expression1718)\r
+                        if self.failed:\r
+                            return retval\r
+                        self.following.append(self.FOLLOW_assignment_expression_in_expression1720)\r
+                        self.assignment_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    else:\r
+                        break #loop73\r
+\r
+\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 46, expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end expression\r
+\r
+\r
+    # $ANTLR start constant_expression\r
+    # C.g:453:1: constant_expression : conditional_expression ;\r
+    def constant_expression(self, ):\r
+\r
+        constant_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 47):\r
+                    return\r
+\r
+                # C.g:454:2: ( conditional_expression )\r
+                # C.g:454:4: conditional_expression\r
+                self.following.append(self.FOLLOW_conditional_expression_in_constant_expression1733)\r
+                self.conditional_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 47, constant_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end constant_expression\r
+\r
+\r
+    # $ANTLR start assignment_expression\r
+    # C.g:457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );\r
+    def assignment_expression(self, ):\r
+\r
+        assignment_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 48):\r
+                    return\r
+\r
+                # C.g:458:2: ( lvalue assignment_operator assignment_expression | conditional_expression )\r
+                alt74 = 2\r
+                LA74 = self.input.LA(1)\r
+                if LA74 == IDENTIFIER:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_13 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 13, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_14 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 14, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_15 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 15, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_16 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 16, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_17 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 17, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_18 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 18, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_19 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 19, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_21 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 21, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == IDENTIFIER:\r
+                        LA74_22 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 22, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == HEX_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_44 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 44, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_45 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 45, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_46 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 46, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_47 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 47, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_48 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 48, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_49 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 49, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_50 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 50, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 2, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == OCTAL_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_73 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 73, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_74 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 74, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_75 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 75, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_76 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 76, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_77 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 77, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_78 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 78, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_79 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 79, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 3, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == DECIMAL_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_102 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 102, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_103 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 103, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_104 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 104, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_105 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 105, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_106 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 106, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_107 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 107, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_108 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 108, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 4, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == CHARACTER_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_131 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 131, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_132 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 132, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_133 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 133, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_134 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 134, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_135 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 135, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_136 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 136, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_137 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 137, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 5, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == STRING_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == IDENTIFIER:\r
+                        LA74_160 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 160, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 64:\r
+                        LA74_161 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 161, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_162 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 162, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_163 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 163, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_164 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 164, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_165 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 165, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_166 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 166, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_167 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 167, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_189 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 189, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 6, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == FLOATING_POINT_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_191 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 191, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_192 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 192, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_193 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 193, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_194 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 194, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_195 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 195, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_196 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 196, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_197 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 197, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 7, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 62:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == IDENTIFIER:\r
+                        LA74_220 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 220, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_221 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 221, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_222 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 222, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_223 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 223, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_224 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 224, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_225 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 225, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_226 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 226, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_227 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 227, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_228 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 228, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_229 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 229, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_230 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 230, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_231 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 231, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 34 or LA74 == 35 or LA74 == 36 or LA74 == 37 or LA74 == 38 or LA74 == 39 or LA74 == 40 or LA74 == 41 or LA74 == 42 or LA74 == 45 or LA74 == 46 or LA74 == 48 or LA74 == 49 or LA74 == 50 or LA74 == 51 or LA74 == 52 or LA74 == 53 or LA74 == 54 or LA74 == 55 or LA74 == 56 or LA74 == 57 or LA74 == 58 or LA74 == 59 or LA74 == 60 or LA74 == 61:\r
+                        alt74 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 8, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 72:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == IDENTIFIER:\r
+                        LA74_244 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 244, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_245 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 245, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_246 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 246, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_247 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 247, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_248 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 248, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_249 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 249, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_250 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 250, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_251 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 251, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_252 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 252, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_253 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 253, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_254 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 254, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_255 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 255, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 9, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 73:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == IDENTIFIER:\r
+                        LA74_256 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 256, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_257 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 257, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_258 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 258, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_259 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 259, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_260 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 260, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_261 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 261, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_262 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 262, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_263 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 263, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_264 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 264, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_265 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 265, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_266 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 266, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_267 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 267, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 10, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 62:\r
+                        LA74_268 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 268, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == IDENTIFIER:\r
+                        LA74_269 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 269, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_270 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 270, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_271 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 271, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_272 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 272, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_273 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 273, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_274 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 274, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_275 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 275, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_276 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 276, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_277 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 277, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_278 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 278, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_279 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 279, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 11, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 74:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 62:\r
+                        LA74_280 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 280, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == IDENTIFIER:\r
+                        LA74_281 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 281, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_282 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 282, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_283 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 283, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_284 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 284, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_285 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 285, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_286 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 286, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_287 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 287, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_288 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 288, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_289 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 289, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_290 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 290, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_291 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 291, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 12, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt74 == 1:\r
+                    # C.g:458:4: lvalue assignment_operator assignment_expression\r
+                    self.following.append(self.FOLLOW_lvalue_in_assignment_expression1744)\r
+                    self.lvalue()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_assignment_operator_in_assignment_expression1746)\r
+                    self.assignment_operator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_assignment_expression_in_assignment_expression1748)\r
+                    self.assignment_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt74 == 2:\r
+                    # C.g:459:4: conditional_expression\r
+                    self.following.append(self.FOLLOW_conditional_expression_in_assignment_expression1753)\r
+                    self.conditional_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 48, assignment_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end assignment_expression\r
+\r
+\r
+    # $ANTLR start lvalue\r
+    # C.g:462:1: lvalue : unary_expression ;\r
+    def lvalue(self, ):\r
+\r
+        lvalue_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 49):\r
+                    return\r
+\r
+                # C.g:463:2: ( unary_expression )\r
+                # C.g:463:4: unary_expression\r
+                self.following.append(self.FOLLOW_unary_expression_in_lvalue1765)\r
+                self.unary_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 49, lvalue_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end lvalue\r
+\r
+\r
+    # $ANTLR start assignment_operator\r
+    # C.g:466:1: assignment_operator : ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' );\r
+    def assignment_operator(self, ):\r
+\r
+        assignment_operator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 50):\r
+                    return\r
+\r
+                # C.g:467:2: ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' )\r
+                # C.g:\r
+                if self.input.LA(1) == 28 or (80 <= self.input.LA(1) <= 89):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_assignment_operator0\r
+                        )\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 50, assignment_operator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end assignment_operator\r
+\r
+\r
+    # $ANTLR start conditional_expression\r
+    # C.g:480:1: conditional_expression : e= logical_or_expression ( '?' expression ':' conditional_expression )? ;\r
+    def conditional_expression(self, ):\r
+\r
+        conditional_expression_StartIndex = self.input.index()\r
+        e = None\r
+\r
+\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 51):\r
+                    return\r
+\r
+                # C.g:481:2: (e= logical_or_expression ( '?' expression ':' conditional_expression )? )\r
+                # C.g:481:4: e= logical_or_expression ( '?' expression ':' conditional_expression )?\r
+                self.following.append(self.FOLLOW_logical_or_expression_in_conditional_expression1839)\r
+                e = self.logical_or_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:481:28: ( '?' expression ':' conditional_expression )?\r
+                alt75 = 2\r
+                LA75_0 = self.input.LA(1)\r
+\r
+                if (LA75_0 == 90) :\r
+                    alt75 = 1\r
+                if alt75 == 1:\r
+                    # C.g:481:29: '?' expression ':' conditional_expression\r
+                    self.match(self.input, 90, self.FOLLOW_90_in_conditional_expression1842)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_conditional_expression1844)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_conditional_expression1846)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_conditional_expression_in_conditional_expression1848)\r
+                    self.conditional_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 51, conditional_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end conditional_expression\r
+\r
+    class logical_or_expression_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start logical_or_expression\r
+    # C.g:484:1: logical_or_expression : logical_and_expression ( '||' logical_and_expression )* ;\r
+    def logical_or_expression(self, ):\r
+\r
+        retval = self.logical_or_expression_return()\r
+        retval.start = self.input.LT(1)\r
+        logical_or_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 52):\r
+                    return retval\r
+\r
+                # C.g:485:2: ( logical_and_expression ( '||' logical_and_expression )* )\r
+                # C.g:485:4: logical_and_expression ( '||' logical_and_expression )*\r
+                self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1863)\r
+                self.logical_and_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:485:27: ( '||' logical_and_expression )*\r
+                while True: #loop76\r
+                    alt76 = 2\r
+                    LA76_0 = self.input.LA(1)\r
+\r
+                    if (LA76_0 == 91) :\r
+                        alt76 = 1\r
+\r
+\r
+                    if alt76 == 1:\r
+                        # C.g:485:28: '||' logical_and_expression\r
+                        self.match(self.input, 91, self.FOLLOW_91_in_logical_or_expression1866)\r
+                        if self.failed:\r
+                            return retval\r
+                        self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1868)\r
+                        self.logical_and_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    else:\r
+                        break #loop76\r
+\r
+\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 52, logical_or_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end logical_or_expression\r
+\r
+\r
+    # $ANTLR start logical_and_expression\r
+    # C.g:488:1: logical_and_expression : inclusive_or_expression ( '&&' inclusive_or_expression )* ;\r
+    def logical_and_expression(self, ):\r
+\r
+        logical_and_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 53):\r
+                    return\r
+\r
+                # C.g:489:2: ( inclusive_or_expression ( '&&' inclusive_or_expression )* )\r
+                # C.g:489:4: inclusive_or_expression ( '&&' inclusive_or_expression )*\r
+                self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1881)\r
+                self.inclusive_or_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:489:28: ( '&&' inclusive_or_expression )*\r
+                while True: #loop77\r
+                    alt77 = 2\r
+                    LA77_0 = self.input.LA(1)\r
+\r
+                    if (LA77_0 == 92) :\r
+                        alt77 = 1\r
+\r
+\r
+                    if alt77 == 1:\r
+                        # C.g:489:29: '&&' inclusive_or_expression\r
+                        self.match(self.input, 92, self.FOLLOW_92_in_logical_and_expression1884)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1886)\r
+                        self.inclusive_or_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop77\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 53, logical_and_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end logical_and_expression\r
+\r
+\r
+    # $ANTLR start inclusive_or_expression\r
+    # C.g:492:1: inclusive_or_expression : exclusive_or_expression ( '|' exclusive_or_expression )* ;\r
+    def inclusive_or_expression(self, ):\r
+\r
+        inclusive_or_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 54):\r
+                    return\r
+\r
+                # C.g:493:2: ( exclusive_or_expression ( '|' exclusive_or_expression )* )\r
+                # C.g:493:4: exclusive_or_expression ( '|' exclusive_or_expression )*\r
+                self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1899)\r
+                self.exclusive_or_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:493:28: ( '|' exclusive_or_expression )*\r
+                while True: #loop78\r
+                    alt78 = 2\r
+                    LA78_0 = self.input.LA(1)\r
+\r
+                    if (LA78_0 == 93) :\r
+                        alt78 = 1\r
+\r
+\r
+                    if alt78 == 1:\r
+                        # C.g:493:29: '|' exclusive_or_expression\r
+                        self.match(self.input, 93, self.FOLLOW_93_in_inclusive_or_expression1902)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1904)\r
+                        self.exclusive_or_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop78\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 54, inclusive_or_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end inclusive_or_expression\r
+\r
+\r
+    # $ANTLR start exclusive_or_expression\r
+    # C.g:496:1: exclusive_or_expression : and_expression ( '^' and_expression )* ;\r
+    def exclusive_or_expression(self, ):\r
+\r
+        exclusive_or_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 55):\r
+                    return\r
+\r
+                # C.g:497:2: ( and_expression ( '^' and_expression )* )\r
+                # C.g:497:4: and_expression ( '^' and_expression )*\r
+                self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1917)\r
+                self.and_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:497:19: ( '^' and_expression )*\r
+                while True: #loop79\r
+                    alt79 = 2\r
+                    LA79_0 = self.input.LA(1)\r
+\r
+                    if (LA79_0 == 94) :\r
+                        alt79 = 1\r
+\r
+\r
+                    if alt79 == 1:\r
+                        # C.g:497:20: '^' and_expression\r
+                        self.match(self.input, 94, self.FOLLOW_94_in_exclusive_or_expression1920)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1922)\r
+                        self.and_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop79\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 55, exclusive_or_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end exclusive_or_expression\r
+\r
+\r
+    # $ANTLR start and_expression\r
+    # C.g:500:1: and_expression : equality_expression ( '&' equality_expression )* ;\r
+    def and_expression(self, ):\r
+\r
+        and_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 56):\r
+                    return\r
+\r
+                # C.g:501:2: ( equality_expression ( '&' equality_expression )* )\r
+                # C.g:501:4: equality_expression ( '&' equality_expression )*\r
+                self.following.append(self.FOLLOW_equality_expression_in_and_expression1935)\r
+                self.equality_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:501:24: ( '&' equality_expression )*\r
+                while True: #loop80\r
+                    alt80 = 2\r
+                    LA80_0 = self.input.LA(1)\r
+\r
+                    if (LA80_0 == 77) :\r
+                        alt80 = 1\r
+\r
+\r
+                    if alt80 == 1:\r
+                        # C.g:501:25: '&' equality_expression\r
+                        self.match(self.input, 77, self.FOLLOW_77_in_and_expression1938)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_equality_expression_in_and_expression1940)\r
+                        self.equality_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop80\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 56, and_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end and_expression\r
+\r
+\r
+    # $ANTLR start equality_expression\r
+    # C.g:503:1: equality_expression : relational_expression ( ( '==' | '!=' ) relational_expression )* ;\r
+    def equality_expression(self, ):\r
+\r
+        equality_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 57):\r
+                    return\r
+\r
+                # C.g:504:2: ( relational_expression ( ( '==' | '!=' ) relational_expression )* )\r
+                # C.g:504:4: relational_expression ( ( '==' | '!=' ) relational_expression )*\r
+                self.following.append(self.FOLLOW_relational_expression_in_equality_expression1952)\r
+                self.relational_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:504:26: ( ( '==' | '!=' ) relational_expression )*\r
+                while True: #loop81\r
+                    alt81 = 2\r
+                    LA81_0 = self.input.LA(1)\r
+\r
+                    if ((95 <= LA81_0 <= 96)) :\r
+                        alt81 = 1\r
+\r
+\r
+                    if alt81 == 1:\r
+                        # C.g:504:27: ( '==' | '!=' ) relational_expression\r
+                        if (95 <= self.input.LA(1) <= 96):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_equality_expression1955\r
+                                )\r
+                            raise mse\r
+\r
+\r
+                        self.following.append(self.FOLLOW_relational_expression_in_equality_expression1961)\r
+                        self.relational_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop81\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 57, equality_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end equality_expression\r
+\r
+\r
+    # $ANTLR start relational_expression\r
+    # C.g:507:1: relational_expression : shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ;\r
+    def relational_expression(self, ):\r
+\r
+        relational_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 58):\r
+                    return\r
+\r
+                # C.g:508:2: ( shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* )\r
+                # C.g:508:4: shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )*\r
+                self.following.append(self.FOLLOW_shift_expression_in_relational_expression1975)\r
+                self.shift_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:508:21: ( ( '<' | '>' | '<=' | '>=' ) shift_expression )*\r
+                while True: #loop82\r
+                    alt82 = 2\r
+                    LA82_0 = self.input.LA(1)\r
+\r
+                    if ((97 <= LA82_0 <= 100)) :\r
+                        alt82 = 1\r
+\r
+\r
+                    if alt82 == 1:\r
+                        # C.g:508:22: ( '<' | '>' | '<=' | '>=' ) shift_expression\r
+                        if (97 <= self.input.LA(1) <= 100):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_relational_expression1978\r
+                                )\r
+                            raise mse\r
+\r
+\r
+                        self.following.append(self.FOLLOW_shift_expression_in_relational_expression1988)\r
+                        self.shift_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop82\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 58, relational_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end relational_expression\r
+\r
+\r
+    # $ANTLR start shift_expression\r
+    # C.g:511:1: shift_expression : additive_expression ( ( '<<' | '>>' ) additive_expression )* ;\r
+    def shift_expression(self, ):\r
+\r
+        shift_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 59):\r
+                    return\r
+\r
+                # C.g:512:2: ( additive_expression ( ( '<<' | '>>' ) additive_expression )* )\r
+                # C.g:512:4: additive_expression ( ( '<<' | '>>' ) additive_expression )*\r
+                self.following.append(self.FOLLOW_additive_expression_in_shift_expression2001)\r
+                self.additive_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:512:24: ( ( '<<' | '>>' ) additive_expression )*\r
+                while True: #loop83\r
+                    alt83 = 2\r
+                    LA83_0 = self.input.LA(1)\r
+\r
+                    if ((101 <= LA83_0 <= 102)) :\r
+                        alt83 = 1\r
+\r
+\r
+                    if alt83 == 1:\r
+                        # C.g:512:25: ( '<<' | '>>' ) additive_expression\r
+                        if (101 <= self.input.LA(1) <= 102):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_shift_expression2004\r
+                                )\r
+                            raise mse\r
+\r
+\r
+                        self.following.append(self.FOLLOW_additive_expression_in_shift_expression2010)\r
+                        self.additive_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop83\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 59, shift_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end shift_expression\r
+\r
+\r
+    # $ANTLR start statement\r
+    # C.g:517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );\r
+    def statement(self, ):\r
+\r
+        statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 60):\r
+                    return\r
+\r
+                # C.g:518:2: ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration )\r
+                alt84 = 11\r
+                LA84 = self.input.LA(1)\r
+                if LA84 == IDENTIFIER:\r
+                    LA84 = self.input.LA(2)\r
+                    if LA84 == 62:\r
+                        LA84_43 = self.input.LA(3)\r
+\r
+                        if (self.synpred169()) :\r
+                            alt84 = 3\r
+                        elif (self.synpred173()) :\r
+                            alt84 = 7\r
+                        elif (self.synpred174()) :\r
+                            alt84 = 8\r
+                        elif (True) :\r
+                            alt84 = 11\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 43, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA84 == 47:\r
+                        alt84 = 1\r
+                    elif LA84 == STRING_LITERAL or LA84 == 27 or LA84 == 28 or LA84 == 64 or LA84 == 68 or LA84 == 69 or LA84 == 70 or LA84 == 71 or LA84 == 72 or LA84 == 73 or LA84 == 75 or LA84 == 76 or LA84 == 77 or LA84 == 80 or LA84 == 81 or LA84 == 82 or LA84 == 83 or LA84 == 84 or LA84 == 85 or LA84 == 86 or LA84 == 87 or LA84 == 88 or LA84 == 89 or LA84 == 90 or LA84 == 91 or LA84 == 92 or LA84 == 93 or LA84 == 94 or LA84 == 95 or LA84 == 96 or LA84 == 97 or LA84 == 98 or LA84 == 99 or LA84 == 100 or LA84 == 101 or LA84 == 102:\r
+                        alt84 = 3\r
+                    elif LA84 == 66:\r
+                        LA84_47 = self.input.LA(3)\r
+\r
+                        if (self.synpred169()) :\r
+                            alt84 = 3\r
+                        elif (True) :\r
+                            alt84 = 11\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 47, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA84 == IDENTIFIER:\r
+                        LA84_53 = self.input.LA(3)\r
+\r
+                        if (self.synpred169()) :\r
+                            alt84 = 3\r
+                        elif (True) :\r
+                            alt84 = 11\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 53, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA84 == 25:\r
+                        LA84_68 = self.input.LA(3)\r
+\r
+                        if (self.synpred169()) :\r
+                            alt84 = 3\r
+                        elif (True) :\r
+                            alt84 = 11\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 68, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60 or LA84 == 61:\r
+                        alt84 = 11\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA84 == 106 or LA84 == 107:\r
+                    alt84 = 1\r
+                elif LA84 == 43:\r
+                    alt84 = 2\r
+                elif LA84 == HEX_LITERAL or LA84 == OCTAL_LITERAL or LA84 == DECIMAL_LITERAL or LA84 == CHARACTER_LITERAL or LA84 == STRING_LITERAL or LA84 == FLOATING_POINT_LITERAL or LA84 == 25 or LA84 == 62 or LA84 == 66 or LA84 == 68 or LA84 == 69 or LA84 == 72 or LA84 == 73 or LA84 == 74 or LA84 == 77 or LA84 == 78 or LA84 == 79:\r
+                    alt84 = 3\r
+                elif LA84 == 108 or LA84 == 110:\r
+                    alt84 = 4\r
+                elif LA84 == 111 or LA84 == 112 or LA84 == 113:\r
+                    alt84 = 5\r
+                elif LA84 == 114 or LA84 == 115 or LA84 == 116 or LA84 == 117:\r
+                    alt84 = 6\r
+                elif LA84 == 103:\r
+                    alt84 = 8\r
+                elif LA84 == 104:\r
+                    alt84 = 9\r
+                elif LA84 == 105:\r
+                    alt84 = 10\r
+                elif LA84 == 26 or LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60 or LA84 == 61:\r
+                    alt84 = 11\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt84 == 1:\r
+                    # C.g:518:4: labeled_statement\r
+                    self.following.append(self.FOLLOW_labeled_statement_in_statement2025)\r
+                    self.labeled_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 2:\r
+                    # C.g:519:4: compound_statement\r
+                    self.following.append(self.FOLLOW_compound_statement_in_statement2030)\r
+                    self.compound_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 3:\r
+                    # C.g:520:4: expression_statement\r
+                    self.following.append(self.FOLLOW_expression_statement_in_statement2035)\r
+                    self.expression_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 4:\r
+                    # C.g:521:4: selection_statement\r
+                    self.following.append(self.FOLLOW_selection_statement_in_statement2040)\r
+                    self.selection_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 5:\r
+                    # C.g:522:4: iteration_statement\r
+                    self.following.append(self.FOLLOW_iteration_statement_in_statement2045)\r
+                    self.iteration_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 6:\r
+                    # C.g:523:4: jump_statement\r
+                    self.following.append(self.FOLLOW_jump_statement_in_statement2050)\r
+                    self.jump_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 7:\r
+                    # C.g:524:4: macro_statement\r
+                    self.following.append(self.FOLLOW_macro_statement_in_statement2055)\r
+                    self.macro_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 8:\r
+                    # C.g:525:4: asm2_statement\r
+                    self.following.append(self.FOLLOW_asm2_statement_in_statement2060)\r
+                    self.asm2_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 9:\r
+                    # C.g:526:4: asm1_statement\r
+                    self.following.append(self.FOLLOW_asm1_statement_in_statement2065)\r
+                    self.asm1_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 10:\r
+                    # C.g:527:4: asm_statement\r
+                    self.following.append(self.FOLLOW_asm_statement_in_statement2070)\r
+                    self.asm_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 11:\r
+                    # C.g:528:4: declaration\r
+                    self.following.append(self.FOLLOW_declaration_in_statement2075)\r
+                    self.declaration()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 60, statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end statement\r
+\r
+\r
+    # $ANTLR start asm2_statement\r
+    # C.g:531:1: asm2_statement : ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' ;\r
+    def asm2_statement(self, ):\r
+\r
+        asm2_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 61):\r
+                    return\r
+\r
+                # C.g:532:2: ( ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' )\r
+                # C.g:532:4: ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';'\r
+                # C.g:532:4: ( '__asm__' )?\r
+                alt85 = 2\r
+                LA85_0 = self.input.LA(1)\r
+\r
+                if (LA85_0 == 103) :\r
+                    alt85 = 1\r
+                if alt85 == 1:\r
+                    # C.g:0:0: '__asm__'\r
+                    self.match(self.input, 103, self.FOLLOW_103_in_asm2_statement2086)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_asm2_statement2089)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 62, self.FOLLOW_62_in_asm2_statement2091)\r
+                if self.failed:\r
+                    return\r
+                # C.g:532:30: (~ ( ';' ) )*\r
+                while True: #loop86\r
+                    alt86 = 2\r
+                    LA86_0 = self.input.LA(1)\r
+\r
+                    if (LA86_0 == 63) :\r
+                        LA86_1 = self.input.LA(2)\r
+\r
+                        if ((IDENTIFIER <= LA86_1 <= LINE_COMMAND) or (26 <= LA86_1 <= 117)) :\r
+                            alt86 = 1\r
+\r
+\r
+                    elif ((IDENTIFIER <= LA86_0 <= LINE_COMMAND) or (26 <= LA86_0 <= 62) or (64 <= LA86_0 <= 117)) :\r
+                        alt86 = 1\r
+\r
+\r
+                    if alt86 == 1:\r
+                        # C.g:532:31: ~ ( ';' )\r
+                        if (IDENTIFIER <= self.input.LA(1) <= LINE_COMMAND) or (26 <= self.input.LA(1) <= 117):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_asm2_statement2094\r
+                                )\r
+                            raise mse\r
+\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop86\r
+\r
+\r
+                self.match(self.input, 63, self.FOLLOW_63_in_asm2_statement2101)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 25, self.FOLLOW_25_in_asm2_statement2103)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 61, asm2_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end asm2_statement\r
+\r
+\r
+    # $ANTLR start asm1_statement\r
+    # C.g:535:1: asm1_statement : '_asm' '{' (~ ( '}' ) )* '}' ;\r
+    def asm1_statement(self, ):\r
+\r
+        asm1_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 62):\r
+                    return\r
+\r
+                # C.g:536:2: ( '_asm' '{' (~ ( '}' ) )* '}' )\r
+                # C.g:536:4: '_asm' '{' (~ ( '}' ) )* '}'\r
+                self.match(self.input, 104, self.FOLLOW_104_in_asm1_statement2115)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 43, self.FOLLOW_43_in_asm1_statement2117)\r
+                if self.failed:\r
+                    return\r
+                # C.g:536:15: (~ ( '}' ) )*\r
+                while True: #loop87\r
+                    alt87 = 2\r
+                    LA87_0 = self.input.LA(1)\r
+\r
+                    if ((IDENTIFIER <= LA87_0 <= 43) or (45 <= LA87_0 <= 117)) :\r
+                        alt87 = 1\r
+\r
+\r
+                    if alt87 == 1:\r
+                        # C.g:536:16: ~ ( '}' )\r
+                        if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 117):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_asm1_statement2120\r
+                                )\r
+                            raise mse\r
+\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop87\r
+\r
+\r
+                self.match(self.input, 44, self.FOLLOW_44_in_asm1_statement2127)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 62, asm1_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end asm1_statement\r
+\r
+\r
+    # $ANTLR start asm_statement\r
+    # C.g:539:1: asm_statement : '__asm' '{' (~ ( '}' ) )* '}' ;\r
+    def asm_statement(self, ):\r
+\r
+        asm_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 63):\r
+                    return\r
+\r
+                # C.g:540:2: ( '__asm' '{' (~ ( '}' ) )* '}' )\r
+                # C.g:540:4: '__asm' '{' (~ ( '}' ) )* '}'\r
+                self.match(self.input, 105, self.FOLLOW_105_in_asm_statement2138)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 43, self.FOLLOW_43_in_asm_statement2140)\r
+                if self.failed:\r
+                    return\r
+                # C.g:540:16: (~ ( '}' ) )*\r
+                while True: #loop88\r
+                    alt88 = 2\r
+                    LA88_0 = self.input.LA(1)\r
+\r
+                    if ((IDENTIFIER <= LA88_0 <= 43) or (45 <= LA88_0 <= 117)) :\r
+                        alt88 = 1\r
+\r
+\r
+                    if alt88 == 1:\r
+                        # C.g:540:17: ~ ( '}' )\r
+                        if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 117):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_asm_statement2143\r
+                                )\r
+                            raise mse\r
+\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop88\r
+\r
+\r
+                self.match(self.input, 44, self.FOLLOW_44_in_asm_statement2150)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 63, asm_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end asm_statement\r
+\r
+\r
+    # $ANTLR start macro_statement\r
+    # C.g:543:1: macro_statement : IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' ;\r
+    def macro_statement(self, ):\r
+\r
+        macro_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 64):\r
+                    return\r
+\r
+                # C.g:544:2: ( IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' )\r
+                # C.g:544:4: IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')'\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_macro_statement2162)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 62, self.FOLLOW_62_in_macro_statement2164)\r
+                if self.failed:\r
+                    return\r
+                # C.g:544:19: ( declaration )*\r
+                while True: #loop89\r
+                    alt89 = 2\r
+                    LA89 = self.input.LA(1)\r
+                    if LA89 == IDENTIFIER:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 62:\r
+                            LA89_45 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_47 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 66:\r
+                            LA89_50 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_68 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_71 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_72 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_73 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_74 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_75 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_76 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_77 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_78 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_79 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_80 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_81 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_82 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_83 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_84 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_85 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_86 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 26:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_87 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_88 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_89 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_90 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_91 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_92 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_93 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_94 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_95 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_96 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_97 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_98 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_99 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_100 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 66:\r
+                            LA89_101 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_102 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_103 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_104 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_105 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_106 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_107 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_108 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_109 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_110 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_111 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_112 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_113 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_114 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_115 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_116 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_117 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_118 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_119 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_120 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_121 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_122 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_123 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_124 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_125 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 34:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_126 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_127 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_128 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_129 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_130 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_131 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_132 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_133 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_134 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_135 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_136 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_137 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_138 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_139 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_140 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_141 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_142 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_143 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_144 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_145 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 35:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_146 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_147 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_148 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_149 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_150 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_151 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_152 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_153 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_154 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_155 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_156 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_157 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_158 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_159 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_160 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_161 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_162 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_163 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_164 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_165 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 36:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_166 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_167 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_168 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_169 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_170 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_171 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_172 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_173 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_174 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_175 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_176 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_177 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_178 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_179 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_180 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_181 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_182 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_183 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_184 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_185 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 37:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_186 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_187 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_188 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_189 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_190 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_191 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_192 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_193 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_194 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_195 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_196 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_197 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_198 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_199 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_200 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_201 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_202 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_203 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_204 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_205 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 38:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_206 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_207 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_208 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_209 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_210 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_211 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_212 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_213 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_214 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_215 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_216 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_217 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_218 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_219 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_220 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_221 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_222 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_223 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_224 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_225 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 39:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_226 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_227 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_228 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_229 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_230 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_231 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_232 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_233 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_234 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_235 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_236 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_237 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_238 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_239 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_240 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_241 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_242 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_243 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_244 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_245 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 40:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_246 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_247 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_248 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_249 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_250 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_251 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_252 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_253 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_254 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_255 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_256 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_257 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_258 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_259 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_260 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_261 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_262 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_263 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_264 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_265 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 41:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_266 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_267 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_268 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_269 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_270 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_271 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_272 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_273 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_274 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_275 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_276 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_277 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_278 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_279 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_280 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_281 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_282 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_283 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_284 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_285 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 42:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_286 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_287 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_288 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_289 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_290 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_291 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_292 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_293 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_294 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_295 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_296 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_297 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_298 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_299 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_300 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_301 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_302 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_303 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_304 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_305 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 45 or LA89 == 46:\r
+                        LA89_40 = self.input.LA(2)\r
+\r
+                        if (LA89_40 == IDENTIFIER) :\r
+                            LA89_306 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif (LA89_40 == 43) :\r
+                            LA89_307 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+\r
+                    elif LA89 == 48:\r
+                        LA89_41 = self.input.LA(2)\r
+\r
+                        if (LA89_41 == 43) :\r
+                            LA89_308 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif (LA89_41 == IDENTIFIER) :\r
+                            LA89_309 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+\r
+                    elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 58 or LA89 == 59 or LA89 == 60 or LA89 == 61:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_310 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_311 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_312 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_313 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_314 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_315 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_316 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_317 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_318 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_319 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_320 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_321 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_322 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_323 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_324 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_325 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_326 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_327 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_328 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_329 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+\r
+                    if alt89 == 1:\r
+                        # C.g:0:0: declaration\r
+                        self.following.append(self.FOLLOW_declaration_in_macro_statement2166)\r
+                        self.declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop89\r
+\r
+\r
+                # C.g:544:33: ( statement_list )?\r
+                alt90 = 2\r
+                LA90 = self.input.LA(1)\r
+                if LA90 == IDENTIFIER:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 25 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 45 or LA90 == 46 or LA90 == 47 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61:\r
+                        alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_45 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_46 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == IDENTIFIER:\r
+                        LA90_47 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 64:\r
+                        LA90_48 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_49 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_50 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_51 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_52 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_53 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_54 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_55 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_56 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_57 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_58 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_59 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_60 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_61 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_62 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_63 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_64 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_65 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_66 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_67 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_70 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 25 or LA90 == 26 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 43 or LA90 == 45 or LA90 == 46 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61 or LA90 == 103 or LA90 == 104 or LA90 == 105 or LA90 == 106 or LA90 == 107 or LA90 == 108 or LA90 == 110 or LA90 == 111 or LA90 == 112 or LA90 == 113 or LA90 == 114 or LA90 == 115 or LA90 == 116 or LA90 == 117:\r
+                    alt90 = 1\r
+                elif LA90 == HEX_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_87 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_88 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_89 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_90 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_91 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_92 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_93 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_94 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_95 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_96 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_97 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_98 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_99 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_100 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_101 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_102 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_103 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_104 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_105 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_106 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_107 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_108 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                elif LA90 == OCTAL_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_111 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_112 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_113 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_114 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_115 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_116 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_117 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_118 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_119 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_120 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_121 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_122 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_123 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_124 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_125 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_126 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_127 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_128 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_129 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_130 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_131 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_134 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == DECIMAL_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_135 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_136 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_137 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_138 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_139 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_140 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_141 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_142 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_143 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_144 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_145 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_146 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_147 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_148 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_149 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_150 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_151 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_152 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_153 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_154 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_155 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_156 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                elif LA90 == CHARACTER_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_159 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_160 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_161 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_162 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_163 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_164 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_165 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_166 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_167 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_168 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_169 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_170 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_171 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_172 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_173 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_174 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_175 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_176 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_177 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_178 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_179 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_181 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == STRING_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == IDENTIFIER:\r
+                        LA90_183 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 64:\r
+                        LA90_184 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_185 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_186 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_187 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_188 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_189 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_190 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_191 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_192 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_193 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_194 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_195 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_196 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_197 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_198 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_199 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_200 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_201 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_202 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_203 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_204 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_205 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_206 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                elif LA90 == FLOATING_POINT_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_209 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_210 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_211 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_212 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_213 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_214 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_215 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_216 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_217 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_218 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_219 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_220 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_221 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_222 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_223 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_224 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_225 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_226 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_227 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_228 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_229 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_230 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                elif LA90 == 62:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == IDENTIFIER:\r
+                        LA90_233 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_234 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_235 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_236 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_237 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_238 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_239 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_240 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_241 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_242 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_243 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_244 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61:\r
+                        LA90_245 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 34:\r
+                        LA90_246 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 35:\r
+                        LA90_247 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 36:\r
+                        LA90_248 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 37:\r
+                        LA90_249 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 38:\r
+                        LA90_250 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 39:\r
+                        LA90_251 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 40:\r
+                        LA90_252 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 41:\r
+                        LA90_253 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 42:\r
+                        LA90_254 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 45 or LA90 == 46:\r
+                        LA90_255 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 48:\r
+                        LA90_256 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 72:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == IDENTIFIER:\r
+                        LA90_257 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_258 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_259 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_260 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_261 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_262 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_263 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_264 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_265 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_266 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_267 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_268 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 73:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == IDENTIFIER:\r
+                        LA90_269 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_270 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_271 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_272 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_273 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_274 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_275 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_276 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_277 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_278 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_279 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_280 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 62:\r
+                        LA90_281 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == IDENTIFIER:\r
+                        LA90_282 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_283 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_284 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_285 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_286 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_287 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_288 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_289 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_290 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_291 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_292 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 74:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 62:\r
+                        LA90_293 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == IDENTIFIER:\r
+                        LA90_294 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_295 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_296 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_297 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_298 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_299 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_300 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_301 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_302 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_303 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_304 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                if alt90 == 1:\r
+                    # C.g:0:0: statement_list\r
+                    self.following.append(self.FOLLOW_statement_list_in_macro_statement2170)\r
+                    self.statement_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+                # C.g:544:49: ( expression )?\r
+                alt91 = 2\r
+                LA91_0 = self.input.LA(1)\r
+\r
+                if ((IDENTIFIER <= LA91_0 <= FLOATING_POINT_LITERAL) or LA91_0 == 62 or LA91_0 == 66 or (68 <= LA91_0 <= 69) or (72 <= LA91_0 <= 74) or (77 <= LA91_0 <= 79)) :\r
+                    alt91 = 1\r
+                if alt91 == 1:\r
+                    # C.g:0:0: expression\r
+                    self.following.append(self.FOLLOW_expression_in_macro_statement2173)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+                self.match(self.input, 63, self.FOLLOW_63_in_macro_statement2176)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 64, macro_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end macro_statement\r
+\r
+\r
+    # $ANTLR start labeled_statement\r
+    # C.g:547:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement );\r
+    def labeled_statement(self, ):\r
+\r
+        labeled_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 65):\r
+                    return\r
+\r
+                # C.g:548:2: ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement )\r
+                alt92 = 3\r
+                LA92 = self.input.LA(1)\r
+                if LA92 == IDENTIFIER:\r
+                    alt92 = 1\r
+                elif LA92 == 106:\r
+                    alt92 = 2\r
+                elif LA92 == 107:\r
+                    alt92 = 3\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("547:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement );", 92, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt92 == 1:\r
+                    # C.g:548:4: IDENTIFIER ':' statement\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_labeled_statement2188)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2190)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_labeled_statement2192)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt92 == 2:\r
+                    # C.g:549:4: 'case' constant_expression ':' statement\r
+                    self.match(self.input, 106, self.FOLLOW_106_in_labeled_statement2197)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_labeled_statement2199)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2201)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_labeled_statement2203)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt92 == 3:\r
+                    # C.g:550:4: 'default' ':' statement\r
+                    self.match(self.input, 107, self.FOLLOW_107_in_labeled_statement2208)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2210)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_labeled_statement2212)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 65, labeled_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end labeled_statement\r
+\r
+    class compound_statement_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start compound_statement\r
+    # C.g:553:1: compound_statement : '{' ( declaration )* ( statement_list )? '}' ;\r
+    def compound_statement(self, ):\r
+\r
+        retval = self.compound_statement_return()\r
+        retval.start = self.input.LT(1)\r
+        compound_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 66):\r
+                    return retval\r
+\r
+                # C.g:554:2: ( '{' ( declaration )* ( statement_list )? '}' )\r
+                # C.g:554:4: '{' ( declaration )* ( statement_list )? '}'\r
+                self.match(self.input, 43, self.FOLLOW_43_in_compound_statement2223)\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:554:8: ( declaration )*\r
+                while True: #loop93\r
+                    alt93 = 2\r
+                    LA93 = self.input.LA(1)\r
+                    if LA93 == IDENTIFIER:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 62:\r
+                            LA93_44 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_47 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 66:\r
+                            LA93_48 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_49 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_50 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_51 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_52 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_53 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_54 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_55 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_56 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_57 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_58 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_59 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_60 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_61 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_62 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_63 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_64 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_65 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 26:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_86 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_87 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_88 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_89 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_90 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_91 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_92 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_93 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_94 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_95 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_96 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_97 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_98 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_99 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 66:\r
+                            LA93_100 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_101 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_102 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_103 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_104 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_105 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_106 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_107 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_108 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_109 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_110 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_111 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_112 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_113 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_114 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_115 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_116 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_117 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_118 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_119 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_120 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_121 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_122 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_123 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_124 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 34:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_125 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_126 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_127 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_128 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_129 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_130 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_131 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_132 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_133 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_134 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_135 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_136 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_137 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_138 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_139 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_140 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_141 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_142 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_143 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_144 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 35:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_145 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_146 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_147 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_148 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_149 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_150 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_151 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_152 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_153 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_154 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_155 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_156 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_157 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_158 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_159 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_160 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_161 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_162 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_163 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_164 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 36:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_165 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_166 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_167 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_168 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_169 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_170 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_171 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_172 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_173 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_174 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_175 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_176 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_177 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_178 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_179 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_180 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_181 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_182 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_183 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_184 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 37:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_185 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_186 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_187 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_188 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_189 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_190 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_191 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_192 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_193 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_194 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_195 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_196 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_197 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_198 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_199 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_200 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_201 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_202 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_203 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_204 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 38:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_205 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_206 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_207 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_208 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_209 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_210 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_211 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_212 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_213 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_214 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_215 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_216 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_217 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_218 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_219 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_220 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_221 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_222 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_223 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_224 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 39:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_225 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_226 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_227 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_228 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_229 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_230 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_231 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_232 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_233 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_234 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_235 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_236 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_237 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_238 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_239 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_240 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_241 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_242 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_243 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_244 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 40:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_245 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_246 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_247 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_248 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_249 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_250 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_251 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_252 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_253 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_254 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_255 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_256 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_257 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_258 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_259 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_260 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_261 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_262 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_263 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_264 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 41:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_265 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_266 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_267 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_268 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_269 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_270 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_271 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_272 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_273 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_274 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_275 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_276 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_277 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_278 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_279 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_280 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_281 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_282 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_283 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_284 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 42:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_285 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_286 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_287 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_288 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_289 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_290 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_291 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_292 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_293 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_294 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_295 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_296 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_297 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_298 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_299 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_300 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_301 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_302 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_303 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_304 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 45 or LA93 == 46:\r
+                        LA93_40 = self.input.LA(2)\r
+\r
+                        if (LA93_40 == IDENTIFIER) :\r
+                            LA93_305 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif (LA93_40 == 43) :\r
+                            LA93_306 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+\r
+                    elif LA93 == 48:\r
+                        LA93_41 = self.input.LA(2)\r
+\r
+                        if (LA93_41 == 43) :\r
+                            LA93_307 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif (LA93_41 == IDENTIFIER) :\r
+                            LA93_308 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+\r
+                    elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 58 or LA93 == 59 or LA93 == 60 or LA93 == 61:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_309 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_310 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_311 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_312 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_313 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_314 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_315 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_316 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_317 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_318 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_319 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_320 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_321 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_322 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_323 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_324 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_325 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_326 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_327 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_328 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+\r
+                    if alt93 == 1:\r
+                        # C.g:0:0: declaration\r
+                        self.following.append(self.FOLLOW_declaration_in_compound_statement2225)\r
+                        self.declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    else:\r
+                        break #loop93\r
+\r
+\r
+                # C.g:554:21: ( statement_list )?\r
+                alt94 = 2\r
+                LA94_0 = self.input.LA(1)\r
+\r
+                if ((IDENTIFIER <= LA94_0 <= FLOATING_POINT_LITERAL) or (25 <= LA94_0 <= 26) or (29 <= LA94_0 <= 43) or (45 <= LA94_0 <= 46) or (48 <= LA94_0 <= 62) or LA94_0 == 66 or (68 <= LA94_0 <= 69) or (72 <= LA94_0 <= 74) or (77 <= LA94_0 <= 79) or (103 <= LA94_0 <= 108) or (110 <= LA94_0 <= 117)) :\r
+                    alt94 = 1\r
+                if alt94 == 1:\r
+                    # C.g:0:0: statement_list\r
+                    self.following.append(self.FOLLOW_statement_list_in_compound_statement2228)\r
+                    self.statement_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+\r
+                self.match(self.input, 44, self.FOLLOW_44_in_compound_statement2231)\r
+                if self.failed:\r
+                    return retval\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 66, compound_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end compound_statement\r
+\r
+\r
+    # $ANTLR start statement_list\r
+    # C.g:557:1: statement_list : ( statement )+ ;\r
+    def statement_list(self, ):\r
+\r
+        statement_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 67):\r
+                    return\r
+\r
+                # C.g:558:2: ( ( statement )+ )\r
+                # C.g:558:4: ( statement )+\r
+                # C.g:558:4: ( statement )+\r
+                cnt95 = 0\r
+                while True: #loop95\r
+                    alt95 = 2\r
+                    LA95 = self.input.LA(1)\r
+                    if LA95 == IDENTIFIER:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 62:\r
+                            LA95_46 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 25 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 45 or LA95 == 46 or LA95 == 47 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61:\r
+                            alt95 = 1\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_48 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == IDENTIFIER:\r
+                            LA95_49 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 64:\r
+                            LA95_50 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 75:\r
+                            LA95_51 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 66:\r
+                            LA95_52 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 76:\r
+                            LA95_53 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 72:\r
+                            LA95_54 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 73:\r
+                            LA95_55 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 70:\r
+                            LA95_56 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 71:\r
+                            LA95_57 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 68:\r
+                            LA95_58 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 69:\r
+                            LA95_59 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_60 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_61 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_62 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 77:\r
+                            LA95_63 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 94:\r
+                            LA95_64 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 93:\r
+                            LA95_65 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 92:\r
+                            LA95_66 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 91:\r
+                            LA95_67 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 90:\r
+                            LA95_68 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 27:\r
+                            LA95_69 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_88 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+\r
+                    elif LA95 == HEX_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_89 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 62:\r
+                            LA95_90 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 75:\r
+                            LA95_91 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 66:\r
+                            LA95_92 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 76:\r
+                            LA95_93 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 72:\r
+                            LA95_94 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 73:\r
+                            LA95_95 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_96 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 70:\r
+                            LA95_97 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 71:\r
+                            LA95_98 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 68:\r
+                            LA95_99 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 69:\r
+                            LA95_100 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_101 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_102 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_103 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 77:\r
+                            LA95_104 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 94:\r
+                            LA95_105 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 93:\r
+                            LA95_106 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 92:\r
+                            LA95_107 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 91:\r
+                            LA95_108 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 90:\r
+                            LA95_109 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 27:\r
+                            LA95_110 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
+\r
+                    elif LA95 == OCTAL_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_113 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 62:\r
+                            LA95_114 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 75:\r
+                            LA95_115 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 66:\r
+                            LA95_116 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 76:\r
+                            LA95_117 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 72:\r
+                            LA95_118 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 73:\r
+                            LA95_119 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 70:\r
+                            LA95_120 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 71:\r
+                            LA95_121 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 68:\r
+                            LA95_122 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
 \r
-    class Struct_or_union_specifierContext(ParserRuleContext):\r
+                        elif LA95 == 69:\r
+                            LA95_123 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def struct_or_union(self):\r
-            return self.getTypedRuleContext(CParser.Struct_or_unionContext,0)\r
 \r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_124 = self.input.LA(3)\r
 \r
-        def struct_declaration_list(self):\r
-            return self.getTypedRuleContext(CParser.Struct_declaration_listContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_125 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_or_union_specifier\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_or_union_specifier" ):\r
-                listener.enterStruct_or_union_specifier(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_or_union_specifier" ):\r
-                listener.exitStruct_or_union_specifier(self)\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_126 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 77:\r
+                            LA95_127 = self.input.LA(3)\r
 \r
-    def struct_or_union_specifier(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Struct_or_union_specifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 20, self.RULE_struct_or_union_specifier)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 262\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,18,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 251\r
-                self.struct_or_union()\r
-                self.state = 253\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.IDENTIFIER:\r
-                    self.state = 252\r
-                    self.match(CParser.IDENTIFIER)\r
-\r
-\r
-                self.state = 255\r
-                self.match(CParser.T__0)\r
-                self.state = 256\r
-                self.struct_declaration_list()\r
-                self.state = 257\r
-                self.match(CParser.T__19)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 259\r
-                self.struct_or_union()\r
-                self.state = 260\r
-                self.match(CParser.IDENTIFIER)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Struct_or_unionContext(ParserRuleContext):\r
+                        elif LA95 == 94:\r
+                            LA95_128 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_or_union\r
+                        elif LA95 == 93:\r
+                            LA95_129 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_or_union" ):\r
-                listener.enterStruct_or_union(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_or_union" ):\r
-                listener.exitStruct_or_union(self)\r
 \r
+                        elif LA95 == 92:\r
+                            LA95_130 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def struct_or_union(self):\r
+                        elif LA95 == 91:\r
+                            LA95_131 = self.input.LA(3)\r
 \r
-        localctx = CParser.Struct_or_unionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 22, self.RULE_struct_or_union)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 264\r
-            _la = self._input.LA(1)\r
-            if not(_la==CParser.T__20 or _la==CParser.T__21):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class Struct_declaration_listContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                        elif LA95 == 90:\r
+                            LA95_132 = self.input.LA(3)\r
 \r
-        def struct_declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Struct_declarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Struct_declarationContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_declaration_list\r
+                        elif LA95 == 27:\r
+                            LA95_133 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_declaration_list" ):\r
-                listener.enterStruct_declaration_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_declaration_list" ):\r
-                listener.exitStruct_declaration_list(self)\r
 \r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_135 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def struct_declaration_list(self):\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
 \r
-        localctx = CParser.Struct_declaration_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 24, self.RULE_struct_declaration_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 267 \r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while True:\r
-                self.state = 266\r
-                self.struct_declaration()\r
-                self.state = 269 \r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36))) != 0) or _la==CParser.IDENTIFIER):\r
-                    break\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                    elif LA95 == DECIMAL_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_137 = self.input.LA(3)\r
 \r
-    class Struct_declarationContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def specifier_qualifier_list(self):\r
-            return self.getTypedRuleContext(CParser.Specifier_qualifier_listContext,0)\r
+                        elif LA95 == 62:\r
+                            LA95_138 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def struct_declarator_list(self):\r
-            return self.getTypedRuleContext(CParser.Struct_declarator_listContext,0)\r
 \r
+                        elif LA95 == 75:\r
+                            LA95_139 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_declaration\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_declaration" ):\r
-                listener.enterStruct_declaration(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_declaration" ):\r
-                listener.exitStruct_declaration(self)\r
+                        elif LA95 == 66:\r
+                            LA95_140 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 76:\r
+                            LA95_141 = self.input.LA(3)\r
 \r
-    def struct_declaration(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Struct_declarationContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 26, self.RULE_struct_declaration)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 271\r
-            self.specifier_qualifier_list()\r
-            self.state = 272\r
-            self.struct_declarator_list()\r
-            self.state = 273\r
-            self.match(CParser.T__1)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Specifier_qualifier_listContext(ParserRuleContext):\r
+                        elif LA95 == 72:\r
+                            LA95_142 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def type_qualifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_qualifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_qualifierContext,i)\r
 \r
+                        elif LA95 == 73:\r
+                            LA95_143 = self.input.LA(3)\r
 \r
-        def type_specifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_specifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_specifierContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_specifier_qualifier_list\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_144 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterSpecifier_qualifier_list" ):\r
-                listener.enterSpecifier_qualifier_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitSpecifier_qualifier_list" ):\r
-                listener.exitSpecifier_qualifier_list(self)\r
 \r
+                        elif LA95 == 70:\r
+                            LA95_145 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def specifier_qualifier_list(self):\r
+                        elif LA95 == 71:\r
+                            LA95_146 = self.input.LA(3)\r
 \r
-        localctx = CParser.Specifier_qualifier_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 28, self.RULE_specifier_qualifier_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 277 \r
-            self._errHandler.sync(self)\r
-            _alt = 1\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt == 1:\r
-                    self.state = 277\r
-                    self._errHandler.sync(self)\r
-                    token = self._input.LA(1)\r
-                    if token in [CParser.T__24, CParser.T__25, CParser.T__26, CParser.T__27, CParser.T__28, CParser.T__29, CParser.T__30, CParser.T__31, CParser.T__32, CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__36]:\r
-                        self.state = 275\r
-                        self.type_qualifier()\r
-                        pass\r
-                    elif token in [CParser.T__10, CParser.T__11, CParser.T__12, CParser.T__13, CParser.T__14, CParser.T__15, CParser.T__16, CParser.T__17, CParser.T__18, CParser.T__20, CParser.T__21, CParser.T__23, CParser.IDENTIFIER]:\r
-                        self.state = 276\r
-                        self.type_specifier()\r
-                        pass\r
-                    else:\r
-                        raise NoViableAltException(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-                else:\r
-                    raise NoViableAltException(self)\r
-                self.state = 279 \r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,21,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 68:\r
+                            LA95_147 = self.input.LA(3)\r
 \r
-    class Struct_declarator_listContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def struct_declarator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Struct_declaratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Struct_declaratorContext,i)\r
+                        elif LA95 == 69:\r
+                            LA95_148 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_declarator_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_declarator_list" ):\r
-                listener.enterStruct_declarator_list(self)\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_149 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_declarator_list" ):\r
-                listener.exitStruct_declarator_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_150 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def struct_declarator_list(self):\r
 \r
-        localctx = CParser.Struct_declarator_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 30, self.RULE_struct_declarator_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 281\r
-            self.struct_declarator()\r
-            self.state = 286\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 282\r
-                self.match(CParser.T__3)\r
-                self.state = 283\r
-                self.struct_declarator()\r
-                self.state = 288\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_151 = self.input.LA(3)\r
 \r
-    class Struct_declaratorContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
+                        elif LA95 == 77:\r
+                            LA95_152 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
 \r
+                        elif LA95 == 94:\r
+                            LA95_153 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_declarator\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_declarator" ):\r
-                listener.enterStruct_declarator(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_declarator" ):\r
-                listener.exitStruct_declarator(self)\r
+                        elif LA95 == 93:\r
+                            LA95_154 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 92:\r
+                            LA95_155 = self.input.LA(3)\r
 \r
-    def struct_declarator(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Struct_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 32, self.RULE_struct_declarator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 296\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__37, CParser.T__41, CParser.IDENTIFIER]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 289\r
-                self.declarator()\r
-                self.state = 292\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__22:\r
-                    self.state = 290\r
-                    self.match(CParser.T__22)\r
-                    self.state = 291\r
-                    self.constant_expression()\r
 \r
+                        elif LA95 == 91:\r
+                            LA95_156 = self.input.LA(3)\r
 \r
-                pass\r
-            elif token in [CParser.T__22]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 294\r
-                self.match(CParser.T__22)\r
-                self.state = 295\r
-                self.constant_expression()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Enum_specifierContext(ParserRuleContext):\r
+                        elif LA95 == 90:\r
+                            LA95_157 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enumerator_list(self):\r
-            return self.getTypedRuleContext(CParser.Enumerator_listContext,0)\r
 \r
+                        elif LA95 == 27:\r
+                            LA95_158 = self.input.LA(3)\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_enum_specifier\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterEnum_specifier" ):\r
-                listener.enterEnum_specifier(self)\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitEnum_specifier" ):\r
-                listener.exitEnum_specifier(self)\r
+                    elif LA95 == CHARACTER_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_161 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 62:\r
+                            LA95_162 = self.input.LA(3)\r
 \r
-    def enum_specifier(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Enum_specifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 34, self.RULE_enum_specifier)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 317\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,27,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 298\r
-                self.match(CParser.T__23)\r
-                self.state = 299\r
-                self.match(CParser.T__0)\r
-                self.state = 300\r
-                self.enumerator_list()\r
-                self.state = 302\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__3:\r
-                    self.state = 301\r
-                    self.match(CParser.T__3)\r
-\r
-\r
-                self.state = 304\r
-                self.match(CParser.T__19)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 306\r
-                self.match(CParser.T__23)\r
-                self.state = 307\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 308\r
-                self.match(CParser.T__0)\r
-                self.state = 309\r
-                self.enumerator_list()\r
-                self.state = 311\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__3:\r
-                    self.state = 310\r
-                    self.match(CParser.T__3)\r
-\r
-\r
-                self.state = 313\r
-                self.match(CParser.T__19)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 315\r
-                self.match(CParser.T__23)\r
-                self.state = 316\r
-                self.match(CParser.IDENTIFIER)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Enumerator_listContext(ParserRuleContext):\r
+                        elif LA95 == 75:\r
+                            LA95_163 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enumerator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.EnumeratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.EnumeratorContext,i)\r
 \r
+                        elif LA95 == 66:\r
+                            LA95_164 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_enumerator_list\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterEnumerator_list" ):\r
-                listener.enterEnumerator_list(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitEnumerator_list" ):\r
-                listener.exitEnumerator_list(self)\r
+                        elif LA95 == 76:\r
+                            LA95_165 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 72:\r
+                            LA95_166 = self.input.LA(3)\r
 \r
-    def enumerator_list(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Enumerator_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 36, self.RULE_enumerator_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 319\r
-            self.enumerator()\r
-            self.state = 324\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,28,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 320\r
-                    self.match(CParser.T__3)\r
-                    self.state = 321\r
-                    self.enumerator() \r
-                self.state = 326\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,28,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class EnumeratorContext(ParserRuleContext):\r
+                        elif LA95 == 73:\r
+                            LA95_167 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_168 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_enumerator\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterEnumerator" ):\r
-                listener.enterEnumerator(self)\r
+                        elif LA95 == 70:\r
+                            LA95_169 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitEnumerator" ):\r
-                listener.exitEnumerator(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 71:\r
+                            LA95_170 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def enumerator(self):\r
 \r
-        localctx = CParser.EnumeratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 38, self.RULE_enumerator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 327\r
-            self.match(CParser.IDENTIFIER)\r
-            self.state = 330\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__4:\r
-                self.state = 328\r
-                self.match(CParser.T__4)\r
-                self.state = 329\r
-                self.constant_expression()\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 68:\r
+                            LA95_171 = self.input.LA(3)\r
 \r
-    class Type_qualifierContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
+                        elif LA95 == 69:\r
+                            LA95_172 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_type_qualifier\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterType_qualifier" ):\r
-                listener.enterType_qualifier(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitType_qualifier" ):\r
-                listener.exitType_qualifier(self)\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_173 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_174 = self.input.LA(3)\r
 \r
-    def type_qualifier(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Type_qualifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 40, self.RULE_type_qualifier)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 332\r
-            _la = self._input.LA(1)\r
-            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36))) != 0)):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class DeclaratorContext(ParserRuleContext):\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_175 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def direct_declarator(self):\r
-            return self.getTypedRuleContext(CParser.Direct_declaratorContext,0)\r
 \r
+                        elif LA95 == 77:\r
+                            LA95_176 = self.input.LA(3)\r
 \r
-        def pointer(self):\r
-            return self.getTypedRuleContext(CParser.PointerContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_declarator\r
+                        elif LA95 == 94:\r
+                            LA95_177 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDeclarator" ):\r
-                listener.enterDeclarator(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDeclarator" ):\r
-                listener.exitDeclarator(self)\r
 \r
+                        elif LA95 == 93:\r
+                            LA95_178 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def declarator(self):\r
+                        elif LA95 == 92:\r
+                            LA95_179 = self.input.LA(3)\r
 \r
-        localctx = CParser.DeclaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 42, self.RULE_declarator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 348\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,34,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 335\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__41:\r
-                    self.state = 334\r
-                    self.pointer()\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-                self.state = 338\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__33:\r
-                    self.state = 337\r
-                    self.match(CParser.T__33)\r
+                        elif LA95 == 91:\r
+                            LA95_180 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                self.state = 341\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__34:\r
-                    self.state = 340\r
-                    self.match(CParser.T__34)\r
 \r
+                        elif LA95 == 90:\r
+                            LA95_181 = self.input.LA(3)\r
 \r
-                self.state = 344\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__35:\r
-                    self.state = 343\r
-                    self.match(CParser.T__35)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-                self.state = 346\r
-                self.direct_declarator()\r
-                pass\r
+                        elif LA95 == 27:\r
+                            LA95_182 = self.input.LA(3)\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 347\r
-                self.pointer()\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
 \r
-    class Direct_declaratorContext(ParserRuleContext):\r
+                    elif LA95 == STRING_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == IDENTIFIER:\r
+                            LA95_185 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def declarator_suffix(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Declarator_suffixContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Declarator_suffixContext,i)\r
+                        elif LA95 == 64:\r
+                            LA95_186 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
 \r
+                        elif LA95 == 62:\r
+                            LA95_187 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_direct_declarator\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDirect_declarator" ):\r
-                listener.enterDirect_declarator(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDirect_declarator" ):\r
-                listener.exitDirect_declarator(self)\r
+                        elif LA95 == 75:\r
+                            LA95_188 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 66:\r
+                            LA95_189 = self.input.LA(3)\r
 \r
-    def direct_declarator(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Direct_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 44, self.RULE_direct_declarator)\r
-        try:\r
-            self.state = 368\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.IDENTIFIER]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 350\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 354\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,35,self._ctx)\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt==1:\r
-                        self.state = 351\r
-                        self.declarator_suffix() \r
-                    self.state = 356\r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,35,self._ctx)\r
-\r
-                pass\r
-            elif token in [CParser.T__37]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 357\r
-                self.match(CParser.T__37)\r
-                self.state = 359\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,36,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 358\r
-                    self.match(CParser.T__33)\r
-\r
-\r
-                self.state = 361\r
-                self.declarator()\r
-                self.state = 362\r
-                self.match(CParser.T__38)\r
-                self.state = 364 \r
-                self._errHandler.sync(self)\r
-                _alt = 1\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt == 1:\r
-                        self.state = 363\r
-                        self.declarator_suffix()\r
 \r
-                    else:\r
-                        raise NoViableAltException(self)\r
-                    self.state = 366 \r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,37,self._ctx)\r
+                        elif LA95 == 76:\r
+                            LA95_190 = self.input.LA(3)\r
 \r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Declarator_suffixContext(ParserRuleContext):\r
+                        elif LA95 == 72:\r
+                            LA95_191 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
 \r
+                        elif LA95 == 73:\r
+                            LA95_192 = self.input.LA(3)\r
 \r
-        def parameter_type_list(self):\r
-            return self.getTypedRuleContext(CParser.Parameter_type_listContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def identifier_list(self):\r
-            return self.getTypedRuleContext(CParser.Identifier_listContext,0)\r
+                        elif LA95 == 70:\r
+                            LA95_193 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_declarator_suffix\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDeclarator_suffix" ):\r
-                listener.enterDeclarator_suffix(self)\r
+                        elif LA95 == 71:\r
+                            LA95_194 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDeclarator_suffix" ):\r
-                listener.exitDeclarator_suffix(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 68:\r
+                            LA95_195 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def declarator_suffix(self):\r
 \r
-        localctx = CParser.Declarator_suffixContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 46, self.RULE_declarator_suffix)\r
-        try:\r
-            self.state = 386\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,39,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 370\r
-                self.match(CParser.T__39)\r
-                self.state = 371\r
-                self.constant_expression()\r
-                self.state = 372\r
-                self.match(CParser.T__40)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 374\r
-                self.match(CParser.T__39)\r
-                self.state = 375\r
-                self.match(CParser.T__40)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 376\r
-                self.match(CParser.T__37)\r
-                self.state = 377\r
-                self.parameter_type_list()\r
-                self.state = 378\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 380\r
-                self.match(CParser.T__37)\r
-                self.state = 381\r
-                self.identifier_list()\r
-                self.state = 382\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 384\r
-                self.match(CParser.T__37)\r
-                self.state = 385\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 69:\r
+                            LA95_196 = self.input.LA(3)\r
 \r
-    class PointerContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def type_qualifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_qualifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_qualifierContext,i)\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_197 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def pointer(self):\r
-            return self.getTypedRuleContext(CParser.PointerContext,0)\r
 \r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_198 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_pointer\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterPointer" ):\r
-                listener.enterPointer(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitPointer" ):\r
-                listener.exitPointer(self)\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_199 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 77:\r
+                            LA95_200 = self.input.LA(3)\r
 \r
-    def pointer(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.PointerContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 48, self.RULE_pointer)\r
-        try:\r
-            self.state = 400\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,42,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 388\r
-                self.match(CParser.T__41)\r
-                self.state = 390 \r
-                self._errHandler.sync(self)\r
-                _alt = 1\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt == 1:\r
-                        self.state = 389\r
-                        self.type_qualifier()\r
 \r
-                    else:\r
-                        raise NoViableAltException(self)\r
-                    self.state = 392 \r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,40,self._ctx)\r
-\r
-                self.state = 395\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,41,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 394\r
-                    self.pointer()\r
+                        elif LA95 == 94:\r
+                            LA95_201 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                pass\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 397\r
-                self.match(CParser.T__41)\r
-                self.state = 398\r
-                self.pointer()\r
-                pass\r
+                        elif LA95 == 93:\r
+                            LA95_202 = self.input.LA(3)\r
 \r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 399\r
-                self.match(CParser.T__41)\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 92:\r
+                            LA95_203 = self.input.LA(3)\r
 \r
-    class Parameter_type_listContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def parameter_list(self):\r
-            return self.getTypedRuleContext(CParser.Parameter_listContext,0)\r
+                        elif LA95 == 91:\r
+                            LA95_204 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_parameter_type_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterParameter_type_list" ):\r
-                listener.enterParameter_type_list(self)\r
+                        elif LA95 == 90:\r
+                            LA95_205 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitParameter_type_list" ):\r
-                listener.exitParameter_type_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 27:\r
+                            LA95_206 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def parameter_type_list(self):\r
 \r
-        localctx = CParser.Parameter_type_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 50, self.RULE_parameter_type_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 402\r
-            self.parameter_list()\r
-            self.state = 408\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__3:\r
-                self.state = 403\r
-                self.match(CParser.T__3)\r
-                self.state = 405\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__28:\r
-                    self.state = 404\r
-                    self.match(CParser.T__28)\r
-\r
-\r
-                self.state = 407\r
-                self.match(CParser.T__42)\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_208 = self.input.LA(3)\r
 \r
-    class Parameter_listContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def parameter_declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Parameter_declarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Parameter_declarationContext,i)\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_209 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_parameter_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterParameter_list" ):\r
-                listener.enterParameter_list(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitParameter_list" ):\r
-                listener.exitParameter_list(self)\r
+                    elif LA95 == FLOATING_POINT_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_211 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 62:\r
+                            LA95_212 = self.input.LA(3)\r
 \r
-    def parameter_list(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Parameter_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 52, self.RULE_parameter_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 410\r
-            self.parameter_declaration()\r
-            self.state = 418\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,46,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 411\r
-                    self.match(CParser.T__3)\r
-                    self.state = 413\r
-                    self._errHandler.sync(self)\r
-                    la_ = self._interp.adaptivePredict(self._input,45,self._ctx)\r
-                    if la_ == 1:\r
-                        self.state = 412\r
-                        self.match(CParser.T__28)\r
-\r
-\r
-                    self.state = 415\r
-                    self.parameter_declaration() \r
-                self.state = 420\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,46,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Parameter_declarationContext(ParserRuleContext):\r
+                        elif LA95 == 75:\r
+                            LA95_213 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def declaration_specifiers(self):\r
-            return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)\r
 \r
+                        elif LA95 == 66:\r
+                            LA95_214 = self.input.LA(3)\r
 \r
-        def declarator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclaratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclaratorContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def abstract_declarator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Abstract_declaratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Abstract_declaratorContext,i)\r
+                        elif LA95 == 76:\r
+                            LA95_215 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def pointer(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.PointerContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.PointerContext,i)\r
+                        elif LA95 == 72:\r
+                            LA95_216 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_parameter_declaration\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterParameter_declaration" ):\r
-                listener.enterParameter_declaration(self)\r
+                        elif LA95 == 73:\r
+                            LA95_217 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitParameter_declaration" ):\r
-                listener.exitParameter_declaration(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 70:\r
+                            LA95_218 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def parameter_declaration(self):\r
 \r
-        localctx = CParser.Parameter_declarationContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 54, self.RULE_parameter_declaration)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 439\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,51,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 421\r
-                self.declaration_specifiers()\r
-                self.state = 426\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (CParser.T__33 - 34)) | (1 << (CParser.T__34 - 34)) | (1 << (CParser.T__35 - 34)) | (1 << (CParser.T__37 - 34)) | (1 << (CParser.T__39 - 34)) | (1 << (CParser.T__41 - 34)) | (1 << (CParser.IDENTIFIER - 34)))) != 0):\r
-                    self.state = 424\r
-                    self._errHandler.sync(self)\r
-                    la_ = self._interp.adaptivePredict(self._input,47,self._ctx)\r
-                    if la_ == 1:\r
-                        self.state = 422\r
-                        self.declarator()\r
-                        pass\r
-\r
-                    elif la_ == 2:\r
-                        self.state = 423\r
-                        self.abstract_declarator()\r
-                        pass\r
+                        elif LA95 == 71:\r
+                            LA95_219 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                    self.state = 428\r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
 \r
-                self.state = 430\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__28:\r
-                    self.state = 429\r
-                    self.match(CParser.T__28)\r
+                        elif LA95 == 68:\r
+                            LA95_220 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                pass\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 435\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while _la==CParser.T__41:\r
-                    self.state = 432\r
-                    self.pointer()\r
-                    self.state = 437\r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
+                        elif LA95 == 69:\r
+                            LA95_221 = self.input.LA(3)\r
 \r
-                self.state = 438\r
-                self.match(CParser.IDENTIFIER)\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_222 = self.input.LA(3)\r
 \r
-    class Identifier_listContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def IDENTIFIER(self, i:int=None):\r
-            if i is None:\r
-                return self.getTokens(CParser.IDENTIFIER)\r
-            else:\r
-                return self.getToken(CParser.IDENTIFIER, i)\r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_223 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_identifier_list\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterIdentifier_list" ):\r
-                listener.enterIdentifier_list(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitIdentifier_list" ):\r
-                listener.exitIdentifier_list(self)\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_224 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 77:\r
+                            LA95_225 = self.input.LA(3)\r
 \r
-    def identifier_list(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Identifier_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 56, self.RULE_identifier_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 441\r
-            self.match(CParser.IDENTIFIER)\r
-            self.state = 446\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 442\r
-                self.match(CParser.T__3)\r
-                self.state = 443\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 448\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Type_nameContext(ParserRuleContext):\r
+                        elif LA95 == 94:\r
+                            LA95_226 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def specifier_qualifier_list(self):\r
-            return self.getTypedRuleContext(CParser.Specifier_qualifier_listContext,0)\r
 \r
+                        elif LA95 == 93:\r
+                            LA95_227 = self.input.LA(3)\r
 \r
-        def abstract_declarator(self):\r
-            return self.getTypedRuleContext(CParser.Abstract_declaratorContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def type_id(self):\r
-            return self.getTypedRuleContext(CParser.Type_idContext,0)\r
+                        elif LA95 == 92:\r
+                            LA95_228 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_type_name\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterType_name" ):\r
-                listener.enterType_name(self)\r
+                        elif LA95 == 91:\r
+                            LA95_229 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitType_name" ):\r
-                listener.exitType_name(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 90:\r
+                            LA95_230 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def type_name(self):\r
 \r
-        localctx = CParser.Type_nameContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 58, self.RULE_type_name)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 454\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,54,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 449\r
-                self.specifier_qualifier_list()\r
-                self.state = 451\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__37) | (1 << CParser.T__39) | (1 << CParser.T__41))) != 0):\r
-                    self.state = 450\r
-                    self.abstract_declarator()\r
+                        elif LA95 == 27:\r
+                            LA95_231 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                pass\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 453\r
-                self.type_id()\r
-                pass\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_234 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Abstract_declaratorContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                    elif LA95 == 62:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == IDENTIFIER:\r
+                            LA95_235 = self.input.LA(3)\r
 \r
-        def pointer(self):\r
-            return self.getTypedRuleContext(CParser.PointerContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def direct_abstract_declarator(self):\r
-            return self.getTypedRuleContext(CParser.Direct_abstract_declaratorContext,0)\r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_236 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_abstract_declarator\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAbstract_declarator" ):\r
-                listener.enterAbstract_declarator(self)\r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_237 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAbstract_declarator" ):\r
-                listener.exitAbstract_declarator(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_238 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def abstract_declarator(self):\r
 \r
-        localctx = CParser.Abstract_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 60, self.RULE_abstract_declarator)\r
-        try:\r
-            self.state = 461\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__41]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 456\r
-                self.pointer()\r
-                self.state = 458\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,55,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 457\r
-                    self.direct_abstract_declarator()\r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_239 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                pass\r
-            elif token in [CParser.T__37, CParser.T__39]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 460\r
-                self.direct_abstract_declarator()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_240 = self.input.LA(3)\r
 \r
-    class Direct_abstract_declaratorContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def abstract_declarator(self):\r
-            return self.getTypedRuleContext(CParser.Abstract_declaratorContext,0)\r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_241 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def abstract_declarator_suffix(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Abstract_declarator_suffixContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Abstract_declarator_suffixContext,i)\r
 \r
+                        elif LA95 == 62:\r
+                            LA95_242 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_direct_abstract_declarator\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDirect_abstract_declarator" ):\r
-                listener.enterDirect_abstract_declarator(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDirect_abstract_declarator" ):\r
-                listener.exitDirect_abstract_declarator(self)\r
+                        elif LA95 == 72:\r
+                            LA95_243 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 73:\r
+                            LA95_244 = self.input.LA(3)\r
 \r
-    def direct_abstract_declarator(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Direct_abstract_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 62, self.RULE_direct_abstract_declarator)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 468\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,57,self._ctx)\r
-            if la_ == 1:\r
-                self.state = 463\r
-                self.match(CParser.T__37)\r
-                self.state = 464\r
-                self.abstract_declarator()\r
-                self.state = 465\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.state = 467\r
-                self.abstract_declarator_suffix()\r
-                pass\r
-\r
-\r
-            self.state = 473\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,58,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 470\r
-                    self.abstract_declarator_suffix() \r
-                self.state = 475\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,58,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Abstract_declarator_suffixContext(ParserRuleContext):\r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_245 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
 \r
+                        elif LA95 == 74:\r
+                            LA95_246 = self.input.LA(3)\r
 \r
-        def parameter_type_list(self):\r
-            return self.getTypedRuleContext(CParser.Parameter_type_listContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_abstract_declarator_suffix\r
+                        elif LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61:\r
+                            LA95_247 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAbstract_declarator_suffix" ):\r
-                listener.enterAbstract_declarator_suffix(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAbstract_declarator_suffix" ):\r
-                listener.exitAbstract_declarator_suffix(self)\r
 \r
+                        elif LA95 == 34:\r
+                            LA95_248 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def abstract_declarator_suffix(self):\r
+                        elif LA95 == 35:\r
+                            LA95_249 = self.input.LA(3)\r
 \r
-        localctx = CParser.Abstract_declarator_suffixContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 64, self.RULE_abstract_declarator_suffix)\r
-        try:\r
-            self.state = 488\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,59,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 476\r
-                self.match(CParser.T__39)\r
-                self.state = 477\r
-                self.match(CParser.T__40)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 478\r
-                self.match(CParser.T__39)\r
-                self.state = 479\r
-                self.constant_expression()\r
-                self.state = 480\r
-                self.match(CParser.T__40)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 482\r
-                self.match(CParser.T__37)\r
-                self.state = 483\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 484\r
-                self.match(CParser.T__37)\r
-                self.state = 485\r
-                self.parameter_type_list()\r
-                self.state = 486\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class InitializerContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                        elif LA95 == 36:\r
+                            LA95_250 = self.input.LA(3)\r
 \r
-        def assignment_expression(self):\r
-            return self.getTypedRuleContext(CParser.Assignment_expressionContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def initializer_list(self):\r
-            return self.getTypedRuleContext(CParser.Initializer_listContext,0)\r
+                        elif LA95 == 37:\r
+                            LA95_251 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_initializer\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInitializer" ):\r
-                listener.enterInitializer(self)\r
+                        elif LA95 == 38:\r
+                            LA95_252 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInitializer" ):\r
-                listener.exitInitializer(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 39:\r
+                            LA95_253 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def initializer(self):\r
 \r
-        localctx = CParser.InitializerContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 66, self.RULE_initializer)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 498\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__37, CParser.T__41, CParser.T__43, CParser.T__44, CParser.T__47, CParser.T__48, CParser.T__49, CParser.T__52, CParser.T__53, CParser.T__54, CParser.IDENTIFIER, CParser.CHARACTER_LITERAL, CParser.STRING_LITERAL, CParser.HEX_LITERAL, CParser.DECIMAL_LITERAL, CParser.OCTAL_LITERAL, CParser.FLOATING_POINT_LITERAL]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 490\r
-                self.assignment_expression()\r
-                pass\r
-            elif token in [CParser.T__0]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 491\r
-                self.match(CParser.T__0)\r
-                self.state = 492\r
-                self.initializer_list()\r
-                self.state = 494\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__3:\r
-                    self.state = 493\r
-                    self.match(CParser.T__3)\r
-\r
-\r
-                self.state = 496\r
-                self.match(CParser.T__19)\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                        elif LA95 == 40:\r
+                            LA95_254 = self.input.LA(3)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class Initializer_listContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                        elif LA95 == 41:\r
+                            LA95_255 = self.input.LA(3)\r
 \r
-        def initializer(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.InitializerContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.InitializerContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_initializer_list\r
+                        elif LA95 == 42:\r
+                            LA95_256 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInitializer_list" ):\r
-                listener.enterInitializer_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInitializer_list" ):\r
-                listener.exitInitializer_list(self)\r
 \r
+                        elif LA95 == 45 or LA95 == 46:\r
+                            LA95_257 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def initializer_list(self):\r
+                        elif LA95 == 48:\r
+                            LA95_258 = self.input.LA(3)\r
 \r
-        localctx = CParser.Initializer_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 68, self.RULE_initializer_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 500\r
-            self.initializer()\r
-            self.state = 505\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,62,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 501\r
-                    self.match(CParser.T__3)\r
-                    self.state = 502\r
-                    self.initializer() \r
-                self.state = 507\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,62,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class Argument_expression_listContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def assignment_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Assignment_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Assignment_expressionContext,i)\r
+                    elif LA95 == 72:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == IDENTIFIER:\r
+                            LA95_259 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_argument_expression_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterArgument_expression_list" ):\r
-                listener.enterArgument_expression_list(self)\r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_260 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitArgument_expression_list" ):\r
-                listener.exitArgument_expression_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_261 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def argument_expression_list(self):\r
 \r
-        localctx = CParser.Argument_expression_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 70, self.RULE_argument_expression_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 508\r
-            self.assignment_expression()\r
-            self.state = 510\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__28:\r
-                self.state = 509\r
-                self.match(CParser.T__28)\r
-\r
-\r
-            self.state = 519\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 512\r
-                self.match(CParser.T__3)\r
-                self.state = 513\r
-                self.assignment_expression()\r
-                self.state = 515\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__28:\r
-                    self.state = 514\r
-                    self.match(CParser.T__28)\r
-\r
-\r
-                self.state = 521\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_262 = self.input.LA(3)\r
 \r
-    class Additive_expressionContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def multiplicative_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Multiplicative_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Multiplicative_expressionContext,i)\r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_263 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_additive_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAdditive_expression" ):\r
-                listener.enterAdditive_expression(self)\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_264 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAdditive_expression" ):\r
-                listener.exitAdditive_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_265 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def additive_expression(self):\r
 \r
-        localctx = CParser.Additive_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 72, self.RULE_additive_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 522\r
-            self.multiplicative_expression()\r
-            self.state = 529\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__43 or _la==CParser.T__44:\r
-                self.state = 527\r
-                self._errHandler.sync(self)\r
-                token = self._input.LA(1)\r
-                if token in [CParser.T__43]:\r
-                    self.state = 523\r
-                    self.match(CParser.T__43)\r
-                    self.state = 524\r
-                    self.multiplicative_expression()\r
-                    pass\r
-                elif token in [CParser.T__44]:\r
-                    self.state = 525\r
-                    self.match(CParser.T__44)\r
-                    self.state = 526\r
-                    self.multiplicative_expression()\r
-                    pass\r
-                else:\r
-                    raise NoViableAltException(self)\r
+                        elif LA95 == 62:\r
+                            LA95_266 = self.input.LA(3)\r
 \r
-                self.state = 531\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Multiplicative_expressionContext(ParserRuleContext):\r
+                        elif LA95 == 72:\r
+                            LA95_267 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def cast_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Cast_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Cast_expressionContext,i)\r
 \r
+                        elif LA95 == 73:\r
+                            LA95_268 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_multiplicative_expression\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterMultiplicative_expression" ):\r
-                listener.enterMultiplicative_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitMultiplicative_expression" ):\r
-                listener.exitMultiplicative_expression(self)\r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_269 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 74:\r
+                            LA95_270 = self.input.LA(3)\r
 \r
-    def multiplicative_expression(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Multiplicative_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 74, self.RULE_multiplicative_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 532\r
-            self.cast_expression()\r
-            self.state = 541\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__41) | (1 << CParser.T__45) | (1 << CParser.T__46))) != 0):\r
-                self.state = 539\r
-                self._errHandler.sync(self)\r
-                token = self._input.LA(1)\r
-                if token in [CParser.T__41]:\r
-                    self.state = 533\r
-                    self.match(CParser.T__41)\r
-                    self.state = 534\r
-                    self.cast_expression()\r
-                    pass\r
-                elif token in [CParser.T__45]:\r
-                    self.state = 535\r
-                    self.match(CParser.T__45)\r
-                    self.state = 536\r
-                    self.cast_expression()\r
-                    pass\r
-                elif token in [CParser.T__46]:\r
-                    self.state = 537\r
-                    self.match(CParser.T__46)\r
-                    self.state = 538\r
-                    self.cast_expression()\r
-                    pass\r
-                else:\r
-                    raise NoViableAltException(self)\r
 \r
-                self.state = 543\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                    elif LA95 == 73:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == IDENTIFIER:\r
+                            LA95_271 = self.input.LA(3)\r
 \r
-    class Cast_expressionContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def type_name(self):\r
-            return self.getTypedRuleContext(CParser.Type_nameContext,0)\r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_272 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def cast_expression(self):\r
-            return self.getTypedRuleContext(CParser.Cast_expressionContext,0)\r
 \r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_273 = self.input.LA(3)\r
 \r
-        def unary_expression(self):\r
-            return self.getTypedRuleContext(CParser.Unary_expressionContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_cast_expression\r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_274 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterCast_expression" ):\r
-                listener.enterCast_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitCast_expression" ):\r
-                listener.exitCast_expression(self)\r
 \r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_275 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def cast_expression(self):\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_276 = self.input.LA(3)\r
 \r
-        localctx = CParser.Cast_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 76, self.RULE_cast_expression)\r
-        try:\r
-            self.state = 550\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,70,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 544\r
-                self.match(CParser.T__37)\r
-                self.state = 545\r
-                self.type_name()\r
-                self.state = 546\r
-                self.match(CParser.T__38)\r
-                self.state = 547\r
-                self.cast_expression()\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 549\r
-                self.unary_expression()\r
-                pass\r
 \r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_277 = self.input.LA(3)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class Unary_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                        elif LA95 == 62:\r
+                            LA95_278 = self.input.LA(3)\r
 \r
-        def postfix_expression(self):\r
-            return self.getTypedRuleContext(CParser.Postfix_expressionContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def unary_expression(self):\r
-            return self.getTypedRuleContext(CParser.Unary_expressionContext,0)\r
+                        elif LA95 == 72:\r
+                            LA95_279 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def unary_operator(self):\r
-            return self.getTypedRuleContext(CParser.Unary_operatorContext,0)\r
 \r
+                        elif LA95 == 73:\r
+                            LA95_280 = self.input.LA(3)\r
 \r
-        def cast_expression(self):\r
-            return self.getTypedRuleContext(CParser.Cast_expressionContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def type_name(self):\r
-            return self.getTypedRuleContext(CParser.Type_nameContext,0)\r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_281 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_unary_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterUnary_expression" ):\r
-                listener.enterUnary_expression(self)\r
+                        elif LA95 == 74:\r
+                            LA95_282 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitUnary_expression" ):\r
-                listener.exitUnary_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
 \r
+                    elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 62:\r
+                            LA95_283 = self.input.LA(3)\r
 \r
-    def unary_expression(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Unary_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 78, self.RULE_unary_expression)\r
-        try:\r
-            self.state = 567\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,71,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 552\r
-                self.postfix_expression()\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 553\r
-                self.match(CParser.T__47)\r
-                self.state = 554\r
-                self.unary_expression()\r
-                pass\r
 \r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 555\r
-                self.match(CParser.T__48)\r
-                self.state = 556\r
-                self.unary_expression()\r
-                pass\r
+                        elif LA95 == IDENTIFIER:\r
+                            LA95_284 = self.input.LA(3)\r
 \r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 557\r
-                self.unary_operator()\r
-                self.state = 558\r
-                self.cast_expression()\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 560\r
-                self.match(CParser.T__49)\r
-                self.state = 561\r
-                self.unary_expression()\r
-                pass\r
-\r
-            elif la_ == 6:\r
-                self.enterOuterAlt(localctx, 6)\r
-                self.state = 562\r
-                self.match(CParser.T__49)\r
-                self.state = 563\r
-                self.match(CParser.T__37)\r
-                self.state = 564\r
-                self.type_name()\r
-                self.state = 565\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
-\r
-    class Postfix_expressionContext(ParserRuleContext):\r
-\r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.FuncCallText = ''\r
-            self.p = None # Primary_expressionContext\r
-            self.a = None # Token\r
-            self.c = None # Argument_expression_listContext\r
-            self.b = None # Token\r
-            self.x = None # Token\r
-            self.y = None # Token\r
-            self.z = None # Token\r
-\r
-        def primary_expression(self):\r
-            return self.getTypedRuleContext(CParser.Primary_expressionContext,0)\r
-\r
-\r
-        def expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.ExpressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.ExpressionContext,i)\r
 \r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_285 = self.input.LA(3)\r
 \r
-        def macro_parameter_list(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Macro_parameter_listContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Macro_parameter_listContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def argument_expression_list(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Argument_expression_listContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Argument_expression_listContext,i)\r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_286 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def IDENTIFIER(self, i:int=None):\r
-            if i is None:\r
-                return self.getTokens(CParser.IDENTIFIER)\r
-            else:\r
-                return self.getToken(CParser.IDENTIFIER, i)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_postfix_expression\r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_287 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterPostfix_expression" ):\r
-                listener.enterPostfix_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitPostfix_expression" ):\r
-                listener.exitPostfix_expression(self)\r
 \r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_288 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def postfix_expression(self):\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_289 = self.input.LA(3)\r
 \r
-        localctx = CParser.Postfix_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 80, self.RULE_postfix_expression)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        self.FuncCallText=''\r
-            \r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 569\r
-            localctx.p = self.primary_expression()\r
-            self.FuncCallText += (None if localctx.p is None else self._input.getText((localctx.p.start,localctx.p.stop)))\r
-            self.state = 600\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,73,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 598\r
-                    self._errHandler.sync(self)\r
-                    la_ = self._interp.adaptivePredict(self._input,72,self._ctx)\r
-                    if la_ == 1:\r
-                        self.state = 571\r
-                        self.match(CParser.T__39)\r
-                        self.state = 572\r
-                        self.expression()\r
-                        self.state = 573\r
-                        self.match(CParser.T__40)\r
-                        pass\r
-\r
-                    elif la_ == 2:\r
-                        self.state = 575\r
-                        self.match(CParser.T__37)\r
-                        self.state = 576\r
-                        localctx.a = self.match(CParser.T__38)\r
-                        self.StoreFunctionCalling((None if localctx.p is None else localctx.p.start).line, (None if localctx.p is None else localctx.p.start).column, (0 if localctx.a is None else localctx.a.line), localctx.a.column, self.FuncCallText, '')\r
-                        pass\r
-\r
-                    elif la_ == 3:\r
-                        self.state = 578\r
-                        self.match(CParser.T__37)\r
-                        self.state = 579\r
-                        localctx.c = self.argument_expression_list()\r
-                        self.state = 580\r
-                        localctx.b = self.match(CParser.T__38)\r
-                        self.StoreFunctionCalling((None if localctx.p is None else localctx.p.start).line, (None if localctx.p is None else localctx.p.start).column, (0 if localctx.b is None else localctx.b.line), localctx.b.column, self.FuncCallText, (None if localctx.c is None else self._input.getText((localctx.c.start,localctx.c.stop))))\r
-                        pass\r
-\r
-                    elif la_ == 4:\r
-                        self.state = 583\r
-                        self.match(CParser.T__37)\r
-                        self.state = 584\r
-                        self.macro_parameter_list()\r
-                        self.state = 585\r
-                        self.match(CParser.T__38)\r
-                        pass\r
-\r
-                    elif la_ == 5:\r
-                        self.state = 587\r
-                        self.match(CParser.T__50)\r
-                        self.state = 588\r
-                        localctx.x = self.match(CParser.IDENTIFIER)\r
-                        self.FuncCallText += '.' + (None if localctx.x is None else localctx.x.text)\r
-                        pass\r
-\r
-                    elif la_ == 6:\r
-                        self.state = 590\r
-                        self.match(CParser.T__41)\r
-                        self.state = 591\r
-                        localctx.y = self.match(CParser.IDENTIFIER)\r
-                        self.FuncCallText = (None if localctx.y is None else localctx.y.text)\r
-                        pass\r
-\r
-                    elif la_ == 7:\r
-                        self.state = 593\r
-                        self.match(CParser.T__51)\r
-                        self.state = 594\r
-                        localctx.z = self.match(CParser.IDENTIFIER)\r
-                        self.FuncCallText += '->' + (None if localctx.z is None else localctx.z.text)\r
-                        pass\r
-\r
-                    elif la_ == 8:\r
-                        self.state = 596\r
-                        self.match(CParser.T__47)\r
-                        pass\r
-\r
-                    elif la_ == 9:\r
-                        self.state = 597\r
-                        self.match(CParser.T__48)\r
-                        pass\r
-\r
-             \r
-                self.state = 602\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,73,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Macro_parameter_listContext(ParserRuleContext):\r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_290 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def parameter_declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Parameter_declarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Parameter_declarationContext,i)\r
 \r
+                        elif LA95 == 72:\r
+                            LA95_291 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_macro_parameter_list\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterMacro_parameter_list" ):\r
-                listener.enterMacro_parameter_list(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitMacro_parameter_list" ):\r
-                listener.exitMacro_parameter_list(self)\r
+                        elif LA95 == 73:\r
+                            LA95_292 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_293 = self.input.LA(3)\r
 \r
-    def macro_parameter_list(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Macro_parameter_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 82, self.RULE_macro_parameter_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 603\r
-            self.parameter_declaration()\r
-            self.state = 608\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 604\r
-                self.match(CParser.T__3)\r
-                self.state = 605\r
-                self.parameter_declaration()\r
-                self.state = 610\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Unary_operatorContext(ParserRuleContext):\r
+                        elif LA95 == 74:\r
+                            LA95_294 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_unary_operator\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterUnary_operator" ):\r
-                listener.enterUnary_operator(self)\r
+                    elif LA95 == 74:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 62:\r
+                            LA95_295 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitUnary_operator" ):\r
-                listener.exitUnary_operator(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == IDENTIFIER:\r
+                            LA95_296 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def unary_operator(self):\r
 \r
-        localctx = CParser.Unary_operatorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 84, self.RULE_unary_operator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 611\r
-            _la = self._input.LA(1)\r
-            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__41) | (1 << CParser.T__43) | (1 << CParser.T__44) | (1 << CParser.T__52) | (1 << CParser.T__53) | (1 << CParser.T__54))) != 0)):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_297 = self.input.LA(3)\r
 \r
-    class Primary_expressionContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_298 = self.input.LA(3)\r
 \r
-        def constant(self):\r
-            return self.getTypedRuleContext(CParser.ConstantContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_299 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_primary_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterPrimary_expression" ):\r
-                listener.enterPrimary_expression(self)\r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_300 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitPrimary_expression" ):\r
-                listener.exitPrimary_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_301 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def primary_expression(self):\r
 \r
-        localctx = CParser.Primary_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 86, self.RULE_primary_expression)\r
-        try:\r
-            self.state = 619\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,75,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 613\r
-                self.match(CParser.IDENTIFIER)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 614\r
-                self.constant()\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 615\r
-                self.match(CParser.T__37)\r
-                self.state = 616\r
-                self.expression()\r
-                self.state = 617\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_302 = self.input.LA(3)\r
 \r
-    class ConstantContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def HEX_LITERAL(self):\r
-            return self.getToken(CParser.HEX_LITERAL, 0)\r
+                        elif LA95 == 72:\r
+                            LA95_303 = self.input.LA(3)\r
 \r
-        def OCTAL_LITERAL(self):\r
-            return self.getToken(CParser.OCTAL_LITERAL, 0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def DECIMAL_LITERAL(self):\r
-            return self.getToken(CParser.DECIMAL_LITERAL, 0)\r
 \r
-        def CHARACTER_LITERAL(self):\r
-            return self.getToken(CParser.CHARACTER_LITERAL, 0)\r
+                        elif LA95 == 73:\r
+                            LA95_304 = self.input.LA(3)\r
 \r
-        def IDENTIFIER(self, i:int=None):\r
-            if i is None:\r
-                return self.getTokens(CParser.IDENTIFIER)\r
-            else:\r
-                return self.getToken(CParser.IDENTIFIER, i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def STRING_LITERAL(self, i:int=None):\r
-            if i is None:\r
-                return self.getTokens(CParser.STRING_LITERAL)\r
-            else:\r
-                return self.getToken(CParser.STRING_LITERAL, i)\r
 \r
-        def FLOATING_POINT_LITERAL(self):\r
-            return self.getToken(CParser.FLOATING_POINT_LITERAL, 0)\r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_305 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_constant\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterConstant" ):\r
-                listener.enterConstant(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitConstant" ):\r
-                listener.exitConstant(self)\r
+                        elif LA95 == 74:\r
+                            LA95_306 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
 \r
-    def constant(self):\r
+                    elif LA95 == 25 or LA95 == 26 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 43 or LA95 == 45 or LA95 == 46 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61 or LA95 == 103 or LA95 == 104 or LA95 == 105 or LA95 == 106 or LA95 == 107 or LA95 == 108 or LA95 == 110 or LA95 == 111 or LA95 == 112 or LA95 == 113 or LA95 == 114 or LA95 == 115 or LA95 == 116 or LA95 == 117:\r
+                        alt95 = 1\r
 \r
-        localctx = CParser.ConstantContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 88, self.RULE_constant)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 647\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.HEX_LITERAL]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 621\r
-                self.match(CParser.HEX_LITERAL)\r
-                pass\r
-            elif token in [CParser.OCTAL_LITERAL]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 622\r
-                self.match(CParser.OCTAL_LITERAL)\r
-                pass\r
-            elif token in [CParser.DECIMAL_LITERAL]:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 623\r
-                self.match(CParser.DECIMAL_LITERAL)\r
-                pass\r
-            elif token in [CParser.CHARACTER_LITERAL]:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 624\r
-                self.match(CParser.CHARACTER_LITERAL)\r
-                pass\r
-            elif token in [CParser.IDENTIFIER, CParser.STRING_LITERAL]:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 636 \r
-                self._errHandler.sync(self)\r
-                _alt = 1\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt == 1:\r
-                        self.state = 628\r
-                        self._errHandler.sync(self)\r
-                        _la = self._input.LA(1)\r
-                        while _la==CParser.IDENTIFIER:\r
-                            self.state = 625\r
-                            self.match(CParser.IDENTIFIER)\r
-                            self.state = 630\r
-                            self._errHandler.sync(self)\r
-                            _la = self._input.LA(1)\r
-\r
-                        self.state = 632 \r
-                        self._errHandler.sync(self)\r
-                        _alt = 1\r
-                        while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                            if _alt == 1:\r
-                                self.state = 631\r
-                                self.match(CParser.STRING_LITERAL)\r
-\r
-                            else:\r
-                                raise NoViableAltException(self)\r
-                            self.state = 634 \r
-                            self._errHandler.sync(self)\r
-                            _alt = self._interp.adaptivePredict(self._input,77,self._ctx)\r
+                    if alt95 == 1:\r
+                        # C.g:0:0: statement\r
+                        self.following.append(self.FOLLOW_statement_in_statement_list2242)\r
+                        self.statement()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
 \r
 \r
                     else:\r
-                        raise NoViableAltException(self)\r
-                    self.state = 638 \r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,78,self._ctx)\r
-\r
-                self.state = 643\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while _la==CParser.IDENTIFIER:\r
-                    self.state = 640\r
-                    self.match(CParser.IDENTIFIER)\r
-                    self.state = 645\r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
-\r
-                pass\r
-            elif token in [CParser.FLOATING_POINT_LITERAL]:\r
-                self.enterOuterAlt(localctx, 6)\r
-                self.state = 646\r
-                self.match(CParser.FLOATING_POINT_LITERAL)\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                        if cnt95 >= 1:\r
+                            break #loop95\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
-    class ExpressionContext(ParserRuleContext):\r
+                        eee = EarlyExitException(95, self.input)\r
+                        raise eee\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                    cnt95 += 1\r
 \r
-        def assignment_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Assignment_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Assignment_expressionContext,i)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterExpression" ):\r
-                listener.enterExpression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitExpression" ):\r
-                listener.exitExpression(self)\r
 \r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 67, statement_list_StartIndex)\r
 \r
+            pass\r
 \r
+        return\r
 \r
-    def expression(self):\r
+    # $ANTLR end statement_list\r
 \r
-        localctx = CParser.ExpressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 90, self.RULE_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 649\r
-            self.assignment_expression()\r
-            self.state = 654\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 650\r
-                self.match(CParser.T__3)\r
-                self.state = 651\r
-                self.assignment_expression()\r
-                self.state = 656\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    class expression_statement_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
 \r
-    class Constant_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def conditional_expression(self):\r
-            return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)\r
+    # $ANTLR start expression_statement\r
+    # C.g:561:1: expression_statement : ( ';' | expression ';' );\r
+    def expression_statement(self, ):\r
+\r
+        retval = self.expression_statement_return()\r
+        retval.start = self.input.LT(1)\r
+        expression_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 68):\r
+                    return retval\r
+\r
+                # C.g:562:2: ( ';' | expression ';' )\r
+                alt96 = 2\r
+                LA96_0 = self.input.LA(1)\r
+\r
+                if (LA96_0 == 25) :\r
+                    alt96 = 1\r
+                elif ((IDENTIFIER <= LA96_0 <= FLOATING_POINT_LITERAL) or LA96_0 == 62 or LA96_0 == 66 or (68 <= LA96_0 <= 69) or (72 <= LA96_0 <= 74) or (77 <= LA96_0 <= 79)) :\r
+                    alt96 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
 \r
+                    nvae = NoViableAltException("561:1: expression_statement : ( ';' | expression ';' );", 96, 0, self.input)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_constant_expression\r
+                    raise nvae\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterConstant_expression" ):\r
-                listener.enterConstant_expression(self)\r
+                if alt96 == 1:\r
+                    # C.g:562:4: ';'\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2254)\r
+                    if self.failed:\r
+                        return retval\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitConstant_expression" ):\r
-                listener.exitConstant_expression(self)\r
 \r
+                elif alt96 == 2:\r
+                    # C.g:563:4: expression ';'\r
+                    self.following.append(self.FOLLOW_expression_in_expression_statement2259)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2261)\r
+                    if self.failed:\r
+                        return retval\r
 \r
 \r
+                retval.stop = self.input.LT(-1)\r
 \r
-    def constant_expression(self):\r
 \r
-        localctx = CParser.Constant_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 92, self.RULE_constant_expression)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 657\r
-            self.conditional_expression()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 68, expression_statement_StartIndex)\r
 \r
-    class Assignment_expressionContext(ParserRuleContext):\r
+            pass\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+        return retval\r
 \r
-        def lvalue(self):\r
-            return self.getTypedRuleContext(CParser.LvalueContext,0)\r
+    # $ANTLR end expression_statement\r
 \r
 \r
-        def assignment_operator(self):\r
-            return self.getTypedRuleContext(CParser.Assignment_operatorContext,0)\r
+    # $ANTLR start selection_statement\r
+    # C.g:566:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement );\r
+    def selection_statement(self, ):\r
 \r
+        selection_statement_StartIndex = self.input.index()\r
+        e = None\r
 \r
-        def assignment_expression(self):\r
-            return self.getTypedRuleContext(CParser.Assignment_expressionContext,0)\r
+\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 69):\r
+                    return\r
+\r
+                # C.g:567:2: ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement )\r
+                alt98 = 2\r
+                LA98_0 = self.input.LA(1)\r
+\r
+                if (LA98_0 == 108) :\r
+                    alt98 = 1\r
+                elif (LA98_0 == 110) :\r
+                    alt98 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("566:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement );", 98, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt98 == 1:\r
+                    # C.g:567:4: 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )?\r
+                    self.match(self.input, 108, self.FOLLOW_108_in_selection_statement2272)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2274)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_selection_statement2278)\r
+                    e = self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_selection_statement2280)\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
+\r
+                    self.following.append(self.FOLLOW_statement_in_selection_statement2284)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:567:167: ( options {k=1; backtrack=false; } : 'else' statement )?\r
+                    alt97 = 2\r
+                    LA97_0 = self.input.LA(1)\r
+\r
+                    if (LA97_0 == 109) :\r
+                        alt97 = 1\r
+                    if alt97 == 1:\r
+                        # C.g:567:200: 'else' statement\r
+                        self.match(self.input, 109, self.FOLLOW_109_in_selection_statement2299)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_statement_in_selection_statement2301)\r
+                        self.statement()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt98 == 2:\r
+                    # C.g:568:4: 'switch' '(' expression ')' statement\r
+                    self.match(self.input, 110, self.FOLLOW_110_in_selection_statement2308)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2310)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_selection_statement2312)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_selection_statement2314)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_selection_statement2316)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
 \r
 \r
-        def conditional_expression(self):\r
-            return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)\r
 \r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 69, selection_statement_StartIndex)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_assignment_expression\r
+            pass\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAssignment_expression" ):\r
-                listener.enterAssignment_expression(self)\r
+        return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAssignment_expression" ):\r
-                listener.exitAssignment_expression(self)\r
+    # $ANTLR end selection_statement\r
 \r
 \r
+    # $ANTLR start iteration_statement\r
+    # C.g:571:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement );\r
+    def iteration_statement(self, ):\r
 \r
+        iteration_statement_StartIndex = self.input.index()\r
+        e = None\r
 \r
-    def assignment_expression(self):\r
 \r
-        localctx = CParser.Assignment_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 94, self.RULE_assignment_expression)\r
         try:\r
-            self.state = 664\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,82,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 659\r
-                self.lvalue()\r
-                self.state = 660\r
-                self.assignment_operator()\r
-                self.state = 661\r
-                self.assignment_expression()\r
-                pass\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 70):\r
+                    return\r
+\r
+                # C.g:572:2: ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement )\r
+                alt100 = 3\r
+                LA100 = self.input.LA(1)\r
+                if LA100 == 111:\r
+                    alt100 = 1\r
+                elif LA100 == 112:\r
+                    alt100 = 2\r
+                elif LA100 == 113:\r
+                    alt100 = 3\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("571:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement );", 100, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt100 == 1:\r
+                    # C.g:572:4: 'while' '(' e= expression ')' statement\r
+                    self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2327)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2329)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_iteration_statement2333)\r
+                    e = self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2335)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_iteration_statement2337)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 663\r
-                self.conditional_expression()\r
-                pass\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                elif alt100 == 2:\r
+                    # C.g:573:4: 'do' statement 'while' '(' e= expression ')' ';'\r
+                    self.match(self.input, 112, self.FOLLOW_112_in_iteration_statement2344)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_iteration_statement2346)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2348)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2350)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_iteration_statement2354)\r
+                    e = self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2356)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_iteration_statement2358)\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
+\r
+\r
+\r
+                elif alt100 == 3:\r
+                    # C.g:574:4: 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement\r
+                    self.match(self.input, 113, self.FOLLOW_113_in_iteration_statement2365)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2367)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2369)\r
+                    self.expression_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2373)\r
+                    e = self.expression_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:574:58: ( expression )?\r
+                    alt99 = 2\r
+                    LA99_0 = self.input.LA(1)\r
+\r
+                    if ((IDENTIFIER <= LA99_0 <= FLOATING_POINT_LITERAL) or LA99_0 == 62 or LA99_0 == 66 or (68 <= LA99_0 <= 69) or (72 <= LA99_0 <= 74) or (77 <= LA99_0 <= 79)) :\r
+                        alt99 = 1\r
+                    if alt99 == 1:\r
+                        # C.g:0:0: expression\r
+                        self.following.append(self.FOLLOW_expression_in_iteration_statement2375)\r
+                        self.expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
 \r
-    class LvalueContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2378)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_iteration_statement2380)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
 \r
-        def unary_expression(self):\r
-            return self.getTypedRuleContext(CParser.Unary_expressionContext,0)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_lvalue\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterLvalue" ):\r
-                listener.enterLvalue(self)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 70, iteration_statement_StartIndex)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitLvalue" ):\r
-                listener.exitLvalue(self)\r
+            pass\r
 \r
+        return\r
 \r
+    # $ANTLR end iteration_statement\r
 \r
 \r
-    def lvalue(self):\r
+    # $ANTLR start jump_statement\r
+    # C.g:577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );\r
+    def jump_statement(self, ):\r
 \r
-        localctx = CParser.LvalueContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 96, self.RULE_lvalue)\r
+        jump_statement_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 666\r
-            self.unary_expression()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 71):\r
+                    return\r
+\r
+                # C.g:578:2: ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' )\r
+                alt101 = 5\r
+                LA101 = self.input.LA(1)\r
+                if LA101 == 114:\r
+                    alt101 = 1\r
+                elif LA101 == 115:\r
+                    alt101 = 2\r
+                elif LA101 == 116:\r
+                    alt101 = 3\r
+                elif LA101 == 117:\r
+                    LA101_4 = self.input.LA(2)\r
+\r
+                    if (LA101_4 == 25) :\r
+                        alt101 = 4\r
+                    elif ((IDENTIFIER <= LA101_4 <= FLOATING_POINT_LITERAL) or LA101_4 == 62 or LA101_4 == 66 or (68 <= LA101_4 <= 69) or (72 <= LA101_4 <= 74) or (77 <= LA101_4 <= 79)) :\r
+                        alt101 = 5\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 4, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt101 == 1:\r
+                    # C.g:578:4: 'goto' IDENTIFIER ';'\r
+                    self.match(self.input, 114, self.FOLLOW_114_in_jump_statement2393)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_jump_statement2395)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2397)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt101 == 2:\r
+                    # C.g:579:4: 'continue' ';'\r
+                    self.match(self.input, 115, self.FOLLOW_115_in_jump_statement2402)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2404)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt101 == 3:\r
+                    # C.g:580:4: 'break' ';'\r
+                    self.match(self.input, 116, self.FOLLOW_116_in_jump_statement2409)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2411)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt101 == 4:\r
+                    # C.g:581:4: 'return' ';'\r
+                    self.match(self.input, 117, self.FOLLOW_117_in_jump_statement2416)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2418)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt101 == 5:\r
+                    # C.g:582:4: 'return' expression ';'\r
+                    self.match(self.input, 117, self.FOLLOW_117_in_jump_statement2423)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_jump_statement2425)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2427)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 71, jump_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end jump_statement\r
+\r
+    # $ANTLR start synpred2\r
+    def synpred2_fragment(self, ):\r
+        # C.g:119:6: ( declaration_specifiers )\r
+        # C.g:119:6: declaration_specifiers\r
+        self.following.append(self.FOLLOW_declaration_specifiers_in_synpred2100)\r
+        self.declaration_specifiers()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+\r
+\r
+    # $ANTLR end synpred2\r
+\r
+\r
+\r
+    # $ANTLR start synpred4\r
+    def synpred4_fragment(self, ):\r
+        # C.g:119:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )\r
+        # C.g:119:6: ( declaration_specifiers )? declarator ( declaration )* '{'\r
+        # C.g:119:6: ( declaration_specifiers )?\r
+        alt102 = 2\r
+        LA102 = self.input.LA(1)\r
+        if LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33 or LA102 == 34 or LA102 == 35 or LA102 == 36 or LA102 == 37 or LA102 == 38 or LA102 == 39 or LA102 == 40 or LA102 == 41 or LA102 == 42 or LA102 == 45 or LA102 == 46 or LA102 == 48 or LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57 or LA102 == 61:\r
+            alt102 = 1\r
+        elif LA102 == IDENTIFIER:\r
+            LA102 = self.input.LA(2)\r
+            if LA102 == 62:\r
+                LA102_21 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33:\r
+                LA102_23 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 34:\r
+                LA102_24 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 35:\r
+                LA102_25 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 36:\r
+                LA102_26 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 37:\r
+                LA102_27 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 38:\r
+                LA102_28 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 39:\r
+                LA102_29 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 40:\r
+                LA102_30 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 41:\r
+                LA102_31 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 42:\r
+                LA102_32 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 45 or LA102 == 46:\r
+                LA102_33 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 48:\r
+                LA102_34 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == IDENTIFIER:\r
+                LA102_35 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 58:\r
+                LA102_36 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 66:\r
+                alt102 = 1\r
+            elif LA102 == 59:\r
+                LA102_39 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 60:\r
+                LA102_40 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57 or LA102 == 61:\r
+                LA102_41 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+        elif LA102 == 58:\r
+            LA102_14 = self.input.LA(2)\r
+\r
+            if (self.synpred2()) :\r
+                alt102 = 1\r
+        elif LA102 == 59:\r
+            LA102_16 = self.input.LA(2)\r
+\r
+            if (self.synpred2()) :\r
+                alt102 = 1\r
+        elif LA102 == 60:\r
+            LA102_17 = self.input.LA(2)\r
+\r
+            if (self.synpred2()) :\r
+                alt102 = 1\r
+        if alt102 == 1:\r
+            # C.g:0:0: declaration_specifiers\r
+            self.following.append(self.FOLLOW_declaration_specifiers_in_synpred4100)\r
+            self.declaration_specifiers()\r
+            self.following.pop()\r
+            if self.failed:\r
+                return\r
+\r
+\r
+\r
+        self.following.append(self.FOLLOW_declarator_in_synpred4103)\r
+        self.declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        # C.g:119:41: ( declaration )*\r
+        while True: #loop103\r
+            alt103 = 2\r
+            LA103_0 = self.input.LA(1)\r
+\r
+            if (LA103_0 == IDENTIFIER or LA103_0 == 26 or (29 <= LA103_0 <= 42) or (45 <= LA103_0 <= 46) or (48 <= LA103_0 <= 61)) :\r
+                alt103 = 1\r
+\r
+\r
+            if alt103 == 1:\r
+                # C.g:0:0: declaration\r
+                self.following.append(self.FOLLOW_declaration_in_synpred4105)\r
+                self.declaration()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
-    class Assignment_operatorContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+            else:\r
+                break #loop103\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_assignment_operator\r
+        self.match(self.input, 43, self.FOLLOW_43_in_synpred4108)\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAssignment_operator" ):\r
-                listener.enterAssignment_operator(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAssignment_operator" ):\r
-                listener.exitAssignment_operator(self)\r
+    # $ANTLR end synpred4\r
 \r
 \r
 \r
+    # $ANTLR start synpred5\r
+    def synpred5_fragment(self, ):\r
+        # C.g:120:4: ( declaration )\r
+        # C.g:120:4: declaration\r
+        self.following.append(self.FOLLOW_declaration_in_synpred5118)\r
+        self.declaration()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    def assignment_operator(self):\r
 \r
-        localctx = CParser.Assignment_operatorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 98, self.RULE_assignment_operator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 668\r
-            _la = self._input.LA(1)\r
-            if not(((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (CParser.T__4 - 5)) | (1 << (CParser.T__55 - 5)) | (1 << (CParser.T__56 - 5)) | (1 << (CParser.T__57 - 5)) | (1 << (CParser.T__58 - 5)) | (1 << (CParser.T__59 - 5)) | (1 << (CParser.T__60 - 5)) | (1 << (CParser.T__61 - 5)) | (1 << (CParser.T__62 - 5)) | (1 << (CParser.T__63 - 5)) | (1 << (CParser.T__64 - 5)))) != 0)):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred5\r
 \r
-    class Conditional_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.e = None # Logical_or_expressionContext\r
 \r
-        def logical_or_expression(self):\r
-            return self.getTypedRuleContext(CParser.Logical_or_expressionContext,0)\r
+    # $ANTLR start synpred7\r
+    def synpred7_fragment(self, ):\r
+        # C.g:146:6: ( declaration_specifiers )\r
+        # C.g:146:6: declaration_specifiers\r
+        self.following.append(self.FOLLOW_declaration_specifiers_in_synpred7157)\r
+        self.declaration_specifiers()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+    # $ANTLR end synpred7\r
 \r
 \r
-        def conditional_expression(self):\r
-            return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)\r
 \r
+    # $ANTLR start synpred10\r
+    def synpred10_fragment(self, ):\r
+        # C.g:167:18: ( declaration_specifiers )\r
+        # C.g:167:18: declaration_specifiers\r
+        self.following.append(self.FOLLOW_declaration_specifiers_in_synpred10207)\r
+        self.declaration_specifiers()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_conditional_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterConditional_expression" ):\r
-                listener.enterConditional_expression(self)\r
+    # $ANTLR end synpred10\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitConditional_expression" ):\r
-                listener.exitConditional_expression(self)\r
 \r
 \r
+    # $ANTLR start synpred14\r
+    def synpred14_fragment(self, ):\r
+        # C.g:184:7: ( type_specifier )\r
+        # C.g:184:7: type_specifier\r
+        self.following.append(self.FOLLOW_type_specifier_in_synpred14272)\r
+        self.type_specifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-    def conditional_expression(self):\r
+    # $ANTLR end synpred14\r
 \r
-        localctx = CParser.Conditional_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 100, self.RULE_conditional_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 670\r
-            localctx.e = self.logical_or_expression()\r
-            self.state = 677\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__65:\r
-                self.state = 671\r
-                self.match(CParser.T__65)\r
-                self.state = 672\r
-                self.expression()\r
-                self.state = 673\r
-                self.match(CParser.T__22)\r
-                self.state = 674\r
-                self.conditional_expression()\r
-                self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred15\r
+    def synpred15_fragment(self, ):\r
+        # C.g:185:13: ( type_qualifier )\r
+        # C.g:185:13: type_qualifier\r
+        self.following.append(self.FOLLOW_type_qualifier_in_synpred15286)\r
+        self.type_qualifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    class Logical_or_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred15\r
 \r
-        def logical_and_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Logical_and_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Logical_and_expressionContext,i)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_logical_or_expression\r
+    # $ANTLR start synpred33\r
+    def synpred33_fragment(self, ):\r
+        # C.g:225:16: ( type_qualifier )\r
+        # C.g:225:16: type_qualifier\r
+        self.following.append(self.FOLLOW_type_qualifier_in_synpred33444)\r
+        self.type_qualifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterLogical_or_expression" ):\r
-                listener.enterLogical_or_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitLogical_or_expression" ):\r
-                listener.exitLogical_or_expression(self)\r
+    # $ANTLR end synpred33\r
 \r
 \r
 \r
+    # $ANTLR start synpred34\r
+    def synpred34_fragment(self, ):\r
+        # C.g:225:4: ( IDENTIFIER ( type_qualifier )* declarator )\r
+        # C.g:225:5: IDENTIFIER ( type_qualifier )* declarator\r
+        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred34442)\r
+        if self.failed:\r
+            return\r
+        # C.g:225:16: ( type_qualifier )*\r
+        while True: #loop106\r
+            alt106 = 2\r
+            LA106 = self.input.LA(1)\r
+            if LA106 == 58:\r
+                LA106_2 = self.input.LA(2)\r
 \r
-    def logical_or_expression(self):\r
+                if (self.synpred33()) :\r
+                    alt106 = 1\r
 \r
-        localctx = CParser.Logical_or_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 102, self.RULE_logical_or_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 679\r
-            self.logical_and_expression()\r
-            self.state = 684\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__66:\r
-                self.state = 680\r
-                self.match(CParser.T__66)\r
-                self.state = 681\r
-                self.logical_and_expression()\r
-                self.state = 686\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Logical_and_expressionContext(ParserRuleContext):\r
+            elif LA106 == 59:\r
+                LA106_3 = self.input.LA(2)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                if (self.synpred33()) :\r
+                    alt106 = 1\r
 \r
-        def inclusive_or_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Inclusive_or_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Inclusive_or_expressionContext,i)\r
 \r
+            elif LA106 == 60:\r
+                LA106_4 = self.input.LA(2)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_logical_and_expression\r
+                if (self.synpred33()) :\r
+                    alt106 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterLogical_and_expression" ):\r
-                listener.enterLogical_and_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitLogical_and_expression" ):\r
-                listener.exitLogical_and_expression(self)\r
+            elif LA106 == 49 or LA106 == 50 or LA106 == 51 or LA106 == 52 or LA106 == 53 or LA106 == 54 or LA106 == 55 or LA106 == 56 or LA106 == 57 or LA106 == 61:\r
+                alt106 = 1\r
 \r
+            if alt106 == 1:\r
+                # C.g:0:0: type_qualifier\r
+                self.following.append(self.FOLLOW_type_qualifier_in_synpred34444)\r
+                self.type_qualifier()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
 \r
+            else:\r
+                break #loop106\r
 \r
-    def logical_and_expression(self):\r
 \r
-        localctx = CParser.Logical_and_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 104, self.RULE_logical_and_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 687\r
-            self.inclusive_or_expression()\r
-            self.state = 692\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__67:\r
-                self.state = 688\r
-                self.match(CParser.T__67)\r
-                self.state = 689\r
-                self.inclusive_or_expression()\r
-                self.state = 694\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+        self.following.append(self.FOLLOW_declarator_in_synpred34447)\r
+        self.declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    class Inclusive_or_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred34\r
 \r
-        def exclusive_or_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Exclusive_or_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Exclusive_or_expressionContext,i)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_inclusive_or_expression\r
+    # $ANTLR start synpred39\r
+    def synpred39_fragment(self, ):\r
+        # C.g:253:6: ( type_qualifier )\r
+        # C.g:253:6: type_qualifier\r
+        self.following.append(self.FOLLOW_type_qualifier_in_synpred39566)\r
+        self.type_qualifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInclusive_or_expression" ):\r
-                listener.enterInclusive_or_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInclusive_or_expression" ):\r
-                listener.exitInclusive_or_expression(self)\r
+    # $ANTLR end synpred39\r
 \r
 \r
 \r
+    # $ANTLR start synpred40\r
+    def synpred40_fragment(self, ):\r
+        # C.g:253:23: ( type_specifier )\r
+        # C.g:253:23: type_specifier\r
+        self.following.append(self.FOLLOW_type_specifier_in_synpred40570)\r
+        self.type_specifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    def inclusive_or_expression(self):\r
 \r
-        localctx = CParser.Inclusive_or_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 106, self.RULE_inclusive_or_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 695\r
-            self.exclusive_or_expression()\r
-            self.state = 700\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__68:\r
-                self.state = 696\r
-                self.match(CParser.T__68)\r
-                self.state = 697\r
-                self.exclusive_or_expression()\r
-                self.state = 702\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred40\r
 \r
-    class Exclusive_or_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def and_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.And_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.And_expressionContext,i)\r
+    # $ANTLR start synpred66\r
+    def synpred66_fragment(self, ):\r
+        # C.g:297:4: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator )\r
+        # C.g:297:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator\r
+        # C.g:297:4: ( pointer )?\r
+        alt111 = 2\r
+        LA111_0 = self.input.LA(1)\r
 \r
+        if (LA111_0 == 66) :\r
+            alt111 = 1\r
+        if alt111 == 1:\r
+            # C.g:0:0: pointer\r
+            self.following.append(self.FOLLOW_pointer_in_synpred66784)\r
+            self.pointer()\r
+            self.following.pop()\r
+            if self.failed:\r
+                return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_exclusive_or_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterExclusive_or_expression" ):\r
-                listener.enterExclusive_or_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitExclusive_or_expression" ):\r
-                listener.exitExclusive_or_expression(self)\r
+        # C.g:297:13: ( 'EFIAPI' )?\r
+        alt112 = 2\r
+        LA112_0 = self.input.LA(1)\r
 \r
+        if (LA112_0 == 58) :\r
+            alt112 = 1\r
+        if alt112 == 1:\r
+            # C.g:297:14: 'EFIAPI'\r
+            self.match(self.input, 58, self.FOLLOW_58_in_synpred66788)\r
+            if self.failed:\r
+                return\r
 \r
 \r
 \r
-    def exclusive_or_expression(self):\r
+        # C.g:297:25: ( 'EFI_BOOTSERVICE' )?\r
+        alt113 = 2\r
+        LA113_0 = self.input.LA(1)\r
 \r
-        localctx = CParser.Exclusive_or_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 108, self.RULE_exclusive_or_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 703\r
-            self.and_expression()\r
-            self.state = 708\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__69:\r
-                self.state = 704\r
-                self.match(CParser.T__69)\r
-                self.state = 705\r
-                self.and_expression()\r
-                self.state = 710\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+        if (LA113_0 == 59) :\r
+            alt113 = 1\r
+        if alt113 == 1:\r
+            # C.g:297:26: 'EFI_BOOTSERVICE'\r
+            self.match(self.input, 59, self.FOLLOW_59_in_synpred66793)\r
+            if self.failed:\r
+                return\r
 \r
-    class And_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def equality_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Equality_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Equality_expressionContext,i)\r
+        # C.g:297:46: ( 'EFI_RUNTIMESERVICE' )?\r
+        alt114 = 2\r
+        LA114_0 = self.input.LA(1)\r
 \r
+        if (LA114_0 == 60) :\r
+            alt114 = 1\r
+        if alt114 == 1:\r
+            # C.g:297:47: 'EFI_RUNTIMESERVICE'\r
+            self.match(self.input, 60, self.FOLLOW_60_in_synpred66798)\r
+            if self.failed:\r
+                return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_and_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAnd_expression" ):\r
-                listener.enterAnd_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAnd_expression" ):\r
-                listener.exitAnd_expression(self)\r
+        self.following.append(self.FOLLOW_direct_declarator_in_synpred66802)\r
+        self.direct_declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred66\r
 \r
 \r
-    def and_expression(self):\r
 \r
-        localctx = CParser.And_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 110, self.RULE_and_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 711\r
-            self.equality_expression()\r
-            self.state = 716\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__52:\r
-                self.state = 712\r
-                self.match(CParser.T__52)\r
-                self.state = 713\r
-                self.equality_expression()\r
-                self.state = 718\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred67\r
+    def synpred67_fragment(self, ):\r
+        # C.g:303:15: ( declarator_suffix )\r
+        # C.g:303:15: declarator_suffix\r
+        self.following.append(self.FOLLOW_declarator_suffix_in_synpred67821)\r
+        self.declarator_suffix()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    class Equality_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred67\r
 \r
-        def relational_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Relational_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Relational_expressionContext,i)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_equality_expression\r
+    # $ANTLR start synpred69\r
+    def synpred69_fragment(self, ):\r
+        # C.g:304:9: ( 'EFIAPI' )\r
+        # C.g:304:9: 'EFIAPI'\r
+        self.match(self.input, 58, self.FOLLOW_58_in_synpred69830)\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterEquality_expression" ):\r
-                listener.enterEquality_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitEquality_expression" ):\r
-                listener.exitEquality_expression(self)\r
+    # $ANTLR end synpred69\r
 \r
 \r
 \r
+    # $ANTLR start synpred70\r
+    def synpred70_fragment(self, ):\r
+        # C.g:304:35: ( declarator_suffix )\r
+        # C.g:304:35: declarator_suffix\r
+        self.following.append(self.FOLLOW_declarator_suffix_in_synpred70838)\r
+        self.declarator_suffix()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    def equality_expression(self):\r
 \r
-        localctx = CParser.Equality_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 112, self.RULE_equality_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 719\r
-            self.relational_expression()\r
-            self.state = 724\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__70 or _la==CParser.T__71:\r
-                self.state = 720\r
-                _la = self._input.LA(1)\r
-                if not(_la==CParser.T__70 or _la==CParser.T__71):\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 721\r
-                self.relational_expression()\r
-                self.state = 726\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred70\r
 \r
-    class Relational_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def shift_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Shift_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Shift_expressionContext,i)\r
+    # $ANTLR start synpred73\r
+    def synpred73_fragment(self, ):\r
+        # C.g:310:9: ( '(' parameter_type_list ')' )\r
+        # C.g:310:9: '(' parameter_type_list ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred73878)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_parameter_type_list_in_synpred73880)\r
+        self.parameter_type_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred73882)\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_relational_expression\r
+    # $ANTLR end synpred73\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterRelational_expression" ):\r
-                listener.enterRelational_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitRelational_expression" ):\r
-                listener.exitRelational_expression(self)\r
 \r
+    # $ANTLR start synpred74\r
+    def synpred74_fragment(self, ):\r
+        # C.g:311:9: ( '(' identifier_list ')' )\r
+        # C.g:311:9: '(' identifier_list ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred74892)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_identifier_list_in_synpred74894)\r
+        self.identifier_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred74896)\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred74\r
 \r
-    def relational_expression(self):\r
 \r
-        localctx = CParser.Relational_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 114, self.RULE_relational_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 727\r
-            self.shift_expression()\r
-            self.state = 732\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & ((1 << (CParser.T__72 - 73)) | (1 << (CParser.T__73 - 73)) | (1 << (CParser.T__74 - 73)) | (1 << (CParser.T__75 - 73)))) != 0):\r
-                self.state = 728\r
-                _la = self._input.LA(1)\r
-                if not(((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & ((1 << (CParser.T__72 - 73)) | (1 << (CParser.T__73 - 73)) | (1 << (CParser.T__74 - 73)) | (1 << (CParser.T__75 - 73)))) != 0)):\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 729\r
-                self.shift_expression()\r
-                self.state = 734\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Shift_expressionContext(ParserRuleContext):\r
+    # $ANTLR start synpred75\r
+    def synpred75_fragment(self, ):\r
+        # C.g:316:8: ( type_qualifier )\r
+        # C.g:316:8: type_qualifier\r
+        self.following.append(self.FOLLOW_type_qualifier_in_synpred75921)\r
+        self.type_qualifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def additive_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Additive_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Additive_expressionContext,i)\r
+    # $ANTLR end synpred75\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_shift_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterShift_expression" ):\r
-                listener.enterShift_expression(self)\r
+    # $ANTLR start synpred76\r
+    def synpred76_fragment(self, ):\r
+        # C.g:316:24: ( pointer )\r
+        # C.g:316:24: pointer\r
+        self.following.append(self.FOLLOW_pointer_in_synpred76924)\r
+        self.pointer()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitShift_expression" ):\r
-                listener.exitShift_expression(self)\r
 \r
+    # $ANTLR end synpred76\r
 \r
 \r
 \r
-    def shift_expression(self):\r
+    # $ANTLR start synpred77\r
+    def synpred77_fragment(self, ):\r
+        # C.g:316:4: ( '*' ( type_qualifier )+ ( pointer )? )\r
+        # C.g:316:4: '*' ( type_qualifier )+ ( pointer )?\r
+        self.match(self.input, 66, self.FOLLOW_66_in_synpred77919)\r
+        if self.failed:\r
+            return\r
+        # C.g:316:8: ( type_qualifier )+\r
+        cnt116 = 0\r
+        while True: #loop116\r
+            alt116 = 2\r
+            LA116_0 = self.input.LA(1)\r
 \r
-        localctx = CParser.Shift_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 116, self.RULE_shift_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 735\r
-            self.additive_expression()\r
-            self.state = 740\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__76 or _la==CParser.T__77:\r
-                self.state = 736\r
-                _la = self._input.LA(1)\r
-                if not(_la==CParser.T__76 or _la==CParser.T__77):\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 737\r
-                self.additive_expression()\r
-                self.state = 742\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if ((49 <= LA116_0 <= 61)) :\r
+                alt116 = 1\r
 \r
-    class StatementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+            if alt116 == 1:\r
+                # C.g:0:0: type_qualifier\r
+                self.following.append(self.FOLLOW_type_qualifier_in_synpred77921)\r
+                self.type_qualifier()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
-        def labeled_statement(self):\r
-            return self.getTypedRuleContext(CParser.Labeled_statementContext,0)\r
 \r
+            else:\r
+                if cnt116 >= 1:\r
+                    break #loop116\r
 \r
-        def compound_statement(self):\r
-            return self.getTypedRuleContext(CParser.Compound_statementContext,0)\r
+                if self.backtracking > 0:\r
+                    self.failed = True\r
+                    return\r
 \r
+                eee = EarlyExitException(116, self.input)\r
+                raise eee\r
 \r
-        def expression_statement(self):\r
-            return self.getTypedRuleContext(CParser.Expression_statementContext,0)\r
+            cnt116 += 1\r
 \r
 \r
-        def selection_statement(self):\r
-            return self.getTypedRuleContext(CParser.Selection_statementContext,0)\r
+        # C.g:316:24: ( pointer )?\r
+        alt117 = 2\r
+        LA117_0 = self.input.LA(1)\r
 \r
+        if (LA117_0 == 66) :\r
+            alt117 = 1\r
+        if alt117 == 1:\r
+            # C.g:0:0: pointer\r
+            self.following.append(self.FOLLOW_pointer_in_synpred77924)\r
+            self.pointer()\r
+            self.following.pop()\r
+            if self.failed:\r
+                return\r
 \r
-        def iteration_statement(self):\r
-            return self.getTypedRuleContext(CParser.Iteration_statementContext,0)\r
 \r
 \r
-        def jump_statement(self):\r
-            return self.getTypedRuleContext(CParser.Jump_statementContext,0)\r
 \r
 \r
-        def macro_statement(self):\r
-            return self.getTypedRuleContext(CParser.Macro_statementContext,0)\r
+    # $ANTLR end synpred77\r
 \r
 \r
-        def asm2_statement(self):\r
-            return self.getTypedRuleContext(CParser.Asm2_statementContext,0)\r
 \r
+    # $ANTLR start synpred78\r
+    def synpred78_fragment(self, ):\r
+        # C.g:317:4: ( '*' pointer )\r
+        # C.g:317:4: '*' pointer\r
+        self.match(self.input, 66, self.FOLLOW_66_in_synpred78930)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_pointer_in_synpred78932)\r
+        self.pointer()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def asm1_statement(self):\r
-            return self.getTypedRuleContext(CParser.Asm1_statementContext,0)\r
 \r
+    # $ANTLR end synpred78\r
 \r
-        def asm_statement(self):\r
-            return self.getTypedRuleContext(CParser.Asm_statementContext,0)\r
 \r
 \r
-        def declaration(self):\r
-            return self.getTypedRuleContext(CParser.DeclarationContext,0)\r
+    # $ANTLR start synpred81\r
+    def synpred81_fragment(self, ):\r
+        # C.g:326:32: ( 'OPTIONAL' )\r
+        # C.g:326:32: 'OPTIONAL'\r
+        self.match(self.input, 53, self.FOLLOW_53_in_synpred81977)\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_statement\r
+    # $ANTLR end synpred81\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStatement" ):\r
-                listener.enterStatement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStatement" ):\r
-                listener.exitStatement(self)\r
 \r
+    # $ANTLR start synpred82\r
+    def synpred82_fragment(self, ):\r
+        # C.g:326:27: ( ',' ( 'OPTIONAL' )? parameter_declaration )\r
+        # C.g:326:27: ',' ( 'OPTIONAL' )? parameter_declaration\r
+        self.match(self.input, 27, self.FOLLOW_27_in_synpred82974)\r
+        if self.failed:\r
+            return\r
+        # C.g:326:31: ( 'OPTIONAL' )?\r
+        alt119 = 2\r
+        LA119_0 = self.input.LA(1)\r
 \r
+        if (LA119_0 == 53) :\r
+            LA119_1 = self.input.LA(2)\r
 \r
+            if (self.synpred81()) :\r
+                alt119 = 1\r
+        if alt119 == 1:\r
+            # C.g:326:32: 'OPTIONAL'\r
+            self.match(self.input, 53, self.FOLLOW_53_in_synpred82977)\r
+            if self.failed:\r
+                return\r
 \r
-    def statement(self):\r
 \r
-        localctx = CParser.StatementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 118, self.RULE_statement)\r
-        try:\r
-            self.state = 754\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,92,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 743\r
-                self.labeled_statement()\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 744\r
-                self.compound_statement()\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 745\r
-                self.expression_statement()\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 746\r
-                self.selection_statement()\r
-                pass\r
-\r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 747\r
-                self.iteration_statement()\r
-                pass\r
-\r
-            elif la_ == 6:\r
-                self.enterOuterAlt(localctx, 6)\r
-                self.state = 748\r
-                self.jump_statement()\r
-                pass\r
-\r
-            elif la_ == 7:\r
-                self.enterOuterAlt(localctx, 7)\r
-                self.state = 749\r
-                self.macro_statement()\r
-                pass\r
-\r
-            elif la_ == 8:\r
-                self.enterOuterAlt(localctx, 8)\r
-                self.state = 750\r
-                self.asm2_statement()\r
-                pass\r
-\r
-            elif la_ == 9:\r
-                self.enterOuterAlt(localctx, 9)\r
-                self.state = 751\r
-                self.asm1_statement()\r
-                pass\r
-\r
-            elif la_ == 10:\r
-                self.enterOuterAlt(localctx, 10)\r
-                self.state = 752\r
-                self.asm_statement()\r
-                pass\r
-\r
-            elif la_ == 11:\r
-                self.enterOuterAlt(localctx, 11)\r
-                self.state = 753\r
-                self.declaration()\r
-                pass\r
 \r
+        self.following.append(self.FOLLOW_parameter_declaration_in_synpred82981)\r
+        self.parameter_declaration()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Asm2_statementContext(ParserRuleContext):\r
+    # $ANTLR end synpred82\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_asm2_statement\r
+    # $ANTLR start synpred83\r
+    def synpred83_fragment(self, ):\r
+        # C.g:330:28: ( declarator )\r
+        # C.g:330:28: declarator\r
+        self.following.append(self.FOLLOW_declarator_in_synpred83997)\r
+        self.declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAsm2_statement" ):\r
-                listener.enterAsm2_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAsm2_statement" ):\r
-                listener.exitAsm2_statement(self)\r
+    # $ANTLR end synpred83\r
 \r
 \r
 \r
+    # $ANTLR start synpred84\r
+    def synpred84_fragment(self, ):\r
+        # C.g:330:39: ( abstract_declarator )\r
+        # C.g:330:39: abstract_declarator\r
+        self.following.append(self.FOLLOW_abstract_declarator_in_synpred84999)\r
+        self.abstract_declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    def asm2_statement(self):\r
 \r
-        localctx = CParser.Asm2_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 120, self.RULE_asm2_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 757\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__78:\r
-                self.state = 756\r
-                self.match(CParser.T__78)\r
-\r
-\r
-            self.state = 759\r
-            self.match(CParser.IDENTIFIER)\r
-            self.state = 760\r
-            self.match(CParser.T__37)\r
-            self.state = 764\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,94,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 761\r
-                    _la = self._input.LA(1)\r
-                    if _la <= 0 or _la==CParser.T__1:\r
-                        self._errHandler.recoverInline(self)\r
-                    else:\r
-                        self._errHandler.reportMatch(self)\r
-                        self.consume() \r
-                self.state = 766\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,94,self._ctx)\r
-\r
-            self.state = 767\r
-            self.match(CParser.T__38)\r
-            self.state = 768\r
-            self.match(CParser.T__1)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred84\r
 \r
-    class Asm1_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
+    # $ANTLR start synpred86\r
+    def synpred86_fragment(self, ):\r
+        # C.g:330:4: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? )\r
+        # C.g:330:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )?\r
+        self.following.append(self.FOLLOW_declaration_specifiers_in_synpred86994)\r
+        self.declaration_specifiers()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        # C.g:330:27: ( declarator | abstract_declarator )*\r
+        while True: #loop120\r
+            alt120 = 3\r
+            LA120 = self.input.LA(1)\r
+            if LA120 == 66:\r
+                LA120_3 = self.input.LA(2)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_asm1_statement\r
+                if (self.synpred83()) :\r
+                    alt120 = 1\r
+                elif (self.synpred84()) :\r
+                    alt120 = 2\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAsm1_statement" ):\r
-                listener.enterAsm1_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAsm1_statement" ):\r
-                listener.exitAsm1_statement(self)\r
+            elif LA120 == IDENTIFIER or LA120 == 58 or LA120 == 59 or LA120 == 60:\r
+                alt120 = 1\r
+            elif LA120 == 62:\r
+                LA120 = self.input.LA(2)\r
+                if LA120 == 29 or LA120 == 30 or LA120 == 31 or LA120 == 32 or LA120 == 33 or LA120 == 34 or LA120 == 35 or LA120 == 36 or LA120 == 37 or LA120 == 38 or LA120 == 39 or LA120 == 40 or LA120 == 41 or LA120 == 42 or LA120 == 45 or LA120 == 46 or LA120 == 48 or LA120 == 49 or LA120 == 50 or LA120 == 51 or LA120 == 52 or LA120 == 53 or LA120 == 54 or LA120 == 55 or LA120 == 56 or LA120 == 57 or LA120 == 61 or LA120 == 63 or LA120 == 64:\r
+                    alt120 = 2\r
+                elif LA120 == 58:\r
+                    LA120_21 = self.input.LA(3)\r
 \r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
 \r
+                elif LA120 == 66:\r
+                    LA120_22 = self.input.LA(3)\r
 \r
-    def asm1_statement(self):\r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
-        localctx = CParser.Asm1_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 122, self.RULE_asm1_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 770\r
-            self.match(CParser.T__79)\r
-            self.state = 771\r
-            self.match(CParser.T__0)\r
-            self.state = 775\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__22) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36) | (1 << CParser.T__37) | (1 << CParser.T__38) | (1 << CParser.T__39) | (1 << CParser.T__40) | (1 << CParser.T__41) | (1 << CParser.T__42) | (1 << CParser.T__43) | (1 << CParser.T__44) | (1 << CParser.T__45) | (1 << CParser.T__46) | (1 << CParser.T__47) | (1 << CParser.T__48) | (1 << CParser.T__49) | (1 << CParser.T__50) | (1 << CParser.T__51) | (1 << CParser.T__52) | (1 << CParser.T__53) | (1 << CParser.T__54) | (1 << CParser.T__55) | (1 << CParser.T__56) | (1 << CParser.T__57) | (1 << CParser.T__58) | (1 << CParser.T__59) | (1 << CParser.T__60) | (1 << CParser.T__61) | (1 << CParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (CParser.T__63 - 64)) | (1 << (CParser.T__64 - 64)) | (1 << (CParser.T__65 - 64)) | (1 << (CParser.T__66 - 64)) | (1 << (CParser.T__67 - 64)) | (1 << (CParser.T__68 - 64)) | (1 << (CParser.T__69 - 64)) | (1 << (CParser.T__70 - 64)) | (1 << (CParser.T__71 - 64)) | (1 << (CParser.T__72 - 64)) | (1 << (CParser.T__73 - 64)) | (1 << (CParser.T__74 - 64)) | (1 << (CParser.T__75 - 64)) | (1 << (CParser.T__76 - 64)) | (1 << (CParser.T__77 - 64)) | (1 << (CParser.T__78 - 64)) | (1 << (CParser.T__79 - 64)) | (1 << (CParser.T__80 - 64)) | (1 << (CParser.T__81 - 64)) | (1 << (CParser.T__82 - 64)) | (1 << (CParser.T__83 - 64)) | (1 << (CParser.T__84 - 64)) | (1 << (CParser.T__85 - 64)) | (1 << (CParser.T__86 - 64)) | (1 << (CParser.T__87 - 64)) | (1 << (CParser.T__88 - 64)) | (1 << (CParser.T__89 - 64)) | (1 << (CParser.T__90 - 64)) | (1 << (CParser.T__91 - 64)) | (1 << (CParser.IDENTIFIER - 64)) | (1 << (CParser.CHARACTER_LITERAL - 64)) | (1 << (CParser.STRING_LITERAL - 64)) | (1 << (CParser.HEX_LITERAL - 64)) | (1 << (CParser.DECIMAL_LITERAL - 64)) | (1 << (CParser.OCTAL_LITERAL - 64)) | (1 << (CParser.FLOATING_POINT_LITERAL - 64)) | (1 << (CParser.WS - 64)) | (1 << (CParser.BS - 64)) | (1 << (CParser.UnicodeVocabulary - 64)) | (1 << (CParser.COMMENT - 64)) | (1 << (CParser.LINE_COMMENT - 64)) | (1 << (CParser.LINE_COMMAND - 64)))) != 0):\r
-                self.state = 772\r
-                _la = self._input.LA(1)\r
-                if _la <= 0 or _la==CParser.T__19:\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 777\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-            self.state = 778\r
-            self.match(CParser.T__19)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Asm_statementContext(ParserRuleContext):\r
+                elif LA120 == 59:\r
+                    LA120_23 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_asm_statement\r
+                elif LA120 == 60:\r
+                    LA120_24 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAsm_statement" ):\r
-                listener.enterAsm_statement(self)\r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAsm_statement" ):\r
-                listener.exitAsm_statement(self)\r
 \r
+                elif LA120 == IDENTIFIER:\r
+                    LA120_25 = self.input.LA(3)\r
 \r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
 \r
-    def asm_statement(self):\r
+                elif LA120 == 62:\r
+                    LA120_26 = self.input.LA(3)\r
 \r
-        localctx = CParser.Asm_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 124, self.RULE_asm_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 780\r
-            self.match(CParser.T__80)\r
-            self.state = 781\r
-            self.match(CParser.T__0)\r
-            self.state = 785\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__22) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36) | (1 << CParser.T__37) | (1 << CParser.T__38) | (1 << CParser.T__39) | (1 << CParser.T__40) | (1 << CParser.T__41) | (1 << CParser.T__42) | (1 << CParser.T__43) | (1 << CParser.T__44) | (1 << CParser.T__45) | (1 << CParser.T__46) | (1 << CParser.T__47) | (1 << CParser.T__48) | (1 << CParser.T__49) | (1 << CParser.T__50) | (1 << CParser.T__51) | (1 << CParser.T__52) | (1 << CParser.T__53) | (1 << CParser.T__54) | (1 << CParser.T__55) | (1 << CParser.T__56) | (1 << CParser.T__57) | (1 << CParser.T__58) | (1 << CParser.T__59) | (1 << CParser.T__60) | (1 << CParser.T__61) | (1 << CParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (CParser.T__63 - 64)) | (1 << (CParser.T__64 - 64)) | (1 << (CParser.T__65 - 64)) | (1 << (CParser.T__66 - 64)) | (1 << (CParser.T__67 - 64)) | (1 << (CParser.T__68 - 64)) | (1 << (CParser.T__69 - 64)) | (1 << (CParser.T__70 - 64)) | (1 << (CParser.T__71 - 64)) | (1 << (CParser.T__72 - 64)) | (1 << (CParser.T__73 - 64)) | (1 << (CParser.T__74 - 64)) | (1 << (CParser.T__75 - 64)) | (1 << (CParser.T__76 - 64)) | (1 << (CParser.T__77 - 64)) | (1 << (CParser.T__78 - 64)) | (1 << (CParser.T__79 - 64)) | (1 << (CParser.T__80 - 64)) | (1 << (CParser.T__81 - 64)) | (1 << (CParser.T__82 - 64)) | (1 << (CParser.T__83 - 64)) | (1 << (CParser.T__84 - 64)) | (1 << (CParser.T__85 - 64)) | (1 << (CParser.T__86 - 64)) | (1 << (CParser.T__87 - 64)) | (1 << (CParser.T__88 - 64)) | (1 << (CParser.T__89 - 64)) | (1 << (CParser.T__90 - 64)) | (1 << (CParser.T__91 - 64)) | (1 << (CParser.IDENTIFIER - 64)) | (1 << (CParser.CHARACTER_LITERAL - 64)) | (1 << (CParser.STRING_LITERAL - 64)) | (1 << (CParser.HEX_LITERAL - 64)) | (1 << (CParser.DECIMAL_LITERAL - 64)) | (1 << (CParser.OCTAL_LITERAL - 64)) | (1 << (CParser.FLOATING_POINT_LITERAL - 64)) | (1 << (CParser.WS - 64)) | (1 << (CParser.BS - 64)) | (1 << (CParser.UnicodeVocabulary - 64)) | (1 << (CParser.COMMENT - 64)) | (1 << (CParser.LINE_COMMENT - 64)) | (1 << (CParser.LINE_COMMAND - 64)))) != 0):\r
-                self.state = 782\r
-                _la = self._input.LA(1)\r
-                if _la <= 0 or _la==CParser.T__19:\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 787\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-            self.state = 788\r
-            self.match(CParser.T__19)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
-    class Macro_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+            elif LA120 == 64:\r
+                alt120 = 2\r
 \r
-        def declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclarationContext,i)\r
+            if alt120 == 1:\r
+                # C.g:330:28: declarator\r
+                self.following.append(self.FOLLOW_declarator_in_synpred86997)\r
+                self.declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
 \r
-        def statement_list(self):\r
-            return self.getTypedRuleContext(CParser.Statement_listContext,0)\r
+            elif alt120 == 2:\r
+                # C.g:330:39: abstract_declarator\r
+                self.following.append(self.FOLLOW_abstract_declarator_in_synpred86999)\r
+                self.abstract_declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+            else:\r
+                break #loop120\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_macro_statement\r
+        # C.g:330:61: ( 'OPTIONAL' )?\r
+        alt121 = 2\r
+        LA121_0 = self.input.LA(1)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterMacro_statement" ):\r
-                listener.enterMacro_statement(self)\r
+        if (LA121_0 == 53) :\r
+            alt121 = 1\r
+        if alt121 == 1:\r
+            # C.g:330:62: 'OPTIONAL'\r
+            self.match(self.input, 53, self.FOLLOW_53_in_synpred861004)\r
+            if self.failed:\r
+                return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitMacro_statement" ):\r
-                listener.exitMacro_statement(self)\r
 \r
 \r
 \r
 \r
-    def macro_statement(self):\r
+    # $ANTLR end synpred86\r
 \r
-        localctx = CParser.Macro_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 126, self.RULE_macro_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 790\r
-            self.match(CParser.IDENTIFIER)\r
-            self.state = 791\r
-            self.match(CParser.T__37)\r
-            self.state = 795\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,97,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 792\r
-                    self.declaration() \r
-                self.state = 797\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,97,self._ctx)\r
-\r
-            self.state = 799\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,98,self._ctx)\r
-            if la_ == 1:\r
-                self.state = 798\r
-                self.statement_list()\r
-\r
-\r
-            self.state = 802\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if ((((_la - 38)) & ~0x3f) == 0 and ((1 << (_la - 38)) & ((1 << (CParser.T__37 - 38)) | (1 << (CParser.T__41 - 38)) | (1 << (CParser.T__43 - 38)) | (1 << (CParser.T__44 - 38)) | (1 << (CParser.T__47 - 38)) | (1 << (CParser.T__48 - 38)) | (1 << (CParser.T__49 - 38)) | (1 << (CParser.T__52 - 38)) | (1 << (CParser.T__53 - 38)) | (1 << (CParser.T__54 - 38)) | (1 << (CParser.IDENTIFIER - 38)) | (1 << (CParser.CHARACTER_LITERAL - 38)) | (1 << (CParser.STRING_LITERAL - 38)) | (1 << (CParser.HEX_LITERAL - 38)) | (1 << (CParser.DECIMAL_LITERAL - 38)) | (1 << (CParser.OCTAL_LITERAL - 38)) | (1 << (CParser.FLOATING_POINT_LITERAL - 38)))) != 0):\r
-                self.state = 801\r
-                self.expression()\r
-\r
-\r
-            self.state = 804\r
-            self.match(CParser.T__38)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Labeled_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR start synpred90\r
+    def synpred90_fragment(self, ):\r
+        # C.g:341:4: ( specifier_qualifier_list ( abstract_declarator )? )\r
+        # C.g:341:4: specifier_qualifier_list ( abstract_declarator )?\r
+        self.following.append(self.FOLLOW_specifier_qualifier_list_in_synpred901046)\r
+        self.specifier_qualifier_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        # C.g:341:29: ( abstract_declarator )?\r
+        alt122 = 2\r
+        LA122_0 = self.input.LA(1)\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+        if (LA122_0 == 62 or LA122_0 == 64 or LA122_0 == 66) :\r
+            alt122 = 1\r
+        if alt122 == 1:\r
+            # C.g:0:0: abstract_declarator\r
+            self.following.append(self.FOLLOW_abstract_declarator_in_synpred901048)\r
+            self.abstract_declarator()\r
+            self.following.pop()\r
+            if self.failed:\r
+                return\r
 \r
-        def statement(self):\r
-            return self.getTypedRuleContext(CParser.StatementContext,0)\r
 \r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_labeled_statement\r
+    # $ANTLR end synpred90\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterLabeled_statement" ):\r
-                listener.enterLabeled_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitLabeled_statement" ):\r
-                listener.exitLabeled_statement(self)\r
 \r
+    # $ANTLR start synpred91\r
+    def synpred91_fragment(self, ):\r
+        # C.g:346:12: ( direct_abstract_declarator )\r
+        # C.g:346:12: direct_abstract_declarator\r
+        self.following.append(self.FOLLOW_direct_abstract_declarator_in_synpred911067)\r
+        self.direct_abstract_declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred91\r
 \r
-    def labeled_statement(self):\r
 \r
-        localctx = CParser.Labeled_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 128, self.RULE_labeled_statement)\r
-        try:\r
-            self.state = 817\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.IDENTIFIER]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 806\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 807\r
-                self.match(CParser.T__22)\r
-                self.state = 808\r
-                self.statement()\r
-                pass\r
-            elif token in [CParser.T__81]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 809\r
-                self.match(CParser.T__81)\r
-                self.state = 810\r
-                self.constant_expression()\r
-                self.state = 811\r
-                self.match(CParser.T__22)\r
-                self.state = 812\r
-                self.statement()\r
-                pass\r
-            elif token in [CParser.T__82]:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 814\r
-                self.match(CParser.T__82)\r
-                self.state = 815\r
-                self.match(CParser.T__22)\r
-                self.state = 816\r
-                self.statement()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred93\r
+    def synpred93_fragment(self, ):\r
+        # C.g:351:6: ( '(' abstract_declarator ')' )\r
+        # C.g:351:6: '(' abstract_declarator ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred931086)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_abstract_declarator_in_synpred931088)\r
+        self.abstract_declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred931090)\r
+        if self.failed:\r
+            return\r
 \r
-    class Compound_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred93\r
 \r
-        def declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclarationContext,i)\r
 \r
 \r
-        def statement_list(self):\r
-            return self.getTypedRuleContext(CParser.Statement_listContext,0)\r
+    # $ANTLR start synpred94\r
+    def synpred94_fragment(self, ):\r
+        # C.g:351:65: ( abstract_declarator_suffix )\r
+        # C.g:351:65: abstract_declarator_suffix\r
+        self.following.append(self.FOLLOW_abstract_declarator_suffix_in_synpred941098)\r
+        self.abstract_declarator_suffix()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_compound_statement\r
+    # $ANTLR end synpred94\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterCompound_statement" ):\r
-                listener.enterCompound_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitCompound_statement" ):\r
-                listener.exitCompound_statement(self)\r
 \r
+    # $ANTLR start synpred109\r
+    def synpred109_fragment(self, ):\r
+        # C.g:386:4: ( '(' type_name ')' cast_expression )\r
+        # C.g:386:4: '(' type_name ')' cast_expression\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred1091282)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_type_name_in_synpred1091284)\r
+        self.type_name()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred1091286)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_cast_expression_in_synpred1091288)\r
+        self.cast_expression()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred109\r
 \r
-    def compound_statement(self):\r
 \r
-        localctx = CParser.Compound_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 130, self.RULE_compound_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 819\r
-            self.match(CParser.T__0)\r
-            self.state = 823\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,101,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 820\r
-                    self.declaration() \r
-                self.state = 825\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,101,self._ctx)\r
-\r
-            self.state = 827\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36) | (1 << CParser.T__37) | (1 << CParser.T__41) | (1 << CParser.T__43) | (1 << CParser.T__44) | (1 << CParser.T__47) | (1 << CParser.T__48) | (1 << CParser.T__49) | (1 << CParser.T__52) | (1 << CParser.T__53) | (1 << CParser.T__54))) != 0) or ((((_la - 79)) & ~0x3f) == 0 and ((1 << (_la - 79)) & ((1 << (CParser.T__78 - 79)) | (1 << (CParser.T__79 - 79)) | (1 << (CParser.T__80 - 79)) | (1 << (CParser.T__81 - 79)) | (1 << (CParser.T__82 - 79)) | (1 << (CParser.T__83 - 79)) | (1 << (CParser.T__85 - 79)) | (1 << (CParser.T__86 - 79)) | (1 << (CParser.T__87 - 79)) | (1 << (CParser.T__88 - 79)) | (1 << (CParser.T__89 - 79)) | (1 << (CParser.T__90 - 79)) | (1 << (CParser.T__91 - 79)) | (1 << (CParser.IDENTIFIER - 79)) | (1 << (CParser.CHARACTER_LITERAL - 79)) | (1 << (CParser.STRING_LITERAL - 79)) | (1 << (CParser.HEX_LITERAL - 79)) | (1 << (CParser.DECIMAL_LITERAL - 79)) | (1 << (CParser.OCTAL_LITERAL - 79)) | (1 << (CParser.FLOATING_POINT_LITERAL - 79)))) != 0):\r
-                self.state = 826\r
-                self.statement_list()\r
-\r
-\r
-            self.state = 829\r
-            self.match(CParser.T__19)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Statement_listContext(ParserRuleContext):\r
+    # $ANTLR start synpred114\r
+    def synpred114_fragment(self, ):\r
+        # C.g:395:4: ( 'sizeof' unary_expression )\r
+        # C.g:395:4: 'sizeof' unary_expression\r
+        self.match(self.input, 74, self.FOLLOW_74_in_synpred1141330)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_unary_expression_in_synpred1141332)\r
+        self.unary_expression()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def statement(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.StatementContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.StatementContext,i)\r
+    # $ANTLR end synpred114\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_statement_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStatement_list" ):\r
-                listener.enterStatement_list(self)\r
+    # $ANTLR start synpred117\r
+    def synpred117_fragment(self, ):\r
+        # C.g:409:13: ( '(' argument_expression_list ')' )\r
+        # C.g:409:13: '(' argument_expression_list ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred1171420)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_argument_expression_list_in_synpred1171424)\r
+        self.argument_expression_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred1171428)\r
+        if self.failed:\r
+            return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStatement_list" ):\r
-                listener.exitStatement_list(self)\r
 \r
+    # $ANTLR end synpred117\r
 \r
 \r
 \r
-    def statement_list(self):\r
+    # $ANTLR start synpred118\r
+    def synpred118_fragment(self, ):\r
+        # C.g:410:13: ( '(' macro_parameter_list ')' )\r
+        # C.g:410:13: '(' macro_parameter_list ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred1181444)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_macro_parameter_list_in_synpred1181446)\r
+        self.macro_parameter_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred1181448)\r
+        if self.failed:\r
+            return\r
 \r
-        localctx = CParser.Statement_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 132, self.RULE_statement_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 832 \r
-            self._errHandler.sync(self)\r
-            _alt = 1\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt == 1:\r
-                    self.state = 831\r
-                    self.statement()\r
 \r
-                else:\r
-                    raise NoViableAltException(self)\r
-                self.state = 834 \r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,103,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred118\r
 \r
-    class Expression_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+    # $ANTLR start synpred120\r
+    def synpred120_fragment(self, ):\r
+        # C.g:412:13: ( '*' IDENTIFIER )\r
+        # C.g:412:13: '*' IDENTIFIER\r
+        self.match(self.input, 66, self.FOLLOW_66_in_synpred1201482)\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1201486)\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_expression_statement\r
+    # $ANTLR end synpred120\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterExpression_statement" ):\r
-                listener.enterExpression_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitExpression_statement" ):\r
-                listener.exitExpression_statement(self)\r
 \r
+    # $ANTLR start synpred137\r
+    def synpred137_fragment(self, ):\r
+        # C.g:443:20: ( STRING_LITERAL )\r
+        # C.g:443:20: STRING_LITERAL\r
+        self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1371683)\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred137\r
 \r
-    def expression_statement(self):\r
 \r
-        localctx = CParser.Expression_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 134, self.RULE_expression_statement)\r
-        try:\r
-            self.state = 840\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__1]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 836\r
-                self.match(CParser.T__1)\r
-                pass\r
-            elif token in [CParser.T__37, CParser.T__41, CParser.T__43, CParser.T__44, CParser.T__47, CParser.T__48, CParser.T__49, CParser.T__52, CParser.T__53, CParser.T__54, CParser.IDENTIFIER, CParser.CHARACTER_LITERAL, CParser.STRING_LITERAL, CParser.HEX_LITERAL, CParser.DECIMAL_LITERAL, CParser.OCTAL_LITERAL, CParser.FLOATING_POINT_LITERAL]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 837\r
-                self.expression()\r
-                self.state = 838\r
-                self.match(CParser.T__1)\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred138\r
+    def synpred138_fragment(self, ):\r
+        # C.g:443:8: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )\r
+        # C.g:443:8: ( IDENTIFIER )* ( STRING_LITERAL )+\r
+        # C.g:443:8: ( IDENTIFIER )*\r
+        while True: #loop125\r
+            alt125 = 2\r
+            LA125_0 = self.input.LA(1)\r
 \r
-    class Selection_statementContext(ParserRuleContext):\r
+            if (LA125_0 == IDENTIFIER) :\r
+                alt125 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.e = None # ExpressionContext\r
 \r
-        def statement(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.StatementContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.StatementContext,i)\r
+            if alt125 == 1:\r
+                # C.g:0:0: IDENTIFIER\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1381680)\r
+                if self.failed:\r
+                    return\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+            else:\r
+                break #loop125\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_selection_statement\r
+        # C.g:443:20: ( STRING_LITERAL )+\r
+        cnt126 = 0\r
+        while True: #loop126\r
+            alt126 = 2\r
+            LA126_0 = self.input.LA(1)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterSelection_statement" ):\r
-                listener.enterSelection_statement(self)\r
+            if (LA126_0 == STRING_LITERAL) :\r
+                alt126 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitSelection_statement" ):\r
-                listener.exitSelection_statement(self)\r
 \r
+            if alt126 == 1:\r
+                # C.g:0:0: STRING_LITERAL\r
+                self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1381683)\r
+                if self.failed:\r
+                    return\r
 \r
 \r
+            else:\r
+                if cnt126 >= 1:\r
+                    break #loop126\r
 \r
-    def selection_statement(self):\r
+                if self.backtracking > 0:\r
+                    self.failed = True\r
+                    return\r
 \r
-        localctx = CParser.Selection_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 136, self.RULE_selection_statement)\r
-        try:\r
-            self.state = 858\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__83]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 842\r
-                self.match(CParser.T__83)\r
-                self.state = 843\r
-                self.match(CParser.T__37)\r
-                self.state = 844\r
-                localctx.e = self.expression()\r
-                self.state = 845\r
-                self.match(CParser.T__38)\r
-                self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
-                self.state = 847\r
-                self.statement()\r
-                self.state = 850\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,105,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 848\r
-                    self.match(CParser.T__84)\r
-                    self.state = 849\r
-                    self.statement()\r
+                eee = EarlyExitException(126, self.input)\r
+                raise eee\r
 \r
+            cnt126 += 1\r
 \r
-                pass\r
-            elif token in [CParser.T__85]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 852\r
-                self.match(CParser.T__85)\r
-                self.state = 853\r
-                self.match(CParser.T__37)\r
-                self.state = 854\r
-                self.expression()\r
-                self.state = 855\r
-                self.match(CParser.T__38)\r
-                self.state = 856\r
-                self.statement()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Iteration_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.e = None # ExpressionContext\r
+    # $ANTLR end synpred138\r
 \r
-        def statement(self):\r
-            return self.getTypedRuleContext(CParser.StatementContext,0)\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+    # $ANTLR start synpred142\r
+    def synpred142_fragment(self, ):\r
+        # C.g:458:4: ( lvalue assignment_operator assignment_expression )\r
+        # C.g:458:4: lvalue assignment_operator assignment_expression\r
+        self.following.append(self.FOLLOW_lvalue_in_synpred1421744)\r
+        self.lvalue()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_assignment_operator_in_synpred1421746)\r
+        self.assignment_operator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_assignment_expression_in_synpred1421748)\r
+        self.assignment_expression()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_iteration_statement\r
+    # $ANTLR end synpred142\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterIteration_statement" ):\r
-                listener.enterIteration_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitIteration_statement" ):\r
-                listener.exitIteration_statement(self)\r
 \r
+    # $ANTLR start synpred169\r
+    def synpred169_fragment(self, ):\r
+        # C.g:520:4: ( expression_statement )\r
+        # C.g:520:4: expression_statement\r
+        self.following.append(self.FOLLOW_expression_statement_in_synpred1692035)\r
+        self.expression_statement()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred169\r
 \r
-    def iteration_statement(self):\r
 \r
-        localctx = CParser.Iteration_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 138, self.RULE_iteration_statement)\r
-        try:\r
-            self.state = 876\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__86]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 860\r
-                self.match(CParser.T__86)\r
-                self.state = 861\r
-                self.match(CParser.T__37)\r
-                self.state = 862\r
-                localctx.e = self.expression()\r
-                self.state = 863\r
-                self.match(CParser.T__38)\r
-                self.state = 864\r
-                self.statement()\r
-                self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
-                pass\r
-            elif token in [CParser.T__87]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 867\r
-                self.match(CParser.T__87)\r
-                self.state = 868\r
-                self.statement()\r
-                self.state = 869\r
-                self.match(CParser.T__86)\r
-                self.state = 870\r
-                self.match(CParser.T__37)\r
-                self.state = 871\r
-                localctx.e = self.expression()\r
-                self.state = 872\r
-                self.match(CParser.T__38)\r
-                self.state = 873\r
-                self.match(CParser.T__1)\r
-                self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred173\r
+    def synpred173_fragment(self, ):\r
+        # C.g:524:4: ( macro_statement )\r
+        # C.g:524:4: macro_statement\r
+        self.following.append(self.FOLLOW_macro_statement_in_synpred1732055)\r
+        self.macro_statement()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    class Jump_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred173\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
 \r
+    # $ANTLR start synpred174\r
+    def synpred174_fragment(self, ):\r
+        # C.g:525:4: ( asm2_statement )\r
+        # C.g:525:4: asm2_statement\r
+        self.following.append(self.FOLLOW_asm2_statement_in_synpred1742060)\r
+        self.asm2_statement()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_jump_statement\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterJump_statement" ):\r
-                listener.enterJump_statement(self)\r
+    # $ANTLR end synpred174\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitJump_statement" ):\r
-                listener.exitJump_statement(self)\r
 \r
 \r
+    # $ANTLR start synpred181\r
+    def synpred181_fragment(self, ):\r
+        # C.g:544:19: ( declaration )\r
+        # C.g:544:19: declaration\r
+        self.following.append(self.FOLLOW_declaration_in_synpred1812166)\r
+        self.declaration()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-    def jump_statement(self):\r
+    # $ANTLR end synpred181\r
 \r
-        localctx = CParser.Jump_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 140, self.RULE_jump_statement)\r
-        try:\r
-            self.state = 891\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,108,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 878\r
-                self.match(CParser.T__88)\r
-                self.state = 879\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 880\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 881\r
-                self.match(CParser.T__89)\r
-                self.state = 882\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 883\r
-                self.match(CParser.T__90)\r
-                self.state = 884\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 885\r
-                self.match(CParser.T__91)\r
-                self.state = 886\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 887\r
-                self.match(CParser.T__91)\r
-                self.state = 888\r
-                self.expression()\r
-                self.state = 889\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
 \r
+    # $ANTLR start synpred182\r
+    def synpred182_fragment(self, ):\r
+        # C.g:544:33: ( statement_list )\r
+        # C.g:544:33: statement_list\r
+        self.following.append(self.FOLLOW_statement_list_in_synpred1822170)\r
+        self.statement_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred182\r
+\r
+\r
+\r
+    # $ANTLR start synpred186\r
+    def synpred186_fragment(self, ):\r
+        # C.g:554:8: ( declaration )\r
+        # C.g:554:8: declaration\r
+        self.following.append(self.FOLLOW_declaration_in_synpred1862225)\r
+        self.declaration()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+\r
+\r
+    # $ANTLR end synpred186\r
+\r
+\r
+\r
+    # $ANTLR start synpred188\r
+    def synpred188_fragment(self, ):\r
+        # C.g:558:4: ( statement )\r
+        # C.g:558:4: statement\r
+        self.following.append(self.FOLLOW_statement_in_synpred1882242)\r
+        self.statement()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+\r
+\r
+    # $ANTLR end synpred188\r
+\r
+\r
+\r
+    def synpred69(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred69_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred81(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred81_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred82(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred82_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred66(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred66_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred83(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred83_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred84(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred84_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred67(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred67_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred86(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred86_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred120(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred120_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred40(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred40_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred142(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred142_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred182(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred182_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred109(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred109_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred181(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred181_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred186(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred186_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred188(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred188_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred169(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred169_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred117(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred117_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred70(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred70_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred118(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred118_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred34(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred34_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred33(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred33_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred94(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred94_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred39(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred39_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred74(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred74_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred114(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred114_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred93(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred93_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred75(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred75_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred137(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred137_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred90(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred90_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred138(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred138_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred91(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred91_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred73(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred73_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred5(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred5_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred78(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred78_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred7(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred7_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred76(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred76_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred77(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred77_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred2(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred2_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred4(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred4_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred174(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred174_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred173(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred173_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred14(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred14_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred15(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred15_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred10(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred10_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+\r
+\r
+\r
+\r
+    FOLLOW_external_declaration_in_translation_unit74 = frozenset([1, 4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66])\r
+    FOLLOW_function_definition_in_external_declaration113 = frozenset([1])\r
+    FOLLOW_declaration_in_external_declaration118 = frozenset([1])\r
+    FOLLOW_macro_statement_in_external_declaration123 = frozenset([1, 25])\r
+    FOLLOW_25_in_external_declaration126 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_function_definition157 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_declarator_in_function_definition160 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_declaration_in_function_definition166 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_compound_statement_in_function_definition171 = frozenset([1])\r
+    FOLLOW_compound_statement_in_function_definition180 = frozenset([1])\r
+    FOLLOW_26_in_declaration203 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66])\r
+    FOLLOW_declaration_specifiers_in_declaration207 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_init_declarator_list_in_declaration216 = frozenset([25])\r
+    FOLLOW_25_in_declaration220 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_declaration234 = frozenset([4, 25, 58, 59, 60, 62, 66])\r
+    FOLLOW_init_declarator_list_in_declaration238 = frozenset([25])\r
+    FOLLOW_25_in_declaration243 = frozenset([1])\r
+    FOLLOW_storage_class_specifier_in_declaration_specifiers264 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_specifier_in_declaration_specifiers272 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_qualifier_in_declaration_specifiers286 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_init_declarator_in_init_declarator_list308 = frozenset([1, 27])\r
+    FOLLOW_27_in_init_declarator_list311 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_init_declarator_in_init_declarator_list313 = frozenset([1, 27])\r
+    FOLLOW_declarator_in_init_declarator326 = frozenset([1, 28])\r
+    FOLLOW_28_in_init_declarator329 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_initializer_in_init_declarator331 = frozenset([1])\r
+    FOLLOW_set_in_storage_class_specifier0 = frozenset([1])\r
+    FOLLOW_34_in_type_specifier376 = frozenset([1])\r
+    FOLLOW_35_in_type_specifier381 = frozenset([1])\r
+    FOLLOW_36_in_type_specifier386 = frozenset([1])\r
+    FOLLOW_37_in_type_specifier391 = frozenset([1])\r
+    FOLLOW_38_in_type_specifier396 = frozenset([1])\r
+    FOLLOW_39_in_type_specifier401 = frozenset([1])\r
+    FOLLOW_40_in_type_specifier406 = frozenset([1])\r
+    FOLLOW_41_in_type_specifier411 = frozenset([1])\r
+    FOLLOW_42_in_type_specifier416 = frozenset([1])\r
+    FOLLOW_struct_or_union_specifier_in_type_specifier423 = frozenset([1])\r
+    FOLLOW_enum_specifier_in_type_specifier433 = frozenset([1])\r
+    FOLLOW_type_id_in_type_specifier451 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_type_id467 = frozenset([1])\r
+    FOLLOW_struct_or_union_in_struct_or_union_specifier494 = frozenset([4, 43])\r
+    FOLLOW_IDENTIFIER_in_struct_or_union_specifier496 = frozenset([43])\r
+    FOLLOW_43_in_struct_or_union_specifier499 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_struct_declaration_list_in_struct_or_union_specifier501 = frozenset([44])\r
+    FOLLOW_44_in_struct_or_union_specifier503 = frozenset([1])\r
+    FOLLOW_struct_or_union_in_struct_or_union_specifier508 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_struct_or_union_specifier510 = frozenset([1])\r
+    FOLLOW_set_in_struct_or_union0 = frozenset([1])\r
+    FOLLOW_struct_declaration_in_struct_declaration_list537 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_specifier_qualifier_list_in_struct_declaration549 = frozenset([4, 47, 58, 59, 60, 62, 66])\r
+    FOLLOW_struct_declarator_list_in_struct_declaration551 = frozenset([25])\r
+    FOLLOW_25_in_struct_declaration553 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_specifier_qualifier_list566 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_specifier_in_specifier_qualifier_list570 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_struct_declarator_in_struct_declarator_list584 = frozenset([1, 27])\r
+    FOLLOW_27_in_struct_declarator_list587 = frozenset([4, 47, 58, 59, 60, 62, 66])\r
+    FOLLOW_struct_declarator_in_struct_declarator_list589 = frozenset([1, 27])\r
+    FOLLOW_declarator_in_struct_declarator602 = frozenset([1, 47])\r
+    FOLLOW_47_in_struct_declarator605 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_struct_declarator607 = frozenset([1])\r
+    FOLLOW_47_in_struct_declarator614 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_struct_declarator616 = frozenset([1])\r
+    FOLLOW_48_in_enum_specifier634 = frozenset([43])\r
+    FOLLOW_43_in_enum_specifier636 = frozenset([4])\r
+    FOLLOW_enumerator_list_in_enum_specifier638 = frozenset([27, 44])\r
+    FOLLOW_27_in_enum_specifier640 = frozenset([44])\r
+    FOLLOW_44_in_enum_specifier643 = frozenset([1])\r
+    FOLLOW_48_in_enum_specifier648 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_enum_specifier650 = frozenset([43])\r
+    FOLLOW_43_in_enum_specifier652 = frozenset([4])\r
+    FOLLOW_enumerator_list_in_enum_specifier654 = frozenset([27, 44])\r
+    FOLLOW_27_in_enum_specifier656 = frozenset([44])\r
+    FOLLOW_44_in_enum_specifier659 = frozenset([1])\r
+    FOLLOW_48_in_enum_specifier664 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_enum_specifier666 = frozenset([1])\r
+    FOLLOW_enumerator_in_enumerator_list677 = frozenset([1, 27])\r
+    FOLLOW_27_in_enumerator_list680 = frozenset([4])\r
+    FOLLOW_enumerator_in_enumerator_list682 = frozenset([1, 27])\r
+    FOLLOW_IDENTIFIER_in_enumerator695 = frozenset([1, 28])\r
+    FOLLOW_28_in_enumerator698 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_enumerator700 = frozenset([1])\r
+    FOLLOW_set_in_type_qualifier0 = frozenset([1])\r
+    FOLLOW_pointer_in_declarator784 = frozenset([4, 58, 59, 60, 62])\r
+    FOLLOW_58_in_declarator788 = frozenset([4, 59, 60, 62])\r
+    FOLLOW_59_in_declarator793 = frozenset([4, 60, 62])\r
+    FOLLOW_60_in_declarator798 = frozenset([4, 62])\r
+    FOLLOW_direct_declarator_in_declarator802 = frozenset([1])\r
+    FOLLOW_pointer_in_declarator808 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_direct_declarator819 = frozenset([1, 62, 64])\r
+    FOLLOW_declarator_suffix_in_direct_declarator821 = frozenset([1, 62, 64])\r
+    FOLLOW_62_in_direct_declarator827 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_58_in_direct_declarator830 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_declarator_in_direct_declarator834 = frozenset([63])\r
+    FOLLOW_63_in_direct_declarator836 = frozenset([62, 64])\r
+    FOLLOW_declarator_suffix_in_direct_declarator838 = frozenset([1, 62, 64])\r
+    FOLLOW_64_in_declarator_suffix852 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_declarator_suffix854 = frozenset([65])\r
+    FOLLOW_65_in_declarator_suffix856 = frozenset([1])\r
+    FOLLOW_64_in_declarator_suffix866 = frozenset([65])\r
+    FOLLOW_65_in_declarator_suffix868 = frozenset([1])\r
+    FOLLOW_62_in_declarator_suffix878 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_type_list_in_declarator_suffix880 = frozenset([63])\r
+    FOLLOW_63_in_declarator_suffix882 = frozenset([1])\r
+    FOLLOW_62_in_declarator_suffix892 = frozenset([4])\r
+    FOLLOW_identifier_list_in_declarator_suffix894 = frozenset([63])\r
+    FOLLOW_63_in_declarator_suffix896 = frozenset([1])\r
+    FOLLOW_62_in_declarator_suffix906 = frozenset([63])\r
+    FOLLOW_63_in_declarator_suffix908 = frozenset([1])\r
+    FOLLOW_66_in_pointer919 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_qualifier_in_pointer921 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_pointer_in_pointer924 = frozenset([1])\r
+    FOLLOW_66_in_pointer930 = frozenset([66])\r
+    FOLLOW_pointer_in_pointer932 = frozenset([1])\r
+    FOLLOW_66_in_pointer937 = frozenset([1])\r
+    FOLLOW_parameter_list_in_parameter_type_list948 = frozenset([1, 27])\r
+    FOLLOW_27_in_parameter_type_list951 = frozenset([53, 67])\r
+    FOLLOW_53_in_parameter_type_list954 = frozenset([67])\r
+    FOLLOW_67_in_parameter_type_list958 = frozenset([1])\r
+    FOLLOW_parameter_declaration_in_parameter_list971 = frozenset([1, 27])\r
+    FOLLOW_27_in_parameter_list974 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_53_in_parameter_list977 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_declaration_in_parameter_list981 = frozenset([1, 27])\r
+    FOLLOW_declaration_specifiers_in_parameter_declaration994 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_declarator_in_parameter_declaration997 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_parameter_declaration999 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_53_in_parameter_declaration1004 = frozenset([1])\r
+    FOLLOW_pointer_in_parameter_declaration1013 = frozenset([4, 66])\r
+    FOLLOW_IDENTIFIER_in_parameter_declaration1016 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_identifier_list1027 = frozenset([1, 27])\r
+    FOLLOW_27_in_identifier_list1031 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_identifier_list1033 = frozenset([1, 27])\r
+    FOLLOW_specifier_qualifier_list_in_type_name1046 = frozenset([1, 62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_type_name1048 = frozenset([1])\r
+    FOLLOW_type_id_in_type_name1054 = frozenset([1])\r
+    FOLLOW_pointer_in_abstract_declarator1065 = frozenset([1, 62, 64])\r
+    FOLLOW_direct_abstract_declarator_in_abstract_declarator1067 = frozenset([1])\r
+    FOLLOW_direct_abstract_declarator_in_abstract_declarator1073 = frozenset([1])\r
+    FOLLOW_62_in_direct_abstract_declarator1086 = frozenset([62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_direct_abstract_declarator1088 = frozenset([63])\r
+    FOLLOW_63_in_direct_abstract_declarator1090 = frozenset([1, 62, 64])\r
+    FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1094 = frozenset([1, 62, 64])\r
+    FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1098 = frozenset([1, 62, 64])\r
+    FOLLOW_64_in_abstract_declarator_suffix1110 = frozenset([65])\r
+    FOLLOW_65_in_abstract_declarator_suffix1112 = frozenset([1])\r
+    FOLLOW_64_in_abstract_declarator_suffix1117 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_abstract_declarator_suffix1119 = frozenset([65])\r
+    FOLLOW_65_in_abstract_declarator_suffix1121 = frozenset([1])\r
+    FOLLOW_62_in_abstract_declarator_suffix1126 = frozenset([63])\r
+    FOLLOW_63_in_abstract_declarator_suffix1128 = frozenset([1])\r
+    FOLLOW_62_in_abstract_declarator_suffix1133 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_type_list_in_abstract_declarator_suffix1135 = frozenset([63])\r
+    FOLLOW_63_in_abstract_declarator_suffix1137 = frozenset([1])\r
+    FOLLOW_assignment_expression_in_initializer1150 = frozenset([1])\r
+    FOLLOW_43_in_initializer1155 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_initializer_list_in_initializer1157 = frozenset([27, 44])\r
+    FOLLOW_27_in_initializer1159 = frozenset([44])\r
+    FOLLOW_44_in_initializer1162 = frozenset([1])\r
+    FOLLOW_initializer_in_initializer_list1173 = frozenset([1, 27])\r
+    FOLLOW_27_in_initializer_list1176 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_initializer_in_initializer_list1178 = frozenset([1, 27])\r
+    FOLLOW_assignment_expression_in_argument_expression_list1196 = frozenset([1, 27, 53])\r
+    FOLLOW_53_in_argument_expression_list1199 = frozenset([1, 27])\r
+    FOLLOW_27_in_argument_expression_list1204 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_assignment_expression_in_argument_expression_list1206 = frozenset([1, 27, 53])\r
+    FOLLOW_53_in_argument_expression_list1209 = frozenset([1, 27])\r
+    FOLLOW_multiplicative_expression_in_additive_expression1225 = frozenset([1, 68, 69])\r
+    FOLLOW_68_in_additive_expression1229 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_multiplicative_expression_in_additive_expression1231 = frozenset([1, 68, 69])\r
+    FOLLOW_69_in_additive_expression1235 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_multiplicative_expression_in_additive_expression1237 = frozenset([1, 68, 69])\r
+    FOLLOW_cast_expression_in_multiplicative_expression1251 = frozenset([1, 66, 70, 71])\r
+    FOLLOW_66_in_multiplicative_expression1255 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_multiplicative_expression1257 = frozenset([1, 66, 70, 71])\r
+    FOLLOW_70_in_multiplicative_expression1261 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_multiplicative_expression1263 = frozenset([1, 66, 70, 71])\r
+    FOLLOW_71_in_multiplicative_expression1267 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_multiplicative_expression1269 = frozenset([1, 66, 70, 71])\r
+    FOLLOW_62_in_cast_expression1282 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_name_in_cast_expression1284 = frozenset([63])\r
+    FOLLOW_63_in_cast_expression1286 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_cast_expression1288 = frozenset([1])\r
+    FOLLOW_unary_expression_in_cast_expression1293 = frozenset([1])\r
+    FOLLOW_postfix_expression_in_unary_expression1304 = frozenset([1])\r
+    FOLLOW_72_in_unary_expression1309 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_unary_expression_in_unary_expression1311 = frozenset([1])\r
+    FOLLOW_73_in_unary_expression1316 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_unary_expression_in_unary_expression1318 = frozenset([1])\r
+    FOLLOW_unary_operator_in_unary_expression1323 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_unary_expression1325 = frozenset([1])\r
+    FOLLOW_74_in_unary_expression1330 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_unary_expression_in_unary_expression1332 = frozenset([1])\r
+    FOLLOW_74_in_unary_expression1337 = frozenset([62])\r
+    FOLLOW_62_in_unary_expression1339 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_name_in_unary_expression1341 = frozenset([63])\r
+    FOLLOW_63_in_unary_expression1343 = frozenset([1])\r
+    FOLLOW_primary_expression_in_postfix_expression1367 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_64_in_postfix_expression1383 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_postfix_expression1385 = frozenset([65])\r
+    FOLLOW_65_in_postfix_expression1387 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_62_in_postfix_expression1401 = frozenset([63])\r
+    FOLLOW_63_in_postfix_expression1405 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_62_in_postfix_expression1420 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_argument_expression_list_in_postfix_expression1424 = frozenset([63])\r
+    FOLLOW_63_in_postfix_expression1428 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_62_in_postfix_expression1444 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_macro_parameter_list_in_postfix_expression1446 = frozenset([63])\r
+    FOLLOW_63_in_postfix_expression1448 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_75_in_postfix_expression1462 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_postfix_expression1466 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_66_in_postfix_expression1482 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_postfix_expression1486 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_76_in_postfix_expression1502 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_postfix_expression1506 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_72_in_postfix_expression1522 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_73_in_postfix_expression1536 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_parameter_declaration_in_macro_parameter_list1559 = frozenset([1, 27])\r
+    FOLLOW_27_in_macro_parameter_list1562 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_declaration_in_macro_parameter_list1564 = frozenset([1, 27])\r
+    FOLLOW_set_in_unary_operator0 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_primary_expression1613 = frozenset([1])\r
+    FOLLOW_constant_in_primary_expression1618 = frozenset([1])\r
+    FOLLOW_62_in_primary_expression1623 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_primary_expression1625 = frozenset([63])\r
+    FOLLOW_63_in_primary_expression1627 = frozenset([1])\r
+    FOLLOW_HEX_LITERAL_in_constant1643 = frozenset([1])\r
+    FOLLOW_OCTAL_LITERAL_in_constant1653 = frozenset([1])\r
+    FOLLOW_DECIMAL_LITERAL_in_constant1663 = frozenset([1])\r
+    FOLLOW_CHARACTER_LITERAL_in_constant1671 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_constant1680 = frozenset([4, 9])\r
+    FOLLOW_STRING_LITERAL_in_constant1683 = frozenset([1, 4, 9])\r
+    FOLLOW_IDENTIFIER_in_constant1688 = frozenset([1, 4])\r
+    FOLLOW_FLOATING_POINT_LITERAL_in_constant1699 = frozenset([1])\r
+    FOLLOW_assignment_expression_in_expression1715 = frozenset([1, 27])\r
+    FOLLOW_27_in_expression1718 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_assignment_expression_in_expression1720 = frozenset([1, 27])\r
+    FOLLOW_conditional_expression_in_constant_expression1733 = frozenset([1])\r
+    FOLLOW_lvalue_in_assignment_expression1744 = frozenset([28, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89])\r
+    FOLLOW_assignment_operator_in_assignment_expression1746 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_assignment_expression_in_assignment_expression1748 = frozenset([1])\r
+    FOLLOW_conditional_expression_in_assignment_expression1753 = frozenset([1])\r
+    FOLLOW_unary_expression_in_lvalue1765 = frozenset([1])\r
+    FOLLOW_set_in_assignment_operator0 = frozenset([1])\r
+    FOLLOW_logical_or_expression_in_conditional_expression1839 = frozenset([1, 90])\r
+    FOLLOW_90_in_conditional_expression1842 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_conditional_expression1844 = frozenset([47])\r
+    FOLLOW_47_in_conditional_expression1846 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_conditional_expression_in_conditional_expression1848 = frozenset([1])\r
+    FOLLOW_logical_and_expression_in_logical_or_expression1863 = frozenset([1, 91])\r
+    FOLLOW_91_in_logical_or_expression1866 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_logical_and_expression_in_logical_or_expression1868 = frozenset([1, 91])\r
+    FOLLOW_inclusive_or_expression_in_logical_and_expression1881 = frozenset([1, 92])\r
+    FOLLOW_92_in_logical_and_expression1884 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_inclusive_or_expression_in_logical_and_expression1886 = frozenset([1, 92])\r
+    FOLLOW_exclusive_or_expression_in_inclusive_or_expression1899 = frozenset([1, 93])\r
+    FOLLOW_93_in_inclusive_or_expression1902 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_exclusive_or_expression_in_inclusive_or_expression1904 = frozenset([1, 93])\r
+    FOLLOW_and_expression_in_exclusive_or_expression1917 = frozenset([1, 94])\r
+    FOLLOW_94_in_exclusive_or_expression1920 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_and_expression_in_exclusive_or_expression1922 = frozenset([1, 94])\r
+    FOLLOW_equality_expression_in_and_expression1935 = frozenset([1, 77])\r
+    FOLLOW_77_in_and_expression1938 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_equality_expression_in_and_expression1940 = frozenset([1, 77])\r
+    FOLLOW_relational_expression_in_equality_expression1952 = frozenset([1, 95, 96])\r
+    FOLLOW_set_in_equality_expression1955 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_relational_expression_in_equality_expression1961 = frozenset([1, 95, 96])\r
+    FOLLOW_shift_expression_in_relational_expression1975 = frozenset([1, 97, 98, 99, 100])\r
+    FOLLOW_set_in_relational_expression1978 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_shift_expression_in_relational_expression1988 = frozenset([1, 97, 98, 99, 100])\r
+    FOLLOW_additive_expression_in_shift_expression2001 = frozenset([1, 101, 102])\r
+    FOLLOW_set_in_shift_expression2004 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_additive_expression_in_shift_expression2010 = frozenset([1, 101, 102])\r
+    FOLLOW_labeled_statement_in_statement2025 = frozenset([1])\r
+    FOLLOW_compound_statement_in_statement2030 = frozenset([1])\r
+    FOLLOW_expression_statement_in_statement2035 = frozenset([1])\r
+    FOLLOW_selection_statement_in_statement2040 = frozenset([1])\r
+    FOLLOW_iteration_statement_in_statement2045 = frozenset([1])\r
+    FOLLOW_jump_statement_in_statement2050 = frozenset([1])\r
+    FOLLOW_macro_statement_in_statement2055 = frozenset([1])\r
+    FOLLOW_asm2_statement_in_statement2060 = frozenset([1])\r
+    FOLLOW_asm1_statement_in_statement2065 = frozenset([1])\r
+    FOLLOW_asm_statement_in_statement2070 = frozenset([1])\r
+    FOLLOW_declaration_in_statement2075 = frozenset([1])\r
+    FOLLOW_103_in_asm2_statement2086 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_asm2_statement2089 = frozenset([62])\r
+    FOLLOW_62_in_asm2_statement2091 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_set_in_asm2_statement2094 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_63_in_asm2_statement2101 = frozenset([25])\r
+    FOLLOW_25_in_asm2_statement2103 = frozenset([1])\r
+    FOLLOW_104_in_asm1_statement2115 = frozenset([43])\r
+    FOLLOW_43_in_asm1_statement2117 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_set_in_asm1_statement2120 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_44_in_asm1_statement2127 = frozenset([1])\r
+    FOLLOW_105_in_asm_statement2138 = frozenset([43])\r
+    FOLLOW_43_in_asm_statement2140 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_set_in_asm_statement2143 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_44_in_asm_statement2150 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_macro_statement2162 = frozenset([62])\r
+    FOLLOW_62_in_macro_statement2164 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_declaration_in_macro_statement2166 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_list_in_macro_statement2170 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_macro_statement2173 = frozenset([63])\r
+    FOLLOW_63_in_macro_statement2176 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_labeled_statement2188 = frozenset([47])\r
+    FOLLOW_47_in_labeled_statement2190 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_labeled_statement2192 = frozenset([1])\r
+    FOLLOW_106_in_labeled_statement2197 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_labeled_statement2199 = frozenset([47])\r
+    FOLLOW_47_in_labeled_statement2201 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_labeled_statement2203 = frozenset([1])\r
+    FOLLOW_107_in_labeled_statement2208 = frozenset([47])\r
+    FOLLOW_47_in_labeled_statement2210 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_labeled_statement2212 = frozenset([1])\r
+    FOLLOW_43_in_compound_statement2223 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_declaration_in_compound_statement2225 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_list_in_compound_statement2228 = frozenset([44])\r
+    FOLLOW_44_in_compound_statement2231 = frozenset([1])\r
+    FOLLOW_statement_in_statement_list2242 = frozenset([1, 4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_25_in_expression_statement2254 = frozenset([1])\r
+    FOLLOW_expression_in_expression_statement2259 = frozenset([25])\r
+    FOLLOW_25_in_expression_statement2261 = frozenset([1])\r
+    FOLLOW_108_in_selection_statement2272 = frozenset([62])\r
+    FOLLOW_62_in_selection_statement2274 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_selection_statement2278 = frozenset([63])\r
+    FOLLOW_63_in_selection_statement2280 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_selection_statement2284 = frozenset([1, 109])\r
+    FOLLOW_109_in_selection_statement2299 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_selection_statement2301 = frozenset([1])\r
+    FOLLOW_110_in_selection_statement2308 = frozenset([62])\r
+    FOLLOW_62_in_selection_statement2310 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_selection_statement2312 = frozenset([63])\r
+    FOLLOW_63_in_selection_statement2314 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_selection_statement2316 = frozenset([1])\r
+    FOLLOW_111_in_iteration_statement2327 = frozenset([62])\r
+    FOLLOW_62_in_iteration_statement2329 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_iteration_statement2333 = frozenset([63])\r
+    FOLLOW_63_in_iteration_statement2335 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_iteration_statement2337 = frozenset([1])\r
+    FOLLOW_112_in_iteration_statement2344 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_iteration_statement2346 = frozenset([111])\r
+    FOLLOW_111_in_iteration_statement2348 = frozenset([62])\r
+    FOLLOW_62_in_iteration_statement2350 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_iteration_statement2354 = frozenset([63])\r
+    FOLLOW_63_in_iteration_statement2356 = frozenset([25])\r
+    FOLLOW_25_in_iteration_statement2358 = frozenset([1])\r
+    FOLLOW_113_in_iteration_statement2365 = frozenset([62])\r
+    FOLLOW_62_in_iteration_statement2367 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_statement_in_iteration_statement2369 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_statement_in_iteration_statement2373 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_iteration_statement2375 = frozenset([63])\r
+    FOLLOW_63_in_iteration_statement2378 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_iteration_statement2380 = frozenset([1])\r
+    FOLLOW_114_in_jump_statement2393 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_jump_statement2395 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2397 = frozenset([1])\r
+    FOLLOW_115_in_jump_statement2402 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2404 = frozenset([1])\r
+    FOLLOW_116_in_jump_statement2409 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2411 = frozenset([1])\r
+    FOLLOW_117_in_jump_statement2416 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2418 = frozenset([1])\r
+    FOLLOW_117_in_jump_statement2423 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_jump_statement2425 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2427 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred2100 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred4100 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_declarator_in_synpred4103 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_declaration_in_synpred4105 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_43_in_synpred4108 = frozenset([1])\r
+    FOLLOW_declaration_in_synpred5118 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred7157 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred10207 = frozenset([1])\r
+    FOLLOW_type_specifier_in_synpred14272 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_synpred15286 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_synpred33444 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_synpred34442 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66])\r
+    FOLLOW_type_qualifier_in_synpred34444 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66])\r
+    FOLLOW_declarator_in_synpred34447 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_synpred39566 = frozenset([1])\r
+    FOLLOW_type_specifier_in_synpred40570 = frozenset([1])\r
+    FOLLOW_pointer_in_synpred66784 = frozenset([4, 58, 59, 60, 62])\r
+    FOLLOW_58_in_synpred66788 = frozenset([4, 59, 60, 62])\r
+    FOLLOW_59_in_synpred66793 = frozenset([4, 60, 62])\r
+    FOLLOW_60_in_synpred66798 = frozenset([4, 62])\r
+    FOLLOW_direct_declarator_in_synpred66802 = frozenset([1])\r
+    FOLLOW_declarator_suffix_in_synpred67821 = frozenset([1])\r
+    FOLLOW_58_in_synpred69830 = frozenset([1])\r
+    FOLLOW_declarator_suffix_in_synpred70838 = frozenset([1])\r
+    FOLLOW_62_in_synpred73878 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_type_list_in_synpred73880 = frozenset([63])\r
+    FOLLOW_63_in_synpred73882 = frozenset([1])\r
+    FOLLOW_62_in_synpred74892 = frozenset([4])\r
+    FOLLOW_identifier_list_in_synpred74894 = frozenset([63])\r
+    FOLLOW_63_in_synpred74896 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_synpred75921 = frozenset([1])\r
+    FOLLOW_pointer_in_synpred76924 = frozenset([1])\r
+    FOLLOW_66_in_synpred77919 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_qualifier_in_synpred77921 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_pointer_in_synpred77924 = frozenset([1])\r
+    FOLLOW_66_in_synpred78930 = frozenset([66])\r
+    FOLLOW_pointer_in_synpred78932 = frozenset([1])\r
+    FOLLOW_53_in_synpred81977 = frozenset([1])\r
+    FOLLOW_27_in_synpred82974 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_53_in_synpred82977 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_declaration_in_synpred82981 = frozenset([1])\r
+    FOLLOW_declarator_in_synpred83997 = frozenset([1])\r
+    FOLLOW_abstract_declarator_in_synpred84999 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred86994 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_declarator_in_synpred86997 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_synpred86999 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_53_in_synpred861004 = frozenset([1])\r
+    FOLLOW_specifier_qualifier_list_in_synpred901046 = frozenset([1, 62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_synpred901048 = frozenset([1])\r
+    FOLLOW_direct_abstract_declarator_in_synpred911067 = frozenset([1])\r
+    FOLLOW_62_in_synpred931086 = frozenset([62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_synpred931088 = frozenset([63])\r
+    FOLLOW_63_in_synpred931090 = frozenset([1])\r
+    FOLLOW_abstract_declarator_suffix_in_synpred941098 = frozenset([1])\r
+    FOLLOW_62_in_synpred1091282 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_name_in_synpred1091284 = frozenset([63])\r
+    FOLLOW_63_in_synpred1091286 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_synpred1091288 = frozenset([1])\r
+    FOLLOW_74_in_synpred1141330 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_unary_expression_in_synpred1141332 = frozenset([1])\r
+    FOLLOW_62_in_synpred1171420 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_argument_expression_list_in_synpred1171424 = frozenset([63])\r
+    FOLLOW_63_in_synpred1171428 = frozenset([1])\r
+    FOLLOW_62_in_synpred1181444 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_macro_parameter_list_in_synpred1181446 = frozenset([63])\r
+    FOLLOW_63_in_synpred1181448 = frozenset([1])\r
+    FOLLOW_66_in_synpred1201482 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_synpred1201486 = frozenset([1])\r
+    FOLLOW_STRING_LITERAL_in_synpred1371683 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_synpred1381680 = frozenset([4, 9])\r
+    FOLLOW_STRING_LITERAL_in_synpred1381683 = frozenset([1, 9])\r
+    FOLLOW_lvalue_in_synpred1421744 = frozenset([28, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89])\r
+    FOLLOW_assignment_operator_in_synpred1421746 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_assignment_expression_in_synpred1421748 = frozenset([1])\r
+    FOLLOW_expression_statement_in_synpred1692035 = frozenset([1])\r
+    FOLLOW_macro_statement_in_synpred1732055 = frozenset([1])\r
+    FOLLOW_asm2_statement_in_synpred1742060 = frozenset([1])\r
+    FOLLOW_declaration_in_synpred1812166 = frozenset([1])\r
+    FOLLOW_statement_list_in_synpred1822170 = frozenset([1])\r
+    FOLLOW_declaration_in_synpred1862225 = frozenset([1])\r
+    FOLLOW_statement_in_synpred1882242 = frozenset([1])\r
 \r
index d563a2f961b2487a3091a98fe46540f6ab339468..fc86ad96f2cf2fbdfc388abd74d77db43e29fb5b 100644 (file)
@@ -223,7 +223,7 @@ class Check(object):
                     IndexOfLine = 0\r
                     for Line in op:\r
                         IndexOfLine += 1\r
-                        if not bytes.decode(Line).endswith('\r\n'):\r
+                        if not Line.endswith('\r\n'):\r
                             OtherMsg = "File %s has invalid line ending at line %s" % (Record[1], IndexOfLine)\r
                             EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_INVALID_LINE_ENDING, OtherMsg=OtherMsg, BelongsToTable='File', BelongsToItem=Record[0])\r
 \r
@@ -235,7 +235,7 @@ class Check(object):
             RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
             for Record in RecordSet:\r
                 if Record[2].upper() not in EccGlobalData.gConfig.BinaryExtList:\r
-                    op = open(Record[1], 'r').readlines()\r
+                    op = open(Record[1], 'rb').readlines()\r
                     IndexOfLine = 0\r
                     for Line in op:\r
                         IndexOfLine += 1\r
index b6fa287cf7a9669dbc0d16ae7db1bf989a06105f..d12232cc6f5ea34c9ed450aa6ab764d0aafab47a 100644 (file)
@@ -22,7 +22,7 @@ import re
 import Common.LongFilePathOs as os\r
 import sys\r
 \r
-import antlr4\r
+import antlr3\r
 from Ecc.CLexer import CLexer\r
 from Ecc.CParser import CParser\r
 \r
@@ -499,14 +499,13 @@ class CodeFragmentCollector:
     def ParseFile(self):\r
         self.PreprocessFile()\r
         # restore from ListOfList to ListOfString\r
-        # print(self.Profile.FileLinesList)\r
         self.Profile.FileLinesList = ["".join(list) for list in self.Profile.FileLinesList]\r
         FileStringContents = ''\r
         for fileLine in self.Profile.FileLinesList:\r
             FileStringContents += fileLine\r
-        cStream = antlr4.InputStream(FileStringContents)\r
+        cStream = antlr3.StringStream(FileStringContents)\r
         lexer = CLexer(cStream)\r
-        tStream = antlr4.CommonTokenStream(lexer)\r
+        tStream = antlr3.CommonTokenStream(lexer)\r
         parser = CParser(tStream)\r
         parser.translation_unit()\r
 \r
@@ -517,9 +516,9 @@ class CodeFragmentCollector:
         FileStringContents = ''\r
         for fileLine in self.Profile.FileLinesList:\r
             FileStringContents += fileLine\r
-        cStream = antlr4.InputStream(FileStringContents)\r
+        cStream = antlr3.StringStream(FileStringContents)\r
         lexer = CLexer(cStream)\r
-        tStream = antlr4.CommonTokenStream(lexer)\r
+        tStream = antlr3.CommonTokenStream(lexer)\r
         parser = CParser(tStream)\r
         parser.translation_unit()\r
 \r
index c2e6de957918654c5a4172b5bdc9c696bc14f927..5f9e497e37ef30da55455887a07f234576274c0b 100644 (file)
@@ -205,7 +205,7 @@ class Ecc(object):
         Op = open(EccGlobalData.gConfig.MetaDataFileCheckPathOfGenerateFileList, 'w+')\r
         #SkipDirs = Read from config file\r
         SkipDirs = EccGlobalData.gConfig.SkipDirList\r
-        SkipDirString = '|'.join(SkipDirs)\r
+        SkipDirString = string.join(SkipDirs, '|')\r
 #         p = re.compile(r'.*[\\/](?:%s)[\\/]?.*' % SkipDirString)\r
         p = re.compile(r'.*[\\/](?:%s^\S)[\\/]?.*' % SkipDirString)\r
         for scanFolder in ScanFolders:\r
index 8084cbcb6c543612de0d8281da742e16a5c669e0..4434981628ef671de2d4747cb26f925ae5ee3ef5 100644 (file)
@@ -47,7 +47,7 @@ class FileProfile :
         self.FileLinesList = []\r
         self.FileLinesListFromFile = []\r
         try:\r
-            fsock = open(FileName, "r")\r
+            fsock = open(FileName, "rb", 0)\r
             try:\r
                 self.FileLinesListFromFile = fsock.readlines()\r
             finally:\r
index 4594716886326fc56671031cf6bc48dfdfe581d2..d0a94153d42106c1261e19e6f6cde18e45c52798 100644 (file)
@@ -113,7 +113,7 @@ def ParseHeaderCommentSection(CommentList, FileName = None):
     #\r
     Last = 0\r
     HeaderCommentStage = HEADER_COMMENT_NOT_STARTED\r
-    for Index in range(len(CommentList) - 1, 0, -1):\r
+    for Index in xrange(len(CommentList)-1, 0, -1):\r
         Line = CommentList[Index][0]\r
         if _IsCopyrightLine(Line):\r
             Last = Index\r
index 7105cdf2a95110b0834d9a14a30fdbd0bb5e2970..953f1630b69394d0ea1eee3848d2da3313a79a7b 100644 (file)
@@ -35,7 +35,7 @@ IgnoredKeywordList = ['EFI_ERROR']
 \r
 def GetIgnoredDirListPattern():\r
     skipList = list(EccGlobalData.gConfig.SkipDirList) + ['.svn']\r
-    DirString = '|'.join(skipList)\r
+    DirString = string.join(skipList, '|')\r
     p = re.compile(r'.*[\\/](?:%s)[\\/]?.*' % DirString)\r
     return p\r
 \r
@@ -963,7 +963,7 @@ def StripComments(Str):
             ListFromStr[Index] = ' '\r
             Index += 1\r
         # check for // comment\r
-        elif ListFromStr[Index] == '/' and ListFromStr[Index + 1] == '/':\r
+        elif ListFromStr[Index] == '/' and ListFromStr[Index + 1] == '/' and ListFromStr[Index + 2] != '\n':\r
             InComment = True\r
             DoubleSlashComment = True\r
 \r
@@ -1297,7 +1297,7 @@ def CheckFuncLayoutReturnType(FullFileName):
         Result0 = Result[0]\r
         if Result0.upper().startswith('STATIC'):\r
             Result0 = Result0[6:].strip()\r
-        Index = Result0.find(TypeStart)\r
+        Index = Result0.find(ReturnType)\r
         if Index != 0 or Result[3] != 0:\r
             PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_RETURN_TYPE, '[%s] Return Type should appear at the start of line' % FuncName, 'Function', Result[1])\r
 \r
index 364d86881b15378c69625f074656f23452a067de..b9e57c1b5554949b2a430c365e9cdd3890050f0e 100644 (file)
@@ -1,18 +1,16 @@
-# Generated from C.g4 by ANTLR 4.7.1\r
-from antlr4 import *\r
-from io import StringIO\r
-from typing.io import TextIO\r
-import sys\r
+# $ANTLR 3.0.1 C.g 2010-02-23 09:58:53\r
 \r
+from antlr3 import *\r
+from antlr3.compat import set, frozenset\r
 \r
 ## @file\r
-# The file defines the parser for C source files.\r
+# The file defines the Lexer for C source files.\r
 #\r
 # THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE.\r
 # This file is generated by running:\r
 # java org.antlr.Tool C.g\r
 #\r
-# Copyright (c) 2009 - 2010, Intel Corporation  All rights reserved.\r
+# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available\r
 # under the terms and conditions of the BSD License which accompanies this\r
@@ -24,609 +22,4926 @@ import sys
 #\r
 ##\r
 \r
-import Ecc.CodeFragment as CodeFragment\r
-import Ecc.FileProfile as FileProfile\r
-\r
-\r
-def serializedATN():\r
-    with StringIO() as buf:\r
-        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2k")\r
-        buf.write("\u0383\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7")\r
-        buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r")\r
-        buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23")\r
-        buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30")\r
-        buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36")\r
-        buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%")\r
-        buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.")\r
-        buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64")\r
-        buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:")\r
-        buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t")\r
-        buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t")\r
-        buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT\4U\t")\r
-        buf.write("U\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4")\r
-        buf.write("^\t^\4_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4")\r
-        buf.write("g\tg\4h\th\4i\ti\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to\4")\r
-        buf.write("p\tp\4q\tq\4r\tr\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3")\r
-        buf.write("\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7")\r
-        buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\n\3")\r
-        buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13")\r
-        buf.write("\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\16")\r
-        buf.write("\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20")\r
-        buf.write("\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22")\r
-        buf.write("\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23")\r
-        buf.write("\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25")\r
-        buf.write("\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27")\r
-        buf.write("\3\27\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\32")\r
-        buf.write("\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33")\r
-        buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\36")\r
-        buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37")\r
-        buf.write("\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3!\3!\3")\r
-        buf.write("!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3")\r
-        buf.write("\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"")\r
-        buf.write("\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3#")\r
-        buf.write("\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3%\3")\r
-        buf.write("%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3")\r
-        buf.write("&\3&\3&\3&\3&\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3")\r
-        buf.write(",\3,\3,\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3\61\3\61")\r
-        buf.write("\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\64")\r
-        buf.write("\3\64\3\65\3\65\3\65\3\66\3\66\3\67\3\67\38\38\39\39\3")\r
-        buf.write("9\3:\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3=\3>\3>\3>\3>\3?\3")\r
-        buf.write("?\3?\3?\3@\3@\3@\3A\3A\3A\3B\3B\3B\3C\3C\3D\3D\3D\3E\3")\r
-        buf.write("E\3E\3F\3F\3G\3G\3H\3H\3H\3I\3I\3I\3J\3J\3K\3K\3L\3L\3")\r
-        buf.write("L\3M\3M\3M\3N\3N\3N\3O\3O\3O\3P\3P\3P\3P\3P\3P\3P\3P\3")\r
-        buf.write("Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3R\3S\3S\3S\3S\3S\3T\3T\3")\r
-        buf.write("T\3T\3T\3T\3T\3T\3U\3U\3U\3V\3V\3V\3V\3V\3W\3W\3W\3W\3")\r
-        buf.write("W\3W\3W\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\3[\3")\r
-        buf.write("[\3[\3[\3[\3[\3[\3[\3[\3\\\3\\\3\\\3\\\3\\\3\\\3]\3]\3")\r
-        buf.write("]\3]\3]\3]\3]\3^\3^\3^\7^\u02b2\n^\f^\16^\u02b5\13^\3")\r
-        buf.write("_\3_\3`\5`\u02ba\n`\3`\3`\3`\5`\u02bf\n`\3`\3`\3a\5a\u02c4")\r
-        buf.write("\na\3a\3a\3a\7a\u02c9\na\fa\16a\u02cc\13a\3a\3a\3b\3b")\r
-        buf.write("\3b\6b\u02d3\nb\rb\16b\u02d4\3b\5b\u02d8\nb\3c\3c\3c\7")\r
-        buf.write("c\u02dd\nc\fc\16c\u02e0\13c\5c\u02e2\nc\3c\5c\u02e5\n")\r
-        buf.write("c\3d\3d\6d\u02e9\nd\rd\16d\u02ea\3d\5d\u02ee\nd\3e\3e")\r
-        buf.write("\3f\3f\3f\3f\3f\3f\5f\u02f8\nf\3g\6g\u02fb\ng\rg\16g\u02fc")\r
-        buf.write("\3g\3g\7g\u0301\ng\fg\16g\u0304\13g\3g\5g\u0307\ng\3g")\r
-        buf.write("\5g\u030a\ng\3g\3g\6g\u030e\ng\rg\16g\u030f\3g\5g\u0313")\r
-        buf.write("\ng\3g\5g\u0316\ng\3g\6g\u0319\ng\rg\16g\u031a\3g\3g\5")\r
-        buf.write("g\u031f\ng\3g\6g\u0322\ng\rg\16g\u0323\3g\5g\u0327\ng")\r
-        buf.write("\3g\5g\u032a\ng\3h\3h\5h\u032e\nh\3h\6h\u0331\nh\rh\16")\r
-        buf.write("h\u0332\3i\3i\3j\3j\3j\5j\u033a\nj\3k\3k\3k\3k\3k\3k\3")\r
-        buf.write("k\3k\3k\5k\u0345\nk\3l\3l\3l\3l\3l\3l\3l\3m\3m\3m\3m\3")\r
-        buf.write("n\3n\3n\3n\3o\3o\3p\3p\3p\3p\7p\u035c\np\fp\16p\u035f")\r
-        buf.write("\13p\3p\3p\3p\3p\3p\3q\3q\3q\3q\7q\u036a\nq\fq\16q\u036d")\r
-        buf.write("\13q\3q\5q\u0370\nq\3q\3q\3q\3q\3r\3r\7r\u0378\nr\fr\16")\r
-        buf.write("r\u037b\13r\3r\5r\u037e\nr\3r\3r\3r\3r\3\u035d\2s\3\3")\r
-        buf.write("\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16")\r
-        buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61")\r
-        buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*")\r
-        buf.write("S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u<w")\r
-        buf.write("=y>{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b")\r
-        buf.write("G\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009b")\r
-        buf.write("O\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00ab")\r
-        buf.write("W\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb")\r
-        buf.write("_\u00bd\2\u00bf`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9\2\u00cb")\r
-        buf.write("\2\u00cde\u00cf\2\u00d1\2\u00d3\2\u00d5\2\u00d7\2\u00d9")\r
-        buf.write("f\u00dbg\u00ddh\u00dfi\u00e1j\u00e3k\3\2\20\6\2&&C\\a")\r
-        buf.write("ac|\4\2))^^\4\2$$^^\4\2ZZzz\5\2\62;CHch\6\2NNWWnnww\4")\r
-        buf.write("\2WWww\4\2NNnn\4\2GGgg\4\2--//\6\2FFHHffhh\t\2))^^ddh")\r
-        buf.write("hppttvv\5\2\13\f\16\17\"\"\4\2\f\f\17\17\2\u03a2\2\3\3")\r
-        buf.write("\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2")\r
-        buf.write("\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2")\r
-        buf.write("\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2")\r
-        buf.write("\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2")\r
-        buf.write("\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3")\r
-        buf.write("\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2")\r
-        buf.write("\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3")\r
-        buf.write("\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K")\r
-        buf.write("\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2")\r
-        buf.write("U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2")\r
-        buf.write("\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2")\r
-        buf.write("\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2")\r
-        buf.write("\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3")\r
-        buf.write("\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083")\r
-        buf.write("\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2")\r
-        buf.write("\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091")\r
-        buf.write("\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2")\r
-        buf.write("\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f")\r
-        buf.write("\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2")\r
-        buf.write("\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad")\r
-        buf.write("\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2")\r
-        buf.write("\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb")\r
-        buf.write("\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2")\r
-        buf.write("\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00cd\3\2\2\2\2\u00d9")\r
-        buf.write("\3\2\2\2\2\u00db\3\2\2\2\2\u00dd\3\2\2\2\2\u00df\3\2\2")\r
-        buf.write("\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\3\u00e5\3\2\2\2\5\u00e7")\r
-        buf.write("\3\2\2\2\7\u00e9\3\2\2\2\t\u00f1\3\2\2\2\13\u00f3\3\2")\r
-        buf.write("\2\2\r\u00f5\3\2\2\2\17\u00fc\3\2\2\2\21\u0103\3\2\2\2")\r
-        buf.write("\23\u0108\3\2\2\2\25\u0111\3\2\2\2\27\u0118\3\2\2\2\31")\r
-        buf.write("\u011d\3\2\2\2\33\u0122\3\2\2\2\35\u0128\3\2\2\2\37\u012c")\r
-        buf.write("\3\2\2\2!\u0131\3\2\2\2#\u0137\3\2\2\2%\u013e\3\2\2\2")\r
-        buf.write("\'\u0145\3\2\2\2)\u014e\3\2\2\2+\u0150\3\2\2\2-\u0157")\r
-        buf.write("\3\2\2\2/\u015d\3\2\2\2\61\u015f\3\2\2\2\63\u0164\3\2")\r
-        buf.write("\2\2\65\u016a\3\2\2\2\67\u0173\3\2\2\29\u0176\3\2\2\2")\r
-        buf.write(";\u017a\3\2\2\2=\u0183\3\2\2\2?\u0189\3\2\2\2A\u0193\3")\r
-        buf.write("\2\2\2C\u019c\3\2\2\2E\u01ba\3\2\2\2G\u01c1\3\2\2\2I\u01d1")\r
-        buf.write("\3\2\2\2K\u01e4\3\2\2\2M\u01eb\3\2\2\2O\u01ed\3\2\2\2")\r
-        buf.write("Q\u01ef\3\2\2\2S\u01f1\3\2\2\2U\u01f3\3\2\2\2W\u01f5\3")\r
-        buf.write("\2\2\2Y\u01f9\3\2\2\2[\u01fb\3\2\2\2]\u01fd\3\2\2\2_\u01ff")\r
-        buf.write("\3\2\2\2a\u0201\3\2\2\2c\u0204\3\2\2\2e\u0207\3\2\2\2")\r
-        buf.write("g\u020e\3\2\2\2i\u0210\3\2\2\2k\u0213\3\2\2\2m\u0215\3")\r
-        buf.write("\2\2\2o\u0217\3\2\2\2q\u0219\3\2\2\2s\u021c\3\2\2\2u\u021f")\r
-        buf.write("\3\2\2\2w\u0222\3\2\2\2y\u0225\3\2\2\2{\u0228\3\2\2\2")\r
-        buf.write("}\u022c\3\2\2\2\177\u0230\3\2\2\2\u0081\u0233\3\2\2\2")\r
-        buf.write("\u0083\u0236\3\2\2\2\u0085\u0239\3\2\2\2\u0087\u023b\3")\r
-        buf.write("\2\2\2\u0089\u023e\3\2\2\2\u008b\u0241\3\2\2\2\u008d\u0243")\r
-        buf.write("\3\2\2\2\u008f\u0245\3\2\2\2\u0091\u0248\3\2\2\2\u0093")\r
-        buf.write("\u024b\3\2\2\2\u0095\u024d\3\2\2\2\u0097\u024f\3\2\2\2")\r
-        buf.write("\u0099\u0252\3\2\2\2\u009b\u0255\3\2\2\2\u009d\u0258\3")\r
-        buf.write("\2\2\2\u009f\u025b\3\2\2\2\u00a1\u0263\3\2\2\2\u00a3\u0268")\r
-        buf.write("\3\2\2\2\u00a5\u026e\3\2\2\2\u00a7\u0273\3\2\2\2\u00a9")\r
-        buf.write("\u027b\3\2\2\2\u00ab\u027e\3\2\2\2\u00ad\u0283\3\2\2\2")\r
-        buf.write("\u00af\u028a\3\2\2\2\u00b1\u0290\3\2\2\2\u00b3\u0293\3")\r
-        buf.write("\2\2\2\u00b5\u0298\3\2\2\2\u00b7\u02a1\3\2\2\2\u00b9\u02a7")\r
-        buf.write("\3\2\2\2\u00bb\u02ae\3\2\2\2\u00bd\u02b6\3\2\2\2\u00bf")\r
-        buf.write("\u02b9\3\2\2\2\u00c1\u02c3\3\2\2\2\u00c3\u02cf\3\2\2\2")\r
-        buf.write("\u00c5\u02e1\3\2\2\2\u00c7\u02e6\3\2\2\2\u00c9\u02ef\3")\r
-        buf.write("\2\2\2\u00cb\u02f7\3\2\2\2\u00cd\u0329\3\2\2\2\u00cf\u032b")\r
-        buf.write("\3\2\2\2\u00d1\u0334\3\2\2\2\u00d3\u0339\3\2\2\2\u00d5")\r
-        buf.write("\u0344\3\2\2\2\u00d7\u0346\3\2\2\2\u00d9\u034d\3\2\2\2")\r
-        buf.write("\u00db\u0351\3\2\2\2\u00dd\u0355\3\2\2\2\u00df\u0357\3")\r
-        buf.write("\2\2\2\u00e1\u0365\3\2\2\2\u00e3\u0375\3\2\2\2\u00e5\u00e6")\r
-        buf.write("\7}\2\2\u00e6\4\3\2\2\2\u00e7\u00e8\7=\2\2\u00e8\6\3\2")\r
-        buf.write("\2\2\u00e9\u00ea\7v\2\2\u00ea\u00eb\7{\2\2\u00eb\u00ec")\r
-        buf.write("\7r\2\2\u00ec\u00ed\7g\2\2\u00ed\u00ee\7f\2\2\u00ee\u00ef")\r
-        buf.write("\7g\2\2\u00ef\u00f0\7h\2\2\u00f0\b\3\2\2\2\u00f1\u00f2")\r
-        buf.write("\7.\2\2\u00f2\n\3\2\2\2\u00f3\u00f4\7?\2\2\u00f4\f\3\2")\r
-        buf.write("\2\2\u00f5\u00f6\7g\2\2\u00f6\u00f7\7z\2\2\u00f7\u00f8")\r
-        buf.write("\7v\2\2\u00f8\u00f9\7g\2\2\u00f9\u00fa\7t\2\2\u00fa\u00fb")\r
-        buf.write("\7p\2\2\u00fb\16\3\2\2\2\u00fc\u00fd\7u\2\2\u00fd\u00fe")\r
-        buf.write("\7v\2\2\u00fe\u00ff\7c\2\2\u00ff\u0100\7v\2\2\u0100\u0101")\r
-        buf.write("\7k\2\2\u0101\u0102\7e\2\2\u0102\20\3\2\2\2\u0103\u0104")\r
-        buf.write("\7c\2\2\u0104\u0105\7w\2\2\u0105\u0106\7v\2\2\u0106\u0107")\r
-        buf.write("\7q\2\2\u0107\22\3\2\2\2\u0108\u0109\7t\2\2\u0109\u010a")\r
-        buf.write("\7g\2\2\u010a\u010b\7i\2\2\u010b\u010c\7k\2\2\u010c\u010d")\r
-        buf.write("\7u\2\2\u010d\u010e\7v\2\2\u010e\u010f\7g\2\2\u010f\u0110")\r
-        buf.write("\7t\2\2\u0110\24\3\2\2\2\u0111\u0112\7U\2\2\u0112\u0113")\r
-        buf.write("\7V\2\2\u0113\u0114\7C\2\2\u0114\u0115\7V\2\2\u0115\u0116")\r
-        buf.write("\7K\2\2\u0116\u0117\7E\2\2\u0117\26\3\2\2\2\u0118\u0119")\r
-        buf.write("\7x\2\2\u0119\u011a\7q\2\2\u011a\u011b\7k\2\2\u011b\u011c")\r
-        buf.write("\7f\2\2\u011c\30\3\2\2\2\u011d\u011e\7e\2\2\u011e\u011f")\r
-        buf.write("\7j\2\2\u011f\u0120\7c\2\2\u0120\u0121\7t\2\2\u0121\32")\r
-        buf.write("\3\2\2\2\u0122\u0123\7u\2\2\u0123\u0124\7j\2\2\u0124\u0125")\r
-        buf.write("\7q\2\2\u0125\u0126\7t\2\2\u0126\u0127\7v\2\2\u0127\34")\r
-        buf.write("\3\2\2\2\u0128\u0129\7k\2\2\u0129\u012a\7p\2\2\u012a\u012b")\r
-        buf.write("\7v\2\2\u012b\36\3\2\2\2\u012c\u012d\7n\2\2\u012d\u012e")\r
-        buf.write("\7q\2\2\u012e\u012f\7p\2\2\u012f\u0130\7i\2\2\u0130 \3")\r
-        buf.write("\2\2\2\u0131\u0132\7h\2\2\u0132\u0133\7n\2\2\u0133\u0134")\r
-        buf.write("\7q\2\2\u0134\u0135\7c\2\2\u0135\u0136\7v\2\2\u0136\"")\r
-        buf.write("\3\2\2\2\u0137\u0138\7f\2\2\u0138\u0139\7q\2\2\u0139\u013a")\r
-        buf.write("\7w\2\2\u013a\u013b\7d\2\2\u013b\u013c\7n\2\2\u013c\u013d")\r
-        buf.write("\7g\2\2\u013d$\3\2\2\2\u013e\u013f\7u\2\2\u013f\u0140")\r
-        buf.write("\7k\2\2\u0140\u0141\7i\2\2\u0141\u0142\7p\2\2\u0142\u0143")\r
-        buf.write("\7g\2\2\u0143\u0144\7f\2\2\u0144&\3\2\2\2\u0145\u0146")\r
-        buf.write("\7w\2\2\u0146\u0147\7p\2\2\u0147\u0148\7u\2\2\u0148\u0149")\r
-        buf.write("\7k\2\2\u0149\u014a\7i\2\2\u014a\u014b\7p\2\2\u014b\u014c")\r
-        buf.write("\7g\2\2\u014c\u014d\7f\2\2\u014d(\3\2\2\2\u014e\u014f")\r
-        buf.write("\7\177\2\2\u014f*\3\2\2\2\u0150\u0151\7u\2\2\u0151\u0152")\r
-        buf.write("\7v\2\2\u0152\u0153\7t\2\2\u0153\u0154\7w\2\2\u0154\u0155")\r
-        buf.write("\7e\2\2\u0155\u0156\7v\2\2\u0156,\3\2\2\2\u0157\u0158")\r
-        buf.write("\7w\2\2\u0158\u0159\7p\2\2\u0159\u015a\7k\2\2\u015a\u015b")\r
-        buf.write("\7q\2\2\u015b\u015c\7p\2\2\u015c.\3\2\2\2\u015d\u015e")\r
-        buf.write("\7<\2\2\u015e\60\3\2\2\2\u015f\u0160\7g\2\2\u0160\u0161")\r
-        buf.write("\7p\2\2\u0161\u0162\7w\2\2\u0162\u0163\7o\2\2\u0163\62")\r
-        buf.write("\3\2\2\2\u0164\u0165\7e\2\2\u0165\u0166\7q\2\2\u0166\u0167")\r
-        buf.write("\7p\2\2\u0167\u0168\7u\2\2\u0168\u0169\7v\2\2\u0169\64")\r
-        buf.write("\3\2\2\2\u016a\u016b\7x\2\2\u016b\u016c\7q\2\2\u016c\u016d")\r
-        buf.write("\7n\2\2\u016d\u016e\7c\2\2\u016e\u016f\7v\2\2\u016f\u0170")\r
-        buf.write("\7k\2\2\u0170\u0171\7n\2\2\u0171\u0172\7g\2\2\u0172\66")\r
-        buf.write("\3\2\2\2\u0173\u0174\7K\2\2\u0174\u0175\7P\2\2\u01758")\r
-        buf.write("\3\2\2\2\u0176\u0177\7Q\2\2\u0177\u0178\7W\2\2\u0178\u0179")\r
-        buf.write("\7V\2\2\u0179:\3\2\2\2\u017a\u017b\7Q\2\2\u017b\u017c")\r
-        buf.write("\7R\2\2\u017c\u017d\7V\2\2\u017d\u017e\7K\2\2\u017e\u017f")\r
-        buf.write("\7Q\2\2\u017f\u0180\7P\2\2\u0180\u0181\7C\2\2\u0181\u0182")\r
-        buf.write("\7N\2\2\u0182<\3\2\2\2\u0183\u0184\7E\2\2\u0184\u0185")\r
-        buf.write("\7Q\2\2\u0185\u0186\7P\2\2\u0186\u0187\7U\2\2\u0187\u0188")\r
-        buf.write("\7V\2\2\u0188>\3\2\2\2\u0189\u018a\7W\2\2\u018a\u018b")\r
-        buf.write("\7P\2\2\u018b\u018c\7C\2\2\u018c\u018d\7N\2\2\u018d\u018e")\r
-        buf.write("\7K\2\2\u018e\u018f\7I\2\2\u018f\u0190\7P\2\2\u0190\u0191")\r
-        buf.write("\7G\2\2\u0191\u0192\7F\2\2\u0192@\3\2\2\2\u0193\u0194")\r
-        buf.write("\7X\2\2\u0194\u0195\7Q\2\2\u0195\u0196\7N\2\2\u0196\u0197")\r
-        buf.write("\7C\2\2\u0197\u0198\7V\2\2\u0198\u0199\7K\2\2\u0199\u019a")\r
-        buf.write("\7N\2\2\u019a\u019b\7G\2\2\u019bB\3\2\2\2\u019c\u019d")\r
-        buf.write("\7I\2\2\u019d\u019e\7N\2\2\u019e\u019f\7Q\2\2\u019f\u01a0")\r
-        buf.write("\7D\2\2\u01a0\u01a1\7C\2\2\u01a1\u01a2\7N\2\2\u01a2\u01a3")\r
-        buf.write("\7a\2\2\u01a3\u01a4\7T\2\2\u01a4\u01a5\7G\2\2\u01a5\u01a6")\r
-        buf.write("\7O\2\2\u01a6\u01a7\7Q\2\2\u01a7\u01a8\7X\2\2\u01a8\u01a9")\r
-        buf.write("\7G\2\2\u01a9\u01aa\7a\2\2\u01aa\u01ab\7K\2\2\u01ab\u01ac")\r
-        buf.write("\7H\2\2\u01ac\u01ad\7a\2\2\u01ad\u01ae\7W\2\2\u01ae\u01af")\r
-        buf.write("\7P\2\2\u01af\u01b0\7T\2\2\u01b0\u01b1\7G\2\2\u01b1\u01b2")\r
-        buf.write("\7H\2\2\u01b2\u01b3\7G\2\2\u01b3\u01b4\7T\2\2\u01b4\u01b5")\r
-        buf.write("\7G\2\2\u01b5\u01b6\7P\2\2\u01b6\u01b7\7E\2\2\u01b7\u01b8")\r
-        buf.write("\7G\2\2\u01b8\u01b9\7F\2\2\u01b9D\3\2\2\2\u01ba\u01bb")\r
-        buf.write("\7G\2\2\u01bb\u01bc\7H\2\2\u01bc\u01bd\7K\2\2\u01bd\u01be")\r
-        buf.write("\7C\2\2\u01be\u01bf\7R\2\2\u01bf\u01c0\7K\2\2\u01c0F\3")\r
-        buf.write("\2\2\2\u01c1\u01c2\7G\2\2\u01c2\u01c3\7H\2\2\u01c3\u01c4")\r
-        buf.write("\7K\2\2\u01c4\u01c5\7a\2\2\u01c5\u01c6\7D\2\2\u01c6\u01c7")\r
-        buf.write("\7Q\2\2\u01c7\u01c8\7Q\2\2\u01c8\u01c9\7V\2\2\u01c9\u01ca")\r
-        buf.write("\7U\2\2\u01ca\u01cb\7G\2\2\u01cb\u01cc\7T\2\2\u01cc\u01cd")\r
-        buf.write("\7X\2\2\u01cd\u01ce\7K\2\2\u01ce\u01cf\7E\2\2\u01cf\u01d0")\r
-        buf.write("\7G\2\2\u01d0H\3\2\2\2\u01d1\u01d2\7G\2\2\u01d2\u01d3")\r
-        buf.write("\7H\2\2\u01d3\u01d4\7K\2\2\u01d4\u01d5\7a\2\2\u01d5\u01d6")\r
-        buf.write("\7T\2\2\u01d6\u01d7\7W\2\2\u01d7\u01d8\7P\2\2\u01d8\u01d9")\r
-        buf.write("\7V\2\2\u01d9\u01da\7K\2\2\u01da\u01db\7O\2\2\u01db\u01dc")\r
-        buf.write("\7G\2\2\u01dc\u01dd\7U\2\2\u01dd\u01de\7G\2\2\u01de\u01df")\r
-        buf.write("\7T\2\2\u01df\u01e0\7X\2\2\u01e0\u01e1\7K\2\2\u01e1\u01e2")\r
-        buf.write("\7E\2\2\u01e2\u01e3\7G\2\2\u01e3J\3\2\2\2\u01e4\u01e5")\r
-        buf.write("\7R\2\2\u01e5\u01e6\7C\2\2\u01e6\u01e7\7E\2\2\u01e7\u01e8")\r
-        buf.write("\7M\2\2\u01e8\u01e9\7G\2\2\u01e9\u01ea\7F\2\2\u01eaL\3")\r
-        buf.write("\2\2\2\u01eb\u01ec\7*\2\2\u01ecN\3\2\2\2\u01ed\u01ee\7")\r
-        buf.write("+\2\2\u01eeP\3\2\2\2\u01ef\u01f0\7]\2\2\u01f0R\3\2\2\2")\r
-        buf.write("\u01f1\u01f2\7_\2\2\u01f2T\3\2\2\2\u01f3\u01f4\7,\2\2")\r
-        buf.write("\u01f4V\3\2\2\2\u01f5\u01f6\7\60\2\2\u01f6\u01f7\7\60")\r
-        buf.write("\2\2\u01f7\u01f8\7\60\2\2\u01f8X\3\2\2\2\u01f9\u01fa\7")\r
-        buf.write("-\2\2\u01faZ\3\2\2\2\u01fb\u01fc\7/\2\2\u01fc\\\3\2\2")\r
-        buf.write("\2\u01fd\u01fe\7\61\2\2\u01fe^\3\2\2\2\u01ff\u0200\7\'")\r
-        buf.write("\2\2\u0200`\3\2\2\2\u0201\u0202\7-\2\2\u0202\u0203\7-")\r
-        buf.write("\2\2\u0203b\3\2\2\2\u0204\u0205\7/\2\2\u0205\u0206\7/")\r
-        buf.write("\2\2\u0206d\3\2\2\2\u0207\u0208\7u\2\2\u0208\u0209\7k")\r
-        buf.write("\2\2\u0209\u020a\7|\2\2\u020a\u020b\7g\2\2\u020b\u020c")\r
-        buf.write("\7q\2\2\u020c\u020d\7h\2\2\u020df\3\2\2\2\u020e\u020f")\r
-        buf.write("\7\60\2\2\u020fh\3\2\2\2\u0210\u0211\7/\2\2\u0211\u0212")\r
-        buf.write("\7@\2\2\u0212j\3\2\2\2\u0213\u0214\7(\2\2\u0214l\3\2\2")\r
-        buf.write("\2\u0215\u0216\7\u0080\2\2\u0216n\3\2\2\2\u0217\u0218")\r
-        buf.write("\7#\2\2\u0218p\3\2\2\2\u0219\u021a\7,\2\2\u021a\u021b")\r
-        buf.write("\7?\2\2\u021br\3\2\2\2\u021c\u021d\7\61\2\2\u021d\u021e")\r
-        buf.write("\7?\2\2\u021et\3\2\2\2\u021f\u0220\7\'\2\2\u0220\u0221")\r
-        buf.write("\7?\2\2\u0221v\3\2\2\2\u0222\u0223\7-\2\2\u0223\u0224")\r
-        buf.write("\7?\2\2\u0224x\3\2\2\2\u0225\u0226\7/\2\2\u0226\u0227")\r
-        buf.write("\7?\2\2\u0227z\3\2\2\2\u0228\u0229\7>\2\2\u0229\u022a")\r
-        buf.write("\7>\2\2\u022a\u022b\7?\2\2\u022b|\3\2\2\2\u022c\u022d")\r
-        buf.write("\7@\2\2\u022d\u022e\7@\2\2\u022e\u022f\7?\2\2\u022f~\3")\r
-        buf.write("\2\2\2\u0230\u0231\7(\2\2\u0231\u0232\7?\2\2\u0232\u0080")\r
-        buf.write("\3\2\2\2\u0233\u0234\7`\2\2\u0234\u0235\7?\2\2\u0235\u0082")\r
-        buf.write("\3\2\2\2\u0236\u0237\7~\2\2\u0237\u0238\7?\2\2\u0238\u0084")\r
-        buf.write("\3\2\2\2\u0239\u023a\7A\2\2\u023a\u0086\3\2\2\2\u023b")\r
-        buf.write("\u023c\7~\2\2\u023c\u023d\7~\2\2\u023d\u0088\3\2\2\2\u023e")\r
-        buf.write("\u023f\7(\2\2\u023f\u0240\7(\2\2\u0240\u008a\3\2\2\2\u0241")\r
-        buf.write("\u0242\7~\2\2\u0242\u008c\3\2\2\2\u0243\u0244\7`\2\2\u0244")\r
-        buf.write("\u008e\3\2\2\2\u0245\u0246\7?\2\2\u0246\u0247\7?\2\2\u0247")\r
-        buf.write("\u0090\3\2\2\2\u0248\u0249\7#\2\2\u0249\u024a\7?\2\2\u024a")\r
-        buf.write("\u0092\3\2\2\2\u024b\u024c\7>\2\2\u024c\u0094\3\2\2\2")\r
-        buf.write("\u024d\u024e\7@\2\2\u024e\u0096\3\2\2\2\u024f\u0250\7")\r
-        buf.write(">\2\2\u0250\u0251\7?\2\2\u0251\u0098\3\2\2\2\u0252\u0253")\r
-        buf.write("\7@\2\2\u0253\u0254\7?\2\2\u0254\u009a\3\2\2\2\u0255\u0256")\r
-        buf.write("\7>\2\2\u0256\u0257\7>\2\2\u0257\u009c\3\2\2\2\u0258\u0259")\r
-        buf.write("\7@\2\2\u0259\u025a\7@\2\2\u025a\u009e\3\2\2\2\u025b\u025c")\r
-        buf.write("\7a\2\2\u025c\u025d\7a\2\2\u025d\u025e\7c\2\2\u025e\u025f")\r
-        buf.write("\7u\2\2\u025f\u0260\7o\2\2\u0260\u0261\7a\2\2\u0261\u0262")\r
-        buf.write("\7a\2\2\u0262\u00a0\3\2\2\2\u0263\u0264\7a\2\2\u0264\u0265")\r
-        buf.write("\7c\2\2\u0265\u0266\7u\2\2\u0266\u0267\7o\2\2\u0267\u00a2")\r
-        buf.write("\3\2\2\2\u0268\u0269\7a\2\2\u0269\u026a\7a\2\2\u026a\u026b")\r
-        buf.write("\7c\2\2\u026b\u026c\7u\2\2\u026c\u026d\7o\2\2\u026d\u00a4")\r
-        buf.write("\3\2\2\2\u026e\u026f\7e\2\2\u026f\u0270\7c\2\2\u0270\u0271")\r
-        buf.write("\7u\2\2\u0271\u0272\7g\2\2\u0272\u00a6\3\2\2\2\u0273\u0274")\r
-        buf.write("\7f\2\2\u0274\u0275\7g\2\2\u0275\u0276\7h\2\2\u0276\u0277")\r
-        buf.write("\7c\2\2\u0277\u0278\7w\2\2\u0278\u0279\7n\2\2\u0279\u027a")\r
-        buf.write("\7v\2\2\u027a\u00a8\3\2\2\2\u027b\u027c\7k\2\2\u027c\u027d")\r
-        buf.write("\7h\2\2\u027d\u00aa\3\2\2\2\u027e\u027f\7g\2\2\u027f\u0280")\r
-        buf.write("\7n\2\2\u0280\u0281\7u\2\2\u0281\u0282\7g\2\2\u0282\u00ac")\r
-        buf.write("\3\2\2\2\u0283\u0284\7u\2\2\u0284\u0285\7y\2\2\u0285\u0286")\r
-        buf.write("\7k\2\2\u0286\u0287\7v\2\2\u0287\u0288\7e\2\2\u0288\u0289")\r
-        buf.write("\7j\2\2\u0289\u00ae\3\2\2\2\u028a\u028b\7y\2\2\u028b\u028c")\r
-        buf.write("\7j\2\2\u028c\u028d\7k\2\2\u028d\u028e\7n\2\2\u028e\u028f")\r
-        buf.write("\7g\2\2\u028f\u00b0\3\2\2\2\u0290\u0291\7f\2\2\u0291\u0292")\r
-        buf.write("\7q\2\2\u0292\u00b2\3\2\2\2\u0293\u0294\7i\2\2\u0294\u0295")\r
-        buf.write("\7q\2\2\u0295\u0296\7v\2\2\u0296\u0297\7q\2\2\u0297\u00b4")\r
-        buf.write("\3\2\2\2\u0298\u0299\7e\2\2\u0299\u029a\7q\2\2\u029a\u029b")\r
-        buf.write("\7p\2\2\u029b\u029c\7v\2\2\u029c\u029d\7k\2\2\u029d\u029e")\r
-        buf.write("\7p\2\2\u029e\u029f\7w\2\2\u029f\u02a0\7g\2\2\u02a0\u00b6")\r
-        buf.write("\3\2\2\2\u02a1\u02a2\7d\2\2\u02a2\u02a3\7t\2\2\u02a3\u02a4")\r
-        buf.write("\7g\2\2\u02a4\u02a5\7c\2\2\u02a5\u02a6\7m\2\2\u02a6\u00b8")\r
-        buf.write("\3\2\2\2\u02a7\u02a8\7t\2\2\u02a8\u02a9\7g\2\2\u02a9\u02aa")\r
-        buf.write("\7v\2\2\u02aa\u02ab\7w\2\2\u02ab\u02ac\7t\2\2\u02ac\u02ad")\r
-        buf.write("\7p\2\2\u02ad\u00ba\3\2\2\2\u02ae\u02b3\5\u00bd_\2\u02af")\r
-        buf.write("\u02b2\5\u00bd_\2\u02b0\u02b2\4\62;\2\u02b1\u02af\3\2")\r
-        buf.write("\2\2\u02b1\u02b0\3\2\2\2\u02b2\u02b5\3\2\2\2\u02b3\u02b1")\r
-        buf.write("\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u00bc\3\2\2\2\u02b5")\r
-        buf.write("\u02b3\3\2\2\2\u02b6\u02b7\t\2\2\2\u02b7\u00be\3\2\2\2")\r
-        buf.write("\u02b8\u02ba\7N\2\2\u02b9\u02b8\3\2\2\2\u02b9\u02ba\3")\r
-        buf.write("\2\2\2\u02ba\u02bb\3\2\2\2\u02bb\u02be\7)\2\2\u02bc\u02bf")\r
-        buf.write("\5\u00d3j\2\u02bd\u02bf\n\3\2\2\u02be\u02bc\3\2\2\2\u02be")\r
-        buf.write("\u02bd\3\2\2\2\u02bf\u02c0\3\2\2\2\u02c0\u02c1\7)\2\2")\r
-        buf.write("\u02c1\u00c0\3\2\2\2\u02c2\u02c4\7N\2\2\u02c3\u02c2\3")\r
-        buf.write("\2\2\2\u02c3\u02c4\3\2\2\2\u02c4\u02c5\3\2\2\2\u02c5\u02ca")\r
-        buf.write("\7$\2\2\u02c6\u02c9\5\u00d3j\2\u02c7\u02c9\n\4\2\2\u02c8")\r
-        buf.write("\u02c6\3\2\2\2\u02c8\u02c7\3\2\2\2\u02c9\u02cc\3\2\2\2")\r
-        buf.write("\u02ca\u02c8\3\2\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02cd\3")\r
-        buf.write("\2\2\2\u02cc\u02ca\3\2\2\2\u02cd\u02ce\7$\2\2\u02ce\u00c2")\r
-        buf.write("\3\2\2\2\u02cf\u02d0\7\62\2\2\u02d0\u02d2\t\5\2\2\u02d1")\r
-        buf.write("\u02d3\5\u00c9e\2\u02d2\u02d1\3\2\2\2\u02d3\u02d4\3\2")\r
-        buf.write("\2\2\u02d4\u02d2\3\2\2\2\u02d4\u02d5\3\2\2\2\u02d5\u02d7")\r
-        buf.write("\3\2\2\2\u02d6\u02d8\5\u00cbf\2\u02d7\u02d6\3\2\2\2\u02d7")\r
-        buf.write("\u02d8\3\2\2\2\u02d8\u00c4\3\2\2\2\u02d9\u02e2\7\62\2")\r
-        buf.write("\2\u02da\u02de\4\63;\2\u02db\u02dd\4\62;\2\u02dc\u02db")\r
-        buf.write("\3\2\2\2\u02dd\u02e0\3\2\2\2\u02de\u02dc\3\2\2\2\u02de")\r
-        buf.write("\u02df\3\2\2\2\u02df\u02e2\3\2\2\2\u02e0\u02de\3\2\2\2")\r
-        buf.write("\u02e1\u02d9\3\2\2\2\u02e1\u02da\3\2\2\2\u02e2\u02e4\3")\r
-        buf.write("\2\2\2\u02e3\u02e5\5\u00cbf\2\u02e4\u02e3\3\2\2\2\u02e4")\r
-        buf.write("\u02e5\3\2\2\2\u02e5\u00c6\3\2\2\2\u02e6\u02e8\7\62\2")\r
-        buf.write("\2\u02e7\u02e9\4\629\2\u02e8\u02e7\3\2\2\2\u02e9\u02ea")\r
-        buf.write("\3\2\2\2\u02ea\u02e8\3\2\2\2\u02ea\u02eb\3\2\2\2\u02eb")\r
-        buf.write("\u02ed\3\2\2\2\u02ec\u02ee\5\u00cbf\2\u02ed\u02ec\3\2")\r
-        buf.write("\2\2\u02ed\u02ee\3\2\2\2\u02ee\u00c8\3\2\2\2\u02ef\u02f0")\r
-        buf.write("\t\6\2\2\u02f0\u00ca\3\2\2\2\u02f1\u02f8\t\7\2\2\u02f2")\r
-        buf.write("\u02f3\t\b\2\2\u02f3\u02f8\t\t\2\2\u02f4\u02f5\t\b\2\2")\r
-        buf.write("\u02f5\u02f6\t\t\2\2\u02f6\u02f8\t\t\2\2\u02f7\u02f1\3")\r
-        buf.write("\2\2\2\u02f7\u02f2\3\2\2\2\u02f7\u02f4\3\2\2\2\u02f8\u00cc")\r
-        buf.write("\3\2\2\2\u02f9\u02fb\4\62;\2\u02fa\u02f9\3\2\2\2\u02fb")\r
-        buf.write("\u02fc\3\2\2\2\u02fc\u02fa\3\2\2\2\u02fc\u02fd\3\2\2\2")\r
-        buf.write("\u02fd\u02fe\3\2\2\2\u02fe\u0302\7\60\2\2\u02ff\u0301")\r
-        buf.write("\4\62;\2\u0300\u02ff\3\2\2\2\u0301\u0304\3\2\2\2\u0302")\r
-        buf.write("\u0300\3\2\2\2\u0302\u0303\3\2\2\2\u0303\u0306\3\2\2\2")\r
-        buf.write("\u0304\u0302\3\2\2\2\u0305\u0307\5\u00cfh\2\u0306\u0305")\r
-        buf.write("\3\2\2\2\u0306\u0307\3\2\2\2\u0307\u0309\3\2\2\2\u0308")\r
-        buf.write("\u030a\5\u00d1i\2\u0309\u0308\3\2\2\2\u0309\u030a\3\2")\r
-        buf.write("\2\2\u030a\u032a\3\2\2\2\u030b\u030d\7\60\2\2\u030c\u030e")\r
-        buf.write("\4\62;\2\u030d\u030c\3\2\2\2\u030e\u030f\3\2\2\2\u030f")\r
-        buf.write("\u030d\3\2\2\2\u030f\u0310\3\2\2\2\u0310\u0312\3\2\2\2")\r
-        buf.write("\u0311\u0313\5\u00cfh\2\u0312\u0311\3\2\2\2\u0312\u0313")\r
-        buf.write("\3\2\2\2\u0313\u0315\3\2\2\2\u0314\u0316\5\u00d1i\2\u0315")\r
-        buf.write("\u0314\3\2\2\2\u0315\u0316\3\2\2\2\u0316\u032a\3\2\2\2")\r
-        buf.write("\u0317\u0319\4\62;\2\u0318\u0317\3\2\2\2\u0319\u031a\3")\r
-        buf.write("\2\2\2\u031a\u0318\3\2\2\2\u031a\u031b\3\2\2\2\u031b\u031c")\r
-        buf.write("\3\2\2\2\u031c\u031e\5\u00cfh\2\u031d\u031f\5\u00d1i\2")\r
-        buf.write("\u031e\u031d\3\2\2\2\u031e\u031f\3\2\2\2\u031f\u032a\3")\r
-        buf.write("\2\2\2\u0320\u0322\4\62;\2\u0321\u0320\3\2\2\2\u0322\u0323")\r
-        buf.write("\3\2\2\2\u0323\u0321\3\2\2\2\u0323\u0324\3\2\2\2\u0324")\r
-        buf.write("\u0326\3\2\2\2\u0325\u0327\5\u00cfh\2\u0326\u0325\3\2")\r
-        buf.write("\2\2\u0326\u0327\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u032a")\r
-        buf.write("\5\u00d1i\2\u0329\u02fa\3\2\2\2\u0329\u030b\3\2\2\2\u0329")\r
-        buf.write("\u0318\3\2\2\2\u0329\u0321\3\2\2\2\u032a\u00ce\3\2\2\2")\r
-        buf.write("\u032b\u032d\t\n\2\2\u032c\u032e\t\13\2\2\u032d\u032c")\r
-        buf.write("\3\2\2\2\u032d\u032e\3\2\2\2\u032e\u0330\3\2\2\2\u032f")\r
-        buf.write("\u0331\4\62;\2\u0330\u032f\3\2\2\2\u0331\u0332\3\2\2\2")\r
-        buf.write("\u0332\u0330\3\2\2\2\u0332\u0333\3\2\2\2\u0333\u00d0\3")\r
-        buf.write("\2\2\2\u0334\u0335\t\f\2\2\u0335\u00d2\3\2\2\2\u0336\u0337")\r
-        buf.write("\7^\2\2\u0337\u033a\t\r\2\2\u0338\u033a\5\u00d5k\2\u0339")\r
-        buf.write("\u0336\3\2\2\2\u0339\u0338\3\2\2\2\u033a\u00d4\3\2\2\2")\r
-        buf.write("\u033b\u033c\7^\2\2\u033c\u033d\4\62\65\2\u033d\u033e")\r
-        buf.write("\4\629\2\u033e\u0345\4\629\2\u033f\u0340\7^\2\2\u0340")\r
-        buf.write("\u0341\4\629\2\u0341\u0345\4\629\2\u0342\u0343\7^\2\2")\r
-        buf.write("\u0343\u0345\4\629\2\u0344\u033b\3\2\2\2\u0344\u033f\3")\r
-        buf.write("\2\2\2\u0344\u0342\3\2\2\2\u0345\u00d6\3\2\2\2\u0346\u0347")\r
-        buf.write("\7^\2\2\u0347\u0348\7w\2\2\u0348\u0349\5\u00c9e\2\u0349")\r
-        buf.write("\u034a\5\u00c9e\2\u034a\u034b\5\u00c9e\2\u034b\u034c\5")\r
-        buf.write("\u00c9e\2\u034c\u00d8\3\2\2\2\u034d\u034e\t\16\2\2\u034e")\r
-        buf.write("\u034f\3\2\2\2\u034f\u0350\bm\2\2\u0350\u00da\3\2\2\2")\r
-        buf.write("\u0351\u0352\7^\2\2\u0352\u0353\3\2\2\2\u0353\u0354\b")\r
-        buf.write("n\2\2\u0354\u00dc\3\2\2\2\u0355\u0356\4\5\0\2\u0356\u00de")\r
-        buf.write("\3\2\2\2\u0357\u0358\7\61\2\2\u0358\u0359\7,\2\2\u0359")\r
-        buf.write("\u035d\3\2\2\2\u035a\u035c\13\2\2\2\u035b\u035a\3\2\2")\r
-        buf.write("\2\u035c\u035f\3\2\2\2\u035d\u035e\3\2\2\2\u035d\u035b")\r
-        buf.write("\3\2\2\2\u035e\u0360\3\2\2\2\u035f\u035d\3\2\2\2\u0360")\r
-        buf.write("\u0361\7,\2\2\u0361\u0362\7\61\2\2\u0362\u0363\3\2\2\2")\r
-        buf.write("\u0363\u0364\bp\2\2\u0364\u00e0\3\2\2\2\u0365\u0366\7")\r
-        buf.write("\61\2\2\u0366\u0367\7\61\2\2\u0367\u036b\3\2\2\2\u0368")\r
-        buf.write("\u036a\n\17\2\2\u0369\u0368\3\2\2\2\u036a\u036d\3\2\2")\r
-        buf.write("\2\u036b\u0369\3\2\2\2\u036b\u036c\3\2\2\2\u036c\u036f")\r
-        buf.write("\3\2\2\2\u036d\u036b\3\2\2\2\u036e\u0370\7\17\2\2\u036f")\r
-        buf.write("\u036e\3\2\2\2\u036f\u0370\3\2\2\2\u0370\u0371\3\2\2\2")\r
-        buf.write("\u0371\u0372\7\f\2\2\u0372\u0373\3\2\2\2\u0373\u0374\b")\r
-        buf.write("q\2\2\u0374\u00e2\3\2\2\2\u0375\u0379\7%\2\2\u0376\u0378")\r
-        buf.write("\n\17\2\2\u0377\u0376\3\2\2\2\u0378\u037b\3\2\2\2\u0379")\r
-        buf.write("\u0377\3\2\2\2\u0379\u037a\3\2\2\2\u037a\u037d\3\2\2\2")\r
-        buf.write("\u037b\u0379\3\2\2\2\u037c\u037e\7\17\2\2\u037d\u037c")\r
-        buf.write("\3\2\2\2\u037d\u037e\3\2\2\2\u037e\u037f\3\2\2\2\u037f")\r
-        buf.write("\u0380\7\f\2\2\u0380\u0381\3\2\2\2\u0381\u0382\br\2\2")\r
-        buf.write("\u0382\u00e4\3\2\2\2\'\2\u02b1\u02b3\u02b9\u02be\u02c3")\r
-        buf.write("\u02c8\u02ca\u02d4\u02d7\u02de\u02e1\u02e4\u02ea\u02ed")\r
-        buf.write("\u02f7\u02fc\u0302\u0306\u0309\u030f\u0312\u0315\u031a")\r
-        buf.write("\u031e\u0323\u0326\u0329\u032d\u0332\u0339\u0344\u035d")\r
-        buf.write("\u036b\u036f\u0379\u037d\3\2\3\2")\r
-        return buf.getvalue()\r
 \r
 \r
+# for convenience in actions\r
+HIDDEN = BaseRecognizer.HIDDEN\r
+\r
+# token types\r
+T114=114\r
+T115=115\r
+T116=116\r
+T117=117\r
+FloatTypeSuffix=16\r
+LETTER=11\r
+T29=29\r
+T28=28\r
+T27=27\r
+T26=26\r
+T25=25\r
+EOF=-1\r
+STRING_LITERAL=9\r
+FLOATING_POINT_LITERAL=10\r
+T38=38\r
+T37=37\r
+T39=39\r
+T34=34\r
+COMMENT=22\r
+T33=33\r
+T36=36\r
+T35=35\r
+T30=30\r
+T32=32\r
+T31=31\r
+LINE_COMMENT=23\r
+IntegerTypeSuffix=14\r
+CHARACTER_LITERAL=8\r
+T49=49\r
+T48=48\r
+T100=100\r
+T43=43\r
+T42=42\r
+T102=102\r
+T41=41\r
+T101=101\r
+T40=40\r
+T47=47\r
+T46=46\r
+T45=45\r
+T44=44\r
+T109=109\r
+T107=107\r
+T108=108\r
+T105=105\r
+WS=19\r
+T106=106\r
+T103=103\r
+T104=104\r
+T50=50\r
+LINE_COMMAND=24\r
+T59=59\r
+T113=113\r
+T52=52\r
+T112=112\r
+T51=51\r
+T111=111\r
+T54=54\r
+T110=110\r
+EscapeSequence=12\r
+DECIMAL_LITERAL=7\r
+T53=53\r
+T56=56\r
+T55=55\r
+T58=58\r
+T57=57\r
+T75=75\r
+T76=76\r
+T73=73\r
+T74=74\r
+T79=79\r
+T77=77\r
+T78=78\r
+Exponent=15\r
+HexDigit=13\r
+T72=72\r
+T71=71\r
+T70=70\r
+T62=62\r
+T63=63\r
+T64=64\r
+T65=65\r
+T66=66\r
+T67=67\r
+T68=68\r
+T69=69\r
+IDENTIFIER=4\r
+UnicodeVocabulary=21\r
+HEX_LITERAL=5\r
+T61=61\r
+T60=60\r
+T99=99\r
+T97=97\r
+BS=20\r
+T98=98\r
+T95=95\r
+T96=96\r
+OCTAL_LITERAL=6\r
+T94=94\r
+Tokens=118\r
+T93=93\r
+T92=92\r
+T91=91\r
+T90=90\r
+T88=88\r
+T89=89\r
+T84=84\r
+T85=85\r
+T86=86\r
+T87=87\r
+UnicodeEscape=18\r
+T81=81\r
+T80=80\r
+T83=83\r
+OctalEscape=17\r
+T82=82\r
+\r
 class CLexer(Lexer):\r
 \r
-    atn = ATNDeserializer().deserialize(serializedATN())\r
-\r
-    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]\r
-\r
-    T__0 = 1\r
-    T__1 = 2\r
-    T__2 = 3\r
-    T__3 = 4\r
-    T__4 = 5\r
-    T__5 = 6\r
-    T__6 = 7\r
-    T__7 = 8\r
-    T__8 = 9\r
-    T__9 = 10\r
-    T__10 = 11\r
-    T__11 = 12\r
-    T__12 = 13\r
-    T__13 = 14\r
-    T__14 = 15\r
-    T__15 = 16\r
-    T__16 = 17\r
-    T__17 = 18\r
-    T__18 = 19\r
-    T__19 = 20\r
-    T__20 = 21\r
-    T__21 = 22\r
-    T__22 = 23\r
-    T__23 = 24\r
-    T__24 = 25\r
-    T__25 = 26\r
-    T__26 = 27\r
-    T__27 = 28\r
-    T__28 = 29\r
-    T__29 = 30\r
-    T__30 = 31\r
-    T__31 = 32\r
-    T__32 = 33\r
-    T__33 = 34\r
-    T__34 = 35\r
-    T__35 = 36\r
-    T__36 = 37\r
-    T__37 = 38\r
-    T__38 = 39\r
-    T__39 = 40\r
-    T__40 = 41\r
-    T__41 = 42\r
-    T__42 = 43\r
-    T__43 = 44\r
-    T__44 = 45\r
-    T__45 = 46\r
-    T__46 = 47\r
-    T__47 = 48\r
-    T__48 = 49\r
-    T__49 = 50\r
-    T__50 = 51\r
-    T__51 = 52\r
-    T__52 = 53\r
-    T__53 = 54\r
-    T__54 = 55\r
-    T__55 = 56\r
-    T__56 = 57\r
-    T__57 = 58\r
-    T__58 = 59\r
-    T__59 = 60\r
-    T__60 = 61\r
-    T__61 = 62\r
-    T__62 = 63\r
-    T__63 = 64\r
-    T__64 = 65\r
-    T__65 = 66\r
-    T__66 = 67\r
-    T__67 = 68\r
-    T__68 = 69\r
-    T__69 = 70\r
-    T__70 = 71\r
-    T__71 = 72\r
-    T__72 = 73\r
-    T__73 = 74\r
-    T__74 = 75\r
-    T__75 = 76\r
-    T__76 = 77\r
-    T__77 = 78\r
-    T__78 = 79\r
-    T__79 = 80\r
-    T__80 = 81\r
-    T__81 = 82\r
-    T__82 = 83\r
-    T__83 = 84\r
-    T__84 = 85\r
-    T__85 = 86\r
-    T__86 = 87\r
-    T__87 = 88\r
-    T__88 = 89\r
-    T__89 = 90\r
-    T__90 = 91\r
-    T__91 = 92\r
-    IDENTIFIER = 93\r
-    CHARACTER_LITERAL = 94\r
-    STRING_LITERAL = 95\r
-    HEX_LITERAL = 96\r
-    DECIMAL_LITERAL = 97\r
-    OCTAL_LITERAL = 98\r
-    FLOATING_POINT_LITERAL = 99\r
-    WS = 100\r
-    BS = 101\r
-    UnicodeVocabulary = 102\r
-    COMMENT = 103\r
-    LINE_COMMENT = 104\r
-    LINE_COMMAND = 105\r
-\r
-    channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]\r
-\r
-    modeNames = [ "DEFAULT_MODE" ]\r
-\r
-    literalNames = [ "<INVALID>",\r
-            "'{'", "';'", "'typedef'", "','", "'='", "'extern'", "'static'", \r
-            "'auto'", "'register'", "'STATIC'", "'void'", "'char'", "'short'", \r
-            "'int'", "'long'", "'float'", "'double'", "'signed'", "'unsigned'", \r
-            "'}'", "'struct'", "'union'", "':'", "'enum'", "'const'", "'volatile'", \r
-            "'IN'", "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'", "'VOLATILE'", \r
-            "'GLOBAL_REMOVE_IF_UNREFERENCED'", "'EFIAPI'", "'EFI_BOOTSERVICE'", \r
-            "'EFI_RUNTIMESERVICE'", "'PACKED'", "'('", "')'", "'['", "']'", \r
-            "'*'", "'...'", "'+'", "'-'", "'/'", "'%'", "'++'", "'--'", \r
-            "'sizeof'", "'.'", "'->'", "'&'", "'~'", "'!'", "'*='", "'/='", \r
-            "'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='", \r
-            "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'<'", \r
-            "'>'", "'<='", "'>='", "'<<'", "'>>'", "'__asm__'", "'_asm'", \r
-            "'__asm'", "'case'", "'default'", "'if'", "'else'", "'switch'", \r
-            "'while'", "'do'", "'goto'", "'continue'", "'break'", "'return'" ]\r
-\r
-    symbolicNames = [ "<INVALID>",\r
-            "IDENTIFIER", "CHARACTER_LITERAL", "STRING_LITERAL", "HEX_LITERAL", \r
-            "DECIMAL_LITERAL", "OCTAL_LITERAL", "FLOATING_POINT_LITERAL", \r
-            "WS", "BS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT", \r
-            "LINE_COMMAND" ]\r
-\r
-    ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", \r
-                  "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", \r
-                  "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", \r
-                  "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", \r
-                  "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", \r
-                  "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", \r
-                  "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", \r
-                  "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", \r
-                  "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", \r
-                  "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", \r
-                  "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", \r
-                  "T__68", "T__69", "T__70", "T__71", "T__72", "T__73", \r
-                  "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", \r
-                  "T__80", "T__81", "T__82", "T__83", "T__84", "T__85", \r
-                  "T__86", "T__87", "T__88", "T__89", "T__90", "T__91", \r
-                  "IDENTIFIER", "LETTER", "CHARACTER_LITERAL", "STRING_LITERAL", \r
-                  "HEX_LITERAL", "DECIMAL_LITERAL", "OCTAL_LITERAL", "HexDigit", \r
-                  "IntegerTypeSuffix", "FLOATING_POINT_LITERAL", "Exponent", \r
-                  "FloatTypeSuffix", "EscapeSequence", "OctalEscape", "UnicodeEscape", \r
-                  "WS", "BS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT", \r
-                  "LINE_COMMAND" ]\r
-\r
-    grammarFileName = "C.g4"\r
-\r
-    def __init__(self, input=None, output:TextIO = sys.stdout):\r
-        super().__init__(input, output)\r
-        self.checkVersion("4.7.1")\r
-        self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache())\r
-        self._actions = None\r
-        self._predicates = None\r
-\r
-\r
-            \r
-    def printTokenInfo(self, line, offset, tokenText):\r
-        print(str(line)+ ',' + str(offset) + ':' + str(tokenText))\r
-        \r
-    def StorePredicateExpression(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.PredicateExpressionList.append(PredExp)\r
-        \r
-    def StoreEnumerationDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.EnumerationDefinitionList.append(EnumDef)\r
-        \r
-    def StoreStructUnionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.StructUnionDefinitionList.append(SUDef)\r
-        \r
-    def StoreTypedefDefinition(self, StartLine, StartOffset, EndLine, EndOffset, FromText, ToText):\r
-        Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.TypedefDefinitionList.append(Tdef)\r
-\r
-    def StoreFunctionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText, LeftBraceLine, LeftBraceOffset, DeclLine, DeclOffset):\r
-        FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))\r
-        FileProfile.FunctionDefinitionList.append(FuncDef)\r
-        \r
-    def StoreVariableDeclaration(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText):\r
-        VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.VariableDeclarationList.append(VarDecl)\r
-\r
-    def StoreFunctionCalling(self, StartLine, StartOffset, EndLine, EndOffset, FuncName, ParamList):\r
-        FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.FunctionCallingList.append(FuncCall)\r
+    grammarFileName = "C.g"\r
+\r
+    def __init__(self, input=None):\r
+        Lexer.__init__(self, input)\r
+        self.dfa25 = self.DFA25(\r
+            self, 25,\r
+            eot = self.DFA25_eot,\r
+            eof = self.DFA25_eof,\r
+            min = self.DFA25_min,\r
+            max = self.DFA25_max,\r
+            accept = self.DFA25_accept,\r
+            special = self.DFA25_special,\r
+            transition = self.DFA25_transition\r
+            )\r
+        self.dfa35 = self.DFA35(\r
+            self, 35,\r
+            eot = self.DFA35_eot,\r
+            eof = self.DFA35_eof,\r
+            min = self.DFA35_min,\r
+            max = self.DFA35_max,\r
+            accept = self.DFA35_accept,\r
+            special = self.DFA35_special,\r
+            transition = self.DFA35_transition\r
+            )\r
+\r
+\r
+\r
+\r
+\r
+\r
+    # $ANTLR start T25\r
+    def mT25(self, ):\r
+\r
+        try:\r
+            self.type = T25\r
+\r
+            # C.g:27:5: ( ';' )\r
+            # C.g:27:7: ';'\r
+            self.match(u';')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T25\r
+\r
+\r
+\r
+    # $ANTLR start T26\r
+    def mT26(self, ):\r
+\r
+        try:\r
+            self.type = T26\r
+\r
+            # C.g:28:5: ( 'typedef' )\r
+            # C.g:28:7: 'typedef'\r
+            self.match("typedef")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T26\r
+\r
+\r
+\r
+    # $ANTLR start T27\r
+    def mT27(self, ):\r
+\r
+        try:\r
+            self.type = T27\r
+\r
+            # C.g:29:5: ( ',' )\r
+            # C.g:29:7: ','\r
+            self.match(u',')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T27\r
+\r
+\r
+\r
+    # $ANTLR start T28\r
+    def mT28(self, ):\r
+\r
+        try:\r
+            self.type = T28\r
+\r
+            # C.g:30:5: ( '=' )\r
+            # C.g:30:7: '='\r
+            self.match(u'=')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T28\r
+\r
+\r
+\r
+    # $ANTLR start T29\r
+    def mT29(self, ):\r
+\r
+        try:\r
+            self.type = T29\r
+\r
+            # C.g:31:5: ( 'extern' )\r
+            # C.g:31:7: 'extern'\r
+            self.match("extern")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T29\r
+\r
+\r
+\r
+    # $ANTLR start T30\r
+    def mT30(self, ):\r
+\r
+        try:\r
+            self.type = T30\r
+\r
+            # C.g:32:5: ( 'static' )\r
+            # C.g:32:7: 'static'\r
+            self.match("static")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T30\r
+\r
+\r
+\r
+    # $ANTLR start T31\r
+    def mT31(self, ):\r
+\r
+        try:\r
+            self.type = T31\r
+\r
+            # C.g:33:5: ( 'auto' )\r
+            # C.g:33:7: 'auto'\r
+            self.match("auto")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T31\r
+\r
+\r
+\r
+    # $ANTLR start T32\r
+    def mT32(self, ):\r
+\r
+        try:\r
+            self.type = T32\r
+\r
+            # C.g:34:5: ( 'register' )\r
+            # C.g:34:7: 'register'\r
+            self.match("register")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T32\r
+\r
+\r
+\r
+    # $ANTLR start T33\r
+    def mT33(self, ):\r
+\r
+        try:\r
+            self.type = T33\r
+\r
+            # C.g:35:5: ( 'STATIC' )\r
+            # C.g:35:7: 'STATIC'\r
+            self.match("STATIC")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T33\r
+\r
+\r
+\r
+    # $ANTLR start T34\r
+    def mT34(self, ):\r
+\r
+        try:\r
+            self.type = T34\r
+\r
+            # C.g:36:5: ( 'void' )\r
+            # C.g:36:7: 'void'\r
+            self.match("void")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T34\r
+\r
+\r
+\r
+    # $ANTLR start T35\r
+    def mT35(self, ):\r
+\r
+        try:\r
+            self.type = T35\r
+\r
+            # C.g:37:5: ( 'char' )\r
+            # C.g:37:7: 'char'\r
+            self.match("char")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T35\r
+\r
+\r
+\r
+    # $ANTLR start T36\r
+    def mT36(self, ):\r
+\r
+        try:\r
+            self.type = T36\r
+\r
+            # C.g:38:5: ( 'short' )\r
+            # C.g:38:7: 'short'\r
+            self.match("short")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T36\r
+\r
+\r
+\r
+    # $ANTLR start T37\r
+    def mT37(self, ):\r
+\r
+        try:\r
+            self.type = T37\r
+\r
+            # C.g:39:5: ( 'int' )\r
+            # C.g:39:7: 'int'\r
+            self.match("int")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T37\r
+\r
+\r
+\r
+    # $ANTLR start T38\r
+    def mT38(self, ):\r
+\r
+        try:\r
+            self.type = T38\r
+\r
+            # C.g:40:5: ( 'long' )\r
+            # C.g:40:7: 'long'\r
+            self.match("long")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T38\r
+\r
+\r
+\r
+    # $ANTLR start T39\r
+    def mT39(self, ):\r
+\r
+        try:\r
+            self.type = T39\r
+\r
+            # C.g:41:5: ( 'float' )\r
+            # C.g:41:7: 'float'\r
+            self.match("float")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T39\r
+\r
+\r
+\r
+    # $ANTLR start T40\r
+    def mT40(self, ):\r
+\r
+        try:\r
+            self.type = T40\r
+\r
+            # C.g:42:5: ( 'double' )\r
+            # C.g:42:7: 'double'\r
+            self.match("double")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T40\r
+\r
+\r
+\r
+    # $ANTLR start T41\r
+    def mT41(self, ):\r
+\r
+        try:\r
+            self.type = T41\r
+\r
+            # C.g:43:5: ( 'signed' )\r
+            # C.g:43:7: 'signed'\r
+            self.match("signed")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T41\r
+\r
+\r
+\r
+    # $ANTLR start T42\r
+    def mT42(self, ):\r
+\r
+        try:\r
+            self.type = T42\r
+\r
+            # C.g:44:5: ( 'unsigned' )\r
+            # C.g:44:7: 'unsigned'\r
+            self.match("unsigned")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T42\r
+\r
+\r
+\r
+    # $ANTLR start T43\r
+    def mT43(self, ):\r
+\r
+        try:\r
+            self.type = T43\r
+\r
+            # C.g:45:5: ( '{' )\r
+            # C.g:45:7: '{'\r
+            self.match(u'{')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T43\r
+\r
+\r
+\r
+    # $ANTLR start T44\r
+    def mT44(self, ):\r
+\r
+        try:\r
+            self.type = T44\r
+\r
+            # C.g:46:5: ( '}' )\r
+            # C.g:46:7: '}'\r
+            self.match(u'}')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T44\r
+\r
+\r
+\r
+    # $ANTLR start T45\r
+    def mT45(self, ):\r
+\r
+        try:\r
+            self.type = T45\r
+\r
+            # C.g:47:5: ( 'struct' )\r
+            # C.g:47:7: 'struct'\r
+            self.match("struct")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T45\r
+\r
+\r
+\r
+    # $ANTLR start T46\r
+    def mT46(self, ):\r
+\r
+        try:\r
+            self.type = T46\r
+\r
+            # C.g:48:5: ( 'union' )\r
+            # C.g:48:7: 'union'\r
+            self.match("union")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T46\r
+\r
+\r
+\r
+    # $ANTLR start T47\r
+    def mT47(self, ):\r
+\r
+        try:\r
+            self.type = T47\r
+\r
+            # C.g:49:5: ( ':' )\r
+            # C.g:49:7: ':'\r
+            self.match(u':')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T47\r
+\r
+\r
+\r
+    # $ANTLR start T48\r
+    def mT48(self, ):\r
+\r
+        try:\r
+            self.type = T48\r
+\r
+            # C.g:50:5: ( 'enum' )\r
+            # C.g:50:7: 'enum'\r
+            self.match("enum")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T48\r
+\r
+\r
+\r
+    # $ANTLR start T49\r
+    def mT49(self, ):\r
+\r
+        try:\r
+            self.type = T49\r
+\r
+            # C.g:51:5: ( 'const' )\r
+            # C.g:51:7: 'const'\r
+            self.match("const")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T49\r
+\r
+\r
+\r
+    # $ANTLR start T50\r
+    def mT50(self, ):\r
+\r
+        try:\r
+            self.type = T50\r
+\r
+            # C.g:52:5: ( 'volatile' )\r
+            # C.g:52:7: 'volatile'\r
+            self.match("volatile")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T50\r
+\r
+\r
+\r
+    # $ANTLR start T51\r
+    def mT51(self, ):\r
+\r
+        try:\r
+            self.type = T51\r
+\r
+            # C.g:53:5: ( 'IN' )\r
+            # C.g:53:7: 'IN'\r
+            self.match("IN")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T51\r
+\r
+\r
+\r
+    # $ANTLR start T52\r
+    def mT52(self, ):\r
+\r
+        try:\r
+            self.type = T52\r
+\r
+            # C.g:54:5: ( 'OUT' )\r
+            # C.g:54:7: 'OUT'\r
+            self.match("OUT")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T52\r
+\r
+\r
+\r
+    # $ANTLR start T53\r
+    def mT53(self, ):\r
+\r
+        try:\r
+            self.type = T53\r
+\r
+            # C.g:55:5: ( 'OPTIONAL' )\r
+            # C.g:55:7: 'OPTIONAL'\r
+            self.match("OPTIONAL")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T53\r
+\r
+\r
+\r
+    # $ANTLR start T54\r
+    def mT54(self, ):\r
+\r
+        try:\r
+            self.type = T54\r
+\r
+            # C.g:56:5: ( 'CONST' )\r
+            # C.g:56:7: 'CONST'\r
+            self.match("CONST")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T54\r
+\r
+\r
+\r
+    # $ANTLR start T55\r
+    def mT55(self, ):\r
+\r
+        try:\r
+            self.type = T55\r
+\r
+            # C.g:57:5: ( 'UNALIGNED' )\r
+            # C.g:57:7: 'UNALIGNED'\r
+            self.match("UNALIGNED")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T55\r
+\r
+\r
+\r
+    # $ANTLR start T56\r
+    def mT56(self, ):\r
+\r
+        try:\r
+            self.type = T56\r
+\r
+            # C.g:58:5: ( 'VOLATILE' )\r
+            # C.g:58:7: 'VOLATILE'\r
+            self.match("VOLATILE")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T56\r
+\r
+\r
+\r
+    # $ANTLR start T57\r
+    def mT57(self, ):\r
+\r
+        try:\r
+            self.type = T57\r
+\r
+            # C.g:59:5: ( 'GLOBAL_REMOVE_IF_UNREFERENCED' )\r
+            # C.g:59:7: 'GLOBAL_REMOVE_IF_UNREFERENCED'\r
+            self.match("GLOBAL_REMOVE_IF_UNREFERENCED")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T57\r
+\r
+\r
+\r
+    # $ANTLR start T58\r
+    def mT58(self, ):\r
+\r
+        try:\r
+            self.type = T58\r
+\r
+            # C.g:60:5: ( 'EFIAPI' )\r
+            # C.g:60:7: 'EFIAPI'\r
+            self.match("EFIAPI")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T58\r
+\r
+\r
+\r
+    # $ANTLR start T59\r
+    def mT59(self, ):\r
+\r
+        try:\r
+            self.type = T59\r
+\r
+            # C.g:61:5: ( 'EFI_BOOTSERVICE' )\r
+            # C.g:61:7: 'EFI_BOOTSERVICE'\r
+            self.match("EFI_BOOTSERVICE")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T59\r
+\r
+\r
+\r
+    # $ANTLR start T60\r
+    def mT60(self, ):\r
+\r
+        try:\r
+            self.type = T60\r
+\r
+            # C.g:62:5: ( 'EFI_RUNTIMESERVICE' )\r
+            # C.g:62:7: 'EFI_RUNTIMESERVICE'\r
+            self.match("EFI_RUNTIMESERVICE")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T60\r
+\r
+\r
+\r
+    # $ANTLR start T61\r
+    def mT61(self, ):\r
+\r
+        try:\r
+            self.type = T61\r
+\r
+            # C.g:63:5: ( 'PACKED' )\r
+            # C.g:63:7: 'PACKED'\r
+            self.match("PACKED")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T61\r
+\r
+\r
+\r
+    # $ANTLR start T62\r
+    def mT62(self, ):\r
+\r
+        try:\r
+            self.type = T62\r
+\r
+            # C.g:64:5: ( '(' )\r
+            # C.g:64:7: '('\r
+            self.match(u'(')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T62\r
+\r
+\r
+\r
+    # $ANTLR start T63\r
+    def mT63(self, ):\r
+\r
+        try:\r
+            self.type = T63\r
+\r
+            # C.g:65:5: ( ')' )\r
+            # C.g:65:7: ')'\r
+            self.match(u')')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T63\r
+\r
+\r
+\r
+    # $ANTLR start T64\r
+    def mT64(self, ):\r
+\r
+        try:\r
+            self.type = T64\r
+\r
+            # C.g:66:5: ( '[' )\r
+            # C.g:66:7: '['\r
+            self.match(u'[')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T64\r
+\r
+\r
+\r
+    # $ANTLR start T65\r
+    def mT65(self, ):\r
+\r
+        try:\r
+            self.type = T65\r
+\r
+            # C.g:67:5: ( ']' )\r
+            # C.g:67:7: ']'\r
+            self.match(u']')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T65\r
+\r
+\r
+\r
+    # $ANTLR start T66\r
+    def mT66(self, ):\r
+\r
+        try:\r
+            self.type = T66\r
+\r
+            # C.g:68:5: ( '*' )\r
+            # C.g:68:7: '*'\r
+            self.match(u'*')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T66\r
+\r
+\r
+\r
+    # $ANTLR start T67\r
+    def mT67(self, ):\r
+\r
+        try:\r
+            self.type = T67\r
+\r
+            # C.g:69:5: ( '...' )\r
+            # C.g:69:7: '...'\r
+            self.match("...")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T67\r
+\r
+\r
+\r
+    # $ANTLR start T68\r
+    def mT68(self, ):\r
+\r
+        try:\r
+            self.type = T68\r
+\r
+            # C.g:70:5: ( '+' )\r
+            # C.g:70:7: '+'\r
+            self.match(u'+')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T68\r
+\r
+\r
+\r
+    # $ANTLR start T69\r
+    def mT69(self, ):\r
+\r
+        try:\r
+            self.type = T69\r
+\r
+            # C.g:71:5: ( '-' )\r
+            # C.g:71:7: '-'\r
+            self.match(u'-')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T69\r
+\r
+\r
+\r
+    # $ANTLR start T70\r
+    def mT70(self, ):\r
+\r
+        try:\r
+            self.type = T70\r
+\r
+            # C.g:72:5: ( '/' )\r
+            # C.g:72:7: '/'\r
+            self.match(u'/')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T70\r
+\r
+\r
+\r
+    # $ANTLR start T71\r
+    def mT71(self, ):\r
+\r
+        try:\r
+            self.type = T71\r
+\r
+            # C.g:73:5: ( '%' )\r
+            # C.g:73:7: '%'\r
+            self.match(u'%')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T71\r
+\r
+\r
+\r
+    # $ANTLR start T72\r
+    def mT72(self, ):\r
+\r
+        try:\r
+            self.type = T72\r
+\r
+            # C.g:74:5: ( '++' )\r
+            # C.g:74:7: '++'\r
+            self.match("++")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T72\r
+\r
+\r
+\r
+    # $ANTLR start T73\r
+    def mT73(self, ):\r
+\r
+        try:\r
+            self.type = T73\r
+\r
+            # C.g:75:5: ( '--' )\r
+            # C.g:75:7: '--'\r
+            self.match("--")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T73\r
+\r
+\r
+\r
+    # $ANTLR start T74\r
+    def mT74(self, ):\r
+\r
+        try:\r
+            self.type = T74\r
+\r
+            # C.g:76:5: ( 'sizeof' )\r
+            # C.g:76:7: 'sizeof'\r
+            self.match("sizeof")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T74\r
+\r
+\r
+\r
+    # $ANTLR start T75\r
+    def mT75(self, ):\r
+\r
+        try:\r
+            self.type = T75\r
+\r
+            # C.g:77:5: ( '.' )\r
+            # C.g:77:7: '.'\r
+            self.match(u'.')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T75\r
+\r
+\r
+\r
+    # $ANTLR start T76\r
+    def mT76(self, ):\r
+\r
+        try:\r
+            self.type = T76\r
+\r
+            # C.g:78:5: ( '->' )\r
+            # C.g:78:7: '->'\r
+            self.match("->")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T76\r
+\r
+\r
+\r
+    # $ANTLR start T77\r
+    def mT77(self, ):\r
+\r
+        try:\r
+            self.type = T77\r
+\r
+            # C.g:79:5: ( '&' )\r
+            # C.g:79:7: '&'\r
+            self.match(u'&')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T77\r
+\r
+\r
+\r
+    # $ANTLR start T78\r
+    def mT78(self, ):\r
+\r
+        try:\r
+            self.type = T78\r
+\r
+            # C.g:80:5: ( '~' )\r
+            # C.g:80:7: '~'\r
+            self.match(u'~')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T78\r
+\r
+\r
+\r
+    # $ANTLR start T79\r
+    def mT79(self, ):\r
+\r
+        try:\r
+            self.type = T79\r
+\r
+            # C.g:81:5: ( '!' )\r
+            # C.g:81:7: '!'\r
+            self.match(u'!')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T79\r
+\r
+\r
+\r
+    # $ANTLR start T80\r
+    def mT80(self, ):\r
+\r
+        try:\r
+            self.type = T80\r
+\r
+            # C.g:82:5: ( '*=' )\r
+            # C.g:82:7: '*='\r
+            self.match("*=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T80\r
+\r
+\r
+\r
+    # $ANTLR start T81\r
+    def mT81(self, ):\r
+\r
+        try:\r
+            self.type = T81\r
+\r
+            # C.g:83:5: ( '/=' )\r
+            # C.g:83:7: '/='\r
+            self.match("/=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T81\r
+\r
+\r
+\r
+    # $ANTLR start T82\r
+    def mT82(self, ):\r
+\r
+        try:\r
+            self.type = T82\r
+\r
+            # C.g:84:5: ( '%=' )\r
+            # C.g:84:7: '%='\r
+            self.match("%=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T82\r
+\r
+\r
+\r
+    # $ANTLR start T83\r
+    def mT83(self, ):\r
+\r
+        try:\r
+            self.type = T83\r
+\r
+            # C.g:85:5: ( '+=' )\r
+            # C.g:85:7: '+='\r
+            self.match("+=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T83\r
+\r
+\r
+\r
+    # $ANTLR start T84\r
+    def mT84(self, ):\r
+\r
+        try:\r
+            self.type = T84\r
+\r
+            # C.g:86:5: ( '-=' )\r
+            # C.g:86:7: '-='\r
+            self.match("-=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T84\r
+\r
+\r
+\r
+    # $ANTLR start T85\r
+    def mT85(self, ):\r
+\r
+        try:\r
+            self.type = T85\r
+\r
+            # C.g:87:5: ( '<<=' )\r
+            # C.g:87:7: '<<='\r
+            self.match("<<=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T85\r
+\r
+\r
+\r
+    # $ANTLR start T86\r
+    def mT86(self, ):\r
+\r
+        try:\r
+            self.type = T86\r
+\r
+            # C.g:88:5: ( '>>=' )\r
+            # C.g:88:7: '>>='\r
+            self.match(">>=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T86\r
+\r
+\r
+\r
+    # $ANTLR start T87\r
+    def mT87(self, ):\r
+\r
+        try:\r
+            self.type = T87\r
+\r
+            # C.g:89:5: ( '&=' )\r
+            # C.g:89:7: '&='\r
+            self.match("&=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T87\r
+\r
+\r
+\r
+    # $ANTLR start T88\r
+    def mT88(self, ):\r
+\r
+        try:\r
+            self.type = T88\r
+\r
+            # C.g:90:5: ( '^=' )\r
+            # C.g:90:7: '^='\r
+            self.match("^=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T88\r
+\r
+\r
+\r
+    # $ANTLR start T89\r
+    def mT89(self, ):\r
+\r
+        try:\r
+            self.type = T89\r
+\r
+            # C.g:91:5: ( '|=' )\r
+            # C.g:91:7: '|='\r
+            self.match("|=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T89\r
+\r
+\r
+\r
+    # $ANTLR start T90\r
+    def mT90(self, ):\r
+\r
+        try:\r
+            self.type = T90\r
+\r
+            # C.g:92:5: ( '?' )\r
+            # C.g:92:7: '?'\r
+            self.match(u'?')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T90\r
+\r
+\r
+\r
+    # $ANTLR start T91\r
+    def mT91(self, ):\r
+\r
+        try:\r
+            self.type = T91\r
+\r
+            # C.g:93:5: ( '||' )\r
+            # C.g:93:7: '||'\r
+            self.match("||")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T91\r
+\r
+\r
+\r
+    # $ANTLR start T92\r
+    def mT92(self, ):\r
+\r
+        try:\r
+            self.type = T92\r
+\r
+            # C.g:94:5: ( '&&' )\r
+            # C.g:94:7: '&&'\r
+            self.match("&&")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T92\r
+\r
+\r
+\r
+    # $ANTLR start T93\r
+    def mT93(self, ):\r
+\r
+        try:\r
+            self.type = T93\r
+\r
+            # C.g:95:5: ( '|' )\r
+            # C.g:95:7: '|'\r
+            self.match(u'|')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T93\r
+\r
+\r
+\r
+    # $ANTLR start T94\r
+    def mT94(self, ):\r
+\r
+        try:\r
+            self.type = T94\r
+\r
+            # C.g:96:5: ( '^' )\r
+            # C.g:96:7: '^'\r
+            self.match(u'^')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T94\r
+\r
+\r
+\r
+    # $ANTLR start T95\r
+    def mT95(self, ):\r
+\r
+        try:\r
+            self.type = T95\r
+\r
+            # C.g:97:5: ( '==' )\r
+            # C.g:97:7: '=='\r
+            self.match("==")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T95\r
+\r
+\r
+\r
+    # $ANTLR start T96\r
+    def mT96(self, ):\r
+\r
+        try:\r
+            self.type = T96\r
+\r
+            # C.g:98:5: ( '!=' )\r
+            # C.g:98:7: '!='\r
+            self.match("!=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T96\r
+\r
+\r
+\r
+    # $ANTLR start T97\r
+    def mT97(self, ):\r
+\r
+        try:\r
+            self.type = T97\r
+\r
+            # C.g:99:5: ( '<' )\r
+            # C.g:99:7: '<'\r
+            self.match(u'<')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T97\r
+\r
+\r
+\r
+    # $ANTLR start T98\r
+    def mT98(self, ):\r
+\r
+        try:\r
+            self.type = T98\r
+\r
+            # C.g:100:5: ( '>' )\r
+            # C.g:100:7: '>'\r
+            self.match(u'>')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T98\r
+\r
+\r
+\r
+    # $ANTLR start T99\r
+    def mT99(self, ):\r
+\r
+        try:\r
+            self.type = T99\r
+\r
+            # C.g:101:5: ( '<=' )\r
+            # C.g:101:7: '<='\r
+            self.match("<=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T99\r
+\r
+\r
+\r
+    # $ANTLR start T100\r
+    def mT100(self, ):\r
+\r
+        try:\r
+            self.type = T100\r
+\r
+            # C.g:102:6: ( '>=' )\r
+            # C.g:102:8: '>='\r
+            self.match(">=")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T100\r
+\r
+\r
+\r
+    # $ANTLR start T101\r
+    def mT101(self, ):\r
+\r
+        try:\r
+            self.type = T101\r
+\r
+            # C.g:103:6: ( '<<' )\r
+            # C.g:103:8: '<<'\r
+            self.match("<<")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T101\r
+\r
+\r
+\r
+    # $ANTLR start T102\r
+    def mT102(self, ):\r
+\r
+        try:\r
+            self.type = T102\r
+\r
+            # C.g:104:6: ( '>>' )\r
+            # C.g:104:8: '>>'\r
+            self.match(">>")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T102\r
+\r
+\r
+\r
+    # $ANTLR start T103\r
+    def mT103(self, ):\r
+\r
+        try:\r
+            self.type = T103\r
+\r
+            # C.g:105:6: ( '__asm__' )\r
+            # C.g:105:8: '__asm__'\r
+            self.match("__asm__")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T103\r
+\r
+\r
+\r
+    # $ANTLR start T104\r
+    def mT104(self, ):\r
+\r
+        try:\r
+            self.type = T104\r
+\r
+            # C.g:106:6: ( '_asm' )\r
+            # C.g:106:8: '_asm'\r
+            self.match("_asm")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T104\r
+\r
+\r
+\r
+    # $ANTLR start T105\r
+    def mT105(self, ):\r
+\r
+        try:\r
+            self.type = T105\r
+\r
+            # C.g:107:6: ( '__asm' )\r
+            # C.g:107:8: '__asm'\r
+            self.match("__asm")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T105\r
+\r
+\r
+\r
+    # $ANTLR start T106\r
+    def mT106(self, ):\r
+\r
+        try:\r
+            self.type = T106\r
+\r
+            # C.g:108:6: ( 'case' )\r
+            # C.g:108:8: 'case'\r
+            self.match("case")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T106\r
+\r
+\r
+\r
+    # $ANTLR start T107\r
+    def mT107(self, ):\r
+\r
+        try:\r
+            self.type = T107\r
+\r
+            # C.g:109:6: ( 'default' )\r
+            # C.g:109:8: 'default'\r
+            self.match("default")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T107\r
+\r
+\r
+\r
+    # $ANTLR start T108\r
+    def mT108(self, ):\r
+\r
+        try:\r
+            self.type = T108\r
+\r
+            # C.g:110:6: ( 'if' )\r
+            # C.g:110:8: 'if'\r
+            self.match("if")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T108\r
+\r
+\r
+\r
+    # $ANTLR start T109\r
+    def mT109(self, ):\r
+\r
+        try:\r
+            self.type = T109\r
+\r
+            # C.g:111:6: ( 'else' )\r
+            # C.g:111:8: 'else'\r
+            self.match("else")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T109\r
+\r
+\r
+\r
+    # $ANTLR start T110\r
+    def mT110(self, ):\r
+\r
+        try:\r
+            self.type = T110\r
+\r
+            # C.g:112:6: ( 'switch' )\r
+            # C.g:112:8: 'switch'\r
+            self.match("switch")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T110\r
+\r
+\r
+\r
+    # $ANTLR start T111\r
+    def mT111(self, ):\r
+\r
+        try:\r
+            self.type = T111\r
+\r
+            # C.g:113:6: ( 'while' )\r
+            # C.g:113:8: 'while'\r
+            self.match("while")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T111\r
+\r
+\r
+\r
+    # $ANTLR start T112\r
+    def mT112(self, ):\r
+\r
+        try:\r
+            self.type = T112\r
+\r
+            # C.g:114:6: ( 'do' )\r
+            # C.g:114:8: 'do'\r
+            self.match("do")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T112\r
+\r
+\r
+\r
+    # $ANTLR start T113\r
+    def mT113(self, ):\r
+\r
+        try:\r
+            self.type = T113\r
+\r
+            # C.g:115:6: ( 'for' )\r
+            # C.g:115:8: 'for'\r
+            self.match("for")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T113\r
+\r
+\r
+\r
+    # $ANTLR start T114\r
+    def mT114(self, ):\r
+\r
+        try:\r
+            self.type = T114\r
+\r
+            # C.g:116:6: ( 'goto' )\r
+            # C.g:116:8: 'goto'\r
+            self.match("goto")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T114\r
+\r
+\r
+\r
+    # $ANTLR start T115\r
+    def mT115(self, ):\r
+\r
+        try:\r
+            self.type = T115\r
+\r
+            # C.g:117:6: ( 'continue' )\r
+            # C.g:117:8: 'continue'\r
+            self.match("continue")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T115\r
+\r
+\r
+\r
+    # $ANTLR start T116\r
+    def mT116(self, ):\r
+\r
+        try:\r
+            self.type = T116\r
+\r
+            # C.g:118:6: ( 'break' )\r
+            # C.g:118:8: 'break'\r
+            self.match("break")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T116\r
+\r
+\r
+\r
+    # $ANTLR start T117\r
+    def mT117(self, ):\r
+\r
+        try:\r
+            self.type = T117\r
+\r
+            # C.g:119:6: ( 'return' )\r
+            # C.g:119:8: 'return'\r
+            self.match("return")\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end T117\r
+\r
+\r
+\r
+    # $ANTLR start IDENTIFIER\r
+    def mIDENTIFIER(self, ):\r
+\r
+        try:\r
+            self.type = IDENTIFIER\r
+\r
+            # C.g:586:2: ( LETTER ( LETTER | '0' .. '9' )* )\r
+            # C.g:586:4: LETTER ( LETTER | '0' .. '9' )*\r
+            self.mLETTER()\r
+\r
+            # C.g:586:11: ( LETTER | '0' .. '9' )*\r
+            while True: #loop1\r
+                alt1 = 2\r
+                LA1_0 = self.input.LA(1)\r
+\r
+                if (LA1_0 == u'$' or (u'0' <= LA1_0 <= u'9') or (u'A' <= LA1_0 <= u'Z') or LA1_0 == u'_' or (u'a' <= LA1_0 <= u'z')) :\r
+                    alt1 = 1\r
+\r
+\r
+                if alt1 == 1:\r
+                    # C.g:\r
+                    if self.input.LA(1) == u'$' or (u'0' <= self.input.LA(1) <= u'9') or (u'A' <= self.input.LA(1) <= u'Z') or self.input.LA(1) == u'_' or (u'a' <= self.input.LA(1) <= u'z'):\r
+                        self.input.consume();\r
+\r
+                    else:\r
+                        mse = MismatchedSetException(None, self.input)\r
+                        self.recover(mse)\r
+                        raise mse\r
+\r
+\r
+\r
+\r
+                else:\r
+                    break #loop1\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end IDENTIFIER\r
+\r
+\r
+\r
+    # $ANTLR start LETTER\r
+    def mLETTER(self, ):\r
+\r
+        try:\r
+            # C.g:591:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' )\r
+            # C.g:\r
+            if self.input.LA(1) == u'$' or (u'A' <= self.input.LA(1) <= u'Z') or self.input.LA(1) == u'_' or (u'a' <= self.input.LA(1) <= u'z'):\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end LETTER\r
+\r
+\r
+\r
+    # $ANTLR start CHARACTER_LITERAL\r
+    def mCHARACTER_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = CHARACTER_LITERAL\r
+\r
+            # C.g:598:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )\r
+            # C.g:598:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''\r
+            # C.g:598:9: ( 'L' )?\r
+            alt2 = 2\r
+            LA2_0 = self.input.LA(1)\r
+\r
+            if (LA2_0 == u'L') :\r
+                alt2 = 1\r
+            if alt2 == 1:\r
+                # C.g:598:10: 'L'\r
+                self.match(u'L')\r
+\r
+\r
+\r
+\r
+            self.match(u'\'')\r
+\r
+            # C.g:598:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )\r
+            alt3 = 2\r
+            LA3_0 = self.input.LA(1)\r
+\r
+            if (LA3_0 == u'\\') :\r
+                alt3 = 1\r
+            elif ((u'\u0000' <= LA3_0 <= u'&') or (u'(' <= LA3_0 <= u'[') or (u']' <= LA3_0 <= u'\uFFFE')) :\r
+                alt3 = 2\r
+            else:\r
+                nvae = NoViableAltException("598:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt3 == 1:\r
+                # C.g:598:23: EscapeSequence\r
+                self.mEscapeSequence()\r
+\r
+\r
+\r
+            elif alt3 == 2:\r
+                # C.g:598:40: ~ ( '\\'' | '\\\\' )\r
+                if (u'\u0000' <= self.input.LA(1) <= u'&') or (u'(' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'):\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+            self.match(u'\'')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end CHARACTER_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start STRING_LITERAL\r
+    def mSTRING_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = STRING_LITERAL\r
+\r
+            # C.g:602:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )\r
+            # C.g:602:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'\r
+            # C.g:602:8: ( 'L' )?\r
+            alt4 = 2\r
+            LA4_0 = self.input.LA(1)\r
+\r
+            if (LA4_0 == u'L') :\r
+                alt4 = 1\r
+            if alt4 == 1:\r
+                # C.g:602:9: 'L'\r
+                self.match(u'L')\r
+\r
+\r
+\r
+\r
+            self.match(u'"')\r
+\r
+            # C.g:602:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*\r
+            while True: #loop5\r
+                alt5 = 3\r
+                LA5_0 = self.input.LA(1)\r
+\r
+                if (LA5_0 == u'\\') :\r
+                    alt5 = 1\r
+                elif ((u'\u0000' <= LA5_0 <= u'!') or (u'#' <= LA5_0 <= u'[') or (u']' <= LA5_0 <= u'\uFFFE')) :\r
+                    alt5 = 2\r
+\r
+\r
+                if alt5 == 1:\r
+                    # C.g:602:21: EscapeSequence\r
+                    self.mEscapeSequence()\r
+\r
+\r
+\r
+                elif alt5 == 2:\r
+                    # C.g:602:38: ~ ( '\\\\' | '\"' )\r
+                    if (u'\u0000' <= self.input.LA(1) <= u'!') or (u'#' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'):\r
+                        self.input.consume();\r
+\r
+                    else:\r
+                        mse = MismatchedSetException(None, self.input)\r
+                        self.recover(mse)\r
+                        raise mse\r
+\r
+\r
+\r
+\r
+                else:\r
+                    break #loop5\r
+\r
+\r
+            self.match(u'"')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end STRING_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start HEX_LITERAL\r
+    def mHEX_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = HEX_LITERAL\r
+\r
+            # C.g:605:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )\r
+            # C.g:605:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?\r
+            self.match(u'0')\r
+\r
+            if self.input.LA(1) == u'X' or self.input.LA(1) == u'x':\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+            # C.g:605:29: ( HexDigit )+\r
+            cnt6 = 0\r
+            while True: #loop6\r
+                alt6 = 2\r
+                LA6_0 = self.input.LA(1)\r
+\r
+                if ((u'0' <= LA6_0 <= u'9') or (u'A' <= LA6_0 <= u'F') or (u'a' <= LA6_0 <= u'f')) :\r
+                    alt6 = 1\r
+\r
+\r
+                if alt6 == 1:\r
+                    # C.g:605:29: HexDigit\r
+                    self.mHexDigit()\r
+\r
+\r
+\r
+                else:\r
+                    if cnt6 >= 1:\r
+                        break #loop6\r
+\r
+                    eee = EarlyExitException(6, self.input)\r
+                    raise eee\r
+\r
+                cnt6 += 1\r
+\r
+\r
+            # C.g:605:39: ( IntegerTypeSuffix )?\r
+            alt7 = 2\r
+            LA7_0 = self.input.LA(1)\r
+\r
+            if (LA7_0 == u'L' or LA7_0 == u'U' or LA7_0 == u'l' or LA7_0 == u'u') :\r
+                alt7 = 1\r
+            if alt7 == 1:\r
+                # C.g:605:39: IntegerTypeSuffix\r
+                self.mIntegerTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end HEX_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start DECIMAL_LITERAL\r
+    def mDECIMAL_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = DECIMAL_LITERAL\r
+\r
+            # C.g:607:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )\r
+            # C.g:607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?\r
+            # C.g:607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )\r
+            alt9 = 2\r
+            LA9_0 = self.input.LA(1)\r
+\r
+            if (LA9_0 == u'0') :\r
+                alt9 = 1\r
+            elif ((u'1' <= LA9_0 <= u'9')) :\r
+                alt9 = 2\r
+            else:\r
+                nvae = NoViableAltException("607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt9 == 1:\r
+                # C.g:607:20: '0'\r
+                self.match(u'0')\r
+\r
+\r
+\r
+            elif alt9 == 2:\r
+                # C.g:607:26: '1' .. '9' ( '0' .. '9' )*\r
+                self.matchRange(u'1', u'9')\r
+\r
+                # C.g:607:35: ( '0' .. '9' )*\r
+                while True: #loop8\r
+                    alt8 = 2\r
+                    LA8_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA8_0 <= u'9')) :\r
+                        alt8 = 1\r
+\r
+\r
+                    if alt8 == 1:\r
+                        # C.g:607:35: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop8\r
+\r
+\r
+\r
+\r
+\r
+            # C.g:607:46: ( IntegerTypeSuffix )?\r
+            alt10 = 2\r
+            LA10_0 = self.input.LA(1)\r
+\r
+            if (LA10_0 == u'L' or LA10_0 == u'U' or LA10_0 == u'l' or LA10_0 == u'u') :\r
+                alt10 = 1\r
+            if alt10 == 1:\r
+                # C.g:607:46: IntegerTypeSuffix\r
+                self.mIntegerTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end DECIMAL_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start OCTAL_LITERAL\r
+    def mOCTAL_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = OCTAL_LITERAL\r
+\r
+            # C.g:609:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )\r
+            # C.g:609:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?\r
+            self.match(u'0')\r
+\r
+            # C.g:609:21: ( '0' .. '7' )+\r
+            cnt11 = 0\r
+            while True: #loop11\r
+                alt11 = 2\r
+                LA11_0 = self.input.LA(1)\r
+\r
+                if ((u'0' <= LA11_0 <= u'7')) :\r
+                    alt11 = 1\r
+\r
+\r
+                if alt11 == 1:\r
+                    # C.g:609:22: '0' .. '7'\r
+                    self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+                else:\r
+                    if cnt11 >= 1:\r
+                        break #loop11\r
+\r
+                    eee = EarlyExitException(11, self.input)\r
+                    raise eee\r
+\r
+                cnt11 += 1\r
+\r
+\r
+            # C.g:609:33: ( IntegerTypeSuffix )?\r
+            alt12 = 2\r
+            LA12_0 = self.input.LA(1)\r
+\r
+            if (LA12_0 == u'L' or LA12_0 == u'U' or LA12_0 == u'l' or LA12_0 == u'u') :\r
+                alt12 = 1\r
+            if alt12 == 1:\r
+                # C.g:609:33: IntegerTypeSuffix\r
+                self.mIntegerTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end OCTAL_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start HexDigit\r
+    def mHexDigit(self, ):\r
+\r
+        try:\r
+            # C.g:612:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )\r
+            # C.g:612:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )\r
+            if (u'0' <= self.input.LA(1) <= u'9') or (u'A' <= self.input.LA(1) <= u'F') or (u'a' <= self.input.LA(1) <= u'f'):\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end HexDigit\r
+\r
+\r
+\r
+    # $ANTLR start IntegerTypeSuffix\r
+    def mIntegerTypeSuffix(self, ):\r
+\r
+        try:\r
+            # C.g:616:2: ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) )\r
+            alt13 = 4\r
+            LA13_0 = self.input.LA(1)\r
+\r
+            if (LA13_0 == u'U' or LA13_0 == u'u') :\r
+                LA13_1 = self.input.LA(2)\r
+\r
+                if (LA13_1 == u'L' or LA13_1 == u'l') :\r
+                    LA13_3 = self.input.LA(3)\r
+\r
+                    if (LA13_3 == u'L' or LA13_3 == u'l') :\r
+                        alt13 = 4\r
+                    else:\r
+                        alt13 = 3\r
+                else:\r
+                    alt13 = 1\r
+            elif (LA13_0 == u'L' or LA13_0 == u'l') :\r
+                alt13 = 2\r
+            else:\r
+                nvae = NoViableAltException("614:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) );", 13, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt13 == 1:\r
+                # C.g:616:4: ( 'u' | 'U' )\r
+                if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+            elif alt13 == 2:\r
+                # C.g:617:4: ( 'l' | 'L' )\r
+                if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+            elif alt13 == 3:\r
+                # C.g:618:4: ( 'u' | 'U' ) ( 'l' | 'L' )\r
+                if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+                if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+            elif alt13 == 4:\r
+                # C.g:619:4: ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' )\r
+                if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+                if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+                if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end IntegerTypeSuffix\r
+\r
+\r
+\r
+    # $ANTLR start FLOATING_POINT_LITERAL\r
+    def mFLOATING_POINT_LITERAL(self, ):\r
+\r
+        try:\r
+            self.type = FLOATING_POINT_LITERAL\r
+\r
+            # C.g:623:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix )\r
+            alt25 = 4\r
+            alt25 = self.dfa25.predict(self.input)\r
+            if alt25 == 1:\r
+                # C.g:623:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?\r
+                # C.g:623:9: ( '0' .. '9' )+\r
+                cnt14 = 0\r
+                while True: #loop14\r
+                    alt14 = 2\r
+                    LA14_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA14_0 <= u'9')) :\r
+                        alt14 = 1\r
+\r
+\r
+                    if alt14 == 1:\r
+                        # C.g:623:10: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        if cnt14 >= 1:\r
+                            break #loop14\r
+\r
+                        eee = EarlyExitException(14, self.input)\r
+                        raise eee\r
+\r
+                    cnt14 += 1\r
+\r
+\r
+                self.match(u'.')\r
+\r
+                # C.g:623:25: ( '0' .. '9' )*\r
+                while True: #loop15\r
+                    alt15 = 2\r
+                    LA15_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA15_0 <= u'9')) :\r
+                        alt15 = 1\r
+\r
+\r
+                    if alt15 == 1:\r
+                        # C.g:623:26: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop15\r
+\r
+\r
+                # C.g:623:37: ( Exponent )?\r
+                alt16 = 2\r
+                LA16_0 = self.input.LA(1)\r
+\r
+                if (LA16_0 == u'E' or LA16_0 == u'e') :\r
+                    alt16 = 1\r
+                if alt16 == 1:\r
+                    # C.g:623:37: Exponent\r
+                    self.mExponent()\r
+\r
+\r
+\r
+\r
+                # C.g:623:47: ( FloatTypeSuffix )?\r
+                alt17 = 2\r
+                LA17_0 = self.input.LA(1)\r
+\r
+                if (LA17_0 == u'D' or LA17_0 == u'F' or LA17_0 == u'd' or LA17_0 == u'f') :\r
+                    alt17 = 1\r
+                if alt17 == 1:\r
+                    # C.g:623:47: FloatTypeSuffix\r
+                    self.mFloatTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt25 == 2:\r
+                # C.g:624:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?\r
+                self.match(u'.')\r
+\r
+                # C.g:624:13: ( '0' .. '9' )+\r
+                cnt18 = 0\r
+                while True: #loop18\r
+                    alt18 = 2\r
+                    LA18_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA18_0 <= u'9')) :\r
+                        alt18 = 1\r
+\r
+\r
+                    if alt18 == 1:\r
+                        # C.g:624:14: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        if cnt18 >= 1:\r
+                            break #loop18\r
+\r
+                        eee = EarlyExitException(18, self.input)\r
+                        raise eee\r
+\r
+                    cnt18 += 1\r
+\r
+\r
+                # C.g:624:25: ( Exponent )?\r
+                alt19 = 2\r
+                LA19_0 = self.input.LA(1)\r
+\r
+                if (LA19_0 == u'E' or LA19_0 == u'e') :\r
+                    alt19 = 1\r
+                if alt19 == 1:\r
+                    # C.g:624:25: Exponent\r
+                    self.mExponent()\r
+\r
+\r
+\r
+\r
+                # C.g:624:35: ( FloatTypeSuffix )?\r
+                alt20 = 2\r
+                LA20_0 = self.input.LA(1)\r
+\r
+                if (LA20_0 == u'D' or LA20_0 == u'F' or LA20_0 == u'd' or LA20_0 == u'f') :\r
+                    alt20 = 1\r
+                if alt20 == 1:\r
+                    # C.g:624:35: FloatTypeSuffix\r
+                    self.mFloatTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt25 == 3:\r
+                # C.g:625:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?\r
+                # C.g:625:9: ( '0' .. '9' )+\r
+                cnt21 = 0\r
+                while True: #loop21\r
+                    alt21 = 2\r
+                    LA21_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA21_0 <= u'9')) :\r
+                        alt21 = 1\r
+\r
+\r
+                    if alt21 == 1:\r
+                        # C.g:625:10: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        if cnt21 >= 1:\r
+                            break #loop21\r
+\r
+                        eee = EarlyExitException(21, self.input)\r
+                        raise eee\r
+\r
+                    cnt21 += 1\r
+\r
+\r
+                self.mExponent()\r
+\r
+                # C.g:625:30: ( FloatTypeSuffix )?\r
+                alt22 = 2\r
+                LA22_0 = self.input.LA(1)\r
+\r
+                if (LA22_0 == u'D' or LA22_0 == u'F' or LA22_0 == u'd' or LA22_0 == u'f') :\r
+                    alt22 = 1\r
+                if alt22 == 1:\r
+                    # C.g:625:30: FloatTypeSuffix\r
+                    self.mFloatTypeSuffix()\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt25 == 4:\r
+                # C.g:626:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix\r
+                # C.g:626:9: ( '0' .. '9' )+\r
+                cnt23 = 0\r
+                while True: #loop23\r
+                    alt23 = 2\r
+                    LA23_0 = self.input.LA(1)\r
+\r
+                    if ((u'0' <= LA23_0 <= u'9')) :\r
+                        alt23 = 1\r
+\r
+\r
+                    if alt23 == 1:\r
+                        # C.g:626:10: '0' .. '9'\r
+                        self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                    else:\r
+                        if cnt23 >= 1:\r
+                            break #loop23\r
+\r
+                        eee = EarlyExitException(23, self.input)\r
+                        raise eee\r
+\r
+                    cnt23 += 1\r
+\r
+\r
+                # C.g:626:21: ( Exponent )?\r
+                alt24 = 2\r
+                LA24_0 = self.input.LA(1)\r
+\r
+                if (LA24_0 == u'E' or LA24_0 == u'e') :\r
+                    alt24 = 1\r
+                if alt24 == 1:\r
+                    # C.g:626:21: Exponent\r
+                    self.mExponent()\r
+\r
+\r
+\r
+\r
+                self.mFloatTypeSuffix()\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end FLOATING_POINT_LITERAL\r
+\r
+\r
+\r
+    # $ANTLR start Exponent\r
+    def mExponent(self, ):\r
+\r
+        try:\r
+            # C.g:630:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )\r
+            # C.g:630:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+\r
+            if self.input.LA(1) == u'E' or self.input.LA(1) == u'e':\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+            # C.g:630:22: ( '+' | '-' )?\r
+            alt26 = 2\r
+            LA26_0 = self.input.LA(1)\r
+\r
+            if (LA26_0 == u'+' or LA26_0 == u'-') :\r
+                alt26 = 1\r
+            if alt26 == 1:\r
+                # C.g:\r
+                if self.input.LA(1) == u'+' or self.input.LA(1) == u'-':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+            # C.g:630:33: ( '0' .. '9' )+\r
+            cnt27 = 0\r
+            while True: #loop27\r
+                alt27 = 2\r
+                LA27_0 = self.input.LA(1)\r
+\r
+                if ((u'0' <= LA27_0 <= u'9')) :\r
+                    alt27 = 1\r
+\r
+\r
+                if alt27 == 1:\r
+                    # C.g:630:34: '0' .. '9'\r
+                    self.matchRange(u'0', u'9')\r
+\r
+\r
+\r
+                else:\r
+                    if cnt27 >= 1:\r
+                        break #loop27\r
+\r
+                    eee = EarlyExitException(27, self.input)\r
+                    raise eee\r
+\r
+                cnt27 += 1\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end Exponent\r
+\r
+\r
+\r
+    # $ANTLR start FloatTypeSuffix\r
+    def mFloatTypeSuffix(self, ):\r
+\r
+        try:\r
+            # C.g:633:17: ( ( 'f' | 'F' | 'd' | 'D' ) )\r
+            # C.g:633:19: ( 'f' | 'F' | 'd' | 'D' )\r
+            if self.input.LA(1) == u'D' or self.input.LA(1) == u'F' or self.input.LA(1) == u'd' or self.input.LA(1) == u'f':\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end FloatTypeSuffix\r
+\r
+\r
+\r
+    # $ANTLR start EscapeSequence\r
+    def mEscapeSequence(self, ):\r
+\r
+        try:\r
+            # C.g:637:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )\r
+            alt28 = 2\r
+            LA28_0 = self.input.LA(1)\r
+\r
+            if (LA28_0 == u'\\') :\r
+                LA28_1 = self.input.LA(2)\r
+\r
+                if (LA28_1 == u'"' or LA28_1 == u'\'' or LA28_1 == u'\\' or LA28_1 == u'b' or LA28_1 == u'f' or LA28_1 == u'n' or LA28_1 == u'r' or LA28_1 == u't') :\r
+                    alt28 = 1\r
+                elif ((u'0' <= LA28_1 <= u'7')) :\r
+                    alt28 = 2\r
+                else:\r
+                    nvae = NoViableAltException("635:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input)\r
+\r
+                    raise nvae\r
+\r
+            else:\r
+                nvae = NoViableAltException("635:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt28 == 1:\r
+                # C.g:637:8: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )\r
+                self.match(u'\\')\r
+\r
+                if self.input.LA(1) == u'"' or self.input.LA(1) == u'\'' or self.input.LA(1) == u'\\' or self.input.LA(1) == u'b' or self.input.LA(1) == u'f' or self.input.LA(1) == u'n' or self.input.LA(1) == u'r' or self.input.LA(1) == u't':\r
+                    self.input.consume();\r
+\r
+                else:\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recover(mse)\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+            elif alt28 == 2:\r
+                # C.g:638:9: OctalEscape\r
+                self.mOctalEscape()\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end EscapeSequence\r
+\r
+\r
+\r
+    # $ANTLR start OctalEscape\r
+    def mOctalEscape(self, ):\r
+\r
+        try:\r
+            # C.g:643:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )\r
+            alt29 = 3\r
+            LA29_0 = self.input.LA(1)\r
+\r
+            if (LA29_0 == u'\\') :\r
+                LA29_1 = self.input.LA(2)\r
+\r
+                if ((u'0' <= LA29_1 <= u'3')) :\r
+                    LA29_2 = self.input.LA(3)\r
+\r
+                    if ((u'0' <= LA29_2 <= u'7')) :\r
+                        LA29_4 = self.input.LA(4)\r
+\r
+                        if ((u'0' <= LA29_4 <= u'7')) :\r
+                            alt29 = 1\r
+                        else:\r
+                            alt29 = 2\r
+                    else:\r
+                        alt29 = 3\r
+                elif ((u'4' <= LA29_1 <= u'7')) :\r
+                    LA29_3 = self.input.LA(3)\r
+\r
+                    if ((u'0' <= LA29_3 <= u'7')) :\r
+                        alt29 = 2\r
+                    else:\r
+                        alt29 = 3\r
+                else:\r
+                    nvae = NoViableAltException("641:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input)\r
+\r
+                    raise nvae\r
+\r
+            else:\r
+                nvae = NoViableAltException("641:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 0, self.input)\r
+\r
+                raise nvae\r
+\r
+            if alt29 == 1:\r
+                # C.g:643:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )\r
+                self.match(u'\\')\r
+\r
+                # C.g:643:14: ( '0' .. '3' )\r
+                # C.g:643:15: '0' .. '3'\r
+                self.matchRange(u'0', u'3')\r
+\r
+\r
+\r
+\r
+                # C.g:643:25: ( '0' .. '7' )\r
+                # C.g:643:26: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+                # C.g:643:36: ( '0' .. '7' )\r
+                # C.g:643:37: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt29 == 2:\r
+                # C.g:644:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )\r
+                self.match(u'\\')\r
+\r
+                # C.g:644:14: ( '0' .. '7' )\r
+                # C.g:644:15: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+                # C.g:644:25: ( '0' .. '7' )\r
+                # C.g:644:26: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+\r
+\r
+            elif alt29 == 3:\r
+                # C.g:645:9: '\\\\' ( '0' .. '7' )\r
+                self.match(u'\\')\r
+\r
+                # C.g:645:14: ( '0' .. '7' )\r
+                # C.g:645:15: '0' .. '7'\r
+                self.matchRange(u'0', u'7')\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end OctalEscape\r
+\r
+\r
+\r
+    # $ANTLR start UnicodeEscape\r
+    def mUnicodeEscape(self, ):\r
+\r
+        try:\r
+            # C.g:650:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )\r
+            # C.g:650:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit\r
+            self.match(u'\\')\r
+\r
+            self.match(u'u')\r
+\r
+            self.mHexDigit()\r
+\r
+            self.mHexDigit()\r
+\r
+            self.mHexDigit()\r
+\r
+            self.mHexDigit()\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end UnicodeEscape\r
+\r
+\r
+\r
+    # $ANTLR start WS\r
+    def mWS(self, ):\r
+\r
+        try:\r
+            self.type = WS\r
+\r
+            # C.g:653:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )\r
+            # C.g:653:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' )\r
+            if (u'\t' <= self.input.LA(1) <= u'\n') or (u'\f' <= self.input.LA(1) <= u'\r') or self.input.LA(1) == u' ':\r
+                self.input.consume();\r
+\r
+            else:\r
+                mse = MismatchedSetException(None, self.input)\r
+                self.recover(mse)\r
+                raise mse\r
+\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end WS\r
+\r
+\r
+\r
+    # $ANTLR start BS\r
+    def mBS(self, ):\r
+\r
+        try:\r
+            self.type = BS\r
+\r
+            # C.g:657:5: ( ( '\\\\' ) )\r
+            # C.g:657:7: ( '\\\\' )\r
+            # C.g:657:7: ( '\\\\' )\r
+            # C.g:657:8: '\\\\'\r
+            self.match(u'\\')\r
+\r
+\r
+\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end BS\r
+\r
+\r
+\r
+    # $ANTLR start UnicodeVocabulary\r
+    def mUnicodeVocabulary(self, ):\r
+\r
+        try:\r
+            self.type = UnicodeVocabulary\r
+\r
+            # C.g:665:5: ( '\\u0003' .. '\\uFFFE' )\r
+            # C.g:665:7: '\\u0003' .. '\\uFFFE'\r
+            self.matchRange(u'\u0003', u'\uFFFE')\r
+\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end UnicodeVocabulary\r
+\r
+\r
+\r
+    # $ANTLR start COMMENT\r
+    def mCOMMENT(self, ):\r
+\r
+        try:\r
+            self.type = COMMENT\r
+\r
+            # C.g:668:5: ( '/*' ( options {greedy=false; } : . )* '*/' )\r
+            # C.g:668:9: '/*' ( options {greedy=false; } : . )* '*/'\r
+            self.match("/*")\r
+\r
+\r
+            # C.g:668:14: ( options {greedy=false; } : . )*\r
+            while True: #loop30\r
+                alt30 = 2\r
+                LA30_0 = self.input.LA(1)\r
+\r
+                if (LA30_0 == u'*') :\r
+                    LA30_1 = self.input.LA(2)\r
+\r
+                    if (LA30_1 == u'/') :\r
+                        alt30 = 2\r
+                    elif ((u'\u0000' <= LA30_1 <= u'.') or (u'0' <= LA30_1 <= u'\uFFFE')) :\r
+                        alt30 = 1\r
+\r
+\r
+                elif ((u'\u0000' <= LA30_0 <= u')') or (u'+' <= LA30_0 <= u'\uFFFE')) :\r
+                    alt30 = 1\r
+\r
+\r
+                if alt30 == 1:\r
+                    # C.g:668:42: .\r
+                    self.matchAny()\r
+\r
+\r
+\r
+                else:\r
+                    break #loop30\r
+\r
+\r
+            self.match("*/")\r
+\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end COMMENT\r
+\r
+\r
+\r
+    # $ANTLR start LINE_COMMENT\r
+    def mLINE_COMMENT(self, ):\r
+\r
+        try:\r
+            self.type = LINE_COMMENT\r
+\r
+            # C.g:673:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )\r
+            # C.g:673:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'\r
+            self.match("//")\r
+\r
+\r
+            # C.g:673:12: (~ ( '\\n' | '\\r' ) )*\r
+            while True: #loop31\r
+                alt31 = 2\r
+                LA31_0 = self.input.LA(1)\r
+\r
+                if ((u'\u0000' <= LA31_0 <= u'\t') or (u'\u000B' <= LA31_0 <= u'\f') or (u'\u000E' <= LA31_0 <= u'\uFFFE')) :\r
+                    alt31 = 1\r
+\r
+\r
+                if alt31 == 1:\r
+                    # C.g:673:12: ~ ( '\\n' | '\\r' )\r
+                    if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'):\r
+                        self.input.consume();\r
+\r
+                    else:\r
+                        mse = MismatchedSetException(None, self.input)\r
+                        self.recover(mse)\r
+                        raise mse\r
+\r
+\r
+\r
+\r
+                else:\r
+                    break #loop31\r
+\r
+\r
+            # C.g:673:26: ( '\\r' )?\r
+            alt32 = 2\r
+            LA32_0 = self.input.LA(1)\r
+\r
+            if (LA32_0 == u'\r') :\r
+                alt32 = 1\r
+            if alt32 == 1:\r
+                # C.g:673:26: '\\r'\r
+                self.match(u'\r')\r
+\r
+\r
+\r
+\r
+            self.match(u'\n')\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end LINE_COMMENT\r
+\r
+\r
+\r
+    # $ANTLR start LINE_COMMAND\r
+    def mLINE_COMMAND(self, ):\r
+\r
+        try:\r
+            self.type = LINE_COMMAND\r
+\r
+            # C.g:678:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )\r
+            # C.g:678:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'\r
+            self.match(u'#')\r
+\r
+            # C.g:678:11: (~ ( '\\n' | '\\r' ) )*\r
+            while True: #loop33\r
+                alt33 = 2\r
+                LA33_0 = self.input.LA(1)\r
+\r
+                if ((u'\u0000' <= LA33_0 <= u'\t') or (u'\u000B' <= LA33_0 <= u'\f') or (u'\u000E' <= LA33_0 <= u'\uFFFE')) :\r
+                    alt33 = 1\r
+\r
+\r
+                if alt33 == 1:\r
+                    # C.g:678:11: ~ ( '\\n' | '\\r' )\r
+                    if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'):\r
+                        self.input.consume();\r
+\r
+                    else:\r
+                        mse = MismatchedSetException(None, self.input)\r
+                        self.recover(mse)\r
+                        raise mse\r
+\r
+\r
+\r
+\r
+                else:\r
+                    break #loop33\r
+\r
+\r
+            # C.g:678:25: ( '\\r' )?\r
+            alt34 = 2\r
+            LA34_0 = self.input.LA(1)\r
+\r
+            if (LA34_0 == u'\r') :\r
+                alt34 = 1\r
+            if alt34 == 1:\r
+                # C.g:678:25: '\\r'\r
+                self.match(u'\r')\r
+\r
+\r
+\r
+\r
+            self.match(u'\n')\r
+\r
+            #action start\r
+            self.channel=HIDDEN;\r
+            #action end\r
+\r
+\r
+\r
+\r
+        finally:\r
+\r
+            pass\r
+\r
+    # $ANTLR end LINE_COMMAND\r
+\r
+\r
+\r
+    def mTokens(self):\r
+        # C.g:1:8: ( T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | T99 | T100 | T101 | T102 | T103 | T104 | T105 | T106 | T107 | T108 | T109 | T110 | T111 | T112 | T113 | T114 | T115 | T116 | T117 | IDENTIFIER | CHARACTER_LITERAL | STRING_LITERAL | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | WS | BS | UnicodeVocabulary | COMMENT | LINE_COMMENT | LINE_COMMAND )\r
+        alt35 = 106\r
+        alt35 = self.dfa35.predict(self.input)\r
+        if alt35 == 1:\r
+            # C.g:1:10: T25\r
+            self.mT25()\r
+\r
+\r
+\r
+        elif alt35 == 2:\r
+            # C.g:1:14: T26\r
+            self.mT26()\r
+\r
+\r
+\r
+        elif alt35 == 3:\r
+            # C.g:1:18: T27\r
+            self.mT27()\r
+\r
+\r
+\r
+        elif alt35 == 4:\r
+            # C.g:1:22: T28\r
+            self.mT28()\r
+\r
+\r
+\r
+        elif alt35 == 5:\r
+            # C.g:1:26: T29\r
+            self.mT29()\r
+\r
+\r
+\r
+        elif alt35 == 6:\r
+            # C.g:1:30: T30\r
+            self.mT30()\r
+\r
+\r
+\r
+        elif alt35 == 7:\r
+            # C.g:1:34: T31\r
+            self.mT31()\r
+\r
+\r
+\r
+        elif alt35 == 8:\r
+            # C.g:1:38: T32\r
+            self.mT32()\r
+\r
+\r
+\r
+        elif alt35 == 9:\r
+            # C.g:1:42: T33\r
+            self.mT33()\r
+\r
+\r
+\r
+        elif alt35 == 10:\r
+            # C.g:1:46: T34\r
+            self.mT34()\r
+\r
+\r
+\r
+        elif alt35 == 11:\r
+            # C.g:1:50: T35\r
+            self.mT35()\r
+\r
+\r
+\r
+        elif alt35 == 12:\r
+            # C.g:1:54: T36\r
+            self.mT36()\r
+\r
+\r
+\r
+        elif alt35 == 13:\r
+            # C.g:1:58: T37\r
+            self.mT37()\r
+\r
+\r
+\r
+        elif alt35 == 14:\r
+            # C.g:1:62: T38\r
+            self.mT38()\r
+\r
+\r
+\r
+        elif alt35 == 15:\r
+            # C.g:1:66: T39\r
+            self.mT39()\r
+\r
+\r
+\r
+        elif alt35 == 16:\r
+            # C.g:1:70: T40\r
+            self.mT40()\r
+\r
+\r
+\r
+        elif alt35 == 17:\r
+            # C.g:1:74: T41\r
+            self.mT41()\r
+\r
+\r
+\r
+        elif alt35 == 18:\r
+            # C.g:1:78: T42\r
+            self.mT42()\r
+\r
+\r
+\r
+        elif alt35 == 19:\r
+            # C.g:1:82: T43\r
+            self.mT43()\r
+\r
+\r
+\r
+        elif alt35 == 20:\r
+            # C.g:1:86: T44\r
+            self.mT44()\r
+\r
+\r
+\r
+        elif alt35 == 21:\r
+            # C.g:1:90: T45\r
+            self.mT45()\r
+\r
+\r
+\r
+        elif alt35 == 22:\r
+            # C.g:1:94: T46\r
+            self.mT46()\r
+\r
+\r
+\r
+        elif alt35 == 23:\r
+            # C.g:1:98: T47\r
+            self.mT47()\r
+\r
+\r
+\r
+        elif alt35 == 24:\r
+            # C.g:1:102: T48\r
+            self.mT48()\r
+\r
+\r
+\r
+        elif alt35 == 25:\r
+            # C.g:1:106: T49\r
+            self.mT49()\r
+\r
+\r
+\r
+        elif alt35 == 26:\r
+            # C.g:1:110: T50\r
+            self.mT50()\r
+\r
+\r
+\r
+        elif alt35 == 27:\r
+            # C.g:1:114: T51\r
+            self.mT51()\r
+\r
+\r
+\r
+        elif alt35 == 28:\r
+            # C.g:1:118: T52\r
+            self.mT52()\r
+\r
+\r
+\r
+        elif alt35 == 29:\r
+            # C.g:1:122: T53\r
+            self.mT53()\r
+\r
+\r
+\r
+        elif alt35 == 30:\r
+            # C.g:1:126: T54\r
+            self.mT54()\r
+\r
+\r
+\r
+        elif alt35 == 31:\r
+            # C.g:1:130: T55\r
+            self.mT55()\r
+\r
+\r
+\r
+        elif alt35 == 32:\r
+            # C.g:1:134: T56\r
+            self.mT56()\r
+\r
+\r
+\r
+        elif alt35 == 33:\r
+            # C.g:1:138: T57\r
+            self.mT57()\r
+\r
+\r
+\r
+        elif alt35 == 34:\r
+            # C.g:1:142: T58\r
+            self.mT58()\r
+\r
+\r
+\r
+        elif alt35 == 35:\r
+            # C.g:1:146: T59\r
+            self.mT59()\r
+\r
+\r
+\r
+        elif alt35 == 36:\r
+            # C.g:1:150: T60\r
+            self.mT60()\r
+\r
+\r
+\r
+        elif alt35 == 37:\r
+            # C.g:1:154: T61\r
+            self.mT61()\r
+\r
+\r
+\r
+        elif alt35 == 38:\r
+            # C.g:1:158: T62\r
+            self.mT62()\r
+\r
+\r
+\r
+        elif alt35 == 39:\r
+            # C.g:1:162: T63\r
+            self.mT63()\r
+\r
+\r
+\r
+        elif alt35 == 40:\r
+            # C.g:1:166: T64\r
+            self.mT64()\r
+\r
+\r
+\r
+        elif alt35 == 41:\r
+            # C.g:1:170: T65\r
+            self.mT65()\r
+\r
+\r
+\r
+        elif alt35 == 42:\r
+            # C.g:1:174: T66\r
+            self.mT66()\r
+\r
+\r
+\r
+        elif alt35 == 43:\r
+            # C.g:1:178: T67\r
+            self.mT67()\r
+\r
+\r
+\r
+        elif alt35 == 44:\r
+            # C.g:1:182: T68\r
+            self.mT68()\r
+\r
+\r
+\r
+        elif alt35 == 45:\r
+            # C.g:1:186: T69\r
+            self.mT69()\r
+\r
+\r
+\r
+        elif alt35 == 46:\r
+            # C.g:1:190: T70\r
+            self.mT70()\r
+\r
+\r
+\r
+        elif alt35 == 47:\r
+            # C.g:1:194: T71\r
+            self.mT71()\r
+\r
+\r
+\r
+        elif alt35 == 48:\r
+            # C.g:1:198: T72\r
+            self.mT72()\r
+\r
+\r
+\r
+        elif alt35 == 49:\r
+            # C.g:1:202: T73\r
+            self.mT73()\r
+\r
+\r
+\r
+        elif alt35 == 50:\r
+            # C.g:1:206: T74\r
+            self.mT74()\r
+\r
+\r
+\r
+        elif alt35 == 51:\r
+            # C.g:1:210: T75\r
+            self.mT75()\r
+\r
+\r
+\r
+        elif alt35 == 52:\r
+            # C.g:1:214: T76\r
+            self.mT76()\r
+\r
+\r
+\r
+        elif alt35 == 53:\r
+            # C.g:1:218: T77\r
+            self.mT77()\r
+\r
+\r
+\r
+        elif alt35 == 54:\r
+            # C.g:1:222: T78\r
+            self.mT78()\r
+\r
+\r
+\r
+        elif alt35 == 55:\r
+            # C.g:1:226: T79\r
+            self.mT79()\r
+\r
+\r
+\r
+        elif alt35 == 56:\r
+            # C.g:1:230: T80\r
+            self.mT80()\r
+\r
+\r
+\r
+        elif alt35 == 57:\r
+            # C.g:1:234: T81\r
+            self.mT81()\r
+\r
+\r
+\r
+        elif alt35 == 58:\r
+            # C.g:1:238: T82\r
+            self.mT82()\r
+\r
+\r
+\r
+        elif alt35 == 59:\r
+            # C.g:1:242: T83\r
+            self.mT83()\r
+\r
+\r
+\r
+        elif alt35 == 60:\r
+            # C.g:1:246: T84\r
+            self.mT84()\r
+\r
+\r
+\r
+        elif alt35 == 61:\r
+            # C.g:1:250: T85\r
+            self.mT85()\r
+\r
+\r
+\r
+        elif alt35 == 62:\r
+            # C.g:1:254: T86\r
+            self.mT86()\r
+\r
+\r
+\r
+        elif alt35 == 63:\r
+            # C.g:1:258: T87\r
+            self.mT87()\r
+\r
+\r
+\r
+        elif alt35 == 64:\r
+            # C.g:1:262: T88\r
+            self.mT88()\r
+\r
+\r
+\r
+        elif alt35 == 65:\r
+            # C.g:1:266: T89\r
+            self.mT89()\r
+\r
+\r
+\r
+        elif alt35 == 66:\r
+            # C.g:1:270: T90\r
+            self.mT90()\r
+\r
+\r
+\r
+        elif alt35 == 67:\r
+            # C.g:1:274: T91\r
+            self.mT91()\r
+\r
+\r
+\r
+        elif alt35 == 68:\r
+            # C.g:1:278: T92\r
+            self.mT92()\r
+\r
+\r
+\r
+        elif alt35 == 69:\r
+            # C.g:1:282: T93\r
+            self.mT93()\r
+\r
+\r
+\r
+        elif alt35 == 70:\r
+            # C.g:1:286: T94\r
+            self.mT94()\r
+\r
+\r
+\r
+        elif alt35 == 71:\r
+            # C.g:1:290: T95\r
+            self.mT95()\r
+\r
+\r
+\r
+        elif alt35 == 72:\r
+            # C.g:1:294: T96\r
+            self.mT96()\r
+\r
+\r
+\r
+        elif alt35 == 73:\r
+            # C.g:1:298: T97\r
+            self.mT97()\r
+\r
+\r
+\r
+        elif alt35 == 74:\r
+            # C.g:1:302: T98\r
+            self.mT98()\r
+\r
+\r
+\r
+        elif alt35 == 75:\r
+            # C.g:1:306: T99\r
+            self.mT99()\r
+\r
+\r
+\r
+        elif alt35 == 76:\r
+            # C.g:1:310: T100\r
+            self.mT100()\r
+\r
+\r
+\r
+        elif alt35 == 77:\r
+            # C.g:1:315: T101\r
+            self.mT101()\r
+\r
+\r
+\r
+        elif alt35 == 78:\r
+            # C.g:1:320: T102\r
+            self.mT102()\r
+\r
+\r
+\r
+        elif alt35 == 79:\r
+            # C.g:1:325: T103\r
+            self.mT103()\r
+\r
+\r
+\r
+        elif alt35 == 80:\r
+            # C.g:1:330: T104\r
+            self.mT104()\r
+\r
+\r
+\r
+        elif alt35 == 81:\r
+            # C.g:1:335: T105\r
+            self.mT105()\r
+\r
+\r
+\r
+        elif alt35 == 82:\r
+            # C.g:1:340: T106\r
+            self.mT106()\r
+\r
+\r
+\r
+        elif alt35 == 83:\r
+            # C.g:1:345: T107\r
+            self.mT107()\r
+\r
+\r
+\r
+        elif alt35 == 84:\r
+            # C.g:1:350: T108\r
+            self.mT108()\r
+\r
+\r
+\r
+        elif alt35 == 85:\r
+            # C.g:1:355: T109\r
+            self.mT109()\r
+\r
+\r
+\r
+        elif alt35 == 86:\r
+            # C.g:1:360: T110\r
+            self.mT110()\r
+\r
+\r
+\r
+        elif alt35 == 87:\r
+            # C.g:1:365: T111\r
+            self.mT111()\r
+\r
+\r
+\r
+        elif alt35 == 88:\r
+            # C.g:1:370: T112\r
+            self.mT112()\r
+\r
+\r
+\r
+        elif alt35 == 89:\r
+            # C.g:1:375: T113\r
+            self.mT113()\r
+\r
+\r
+\r
+        elif alt35 == 90:\r
+            # C.g:1:380: T114\r
+            self.mT114()\r
+\r
+\r
+\r
+        elif alt35 == 91:\r
+            # C.g:1:385: T115\r
+            self.mT115()\r
+\r
+\r
+\r
+        elif alt35 == 92:\r
+            # C.g:1:390: T116\r
+            self.mT116()\r
+\r
+\r
+\r
+        elif alt35 == 93:\r
+            # C.g:1:395: T117\r
+            self.mT117()\r
+\r
+\r
+\r
+        elif alt35 == 94:\r
+            # C.g:1:400: IDENTIFIER\r
+            self.mIDENTIFIER()\r
+\r
+\r
+\r
+        elif alt35 == 95:\r
+            # C.g:1:411: CHARACTER_LITERAL\r
+            self.mCHARACTER_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 96:\r
+            # C.g:1:429: STRING_LITERAL\r
+            self.mSTRING_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 97:\r
+            # C.g:1:444: HEX_LITERAL\r
+            self.mHEX_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 98:\r
+            # C.g:1:456: DECIMAL_LITERAL\r
+            self.mDECIMAL_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 99:\r
+            # C.g:1:472: OCTAL_LITERAL\r
+            self.mOCTAL_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 100:\r
+            # C.g:1:486: FLOATING_POINT_LITERAL\r
+            self.mFLOATING_POINT_LITERAL()\r
+\r
+\r
+\r
+        elif alt35 == 101:\r
+            # C.g:1:509: WS\r
+            self.mWS()\r
+\r
+\r
+\r
+        elif alt35 == 102:\r
+            # C.g:1:512: BS\r
+            self.mBS()\r
+\r
+\r
+\r
+        elif alt35 == 103:\r
+            # C.g:1:515: UnicodeVocabulary\r
+            self.mUnicodeVocabulary()\r
+\r
+\r
+\r
+        elif alt35 == 104:\r
+            # C.g:1:533: COMMENT\r
+            self.mCOMMENT()\r
+\r
+\r
+\r
+        elif alt35 == 105:\r
+            # C.g:1:541: LINE_COMMENT\r
+            self.mLINE_COMMENT()\r
+\r
+\r
+\r
+        elif alt35 == 106:\r
+            # C.g:1:554: LINE_COMMAND\r
+            self.mLINE_COMMAND()\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+    # lookup tables for DFA #25\r
+\r
+    DFA25_eot = DFA.unpack(\r
+        u"\7\uffff\1\10\2\uffff"\r
+        )\r
+\r
+    DFA25_eof = DFA.unpack(\r
+        u"\12\uffff"\r
+        )\r
+\r
+    DFA25_min = DFA.unpack(\r
+        u"\2\56\2\uffff\1\53\1\uffff\2\60\2\uffff"\r
+        )\r
+\r
+    DFA25_max = DFA.unpack(\r
+        u"\1\71\1\146\2\uffff\1\71\1\uffff\1\71\1\146\2\uffff"\r
+        )\r
+\r
+    DFA25_accept = DFA.unpack(\r
+        u"\2\uffff\1\2\1\1\1\uffff\1\4\2\uffff\2\3"\r
+        )\r
+\r
+    DFA25_special = DFA.unpack(\r
+        u"\12\uffff"\r
+        )\r
+\r
+\r
+    DFA25_transition = [\r
+        DFA.unpack(u"\1\2\1\uffff\12\1"),\r
+        DFA.unpack(u"\1\3\1\uffff\12\1\12\uffff\1\5\1\4\1\5\35\uffff\1\5"\r
+        u"\1\4\1\5"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\6\1\uffff\1\6\2\uffff\12\7"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\12\7"),\r
+        DFA.unpack(u"\12\7\12\uffff\1\11\1\uffff\1\11\35\uffff\1\11\1\uffff"\r
+        u"\1\11"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"")\r
+    ]\r
+\r
+    # class definition for DFA #25\r
+\r
+    DFA25 = DFA\r
+    # lookup tables for DFA #35\r
+\r
+    DFA35_eot = DFA.unpack(\r
+        u"\2\uffff\1\76\1\uffff\1\101\14\76\3\uffff\10\76\4\uffff\1\151\1"\r
+        u"\153\1\157\1\163\1\167\1\171\1\174\1\uffff\1\177\1\u0082\1\u0085"\r
+        u"\1\u0087\1\u008a\1\uffff\5\76\1\uffff\2\73\2\u0095\2\uffff\1\73"\r
+        u"\2\uffff\1\76\4\uffff\16\76\1\u00ad\5\76\1\u00b4\1\76\3\uffff\1"\r
+        u"\u00b7\10\76\34\uffff\1\u00c1\2\uffff\1\u00c3\10\uffff\5\76\3\uffff"\r
+        u"\1\u00c9\1\uffff\1\u0095\3\uffff\23\76\1\uffff\1\u00de\1\76\1\u00e0"\r
+        u"\3\76\1\uffff\2\76\1\uffff\1\76\1\u00e7\6\76\4\uffff\5\76\1\uffff"\r
+        u"\1\76\1\u00f5\1\76\1\u00f7\6\76\1\u00fe\4\76\1\u0103\1\u0104\2"\r
+        u"\76\1\u0107\1\uffff\1\u0108\1\uffff\6\76\1\uffff\10\76\1\u0118"\r
+        u"\1\76\1\u011a\2\76\1\uffff\1\76\1\uffff\5\76\1\u0123\1\uffff\4"\r
+        u"\76\2\uffff\1\76\1\u0129\2\uffff\1\u012a\3\76\1\u012e\1\76\1\u0130"\r
+        u"\7\76\1\u0139\1\uffff\1\u013a\1\uffff\1\u013b\1\76\1\u013d\1\u013e"\r
+        u"\1\u013f\1\u0140\1\u0141\1\u0142\1\uffff\1\76\1\u0144\1\u0145\2"\r
+        u"\76\2\uffff\1\76\1\u0149\1\76\1\uffff\1\76\1\uffff\5\76\1\u0151"\r
+        u"\1\u0152\1\76\3\uffff\1\u0154\6\uffff\1\76\2\uffff\2\76\1\u0158"\r
+        u"\1\uffff\7\76\2\uffff\1\u0160\1\uffff\1\u0161\1\u0162\1\u0163\1"\r
+        u"\uffff\1\u0164\1\u0165\1\76\1\u0167\3\76\6\uffff\1\u016b\1\uffff"\r
+        u"\3\76\1\uffff\21\76\1\u0180\2\76\1\uffff\3\76\1\u0186\1\76\1\uffff"\r
+        u"\11\76\1\u0191\1\uffff"\r
+        )\r
+\r
+    DFA35_eof = DFA.unpack(\r
+        u"\u0192\uffff"\r
+        )\r
+\r
+    DFA35_min = DFA.unpack(\r
+        u"\1\3\1\uffff\1\171\1\uffff\1\75\1\154\1\150\1\165\1\145\1\124\1"\r
+        u"\157\1\141\1\146\1\157\1\154\1\145\1\156\3\uffff\1\116\1\120\1"\r
+        u"\117\1\116\1\117\1\114\1\106\1\101\4\uffff\1\75\1\56\1\53\1\55"\r
+        u"\1\52\1\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff\1\137\1\150\1\157"\r
+        u"\1\162\1\42\1\uffff\2\0\2\56\2\uffff\1\0\2\uffff\1\160\4\uffff"\r
+        u"\1\163\1\164\1\165\1\151\1\141\1\147\1\157\1\164\1\147\1\101\1"\r
+        u"\151\1\163\1\156\1\141\1\44\1\164\1\156\1\162\1\157\1\146\1\44"\r
+        u"\1\151\3\uffff\1\44\2\124\1\116\1\101\1\114\1\117\1\111\1\103\34"\r
+        u"\uffff\1\75\2\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145"\r
+        u"\3\uffff\1\56\1\uffff\1\56\3\uffff\3\145\1\155\2\164\1\165\1\145"\r
+        u"\1\156\1\162\1\157\1\151\1\165\1\124\1\141\1\144\1\145\1\163\1"\r
+        u"\162\1\uffff\1\44\1\147\1\44\2\141\1\142\1\uffff\1\151\1\157\1"\r
+        u"\uffff\1\111\1\44\1\123\1\114\1\101\1\102\1\101\1\113\4\uffff\1"\r
+        u"\163\1\155\1\154\1\157\1\141\1\uffff\1\144\1\44\1\162\1\44\1\143"\r
+        u"\1\151\1\143\1\157\1\145\1\164\1\44\1\163\1\162\1\111\1\164\2\44"\r
+        u"\1\151\1\164\1\44\1\uffff\1\44\1\uffff\1\164\1\165\1\154\1\147"\r
+        u"\1\156\1\117\1\uffff\1\124\1\111\1\124\1\101\1\102\1\120\1\105"\r
+        u"\1\155\1\44\1\145\1\44\1\153\1\145\1\uffff\1\156\1\uffff\1\150"\r
+        u"\1\143\1\164\1\146\1\144\1\44\1\uffff\1\164\1\156\1\103\1\151\2"\r
+        u"\uffff\1\156\1\44\2\uffff\1\44\1\154\1\145\1\156\1\44\1\116\1\44"\r
+        u"\1\107\1\111\1\114\1\125\1\117\1\111\1\104\1\44\1\uffff\1\44\1"\r
+        u"\uffff\1\44\1\146\6\44\1\uffff\1\145\2\44\1\154\1\165\2\uffff\1"\r
+        u"\164\1\44\1\145\1\uffff\1\101\1\uffff\1\116\1\114\1\137\1\116\1"\r
+        u"\117\2\44\1\137\3\uffff\1\44\6\uffff\1\162\2\uffff\2\145\1\44\1"\r
+        u"\uffff\1\144\1\114\2\105\1\122\2\124\2\uffff\1\44\1\uffff\3\44"\r
+        u"\1\uffff\2\44\1\104\1\44\1\105\1\111\1\123\6\uffff\1\44\1\uffff"\r
+        u"\2\115\1\105\1\uffff\1\117\1\105\1\122\1\126\1\123\1\126\2\105"\r
+        u"\1\111\1\137\1\122\1\103\1\111\1\126\1\105\1\106\1\111\1\44\1\137"\r
+        u"\1\103\1\uffff\1\125\1\105\1\116\1\44\1\122\1\uffff\1\105\1\106"\r
+        u"\1\105\1\122\1\105\1\116\1\103\1\105\1\104\1\44\1\uffff"\r
+        )\r
+\r
+    DFA35_max = DFA.unpack(\r
+        u"\1\ufffe\1\uffff\1\171\1\uffff\1\75\1\170\1\167\1\165\1\145\1\124"\r
+        u"\2\157\1\156\3\157\1\156\3\uffff\1\116\1\125\1\117\1\116\1\117"\r
+        u"\1\114\1\106\1\101\4\uffff\1\75\1\71\1\75\1\76\3\75\1\uffff\2\75"\r
+        u"\1\76\1\75\1\174\1\uffff\1\141\1\150\1\157\1\162\1\47\1\uffff\2"\r
+        u"\ufffe\1\170\1\146\2\uffff\1\ufffe\2\uffff\1\160\4\uffff\1\163"\r
+        u"\1\164\1\165\1\151\1\162\1\172\1\157\2\164\1\101\1\154\1\163\1"\r
+        u"\156\1\141\1\172\1\164\1\156\1\162\1\157\1\146\1\172\1\163\3\uffff"\r
+        u"\1\172\2\124\1\116\1\101\1\114\1\117\1\111\1\103\34\uffff\1\75"\r
+        u"\2\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145\3\uffff\1"\r
+        u"\146\1\uffff\1\146\3\uffff\3\145\1\155\2\164\1\165\1\145\1\156"\r
+        u"\1\162\1\157\1\151\1\165\1\124\1\141\1\144\1\145\1\164\1\162\1"\r
+        u"\uffff\1\172\1\147\1\172\2\141\1\142\1\uffff\1\151\1\157\1\uffff"\r
+        u"\1\111\1\172\1\123\1\114\1\101\1\102\1\137\1\113\4\uffff\1\163"\r
+        u"\1\155\1\154\1\157\1\141\1\uffff\1\144\1\172\1\162\1\172\1\143"\r
+        u"\1\151\1\143\1\157\1\145\1\164\1\172\1\163\1\162\1\111\1\164\2"\r
+        u"\172\1\151\1\164\1\172\1\uffff\1\172\1\uffff\1\164\1\165\1\154"\r
+        u"\1\147\1\156\1\117\1\uffff\1\124\1\111\1\124\1\101\1\122\1\120"\r
+        u"\1\105\1\155\1\172\1\145\1\172\1\153\1\145\1\uffff\1\156\1\uffff"\r
+        u"\1\150\1\143\1\164\1\146\1\144\1\172\1\uffff\1\164\1\156\1\103"\r
+        u"\1\151\2\uffff\1\156\1\172\2\uffff\1\172\1\154\1\145\1\156\1\172"\r
+        u"\1\116\1\172\1\107\1\111\1\114\1\125\1\117\1\111\1\104\1\172\1"\r
+        u"\uffff\1\172\1\uffff\1\172\1\146\6\172\1\uffff\1\145\2\172\1\154"\r
+        u"\1\165\2\uffff\1\164\1\172\1\145\1\uffff\1\101\1\uffff\1\116\1"\r
+        u"\114\1\137\1\116\1\117\2\172\1\137\3\uffff\1\172\6\uffff\1\162"\r
+        u"\2\uffff\2\145\1\172\1\uffff\1\144\1\114\2\105\1\122\2\124\2\uffff"\r
+        u"\1\172\1\uffff\3\172\1\uffff\2\172\1\104\1\172\1\105\1\111\1\123"\r
+        u"\6\uffff\1\172\1\uffff\2\115\1\105\1\uffff\1\117\1\105\1\122\1"\r
+        u"\126\1\123\1\126\2\105\1\111\1\137\1\122\1\103\1\111\1\126\1\105"\r
+        u"\1\106\1\111\1\172\1\137\1\103\1\uffff\1\125\1\105\1\116\1\172"\r
+        u"\1\122\1\uffff\1\105\1\106\1\105\1\122\1\105\1\116\1\103\1\105"\r
+        u"\1\104\1\172\1\uffff"\r
+        )\r
+\r
+    DFA35_accept = DFA.unpack(\r
+        u"\1\uffff\1\1\1\uffff\1\3\15\uffff\1\23\1\24\1\27\10\uffff\1\46"\r
+        u"\1\47\1\50\1\51\7\uffff\1\66\5\uffff\1\102\5\uffff\1\136\4\uffff"\r
+        u"\1\145\1\146\1\uffff\1\147\1\1\1\uffff\1\136\1\3\1\107\1\4\26\uffff"\r
+        u"\1\23\1\24\1\27\11\uffff\1\46\1\47\1\50\1\51\1\70\1\52\1\53\1\63"\r
+        u"\1\144\1\73\1\60\1\54\1\74\1\64\1\61\1\55\1\150\1\151\1\71\1\56"\r
+        u"\1\72\1\57\1\77\1\104\1\65\1\66\1\110\1\67\1\uffff\1\113\1\111"\r
+        u"\1\uffff\1\114\1\112\1\100\1\106\1\103\1\101\1\105\1\102\5\uffff"\r
+        u"\1\140\1\137\1\141\1\uffff\1\142\1\uffff\1\145\1\146\1\152\23\uffff"\r
+        u"\1\124\6\uffff\1\130\2\uffff\1\33\10\uffff\1\75\1\115\1\76\1\116"\r
+        u"\5\uffff\1\143\24\uffff\1\15\1\uffff\1\131\6\uffff\1\34\15\uffff"\r
+        u"\1\125\1\uffff\1\30\6\uffff\1\7\4\uffff\1\12\1\122\2\uffff\1\13"\r
+        u"\1\16\17\uffff\1\120\1\uffff\1\132\10\uffff\1\14\5\uffff\1\31\1"\r
+        u"\17\3\uffff\1\26\1\uffff\1\36\10\uffff\1\121\1\127\1\134\1\uffff"\r
+        u"\1\5\1\126\1\6\1\25\1\62\1\21\1\uffff\1\135\1\11\3\uffff\1\20\7"\r
+        u"\uffff\1\42\1\45\1\uffff\1\2\3\uffff\1\123\7\uffff\1\117\1\10\1"\r
+        u"\32\1\133\1\22\1\35\1\uffff\1\40\3\uffff\1\37\24\uffff\1\43\5\uffff"\r
+        u"\1\44\12\uffff\1\41"\r
+        )\r
+\r
+    DFA35_special = DFA.unpack(\r
+        u"\u0192\uffff"\r
+        )\r
+\r
+\r
+    DFA35_transition = [\r
+        DFA.unpack(u"\6\73\2\70\1\73\2\70\22\73\1\70\1\50\1\65\1\72\1\63"\r
+        u"\1\45\1\46\1\64\1\34\1\35\1\40\1\42\1\3\1\43\1\41\1\44\1\66\11"\r
+        u"\67\1\23\1\1\1\51\1\4\1\52\1\55\1\73\2\63\1\26\1\63\1\32\1\63\1"\r
+        u"\31\1\63\1\24\2\63\1\62\2\63\1\25\1\33\2\63\1\11\1\63\1\27\1\30"\r
+        u"\4\63\1\36\1\71\1\37\1\53\1\56\1\73\1\7\1\61\1\13\1\17\1\5\1\16"\r
+        u"\1\60\1\63\1\14\2\63\1\15\5\63\1\10\1\6\1\2\1\20\1\12\1\57\3\63"\r
+        u"\1\21\1\54\1\22\1\47\uff80\73"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\75"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\100"),\r
+        DFA.unpack(u"\1\102\1\uffff\1\104\11\uffff\1\103"),\r
+        DFA.unpack(u"\1\110\1\107\12\uffff\1\106\2\uffff\1\105"),\r
+        DFA.unpack(u"\1\111"),\r
+        DFA.unpack(u"\1\112"),\r
+        DFA.unpack(u"\1\113"),\r
+        DFA.unpack(u"\1\114"),\r
+        DFA.unpack(u"\1\115\6\uffff\1\117\6\uffff\1\116"),\r
+        DFA.unpack(u"\1\120\7\uffff\1\121"),\r
+        DFA.unpack(u"\1\122"),\r
+        DFA.unpack(u"\1\124\2\uffff\1\123"),\r
+        DFA.unpack(u"\1\125\11\uffff\1\126"),\r
+        DFA.unpack(u"\1\127"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\133"),\r
+        DFA.unpack(u"\1\134\4\uffff\1\135"),\r
+        DFA.unpack(u"\1\136"),\r
+        DFA.unpack(u"\1\137"),\r
+        DFA.unpack(u"\1\140"),\r
+        DFA.unpack(u"\1\141"),\r
+        DFA.unpack(u"\1\142"),\r
+        DFA.unpack(u"\1\143"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\150"),\r
+        DFA.unpack(u"\1\152\1\uffff\12\154"),\r
+        DFA.unpack(u"\1\156\21\uffff\1\155"),\r
+        DFA.unpack(u"\1\162\17\uffff\1\160\1\161"),\r
+        DFA.unpack(u"\1\164\4\uffff\1\165\15\uffff\1\166"),\r
+        DFA.unpack(u"\1\170"),\r
+        DFA.unpack(u"\1\173\26\uffff\1\172"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\176"),\r
+        DFA.unpack(u"\1\u0080\1\u0081"),\r
+        DFA.unpack(u"\1\u0084\1\u0083"),\r
+        DFA.unpack(u"\1\u0086"),\r
+        DFA.unpack(u"\1\u0089\76\uffff\1\u0088"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u008c\1\uffff\1\u008d"),\r
+        DFA.unpack(u"\1\u008e"),\r
+        DFA.unpack(u"\1\u008f"),\r
+        DFA.unpack(u"\1\u0090"),\r
+        DFA.unpack(u"\1\u0091\4\uffff\1\u0092"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\47\u0092\1\uffff\uffd7\u0092"),\r
+        DFA.unpack(u"\uffff\u0091"),\r
+        DFA.unpack(u"\1\154\1\uffff\10\u0094\2\154\12\uffff\3\154\21\uffff"\r
+        u"\1\u0093\13\uffff\3\154\21\uffff\1\u0093"),\r
+        DFA.unpack(u"\1\154\1\uffff\12\u0096\12\uffff\3\154\35\uffff\3\154"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\uffff\u0099"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u009a"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u009b"),\r
+        DFA.unpack(u"\1\u009c"),\r
+        DFA.unpack(u"\1\u009d"),\r
+        DFA.unpack(u"\1\u009e"),\r
+        DFA.unpack(u"\1\u009f\20\uffff\1\u00a0"),\r
+        DFA.unpack(u"\1\u00a2\22\uffff\1\u00a1"),\r
+        DFA.unpack(u"\1\u00a3"),\r
+        DFA.unpack(u"\1\u00a4"),\r
+        DFA.unpack(u"\1\u00a5\14\uffff\1\u00a6"),\r
+        DFA.unpack(u"\1\u00a7"),\r
+        DFA.unpack(u"\1\u00a9\2\uffff\1\u00a8"),\r
+        DFA.unpack(u"\1\u00aa"),\r
+        DFA.unpack(u"\1\u00ab"),\r
+        DFA.unpack(u"\1\u00ac"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00ae"),\r
+        DFA.unpack(u"\1\u00af"),\r
+        DFA.unpack(u"\1\u00b0"),\r
+        DFA.unpack(u"\1\u00b1"),\r
+        DFA.unpack(u"\1\u00b2"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\24\76\1\u00b3\5\76"),\r
+        DFA.unpack(u"\1\u00b6\11\uffff\1\u00b5"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00b8"),\r
+        DFA.unpack(u"\1\u00b9"),\r
+        DFA.unpack(u"\1\u00ba"),\r
+        DFA.unpack(u"\1\u00bb"),\r
+        DFA.unpack(u"\1\u00bc"),\r
+        DFA.unpack(u"\1\u00bd"),\r
+        DFA.unpack(u"\1\u00be"),\r
+        DFA.unpack(u"\1\u00bf"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00c0"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00c2"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00c4"),\r
+        DFA.unpack(u"\1\u00c5"),\r
+        DFA.unpack(u"\1\u00c6"),\r
+        DFA.unpack(u"\1\u00c7"),\r
+        DFA.unpack(u"\1\u00c8"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\154\1\uffff\10\u0094\2\154\12\uffff\3\154\35\uffff"\r
+        u"\3\154"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\154\1\uffff\12\u0096\12\uffff\3\154\35\uffff\3\154"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00ca"),\r
+        DFA.unpack(u"\1\u00cb"),\r
+        DFA.unpack(u"\1\u00cc"),\r
+        DFA.unpack(u"\1\u00cd"),\r
+        DFA.unpack(u"\1\u00ce"),\r
+        DFA.unpack(u"\1\u00cf"),\r
+        DFA.unpack(u"\1\u00d0"),\r
+        DFA.unpack(u"\1\u00d1"),\r
+        DFA.unpack(u"\1\u00d2"),\r
+        DFA.unpack(u"\1\u00d3"),\r
+        DFA.unpack(u"\1\u00d4"),\r
+        DFA.unpack(u"\1\u00d5"),\r
+        DFA.unpack(u"\1\u00d6"),\r
+        DFA.unpack(u"\1\u00d7"),\r
+        DFA.unpack(u"\1\u00d8"),\r
+        DFA.unpack(u"\1\u00d9"),\r
+        DFA.unpack(u"\1\u00da"),\r
+        DFA.unpack(u"\1\u00dc\1\u00db"),\r
+        DFA.unpack(u"\1\u00dd"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00df"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00e1"),\r
+        DFA.unpack(u"\1\u00e2"),\r
+        DFA.unpack(u"\1\u00e3"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00e4"),\r
+        DFA.unpack(u"\1\u00e5"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00e6"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00e8"),\r
+        DFA.unpack(u"\1\u00e9"),\r
+        DFA.unpack(u"\1\u00ea"),\r
+        DFA.unpack(u"\1\u00eb"),\r
+        DFA.unpack(u"\1\u00ed\35\uffff\1\u00ec"),\r
+        DFA.unpack(u"\1\u00ee"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00ef"),\r
+        DFA.unpack(u"\1\u00f0"),\r
+        DFA.unpack(u"\1\u00f1"),\r
+        DFA.unpack(u"\1\u00f2"),\r
+        DFA.unpack(u"\1\u00f3"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u00f4"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00f6"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00f8"),\r
+        DFA.unpack(u"\1\u00f9"),\r
+        DFA.unpack(u"\1\u00fa"),\r
+        DFA.unpack(u"\1\u00fb"),\r
+        DFA.unpack(u"\1\u00fc"),\r
+        DFA.unpack(u"\1\u00fd"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u00ff"),\r
+        DFA.unpack(u"\1\u0100"),\r
+        DFA.unpack(u"\1\u0101"),\r
+        DFA.unpack(u"\1\u0102"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0105"),\r
+        DFA.unpack(u"\1\u0106"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0109"),\r
+        DFA.unpack(u"\1\u010a"),\r
+        DFA.unpack(u"\1\u010b"),\r
+        DFA.unpack(u"\1\u010c"),\r
+        DFA.unpack(u"\1\u010d"),\r
+        DFA.unpack(u"\1\u010e"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u010f"),\r
+        DFA.unpack(u"\1\u0110"),\r
+        DFA.unpack(u"\1\u0111"),\r
+        DFA.unpack(u"\1\u0112"),\r
+        DFA.unpack(u"\1\u0114\17\uffff\1\u0113"),\r
+        DFA.unpack(u"\1\u0115"),\r
+        DFA.unpack(u"\1\u0116"),\r
+        DFA.unpack(u"\1\u0117"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0119"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u011b"),\r
+        DFA.unpack(u"\1\u011c"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u011d"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u011e"),\r
+        DFA.unpack(u"\1\u011f"),\r
+        DFA.unpack(u"\1\u0120"),\r
+        DFA.unpack(u"\1\u0121"),\r
+        DFA.unpack(u"\1\u0122"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0124"),\r
+        DFA.unpack(u"\1\u0125"),\r
+        DFA.unpack(u"\1\u0126"),\r
+        DFA.unpack(u"\1\u0127"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0128"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u012b"),\r
+        DFA.unpack(u"\1\u012c"),\r
+        DFA.unpack(u"\1\u012d"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u012f"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0131"),\r
+        DFA.unpack(u"\1\u0132"),\r
+        DFA.unpack(u"\1\u0133"),\r
+        DFA.unpack(u"\1\u0134"),\r
+        DFA.unpack(u"\1\u0135"),\r
+        DFA.unpack(u"\1\u0136"),\r
+        DFA.unpack(u"\1\u0137"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\u0138\1"\r
+        u"\uffff\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u013c"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0143"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0146"),\r
+        DFA.unpack(u"\1\u0147"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0148"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u014a"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u014b"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u014c"),\r
+        DFA.unpack(u"\1\u014d"),\r
+        DFA.unpack(u"\1\u014e"),\r
+        DFA.unpack(u"\1\u014f"),\r
+        DFA.unpack(u"\1\u0150"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0153"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0155"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0156"),\r
+        DFA.unpack(u"\1\u0157"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0159"),\r
+        DFA.unpack(u"\1\u015a"),\r
+        DFA.unpack(u"\1\u015b"),\r
+        DFA.unpack(u"\1\u015c"),\r
+        DFA.unpack(u"\1\u015d"),\r
+        DFA.unpack(u"\1\u015e"),\r
+        DFA.unpack(u"\1\u015f"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0166"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0168"),\r
+        DFA.unpack(u"\1\u0169"),\r
+        DFA.unpack(u"\1\u016a"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u016c"),\r
+        DFA.unpack(u"\1\u016d"),\r
+        DFA.unpack(u"\1\u016e"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u016f"),\r
+        DFA.unpack(u"\1\u0170"),\r
+        DFA.unpack(u"\1\u0171"),\r
+        DFA.unpack(u"\1\u0172"),\r
+        DFA.unpack(u"\1\u0173"),\r
+        DFA.unpack(u"\1\u0174"),\r
+        DFA.unpack(u"\1\u0175"),\r
+        DFA.unpack(u"\1\u0176"),\r
+        DFA.unpack(u"\1\u0177"),\r
+        DFA.unpack(u"\1\u0178"),\r
+        DFA.unpack(u"\1\u0179"),\r
+        DFA.unpack(u"\1\u017a"),\r
+        DFA.unpack(u"\1\u017b"),\r
+        DFA.unpack(u"\1\u017c"),\r
+        DFA.unpack(u"\1\u017d"),\r
+        DFA.unpack(u"\1\u017e"),\r
+        DFA.unpack(u"\1\u017f"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0181"),\r
+        DFA.unpack(u"\1\u0182"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0183"),\r
+        DFA.unpack(u"\1\u0184"),\r
+        DFA.unpack(u"\1\u0185"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"\1\u0187"),\r
+        DFA.unpack(u""),\r
+        DFA.unpack(u"\1\u0188"),\r
+        DFA.unpack(u"\1\u0189"),\r
+        DFA.unpack(u"\1\u018a"),\r
+        DFA.unpack(u"\1\u018b"),\r
+        DFA.unpack(u"\1\u018c"),\r
+        DFA.unpack(u"\1\u018d"),\r
+        DFA.unpack(u"\1\u018e"),\r
+        DFA.unpack(u"\1\u018f"),\r
+        DFA.unpack(u"\1\u0190"),\r
+        DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff"\r
+        u"\32\76"),\r
+        DFA.unpack(u"")\r
+    ]\r
+\r
+    # class definition for DFA #35\r
 \r
+    DFA35 = DFA\r
 \r
 \r
diff --git a/BaseTools/Source/Python/Eot/CListener.py b/BaseTools/Source/Python/Eot/CListener.py
deleted file mode 100644 (file)
index 6824c94..0000000
+++ /dev/null
@@ -1,672 +0,0 @@
-# Generated from C.g4 by ANTLR 4.7.1\r
-from antlr4 import *\r
-if __name__ is not None and "." in __name__:\r
-    from .CParser import CParser\r
-else:\r
-    from CParser import CParser\r
-\r
-## @file\r
-# The file defines the parser for C source files.\r
-#\r
-# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE.\r
-# This file is generated by running:\r
-# java org.antlr.Tool C.g\r
-#\r
-# Copyright (c) 2009 - 2010, Intel Corporation  All rights reserved.\r
-#\r
-# This program and the accompanying materials are licensed and made available\r
-# under the terms and conditions of the BSD License which accompanies this\r
-# distribution.  The full text of the license may be found at:\r
-#   http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-##\r
-\r
-import Ecc.CodeFragment as CodeFragment\r
-import Ecc.FileProfile as FileProfile\r
-\r
-\r
-# This class defines a complete listener for a parse tree produced by CParser.\r
-class CListener(ParseTreeListener):\r
-\r
-    # Enter a parse tree produced by CParser#translation_unit.\r
-    def enterTranslation_unit(self, ctx:CParser.Translation_unitContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#translation_unit.\r
-    def exitTranslation_unit(self, ctx:CParser.Translation_unitContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#external_declaration.\r
-    def enterExternal_declaration(self, ctx:CParser.External_declarationContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#external_declaration.\r
-    def exitExternal_declaration(self, ctx:CParser.External_declarationContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#function_definition.\r
-    def enterFunction_definition(self, ctx:CParser.Function_definitionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#function_definition.\r
-    def exitFunction_definition(self, ctx:CParser.Function_definitionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#declaration_specifiers.\r
-    def enterDeclaration_specifiers(self, ctx:CParser.Declaration_specifiersContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#declaration_specifiers.\r
-    def exitDeclaration_specifiers(self, ctx:CParser.Declaration_specifiersContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#declaration.\r
-    def enterDeclaration(self, ctx:CParser.DeclarationContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#declaration.\r
-    def exitDeclaration(self, ctx:CParser.DeclarationContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#init_declarator_list.\r
-    def enterInit_declarator_list(self, ctx:CParser.Init_declarator_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#init_declarator_list.\r
-    def exitInit_declarator_list(self, ctx:CParser.Init_declarator_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#init_declarator.\r
-    def enterInit_declarator(self, ctx:CParser.Init_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#init_declarator.\r
-    def exitInit_declarator(self, ctx:CParser.Init_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#storage_class_specifier.\r
-    def enterStorage_class_specifier(self, ctx:CParser.Storage_class_specifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#storage_class_specifier.\r
-    def exitStorage_class_specifier(self, ctx:CParser.Storage_class_specifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#type_specifier.\r
-    def enterType_specifier(self, ctx:CParser.Type_specifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#type_specifier.\r
-    def exitType_specifier(self, ctx:CParser.Type_specifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#type_id.\r
-    def enterType_id(self, ctx:CParser.Type_idContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#type_id.\r
-    def exitType_id(self, ctx:CParser.Type_idContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_or_union_specifier.\r
-    def enterStruct_or_union_specifier(self, ctx:CParser.Struct_or_union_specifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_or_union_specifier.\r
-    def exitStruct_or_union_specifier(self, ctx:CParser.Struct_or_union_specifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_or_union.\r
-    def enterStruct_or_union(self, ctx:CParser.Struct_or_unionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_or_union.\r
-    def exitStruct_or_union(self, ctx:CParser.Struct_or_unionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_declaration_list.\r
-    def enterStruct_declaration_list(self, ctx:CParser.Struct_declaration_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_declaration_list.\r
-    def exitStruct_declaration_list(self, ctx:CParser.Struct_declaration_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_declaration.\r
-    def enterStruct_declaration(self, ctx:CParser.Struct_declarationContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_declaration.\r
-    def exitStruct_declaration(self, ctx:CParser.Struct_declarationContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#specifier_qualifier_list.\r
-    def enterSpecifier_qualifier_list(self, ctx:CParser.Specifier_qualifier_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#specifier_qualifier_list.\r
-    def exitSpecifier_qualifier_list(self, ctx:CParser.Specifier_qualifier_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_declarator_list.\r
-    def enterStruct_declarator_list(self, ctx:CParser.Struct_declarator_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_declarator_list.\r
-    def exitStruct_declarator_list(self, ctx:CParser.Struct_declarator_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#struct_declarator.\r
-    def enterStruct_declarator(self, ctx:CParser.Struct_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#struct_declarator.\r
-    def exitStruct_declarator(self, ctx:CParser.Struct_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#enum_specifier.\r
-    def enterEnum_specifier(self, ctx:CParser.Enum_specifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#enum_specifier.\r
-    def exitEnum_specifier(self, ctx:CParser.Enum_specifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#enumerator_list.\r
-    def enterEnumerator_list(self, ctx:CParser.Enumerator_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#enumerator_list.\r
-    def exitEnumerator_list(self, ctx:CParser.Enumerator_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#enumerator.\r
-    def enterEnumerator(self, ctx:CParser.EnumeratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#enumerator.\r
-    def exitEnumerator(self, ctx:CParser.EnumeratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#type_qualifier.\r
-    def enterType_qualifier(self, ctx:CParser.Type_qualifierContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#type_qualifier.\r
-    def exitType_qualifier(self, ctx:CParser.Type_qualifierContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#declarator.\r
-    def enterDeclarator(self, ctx:CParser.DeclaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#declarator.\r
-    def exitDeclarator(self, ctx:CParser.DeclaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#direct_declarator.\r
-    def enterDirect_declarator(self, ctx:CParser.Direct_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#direct_declarator.\r
-    def exitDirect_declarator(self, ctx:CParser.Direct_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#declarator_suffix.\r
-    def enterDeclarator_suffix(self, ctx:CParser.Declarator_suffixContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#declarator_suffix.\r
-    def exitDeclarator_suffix(self, ctx:CParser.Declarator_suffixContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#pointer.\r
-    def enterPointer(self, ctx:CParser.PointerContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#pointer.\r
-    def exitPointer(self, ctx:CParser.PointerContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#parameter_type_list.\r
-    def enterParameter_type_list(self, ctx:CParser.Parameter_type_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#parameter_type_list.\r
-    def exitParameter_type_list(self, ctx:CParser.Parameter_type_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#parameter_list.\r
-    def enterParameter_list(self, ctx:CParser.Parameter_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#parameter_list.\r
-    def exitParameter_list(self, ctx:CParser.Parameter_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#parameter_declaration.\r
-    def enterParameter_declaration(self, ctx:CParser.Parameter_declarationContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#parameter_declaration.\r
-    def exitParameter_declaration(self, ctx:CParser.Parameter_declarationContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#identifier_list.\r
-    def enterIdentifier_list(self, ctx:CParser.Identifier_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#identifier_list.\r
-    def exitIdentifier_list(self, ctx:CParser.Identifier_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#type_name.\r
-    def enterType_name(self, ctx:CParser.Type_nameContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#type_name.\r
-    def exitType_name(self, ctx:CParser.Type_nameContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#abstract_declarator.\r
-    def enterAbstract_declarator(self, ctx:CParser.Abstract_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#abstract_declarator.\r
-    def exitAbstract_declarator(self, ctx:CParser.Abstract_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#direct_abstract_declarator.\r
-    def enterDirect_abstract_declarator(self, ctx:CParser.Direct_abstract_declaratorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#direct_abstract_declarator.\r
-    def exitDirect_abstract_declarator(self, ctx:CParser.Direct_abstract_declaratorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#abstract_declarator_suffix.\r
-    def enterAbstract_declarator_suffix(self, ctx:CParser.Abstract_declarator_suffixContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#abstract_declarator_suffix.\r
-    def exitAbstract_declarator_suffix(self, ctx:CParser.Abstract_declarator_suffixContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#initializer.\r
-    def enterInitializer(self, ctx:CParser.InitializerContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#initializer.\r
-    def exitInitializer(self, ctx:CParser.InitializerContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#initializer_list.\r
-    def enterInitializer_list(self, ctx:CParser.Initializer_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#initializer_list.\r
-    def exitInitializer_list(self, ctx:CParser.Initializer_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#argument_expression_list.\r
-    def enterArgument_expression_list(self, ctx:CParser.Argument_expression_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#argument_expression_list.\r
-    def exitArgument_expression_list(self, ctx:CParser.Argument_expression_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#additive_expression.\r
-    def enterAdditive_expression(self, ctx:CParser.Additive_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#additive_expression.\r
-    def exitAdditive_expression(self, ctx:CParser.Additive_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#multiplicative_expression.\r
-    def enterMultiplicative_expression(self, ctx:CParser.Multiplicative_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#multiplicative_expression.\r
-    def exitMultiplicative_expression(self, ctx:CParser.Multiplicative_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#cast_expression.\r
-    def enterCast_expression(self, ctx:CParser.Cast_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#cast_expression.\r
-    def exitCast_expression(self, ctx:CParser.Cast_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#unary_expression.\r
-    def enterUnary_expression(self, ctx:CParser.Unary_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#unary_expression.\r
-    def exitUnary_expression(self, ctx:CParser.Unary_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#postfix_expression.\r
-    def enterPostfix_expression(self, ctx:CParser.Postfix_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#postfix_expression.\r
-    def exitPostfix_expression(self, ctx:CParser.Postfix_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#macro_parameter_list.\r
-    def enterMacro_parameter_list(self, ctx:CParser.Macro_parameter_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#macro_parameter_list.\r
-    def exitMacro_parameter_list(self, ctx:CParser.Macro_parameter_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#unary_operator.\r
-    def enterUnary_operator(self, ctx:CParser.Unary_operatorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#unary_operator.\r
-    def exitUnary_operator(self, ctx:CParser.Unary_operatorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#primary_expression.\r
-    def enterPrimary_expression(self, ctx:CParser.Primary_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#primary_expression.\r
-    def exitPrimary_expression(self, ctx:CParser.Primary_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#constant.\r
-    def enterConstant(self, ctx:CParser.ConstantContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#constant.\r
-    def exitConstant(self, ctx:CParser.ConstantContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#expression.\r
-    def enterExpression(self, ctx:CParser.ExpressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#expression.\r
-    def exitExpression(self, ctx:CParser.ExpressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#constant_expression.\r
-    def enterConstant_expression(self, ctx:CParser.Constant_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#constant_expression.\r
-    def exitConstant_expression(self, ctx:CParser.Constant_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#assignment_expression.\r
-    def enterAssignment_expression(self, ctx:CParser.Assignment_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#assignment_expression.\r
-    def exitAssignment_expression(self, ctx:CParser.Assignment_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#lvalue.\r
-    def enterLvalue(self, ctx:CParser.LvalueContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#lvalue.\r
-    def exitLvalue(self, ctx:CParser.LvalueContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#assignment_operator.\r
-    def enterAssignment_operator(self, ctx:CParser.Assignment_operatorContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#assignment_operator.\r
-    def exitAssignment_operator(self, ctx:CParser.Assignment_operatorContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#conditional_expression.\r
-    def enterConditional_expression(self, ctx:CParser.Conditional_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#conditional_expression.\r
-    def exitConditional_expression(self, ctx:CParser.Conditional_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#logical_or_expression.\r
-    def enterLogical_or_expression(self, ctx:CParser.Logical_or_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#logical_or_expression.\r
-    def exitLogical_or_expression(self, ctx:CParser.Logical_or_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#logical_and_expression.\r
-    def enterLogical_and_expression(self, ctx:CParser.Logical_and_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#logical_and_expression.\r
-    def exitLogical_and_expression(self, ctx:CParser.Logical_and_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#inclusive_or_expression.\r
-    def enterInclusive_or_expression(self, ctx:CParser.Inclusive_or_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#inclusive_or_expression.\r
-    def exitInclusive_or_expression(self, ctx:CParser.Inclusive_or_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#exclusive_or_expression.\r
-    def enterExclusive_or_expression(self, ctx:CParser.Exclusive_or_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#exclusive_or_expression.\r
-    def exitExclusive_or_expression(self, ctx:CParser.Exclusive_or_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#and_expression.\r
-    def enterAnd_expression(self, ctx:CParser.And_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#and_expression.\r
-    def exitAnd_expression(self, ctx:CParser.And_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#equality_expression.\r
-    def enterEquality_expression(self, ctx:CParser.Equality_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#equality_expression.\r
-    def exitEquality_expression(self, ctx:CParser.Equality_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#relational_expression.\r
-    def enterRelational_expression(self, ctx:CParser.Relational_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#relational_expression.\r
-    def exitRelational_expression(self, ctx:CParser.Relational_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#shift_expression.\r
-    def enterShift_expression(self, ctx:CParser.Shift_expressionContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#shift_expression.\r
-    def exitShift_expression(self, ctx:CParser.Shift_expressionContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#statement.\r
-    def enterStatement(self, ctx:CParser.StatementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#statement.\r
-    def exitStatement(self, ctx:CParser.StatementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#asm2_statement.\r
-    def enterAsm2_statement(self, ctx:CParser.Asm2_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#asm2_statement.\r
-    def exitAsm2_statement(self, ctx:CParser.Asm2_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#asm1_statement.\r
-    def enterAsm1_statement(self, ctx:CParser.Asm1_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#asm1_statement.\r
-    def exitAsm1_statement(self, ctx:CParser.Asm1_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#asm_statement.\r
-    def enterAsm_statement(self, ctx:CParser.Asm_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#asm_statement.\r
-    def exitAsm_statement(self, ctx:CParser.Asm_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#macro_statement.\r
-    def enterMacro_statement(self, ctx:CParser.Macro_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#macro_statement.\r
-    def exitMacro_statement(self, ctx:CParser.Macro_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#labeled_statement.\r
-    def enterLabeled_statement(self, ctx:CParser.Labeled_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#labeled_statement.\r
-    def exitLabeled_statement(self, ctx:CParser.Labeled_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#compound_statement.\r
-    def enterCompound_statement(self, ctx:CParser.Compound_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#compound_statement.\r
-    def exitCompound_statement(self, ctx:CParser.Compound_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#statement_list.\r
-    def enterStatement_list(self, ctx:CParser.Statement_listContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#statement_list.\r
-    def exitStatement_list(self, ctx:CParser.Statement_listContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#expression_statement.\r
-    def enterExpression_statement(self, ctx:CParser.Expression_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#expression_statement.\r
-    def exitExpression_statement(self, ctx:CParser.Expression_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#selection_statement.\r
-    def enterSelection_statement(self, ctx:CParser.Selection_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#selection_statement.\r
-    def exitSelection_statement(self, ctx:CParser.Selection_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#iteration_statement.\r
-    def enterIteration_statement(self, ctx:CParser.Iteration_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#iteration_statement.\r
-    def exitIteration_statement(self, ctx:CParser.Iteration_statementContext):\r
-        pass\r
-\r
-\r
-    # Enter a parse tree produced by CParser#jump_statement.\r
-    def enterJump_statement(self, ctx:CParser.Jump_statementContext):\r
-        pass\r
-\r
-    # Exit a parse tree produced by CParser#jump_statement.\r
-    def exitJump_statement(self, ctx:CParser.Jump_statementContext):\r
-        pass\r
-\r
-\r
index 77c0d9e336b4fa51db43d19457a41058098336ce..0b74b53ae7a5eafeaee8d78c3a3783f5dfcee703 100644 (file)
@@ -1,10 +1,9 @@
-# Generated from C.g4 by ANTLR 4.7.1\r
-# encoding: utf-8\r
-from antlr4 import *\r
-from io import StringIO\r
-from typing.io import TextIO\r
-import sys\r
+# $ANTLR 3.0.1 C.g 2010-02-23 09:58:53\r
 \r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
+from antlr3 import *\r
+from antlr3.compat import set, frozenset\r
 \r
 ## @file\r
 # The file defines the parser for C source files.\r
@@ -13,7 +12,7 @@ import sys
 # This file is generated by running:\r
 # java org.antlr.Tool C.g\r
 #\r
-# Copyright (c) 2009 - 2010, Intel Corporation  All rights reserved.\r
+# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available\r
 # under the terms and conditions of the BSD License which accompanies this\r
@@ -25,5925 +24,18816 @@ import sys
 #\r
 ##\r
 \r
-import Ecc.CodeFragment as CodeFragment\r
-import Ecc.FileProfile as FileProfile\r
-\r
-def serializedATN():\r
-    with StringIO() as buf:\r
-        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3k")\r
-        buf.write("\u0380\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7")\r
-        buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16")\r
-        buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23")\r
-        buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31")\r
-        buf.write("\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36")\r
-        buf.write("\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t")\r
-        buf.write("&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4")\r
-        buf.write("/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t\64")\r
-        buf.write("\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t")\r
-        buf.write(";\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\t")\r
-        buf.write("D\4E\tE\4F\tF\4G\tG\4H\tH\3\2\7\2\u0092\n\2\f\2\16\2\u0095")\r
-        buf.write("\13\2\3\3\5\3\u0098\n\3\3\3\3\3\7\3\u009c\n\3\f\3\16\3")\r
-        buf.write("\u009f\13\3\3\3\3\3\3\3\3\3\3\3\3\3\5\3\u00a7\n\3\5\3")\r
-        buf.write("\u00a9\n\3\3\4\5\4\u00ac\n\4\3\4\3\4\6\4\u00b0\n\4\r\4")\r
-        buf.write("\16\4\u00b1\3\4\3\4\3\4\5\4\u00b7\n\4\3\4\3\4\3\5\3\5")\r
-        buf.write("\3\5\6\5\u00be\n\5\r\5\16\5\u00bf\3\6\3\6\5\6\u00c4\n")\r
-        buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u00cc\n\6\3\6\3\6\3\6\5")\r
-        buf.write("\6\u00d1\n\6\3\7\3\7\3\7\7\7\u00d6\n\7\f\7\16\7\u00d9")\r
-        buf.write("\13\7\3\b\3\b\3\b\5\b\u00de\n\b\3\t\3\t\3\n\3\n\3\n\3")\r
-        buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n")\r
-        buf.write("\7\n\u00f3\n\n\f\n\16\n\u00f6\13\n\3\n\3\n\5\n\u00fa\n")\r
-        buf.write("\n\3\13\3\13\3\f\3\f\5\f\u0100\n\f\3\f\3\f\3\f\3\f\3\f")\r
-        buf.write("\3\f\3\f\5\f\u0109\n\f\3\r\3\r\3\16\6\16\u010e\n\16\r")\r
-        buf.write("\16\16\16\u010f\3\17\3\17\3\17\3\17\3\20\3\20\6\20\u0118")\r
-        buf.write("\n\20\r\20\16\20\u0119\3\21\3\21\3\21\7\21\u011f\n\21")\r
-        buf.write("\f\21\16\21\u0122\13\21\3\22\3\22\3\22\5\22\u0127\n\22")\r
-        buf.write("\3\22\3\22\5\22\u012b\n\22\3\23\3\23\3\23\3\23\5\23\u0131")\r
-        buf.write("\n\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u013a\n")\r
-        buf.write("\23\3\23\3\23\3\23\3\23\5\23\u0140\n\23\3\24\3\24\3\24")\r
-        buf.write("\7\24\u0145\n\24\f\24\16\24\u0148\13\24\3\25\3\25\3\25")\r
-        buf.write("\5\25\u014d\n\25\3\26\3\26\3\27\5\27\u0152\n\27\3\27\5")\r
-        buf.write("\27\u0155\n\27\3\27\5\27\u0158\n\27\3\27\5\27\u015b\n")\r
-        buf.write("\27\3\27\3\27\5\27\u015f\n\27\3\30\3\30\7\30\u0163\n\30")\r
-        buf.write("\f\30\16\30\u0166\13\30\3\30\3\30\5\30\u016a\n\30\3\30")\r
-        buf.write("\3\30\3\30\6\30\u016f\n\30\r\30\16\30\u0170\5\30\u0173")\r
-        buf.write("\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31")\r
-        buf.write("\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u0185\n\31\3\32\3")\r
-        buf.write("\32\6\32\u0189\n\32\r\32\16\32\u018a\3\32\5\32\u018e\n")\r
-        buf.write("\32\3\32\3\32\3\32\5\32\u0193\n\32\3\33\3\33\3\33\5\33")\r
-        buf.write("\u0198\n\33\3\33\5\33\u019b\n\33\3\34\3\34\3\34\5\34\u01a0")\r
-        buf.write("\n\34\3\34\7\34\u01a3\n\34\f\34\16\34\u01a6\13\34\3\35")\r
-        buf.write("\3\35\3\35\7\35\u01ab\n\35\f\35\16\35\u01ae\13\35\3\35")\r
-        buf.write("\5\35\u01b1\n\35\3\35\7\35\u01b4\n\35\f\35\16\35\u01b7")\r
-        buf.write("\13\35\3\35\5\35\u01ba\n\35\3\36\3\36\3\36\7\36\u01bf")\r
-        buf.write("\n\36\f\36\16\36\u01c2\13\36\3\37\3\37\5\37\u01c6\n\37")\r
-        buf.write("\3\37\5\37\u01c9\n\37\3 \3 \5 \u01cd\n \3 \5 \u01d0\n")\r
-        buf.write(" \3!\3!\3!\3!\3!\5!\u01d7\n!\3!\7!\u01da\n!\f!\16!\u01dd")\r
-        buf.write("\13!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5")\r
-        buf.write("\"\u01eb\n\"\3#\3#\3#\3#\5#\u01f1\n#\3#\3#\5#\u01f5\n")\r
-        buf.write("#\3$\3$\3$\7$\u01fa\n$\f$\16$\u01fd\13$\3%\3%\5%\u0201")\r
-        buf.write("\n%\3%\3%\3%\5%\u0206\n%\7%\u0208\n%\f%\16%\u020b\13%")\r
-        buf.write("\3&\3&\3&\3&\3&\7&\u0212\n&\f&\16&\u0215\13&\3\'\3\'\3")\r
-        buf.write("\'\3\'\3\'\3\'\3\'\7\'\u021e\n\'\f\'\16\'\u0221\13\'\3")\r
-        buf.write("(\3(\3(\3(\3(\3(\5(\u0229\n(\3)\3)\3)\3)\3)\3)\3)\3)\3")\r
-        buf.write(")\3)\3)\3)\3)\3)\3)\5)\u023a\n)\3*\3*\3*\3*\3*\3*\3*\3")\r
-        buf.write("*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3")\r
-        buf.write("*\3*\3*\3*\7*\u0259\n*\f*\16*\u025c\13*\3+\3+\3+\7+\u0261")\r
-        buf.write("\n+\f+\16+\u0264\13+\3,\3,\3-\3-\3-\3-\3-\3-\5-\u026e")\r
-        buf.write("\n-\3.\3.\3.\3.\3.\7.\u0275\n.\f.\16.\u0278\13.\3.\6.")\r
-        buf.write("\u027b\n.\r.\16.\u027c\6.\u027f\n.\r.\16.\u0280\3.\7.")\r
-        buf.write("\u0284\n.\f.\16.\u0287\13.\3.\5.\u028a\n.\3/\3/\3/\7/")\r
-        buf.write("\u028f\n/\f/\16/\u0292\13/\3\60\3\60\3\61\3\61\3\61\3")\r
-        buf.write("\61\3\61\5\61\u029b\n\61\3\62\3\62\3\63\3\63\3\64\3\64")\r
-        buf.write("\3\64\3\64\3\64\3\64\3\64\5\64\u02a8\n\64\3\65\3\65\3")\r
-        buf.write("\65\7\65\u02ad\n\65\f\65\16\65\u02b0\13\65\3\66\3\66\3")\r
-        buf.write("\66\7\66\u02b5\n\66\f\66\16\66\u02b8\13\66\3\67\3\67\3")\r
-        buf.write("\67\7\67\u02bd\n\67\f\67\16\67\u02c0\13\67\38\38\38\7")\r
-        buf.write("8\u02c5\n8\f8\168\u02c8\138\39\39\39\79\u02cd\n9\f9\16")\r
-        buf.write("9\u02d0\139\3:\3:\3:\7:\u02d5\n:\f:\16:\u02d8\13:\3;\3")\r
-        buf.write(";\3;\7;\u02dd\n;\f;\16;\u02e0\13;\3<\3<\3<\7<\u02e5\n")\r
-        buf.write("<\f<\16<\u02e8\13<\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\5")\r
-        buf.write("=\u02f5\n=\3>\5>\u02f8\n>\3>\3>\3>\7>\u02fd\n>\f>\16>")\r
-        buf.write("\u0300\13>\3>\3>\3>\3?\3?\3?\7?\u0308\n?\f?\16?\u030b")\r
-        buf.write("\13?\3?\3?\3@\3@\3@\7@\u0312\n@\f@\16@\u0315\13@\3@\3")\r
-        buf.write("@\3A\3A\3A\7A\u031c\nA\fA\16A\u031f\13A\3A\5A\u0322\n")\r
-        buf.write("A\3A\5A\u0325\nA\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3")\r
-        buf.write("B\5B\u0334\nB\3C\3C\7C\u0338\nC\fC\16C\u033b\13C\3C\5")\r
-        buf.write("C\u033e\nC\3C\3C\3D\6D\u0343\nD\rD\16D\u0344\3E\3E\3E")\r
-        buf.write("\3E\5E\u034b\nE\3F\3F\3F\3F\3F\3F\3F\3F\5F\u0355\nF\3")\r
-        buf.write("F\3F\3F\3F\3F\3F\5F\u035d\nF\3G\3G\3G\3G\3G\3G\3G\3G\3")\r
-        buf.write("G\3G\3G\3G\3G\3G\3G\3G\5G\u036f\nG\3H\3H\3H\3H\3H\3H\3")\r
-        buf.write("H\3H\3H\3H\3H\3H\3H\5H\u037e\nH\3H\2\2I\2\4\6\b\n\f\16")\r
-        buf.write("\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDF")\r
-        buf.write("HJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086")\r
-        buf.write("\u0088\u008a\u008c\u008e\2\f\3\2\b\f\3\2\27\30\3\2\33")\r
-        buf.write("\'\5\2,,./\679\4\2\7\7:C\3\2IJ\3\2KN\3\2OP\3\2\4\4\3\2")\r
-        buf.write("\26\26\2\u03d8\2\u0093\3\2\2\2\4\u00a8\3\2\2\2\6\u00ab")\r
-        buf.write("\3\2\2\2\b\u00bd\3\2\2\2\n\u00d0\3\2\2\2\f\u00d2\3\2\2")\r
-        buf.write("\2\16\u00da\3\2\2\2\20\u00df\3\2\2\2\22\u00f9\3\2\2\2")\r
-        buf.write("\24\u00fb\3\2\2\2\26\u0108\3\2\2\2\30\u010a\3\2\2\2\32")\r
-        buf.write("\u010d\3\2\2\2\34\u0111\3\2\2\2\36\u0117\3\2\2\2 \u011b")\r
-        buf.write("\3\2\2\2\"\u012a\3\2\2\2$\u013f\3\2\2\2&\u0141\3\2\2\2")\r
-        buf.write("(\u0149\3\2\2\2*\u014e\3\2\2\2,\u015e\3\2\2\2.\u0172\3")\r
-        buf.write("\2\2\2\60\u0184\3\2\2\2\62\u0192\3\2\2\2\64\u0194\3\2")\r
-        buf.write("\2\2\66\u019c\3\2\2\28\u01b9\3\2\2\2:\u01bb\3\2\2\2<\u01c8")\r
-        buf.write("\3\2\2\2>\u01cf\3\2\2\2@\u01d6\3\2\2\2B\u01ea\3\2\2\2")\r
-        buf.write("D\u01f4\3\2\2\2F\u01f6\3\2\2\2H\u01fe\3\2\2\2J\u020c\3")\r
-        buf.write("\2\2\2L\u0216\3\2\2\2N\u0228\3\2\2\2P\u0239\3\2\2\2R\u023b")\r
-        buf.write("\3\2\2\2T\u025d\3\2\2\2V\u0265\3\2\2\2X\u026d\3\2\2\2")\r
-        buf.write("Z\u0289\3\2\2\2\\\u028b\3\2\2\2^\u0293\3\2\2\2`\u029a")\r
-        buf.write("\3\2\2\2b\u029c\3\2\2\2d\u029e\3\2\2\2f\u02a0\3\2\2\2")\r
-        buf.write("h\u02a9\3\2\2\2j\u02b1\3\2\2\2l\u02b9\3\2\2\2n\u02c1\3")\r
-        buf.write("\2\2\2p\u02c9\3\2\2\2r\u02d1\3\2\2\2t\u02d9\3\2\2\2v\u02e1")\r
-        buf.write("\3\2\2\2x\u02f4\3\2\2\2z\u02f7\3\2\2\2|\u0304\3\2\2\2")\r
-        buf.write("~\u030e\3\2\2\2\u0080\u0318\3\2\2\2\u0082\u0333\3\2\2")\r
-        buf.write("\2\u0084\u0335\3\2\2\2\u0086\u0342\3\2\2\2\u0088\u034a")\r
-        buf.write("\3\2\2\2\u008a\u035c\3\2\2\2\u008c\u036e\3\2\2\2\u008e")\r
-        buf.write("\u037d\3\2\2\2\u0090\u0092\5\4\3\2\u0091\u0090\3\2\2\2")\r
-        buf.write("\u0092\u0095\3\2\2\2\u0093\u0091\3\2\2\2\u0093\u0094\3")\r
-        buf.write("\2\2\2\u0094\3\3\2\2\2\u0095\u0093\3\2\2\2\u0096\u0098")\r
-        buf.write("\5\b\5\2\u0097\u0096\3\2\2\2\u0097\u0098\3\2\2\2\u0098")\r
-        buf.write("\u0099\3\2\2\2\u0099\u009d\5,\27\2\u009a\u009c\5\n\6\2")\r
-        buf.write("\u009b\u009a\3\2\2\2\u009c\u009f\3\2\2\2\u009d\u009b\3")\r
-        buf.write("\2\2\2\u009d\u009e\3\2\2\2\u009e\u00a0\3\2\2\2\u009f\u009d")\r
-        buf.write("\3\2\2\2\u00a0\u00a1\7\3\2\2\u00a1\u00a9\3\2\2\2\u00a2")\r
-        buf.write("\u00a9\5\6\4\2\u00a3\u00a9\5\n\6\2\u00a4\u00a6\5\u0080")\r
-        buf.write("A\2\u00a5\u00a7\7\4\2\2\u00a6\u00a5\3\2\2\2\u00a6\u00a7")\r
-        buf.write("\3\2\2\2\u00a7\u00a9\3\2\2\2\u00a8\u0097\3\2\2\2\u00a8")\r
-        buf.write("\u00a2\3\2\2\2\u00a8\u00a3\3\2\2\2\u00a8\u00a4\3\2\2\2")\r
-        buf.write("\u00a9\5\3\2\2\2\u00aa\u00ac\5\b\5\2\u00ab\u00aa\3\2\2")\r
-        buf.write("\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00b6")\r
-        buf.write("\5,\27\2\u00ae\u00b0\5\n\6\2\u00af\u00ae\3\2\2\2\u00b0")\r
-        buf.write("\u00b1\3\2\2\2\u00b1\u00af\3\2\2\2\u00b1\u00b2\3\2\2\2")\r
-        buf.write("\u00b2\u00b3\3\2\2\2\u00b3\u00b4\5\u0084C\2\u00b4\u00b7")\r
-        buf.write("\3\2\2\2\u00b5\u00b7\5\u0084C\2\u00b6\u00af\3\2\2\2\u00b6")\r
-        buf.write("\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00b9\b\4\1\2")\r
-        buf.write("\u00b9\7\3\2\2\2\u00ba\u00be\5\20\t\2\u00bb\u00be\5\22")\r
-        buf.write("\n\2\u00bc\u00be\5*\26\2\u00bd\u00ba\3\2\2\2\u00bd\u00bb")\r
-        buf.write("\3\2\2\2\u00bd\u00bc\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf")\r
-        buf.write("\u00bd\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\t\3\2\2\2\u00c1")\r
-        buf.write("\u00c3\7\5\2\2\u00c2\u00c4\5\b\5\2\u00c3\u00c2\3\2\2\2")\r
-        buf.write("\u00c3\u00c4\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\u00c6\5")\r
-        buf.write("\f\7\2\u00c6\u00c7\7\4\2\2\u00c7\u00c8\b\6\1\2\u00c8\u00d1")\r
-        buf.write("\3\2\2\2\u00c9\u00cb\5\b\5\2\u00ca\u00cc\5\f\7\2\u00cb")\r
-        buf.write("\u00ca\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2")\r
-        buf.write("\u00cd\u00ce\7\4\2\2\u00ce\u00cf\b\6\1\2\u00cf\u00d1\3")\r
-        buf.write("\2\2\2\u00d0\u00c1\3\2\2\2\u00d0\u00c9\3\2\2\2\u00d1\13")\r
-        buf.write("\3\2\2\2\u00d2\u00d7\5\16\b\2\u00d3\u00d4\7\6\2\2\u00d4")\r
-        buf.write("\u00d6\5\16\b\2\u00d5\u00d3\3\2\2\2\u00d6\u00d9\3\2\2")\r
-        buf.write("\2\u00d7\u00d5\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8\r\3\2")\r
-        buf.write("\2\2\u00d9\u00d7\3\2\2\2\u00da\u00dd\5,\27\2\u00db\u00dc")\r
-        buf.write("\7\7\2\2\u00dc\u00de\5D#\2\u00dd\u00db\3\2\2\2\u00dd\u00de")\r
-        buf.write("\3\2\2\2\u00de\17\3\2\2\2\u00df\u00e0\t\2\2\2\u00e0\21")\r
-        buf.write("\3\2\2\2\u00e1\u00fa\7\r\2\2\u00e2\u00fa\7\16\2\2\u00e3")\r
-        buf.write("\u00fa\7\17\2\2\u00e4\u00fa\7\20\2\2\u00e5\u00fa\7\21")\r
-        buf.write("\2\2\u00e6\u00fa\7\22\2\2\u00e7\u00fa\7\23\2\2\u00e8\u00fa")\r
-        buf.write("\7\24\2\2\u00e9\u00fa\7\25\2\2\u00ea\u00eb\5\26\f\2\u00eb")\r
-        buf.write("\u00ec\b\n\1\2\u00ec\u00fa\3\2\2\2\u00ed\u00ee\5$\23\2")\r
-        buf.write("\u00ee\u00ef\b\n\1\2\u00ef\u00fa\3\2\2\2\u00f0\u00f4\7")\r
-        buf.write("_\2\2\u00f1\u00f3\5*\26\2\u00f2\u00f1\3\2\2\2\u00f3\u00f6")\r
-        buf.write("\3\2\2\2\u00f4\u00f2\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5")\r
-        buf.write("\u00f7\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7\u00fa\5,\27\2")\r
-        buf.write("\u00f8\u00fa\5\24\13\2\u00f9\u00e1\3\2\2\2\u00f9\u00e2")\r
-        buf.write("\3\2\2\2\u00f9\u00e3\3\2\2\2\u00f9\u00e4\3\2\2\2\u00f9")\r
-        buf.write("\u00e5\3\2\2\2\u00f9\u00e6\3\2\2\2\u00f9\u00e7\3\2\2\2")\r
-        buf.write("\u00f9\u00e8\3\2\2\2\u00f9\u00e9\3\2\2\2\u00f9\u00ea\3")\r
-        buf.write("\2\2\2\u00f9\u00ed\3\2\2\2\u00f9\u00f0\3\2\2\2\u00f9\u00f8")\r
-        buf.write("\3\2\2\2\u00fa\23\3\2\2\2\u00fb\u00fc\7_\2\2\u00fc\25")\r
-        buf.write("\3\2\2\2\u00fd\u00ff\5\30\r\2\u00fe\u0100\7_\2\2\u00ff")\r
-        buf.write("\u00fe\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\u0101\3\2\2\2")\r
-        buf.write("\u0101\u0102\7\3\2\2\u0102\u0103\5\32\16\2\u0103\u0104")\r
-        buf.write("\7\26\2\2\u0104\u0109\3\2\2\2\u0105\u0106\5\30\r\2\u0106")\r
-        buf.write("\u0107\7_\2\2\u0107\u0109\3\2\2\2\u0108\u00fd\3\2\2\2")\r
-        buf.write("\u0108\u0105\3\2\2\2\u0109\27\3\2\2\2\u010a\u010b\t\3")\r
-        buf.write("\2\2\u010b\31\3\2\2\2\u010c\u010e\5\34\17\2\u010d\u010c")\r
-        buf.write("\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u010d\3\2\2\2\u010f")\r
-        buf.write("\u0110\3\2\2\2\u0110\33\3\2\2\2\u0111\u0112\5\36\20\2")\r
-        buf.write("\u0112\u0113\5 \21\2\u0113\u0114\7\4\2\2\u0114\35\3\2")\r
-        buf.write("\2\2\u0115\u0118\5*\26\2\u0116\u0118\5\22\n\2\u0117\u0115")\r
-        buf.write("\3\2\2\2\u0117\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119")\r
-        buf.write("\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a\37\3\2\2\2\u011b")\r
-        buf.write("\u0120\5\"\22\2\u011c\u011d\7\6\2\2\u011d\u011f\5\"\22")\r
-        buf.write("\2\u011e\u011c\3\2\2\2\u011f\u0122\3\2\2\2\u0120\u011e")\r
-        buf.write("\3\2\2\2\u0120\u0121\3\2\2\2\u0121!\3\2\2\2\u0122\u0120")\r
-        buf.write("\3\2\2\2\u0123\u0126\5,\27\2\u0124\u0125\7\31\2\2\u0125")\r
-        buf.write("\u0127\5^\60\2\u0126\u0124\3\2\2\2\u0126\u0127\3\2\2\2")\r
-        buf.write("\u0127\u012b\3\2\2\2\u0128\u0129\7\31\2\2\u0129\u012b")\r
-        buf.write("\5^\60\2\u012a\u0123\3\2\2\2\u012a\u0128\3\2\2\2\u012b")\r
-        buf.write("#\3\2\2\2\u012c\u012d\7\32\2\2\u012d\u012e\7\3\2\2\u012e")\r
-        buf.write("\u0130\5&\24\2\u012f\u0131\7\6\2\2\u0130\u012f\3\2\2\2")\r
-        buf.write("\u0130\u0131\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0133\7")\r
-        buf.write("\26\2\2\u0133\u0140\3\2\2\2\u0134\u0135\7\32\2\2\u0135")\r
-        buf.write("\u0136\7_\2\2\u0136\u0137\7\3\2\2\u0137\u0139\5&\24\2")\r
-        buf.write("\u0138\u013a\7\6\2\2\u0139\u0138\3\2\2\2\u0139\u013a\3")\r
-        buf.write("\2\2\2\u013a\u013b\3\2\2\2\u013b\u013c\7\26\2\2\u013c")\r
-        buf.write("\u0140\3\2\2\2\u013d\u013e\7\32\2\2\u013e\u0140\7_\2\2")\r
-        buf.write("\u013f\u012c\3\2\2\2\u013f\u0134\3\2\2\2\u013f\u013d\3")\r
-        buf.write("\2\2\2\u0140%\3\2\2\2\u0141\u0146\5(\25\2\u0142\u0143")\r
-        buf.write("\7\6\2\2\u0143\u0145\5(\25\2\u0144\u0142\3\2\2\2\u0145")\r
-        buf.write("\u0148\3\2\2\2\u0146\u0144\3\2\2\2\u0146\u0147\3\2\2\2")\r
-        buf.write("\u0147\'\3\2\2\2\u0148\u0146\3\2\2\2\u0149\u014c\7_\2")\r
-        buf.write("\2\u014a\u014b\7\7\2\2\u014b\u014d\5^\60\2\u014c\u014a")\r
-        buf.write("\3\2\2\2\u014c\u014d\3\2\2\2\u014d)\3\2\2\2\u014e\u014f")\r
-        buf.write("\t\4\2\2\u014f+\3\2\2\2\u0150\u0152\5\62\32\2\u0151\u0150")\r
-        buf.write("\3\2\2\2\u0151\u0152\3\2\2\2\u0152\u0154\3\2\2\2\u0153")\r
-        buf.write("\u0155\7$\2\2\u0154\u0153\3\2\2\2\u0154\u0155\3\2\2\2")\r
-        buf.write("\u0155\u0157\3\2\2\2\u0156\u0158\7%\2\2\u0157\u0156\3")\r
-        buf.write("\2\2\2\u0157\u0158\3\2\2\2\u0158\u015a\3\2\2\2\u0159\u015b")\r
-        buf.write("\7&\2\2\u015a\u0159\3\2\2\2\u015a\u015b\3\2\2\2\u015b")\r
-        buf.write("\u015c\3\2\2\2\u015c\u015f\5.\30\2\u015d\u015f\5\62\32")\r
-        buf.write("\2\u015e\u0151\3\2\2\2\u015e\u015d\3\2\2\2\u015f-\3\2")\r
-        buf.write("\2\2\u0160\u0164\7_\2\2\u0161\u0163\5\60\31\2\u0162\u0161")\r
-        buf.write("\3\2\2\2\u0163\u0166\3\2\2\2\u0164\u0162\3\2\2\2\u0164")\r
-        buf.write("\u0165\3\2\2\2\u0165\u0173\3\2\2\2\u0166\u0164\3\2\2\2")\r
-        buf.write("\u0167\u0169\7(\2\2\u0168\u016a\7$\2\2\u0169\u0168\3\2")\r
-        buf.write("\2\2\u0169\u016a\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u016c")\r
-        buf.write("\5,\27\2\u016c\u016e\7)\2\2\u016d\u016f\5\60\31\2\u016e")\r
-        buf.write("\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u016e\3\2\2\2")\r
-        buf.write("\u0170\u0171\3\2\2\2\u0171\u0173\3\2\2\2\u0172\u0160\3")\r
-        buf.write("\2\2\2\u0172\u0167\3\2\2\2\u0173/\3\2\2\2\u0174\u0175")\r
-        buf.write("\7*\2\2\u0175\u0176\5^\60\2\u0176\u0177\7+\2\2\u0177\u0185")\r
-        buf.write("\3\2\2\2\u0178\u0179\7*\2\2\u0179\u0185\7+\2\2\u017a\u017b")\r
-        buf.write("\7(\2\2\u017b\u017c\5\64\33\2\u017c\u017d\7)\2\2\u017d")\r
-        buf.write("\u0185\3\2\2\2\u017e\u017f\7(\2\2\u017f\u0180\5:\36\2")\r
-        buf.write("\u0180\u0181\7)\2\2\u0181\u0185\3\2\2\2\u0182\u0183\7")\r
-        buf.write("(\2\2\u0183\u0185\7)\2\2\u0184\u0174\3\2\2\2\u0184\u0178")\r
-        buf.write("\3\2\2\2\u0184\u017a\3\2\2\2\u0184\u017e\3\2\2\2\u0184")\r
-        buf.write("\u0182\3\2\2\2\u0185\61\3\2\2\2\u0186\u0188\7,\2\2\u0187")\r
-        buf.write("\u0189\5*\26\2\u0188\u0187\3\2\2\2\u0189\u018a\3\2\2\2")\r
-        buf.write("\u018a\u0188\3\2\2\2\u018a\u018b\3\2\2\2\u018b\u018d\3")\r
-        buf.write("\2\2\2\u018c\u018e\5\62\32\2\u018d\u018c\3\2\2\2\u018d")\r
-        buf.write("\u018e\3\2\2\2\u018e\u0193\3\2\2\2\u018f\u0190\7,\2\2")\r
-        buf.write("\u0190\u0193\5\62\32\2\u0191\u0193\7,\2\2\u0192\u0186")\r
-        buf.write("\3\2\2\2\u0192\u018f\3\2\2\2\u0192\u0191\3\2\2\2\u0193")\r
-        buf.write("\63\3\2\2\2\u0194\u019a\5\66\34\2\u0195\u0197\7\6\2\2")\r
-        buf.write("\u0196\u0198\7\37\2\2\u0197\u0196\3\2\2\2\u0197\u0198")\r
-        buf.write("\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019b\7-\2\2\u019a")\r
-        buf.write("\u0195\3\2\2\2\u019a\u019b\3\2\2\2\u019b\65\3\2\2\2\u019c")\r
-        buf.write("\u01a4\58\35\2\u019d\u019f\7\6\2\2\u019e\u01a0\7\37\2")\r
-        buf.write("\2\u019f\u019e\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0\u01a1")\r
-        buf.write("\3\2\2\2\u01a1\u01a3\58\35\2\u01a2\u019d\3\2\2\2\u01a3")\r
-        buf.write("\u01a6\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a4\u01a5\3\2\2\2")\r
-        buf.write("\u01a5\67\3\2\2\2\u01a6\u01a4\3\2\2\2\u01a7\u01ac\5\b")\r
-        buf.write("\5\2\u01a8\u01ab\5,\27\2\u01a9\u01ab\5> \2\u01aa\u01a8")\r
-        buf.write("\3\2\2\2\u01aa\u01a9\3\2\2\2\u01ab\u01ae\3\2\2\2\u01ac")\r
-        buf.write("\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01b0\3\2\2\2")\r
-        buf.write("\u01ae\u01ac\3\2\2\2\u01af\u01b1\7\37\2\2\u01b0\u01af")\r
-        buf.write("\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1\u01ba\3\2\2\2\u01b2")\r
-        buf.write("\u01b4\5\62\32\2\u01b3\u01b2\3\2\2\2\u01b4\u01b7\3\2\2")\r
-        buf.write("\2\u01b5\u01b3\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\u01b8")\r
-        buf.write("\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b8\u01ba\7_\2\2\u01b9")\r
-        buf.write("\u01a7\3\2\2\2\u01b9\u01b5\3\2\2\2\u01ba9\3\2\2\2\u01bb")\r
-        buf.write("\u01c0\7_\2\2\u01bc\u01bd\7\6\2\2\u01bd\u01bf\7_\2\2\u01be")\r
-        buf.write("\u01bc\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0\u01be\3\2\2\2")\r
-        buf.write("\u01c0\u01c1\3\2\2\2\u01c1;\3\2\2\2\u01c2\u01c0\3\2\2")\r
-        buf.write("\2\u01c3\u01c5\5\36\20\2\u01c4\u01c6\5> \2\u01c5\u01c4")\r
-        buf.write("\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c9\3\2\2\2\u01c7")\r
-        buf.write("\u01c9\5\24\13\2\u01c8\u01c3\3\2\2\2\u01c8\u01c7\3\2\2")\r
-        buf.write("\2\u01c9=\3\2\2\2\u01ca\u01cc\5\62\32\2\u01cb\u01cd\5")\r
-        buf.write("@!\2\u01cc\u01cb\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd\u01d0")\r
-        buf.write("\3\2\2\2\u01ce\u01d0\5@!\2\u01cf\u01ca\3\2\2\2\u01cf\u01ce")\r
-        buf.write("\3\2\2\2\u01d0?\3\2\2\2\u01d1\u01d2\7(\2\2\u01d2\u01d3")\r
-        buf.write("\5> \2\u01d3\u01d4\7)\2\2\u01d4\u01d7\3\2\2\2\u01d5\u01d7")\r
-        buf.write("\5B\"\2\u01d6\u01d1\3\2\2\2\u01d6\u01d5\3\2\2\2\u01d7")\r
-        buf.write("\u01db\3\2\2\2\u01d8\u01da\5B\"\2\u01d9\u01d8\3\2\2\2")\r
-        buf.write("\u01da\u01dd\3\2\2\2\u01db\u01d9\3\2\2\2\u01db\u01dc\3")\r
-        buf.write("\2\2\2\u01dcA\3\2\2\2\u01dd\u01db\3\2\2\2\u01de\u01df")\r
-        buf.write("\7*\2\2\u01df\u01eb\7+\2\2\u01e0\u01e1\7*\2\2\u01e1\u01e2")\r
-        buf.write("\5^\60\2\u01e2\u01e3\7+\2\2\u01e3\u01eb\3\2\2\2\u01e4")\r
-        buf.write("\u01e5\7(\2\2\u01e5\u01eb\7)\2\2\u01e6\u01e7\7(\2\2\u01e7")\r
-        buf.write("\u01e8\5\64\33\2\u01e8\u01e9\7)\2\2\u01e9\u01eb\3\2\2")\r
-        buf.write("\2\u01ea\u01de\3\2\2\2\u01ea\u01e0\3\2\2\2\u01ea\u01e4")\r
-        buf.write("\3\2\2\2\u01ea\u01e6\3\2\2\2\u01ebC\3\2\2\2\u01ec\u01f5")\r
-        buf.write("\5`\61\2\u01ed\u01ee\7\3\2\2\u01ee\u01f0\5F$\2\u01ef\u01f1")\r
-        buf.write("\7\6\2\2\u01f0\u01ef\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1")\r
-        buf.write("\u01f2\3\2\2\2\u01f2\u01f3\7\26\2\2\u01f3\u01f5\3\2\2")\r
-        buf.write("\2\u01f4\u01ec\3\2\2\2\u01f4\u01ed\3\2\2\2\u01f5E\3\2")\r
-        buf.write("\2\2\u01f6\u01fb\5D#\2\u01f7\u01f8\7\6\2\2\u01f8\u01fa")\r
-        buf.write("\5D#\2\u01f9\u01f7\3\2\2\2\u01fa\u01fd\3\2\2\2\u01fb\u01f9")\r
-        buf.write("\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fcG\3\2\2\2\u01fd\u01fb")\r
-        buf.write("\3\2\2\2\u01fe\u0200\5`\61\2\u01ff\u0201\7\37\2\2\u0200")\r
-        buf.write("\u01ff\3\2\2\2\u0200\u0201\3\2\2\2\u0201\u0209\3\2\2\2")\r
-        buf.write("\u0202\u0203\7\6\2\2\u0203\u0205\5`\61\2\u0204\u0206\7")\r
-        buf.write("\37\2\2\u0205\u0204\3\2\2\2\u0205\u0206\3\2\2\2\u0206")\r
-        buf.write("\u0208\3\2\2\2\u0207\u0202\3\2\2\2\u0208\u020b\3\2\2\2")\r
-        buf.write("\u0209\u0207\3\2\2\2\u0209\u020a\3\2\2\2\u020aI\3\2\2")\r
-        buf.write("\2\u020b\u0209\3\2\2\2\u020c\u0213\5L\'\2\u020d\u020e")\r
-        buf.write("\7.\2\2\u020e\u0212\5L\'\2\u020f\u0210\7/\2\2\u0210\u0212")\r
-        buf.write("\5L\'\2\u0211\u020d\3\2\2\2\u0211\u020f\3\2\2\2\u0212")\r
-        buf.write("\u0215\3\2\2\2\u0213\u0211\3\2\2\2\u0213\u0214\3\2\2\2")\r
-        buf.write("\u0214K\3\2\2\2\u0215\u0213\3\2\2\2\u0216\u021f\5N(\2")\r
-        buf.write("\u0217\u0218\7,\2\2\u0218\u021e\5N(\2\u0219\u021a\7\60")\r
-        buf.write("\2\2\u021a\u021e\5N(\2\u021b\u021c\7\61\2\2\u021c\u021e")\r
-        buf.write("\5N(\2\u021d\u0217\3\2\2\2\u021d\u0219\3\2\2\2\u021d\u021b")\r
-        buf.write("\3\2\2\2\u021e\u0221\3\2\2\2\u021f\u021d\3\2\2\2\u021f")\r
-        buf.write("\u0220\3\2\2\2\u0220M\3\2\2\2\u0221\u021f\3\2\2\2\u0222")\r
-        buf.write("\u0223\7(\2\2\u0223\u0224\5<\37\2\u0224\u0225\7)\2\2\u0225")\r
-        buf.write("\u0226\5N(\2\u0226\u0229\3\2\2\2\u0227\u0229\5P)\2\u0228")\r
-        buf.write("\u0222\3\2\2\2\u0228\u0227\3\2\2\2\u0229O\3\2\2\2\u022a")\r
-        buf.write("\u023a\5R*\2\u022b\u022c\7\62\2\2\u022c\u023a\5P)\2\u022d")\r
-        buf.write("\u022e\7\63\2\2\u022e\u023a\5P)\2\u022f\u0230\5V,\2\u0230")\r
-        buf.write("\u0231\5N(\2\u0231\u023a\3\2\2\2\u0232\u0233\7\64\2\2")\r
-        buf.write("\u0233\u023a\5P)\2\u0234\u0235\7\64\2\2\u0235\u0236\7")\r
-        buf.write("(\2\2\u0236\u0237\5<\37\2\u0237\u0238\7)\2\2\u0238\u023a")\r
-        buf.write("\3\2\2\2\u0239\u022a\3\2\2\2\u0239\u022b\3\2\2\2\u0239")\r
-        buf.write("\u022d\3\2\2\2\u0239\u022f\3\2\2\2\u0239\u0232\3\2\2\2")\r
-        buf.write("\u0239\u0234\3\2\2\2\u023aQ\3\2\2\2\u023b\u023c\5X-\2")\r
-        buf.write("\u023c\u025a\b*\1\2\u023d\u023e\7*\2\2\u023e\u023f\5\\")\r
-        buf.write("/\2\u023f\u0240\7+\2\2\u0240\u0259\3\2\2\2\u0241\u0242")\r
-        buf.write("\7(\2\2\u0242\u0243\7)\2\2\u0243\u0259\b*\1\2\u0244\u0245")\r
-        buf.write("\7(\2\2\u0245\u0246\5H%\2\u0246\u0247\7)\2\2\u0247\u0248")\r
-        buf.write("\b*\1\2\u0248\u0259\3\2\2\2\u0249\u024a\7(\2\2\u024a\u024b")\r
-        buf.write("\5T+\2\u024b\u024c\7)\2\2\u024c\u0259\3\2\2\2\u024d\u024e")\r
-        buf.write("\7\65\2\2\u024e\u024f\7_\2\2\u024f\u0259\b*\1\2\u0250")\r
-        buf.write("\u0251\7,\2\2\u0251\u0252\7_\2\2\u0252\u0259\b*\1\2\u0253")\r
-        buf.write("\u0254\7\66\2\2\u0254\u0255\7_\2\2\u0255\u0259\b*\1\2")\r
-        buf.write("\u0256\u0259\7\62\2\2\u0257\u0259\7\63\2\2\u0258\u023d")\r
-        buf.write("\3\2\2\2\u0258\u0241\3\2\2\2\u0258\u0244\3\2\2\2\u0258")\r
-        buf.write("\u0249\3\2\2\2\u0258\u024d\3\2\2\2\u0258\u0250\3\2\2\2")\r
-        buf.write("\u0258\u0253\3\2\2\2\u0258\u0256\3\2\2\2\u0258\u0257\3")\r
-        buf.write("\2\2\2\u0259\u025c\3\2\2\2\u025a\u0258\3\2\2\2\u025a\u025b")\r
-        buf.write("\3\2\2\2\u025bS\3\2\2\2\u025c\u025a\3\2\2\2\u025d\u0262")\r
-        buf.write("\58\35\2\u025e\u025f\7\6\2\2\u025f\u0261\58\35\2\u0260")\r
-        buf.write("\u025e\3\2\2\2\u0261\u0264\3\2\2\2\u0262\u0260\3\2\2\2")\r
-        buf.write("\u0262\u0263\3\2\2\2\u0263U\3\2\2\2\u0264\u0262\3\2\2")\r
-        buf.write("\2\u0265\u0266\t\5\2\2\u0266W\3\2\2\2\u0267\u026e\7_\2")\r
-        buf.write("\2\u0268\u026e\5Z.\2\u0269\u026a\7(\2\2\u026a\u026b\5")\r
-        buf.write("\\/\2\u026b\u026c\7)\2\2\u026c\u026e\3\2\2\2\u026d\u0267")\r
-        buf.write("\3\2\2\2\u026d\u0268\3\2\2\2\u026d\u0269\3\2\2\2\u026e")\r
-        buf.write("Y\3\2\2\2\u026f\u028a\7b\2\2\u0270\u028a\7d\2\2\u0271")\r
-        buf.write("\u028a\7c\2\2\u0272\u028a\7`\2\2\u0273\u0275\7_\2\2\u0274")\r
-        buf.write("\u0273\3\2\2\2\u0275\u0278\3\2\2\2\u0276\u0274\3\2\2\2")\r
-        buf.write("\u0276\u0277\3\2\2\2\u0277\u027a\3\2\2\2\u0278\u0276\3")\r
-        buf.write("\2\2\2\u0279\u027b\7a\2\2\u027a\u0279\3\2\2\2\u027b\u027c")\r
-        buf.write("\3\2\2\2\u027c\u027a\3\2\2\2\u027c\u027d\3\2\2\2\u027d")\r
-        buf.write("\u027f\3\2\2\2\u027e\u0276\3\2\2\2\u027f\u0280\3\2\2\2")\r
-        buf.write("\u0280\u027e\3\2\2\2\u0280\u0281\3\2\2\2\u0281\u0285\3")\r
-        buf.write("\2\2\2\u0282\u0284\7_\2\2\u0283\u0282\3\2\2\2\u0284\u0287")\r
-        buf.write("\3\2\2\2\u0285\u0283\3\2\2\2\u0285\u0286\3\2\2\2\u0286")\r
-        buf.write("\u028a\3\2\2\2\u0287\u0285\3\2\2\2\u0288\u028a\7e\2\2")\r
-        buf.write("\u0289\u026f\3\2\2\2\u0289\u0270\3\2\2\2\u0289\u0271\3")\r
-        buf.write("\2\2\2\u0289\u0272\3\2\2\2\u0289\u027e\3\2\2\2\u0289\u0288")\r
-        buf.write("\3\2\2\2\u028a[\3\2\2\2\u028b\u0290\5`\61\2\u028c\u028d")\r
-        buf.write("\7\6\2\2\u028d\u028f\5`\61\2\u028e\u028c\3\2\2\2\u028f")\r
-        buf.write("\u0292\3\2\2\2\u0290\u028e\3\2\2\2\u0290\u0291\3\2\2\2")\r
-        buf.write("\u0291]\3\2\2\2\u0292\u0290\3\2\2\2\u0293\u0294\5f\64")\r
-        buf.write("\2\u0294_\3\2\2\2\u0295\u0296\5b\62\2\u0296\u0297\5d\63")\r
-        buf.write("\2\u0297\u0298\5`\61\2\u0298\u029b\3\2\2\2\u0299\u029b")\r
-        buf.write("\5f\64\2\u029a\u0295\3\2\2\2\u029a\u0299\3\2\2\2\u029b")\r
-        buf.write("a\3\2\2\2\u029c\u029d\5P)\2\u029dc\3\2\2\2\u029e\u029f")\r
-        buf.write("\t\6\2\2\u029fe\3\2\2\2\u02a0\u02a7\5h\65\2\u02a1\u02a2")\r
-        buf.write("\7D\2\2\u02a2\u02a3\5\\/\2\u02a3\u02a4\7\31\2\2\u02a4")\r
-        buf.write("\u02a5\5f\64\2\u02a5\u02a6\b\64\1\2\u02a6\u02a8\3\2\2")\r
-        buf.write("\2\u02a7\u02a1\3\2\2\2\u02a7\u02a8\3\2\2\2\u02a8g\3\2")\r
-        buf.write("\2\2\u02a9\u02ae\5j\66\2\u02aa\u02ab\7E\2\2\u02ab\u02ad")\r
-        buf.write("\5j\66\2\u02ac\u02aa\3\2\2\2\u02ad\u02b0\3\2\2\2\u02ae")\r
-        buf.write("\u02ac\3\2\2\2\u02ae\u02af\3\2\2\2\u02afi\3\2\2\2\u02b0")\r
-        buf.write("\u02ae\3\2\2\2\u02b1\u02b6\5l\67\2\u02b2\u02b3\7F\2\2")\r
-        buf.write("\u02b3\u02b5\5l\67\2\u02b4\u02b2\3\2\2\2\u02b5\u02b8\3")\r
-        buf.write("\2\2\2\u02b6\u02b4\3\2\2\2\u02b6\u02b7\3\2\2\2\u02b7k")\r
-        buf.write("\3\2\2\2\u02b8\u02b6\3\2\2\2\u02b9\u02be\5n8\2\u02ba\u02bb")\r
-        buf.write("\7G\2\2\u02bb\u02bd\5n8\2\u02bc\u02ba\3\2\2\2\u02bd\u02c0")\r
-        buf.write("\3\2\2\2\u02be\u02bc\3\2\2\2\u02be\u02bf\3\2\2\2\u02bf")\r
-        buf.write("m\3\2\2\2\u02c0\u02be\3\2\2\2\u02c1\u02c6\5p9\2\u02c2")\r
-        buf.write("\u02c3\7H\2\2\u02c3\u02c5\5p9\2\u02c4\u02c2\3\2\2\2\u02c5")\r
-        buf.write("\u02c8\3\2\2\2\u02c6\u02c4\3\2\2\2\u02c6\u02c7\3\2\2\2")\r
-        buf.write("\u02c7o\3\2\2\2\u02c8\u02c6\3\2\2\2\u02c9\u02ce\5r:\2")\r
-        buf.write("\u02ca\u02cb\7\67\2\2\u02cb\u02cd\5r:\2\u02cc\u02ca\3")\r
-        buf.write("\2\2\2\u02cd\u02d0\3\2\2\2\u02ce\u02cc\3\2\2\2\u02ce\u02cf")\r
-        buf.write("\3\2\2\2\u02cfq\3\2\2\2\u02d0\u02ce\3\2\2\2\u02d1\u02d6")\r
-        buf.write("\5t;\2\u02d2\u02d3\t\7\2\2\u02d3\u02d5\5t;\2\u02d4\u02d2")\r
-        buf.write("\3\2\2\2\u02d5\u02d8\3\2\2\2\u02d6\u02d4\3\2\2\2\u02d6")\r
-        buf.write("\u02d7\3\2\2\2\u02d7s\3\2\2\2\u02d8\u02d6\3\2\2\2\u02d9")\r
-        buf.write("\u02de\5v<\2\u02da\u02db\t\b\2\2\u02db\u02dd\5v<\2\u02dc")\r
-        buf.write("\u02da\3\2\2\2\u02dd\u02e0\3\2\2\2\u02de\u02dc\3\2\2\2")\r
-        buf.write("\u02de\u02df\3\2\2\2\u02dfu\3\2\2\2\u02e0\u02de\3\2\2")\r
-        buf.write("\2\u02e1\u02e6\5J&\2\u02e2\u02e3\t\t\2\2\u02e3\u02e5\5")\r
-        buf.write("J&\2\u02e4\u02e2\3\2\2\2\u02e5\u02e8\3\2\2\2\u02e6\u02e4")\r
-        buf.write("\3\2\2\2\u02e6\u02e7\3\2\2\2\u02e7w\3\2\2\2\u02e8\u02e6")\r
-        buf.write("\3\2\2\2\u02e9\u02f5\5\u0082B\2\u02ea\u02f5\5\u0084C\2")\r
-        buf.write("\u02eb\u02f5\5\u0088E\2\u02ec\u02f5\5\u008aF\2\u02ed\u02f5")\r
-        buf.write("\5\u008cG\2\u02ee\u02f5\5\u008eH\2\u02ef\u02f5\5\u0080")\r
-        buf.write("A\2\u02f0\u02f5\5z>\2\u02f1\u02f5\5|?\2\u02f2\u02f5\5")\r
-        buf.write("~@\2\u02f3\u02f5\5\n\6\2\u02f4\u02e9\3\2\2\2\u02f4\u02ea")\r
-        buf.write("\3\2\2\2\u02f4\u02eb\3\2\2\2\u02f4\u02ec\3\2\2\2\u02f4")\r
-        buf.write("\u02ed\3\2\2\2\u02f4\u02ee\3\2\2\2\u02f4\u02ef\3\2\2\2")\r
-        buf.write("\u02f4\u02f0\3\2\2\2\u02f4\u02f1\3\2\2\2\u02f4\u02f2\3")\r
-        buf.write("\2\2\2\u02f4\u02f3\3\2\2\2\u02f5y\3\2\2\2\u02f6\u02f8")\r
-        buf.write("\7Q\2\2\u02f7\u02f6\3\2\2\2\u02f7\u02f8\3\2\2\2\u02f8")\r
-        buf.write("\u02f9\3\2\2\2\u02f9\u02fa\7_\2\2\u02fa\u02fe\7(\2\2\u02fb")\r
-        buf.write("\u02fd\n\n\2\2\u02fc\u02fb\3\2\2\2\u02fd\u0300\3\2\2\2")\r
-        buf.write("\u02fe\u02fc\3\2\2\2\u02fe\u02ff\3\2\2\2\u02ff\u0301\3")\r
-        buf.write("\2\2\2\u0300\u02fe\3\2\2\2\u0301\u0302\7)\2\2\u0302\u0303")\r
-        buf.write("\7\4\2\2\u0303{\3\2\2\2\u0304\u0305\7R\2\2\u0305\u0309")\r
-        buf.write("\7\3\2\2\u0306\u0308\n\13\2\2\u0307\u0306\3\2\2\2\u0308")\r
-        buf.write("\u030b\3\2\2\2\u0309\u0307\3\2\2\2\u0309\u030a\3\2\2\2")\r
-        buf.write("\u030a\u030c\3\2\2\2\u030b\u0309\3\2\2\2\u030c\u030d\7")\r
-        buf.write("\26\2\2\u030d}\3\2\2\2\u030e\u030f\7S\2\2\u030f\u0313")\r
-        buf.write("\7\3\2\2\u0310\u0312\n\13\2\2\u0311\u0310\3\2\2\2\u0312")\r
-        buf.write("\u0315\3\2\2\2\u0313\u0311\3\2\2\2\u0313\u0314\3\2\2\2")\r
-        buf.write("\u0314\u0316\3\2\2\2\u0315\u0313\3\2\2\2\u0316\u0317\7")\r
-        buf.write("\26\2\2\u0317\177\3\2\2\2\u0318\u0319\7_\2\2\u0319\u031d")\r
-        buf.write("\7(\2\2\u031a\u031c\5\n\6\2\u031b\u031a\3\2\2\2\u031c")\r
-        buf.write("\u031f\3\2\2\2\u031d\u031b\3\2\2\2\u031d\u031e\3\2\2\2")\r
-        buf.write("\u031e\u0321\3\2\2\2\u031f\u031d\3\2\2\2\u0320\u0322\5")\r
-        buf.write("\u0086D\2\u0321\u0320\3\2\2\2\u0321\u0322\3\2\2\2\u0322")\r
-        buf.write("\u0324\3\2\2\2\u0323\u0325\5\\/\2\u0324\u0323\3\2\2\2")\r
-        buf.write("\u0324\u0325\3\2\2\2\u0325\u0326\3\2\2\2\u0326\u0327\7")\r
-        buf.write(")\2\2\u0327\u0081\3\2\2\2\u0328\u0329\7_\2\2\u0329\u032a")\r
-        buf.write("\7\31\2\2\u032a\u0334\5x=\2\u032b\u032c\7T\2\2\u032c\u032d")\r
-        buf.write("\5^\60\2\u032d\u032e\7\31\2\2\u032e\u032f\5x=\2\u032f")\r
-        buf.write("\u0334\3\2\2\2\u0330\u0331\7U\2\2\u0331\u0332\7\31\2\2")\r
-        buf.write("\u0332\u0334\5x=\2\u0333\u0328\3\2\2\2\u0333\u032b\3\2")\r
-        buf.write("\2\2\u0333\u0330\3\2\2\2\u0334\u0083\3\2\2\2\u0335\u0339")\r
-        buf.write("\7\3\2\2\u0336\u0338\5\n\6\2\u0337\u0336\3\2\2\2\u0338")\r
-        buf.write("\u033b\3\2\2\2\u0339\u0337\3\2\2\2\u0339\u033a\3\2\2\2")\r
-        buf.write("\u033a\u033d\3\2\2\2\u033b\u0339\3\2\2\2\u033c\u033e\5")\r
-        buf.write("\u0086D\2\u033d\u033c\3\2\2\2\u033d\u033e\3\2\2\2\u033e")\r
-        buf.write("\u033f\3\2\2\2\u033f\u0340\7\26\2\2\u0340\u0085\3\2\2")\r
-        buf.write("\2\u0341\u0343\5x=\2\u0342\u0341\3\2\2\2\u0343\u0344\3")\r
-        buf.write("\2\2\2\u0344\u0342\3\2\2\2\u0344\u0345\3\2\2\2\u0345\u0087")\r
-        buf.write("\3\2\2\2\u0346\u034b\7\4\2\2\u0347\u0348\5\\/\2\u0348")\r
-        buf.write("\u0349\7\4\2\2\u0349\u034b\3\2\2\2\u034a\u0346\3\2\2\2")\r
-        buf.write("\u034a\u0347\3\2\2\2\u034b\u0089\3\2\2\2\u034c\u034d\7")\r
-        buf.write("V\2\2\u034d\u034e\7(\2\2\u034e\u034f\5\\/\2\u034f\u0350")\r
-        buf.write("\7)\2\2\u0350\u0351\bF\1\2\u0351\u0354\5x=\2\u0352\u0353")\r
-        buf.write("\7W\2\2\u0353\u0355\5x=\2\u0354\u0352\3\2\2\2\u0354\u0355")\r
-        buf.write("\3\2\2\2\u0355\u035d\3\2\2\2\u0356\u0357\7X\2\2\u0357")\r
-        buf.write("\u0358\7(\2\2\u0358\u0359\5\\/\2\u0359\u035a\7)\2\2\u035a")\r
-        buf.write("\u035b\5x=\2\u035b\u035d\3\2\2\2\u035c\u034c\3\2\2\2\u035c")\r
-        buf.write("\u0356\3\2\2\2\u035d\u008b\3\2\2\2\u035e\u035f\7Y\2\2")\r
-        buf.write("\u035f\u0360\7(\2\2\u0360\u0361\5\\/\2\u0361\u0362\7)")\r
-        buf.write("\2\2\u0362\u0363\5x=\2\u0363\u0364\bG\1\2\u0364\u036f")\r
-        buf.write("\3\2\2\2\u0365\u0366\7Z\2\2\u0366\u0367\5x=\2\u0367\u0368")\r
-        buf.write("\7Y\2\2\u0368\u0369\7(\2\2\u0369\u036a\5\\/\2\u036a\u036b")\r
-        buf.write("\7)\2\2\u036b\u036c\7\4\2\2\u036c\u036d\bG\1\2\u036d\u036f")\r
-        buf.write("\3\2\2\2\u036e\u035e\3\2\2\2\u036e\u0365\3\2\2\2\u036f")\r
-        buf.write("\u008d\3\2\2\2\u0370\u0371\7[\2\2\u0371\u0372\7_\2\2\u0372")\r
-        buf.write("\u037e\7\4\2\2\u0373\u0374\7\\\2\2\u0374\u037e\7\4\2\2")\r
-        buf.write("\u0375\u0376\7]\2\2\u0376\u037e\7\4\2\2\u0377\u0378\7")\r
-        buf.write("^\2\2\u0378\u037e\7\4\2\2\u0379\u037a\7^\2\2\u037a\u037b")\r
-        buf.write("\5\\/\2\u037b\u037c\7\4\2\2\u037c\u037e\3\2\2\2\u037d")\r
-        buf.write("\u0370\3\2\2\2\u037d\u0373\3\2\2\2\u037d\u0375\3\2\2\2")\r
-        buf.write("\u037d\u0377\3\2\2\2\u037d\u0379\3\2\2\2\u037e\u008f\3")\r
-        buf.write("\2\2\2o\u0093\u0097\u009d\u00a6\u00a8\u00ab\u00b1\u00b6")\r
-        buf.write("\u00bd\u00bf\u00c3\u00cb\u00d0\u00d7\u00dd\u00f4\u00f9")\r
-        buf.write("\u00ff\u0108\u010f\u0117\u0119\u0120\u0126\u012a\u0130")\r
-        buf.write("\u0139\u013f\u0146\u014c\u0151\u0154\u0157\u015a\u015e")\r
-        buf.write("\u0164\u0169\u0170\u0172\u0184\u018a\u018d\u0192\u0197")\r
-        buf.write("\u019a\u019f\u01a4\u01aa\u01ac\u01b0\u01b5\u01b9\u01c0")\r
-        buf.write("\u01c5\u01c8\u01cc\u01cf\u01d6\u01db\u01ea\u01f0\u01f4")\r
-        buf.write("\u01fb\u0200\u0205\u0209\u0211\u0213\u021d\u021f\u0228")\r
-        buf.write("\u0239\u0258\u025a\u0262\u026d\u0276\u027c\u0280\u0285")\r
-        buf.write("\u0289\u0290\u029a\u02a7\u02ae\u02b6\u02be\u02c6\u02ce")\r
-        buf.write("\u02d6\u02de\u02e6\u02f4\u02f7\u02fe\u0309\u0313\u031d")\r
-        buf.write("\u0321\u0324\u0333\u0339\u033d\u0344\u034a\u0354\u035c")\r
-        buf.write("\u036e\u037d")\r
-        return buf.getvalue()\r
-\r
-\r
-class CParser ( Parser ):\r
-\r
-    grammarFileName = "C.g4"\r
-\r
-    atn = ATNDeserializer().deserialize(serializedATN())\r
-\r
-    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]\r
-\r
-    sharedContextCache = PredictionContextCache()\r
-\r
-    literalNames = [ "<INVALID>", "'{'", "';'", "'typedef'", "','", "'='", \r
-                     "'extern'", "'static'", "'auto'", "'register'", "'STATIC'", \r
-                     "'void'", "'char'", "'short'", "'int'", "'long'", "'float'", \r
-                     "'double'", "'signed'", "'unsigned'", "'}'", "'struct'", \r
-                     "'union'", "':'", "'enum'", "'const'", "'volatile'", \r
-                     "'IN'", "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'", \r
-                     "'VOLATILE'", "'GLOBAL_REMOVE_IF_UNREFERENCED'", "'EFIAPI'", \r
-                     "'EFI_BOOTSERVICE'", "'EFI_RUNTIMESERVICE'", "'PACKED'", \r
-                     "'('", "')'", "'['", "']'", "'*'", "'...'", "'+'", \r
-                     "'-'", "'/'", "'%'", "'++'", "'--'", "'sizeof'", "'.'", \r
-                     "'->'", "'&'", "'~'", "'!'", "'*='", "'/='", "'%='", \r
-                     "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='", \r
-                     "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", \r
-                     "'<'", "'>'", "'<='", "'>='", "'<<'", "'>>'", "'__asm__'", \r
-                     "'_asm'", "'__asm'", "'case'", "'default'", "'if'", \r
-                     "'else'", "'switch'", "'while'", "'do'", "'goto'", \r
-                     "'continue'", "'break'", "'return'" ]\r
-\r
-    symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", \r
-                      "<INVALID>", "IDENTIFIER", "CHARACTER_LITERAL", "STRING_LITERAL", \r
-                      "HEX_LITERAL", "DECIMAL_LITERAL", "OCTAL_LITERAL", \r
-                      "FLOATING_POINT_LITERAL", "WS", "BS", "UnicodeVocabulary", \r
-                      "COMMENT", "LINE_COMMENT", "LINE_COMMAND" ]\r
-\r
-    RULE_translation_unit = 0\r
-    RULE_external_declaration = 1\r
-    RULE_function_definition = 2\r
-    RULE_declaration_specifiers = 3\r
-    RULE_declaration = 4\r
-    RULE_init_declarator_list = 5\r
-    RULE_init_declarator = 6\r
-    RULE_storage_class_specifier = 7\r
-    RULE_type_specifier = 8\r
-    RULE_type_id = 9\r
-    RULE_struct_or_union_specifier = 10\r
-    RULE_struct_or_union = 11\r
-    RULE_struct_declaration_list = 12\r
-    RULE_struct_declaration = 13\r
-    RULE_specifier_qualifier_list = 14\r
-    RULE_struct_declarator_list = 15\r
-    RULE_struct_declarator = 16\r
-    RULE_enum_specifier = 17\r
-    RULE_enumerator_list = 18\r
-    RULE_enumerator = 19\r
-    RULE_type_qualifier = 20\r
-    RULE_declarator = 21\r
-    RULE_direct_declarator = 22\r
-    RULE_declarator_suffix = 23\r
-    RULE_pointer = 24\r
-    RULE_parameter_type_list = 25\r
-    RULE_parameter_list = 26\r
-    RULE_parameter_declaration = 27\r
-    RULE_identifier_list = 28\r
-    RULE_type_name = 29\r
-    RULE_abstract_declarator = 30\r
-    RULE_direct_abstract_declarator = 31\r
-    RULE_abstract_declarator_suffix = 32\r
-    RULE_initializer = 33\r
-    RULE_initializer_list = 34\r
-    RULE_argument_expression_list = 35\r
-    RULE_additive_expression = 36\r
-    RULE_multiplicative_expression = 37\r
-    RULE_cast_expression = 38\r
-    RULE_unary_expression = 39\r
-    RULE_postfix_expression = 40\r
-    RULE_macro_parameter_list = 41\r
-    RULE_unary_operator = 42\r
-    RULE_primary_expression = 43\r
-    RULE_constant = 44\r
-    RULE_expression = 45\r
-    RULE_constant_expression = 46\r
-    RULE_assignment_expression = 47\r
-    RULE_lvalue = 48\r
-    RULE_assignment_operator = 49\r
-    RULE_conditional_expression = 50\r
-    RULE_logical_or_expression = 51\r
-    RULE_logical_and_expression = 52\r
-    RULE_inclusive_or_expression = 53\r
-    RULE_exclusive_or_expression = 54\r
-    RULE_and_expression = 55\r
-    RULE_equality_expression = 56\r
-    RULE_relational_expression = 57\r
-    RULE_shift_expression = 58\r
-    RULE_statement = 59\r
-    RULE_asm2_statement = 60\r
-    RULE_asm1_statement = 61\r
-    RULE_asm_statement = 62\r
-    RULE_macro_statement = 63\r
-    RULE_labeled_statement = 64\r
-    RULE_compound_statement = 65\r
-    RULE_statement_list = 66\r
-    RULE_expression_statement = 67\r
-    RULE_selection_statement = 68\r
-    RULE_iteration_statement = 69\r
-    RULE_jump_statement = 70\r
-\r
-    ruleNames =  [ "translation_unit", "external_declaration", "function_definition", \r
-                   "declaration_specifiers", "declaration", "init_declarator_list", \r
-                   "init_declarator", "storage_class_specifier", "type_specifier", \r
-                   "type_id", "struct_or_union_specifier", "struct_or_union", \r
-                   "struct_declaration_list", "struct_declaration", "specifier_qualifier_list", \r
-                   "struct_declarator_list", "struct_declarator", "enum_specifier", \r
-                   "enumerator_list", "enumerator", "type_qualifier", "declarator", \r
-                   "direct_declarator", "declarator_suffix", "pointer", \r
-                   "parameter_type_list", "parameter_list", "parameter_declaration", \r
-                   "identifier_list", "type_name", "abstract_declarator", \r
-                   "direct_abstract_declarator", "abstract_declarator_suffix", \r
-                   "initializer", "initializer_list", "argument_expression_list", \r
-                   "additive_expression", "multiplicative_expression", "cast_expression", \r
-                   "unary_expression", "postfix_expression", "macro_parameter_list", \r
-                   "unary_operator", "primary_expression", "constant", "expression", \r
-                   "constant_expression", "assignment_expression", "lvalue", \r
-                   "assignment_operator", "conditional_expression", "logical_or_expression", \r
-                   "logical_and_expression", "inclusive_or_expression", \r
-                   "exclusive_or_expression", "and_expression", "equality_expression", \r
-                   "relational_expression", "shift_expression", "statement", \r
-                   "asm2_statement", "asm1_statement", "asm_statement", \r
-                   "macro_statement", "labeled_statement", "compound_statement", \r
-                   "statement_list", "expression_statement", "selection_statement", \r
-                   "iteration_statement", "jump_statement" ]\r
-\r
-    EOF = Token.EOF\r
-    T__0=1\r
-    T__1=2\r
-    T__2=3\r
-    T__3=4\r
-    T__4=5\r
-    T__5=6\r
-    T__6=7\r
-    T__7=8\r
-    T__8=9\r
-    T__9=10\r
-    T__10=11\r
-    T__11=12\r
-    T__12=13\r
-    T__13=14\r
-    T__14=15\r
-    T__15=16\r
-    T__16=17\r
-    T__17=18\r
-    T__18=19\r
-    T__19=20\r
-    T__20=21\r
-    T__21=22\r
-    T__22=23\r
-    T__23=24\r
-    T__24=25\r
-    T__25=26\r
-    T__26=27\r
-    T__27=28\r
-    T__28=29\r
-    T__29=30\r
-    T__30=31\r
-    T__31=32\r
-    T__32=33\r
-    T__33=34\r
-    T__34=35\r
-    T__35=36\r
-    T__36=37\r
-    T__37=38\r
-    T__38=39\r
-    T__39=40\r
-    T__40=41\r
-    T__41=42\r
-    T__42=43\r
-    T__43=44\r
-    T__44=45\r
-    T__45=46\r
-    T__46=47\r
-    T__47=48\r
-    T__48=49\r
-    T__49=50\r
-    T__50=51\r
-    T__51=52\r
-    T__52=53\r
-    T__53=54\r
-    T__54=55\r
-    T__55=56\r
-    T__56=57\r
-    T__57=58\r
-    T__58=59\r
-    T__59=60\r
-    T__60=61\r
-    T__61=62\r
-    T__62=63\r
-    T__63=64\r
-    T__64=65\r
-    T__65=66\r
-    T__66=67\r
-    T__67=68\r
-    T__68=69\r
-    T__69=70\r
-    T__70=71\r
-    T__71=72\r
-    T__72=73\r
-    T__73=74\r
-    T__74=75\r
-    T__75=76\r
-    T__76=77\r
-    T__77=78\r
-    T__78=79\r
-    T__79=80\r
-    T__80=81\r
-    T__81=82\r
-    T__82=83\r
-    T__83=84\r
-    T__84=85\r
-    T__85=86\r
-    T__86=87\r
-    T__87=88\r
-    T__88=89\r
-    T__89=90\r
-    T__90=91\r
-    T__91=92\r
-    IDENTIFIER=93\r
-    CHARACTER_LITERAL=94\r
-    STRING_LITERAL=95\r
-    HEX_LITERAL=96\r
-    DECIMAL_LITERAL=97\r
-    OCTAL_LITERAL=98\r
-    FLOATING_POINT_LITERAL=99\r
-    WS=100\r
-    BS=101\r
-    UnicodeVocabulary=102\r
-    COMMENT=103\r
-    LINE_COMMENT=104\r
-    LINE_COMMAND=105\r
-\r
-    def __init__(self, input:TokenStream, output:TextIO = sys.stdout):\r
-        super().__init__(input, output)\r
-        self.checkVersion("4.7.1")\r
-        self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache)\r
-        self._predicates = None\r
-\r
-\r
-\r
-            \r
+from . import CodeFragment\r
+from . import FileProfile\r
+\r
+\r
+\r
+# for convenience in actions\r
+HIDDEN = BaseRecognizer.HIDDEN\r
+\r
+# token types\r
+BS=20\r
+LINE_COMMENT=23\r
+FloatTypeSuffix=16\r
+IntegerTypeSuffix=14\r
+LETTER=11\r
+OCTAL_LITERAL=6\r
+CHARACTER_LITERAL=8\r
+Exponent=15\r
+EOF=-1\r
+HexDigit=13\r
+STRING_LITERAL=9\r
+WS=19\r
+FLOATING_POINT_LITERAL=10\r
+IDENTIFIER=4\r
+UnicodeEscape=18\r
+LINE_COMMAND=24\r
+UnicodeVocabulary=21\r
+HEX_LITERAL=5\r
+COMMENT=22\r
+DECIMAL_LITERAL=7\r
+EscapeSequence=12\r
+OctalEscape=17\r
+\r
+# token names\r
+tokenNames = [\r
+    "<invalid>", "<EOR>", "<DOWN>", "<UP>",\r
+    "IDENTIFIER", "HEX_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", "CHARACTER_LITERAL",\r
+    "STRING_LITERAL", "FLOATING_POINT_LITERAL", "LETTER", "EscapeSequence",\r
+    "HexDigit", "IntegerTypeSuffix", "Exponent", "FloatTypeSuffix", "OctalEscape",\r
+    "UnicodeEscape", "WS", "BS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT",\r
+    "LINE_COMMAND", "';'", "'typedef'", "','", "'='", "'extern'", "'static'",\r
+    "'auto'", "'register'", "'STATIC'", "'void'", "'char'", "'short'", "'int'",\r
+    "'long'", "'float'", "'double'", "'signed'", "'unsigned'", "'{'", "'}'",\r
+    "'struct'", "'union'", "':'", "'enum'", "'const'", "'volatile'", "'IN'",\r
+    "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'", "'VOLATILE'", "'GLOBAL_REMOVE_IF_UNREFERENCED'",\r
+    "'EFIAPI'", "'EFI_BOOTSERVICE'", "'EFI_RUNTIMESERVICE'", "'PACKED'",\r
+    "'('", "')'", "'['", "']'", "'*'", "'...'", "'+'", "'-'", "'/'", "'%'",\r
+    "'++'", "'--'", "'sizeof'", "'.'", "'->'", "'&'", "'~'", "'!'", "'*='",\r
+    "'/='", "'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='",\r
+    "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'<'", "'>'", "'<='",\r
+    "'>='", "'<<'", "'>>'", "'__asm__'", "'_asm'", "'__asm'", "'case'",\r
+    "'default'", "'if'", "'else'", "'switch'", "'while'", "'do'", "'for'",\r
+    "'goto'", "'continue'", "'break'", "'return'"\r
+]\r
+\r
+\r
+class function_definition_scope(object):\r
+    def __init__(self):\r
+        self.ModifierText = None\r
+        self.DeclText = None\r
+        self.LBLine = None\r
+        self.LBOffset = None\r
+        self.DeclLine = None\r
+        self.DeclOffset = None\r
+class postfix_expression_scope(object):\r
+    def __init__(self):\r
+        self.FuncCallText = None\r
+\r
+\r
+class CParser(Parser):\r
+    grammarFileName = "C.g"\r
+    tokenNames = tokenNames\r
+\r
+    def __init__(self, input):\r
+        Parser.__init__(self, input)\r
+        self.ruleMemo = {}\r
+\r
+        self.function_definition_stack = []\r
+        self.postfix_expression_stack = []\r
+\r
     def printTokenInfo(self, line, offset, tokenText):\r
         print(str(line)+ ',' + str(offset) + ':' + str(tokenText))\r
-        \r
+\r
     def StorePredicateExpression(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.PredicateExpressionList.append(PredExp)\r
-        \r
+      PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.PredicateExpressionList.append(PredExp)\r
+\r
     def StoreEnumerationDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.EnumerationDefinitionList.append(EnumDef)\r
-        \r
+      EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.EnumerationDefinitionList.append(EnumDef)\r
+\r
     def StoreStructUnionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
-        SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.StructUnionDefinitionList.append(SUDef)\r
-        \r
+      SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.StructUnionDefinitionList.append(SUDef)\r
+\r
     def StoreTypedefDefinition(self, StartLine, StartOffset, EndLine, EndOffset, FromText, ToText):\r
-        Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.TypedefDefinitionList.append(Tdef)\r
+      Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.TypedefDefinitionList.append(Tdef)\r
 \r
     def StoreFunctionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText, LeftBraceLine, LeftBraceOffset, DeclLine, DeclOffset):\r
-        FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))\r
-        FileProfile.FunctionDefinitionList.append(FuncDef)\r
-        \r
+      FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))\r
+      FileProfile.FunctionDefinitionList.append(FuncDef)\r
+\r
     def StoreVariableDeclaration(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText):\r
-        VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.VariableDeclarationList.append(VarDecl)\r
+      VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.VariableDeclarationList.append(VarDecl)\r
 \r
     def StoreFunctionCalling(self, StartLine, StartOffset, EndLine, EndOffset, FuncName, ParamList):\r
-        FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))\r
-        FileProfile.FunctionCallingList.append(FuncCall)\r
+      FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))\r
+      FileProfile.FunctionCallingList.append(FuncCall)\r
 \r
 \r
 \r
-    class Translation_unitContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR start translation_unit\r
+    # C.g:102:1: translation_unit : ( external_declaration )* ;\r
+    def translation_unit(self, ):\r
 \r
-        def external_declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.External_declarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.External_declarationContext,i)\r
+        translation_unit_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 1):\r
+                    return\r
 \r
+                # C.g:103:2: ( ( external_declaration )* )\r
+                # C.g:103:4: ( external_declaration )*\r
+                # C.g:103:4: ( external_declaration )*\r
+                while True: #loop1\r
+                    alt1 = 2\r
+                    LA1_0 = self.input.LA(1)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_translation_unit\r
+                    if (LA1_0 == IDENTIFIER or LA1_0 == 26 or (29 <= LA1_0 <= 42) or (45 <= LA1_0 <= 46) or (48 <= LA1_0 <= 62) or LA1_0 == 66) :\r
+                        alt1 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterTranslation_unit" ):\r
-                listener.enterTranslation_unit(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitTranslation_unit" ):\r
-                listener.exitTranslation_unit(self)\r
+                    if alt1 == 1:\r
+                        # C.g:0:0: external_declaration\r
+                        self.following.append(self.FOLLOW_external_declaration_in_translation_unit74)\r
+                        self.external_declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
 \r
 \r
+                    else:\r
+                        break #loop1\r
 \r
 \r
-    def translation_unit(self):\r
 \r
-        localctx = CParser.Translation_unitContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 0, self.RULE_translation_unit)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 145\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__2) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36) | (1 << CParser.T__37) | (1 << CParser.T__41))) != 0) or _la==CParser.IDENTIFIER:\r
-                self.state = 142\r
-                self.external_declaration()\r
-                self.state = 147\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 1, translation_unit_StartIndex)\r
+\r
+            pass\r
 \r
-    class External_declarationContext(ParserRuleContext):\r
+        return\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end translation_unit\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
 \r
+    # $ANTLR start external_declaration\r
+    # C.g:114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );\r
+    def external_declaration(self, ):\r
 \r
-        def declaration_specifiers(self):\r
-            return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)\r
+        external_declaration_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 2):\r
+                    return\r
 \r
+                # C.g:119:2: ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? )\r
+                alt3 = 3\r
+                LA3_0 = self.input.LA(1)\r
 \r
-        def declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclarationContext,i)\r
+                if ((29 <= LA3_0 <= 33)) :\r
+                    LA3_1 = self.input.LA(2)\r
 \r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
-        def function_definition(self):\r
-            return self.getTypedRuleContext(CParser.Function_definitionContext,0)\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 1, self.input)\r
 \r
+                        raise nvae\r
 \r
-        def macro_statement(self):\r
-            return self.getTypedRuleContext(CParser.Macro_statementContext,0)\r
+                elif (LA3_0 == 34) :\r
+                    LA3_2 = self.input.LA(2)\r
 \r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_external_declaration\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 2, self.input)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterExternal_declaration" ):\r
-                listener.enterExternal_declaration(self)\r
+                        raise nvae\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitExternal_declaration" ):\r
-                listener.exitExternal_declaration(self)\r
+                elif (LA3_0 == 35) :\r
+                    LA3_3 = self.input.LA(2)\r
 \r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 3, self.input)\r
 \r
+                        raise nvae\r
 \r
-    def external_declaration(self):\r
+                elif (LA3_0 == 36) :\r
+                    LA3_4 = self.input.LA(2)\r
 \r
-        localctx = CParser.External_declarationContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 2, self.RULE_external_declaration)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 166\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,4,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 149\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,1,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 148\r
-                    self.declaration_specifiers()\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 4, self.input)\r
 \r
-                self.state = 151\r
-                self.declarator()\r
-                self.state = 155\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__2) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36))) != 0) or _la==CParser.IDENTIFIER:\r
-                    self.state = 152\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 37) :\r
+                    LA3_5 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 5, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 38) :\r
+                    LA3_6 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 6, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 39) :\r
+                    LA3_7 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 7, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 40) :\r
+                    LA3_8 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 8, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 41) :\r
+                    LA3_9 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 9, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 42) :\r
+                    LA3_10 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 10, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif ((45 <= LA3_0 <= 46)) :\r
+                    LA3_11 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 11, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 48) :\r
+                    LA3_12 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 12, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == IDENTIFIER) :\r
+                    LA3_13 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    elif (True) :\r
+                        alt3 = 3\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 13, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 58) :\r
+                    LA3_14 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 14, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 66) and (self.synpred4()):\r
+                    alt3 = 1\r
+                elif (LA3_0 == 59) :\r
+                    LA3_16 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 16, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 60) :\r
+                    LA3_17 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 17, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif ((49 <= LA3_0 <= 57) or LA3_0 == 61) :\r
+                    LA3_18 = self.input.LA(2)\r
+\r
+                    if (self.synpred4()) :\r
+                        alt3 = 1\r
+                    elif (self.synpred5()) :\r
+                        alt3 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 18, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA3_0 == 62) and (self.synpred4()):\r
+                    alt3 = 1\r
+                elif (LA3_0 == 26) :\r
+                    alt3 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt3 == 1:\r
+                    # C.g:119:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition\r
+                    self.following.append(self.FOLLOW_function_definition_in_external_declaration113)\r
+                    self.function_definition()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt3 == 2:\r
+                    # C.g:120:4: declaration\r
+                    self.following.append(self.FOLLOW_declaration_in_external_declaration118)\r
                     self.declaration()\r
-                    self.state = 157\r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
-\r
-                self.state = 158\r
-                self.match(CParser.T__0)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 160\r
-                self.function_definition()\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 161\r
-                self.declaration()\r
-                pass\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
 \r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 162\r
-                self.macro_statement()\r
-                self.state = 164\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__1:\r
-                    self.state = 163\r
-                    self.match(CParser.T__1)\r
 \r
+                elif alt3 == 3:\r
+                    # C.g:121:4: macro_statement ( ';' )?\r
+                    self.following.append(self.FOLLOW_macro_statement_in_external_declaration123)\r
+                    self.macro_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:121:20: ( ';' )?\r
+                    alt2 = 2\r
+                    LA2_0 = self.input.LA(1)\r
 \r
-                pass\r
+                    if (LA2_0 == 25) :\r
+                        alt2 = 1\r
+                    if alt2 == 1:\r
+                        # C.g:121:21: ';'\r
+                        self.match(self.input, 25, self.FOLLOW_25_in_external_declaration126)\r
+                        if self.failed:\r
+                            return\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 2, external_declaration_StartIndex)\r
 \r
-    class Function_definitionContext(ParserRuleContext):\r
+            pass\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.ModifierText = ''\r
-            self.DeclText = ''\r
-            self.LBLine = 0\r
-            self.LBOffset = 0\r
-            self.DeclLine = 0\r
-            self.DeclOffset = 0\r
-            self.d = None # Declaration_specifiersContext\r
-            self._declaration_specifiers = None # Declaration_specifiersContext\r
-            self._declarator = None # DeclaratorContext\r
-            self.a = None # Compound_statementContext\r
-            self.b = None # Compound_statementContext\r
+        return\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
+    # $ANTLR end external_declaration\r
 \r
+    class function_definition_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
 \r
-        def compound_statement(self):\r
-            return self.getTypedRuleContext(CParser.Compound_statementContext,0)\r
 \r
 \r
-        def declaration_specifiers(self):\r
-            return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)\r
+    # $ANTLR start function_definition\r
+    # C.g:126:1: function_definition : (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ;\r
+    def function_definition(self, ):\r
+        self.function_definition_stack.append(function_definition_scope())\r
+        retval = self.function_definition_return()\r
+        retval.start = self.input.LT(1)\r
+        function_definition_StartIndex = self.input.index()\r
+        d = None\r
 \r
+        a = None\r
 \r
-        def declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclarationContext,i)\r
+        b = None\r
 \r
+        declarator1 = None\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_function_definition\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterFunction_definition" ):\r
-                listener.enterFunction_definition(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitFunction_definition" ):\r
-                listener.exitFunction_definition(self)\r
+        self.function_definition_stack[-1].ModifierText =  ''\r
+        self.function_definition_stack[-1].DeclText =  ''\r
+        self.function_definition_stack[-1].LBLine =  0\r
+        self.function_definition_stack[-1].LBOffset =  0\r
+        self.function_definition_stack[-1].DeclLine =  0\r
+        self.function_definition_stack[-1].DeclOffset =  0\r
 \r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 3):\r
+                    return retval\r
+\r
+                # C.g:146:2: ( (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) )\r
+                # C.g:146:4: (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement )\r
+                # C.g:146:5: (d= declaration_specifiers )?\r
+                alt4 = 2\r
+                LA4 = self.input.LA(1)\r
+                if LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33 or LA4 == 34 or LA4 == 35 or LA4 == 36 or LA4 == 37 or LA4 == 38 or LA4 == 39 or LA4 == 40 or LA4 == 41 or LA4 == 42 or LA4 == 45 or LA4 == 46 or LA4 == 48 or LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57 or LA4 == 61:\r
+                    alt4 = 1\r
+                elif LA4 == IDENTIFIER:\r
+                    LA4 = self.input.LA(2)\r
+                    if LA4 == 66:\r
+                        alt4 = 1\r
+                    elif LA4 == 58:\r
+                        LA4_21 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 59:\r
+                        LA4_22 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 60:\r
+                        LA4_23 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == IDENTIFIER:\r
+                        LA4_24 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 62:\r
+                        LA4_25 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33:\r
+                        LA4_26 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 34:\r
+                        LA4_27 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 35:\r
+                        LA4_28 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 36:\r
+                        LA4_29 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 37:\r
+                        LA4_30 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 38:\r
+                        LA4_31 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 39:\r
+                        LA4_32 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 40:\r
+                        LA4_33 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 41:\r
+                        LA4_34 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 42:\r
+                        LA4_35 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 45 or LA4 == 46:\r
+                        LA4_36 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 48:\r
+                        LA4_37 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                    elif LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57 or LA4 == 61:\r
+                        LA4_38 = self.input.LA(3)\r
+\r
+                        if (self.synpred7()) :\r
+                            alt4 = 1\r
+                elif LA4 == 58:\r
+                    LA4_14 = self.input.LA(2)\r
+\r
+                    if (self.synpred7()) :\r
+                        alt4 = 1\r
+                elif LA4 == 59:\r
+                    LA4_16 = self.input.LA(2)\r
+\r
+                    if (self.synpred7()) :\r
+                        alt4 = 1\r
+                elif LA4 == 60:\r
+                    LA4_17 = self.input.LA(2)\r
+\r
+                    if (self.synpred7()) :\r
+                        alt4 = 1\r
+                if alt4 == 1:\r
+                    # C.g:0:0: d= declaration_specifiers\r
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_function_definition157)\r
+                    d = self.declaration_specifiers()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+\r
+                self.following.append(self.FOLLOW_declarator_in_function_definition160)\r
+                declarator1 = self.declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:147:3: ( ( declaration )+ a= compound_statement | b= compound_statement )\r
+                alt6 = 2\r
+                LA6_0 = self.input.LA(1)\r
+\r
+                if (LA6_0 == IDENTIFIER or LA6_0 == 26 or (29 <= LA6_0 <= 42) or (45 <= LA6_0 <= 46) or (48 <= LA6_0 <= 61)) :\r
+                    alt6 = 1\r
+                elif (LA6_0 == 43) :\r
+                    alt6 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
 \r
+                    nvae = NoViableAltException("147:3: ( ( declaration )+ a= compound_statement | b= compound_statement )", 6, 0, self.input)\r
 \r
+                    raise nvae\r
 \r
-    def function_definition(self):\r
+                if alt6 == 1:\r
+                    # C.g:147:5: ( declaration )+ a= compound_statement\r
+                    # C.g:147:5: ( declaration )+\r
+                    cnt5 = 0\r
+                    while True: #loop5\r
+                        alt5 = 2\r
+                        LA5_0 = self.input.LA(1)\r
 \r
-        localctx = CParser.Function_definitionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 4, self.RULE_function_definition)\r
+                        if (LA5_0 == IDENTIFIER or LA5_0 == 26 or (29 <= LA5_0 <= 42) or (45 <= LA5_0 <= 46) or (48 <= LA5_0 <= 61)) :\r
+                            alt5 = 1\r
 \r
-        ModifierText = '';\r
-        DeclText = '';\r
-        LBLine = 0;\r
-        LBOffset = 0;\r
-        DeclLine = 0;\r
-        DeclOffset = 0;\r
 \r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 169\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,5,self._ctx)\r
-            if la_ == 1:\r
-                self.state = 168\r
-                localctx.d = localctx._declaration_specifiers = self.declaration_specifiers()\r
-\r
-\r
-            self.state = 171\r
-            localctx._declarator = self.declarator()\r
-            self.state = 180\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__2, CParser.T__5, CParser.T__6, CParser.T__7, CParser.T__8, CParser.T__9, CParser.T__10, CParser.T__11, CParser.T__12, CParser.T__13, CParser.T__14, CParser.T__15, CParser.T__16, CParser.T__17, CParser.T__18, CParser.T__20, CParser.T__21, CParser.T__23, CParser.T__24, CParser.T__25, CParser.T__26, CParser.T__27, CParser.T__28, CParser.T__29, CParser.T__30, CParser.T__31, CParser.T__32, CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__36, CParser.IDENTIFIER]:\r
-                self.state = 173 \r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while True:\r
-                    self.state = 172\r
-                    self.declaration()\r
-                    self.state = 175 \r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
-                    if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__2) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36))) != 0) or _la==CParser.IDENTIFIER):\r
-                        break\r
-\r
-                self.state = 177\r
-                localctx.a = self.compound_statement()\r
-                pass\r
-            elif token in [CParser.T__0]:\r
-                self.state = 179\r
-                localctx.b = self.compound_statement()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                        if alt5 == 1:\r
+                            # C.g:0:0: declaration\r
+                            self.following.append(self.FOLLOW_declaration_in_function_definition166)\r
+                            self.declaration()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return retval\r
 \r
-             \r
-            if localctx.d != None:\r
-                ModifierText = (None if localctx._declaration_specifiers is None else self._input.getText((localctx._declaration_specifiers.start,localctx._declaration_specifiers.stop)))\r
-            else:\r
-                ModifierText = ''\r
-            DeclText = (None if localctx._declarator is None else self._input.getText((localctx._declarator.start,localctx._declarator.stop)))\r
-            DeclLine = (None if localctx._declarator is None else localctx._declarator.start).line\r
-            DeclOffset = (None if localctx._declarator is None else localctx._declarator.start).column\r
-            if localctx.a != None:\r
-                LBLine = (None if localctx.a is None else localctx.a.start).line\r
-                LBOffset = (None if localctx.a is None else localctx.a.start).column\r
-            else:\r
-                LBLine = (None if localctx.b is None else localctx.b.start).line\r
-                LBOffset = (None if localctx.b is None else localctx.b.start).column\r
-                    \r
-            self._ctx.stop = self._input.LT(-1)\r
 \r
-            self.StoreFunctionDefinition(localctx.start.line, localctx.start.column, localctx.stop.line, localctx.stop.column, ModifierText, DeclText, LBLine, LBOffset, DeclLine, DeclOffset)\r
+                        else:\r
+                            if cnt5 >= 1:\r
+                                break #loop5\r
+\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return retval\r
+\r
+                            eee = EarlyExitException(5, self.input)\r
+                            raise eee\r
+\r
+                        cnt5 += 1\r
+\r
+\r
+                    self.following.append(self.FOLLOW_compound_statement_in_function_definition171)\r
+                    a = self.compound_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt6 == 2:\r
+                    # C.g:148:5: b= compound_statement\r
+                    self.following.append(self.FOLLOW_compound_statement_in_function_definition180)\r
+                    b = self.compound_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+\r
+                if self.backtracking == 0:\r
+\r
+                    if d is not None:\r
+                      self.function_definition_stack[-1].ModifierText = self.input.toString(d.start, d.stop)\r
+                    else:\r
+                      self.function_definition_stack[-1].ModifierText = ''\r
+                    self.function_definition_stack[-1].DeclText = self.input.toString(declarator1.start, declarator1.stop)\r
+                    self.function_definition_stack[-1].DeclLine = declarator1.start.line\r
+                    self.function_definition_stack[-1].DeclOffset = declarator1.start.charPositionInLine\r
+                    if a is not None:\r
+                      self.function_definition_stack[-1].LBLine = a.start.line\r
+                      self.function_definition_stack[-1].LBOffset = a.start.charPositionInLine\r
+                    else:\r
+                      self.function_definition_stack[-1].LBLine = b.start.line\r
+                      self.function_definition_stack[-1].LBOffset = b.start.charPositionInLine\r
+\r
+\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+                if self.backtracking == 0:\r
+\r
+                    self.StoreFunctionDefinition(retval.start.line, retval.start.charPositionInLine, retval.stop.line, retval.stop.charPositionInLine, self.function_definition_stack[-1].ModifierText, self.function_definition_stack[-1].DeclText, self.function_definition_stack[-1].LBLine, self.function_definition_stack[-1].LBOffset, self.function_definition_stack[-1].DeclLine, self.function_definition_stack[-1].DeclOffset)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 3, function_definition_StartIndex)\r
 \r
-    class Declaration_specifiersContext(ParserRuleContext):\r
+            self.function_definition_stack.pop()\r
+            pass\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+        return retval\r
 \r
-        def storage_class_specifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Storage_class_specifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Storage_class_specifierContext,i)\r
+    # $ANTLR end function_definition\r
 \r
 \r
-        def type_specifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_specifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_specifierContext,i)\r
+    # $ANTLR start declaration\r
+    # C.g:166:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );\r
+    def declaration(self, ):\r
 \r
+        declaration_StartIndex = self.input.index()\r
+        a = None\r
+        d = None\r
+        e = None\r
+        b = None\r
+\r
+        c = None\r
+\r
+        s = None\r
+\r
+        t = None\r
 \r
-        def type_qualifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_qualifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_qualifierContext,i)\r
 \r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 4):\r
+                    return\r
+\r
+                # C.g:167:2: (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' )\r
+                alt9 = 2\r
+                LA9_0 = self.input.LA(1)\r
+\r
+                if (LA9_0 == 26) :\r
+                    alt9 = 1\r
+                elif (LA9_0 == IDENTIFIER or (29 <= LA9_0 <= 42) or (45 <= LA9_0 <= 46) or (48 <= LA9_0 <= 61)) :\r
+                    alt9 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("166:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );", 9, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt9 == 1:\r
+                    # C.g:167:4: a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';'\r
+                    a = self.input.LT(1)\r
+                    self.match(self.input, 26, self.FOLLOW_26_in_declaration203)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:167:17: (b= declaration_specifiers )?\r
+                    alt7 = 2\r
+                    LA7 = self.input.LA(1)\r
+                    if LA7 == 29 or LA7 == 30 or LA7 == 31 or LA7 == 32 or LA7 == 33 or LA7 == 34 or LA7 == 35 or LA7 == 36 or LA7 == 37 or LA7 == 38 or LA7 == 39 or LA7 == 40 or LA7 == 41 or LA7 == 42 or LA7 == 45 or LA7 == 46 or LA7 == 48 or LA7 == 49 or LA7 == 50 or LA7 == 51 or LA7 == 52 or LA7 == 53 or LA7 == 54 or LA7 == 55 or LA7 == 56 or LA7 == 57 or LA7 == 61:\r
+                        alt7 = 1\r
+                    elif LA7 == IDENTIFIER:\r
+                        LA7_13 = self.input.LA(2)\r
+\r
+                        if (LA7_13 == 62) :\r
+                            LA7_21 = self.input.LA(3)\r
+\r
+                            if (self.synpred10()) :\r
+                                alt7 = 1\r
+                        elif (LA7_13 == IDENTIFIER or (29 <= LA7_13 <= 42) or (45 <= LA7_13 <= 46) or (48 <= LA7_13 <= 61) or LA7_13 == 66) :\r
+                            alt7 = 1\r
+                    elif LA7 == 58:\r
+                        LA7_14 = self.input.LA(2)\r
+\r
+                        if (self.synpred10()) :\r
+                            alt7 = 1\r
+                    elif LA7 == 59:\r
+                        LA7_16 = self.input.LA(2)\r
+\r
+                        if (self.synpred10()) :\r
+                            alt7 = 1\r
+                    elif LA7 == 60:\r
+                        LA7_17 = self.input.LA(2)\r
+\r
+                        if (self.synpred10()) :\r
+                            alt7 = 1\r
+                    if alt7 == 1:\r
+                        # C.g:0:0: b= declaration_specifiers\r
+                        self.following.append(self.FOLLOW_declaration_specifiers_in_declaration207)\r
+                        b = self.declaration_specifiers()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    self.following.append(self.FOLLOW_init_declarator_list_in_declaration216)\r
+                    c = self.init_declarator_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    d = self.input.LT(1)\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_declaration220)\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+\r
+                        if b is not None:\r
+                          self.StoreTypedefDefinition(a.line, a.charPositionInLine, d.line, d.charPositionInLine, self.input.toString(b.start, b.stop), self.input.toString(c.start, c.stop))\r
+                        else:\r
+                          self.StoreTypedefDefinition(a.line, a.charPositionInLine, d.line, d.charPositionInLine, '', self.input.toString(c.start, c.stop))\r
+\r
+\r
+\r
+\r
+                elif alt9 == 2:\r
+                    # C.g:175:4: s= declaration_specifiers (t= init_declarator_list )? e= ';'\r
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_declaration234)\r
+                    s = self.declaration_specifiers()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:175:30: (t= init_declarator_list )?\r
+                    alt8 = 2\r
+                    LA8_0 = self.input.LA(1)\r
+\r
+                    if (LA8_0 == IDENTIFIER or (58 <= LA8_0 <= 60) or LA8_0 == 62 or LA8_0 == 66) :\r
+                        alt8 = 1\r
+                    if alt8 == 1:\r
+                        # C.g:0:0: t= init_declarator_list\r
+                        self.following.append(self.FOLLOW_init_declarator_list_in_declaration238)\r
+                        t = self.init_declarator_list()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    e = self.input.LT(1)\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_declaration243)\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+\r
+                        if t is not None:\r
+                          self.StoreVariableDeclaration(s.start.line, s.start.charPositionInLine, t.start.line, t.start.charPositionInLine, self.input.toString(s.start, s.stop), self.input.toString(t.start, t.stop))\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 4, declaration_StartIndex)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_declaration_specifiers\r
+            pass\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDeclaration_specifiers" ):\r
-                listener.enterDeclaration_specifiers(self)\r
+        return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDeclaration_specifiers" ):\r
-                listener.exitDeclaration_specifiers(self)\r
+    # $ANTLR end declaration\r
 \r
+    class declaration_specifiers_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
 \r
 \r
 \r
-    def declaration_specifiers(self):\r
+    # $ANTLR start declaration_specifiers\r
+    # C.g:182:1: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ;\r
+    def declaration_specifiers(self, ):\r
 \r
-        localctx = CParser.Declaration_specifiersContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 6, self.RULE_declaration_specifiers)\r
+        retval = self.declaration_specifiers_return()\r
+        retval.start = self.input.LT(1)\r
+        declaration_specifiers_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 187 \r
-            self._errHandler.sync(self)\r
-            _alt = 1\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt == 1:\r
-                    self.state = 187\r
-                    self._errHandler.sync(self)\r
-                    token = self._input.LA(1)\r
-                    if token in [CParser.T__5, CParser.T__6, CParser.T__7, CParser.T__8, CParser.T__9]:\r
-                        self.state = 184\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 5):\r
+                    return retval\r
+\r
+                # C.g:183:2: ( ( storage_class_specifier | type_specifier | type_qualifier )+ )\r
+                # C.g:183:6: ( storage_class_specifier | type_specifier | type_qualifier )+\r
+                # C.g:183:6: ( storage_class_specifier | type_specifier | type_qualifier )+\r
+                cnt10 = 0\r
+                while True: #loop10\r
+                    alt10 = 4\r
+                    LA10 = self.input.LA(1)\r
+                    if LA10 == 58:\r
+                        LA10_2 = self.input.LA(2)\r
+\r
+                        if (self.synpred15()) :\r
+                            alt10 = 3\r
+\r
+\r
+                    elif LA10 == 59:\r
+                        LA10_3 = self.input.LA(2)\r
+\r
+                        if (self.synpred15()) :\r
+                            alt10 = 3\r
+\r
+\r
+                    elif LA10 == 60:\r
+                        LA10_4 = self.input.LA(2)\r
+\r
+                        if (self.synpred15()) :\r
+                            alt10 = 3\r
+\r
+\r
+                    elif LA10 == IDENTIFIER:\r
+                        LA10_5 = self.input.LA(2)\r
+\r
+                        if (self.synpred14()) :\r
+                            alt10 = 2\r
+\r
+\r
+                    elif LA10 == 53:\r
+                        LA10_9 = self.input.LA(2)\r
+\r
+                        if (self.synpred15()) :\r
+                            alt10 = 3\r
+\r
+\r
+                    elif LA10 == 29 or LA10 == 30 or LA10 == 31 or LA10 == 32 or LA10 == 33:\r
+                        alt10 = 1\r
+                    elif LA10 == 34 or LA10 == 35 or LA10 == 36 or LA10 == 37 or LA10 == 38 or LA10 == 39 or LA10 == 40 or LA10 == 41 or LA10 == 42 or LA10 == 45 or LA10 == 46 or LA10 == 48:\r
+                        alt10 = 2\r
+                    elif LA10 == 49 or LA10 == 50 or LA10 == 51 or LA10 == 52 or LA10 == 54 or LA10 == 55 or LA10 == 56 or LA10 == 57 or LA10 == 61:\r
+                        alt10 = 3\r
+\r
+                    if alt10 == 1:\r
+                        # C.g:183:10: storage_class_specifier\r
+                        self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers264)\r
                         self.storage_class_specifier()\r
-                        pass\r
-                    elif token in [CParser.T__10, CParser.T__11, CParser.T__12, CParser.T__13, CParser.T__14, CParser.T__15, CParser.T__16, CParser.T__17, CParser.T__18, CParser.T__20, CParser.T__21, CParser.T__23, CParser.IDENTIFIER]:\r
-                        self.state = 185\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    elif alt10 == 2:\r
+                        # C.g:184:7: type_specifier\r
+                        self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers272)\r
                         self.type_specifier()\r
-                        pass\r
-                    elif token in [CParser.T__24, CParser.T__25, CParser.T__26, CParser.T__27, CParser.T__28, CParser.T__29, CParser.T__30, CParser.T__31, CParser.T__32, CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__36]:\r
-                        self.state = 186\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    elif alt10 == 3:\r
+                        # C.g:185:13: type_qualifier\r
+                        self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers286)\r
                         self.type_qualifier()\r
-                        pass\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
                     else:\r
-                        raise NoViableAltException(self)\r
+                        if cnt10 >= 1:\r
+                            break #loop10\r
 \r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
 \r
-                else:\r
-                    raise NoViableAltException(self)\r
-                self.state = 189 \r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,9,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        eee = EarlyExitException(10, self.input)\r
+                        raise eee\r
 \r
-    class DeclarationContext(ParserRuleContext):\r
+                    cnt10 += 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.a = None # Token\r
-            self.b = None # Declaration_specifiersContext\r
-            self.c = None # Init_declarator_listContext\r
-            self.d = None # Token\r
-            self.s = None # Declaration_specifiersContext\r
-            self.t = None # Init_declarator_listContext\r
-            self.e = None # Token\r
 \r
-        def init_declarator_list(self):\r
-            return self.getTypedRuleContext(CParser.Init_declarator_listContext,0)\r
 \r
 \r
-        def declaration_specifiers(self):\r
-            return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)\r
 \r
+                retval.stop = self.input.LT(-1)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_declaration\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDeclaration" ):\r
-                listener.enterDeclaration(self)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 5, declaration_specifiers_StartIndex)\r
+\r
+            pass\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDeclaration" ):\r
-                listener.exitDeclaration(self)\r
+        return retval\r
 \r
+    # $ANTLR end declaration_specifiers\r
 \r
+    class init_declarator_list_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
 \r
 \r
-    def declaration(self):\r
 \r
-        localctx = CParser.DeclarationContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 8, self.RULE_declaration)\r
-        self._la = 0 # Token type\r
+    # $ANTLR start init_declarator_list\r
+    # C.g:189:1: init_declarator_list : init_declarator ( ',' init_declarator )* ;\r
+    def init_declarator_list(self, ):\r
+\r
+        retval = self.init_declarator_list_return()\r
+        retval.start = self.input.LT(1)\r
+        init_declarator_list_StartIndex = self.input.index()\r
         try:\r
-            self.state = 206\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__2]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 191\r
-                localctx.a = self.match(CParser.T__2)\r
-                self.state = 193\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,10,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 192\r
-                    localctx.b = self.declaration_specifiers()\r
-\r
-\r
-                self.state = 195\r
-                localctx.c = self.init_declarator_list()\r
-                self.state = 196\r
-                localctx.d = self.match(CParser.T__1)\r
-\r
-                if localctx.b is not None:\r
-                    self.StoreTypedefDefinition(localctx.a.line, localctx.a.column, (0 if localctx.d is None else localctx.d.line), localctx.d.column, (None if localctx.b is None else self._input.getText((localctx.b.start,localctx.b.stop))), (None if localctx.c is None else self._input.getText((localctx.c.start,localctx.c.stop))))\r
-                else:\r
-                    self.StoreTypedefDefinition(localctx.a.line, localctx.a.column, (0 if localctx.d is None else localctx.d.line), localctx.d.column, '', (None if localctx.c is None else self._input.getText((localctx.c.start,localctx.c.stop))))\r
-                    \r
-                pass\r
-            elif token in [CParser.T__5, CParser.T__6, CParser.T__7, CParser.T__8, CParser.T__9, CParser.T__10, CParser.T__11, CParser.T__12, CParser.T__13, CParser.T__14, CParser.T__15, CParser.T__16, CParser.T__17, CParser.T__18, CParser.T__20, CParser.T__21, CParser.T__23, CParser.T__24, CParser.T__25, CParser.T__26, CParser.T__27, CParser.T__28, CParser.T__29, CParser.T__30, CParser.T__31, CParser.T__32, CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__36, CParser.IDENTIFIER]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 199\r
-                localctx.s = self.declaration_specifiers()\r
-                self.state = 201\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (CParser.T__33 - 34)) | (1 << (CParser.T__34 - 34)) | (1 << (CParser.T__35 - 34)) | (1 << (CParser.T__37 - 34)) | (1 << (CParser.T__41 - 34)) | (1 << (CParser.IDENTIFIER - 34)))) != 0):\r
-                    self.state = 200\r
-                    localctx.t = self.init_declarator_list()\r
-\r
-\r
-                self.state = 203\r
-                localctx.e = self.match(CParser.T__1)\r
-\r
-                if localctx.t is not None:\r
-                    self.StoreVariableDeclaration((None if localctx.s is None else localctx.s.start).line, (None if localctx.s is None else localctx.s.start).column, (None if localctx.t is None else localctx.t.start).line, (None if localctx.t is None else localctx.t.start).column, (None if localctx.s is None else self._input.getText((localctx.s.start,localctx.s.stop))), (None if localctx.t is None else self._input.getText((localctx.t.start,localctx.t.stop))))\r
-\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 6):\r
+                    return retval\r
+\r
+                # C.g:190:2: ( init_declarator ( ',' init_declarator )* )\r
+                # C.g:190:4: init_declarator ( ',' init_declarator )*\r
+                self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list308)\r
+                self.init_declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:190:20: ( ',' init_declarator )*\r
+                while True: #loop11\r
+                    alt11 = 2\r
+                    LA11_0 = self.input.LA(1)\r
+\r
+                    if (LA11_0 == 27) :\r
+                        alt11 = 1\r
+\r
+\r
+                    if alt11 == 1:\r
+                        # C.g:190:21: ',' init_declarator\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_init_declarator_list311)\r
+                        if self.failed:\r
+                            return retval\r
+                        self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list313)\r
+                        self.init_declarator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    else:\r
+                        break #loop11\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Init_declarator_listContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def init_declarator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Init_declaratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Init_declaratorContext,i)\r
 \r
+                retval.stop = self.input.LT(-1)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_init_declarator_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInit_declarator_list" ):\r
-                listener.enterInit_declarator_list(self)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 6, init_declarator_list_StartIndex)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInit_declarator_list" ):\r
-                listener.exitInit_declarator_list(self)\r
+            pass\r
 \r
+        return retval\r
 \r
+    # $ANTLR end init_declarator_list\r
 \r
 \r
-    def init_declarator_list(self):\r
+    # $ANTLR start init_declarator\r
+    # C.g:193:1: init_declarator : declarator ( '=' initializer )? ;\r
+    def init_declarator(self, ):\r
 \r
-        localctx = CParser.Init_declarator_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 10, self.RULE_init_declarator_list)\r
-        self._la = 0 # Token type\r
+        init_declarator_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 208\r
-            self.init_declarator()\r
-            self.state = 213\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 209\r
-                self.match(CParser.T__3)\r
-                self.state = 210\r
-                self.init_declarator()\r
-                self.state = 215\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 7):\r
+                    return\r
+\r
+                # C.g:194:2: ( declarator ( '=' initializer )? )\r
+                # C.g:194:4: declarator ( '=' initializer )?\r
+                self.following.append(self.FOLLOW_declarator_in_init_declarator326)\r
+                self.declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:194:15: ( '=' initializer )?\r
+                alt12 = 2\r
+                LA12_0 = self.input.LA(1)\r
 \r
-    class Init_declaratorContext(ParserRuleContext):\r
+                if (LA12_0 == 28) :\r
+                    alt12 = 1\r
+                if alt12 == 1:\r
+                    # C.g:194:16: '=' initializer\r
+                    self.match(self.input, 28, self.FOLLOW_28_in_init_declarator329)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_initializer_in_init_declarator331)\r
+                    self.initializer()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
 \r
 \r
-        def initializer(self):\r
-            return self.getTypedRuleContext(CParser.InitializerContext,0)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_init_declarator\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInit_declarator" ):\r
-                listener.enterInit_declarator(self)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 7, init_declarator_StartIndex)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInit_declarator" ):\r
-                listener.exitInit_declarator(self)\r
+            pass\r
 \r
+        return\r
 \r
+    # $ANTLR end init_declarator\r
 \r
 \r
-    def init_declarator(self):\r
+    # $ANTLR start storage_class_specifier\r
+    # C.g:197:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' );\r
+    def storage_class_specifier(self, ):\r
 \r
-        localctx = CParser.Init_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 12, self.RULE_init_declarator)\r
-        self._la = 0 # Token type\r
+        storage_class_specifier_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 216\r
-            self.declarator()\r
-            self.state = 219\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__4:\r
-                self.state = 217\r
-                self.match(CParser.T__4)\r
-                self.state = 218\r
-                self.initializer()\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 8):\r
+                    return\r
+\r
+                # C.g:198:2: ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' )\r
+                # C.g:\r
+                if (29 <= self.input.LA(1) <= 33):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_storage_class_specifier0\r
+                        )\r
+                    raise mse\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Storage_class_specifierContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_storage_class_specifier\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 8, storage_class_specifier_StartIndex)\r
+\r
+            pass\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStorage_class_specifier" ):\r
-                listener.enterStorage_class_specifier(self)\r
+        return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStorage_class_specifier" ):\r
-                listener.exitStorage_class_specifier(self)\r
+    # $ANTLR end storage_class_specifier\r
 \r
 \r
+    # $ANTLR start type_specifier\r
+    # C.g:205:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id );\r
+    def type_specifier(self, ):\r
 \r
+        type_specifier_StartIndex = self.input.index()\r
+        s = None\r
+\r
+        e = None\r
 \r
-    def storage_class_specifier(self):\r
 \r
-        localctx = CParser.Storage_class_specifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 14, self.RULE_storage_class_specifier)\r
-        self._la = 0 # Token type\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 221\r
-            _la = self._input.LA(1)\r
-            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9))) != 0)):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 9):\r
+                    return\r
+\r
+                # C.g:206:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id )\r
+                alt13 = 12\r
+                LA13_0 = self.input.LA(1)\r
+\r
+                if (LA13_0 == 34) :\r
+                    alt13 = 1\r
+                elif (LA13_0 == 35) :\r
+                    alt13 = 2\r
+                elif (LA13_0 == 36) :\r
+                    alt13 = 3\r
+                elif (LA13_0 == 37) :\r
+                    alt13 = 4\r
+                elif (LA13_0 == 38) :\r
+                    alt13 = 5\r
+                elif (LA13_0 == 39) :\r
+                    alt13 = 6\r
+                elif (LA13_0 == 40) :\r
+                    alt13 = 7\r
+                elif (LA13_0 == 41) :\r
+                    alt13 = 8\r
+                elif (LA13_0 == 42) :\r
+                    alt13 = 9\r
+                elif ((45 <= LA13_0 <= 46)) :\r
+                    alt13 = 10\r
+                elif (LA13_0 == 48) :\r
+                    alt13 = 11\r
+                elif (LA13_0 == IDENTIFIER) and (self.synpred34()):\r
+                    alt13 = 12\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
 \r
-    class Type_specifierContext(ParserRuleContext):\r
+                    nvae = NoViableAltException("205:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id );", 13, 0, self.input)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.s = None # Struct_or_union_specifierContext\r
-            self.e = None # Enum_specifierContext\r
+                    raise nvae\r
 \r
-        def struct_or_union_specifier(self):\r
-            return self.getTypedRuleContext(CParser.Struct_or_union_specifierContext,0)\r
+                if alt13 == 1:\r
+                    # C.g:206:4: 'void'\r
+                    self.match(self.input, 34, self.FOLLOW_34_in_type_specifier376)\r
+                    if self.failed:\r
+                        return\r
 \r
 \r
-        def enum_specifier(self):\r
-            return self.getTypedRuleContext(CParser.Enum_specifierContext,0)\r
+                elif alt13 == 2:\r
+                    # C.g:207:4: 'char'\r
+                    self.match(self.input, 35, self.FOLLOW_35_in_type_specifier381)\r
+                    if self.failed:\r
+                        return\r
 \r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                elif alt13 == 3:\r
+                    # C.g:208:4: 'short'\r
+                    self.match(self.input, 36, self.FOLLOW_36_in_type_specifier386)\r
+                    if self.failed:\r
+                        return\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
 \r
+                elif alt13 == 4:\r
+                    # C.g:209:4: 'int'\r
+                    self.match(self.input, 37, self.FOLLOW_37_in_type_specifier391)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 5:\r
+                    # C.g:210:4: 'long'\r
+                    self.match(self.input, 38, self.FOLLOW_38_in_type_specifier396)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 6:\r
+                    # C.g:211:4: 'float'\r
+                    self.match(self.input, 39, self.FOLLOW_39_in_type_specifier401)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 7:\r
+                    # C.g:212:4: 'double'\r
+                    self.match(self.input, 40, self.FOLLOW_40_in_type_specifier406)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 8:\r
+                    # C.g:213:4: 'signed'\r
+                    self.match(self.input, 41, self.FOLLOW_41_in_type_specifier411)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 9:\r
+                    # C.g:214:4: 'unsigned'\r
+                    self.match(self.input, 42, self.FOLLOW_42_in_type_specifier416)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt13 == 10:\r
+                    # C.g:215:4: s= struct_or_union_specifier\r
+                    self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier423)\r
+                    s = self.struct_or_union_specifier()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+\r
+                        if s.stop is not None:\r
+                          self.StoreStructUnionDefinition(s.start.line, s.start.charPositionInLine, s.stop.line, s.stop.charPositionInLine, self.input.toString(s.start, s.stop))\r
 \r
-        def type_qualifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_qualifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_qualifierContext,i)\r
 \r
 \r
-        def type_id(self):\r
-            return self.getTypedRuleContext(CParser.Type_idContext,0)\r
 \r
+                elif alt13 == 11:\r
+                    # C.g:220:4: e= enum_specifier\r
+                    self.following.append(self.FOLLOW_enum_specifier_in_type_specifier433)\r
+                    e = self.enum_specifier()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_type_specifier\r
+                        if e.stop is not None:\r
+                          self.StoreEnumerationDefinition(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterType_specifier" ):\r
-                listener.enterType_specifier(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitType_specifier" ):\r
-                listener.exitType_specifier(self)\r
 \r
 \r
+                elif alt13 == 12:\r
+                    # C.g:225:4: ( IDENTIFIER ( type_qualifier )* declarator )=> type_id\r
+                    self.following.append(self.FOLLOW_type_id_in_type_specifier451)\r
+                    self.type_id()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
 \r
 \r
-    def type_specifier(self):\r
 \r
-        localctx = CParser.Type_specifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 16, self.RULE_type_specifier)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 9, type_specifier_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end type_specifier\r
+\r
+\r
+    # $ANTLR start type_id\r
+    # C.g:228:1: type_id : IDENTIFIER ;\r
+    def type_id(self, ):\r
+\r
+        type_id_StartIndex = self.input.index()\r
         try:\r
-            self.state = 247\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,16,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 223\r
-                self.match(CParser.T__10)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 224\r
-                self.match(CParser.T__11)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 225\r
-                self.match(CParser.T__12)\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 226\r
-                self.match(CParser.T__13)\r
-                pass\r
-\r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 227\r
-                self.match(CParser.T__14)\r
-                pass\r
-\r
-            elif la_ == 6:\r
-                self.enterOuterAlt(localctx, 6)\r
-                self.state = 228\r
-                self.match(CParser.T__15)\r
-                pass\r
-\r
-            elif la_ == 7:\r
-                self.enterOuterAlt(localctx, 7)\r
-                self.state = 229\r
-                self.match(CParser.T__16)\r
-                pass\r
-\r
-            elif la_ == 8:\r
-                self.enterOuterAlt(localctx, 8)\r
-                self.state = 230\r
-                self.match(CParser.T__17)\r
-                pass\r
-\r
-            elif la_ == 9:\r
-                self.enterOuterAlt(localctx, 9)\r
-                self.state = 231\r
-                self.match(CParser.T__18)\r
-                pass\r
-\r
-            elif la_ == 10:\r
-                self.enterOuterAlt(localctx, 10)\r
-                self.state = 232\r
-                localctx.s = self.struct_or_union_specifier()\r
-\r
-                if localctx.s.stop is not None:\r
-                    self.StoreStructUnionDefinition((None if localctx.s is None else localctx.s.start).line, (None if localctx.s is None else localctx.s.start).column, (None if localctx.s is None else localctx.s.stop).line, (None if localctx.s is None else localctx.s.stop).column, (None if localctx.s is None else self._input.getText((localctx.s.start,localctx.s.stop))))\r
-\r
-                pass\r
-\r
-            elif la_ == 11:\r
-                self.enterOuterAlt(localctx, 11)\r
-                self.state = 235\r
-                localctx.e = self.enum_specifier()\r
-\r
-                if localctx.e.stop is not None:\r
-                    self.StoreEnumerationDefinition((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
-\r
-                pass\r
-\r
-            elif la_ == 12:\r
-                self.enterOuterAlt(localctx, 12)\r
-                self.state = 238\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 242\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,15,self._ctx)\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt==1:\r
-                        self.state = 239\r
-                        self.type_qualifier() \r
-                    self.state = 244\r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,15,self._ctx)\r
-\r
-                self.state = 245\r
-                self.declarator()\r
-                pass\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 10):\r
+                    return\r
 \r
-            elif la_ == 13:\r
-                self.enterOuterAlt(localctx, 13)\r
-                self.state = 246\r
-                self.type_id()\r
-                pass\r
+                # C.g:229:5: ( IDENTIFIER )\r
+                # C.g:229:9: IDENTIFIER\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id467)\r
+                if self.failed:\r
+                    return\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 10, type_id_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end type_id\r
+\r
+    class struct_or_union_specifier_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
 \r
-    class Type_idContext(ParserRuleContext):\r
+    # $ANTLR start struct_or_union_specifier\r
+    # C.g:233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );\r
+    def struct_or_union_specifier(self, ):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+        retval = self.struct_or_union_specifier_return()\r
+        retval.start = self.input.LT(1)\r
+        struct_or_union_specifier_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 11):\r
+                    return retval\r
+\r
+                # C.g:235:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER )\r
+                alt15 = 2\r
+                LA15_0 = self.input.LA(1)\r
+\r
+                if ((45 <= LA15_0 <= 46)) :\r
+                    LA15_1 = self.input.LA(2)\r
+\r
+                    if (LA15_1 == IDENTIFIER) :\r
+                        LA15_2 = self.input.LA(3)\r
+\r
+                        if (LA15_2 == 43) :\r
+                            alt15 = 1\r
+                        elif (LA15_2 == EOF or LA15_2 == IDENTIFIER or LA15_2 == 25 or LA15_2 == 27 or (29 <= LA15_2 <= 42) or (45 <= LA15_2 <= 64) or LA15_2 == 66) :\r
+                            alt15 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return retval\r
+\r
+                            nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 2, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif (LA15_1 == 43) :\r
+                        alt15 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                        nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 1, self.input)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_type_id\r
+                        raise nvae\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterType_id" ):\r
-                listener.enterType_id(self)\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
+\r
+                    nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt15 == 1:\r
+                    # C.g:235:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}'\r
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier494)\r
+                    self.struct_or_union()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    # C.g:235:20: ( IDENTIFIER )?\r
+                    alt14 = 2\r
+                    LA14_0 = self.input.LA(1)\r
+\r
+                    if (LA14_0 == IDENTIFIER) :\r
+                        alt14 = 1\r
+                    if alt14 == 1:\r
+                        # C.g:0:0: IDENTIFIER\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier496)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    self.match(self.input, 43, self.FOLLOW_43_in_struct_or_union_specifier499)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier501)\r
+                    self.struct_declaration_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 44, self.FOLLOW_44_in_struct_or_union_specifier503)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt15 == 2:\r
+                    # C.g:236:4: struct_or_union IDENTIFIER\r
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier508)\r
+                    self.struct_or_union()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier510)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 11, struct_or_union_specifier_StartIndex)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitType_id" ):\r
-                listener.exitType_id(self)\r
+            pass\r
 \r
+        return retval\r
 \r
+    # $ANTLR end struct_or_union_specifier\r
 \r
 \r
-    def type_id(self):\r
+    # $ANTLR start struct_or_union\r
+    # C.g:239:1: struct_or_union : ( 'struct' | 'union' );\r
+    def struct_or_union(self, ):\r
 \r
-        localctx = CParser.Type_idContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 18, self.RULE_type_id)\r
+        struct_or_union_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 249\r
-            self.match(CParser.IDENTIFIER)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 12):\r
+                    return\r
+\r
+                # C.g:240:2: ( 'struct' | 'union' )\r
+                # C.g:\r
+                if (45 <= self.input.LA(1) <= 46):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_struct_or_union0\r
+                        )\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 12, struct_or_union_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_or_union\r
+\r
+\r
+    # $ANTLR start struct_declaration_list\r
+    # C.g:244:1: struct_declaration_list : ( struct_declaration )+ ;\r
+    def struct_declaration_list(self, ):\r
+\r
+        struct_declaration_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 13):\r
+                    return\r
+\r
+                # C.g:245:2: ( ( struct_declaration )+ )\r
+                # C.g:245:4: ( struct_declaration )+\r
+                # C.g:245:4: ( struct_declaration )+\r
+                cnt16 = 0\r
+                while True: #loop16\r
+                    alt16 = 2\r
+                    LA16_0 = self.input.LA(1)\r
+\r
+                    if (LA16_0 == IDENTIFIER or (34 <= LA16_0 <= 42) or (45 <= LA16_0 <= 46) or (48 <= LA16_0 <= 61)) :\r
+                        alt16 = 1\r
+\r
+\r
+                    if alt16 == 1:\r
+                        # C.g:0:0: struct_declaration\r
+                        self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list537)\r
+                        self.struct_declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        if cnt16 >= 1:\r
+                            break #loop16\r
+\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        eee = EarlyExitException(16, self.input)\r
+                        raise eee\r
+\r
+                    cnt16 += 1\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 13, struct_declaration_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_declaration_list\r
+\r
+\r
+    # $ANTLR start struct_declaration\r
+    # C.g:248:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;\r
+    def struct_declaration(self, ):\r
+\r
+        struct_declaration_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 14):\r
+                    return\r
+\r
+                # C.g:249:2: ( specifier_qualifier_list struct_declarator_list ';' )\r
+                # C.g:249:4: specifier_qualifier_list struct_declarator_list ';'\r
+                self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration549)\r
+                self.specifier_qualifier_list()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration551)\r
+                self.struct_declarator_list()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration553)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 14, struct_declaration_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_declaration\r
+\r
+\r
+    # $ANTLR start specifier_qualifier_list\r
+    # C.g:252:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ;\r
+    def specifier_qualifier_list(self, ):\r
+\r
+        specifier_qualifier_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 15):\r
+                    return\r
+\r
+                # C.g:253:2: ( ( type_qualifier | type_specifier )+ )\r
+                # C.g:253:4: ( type_qualifier | type_specifier )+\r
+                # C.g:253:4: ( type_qualifier | type_specifier )+\r
+                cnt17 = 0\r
+                while True: #loop17\r
+                    alt17 = 3\r
+                    LA17 = self.input.LA(1)\r
+                    if LA17 == 58:\r
+                        LA17_2 = self.input.LA(2)\r
+\r
+                        if (self.synpred39()) :\r
+                            alt17 = 1\r
+\r
+\r
+                    elif LA17 == 59:\r
+                        LA17_3 = self.input.LA(2)\r
+\r
+                        if (self.synpred39()) :\r
+                            alt17 = 1\r
+\r
+\r
+                    elif LA17 == 60:\r
+                        LA17_4 = self.input.LA(2)\r
+\r
+                        if (self.synpred39()) :\r
+                            alt17 = 1\r
+\r
+\r
+                    elif LA17 == IDENTIFIER:\r
+                        LA17 = self.input.LA(2)\r
+                        if LA17 == EOF or LA17 == IDENTIFIER or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48 or LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 58 or LA17 == 59 or LA17 == 60 or LA17 == 61 or LA17 == 63 or LA17 == 66:\r
+                            alt17 = 2\r
+                        elif LA17 == 62:\r
+                            LA17_94 = self.input.LA(3)\r
+\r
+                            if (self.synpred40()) :\r
+                                alt17 = 2\r
+\r
+\r
+                        elif LA17 == 47:\r
+                            LA17_95 = self.input.LA(3)\r
+\r
+                            if (self.synpred40()) :\r
+                                alt17 = 2\r
+\r
+\r
+                        elif LA17 == 64:\r
+                            LA17_96 = self.input.LA(3)\r
+\r
+                            if (self.synpred40()) :\r
+                                alt17 = 2\r
+\r
+\r
+\r
+                    elif LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 61:\r
+                        alt17 = 1\r
+                    elif LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48:\r
+                        alt17 = 2\r
+\r
+                    if alt17 == 1:\r
+                        # C.g:253:6: type_qualifier\r
+                        self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list566)\r
+                        self.type_qualifier()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt17 == 2:\r
+                        # C.g:253:23: type_specifier\r
+                        self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list570)\r
+                        self.type_specifier()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        if cnt17 >= 1:\r
+                            break #loop17\r
+\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        eee = EarlyExitException(17, self.input)\r
+                        raise eee\r
+\r
+                    cnt17 += 1\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 15, specifier_qualifier_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end specifier_qualifier_list\r
+\r
+\r
+    # $ANTLR start struct_declarator_list\r
+    # C.g:256:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;\r
+    def struct_declarator_list(self, ):\r
+\r
+        struct_declarator_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 16):\r
+                    return\r
+\r
+                # C.g:257:2: ( struct_declarator ( ',' struct_declarator )* )\r
+                # C.g:257:4: struct_declarator ( ',' struct_declarator )*\r
+                self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list584)\r
+                self.struct_declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:257:22: ( ',' struct_declarator )*\r
+                while True: #loop18\r
+                    alt18 = 2\r
+                    LA18_0 = self.input.LA(1)\r
+\r
+                    if (LA18_0 == 27) :\r
+                        alt18 = 1\r
+\r
+\r
+                    if alt18 == 1:\r
+                        # C.g:257:23: ',' struct_declarator\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_struct_declarator_list587)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list589)\r
+                        self.struct_declarator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop18\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 16, struct_declarator_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_declarator_list\r
+\r
+\r
+    # $ANTLR start struct_declarator\r
+    # C.g:260:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );\r
+    def struct_declarator(self, ):\r
+\r
+        struct_declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 17):\r
+                    return\r
+\r
+                # C.g:261:2: ( declarator ( ':' constant_expression )? | ':' constant_expression )\r
+                alt20 = 2\r
+                LA20_0 = self.input.LA(1)\r
+\r
+                if (LA20_0 == IDENTIFIER or (58 <= LA20_0 <= 60) or LA20_0 == 62 or LA20_0 == 66) :\r
+                    alt20 = 1\r
+                elif (LA20_0 == 47) :\r
+                    alt20 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("260:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 20, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt20 == 1:\r
+                    # C.g:261:4: declarator ( ':' constant_expression )?\r
+                    self.following.append(self.FOLLOW_declarator_in_struct_declarator602)\r
+                    self.declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:261:15: ( ':' constant_expression )?\r
+                    alt19 = 2\r
+                    LA19_0 = self.input.LA(1)\r
+\r
+                    if (LA19_0 == 47) :\r
+                        alt19 = 1\r
+                    if alt19 == 1:\r
+                        # C.g:261:16: ':' constant_expression\r
+                        self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator605)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_constant_expression_in_struct_declarator607)\r
+                        self.constant_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt20 == 2:\r
+                    # C.g:262:4: ':' constant_expression\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator614)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_struct_declarator616)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 17, struct_declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end struct_declarator\r
+\r
+    class enum_specifier_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start enum_specifier\r
+    # C.g:265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );\r
+    def enum_specifier(self, ):\r
+\r
+        retval = self.enum_specifier_return()\r
+        retval.start = self.input.LT(1)\r
+        enum_specifier_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 18):\r
+                    return retval\r
+\r
+                # C.g:267:2: ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER )\r
+                alt23 = 3\r
+                LA23_0 = self.input.LA(1)\r
+\r
+                if (LA23_0 == 48) :\r
+                    LA23_1 = self.input.LA(2)\r
+\r
+                    if (LA23_1 == IDENTIFIER) :\r
+                        LA23_2 = self.input.LA(3)\r
+\r
+                        if (LA23_2 == 43) :\r
+                            alt23 = 2\r
+                        elif (LA23_2 == EOF or LA23_2 == IDENTIFIER or LA23_2 == 25 or LA23_2 == 27 or (29 <= LA23_2 <= 42) or (45 <= LA23_2 <= 64) or LA23_2 == 66) :\r
+                            alt23 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return retval\r
+\r
+                            nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 2, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif (LA23_1 == 43) :\r
+                        alt23 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
+\r
+                        nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
+\r
+                    nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt23 == 1:\r
+                    # C.g:267:4: 'enum' '{' enumerator_list ( ',' )? '}'\r
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier634)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier636)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier638)\r
+                    self.enumerator_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    # C.g:267:31: ( ',' )?\r
+                    alt21 = 2\r
+                    LA21_0 = self.input.LA(1)\r
+\r
+                    if (LA21_0 == 27) :\r
+                        alt21 = 1\r
+                    if alt21 == 1:\r
+                        # C.g:0:0: ','\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier640)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier643)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt23 == 2:\r
+                    # C.g:268:4: 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}'\r
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier648)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier650)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier652)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier654)\r
+                    self.enumerator_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    # C.g:268:42: ( ',' )?\r
+                    alt22 = 2\r
+                    LA22_0 = self.input.LA(1)\r
+\r
+                    if (LA22_0 == 27) :\r
+                        alt22 = 1\r
+                    if alt22 == 1:\r
+                        # C.g:0:0: ','\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier656)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier659)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt23 == 3:\r
+                    # C.g:269:4: 'enum' IDENTIFIER\r
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier664)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier666)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 18, enum_specifier_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end enum_specifier\r
+\r
+\r
+    # $ANTLR start enumerator_list\r
+    # C.g:272:1: enumerator_list : enumerator ( ',' enumerator )* ;\r
+    def enumerator_list(self, ):\r
+\r
+        enumerator_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 19):\r
+                    return\r
+\r
+                # C.g:273:2: ( enumerator ( ',' enumerator )* )\r
+                # C.g:273:4: enumerator ( ',' enumerator )*\r
+                self.following.append(self.FOLLOW_enumerator_in_enumerator_list677)\r
+                self.enumerator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:273:15: ( ',' enumerator )*\r
+                while True: #loop24\r
+                    alt24 = 2\r
+                    LA24_0 = self.input.LA(1)\r
+\r
+                    if (LA24_0 == 27) :\r
+                        LA24_1 = self.input.LA(2)\r
+\r
+                        if (LA24_1 == IDENTIFIER) :\r
+                            alt24 = 1\r
+\r
+\r
+\r
+\r
+                    if alt24 == 1:\r
+                        # C.g:273:16: ',' enumerator\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_enumerator_list680)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_enumerator_in_enumerator_list682)\r
+                        self.enumerator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop24\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 19, enumerator_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end enumerator_list\r
+\r
+\r
+    # $ANTLR start enumerator\r
+    # C.g:276:1: enumerator : IDENTIFIER ( '=' constant_expression )? ;\r
+    def enumerator(self, ):\r
+\r
+        enumerator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 20):\r
+                    return\r
+\r
+                # C.g:277:2: ( IDENTIFIER ( '=' constant_expression )? )\r
+                # C.g:277:4: IDENTIFIER ( '=' constant_expression )?\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator695)\r
+                if self.failed:\r
+                    return\r
+                # C.g:277:15: ( '=' constant_expression )?\r
+                alt25 = 2\r
+                LA25_0 = self.input.LA(1)\r
+\r
+                if (LA25_0 == 28) :\r
+                    alt25 = 1\r
+                if alt25 == 1:\r
+                    # C.g:277:16: '=' constant_expression\r
+                    self.match(self.input, 28, self.FOLLOW_28_in_enumerator698)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_enumerator700)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 20, enumerator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end enumerator\r
+\r
+\r
+    # $ANTLR start type_qualifier\r
+    # C.g:280:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' | 'PACKED' );\r
+    def type_qualifier(self, ):\r
+\r
+        type_qualifier_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 21):\r
+                    return\r
+\r
+                # C.g:281:2: ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' | 'PACKED' )\r
+                # C.g:\r
+                if (49 <= self.input.LA(1) <= 61):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_type_qualifier0\r
+                        )\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 21, type_qualifier_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end type_qualifier\r
+\r
+    class declarator_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start declarator\r
+    # C.g:296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );\r
+    def declarator(self, ):\r
+\r
+        retval = self.declarator_return()\r
+        retval.start = self.input.LT(1)\r
+        declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 22):\r
+                    return retval\r
+\r
+                # C.g:297:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer )\r
+                alt30 = 2\r
+                LA30_0 = self.input.LA(1)\r
+\r
+                if (LA30_0 == 66) :\r
+                    LA30_1 = self.input.LA(2)\r
+\r
+                    if (self.synpred66()) :\r
+                        alt30 = 1\r
+                    elif (True) :\r
+                        alt30 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
+\r
+                        nvae = NoViableAltException("296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA30_0 == IDENTIFIER or (58 <= LA30_0 <= 60) or LA30_0 == 62) :\r
+                    alt30 = 1\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
+\r
+                    nvae = NoViableAltException("296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt30 == 1:\r
+                    # C.g:297:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator\r
+                    # C.g:297:4: ( pointer )?\r
+                    alt26 = 2\r
+                    LA26_0 = self.input.LA(1)\r
+\r
+                    if (LA26_0 == 66) :\r
+                        alt26 = 1\r
+                    if alt26 == 1:\r
+                        # C.g:0:0: pointer\r
+                        self.following.append(self.FOLLOW_pointer_in_declarator784)\r
+                        self.pointer()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    # C.g:297:13: ( 'EFIAPI' )?\r
+                    alt27 = 2\r
+                    LA27_0 = self.input.LA(1)\r
+\r
+                    if (LA27_0 == 58) :\r
+                        alt27 = 1\r
+                    if alt27 == 1:\r
+                        # C.g:297:14: 'EFIAPI'\r
+                        self.match(self.input, 58, self.FOLLOW_58_in_declarator788)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    # C.g:297:25: ( 'EFI_BOOTSERVICE' )?\r
+                    alt28 = 2\r
+                    LA28_0 = self.input.LA(1)\r
+\r
+                    if (LA28_0 == 59) :\r
+                        alt28 = 1\r
+                    if alt28 == 1:\r
+                        # C.g:297:26: 'EFI_BOOTSERVICE'\r
+                        self.match(self.input, 59, self.FOLLOW_59_in_declarator793)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    # C.g:297:46: ( 'EFI_RUNTIMESERVICE' )?\r
+                    alt29 = 2\r
+                    LA29_0 = self.input.LA(1)\r
+\r
+                    if (LA29_0 == 60) :\r
+                        alt29 = 1\r
+                    if alt29 == 1:\r
+                        # C.g:297:47: 'EFI_RUNTIMESERVICE'\r
+                        self.match(self.input, 60, self.FOLLOW_60_in_declarator798)\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+\r
+                    self.following.append(self.FOLLOW_direct_declarator_in_declarator802)\r
+                    self.direct_declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt30 == 2:\r
+                    # C.g:299:4: pointer\r
+                    self.following.append(self.FOLLOW_pointer_in_declarator808)\r
+                    self.pointer()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 22, declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end declarator\r
+\r
+\r
+    # $ANTLR start direct_declarator\r
+    # C.g:302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );\r
+    def direct_declarator(self, ):\r
+\r
+        direct_declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23):\r
+                    return\r
+\r
+                # C.g:303:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ )\r
+                alt34 = 2\r
+                LA34_0 = self.input.LA(1)\r
+\r
+                if (LA34_0 == IDENTIFIER) :\r
+                    alt34 = 1\r
+                elif (LA34_0 == 62) :\r
+                    alt34 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt34 == 1:\r
+                    # C.g:303:4: IDENTIFIER ( declarator_suffix )*\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator819)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:303:15: ( declarator_suffix )*\r
+                    while True: #loop31\r
+                        alt31 = 2\r
+                        LA31_0 = self.input.LA(1)\r
+\r
+                        if (LA31_0 == 62) :\r
+                            LA31 = self.input.LA(2)\r
+                            if LA31 == 63:\r
+                                LA31_30 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 58:\r
+                                LA31_31 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 66:\r
+                                LA31_32 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 59:\r
+                                LA31_33 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 60:\r
+                                LA31_34 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == IDENTIFIER:\r
+                                LA31_35 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33:\r
+                                LA31_37 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 34:\r
+                                LA31_38 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 35:\r
+                                LA31_39 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 36:\r
+                                LA31_40 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 37:\r
+                                LA31_41 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 38:\r
+                                LA31_42 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 39:\r
+                                LA31_43 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 40:\r
+                                LA31_44 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 41:\r
+                                LA31_45 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 42:\r
+                                LA31_46 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 45 or LA31 == 46:\r
+                                LA31_47 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 48:\r
+                                LA31_48 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 49 or LA31 == 50 or LA31 == 51 or LA31 == 52 or LA31 == 53 or LA31 == 54 or LA31 == 55 or LA31 == 56 or LA31 == 57 or LA31 == 61:\r
+                                LA31_49 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+\r
+                        elif (LA31_0 == 64) :\r
+                            LA31 = self.input.LA(2)\r
+                            if LA31 == 65:\r
+                                LA31_51 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 62:\r
+                                LA31_52 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == IDENTIFIER:\r
+                                LA31_53 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == HEX_LITERAL:\r
+                                LA31_54 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == OCTAL_LITERAL:\r
+                                LA31_55 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == DECIMAL_LITERAL:\r
+                                LA31_56 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == CHARACTER_LITERAL:\r
+                                LA31_57 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == STRING_LITERAL:\r
+                                LA31_58 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == FLOATING_POINT_LITERAL:\r
+                                LA31_59 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 72:\r
+                                LA31_60 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 73:\r
+                                LA31_61 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 66 or LA31 == 68 or LA31 == 69 or LA31 == 77 or LA31 == 78 or LA31 == 79:\r
+                                LA31_62 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+                            elif LA31 == 74:\r
+                                LA31_63 = self.input.LA(3)\r
+\r
+                                if (self.synpred67()) :\r
+                                    alt31 = 1\r
+\r
+\r
+\r
+\r
+\r
+                        if alt31 == 1:\r
+                            # C.g:0:0: declarator_suffix\r
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator821)\r
+                            self.declarator_suffix()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            break #loop31\r
+\r
+\r
+\r
+\r
+                elif alt34 == 2:\r
+                    # C.g:304:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator827)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:304:8: ( 'EFIAPI' )?\r
+                    alt32 = 2\r
+                    LA32_0 = self.input.LA(1)\r
+\r
+                    if (LA32_0 == 58) :\r
+                        LA32_1 = self.input.LA(2)\r
+\r
+                        if (self.synpred69()) :\r
+                            alt32 = 1\r
+                    if alt32 == 1:\r
+                        # C.g:304:9: 'EFIAPI'\r
+                        self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator830)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    self.following.append(self.FOLLOW_declarator_in_direct_declarator834)\r
+                    self.declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_direct_declarator836)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:304:35: ( declarator_suffix )+\r
+                    cnt33 = 0\r
+                    while True: #loop33\r
+                        alt33 = 2\r
+                        LA33_0 = self.input.LA(1)\r
+\r
+                        if (LA33_0 == 62) :\r
+                            LA33 = self.input.LA(2)\r
+                            if LA33 == 63:\r
+                                LA33_30 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 58:\r
+                                LA33_31 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 66:\r
+                                LA33_32 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 59:\r
+                                LA33_33 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 60:\r
+                                LA33_34 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == IDENTIFIER:\r
+                                LA33_35 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 29 or LA33 == 30 or LA33 == 31 or LA33 == 32 or LA33 == 33:\r
+                                LA33_37 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 34:\r
+                                LA33_38 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 35:\r
+                                LA33_39 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 36:\r
+                                LA33_40 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 37:\r
+                                LA33_41 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 38:\r
+                                LA33_42 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 39:\r
+                                LA33_43 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 40:\r
+                                LA33_44 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 41:\r
+                                LA33_45 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 42:\r
+                                LA33_46 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 45 or LA33 == 46:\r
+                                LA33_47 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 48:\r
+                                LA33_48 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 49 or LA33 == 50 or LA33 == 51 or LA33 == 52 or LA33 == 53 or LA33 == 54 or LA33 == 55 or LA33 == 56 or LA33 == 57 or LA33 == 61:\r
+                                LA33_49 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+\r
+                        elif (LA33_0 == 64) :\r
+                            LA33 = self.input.LA(2)\r
+                            if LA33 == 65:\r
+                                LA33_51 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 62:\r
+                                LA33_52 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == IDENTIFIER:\r
+                                LA33_53 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == HEX_LITERAL:\r
+                                LA33_54 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == OCTAL_LITERAL:\r
+                                LA33_55 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == DECIMAL_LITERAL:\r
+                                LA33_56 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == CHARACTER_LITERAL:\r
+                                LA33_57 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == STRING_LITERAL:\r
+                                LA33_58 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == FLOATING_POINT_LITERAL:\r
+                                LA33_59 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 72:\r
+                                LA33_60 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 73:\r
+                                LA33_61 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 66 or LA33 == 68 or LA33 == 69 or LA33 == 77 or LA33 == 78 or LA33 == 79:\r
+                                LA33_62 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+                            elif LA33 == 74:\r
+                                LA33_63 = self.input.LA(3)\r
+\r
+                                if (self.synpred70()) :\r
+                                    alt33 = 1\r
+\r
+\r
+\r
+\r
+\r
+                        if alt33 == 1:\r
+                            # C.g:0:0: declarator_suffix\r
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator838)\r
+                            self.declarator_suffix()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            if cnt33 >= 1:\r
+                                break #loop33\r
+\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            eee = EarlyExitException(33, self.input)\r
+                            raise eee\r
+\r
+                        cnt33 += 1\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 23, direct_declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end direct_declarator\r
+\r
+\r
+    # $ANTLR start declarator_suffix\r
+    # C.g:307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );\r
+    def declarator_suffix(self, ):\r
+\r
+        declarator_suffix_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 24):\r
+                    return\r
+\r
+                # C.g:308:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )\r
+                alt35 = 5\r
+                LA35_0 = self.input.LA(1)\r
+\r
+                if (LA35_0 == 64) :\r
+                    LA35_1 = self.input.LA(2)\r
+\r
+                    if (LA35_1 == 65) :\r
+                        alt35 = 2\r
+                    elif ((IDENTIFIER <= LA35_1 <= FLOATING_POINT_LITERAL) or LA35_1 == 62 or LA35_1 == 66 or (68 <= LA35_1 <= 69) or (72 <= LA35_1 <= 74) or (77 <= LA35_1 <= 79)) :\r
+                        alt35 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA35_0 == 62) :\r
+                    LA35 = self.input.LA(2)\r
+                    if LA35 == 63:\r
+                        alt35 = 5\r
+                    elif LA35 == 29 or LA35 == 30 or LA35 == 31 or LA35 == 32 or LA35 == 33 or LA35 == 34 or LA35 == 35 or LA35 == 36 or LA35 == 37 or LA35 == 38 or LA35 == 39 or LA35 == 40 or LA35 == 41 or LA35 == 42 or LA35 == 45 or LA35 == 46 or LA35 == 48 or LA35 == 49 or LA35 == 50 or LA35 == 51 or LA35 == 52 or LA35 == 53 or LA35 == 54 or LA35 == 55 or LA35 == 56 or LA35 == 57 or LA35 == 58 or LA35 == 59 or LA35 == 60 or LA35 == 61 or LA35 == 66:\r
+                        alt35 = 3\r
+                    elif LA35 == IDENTIFIER:\r
+                        LA35_29 = self.input.LA(3)\r
+\r
+                        if (self.synpred73()) :\r
+                            alt35 = 3\r
+                        elif (self.synpred74()) :\r
+                            alt35 = 4\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 29, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 2, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt35 == 1:\r
+                    # C.g:308:6: '[' constant_expression ']'\r
+                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix852)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix854)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 65, self.FOLLOW_65_in_declarator_suffix856)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt35 == 2:\r
+                    # C.g:309:9: '[' ']'\r
+                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix866)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 65, self.FOLLOW_65_in_declarator_suffix868)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt35 == 3:\r
+                    # C.g:310:9: '(' parameter_type_list ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix878)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix880)\r
+                    self.parameter_type_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix882)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt35 == 4:\r
+                    # C.g:311:9: '(' identifier_list ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix892)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix894)\r
+                    self.identifier_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix896)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt35 == 5:\r
+                    # C.g:312:9: '(' ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix906)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix908)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 24, declarator_suffix_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end declarator_suffix\r
+\r
+\r
+    # $ANTLR start pointer\r
+    # C.g:315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );\r
+    def pointer(self, ):\r
+\r
+        pointer_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 25):\r
+                    return\r
+\r
+                # C.g:316:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' )\r
+                alt38 = 3\r
+                LA38_0 = self.input.LA(1)\r
+\r
+                if (LA38_0 == 66) :\r
+                    LA38 = self.input.LA(2)\r
+                    if LA38 == 66:\r
+                        LA38_2 = self.input.LA(3)\r
+\r
+                        if (self.synpred78()) :\r
+                            alt38 = 2\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 2, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == 58:\r
+                        LA38_3 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 3, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == 59:\r
+                        LA38_4 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 4, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == 60:\r
+                        LA38_5 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 5, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == EOF or LA38 == IDENTIFIER or LA38 == 25 or LA38 == 26 or LA38 == 27 or LA38 == 28 or LA38 == 29 or LA38 == 30 or LA38 == 31 or LA38 == 32 or LA38 == 33 or LA38 == 34 or LA38 == 35 or LA38 == 36 or LA38 == 37 or LA38 == 38 or LA38 == 39 or LA38 == 40 or LA38 == 41 or LA38 == 42 or LA38 == 43 or LA38 == 45 or LA38 == 46 or LA38 == 47 or LA38 == 48 or LA38 == 62 or LA38 == 63 or LA38 == 64:\r
+                        alt38 = 3\r
+                    elif LA38 == 53:\r
+                        LA38_21 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 21, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA38 == 49 or LA38 == 50 or LA38 == 51 or LA38 == 52 or LA38 == 54 or LA38 == 55 or LA38 == 56 or LA38 == 57 or LA38 == 61:\r
+                        LA38_29 = self.input.LA(3)\r
+\r
+                        if (self.synpred77()) :\r
+                            alt38 = 1\r
+                        elif (True) :\r
+                            alt38 = 3\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 29, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt38 == 1:\r
+                    # C.g:316:4: '*' ( type_qualifier )+ ( pointer )?\r
+                    self.match(self.input, 66, self.FOLLOW_66_in_pointer919)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:316:8: ( type_qualifier )+\r
+                    cnt36 = 0\r
+                    while True: #loop36\r
+                        alt36 = 2\r
+                        LA36 = self.input.LA(1)\r
+                        if LA36 == 58:\r
+                            LA36_2 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+                        elif LA36 == 59:\r
+                            LA36_3 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+                        elif LA36 == 60:\r
+                            LA36_4 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+                        elif LA36 == 53:\r
+                            LA36_20 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+                        elif LA36 == 49 or LA36 == 50 or LA36 == 51 or LA36 == 52 or LA36 == 54 or LA36 == 55 or LA36 == 56 or LA36 == 57 or LA36 == 61:\r
+                            LA36_28 = self.input.LA(2)\r
+\r
+                            if (self.synpred75()) :\r
+                                alt36 = 1\r
+\r
+\r
+\r
+                        if alt36 == 1:\r
+                            # C.g:0:0: type_qualifier\r
+                            self.following.append(self.FOLLOW_type_qualifier_in_pointer921)\r
+                            self.type_qualifier()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            if cnt36 >= 1:\r
+                                break #loop36\r
+\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            eee = EarlyExitException(36, self.input)\r
+                            raise eee\r
+\r
+                        cnt36 += 1\r
+\r
+\r
+                    # C.g:316:24: ( pointer )?\r
+                    alt37 = 2\r
+                    LA37_0 = self.input.LA(1)\r
+\r
+                    if (LA37_0 == 66) :\r
+                        LA37_1 = self.input.LA(2)\r
+\r
+                        if (self.synpred76()) :\r
+                            alt37 = 1\r
+                    if alt37 == 1:\r
+                        # C.g:0:0: pointer\r
+                        self.following.append(self.FOLLOW_pointer_in_pointer924)\r
+                        self.pointer()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt38 == 2:\r
+                    # C.g:317:4: '*' pointer\r
+                    self.match(self.input, 66, self.FOLLOW_66_in_pointer930)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_pointer_in_pointer932)\r
+                    self.pointer()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt38 == 3:\r
+                    # C.g:318:4: '*'\r
+                    self.match(self.input, 66, self.FOLLOW_66_in_pointer937)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 25, pointer_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end pointer\r
+\r
+\r
+    # $ANTLR start parameter_type_list\r
+    # C.g:321:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ;\r
+    def parameter_type_list(self, ):\r
+\r
+        parameter_type_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 26):\r
+                    return\r
+\r
+                # C.g:322:2: ( parameter_list ( ',' ( 'OPTIONAL' )? '...' )? )\r
+                # C.g:322:4: parameter_list ( ',' ( 'OPTIONAL' )? '...' )?\r
+                self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list948)\r
+                self.parameter_list()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:322:19: ( ',' ( 'OPTIONAL' )? '...' )?\r
+                alt40 = 2\r
+                LA40_0 = self.input.LA(1)\r
+\r
+                if (LA40_0 == 27) :\r
+                    alt40 = 1\r
+                if alt40 == 1:\r
+                    # C.g:322:20: ',' ( 'OPTIONAL' )? '...'\r
+                    self.match(self.input, 27, self.FOLLOW_27_in_parameter_type_list951)\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:322:24: ( 'OPTIONAL' )?\r
+                    alt39 = 2\r
+                    LA39_0 = self.input.LA(1)\r
+\r
+                    if (LA39_0 == 53) :\r
+                        alt39 = 1\r
+                    if alt39 == 1:\r
+                        # C.g:322:25: 'OPTIONAL'\r
+                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_type_list954)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    self.match(self.input, 67, self.FOLLOW_67_in_parameter_type_list958)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 26, parameter_type_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end parameter_type_list\r
+\r
+\r
+    # $ANTLR start parameter_list\r
+    # C.g:325:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ;\r
+    def parameter_list(self, ):\r
+\r
+        parameter_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 27):\r
+                    return\r
+\r
+                # C.g:326:2: ( parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* )\r
+                # C.g:326:4: parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )*\r
+                self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list971)\r
+                self.parameter_declaration()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:326:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )*\r
+                while True: #loop42\r
+                    alt42 = 2\r
+                    LA42_0 = self.input.LA(1)\r
+\r
+                    if (LA42_0 == 27) :\r
+                        LA42_1 = self.input.LA(2)\r
+\r
+                        if (LA42_1 == 53) :\r
+                            LA42_3 = self.input.LA(3)\r
+\r
+                            if (self.synpred82()) :\r
+                                alt42 = 1\r
+\r
+\r
+                        elif (LA42_1 == IDENTIFIER or (29 <= LA42_1 <= 42) or (45 <= LA42_1 <= 46) or (48 <= LA42_1 <= 52) or (54 <= LA42_1 <= 61) or LA42_1 == 66) :\r
+                            alt42 = 1\r
+\r
+\r
+\r
+\r
+                    if alt42 == 1:\r
+                        # C.g:326:27: ',' ( 'OPTIONAL' )? parameter_declaration\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_parameter_list974)\r
+                        if self.failed:\r
+                            return\r
+                        # C.g:326:31: ( 'OPTIONAL' )?\r
+                        alt41 = 2\r
+                        LA41_0 = self.input.LA(1)\r
+\r
+                        if (LA41_0 == 53) :\r
+                            LA41_1 = self.input.LA(2)\r
+\r
+                            if (self.synpred81()) :\r
+                                alt41 = 1\r
+                        if alt41 == 1:\r
+                            # C.g:326:32: 'OPTIONAL'\r
+                            self.match(self.input, 53, self.FOLLOW_53_in_parameter_list977)\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+\r
+                        self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list981)\r
+                        self.parameter_declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop42\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 27, parameter_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end parameter_list\r
+\r
+\r
+    # $ANTLR start parameter_declaration\r
+    # C.g:329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );\r
+    def parameter_declaration(self, ):\r
+\r
+        parameter_declaration_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 28):\r
+                    return\r
+\r
+                # C.g:330:2: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER )\r
+                alt46 = 2\r
+                LA46 = self.input.LA(1)\r
+                if LA46 == 29 or LA46 == 30 or LA46 == 31 or LA46 == 32 or LA46 == 33 or LA46 == 34 or LA46 == 35 or LA46 == 36 or LA46 == 37 or LA46 == 38 or LA46 == 39 or LA46 == 40 or LA46 == 41 or LA46 == 42 or LA46 == 45 or LA46 == 46 or LA46 == 48 or LA46 == 49 or LA46 == 50 or LA46 == 51 or LA46 == 52 or LA46 == 53 or LA46 == 54 or LA46 == 55 or LA46 == 56 or LA46 == 57 or LA46 == 58 or LA46 == 59 or LA46 == 60 or LA46 == 61:\r
+                    alt46 = 1\r
+                elif LA46 == IDENTIFIER:\r
+                    LA46_13 = self.input.LA(2)\r
+\r
+                    if (self.synpred86()) :\r
+                        alt46 = 1\r
+                    elif (True) :\r
+                        alt46 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 13, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA46 == 66:\r
+                    alt46 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt46 == 1:\r
+                    # C.g:330:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )?\r
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration994)\r
+                    self.declaration_specifiers()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:330:27: ( declarator | abstract_declarator )*\r
+                    while True: #loop43\r
+                        alt43 = 3\r
+                        LA43 = self.input.LA(1)\r
+                        if LA43 == 66:\r
+                            LA43_5 = self.input.LA(2)\r
+\r
+                            if (self.synpred83()) :\r
+                                alt43 = 1\r
+                            elif (self.synpred84()) :\r
+                                alt43 = 2\r
+\r
+\r
+                        elif LA43 == IDENTIFIER or LA43 == 58 or LA43 == 59 or LA43 == 60:\r
+                            alt43 = 1\r
+                        elif LA43 == 62:\r
+                            LA43 = self.input.LA(2)\r
+                            if LA43 == 29 or LA43 == 30 or LA43 == 31 or LA43 == 32 or LA43 == 33 or LA43 == 34 or LA43 == 35 or LA43 == 36 or LA43 == 37 or LA43 == 38 or LA43 == 39 or LA43 == 40 or LA43 == 41 or LA43 == 42 or LA43 == 45 or LA43 == 46 or LA43 == 48 or LA43 == 49 or LA43 == 50 or LA43 == 51 or LA43 == 52 or LA43 == 53 or LA43 == 54 or LA43 == 55 or LA43 == 56 or LA43 == 57 or LA43 == 61 or LA43 == 63 or LA43 == 64:\r
+                                alt43 = 2\r
+                            elif LA43 == IDENTIFIER:\r
+                                LA43_37 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 58:\r
+                                LA43_38 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 66:\r
+                                LA43_39 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 59:\r
+                                LA43_40 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 60:\r
+                                LA43_41 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+                            elif LA43 == 62:\r
+                                LA43_43 = self.input.LA(3)\r
+\r
+                                if (self.synpred83()) :\r
+                                    alt43 = 1\r
+                                elif (self.synpred84()) :\r
+                                    alt43 = 2\r
+\r
+\r
+\r
+                        elif LA43 == 64:\r
+                            alt43 = 2\r
+\r
+                        if alt43 == 1:\r
+                            # C.g:330:28: declarator\r
+                            self.following.append(self.FOLLOW_declarator_in_parameter_declaration997)\r
+                            self.declarator()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        elif alt43 == 2:\r
+                            # C.g:330:39: abstract_declarator\r
+                            self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration999)\r
+                            self.abstract_declarator()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            break #loop43\r
+\r
+\r
+                    # C.g:330:61: ( 'OPTIONAL' )?\r
+                    alt44 = 2\r
+                    LA44_0 = self.input.LA(1)\r
+\r
+                    if (LA44_0 == 53) :\r
+                        alt44 = 1\r
+                    if alt44 == 1:\r
+                        # C.g:330:62: 'OPTIONAL'\r
+                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_declaration1004)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt46 == 2:\r
+                    # C.g:332:4: ( pointer )* IDENTIFIER\r
+                    # C.g:332:4: ( pointer )*\r
+                    while True: #loop45\r
+                        alt45 = 2\r
+                        LA45_0 = self.input.LA(1)\r
+\r
+                        if (LA45_0 == 66) :\r
+                            alt45 = 1\r
+\r
+\r
+                        if alt45 == 1:\r
+                            # C.g:0:0: pointer\r
+                            self.following.append(self.FOLLOW_pointer_in_parameter_declaration1013)\r
+                            self.pointer()\r
+                            self.following.pop()\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            break #loop45\r
+\r
+\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration1016)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 28, parameter_declaration_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end parameter_declaration\r
+\r
+\r
+    # $ANTLR start identifier_list\r
+    # C.g:335:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ;\r
+    def identifier_list(self, ):\r
+\r
+        identifier_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 29):\r
+                    return\r
+\r
+                # C.g:336:2: ( IDENTIFIER ( ',' IDENTIFIER )* )\r
+                # C.g:336:4: IDENTIFIER ( ',' IDENTIFIER )*\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1027)\r
+                if self.failed:\r
+                    return\r
+                # C.g:337:2: ( ',' IDENTIFIER )*\r
+                while True: #loop47\r
+                    alt47 = 2\r
+                    LA47_0 = self.input.LA(1)\r
+\r
+                    if (LA47_0 == 27) :\r
+                        alt47 = 1\r
+\r
+\r
+                    if alt47 == 1:\r
+                        # C.g:337:3: ',' IDENTIFIER\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1031)\r
+                        if self.failed:\r
+                            return\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1033)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop47\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 29, identifier_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end identifier_list\r
+\r
+\r
+    # $ANTLR start type_name\r
+    # C.g:340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );\r
+    def type_name(self, ):\r
+\r
+        type_name_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 30):\r
+                    return\r
+\r
+                # C.g:341:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id )\r
+                alt49 = 2\r
+                LA49_0 = self.input.LA(1)\r
+\r
+                if ((34 <= LA49_0 <= 42) or (45 <= LA49_0 <= 46) or (48 <= LA49_0 <= 61)) :\r
+                    alt49 = 1\r
+                elif (LA49_0 == IDENTIFIER) :\r
+                    LA49_13 = self.input.LA(2)\r
+\r
+                    if (self.synpred90()) :\r
+                        alt49 = 1\r
+                    elif (True) :\r
+                        alt49 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 13, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt49 == 1:\r
+                    # C.g:341:4: specifier_qualifier_list ( abstract_declarator )?\r
+                    self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1046)\r
+                    self.specifier_qualifier_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:341:29: ( abstract_declarator )?\r
+                    alt48 = 2\r
+                    LA48_0 = self.input.LA(1)\r
+\r
+                    if (LA48_0 == 62 or LA48_0 == 64 or LA48_0 == 66) :\r
+                        alt48 = 1\r
+                    if alt48 == 1:\r
+                        # C.g:0:0: abstract_declarator\r
+                        self.following.append(self.FOLLOW_abstract_declarator_in_type_name1048)\r
+                        self.abstract_declarator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt49 == 2:\r
+                    # C.g:342:4: type_id\r
+                    self.following.append(self.FOLLOW_type_id_in_type_name1054)\r
+                    self.type_id()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 30, type_name_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end type_name\r
+\r
+\r
+    # $ANTLR start abstract_declarator\r
+    # C.g:345:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );\r
+    def abstract_declarator(self, ):\r
+\r
+        abstract_declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 31):\r
+                    return\r
+\r
+                # C.g:346:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator )\r
+                alt51 = 2\r
+                LA51_0 = self.input.LA(1)\r
+\r
+                if (LA51_0 == 66) :\r
+                    alt51 = 1\r
+                elif (LA51_0 == 62 or LA51_0 == 64) :\r
+                    alt51 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("345:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 51, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt51 == 1:\r
+                    # C.g:346:4: pointer ( direct_abstract_declarator )?\r
+                    self.following.append(self.FOLLOW_pointer_in_abstract_declarator1065)\r
+                    self.pointer()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:346:12: ( direct_abstract_declarator )?\r
+                    alt50 = 2\r
+                    LA50_0 = self.input.LA(1)\r
+\r
+                    if (LA50_0 == 62) :\r
+                        LA50 = self.input.LA(2)\r
+                        if LA50 == 63:\r
+                            LA50_12 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 58:\r
+                            LA50_13 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 66:\r
+                            LA50_14 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 59:\r
+                            LA50_15 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 60:\r
+                            LA50_16 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == IDENTIFIER:\r
+                            LA50_17 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 62:\r
+                            LA50_18 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 64:\r
+                            LA50_19 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 29 or LA50 == 30 or LA50 == 31 or LA50 == 32 or LA50 == 33:\r
+                            LA50_20 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 34:\r
+                            LA50_21 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 35:\r
+                            LA50_22 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 36:\r
+                            LA50_23 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 37:\r
+                            LA50_24 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 38:\r
+                            LA50_25 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 39:\r
+                            LA50_26 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 40:\r
+                            LA50_27 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 41:\r
+                            LA50_28 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 42:\r
+                            LA50_29 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 45 or LA50 == 46:\r
+                            LA50_30 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 48:\r
+                            LA50_31 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 49 or LA50 == 50 or LA50 == 51 or LA50 == 52 or LA50 == 53 or LA50 == 54 or LA50 == 55 or LA50 == 56 or LA50 == 57 or LA50 == 61:\r
+                            LA50_32 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                    elif (LA50_0 == 64) :\r
+                        LA50 = self.input.LA(2)\r
+                        if LA50 == 65:\r
+                            LA50_33 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 62:\r
+                            LA50_34 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == IDENTIFIER:\r
+                            LA50_35 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == HEX_LITERAL:\r
+                            LA50_36 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == OCTAL_LITERAL:\r
+                            LA50_37 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == DECIMAL_LITERAL:\r
+                            LA50_38 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == CHARACTER_LITERAL:\r
+                            LA50_39 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == STRING_LITERAL:\r
+                            LA50_40 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == FLOATING_POINT_LITERAL:\r
+                            LA50_41 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 72:\r
+                            LA50_42 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 73:\r
+                            LA50_43 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 66 or LA50 == 68 or LA50 == 69 or LA50 == 77 or LA50 == 78 or LA50 == 79:\r
+                            LA50_44 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                        elif LA50 == 74:\r
+                            LA50_45 = self.input.LA(3)\r
+\r
+                            if (self.synpred91()) :\r
+                                alt50 = 1\r
+                    if alt50 == 1:\r
+                        # C.g:0:0: direct_abstract_declarator\r
+                        self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1067)\r
+                        self.direct_abstract_declarator()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt51 == 2:\r
+                    # C.g:347:4: direct_abstract_declarator\r
+                    self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1073)\r
+                    self.direct_abstract_declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 31, abstract_declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end abstract_declarator\r
+\r
+\r
+    # $ANTLR start direct_abstract_declarator\r
+    # C.g:350:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ;\r
+    def direct_abstract_declarator(self, ):\r
+\r
+        direct_abstract_declarator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 32):\r
+                    return\r
+\r
+                # C.g:351:2: ( ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* )\r
+                # C.g:351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )*\r
+                # C.g:351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )\r
+                alt52 = 2\r
+                LA52_0 = self.input.LA(1)\r
+\r
+                if (LA52_0 == 62) :\r
+                    LA52 = self.input.LA(2)\r
+                    if LA52 == IDENTIFIER or LA52 == 29 or LA52 == 30 or LA52 == 31 or LA52 == 32 or LA52 == 33 or LA52 == 34 or LA52 == 35 or LA52 == 36 or LA52 == 37 or LA52 == 38 or LA52 == 39 or LA52 == 40 or LA52 == 41 or LA52 == 42 or LA52 == 45 or LA52 == 46 or LA52 == 48 or LA52 == 49 or LA52 == 50 or LA52 == 51 or LA52 == 52 or LA52 == 53 or LA52 == 54 or LA52 == 55 or LA52 == 56 or LA52 == 57 or LA52 == 58 or LA52 == 59 or LA52 == 60 or LA52 == 61 or LA52 == 63:\r
+                        alt52 = 2\r
+                    elif LA52 == 66:\r
+                        LA52_18 = self.input.LA(3)\r
+\r
+                        if (self.synpred93()) :\r
+                            alt52 = 1\r
+                        elif (True) :\r
+                            alt52 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 18, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA52 == 62 or LA52 == 64:\r
+                        alt52 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA52_0 == 64) :\r
+                    alt52 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt52 == 1:\r
+                    # C.g:351:6: '(' abstract_declarator ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1086)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1088)\r
+                    self.abstract_declarator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_direct_abstract_declarator1090)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt52 == 2:\r
+                    # C.g:351:36: abstract_declarator_suffix\r
+                    self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1094)\r
+                    self.abstract_declarator_suffix()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+                # C.g:351:65: ( abstract_declarator_suffix )*\r
+                while True: #loop53\r
+                    alt53 = 2\r
+                    LA53_0 = self.input.LA(1)\r
+\r
+                    if (LA53_0 == 62) :\r
+                        LA53 = self.input.LA(2)\r
+                        if LA53 == 63:\r
+                            LA53_12 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 58:\r
+                            LA53_13 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 66:\r
+                            LA53_14 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 59:\r
+                            LA53_15 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 60:\r
+                            LA53_16 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == IDENTIFIER:\r
+                            LA53_17 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 29 or LA53 == 30 or LA53 == 31 or LA53 == 32 or LA53 == 33:\r
+                            LA53_19 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 34:\r
+                            LA53_20 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 35:\r
+                            LA53_21 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 36:\r
+                            LA53_22 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 37:\r
+                            LA53_23 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 38:\r
+                            LA53_24 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 39:\r
+                            LA53_25 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 40:\r
+                            LA53_26 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 41:\r
+                            LA53_27 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 42:\r
+                            LA53_28 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 45 or LA53 == 46:\r
+                            LA53_29 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 48:\r
+                            LA53_30 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 49 or LA53 == 50 or LA53 == 51 or LA53 == 52 or LA53 == 53 or LA53 == 54 or LA53 == 55 or LA53 == 56 or LA53 == 57 or LA53 == 61:\r
+                            LA53_31 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+\r
+                    elif (LA53_0 == 64) :\r
+                        LA53 = self.input.LA(2)\r
+                        if LA53 == 65:\r
+                            LA53_33 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 62:\r
+                            LA53_34 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == IDENTIFIER:\r
+                            LA53_35 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == HEX_LITERAL:\r
+                            LA53_36 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == OCTAL_LITERAL:\r
+                            LA53_37 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == DECIMAL_LITERAL:\r
+                            LA53_38 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == CHARACTER_LITERAL:\r
+                            LA53_39 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == STRING_LITERAL:\r
+                            LA53_40 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == FLOATING_POINT_LITERAL:\r
+                            LA53_41 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 72:\r
+                            LA53_42 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 73:\r
+                            LA53_43 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 66 or LA53 == 68 or LA53 == 69 or LA53 == 77 or LA53 == 78 or LA53 == 79:\r
+                            LA53_44 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+                        elif LA53 == 74:\r
+                            LA53_45 = self.input.LA(3)\r
+\r
+                            if (self.synpred94()) :\r
+                                alt53 = 1\r
+\r
+\r
+\r
+\r
+\r
+                    if alt53 == 1:\r
+                        # C.g:0:0: abstract_declarator_suffix\r
+                        self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1098)\r
+                        self.abstract_declarator_suffix()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop53\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 32, direct_abstract_declarator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end direct_abstract_declarator\r
+\r
+\r
+    # $ANTLR start abstract_declarator_suffix\r
+    # C.g:354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );\r
+    def abstract_declarator_suffix(self, ):\r
+\r
+        abstract_declarator_suffix_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 33):\r
+                    return\r
+\r
+                # C.g:355:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' )\r
+                alt54 = 4\r
+                LA54_0 = self.input.LA(1)\r
+\r
+                if (LA54_0 == 64) :\r
+                    LA54_1 = self.input.LA(2)\r
+\r
+                    if (LA54_1 == 65) :\r
+                        alt54 = 1\r
+                    elif ((IDENTIFIER <= LA54_1 <= FLOATING_POINT_LITERAL) or LA54_1 == 62 or LA54_1 == 66 or (68 <= LA54_1 <= 69) or (72 <= LA54_1 <= 74) or (77 <= LA54_1 <= 79)) :\r
+                        alt54 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif (LA54_0 == 62) :\r
+                    LA54_2 = self.input.LA(2)\r
+\r
+                    if (LA54_2 == 63) :\r
+                        alt54 = 3\r
+                    elif (LA54_2 == IDENTIFIER or (29 <= LA54_2 <= 42) or (45 <= LA54_2 <= 46) or (48 <= LA54_2 <= 61) or LA54_2 == 66) :\r
+                        alt54 = 4\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 2, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt54 == 1:\r
+                    # C.g:355:4: '[' ']'\r
+                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1110)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 65, self.FOLLOW_65_in_abstract_declarator_suffix1112)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt54 == 2:\r
+                    # C.g:356:4: '[' constant_expression ']'\r
+                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1117)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1119)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 65, self.FOLLOW_65_in_abstract_declarator_suffix1121)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt54 == 3:\r
+                    # C.g:357:4: '(' ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1126)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1128)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt54 == 4:\r
+                    # C.g:358:4: '(' parameter_type_list ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1133)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1135)\r
+                    self.parameter_type_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1137)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 33, abstract_declarator_suffix_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end abstract_declarator_suffix\r
+\r
+\r
+    # $ANTLR start initializer\r
+    # C.g:361:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );\r
+    def initializer(self, ):\r
+\r
+        initializer_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 34):\r
+                    return\r
+\r
+                # C.g:363:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' )\r
+                alt56 = 2\r
+                LA56_0 = self.input.LA(1)\r
+\r
+                if ((IDENTIFIER <= LA56_0 <= FLOATING_POINT_LITERAL) or LA56_0 == 62 or LA56_0 == 66 or (68 <= LA56_0 <= 69) or (72 <= LA56_0 <= 74) or (77 <= LA56_0 <= 79)) :\r
+                    alt56 = 1\r
+                elif (LA56_0 == 43) :\r
+                    alt56 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("361:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 56, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt56 == 1:\r
+                    # C.g:363:4: assignment_expression\r
+                    self.following.append(self.FOLLOW_assignment_expression_in_initializer1150)\r
+                    self.assignment_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt56 == 2:\r
+                    # C.g:364:4: '{' initializer_list ( ',' )? '}'\r
+                    self.match(self.input, 43, self.FOLLOW_43_in_initializer1155)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_initializer_list_in_initializer1157)\r
+                    self.initializer_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:364:25: ( ',' )?\r
+                    alt55 = 2\r
+                    LA55_0 = self.input.LA(1)\r
+\r
+                    if (LA55_0 == 27) :\r
+                        alt55 = 1\r
+                    if alt55 == 1:\r
+                        # C.g:0:0: ','\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_initializer1159)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+                    self.match(self.input, 44, self.FOLLOW_44_in_initializer1162)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 34, initializer_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end initializer\r
+\r
+\r
+    # $ANTLR start initializer_list\r
+    # C.g:367:1: initializer_list : initializer ( ',' initializer )* ;\r
+    def initializer_list(self, ):\r
+\r
+        initializer_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 35):\r
+                    return\r
+\r
+                # C.g:368:2: ( initializer ( ',' initializer )* )\r
+                # C.g:368:4: initializer ( ',' initializer )*\r
+                self.following.append(self.FOLLOW_initializer_in_initializer_list1173)\r
+                self.initializer()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:368:16: ( ',' initializer )*\r
+                while True: #loop57\r
+                    alt57 = 2\r
+                    LA57_0 = self.input.LA(1)\r
+\r
+                    if (LA57_0 == 27) :\r
+                        LA57_1 = self.input.LA(2)\r
+\r
+                        if ((IDENTIFIER <= LA57_1 <= FLOATING_POINT_LITERAL) or LA57_1 == 43 or LA57_1 == 62 or LA57_1 == 66 or (68 <= LA57_1 <= 69) or (72 <= LA57_1 <= 74) or (77 <= LA57_1 <= 79)) :\r
+                            alt57 = 1\r
+\r
+\r
+\r
+\r
+                    if alt57 == 1:\r
+                        # C.g:368:17: ',' initializer\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1176)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_initializer_in_initializer_list1178)\r
+                        self.initializer()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop57\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 35, initializer_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end initializer_list\r
+\r
+    class argument_expression_list_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start argument_expression_list\r
+    # C.g:373:1: argument_expression_list : assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* ;\r
+    def argument_expression_list(self, ):\r
+\r
+        retval = self.argument_expression_list_return()\r
+        retval.start = self.input.LT(1)\r
+        argument_expression_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 36):\r
+                    return retval\r
+\r
+                # C.g:374:2: ( assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* )\r
+                # C.g:374:6: assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )*\r
+                self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1196)\r
+                self.assignment_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:374:28: ( 'OPTIONAL' )?\r
+                alt58 = 2\r
+                LA58_0 = self.input.LA(1)\r
+\r
+                if (LA58_0 == 53) :\r
+                    alt58 = 1\r
+                if alt58 == 1:\r
+                    # C.g:374:29: 'OPTIONAL'\r
+                    self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1199)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+\r
+                # C.g:374:42: ( ',' assignment_expression ( 'OPTIONAL' )? )*\r
+                while True: #loop60\r
+                    alt60 = 2\r
+                    LA60_0 = self.input.LA(1)\r
+\r
+                    if (LA60_0 == 27) :\r
+                        alt60 = 1\r
+\r
+\r
+                    if alt60 == 1:\r
+                        # C.g:374:43: ',' assignment_expression ( 'OPTIONAL' )?\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1204)\r
+                        if self.failed:\r
+                            return retval\r
+                        self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1206)\r
+                        self.assignment_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+                        # C.g:374:69: ( 'OPTIONAL' )?\r
+                        alt59 = 2\r
+                        LA59_0 = self.input.LA(1)\r
+\r
+                        if (LA59_0 == 53) :\r
+                            alt59 = 1\r
+                        if alt59 == 1:\r
+                            # C.g:374:70: 'OPTIONAL'\r
+                            self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1209)\r
+                            if self.failed:\r
+                                return retval\r
+\r
+\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop60\r
+\r
+\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 36, argument_expression_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end argument_expression_list\r
+\r
+\r
+    # $ANTLR start additive_expression\r
+    # C.g:377:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ;\r
+    def additive_expression(self, ):\r
+\r
+        additive_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 37):\r
+                    return\r
+\r
+                # C.g:378:2: ( ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* )\r
+                # C.g:378:4: ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )*\r
+                # C.g:378:4: ( multiplicative_expression )\r
+                # C.g:378:5: multiplicative_expression\r
+                self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1225)\r
+                self.multiplicative_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+                # C.g:378:32: ( '+' multiplicative_expression | '-' multiplicative_expression )*\r
+                while True: #loop61\r
+                    alt61 = 3\r
+                    LA61_0 = self.input.LA(1)\r
+\r
+                    if (LA61_0 == 68) :\r
+                        alt61 = 1\r
+                    elif (LA61_0 == 69) :\r
+                        alt61 = 2\r
+\r
+\r
+                    if alt61 == 1:\r
+                        # C.g:378:33: '+' multiplicative_expression\r
+                        self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1229)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1231)\r
+                        self.multiplicative_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt61 == 2:\r
+                        # C.g:378:65: '-' multiplicative_expression\r
+                        self.match(self.input, 69, self.FOLLOW_69_in_additive_expression1235)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1237)\r
+                        self.multiplicative_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop61\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 37, additive_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end additive_expression\r
+\r
+\r
+    # $ANTLR start multiplicative_expression\r
+    # C.g:381:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ;\r
+    def multiplicative_expression(self, ):\r
+\r
+        multiplicative_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 38):\r
+                    return\r
+\r
+                # C.g:382:2: ( ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* )\r
+                # C.g:382:4: ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*\r
+                # C.g:382:4: ( cast_expression )\r
+                # C.g:382:5: cast_expression\r
+                self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1251)\r
+                self.cast_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+                # C.g:382:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*\r
+                while True: #loop62\r
+                    alt62 = 4\r
+                    LA62 = self.input.LA(1)\r
+                    if LA62 == 66:\r
+                        alt62 = 1\r
+                    elif LA62 == 70:\r
+                        alt62 = 2\r
+                    elif LA62 == 71:\r
+                        alt62 = 3\r
+\r
+                    if alt62 == 1:\r
+                        # C.g:382:23: '*' cast_expression\r
+                        self.match(self.input, 66, self.FOLLOW_66_in_multiplicative_expression1255)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1257)\r
+                        self.cast_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt62 == 2:\r
+                        # C.g:382:45: '/' cast_expression\r
+                        self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1261)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1263)\r
+                        self.cast_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt62 == 3:\r
+                        # C.g:382:67: '%' cast_expression\r
+                        self.match(self.input, 71, self.FOLLOW_71_in_multiplicative_expression1267)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1269)\r
+                        self.cast_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop62\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 38, multiplicative_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end multiplicative_expression\r
+\r
+\r
+    # $ANTLR start cast_expression\r
+    # C.g:385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );\r
+    def cast_expression(self, ):\r
+\r
+        cast_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 39):\r
+                    return\r
+\r
+                # C.g:386:2: ( '(' type_name ')' cast_expression | unary_expression )\r
+                alt63 = 2\r
+                LA63_0 = self.input.LA(1)\r
+\r
+                if (LA63_0 == 62) :\r
+                    LA63 = self.input.LA(2)\r
+                    if LA63 == 34 or LA63 == 35 or LA63 == 36 or LA63 == 37 or LA63 == 38 or LA63 == 39 or LA63 == 40 or LA63 == 41 or LA63 == 42 or LA63 == 45 or LA63 == 46 or LA63 == 48 or LA63 == 49 or LA63 == 50 or LA63 == 51 or LA63 == 52 or LA63 == 53 or LA63 == 54 or LA63 == 55 or LA63 == 56 or LA63 == 57 or LA63 == 58 or LA63 == 59 or LA63 == 60 or LA63 == 61:\r
+                        alt63 = 1\r
+                    elif LA63 == IDENTIFIER:\r
+                        LA63_25 = self.input.LA(3)\r
+\r
+                        if (self.synpred109()) :\r
+                            alt63 = 1\r
+                        elif (True) :\r
+                            alt63 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 25, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA63 == HEX_LITERAL or LA63 == OCTAL_LITERAL or LA63 == DECIMAL_LITERAL or LA63 == CHARACTER_LITERAL or LA63 == STRING_LITERAL or LA63 == FLOATING_POINT_LITERAL or LA63 == 62 or LA63 == 66 or LA63 == 68 or LA63 == 69 or LA63 == 72 or LA63 == 73 or LA63 == 74 or LA63 == 77 or LA63 == 78 or LA63 == 79:\r
+                        alt63 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif ((IDENTIFIER <= LA63_0 <= FLOATING_POINT_LITERAL) or LA63_0 == 66 or (68 <= LA63_0 <= 69) or (72 <= LA63_0 <= 74) or (77 <= LA63_0 <= 79)) :\r
+                    alt63 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt63 == 1:\r
+                    # C.g:386:4: '(' type_name ')' cast_expression\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_cast_expression1282)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_type_name_in_cast_expression1284)\r
+                    self.type_name()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_cast_expression1286)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_cast_expression_in_cast_expression1288)\r
+                    self.cast_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt63 == 2:\r
+                    # C.g:387:4: unary_expression\r
+                    self.following.append(self.FOLLOW_unary_expression_in_cast_expression1293)\r
+                    self.unary_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 39, cast_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end cast_expression\r
+\r
+\r
+    # $ANTLR start unary_expression\r
+    # C.g:390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );\r
+    def unary_expression(self, ):\r
+\r
+        unary_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 40):\r
+                    return\r
+\r
+                # C.g:391:2: ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' )\r
+                alt64 = 6\r
+                LA64 = self.input.LA(1)\r
+                if LA64 == IDENTIFIER or LA64 == HEX_LITERAL or LA64 == OCTAL_LITERAL or LA64 == DECIMAL_LITERAL or LA64 == CHARACTER_LITERAL or LA64 == STRING_LITERAL or LA64 == FLOATING_POINT_LITERAL or LA64 == 62:\r
+                    alt64 = 1\r
+                elif LA64 == 72:\r
+                    alt64 = 2\r
+                elif LA64 == 73:\r
+                    alt64 = 3\r
+                elif LA64 == 66 or LA64 == 68 or LA64 == 69 or LA64 == 77 or LA64 == 78 or LA64 == 79:\r
+                    alt64 = 4\r
+                elif LA64 == 74:\r
+                    LA64_12 = self.input.LA(2)\r
+\r
+                    if (LA64_12 == 62) :\r
+                        LA64_13 = self.input.LA(3)\r
+\r
+                        if (self.synpred114()) :\r
+                            alt64 = 5\r
+                        elif (True) :\r
+                            alt64 = 6\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 13, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif ((IDENTIFIER <= LA64_12 <= FLOATING_POINT_LITERAL) or LA64_12 == 66 or (68 <= LA64_12 <= 69) or (72 <= LA64_12 <= 74) or (77 <= LA64_12 <= 79)) :\r
+                        alt64 = 5\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 12, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt64 == 1:\r
+                    # C.g:391:4: postfix_expression\r
+                    self.following.append(self.FOLLOW_postfix_expression_in_unary_expression1304)\r
+                    self.postfix_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 2:\r
+                    # C.g:392:4: '++' unary_expression\r
+                    self.match(self.input, 72, self.FOLLOW_72_in_unary_expression1309)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1311)\r
+                    self.unary_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 3:\r
+                    # C.g:393:4: '--' unary_expression\r
+                    self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1316)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1318)\r
+                    self.unary_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 4:\r
+                    # C.g:394:4: unary_operator cast_expression\r
+                    self.following.append(self.FOLLOW_unary_operator_in_unary_expression1323)\r
+                    self.unary_operator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_cast_expression_in_unary_expression1325)\r
+                    self.cast_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 5:\r
+                    # C.g:395:4: 'sizeof' unary_expression\r
+                    self.match(self.input, 74, self.FOLLOW_74_in_unary_expression1330)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1332)\r
+                    self.unary_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt64 == 6:\r
+                    # C.g:396:4: 'sizeof' '(' type_name ')'\r
+                    self.match(self.input, 74, self.FOLLOW_74_in_unary_expression1337)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_unary_expression1339)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_type_name_in_unary_expression1341)\r
+                    self.type_name()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_unary_expression1343)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 40, unary_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end unary_expression\r
+\r
+\r
+    # $ANTLR start postfix_expression\r
+    # C.g:399:1: postfix_expression : p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ;\r
+    def postfix_expression(self, ):\r
+        self.postfix_expression_stack.append(postfix_expression_scope())\r
+        postfix_expression_StartIndex = self.input.index()\r
+        a = None\r
+        b = None\r
+        x = None\r
+        y = None\r
+        z = None\r
+        p = None\r
+\r
+        c = None\r
+\r
+\r
+\r
+        self.postfix_expression_stack[-1].FuncCallText =  ''\r
+\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 41):\r
+                    return\r
+\r
+                # C.g:406:2: (p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* )\r
+                # C.g:406:6: p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )*\r
+                self.following.append(self.FOLLOW_primary_expression_in_postfix_expression1367)\r
+                p = self.primary_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                if self.backtracking == 0:\r
+                    self.postfix_expression_stack[-1].FuncCallText += self.input.toString(p.start, p.stop)\r
+\r
+                # C.g:407:9: ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )*\r
+                while True: #loop65\r
+                    alt65 = 10\r
+                    LA65 = self.input.LA(1)\r
+                    if LA65 == 66:\r
+                        LA65_1 = self.input.LA(2)\r
+\r
+                        if (LA65_1 == IDENTIFIER) :\r
+                            LA65_30 = self.input.LA(3)\r
+\r
+                            if (self.synpred120()) :\r
+                                alt65 = 6\r
+\r
+\r
+\r
+\r
+                    elif LA65 == 64:\r
+                        alt65 = 1\r
+                    elif LA65 == 62:\r
+                        LA65 = self.input.LA(2)\r
+                        if LA65 == 63:\r
+                            alt65 = 2\r
+                        elif LA65 == 29 or LA65 == 30 or LA65 == 31 or LA65 == 32 or LA65 == 33 or LA65 == 34 or LA65 == 35 or LA65 == 36 or LA65 == 37 or LA65 == 38 or LA65 == 39 or LA65 == 40 or LA65 == 41 or LA65 == 42 or LA65 == 45 or LA65 == 46 or LA65 == 48 or LA65 == 49 or LA65 == 50 or LA65 == 51 or LA65 == 52 or LA65 == 53 or LA65 == 54 or LA65 == 55 or LA65 == 56 or LA65 == 57 or LA65 == 58 or LA65 == 59 or LA65 == 60 or LA65 == 61:\r
+                            alt65 = 4\r
+                        elif LA65 == IDENTIFIER:\r
+                            LA65_55 = self.input.LA(3)\r
+\r
+                            if (self.synpred117()) :\r
+                                alt65 = 3\r
+                            elif (self.synpred118()) :\r
+                                alt65 = 4\r
+\r
+\r
+                        elif LA65 == 66:\r
+                            LA65_57 = self.input.LA(3)\r
+\r
+                            if (self.synpred117()) :\r
+                                alt65 = 3\r
+                            elif (self.synpred118()) :\r
+                                alt65 = 4\r
+\r
+\r
+                        elif LA65 == HEX_LITERAL or LA65 == OCTAL_LITERAL or LA65 == DECIMAL_LITERAL or LA65 == CHARACTER_LITERAL or LA65 == STRING_LITERAL or LA65 == FLOATING_POINT_LITERAL or LA65 == 62 or LA65 == 68 or LA65 == 69 or LA65 == 72 or LA65 == 73 or LA65 == 74 or LA65 == 77 or LA65 == 78 or LA65 == 79:\r
+                            alt65 = 3\r
+\r
+                    elif LA65 == 75:\r
+                        alt65 = 5\r
+                    elif LA65 == 76:\r
+                        alt65 = 7\r
+                    elif LA65 == 72:\r
+                        alt65 = 8\r
+                    elif LA65 == 73:\r
+                        alt65 = 9\r
+\r
+                    if alt65 == 1:\r
+                        # C.g:407:13: '[' expression ']'\r
+                        self.match(self.input, 64, self.FOLLOW_64_in_postfix_expression1383)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_expression_in_postfix_expression1385)\r
+                        self.expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+                        self.match(self.input, 65, self.FOLLOW_65_in_postfix_expression1387)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt65 == 2:\r
+                        # C.g:408:13: '(' a= ')'\r
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1401)\r
+                        if self.failed:\r
+                            return\r
+                        a = self.input.LT(1)\r
+                        self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1405)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, a.line, a.charPositionInLine, self.postfix_expression_stack[-1].FuncCallText, '')\r
+\r
+\r
+\r
+                    elif alt65 == 3:\r
+                        # C.g:409:13: '(' c= argument_expression_list b= ')'\r
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1420)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_argument_expression_list_in_postfix_expression1424)\r
+                        c = self.argument_expression_list()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+                        b = self.input.LT(1)\r
+                        self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1428)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, b.line, b.charPositionInLine, self.postfix_expression_stack[-1].FuncCallText, self.input.toString(c.start, c.stop))\r
+\r
+\r
+\r
+                    elif alt65 == 4:\r
+                        # C.g:410:13: '(' macro_parameter_list ')'\r
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1444)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_macro_parameter_list_in_postfix_expression1446)\r
+                        self.macro_parameter_list()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+                        self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1448)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt65 == 5:\r
+                        # C.g:411:13: '.' x= IDENTIFIER\r
+                        self.match(self.input, 75, self.FOLLOW_75_in_postfix_expression1462)\r
+                        if self.failed:\r
+                            return\r
+                        x = self.input.LT(1)\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1466)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.postfix_expression_stack[-1].FuncCallText += '.' + x.text\r
+\r
+\r
+\r
+                    elif alt65 == 6:\r
+                        # C.g:412:13: '*' y= IDENTIFIER\r
+                        self.match(self.input, 66, self.FOLLOW_66_in_postfix_expression1482)\r
+                        if self.failed:\r
+                            return\r
+                        y = self.input.LT(1)\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1486)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.postfix_expression_stack[-1].FuncCallText = y.text\r
+\r
+\r
+\r
+                    elif alt65 == 7:\r
+                        # C.g:413:13: '->' z= IDENTIFIER\r
+                        self.match(self.input, 76, self.FOLLOW_76_in_postfix_expression1502)\r
+                        if self.failed:\r
+                            return\r
+                        z = self.input.LT(1)\r
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1506)\r
+                        if self.failed:\r
+                            return\r
+                        if self.backtracking == 0:\r
+                            self.postfix_expression_stack[-1].FuncCallText += '->' + z.text\r
+\r
+\r
+\r
+                    elif alt65 == 8:\r
+                        # C.g:414:13: '++'\r
+                        self.match(self.input, 72, self.FOLLOW_72_in_postfix_expression1522)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    elif alt65 == 9:\r
+                        # C.g:415:13: '--'\r
+                        self.match(self.input, 73, self.FOLLOW_73_in_postfix_expression1536)\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop65\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 41, postfix_expression_StartIndex)\r
+\r
+            self.postfix_expression_stack.pop()\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end postfix_expression\r
+\r
+\r
+    # $ANTLR start macro_parameter_list\r
+    # C.g:419:1: macro_parameter_list : parameter_declaration ( ',' parameter_declaration )* ;\r
+    def macro_parameter_list(self, ):\r
+\r
+        macro_parameter_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 42):\r
+                    return\r
+\r
+                # C.g:420:2: ( parameter_declaration ( ',' parameter_declaration )* )\r
+                # C.g:420:4: parameter_declaration ( ',' parameter_declaration )*\r
+                self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1559)\r
+                self.parameter_declaration()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:420:26: ( ',' parameter_declaration )*\r
+                while True: #loop66\r
+                    alt66 = 2\r
+                    LA66_0 = self.input.LA(1)\r
+\r
+                    if (LA66_0 == 27) :\r
+                        alt66 = 1\r
+\r
+\r
+                    if alt66 == 1:\r
+                        # C.g:420:27: ',' parameter_declaration\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_macro_parameter_list1562)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1564)\r
+                        self.parameter_declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop66\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 42, macro_parameter_list_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end macro_parameter_list\r
+\r
+\r
+    # $ANTLR start unary_operator\r
+    # C.g:423:1: unary_operator : ( '&' | '*' | '+' | '-' | '~' | '!' );\r
+    def unary_operator(self, ):\r
+\r
+        unary_operator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 43):\r
+                    return\r
+\r
+                # C.g:424:2: ( '&' | '*' | '+' | '-' | '~' | '!' )\r
+                # C.g:\r
+                if self.input.LA(1) == 66 or (68 <= self.input.LA(1) <= 69) or (77 <= self.input.LA(1) <= 79):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_unary_operator0\r
+                        )\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 43, unary_operator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end unary_operator\r
+\r
+    class primary_expression_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start primary_expression\r
+    # C.g:432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );\r
+    def primary_expression(self, ):\r
+\r
+        retval = self.primary_expression_return()\r
+        retval.start = self.input.LT(1)\r
+        primary_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 44):\r
+                    return retval\r
+\r
+                # C.g:433:2: ( IDENTIFIER | constant | '(' expression ')' )\r
+                alt67 = 3\r
+                LA67 = self.input.LA(1)\r
+                if LA67 == IDENTIFIER:\r
+                    LA67_1 = self.input.LA(2)\r
+\r
+                    if (LA67_1 == EOF or LA67_1 == 25 or (27 <= LA67_1 <= 28) or LA67_1 == 44 or LA67_1 == 47 or LA67_1 == 53 or (62 <= LA67_1 <= 66) or (68 <= LA67_1 <= 73) or (75 <= LA67_1 <= 77) or (80 <= LA67_1 <= 102)) :\r
+                        alt67 = 1\r
+                    elif (LA67_1 == IDENTIFIER or LA67_1 == STRING_LITERAL) :\r
+                        alt67 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return retval\r
+\r
+                        nvae = NoViableAltException("432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA67 == HEX_LITERAL or LA67 == OCTAL_LITERAL or LA67 == DECIMAL_LITERAL or LA67 == CHARACTER_LITERAL or LA67 == STRING_LITERAL or LA67 == FLOATING_POINT_LITERAL:\r
+                    alt67 = 2\r
+                elif LA67 == 62:\r
+                    alt67 = 3\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
+\r
+                    nvae = NoViableAltException("432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt67 == 1:\r
+                    # C.g:433:4: IDENTIFIER\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_primary_expression1613)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt67 == 2:\r
+                    # C.g:434:4: constant\r
+                    self.following.append(self.FOLLOW_constant_in_primary_expression1618)\r
+                    self.constant()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                elif alt67 == 3:\r
+                    # C.g:435:4: '(' expression ')'\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_primary_expression1623)\r
+                    if self.failed:\r
+                        return retval\r
+                    self.following.append(self.FOLLOW_expression_in_primary_expression1625)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_primary_expression1627)\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 44, primary_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end primary_expression\r
+\r
+\r
+    # $ANTLR start constant\r
+    # C.g:438:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL );\r
+    def constant(self, ):\r
+\r
+        constant_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 45):\r
+                    return\r
+\r
+                # C.g:439:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL )\r
+                alt72 = 6\r
+                LA72 = self.input.LA(1)\r
+                if LA72 == HEX_LITERAL:\r
+                    alt72 = 1\r
+                elif LA72 == OCTAL_LITERAL:\r
+                    alt72 = 2\r
+                elif LA72 == DECIMAL_LITERAL:\r
+                    alt72 = 3\r
+                elif LA72 == CHARACTER_LITERAL:\r
+                    alt72 = 4\r
+                elif LA72 == IDENTIFIER or LA72 == STRING_LITERAL:\r
+                    alt72 = 5\r
+                elif LA72 == FLOATING_POINT_LITERAL:\r
+                    alt72 = 6\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("438:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL );", 72, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt72 == 1:\r
+                    # C.g:439:9: HEX_LITERAL\r
+                    self.match(self.input, HEX_LITERAL, self.FOLLOW_HEX_LITERAL_in_constant1643)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt72 == 2:\r
+                    # C.g:440:9: OCTAL_LITERAL\r
+                    self.match(self.input, OCTAL_LITERAL, self.FOLLOW_OCTAL_LITERAL_in_constant1653)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt72 == 3:\r
+                    # C.g:441:9: DECIMAL_LITERAL\r
+                    self.match(self.input, DECIMAL_LITERAL, self.FOLLOW_DECIMAL_LITERAL_in_constant1663)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt72 == 4:\r
+                    # C.g:442:7: CHARACTER_LITERAL\r
+                    self.match(self.input, CHARACTER_LITERAL, self.FOLLOW_CHARACTER_LITERAL_in_constant1671)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt72 == 5:\r
+                    # C.g:443:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )*\r
+                    # C.g:443:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+\r
+                    cnt70 = 0\r
+                    while True: #loop70\r
+                        alt70 = 2\r
+                        LA70_0 = self.input.LA(1)\r
+\r
+                        if (LA70_0 == IDENTIFIER) :\r
+                            LA70_1 = self.input.LA(2)\r
+\r
+                            if (LA70_1 == STRING_LITERAL) :\r
+                                alt70 = 1\r
+                            elif (LA70_1 == IDENTIFIER) :\r
+                                LA70_33 = self.input.LA(3)\r
+\r
+                                if (self.synpred138()) :\r
+                                    alt70 = 1\r
+\r
+\r
+\r
+\r
+                        elif (LA70_0 == STRING_LITERAL) :\r
+                            alt70 = 1\r
+\r
+\r
+                        if alt70 == 1:\r
+                            # C.g:443:8: ( IDENTIFIER )* ( STRING_LITERAL )+\r
+                            # C.g:443:8: ( IDENTIFIER )*\r
+                            while True: #loop68\r
+                                alt68 = 2\r
+                                LA68_0 = self.input.LA(1)\r
+\r
+                                if (LA68_0 == IDENTIFIER) :\r
+                                    alt68 = 1\r
+\r
+\r
+                                if alt68 == 1:\r
+                                    # C.g:0:0: IDENTIFIER\r
+                                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1680)\r
+                                    if self.failed:\r
+                                        return\r
+\r
+\r
+                                else:\r
+                                    break #loop68\r
+\r
+\r
+                            # C.g:443:20: ( STRING_LITERAL )+\r
+                            cnt69 = 0\r
+                            while True: #loop69\r
+                                alt69 = 2\r
+                                LA69_0 = self.input.LA(1)\r
+\r
+                                if (LA69_0 == STRING_LITERAL) :\r
+                                    LA69_31 = self.input.LA(2)\r
+\r
+                                    if (self.synpred137()) :\r
+                                        alt69 = 1\r
+\r
+\r
+\r
+\r
+                                if alt69 == 1:\r
+                                    # C.g:0:0: STRING_LITERAL\r
+                                    self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_constant1683)\r
+                                    if self.failed:\r
+                                        return\r
+\r
+\r
+                                else:\r
+                                    if cnt69 >= 1:\r
+                                        break #loop69\r
+\r
+                                    if self.backtracking > 0:\r
+                                        self.failed = True\r
+                                        return\r
+\r
+                                    eee = EarlyExitException(69, self.input)\r
+                                    raise eee\r
+\r
+                                cnt69 += 1\r
+\r
+\r
+\r
+\r
+                        else:\r
+                            if cnt70 >= 1:\r
+                                break #loop70\r
+\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            eee = EarlyExitException(70, self.input)\r
+                            raise eee\r
+\r
+                        cnt70 += 1\r
+\r
+\r
+                    # C.g:443:38: ( IDENTIFIER )*\r
+                    while True: #loop71\r
+                        alt71 = 2\r
+                        LA71_0 = self.input.LA(1)\r
+\r
+                        if (LA71_0 == IDENTIFIER) :\r
+                            alt71 = 1\r
+\r
+\r
+                        if alt71 == 1:\r
+                            # C.g:0:0: IDENTIFIER\r
+                            self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1688)\r
+                            if self.failed:\r
+                                return\r
+\r
+\r
+                        else:\r
+                            break #loop71\r
+\r
+\r
+\r
+\r
+                elif alt72 == 6:\r
+                    # C.g:444:9: FLOATING_POINT_LITERAL\r
+                    self.match(self.input, FLOATING_POINT_LITERAL, self.FOLLOW_FLOATING_POINT_LITERAL_in_constant1699)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 45, constant_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end constant\r
+\r
+    class expression_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start expression\r
+    # C.g:449:1: expression : assignment_expression ( ',' assignment_expression )* ;\r
+    def expression(self, ):\r
+\r
+        retval = self.expression_return()\r
+        retval.start = self.input.LT(1)\r
+        expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 46):\r
+                    return retval\r
+\r
+                # C.g:450:2: ( assignment_expression ( ',' assignment_expression )* )\r
+                # C.g:450:4: assignment_expression ( ',' assignment_expression )*\r
+                self.following.append(self.FOLLOW_assignment_expression_in_expression1715)\r
+                self.assignment_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:450:26: ( ',' assignment_expression )*\r
+                while True: #loop73\r
+                    alt73 = 2\r
+                    LA73_0 = self.input.LA(1)\r
+\r
+                    if (LA73_0 == 27) :\r
+                        alt73 = 1\r
+\r
+\r
+                    if alt73 == 1:\r
+                        # C.g:450:27: ',' assignment_expression\r
+                        self.match(self.input, 27, self.FOLLOW_27_in_expression1718)\r
+                        if self.failed:\r
+                            return retval\r
+                        self.following.append(self.FOLLOW_assignment_expression_in_expression1720)\r
+                        self.assignment_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    else:\r
+                        break #loop73\r
+\r
+\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 46, expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end expression\r
+\r
+\r
+    # $ANTLR start constant_expression\r
+    # C.g:453:1: constant_expression : conditional_expression ;\r
+    def constant_expression(self, ):\r
+\r
+        constant_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 47):\r
+                    return\r
+\r
+                # C.g:454:2: ( conditional_expression )\r
+                # C.g:454:4: conditional_expression\r
+                self.following.append(self.FOLLOW_conditional_expression_in_constant_expression1733)\r
+                self.conditional_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 47, constant_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end constant_expression\r
+\r
+\r
+    # $ANTLR start assignment_expression\r
+    # C.g:457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );\r
+    def assignment_expression(self, ):\r
+\r
+        assignment_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 48):\r
+                    return\r
+\r
+                # C.g:458:2: ( lvalue assignment_operator assignment_expression | conditional_expression )\r
+                alt74 = 2\r
+                LA74 = self.input.LA(1)\r
+                if LA74 == IDENTIFIER:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_13 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 13, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_14 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 14, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_15 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 15, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_16 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 16, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_17 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 17, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_18 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 18, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_19 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 19, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_21 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 21, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == IDENTIFIER:\r
+                        LA74_22 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 22, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == HEX_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_44 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 44, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_45 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 45, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_46 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 46, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_47 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 47, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_48 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 48, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_49 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 49, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_50 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 50, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 2, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == OCTAL_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_73 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 73, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_74 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 74, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_75 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 75, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_76 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 76, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_77 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 77, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_78 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 78, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_79 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 79, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 3, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == DECIMAL_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_102 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 102, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_103 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 103, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_104 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 104, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_105 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 105, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_106 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 106, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_107 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 107, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_108 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 108, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 4, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == CHARACTER_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_131 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 131, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_132 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 132, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_133 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 133, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_134 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 134, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_135 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 135, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_136 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 136, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_137 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 137, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 5, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == STRING_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == IDENTIFIER:\r
+                        LA74_160 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 160, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 64:\r
+                        LA74_161 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 161, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_162 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 162, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_163 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 163, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_164 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 164, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_165 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 165, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_166 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 166, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_167 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 167, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_189 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 189, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 6, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == FLOATING_POINT_LITERAL:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 64:\r
+                        LA74_191 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 191, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_192 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 192, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 75:\r
+                        LA74_193 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 193, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66:\r
+                        LA74_194 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 194, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 76:\r
+                        LA74_195 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 195, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_196 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 196, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_197 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 197, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102:\r
+                        alt74 = 2\r
+                    elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89:\r
+                        alt74 = 1\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 7, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 62:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == IDENTIFIER:\r
+                        LA74_220 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 220, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_221 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 221, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_222 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 222, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_223 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 223, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_224 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 224, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_225 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 225, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_226 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 226, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_227 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 227, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_228 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 228, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_229 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 229, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_230 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 230, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_231 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 231, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 34 or LA74 == 35 or LA74 == 36 or LA74 == 37 or LA74 == 38 or LA74 == 39 or LA74 == 40 or LA74 == 41 or LA74 == 42 or LA74 == 45 or LA74 == 46 or LA74 == 48 or LA74 == 49 or LA74 == 50 or LA74 == 51 or LA74 == 52 or LA74 == 53 or LA74 == 54 or LA74 == 55 or LA74 == 56 or LA74 == 57 or LA74 == 58 or LA74 == 59 or LA74 == 60 or LA74 == 61:\r
+                        alt74 = 2\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 8, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 72:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == IDENTIFIER:\r
+                        LA74_244 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 244, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_245 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 245, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_246 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 246, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_247 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 247, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_248 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 248, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_249 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 249, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_250 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 250, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_251 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 251, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_252 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 252, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_253 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 253, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_254 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 254, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_255 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 255, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 9, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 73:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == IDENTIFIER:\r
+                        LA74_256 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 256, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_257 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 257, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_258 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 258, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_259 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 259, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_260 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 260, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_261 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 261, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_262 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 262, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 62:\r
+                        LA74_263 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 263, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_264 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 264, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_265 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 265, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_266 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 266, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_267 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 267, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 10, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 62:\r
+                        LA74_268 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 268, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == IDENTIFIER:\r
+                        LA74_269 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 269, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_270 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 270, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_271 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 271, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_272 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 272, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_273 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 273, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_274 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 274, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_275 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 275, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_276 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 276, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_277 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 277, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_278 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 278, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_279 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 279, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 11, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA74 == 74:\r
+                    LA74 = self.input.LA(2)\r
+                    if LA74 == 62:\r
+                        LA74_280 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 280, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == IDENTIFIER:\r
+                        LA74_281 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 281, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == HEX_LITERAL:\r
+                        LA74_282 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 282, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == OCTAL_LITERAL:\r
+                        LA74_283 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 283, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == DECIMAL_LITERAL:\r
+                        LA74_284 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 284, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == CHARACTER_LITERAL:\r
+                        LA74_285 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 285, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == STRING_LITERAL:\r
+                        LA74_286 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 286, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == FLOATING_POINT_LITERAL:\r
+                        LA74_287 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 287, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 72:\r
+                        LA74_288 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 288, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 73:\r
+                        LA74_289 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 289, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79:\r
+                        LA74_290 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 290, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA74 == 74:\r
+                        LA74_291 = self.input.LA(3)\r
+\r
+                        if (self.synpred142()) :\r
+                            alt74 = 1\r
+                        elif (True) :\r
+                            alt74 = 2\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 291, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 12, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt74 == 1:\r
+                    # C.g:458:4: lvalue assignment_operator assignment_expression\r
+                    self.following.append(self.FOLLOW_lvalue_in_assignment_expression1744)\r
+                    self.lvalue()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_assignment_operator_in_assignment_expression1746)\r
+                    self.assignment_operator()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_assignment_expression_in_assignment_expression1748)\r
+                    self.assignment_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt74 == 2:\r
+                    # C.g:459:4: conditional_expression\r
+                    self.following.append(self.FOLLOW_conditional_expression_in_assignment_expression1753)\r
+                    self.conditional_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 48, assignment_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end assignment_expression\r
+\r
+\r
+    # $ANTLR start lvalue\r
+    # C.g:462:1: lvalue : unary_expression ;\r
+    def lvalue(self, ):\r
+\r
+        lvalue_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 49):\r
+                    return\r
+\r
+                # C.g:463:2: ( unary_expression )\r
+                # C.g:463:4: unary_expression\r
+                self.following.append(self.FOLLOW_unary_expression_in_lvalue1765)\r
+                self.unary_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 49, lvalue_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end lvalue\r
+\r
+\r
+    # $ANTLR start assignment_operator\r
+    # C.g:466:1: assignment_operator : ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' );\r
+    def assignment_operator(self, ):\r
+\r
+        assignment_operator_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 50):\r
+                    return\r
+\r
+                # C.g:467:2: ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' )\r
+                # C.g:\r
+                if self.input.LA(1) == 28 or (80 <= self.input.LA(1) <= 89):\r
+                    self.input.consume();\r
+                    self.errorRecovery = False\r
+                    self.failed = False\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    mse = MismatchedSetException(None, self.input)\r
+                    self.recoverFromMismatchedSet(\r
+                        self.input, mse, self.FOLLOW_set_in_assignment_operator0\r
+                        )\r
+                    raise mse\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 50, assignment_operator_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end assignment_operator\r
+\r
+\r
+    # $ANTLR start conditional_expression\r
+    # C.g:480:1: conditional_expression : e= logical_or_expression ( '?' expression ':' conditional_expression )? ;\r
+    def conditional_expression(self, ):\r
+\r
+        conditional_expression_StartIndex = self.input.index()\r
+        e = None\r
+\r
+\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 51):\r
+                    return\r
+\r
+                # C.g:481:2: (e= logical_or_expression ( '?' expression ':' conditional_expression )? )\r
+                # C.g:481:4: e= logical_or_expression ( '?' expression ':' conditional_expression )?\r
+                self.following.append(self.FOLLOW_logical_or_expression_in_conditional_expression1839)\r
+                e = self.logical_or_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:481:28: ( '?' expression ':' conditional_expression )?\r
+                alt75 = 2\r
+                LA75_0 = self.input.LA(1)\r
+\r
+                if (LA75_0 == 90) :\r
+                    alt75 = 1\r
+                if alt75 == 1:\r
+                    # C.g:481:29: '?' expression ':' conditional_expression\r
+                    self.match(self.input, 90, self.FOLLOW_90_in_conditional_expression1842)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_conditional_expression1844)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_conditional_expression1846)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_conditional_expression_in_conditional_expression1848)\r
+                    self.conditional_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 51, conditional_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end conditional_expression\r
+\r
+    class logical_or_expression_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start logical_or_expression\r
+    # C.g:484:1: logical_or_expression : logical_and_expression ( '||' logical_and_expression )* ;\r
+    def logical_or_expression(self, ):\r
+\r
+        retval = self.logical_or_expression_return()\r
+        retval.start = self.input.LT(1)\r
+        logical_or_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 52):\r
+                    return retval\r
+\r
+                # C.g:485:2: ( logical_and_expression ( '||' logical_and_expression )* )\r
+                # C.g:485:4: logical_and_expression ( '||' logical_and_expression )*\r
+                self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1863)\r
+                self.logical_and_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:485:27: ( '||' logical_and_expression )*\r
+                while True: #loop76\r
+                    alt76 = 2\r
+                    LA76_0 = self.input.LA(1)\r
+\r
+                    if (LA76_0 == 91) :\r
+                        alt76 = 1\r
+\r
+\r
+                    if alt76 == 1:\r
+                        # C.g:485:28: '||' logical_and_expression\r
+                        self.match(self.input, 91, self.FOLLOW_91_in_logical_or_expression1866)\r
+                        if self.failed:\r
+                            return retval\r
+                        self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1868)\r
+                        self.logical_and_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    else:\r
+                        break #loop76\r
+\r
+\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 52, logical_or_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end logical_or_expression\r
+\r
+\r
+    # $ANTLR start logical_and_expression\r
+    # C.g:488:1: logical_and_expression : inclusive_or_expression ( '&&' inclusive_or_expression )* ;\r
+    def logical_and_expression(self, ):\r
+\r
+        logical_and_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 53):\r
+                    return\r
+\r
+                # C.g:489:2: ( inclusive_or_expression ( '&&' inclusive_or_expression )* )\r
+                # C.g:489:4: inclusive_or_expression ( '&&' inclusive_or_expression )*\r
+                self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1881)\r
+                self.inclusive_or_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:489:28: ( '&&' inclusive_or_expression )*\r
+                while True: #loop77\r
+                    alt77 = 2\r
+                    LA77_0 = self.input.LA(1)\r
+\r
+                    if (LA77_0 == 92) :\r
+                        alt77 = 1\r
+\r
+\r
+                    if alt77 == 1:\r
+                        # C.g:489:29: '&&' inclusive_or_expression\r
+                        self.match(self.input, 92, self.FOLLOW_92_in_logical_and_expression1884)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1886)\r
+                        self.inclusive_or_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop77\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 53, logical_and_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end logical_and_expression\r
+\r
+\r
+    # $ANTLR start inclusive_or_expression\r
+    # C.g:492:1: inclusive_or_expression : exclusive_or_expression ( '|' exclusive_or_expression )* ;\r
+    def inclusive_or_expression(self, ):\r
+\r
+        inclusive_or_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 54):\r
+                    return\r
+\r
+                # C.g:493:2: ( exclusive_or_expression ( '|' exclusive_or_expression )* )\r
+                # C.g:493:4: exclusive_or_expression ( '|' exclusive_or_expression )*\r
+                self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1899)\r
+                self.exclusive_or_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:493:28: ( '|' exclusive_or_expression )*\r
+                while True: #loop78\r
+                    alt78 = 2\r
+                    LA78_0 = self.input.LA(1)\r
+\r
+                    if (LA78_0 == 93) :\r
+                        alt78 = 1\r
+\r
+\r
+                    if alt78 == 1:\r
+                        # C.g:493:29: '|' exclusive_or_expression\r
+                        self.match(self.input, 93, self.FOLLOW_93_in_inclusive_or_expression1902)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1904)\r
+                        self.exclusive_or_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop78\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 54, inclusive_or_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end inclusive_or_expression\r
+\r
+\r
+    # $ANTLR start exclusive_or_expression\r
+    # C.g:496:1: exclusive_or_expression : and_expression ( '^' and_expression )* ;\r
+    def exclusive_or_expression(self, ):\r
+\r
+        exclusive_or_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 55):\r
+                    return\r
+\r
+                # C.g:497:2: ( and_expression ( '^' and_expression )* )\r
+                # C.g:497:4: and_expression ( '^' and_expression )*\r
+                self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1917)\r
+                self.and_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:497:19: ( '^' and_expression )*\r
+                while True: #loop79\r
+                    alt79 = 2\r
+                    LA79_0 = self.input.LA(1)\r
+\r
+                    if (LA79_0 == 94) :\r
+                        alt79 = 1\r
+\r
+\r
+                    if alt79 == 1:\r
+                        # C.g:497:20: '^' and_expression\r
+                        self.match(self.input, 94, self.FOLLOW_94_in_exclusive_or_expression1920)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1922)\r
+                        self.and_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop79\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 55, exclusive_or_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end exclusive_or_expression\r
+\r
+\r
+    # $ANTLR start and_expression\r
+    # C.g:500:1: and_expression : equality_expression ( '&' equality_expression )* ;\r
+    def and_expression(self, ):\r
+\r
+        and_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 56):\r
+                    return\r
+\r
+                # C.g:501:2: ( equality_expression ( '&' equality_expression )* )\r
+                # C.g:501:4: equality_expression ( '&' equality_expression )*\r
+                self.following.append(self.FOLLOW_equality_expression_in_and_expression1935)\r
+                self.equality_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:501:24: ( '&' equality_expression )*\r
+                while True: #loop80\r
+                    alt80 = 2\r
+                    LA80_0 = self.input.LA(1)\r
+\r
+                    if (LA80_0 == 77) :\r
+                        alt80 = 1\r
+\r
+\r
+                    if alt80 == 1:\r
+                        # C.g:501:25: '&' equality_expression\r
+                        self.match(self.input, 77, self.FOLLOW_77_in_and_expression1938)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_equality_expression_in_and_expression1940)\r
+                        self.equality_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop80\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 56, and_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end and_expression\r
+\r
+\r
+    # $ANTLR start equality_expression\r
+    # C.g:503:1: equality_expression : relational_expression ( ( '==' | '!=' ) relational_expression )* ;\r
+    def equality_expression(self, ):\r
+\r
+        equality_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 57):\r
+                    return\r
+\r
+                # C.g:504:2: ( relational_expression ( ( '==' | '!=' ) relational_expression )* )\r
+                # C.g:504:4: relational_expression ( ( '==' | '!=' ) relational_expression )*\r
+                self.following.append(self.FOLLOW_relational_expression_in_equality_expression1952)\r
+                self.relational_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:504:26: ( ( '==' | '!=' ) relational_expression )*\r
+                while True: #loop81\r
+                    alt81 = 2\r
+                    LA81_0 = self.input.LA(1)\r
+\r
+                    if ((95 <= LA81_0 <= 96)) :\r
+                        alt81 = 1\r
+\r
+\r
+                    if alt81 == 1:\r
+                        # C.g:504:27: ( '==' | '!=' ) relational_expression\r
+                        if (95 <= self.input.LA(1) <= 96):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_equality_expression1955\r
+                                )\r
+                            raise mse\r
+\r
+\r
+                        self.following.append(self.FOLLOW_relational_expression_in_equality_expression1961)\r
+                        self.relational_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop81\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 57, equality_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end equality_expression\r
+\r
+\r
+    # $ANTLR start relational_expression\r
+    # C.g:507:1: relational_expression : shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ;\r
+    def relational_expression(self, ):\r
+\r
+        relational_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 58):\r
+                    return\r
+\r
+                # C.g:508:2: ( shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* )\r
+                # C.g:508:4: shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )*\r
+                self.following.append(self.FOLLOW_shift_expression_in_relational_expression1975)\r
+                self.shift_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:508:21: ( ( '<' | '>' | '<=' | '>=' ) shift_expression )*\r
+                while True: #loop82\r
+                    alt82 = 2\r
+                    LA82_0 = self.input.LA(1)\r
+\r
+                    if ((97 <= LA82_0 <= 100)) :\r
+                        alt82 = 1\r
+\r
+\r
+                    if alt82 == 1:\r
+                        # C.g:508:22: ( '<' | '>' | '<=' | '>=' ) shift_expression\r
+                        if (97 <= self.input.LA(1) <= 100):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_relational_expression1978\r
+                                )\r
+                            raise mse\r
+\r
+\r
+                        self.following.append(self.FOLLOW_shift_expression_in_relational_expression1988)\r
+                        self.shift_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop82\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 58, relational_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end relational_expression\r
+\r
+\r
+    # $ANTLR start shift_expression\r
+    # C.g:511:1: shift_expression : additive_expression ( ( '<<' | '>>' ) additive_expression )* ;\r
+    def shift_expression(self, ):\r
+\r
+        shift_expression_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 59):\r
+                    return\r
+\r
+                # C.g:512:2: ( additive_expression ( ( '<<' | '>>' ) additive_expression )* )\r
+                # C.g:512:4: additive_expression ( ( '<<' | '>>' ) additive_expression )*\r
+                self.following.append(self.FOLLOW_additive_expression_in_shift_expression2001)\r
+                self.additive_expression()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
+                # C.g:512:24: ( ( '<<' | '>>' ) additive_expression )*\r
+                while True: #loop83\r
+                    alt83 = 2\r
+                    LA83_0 = self.input.LA(1)\r
+\r
+                    if ((101 <= LA83_0 <= 102)) :\r
+                        alt83 = 1\r
+\r
+\r
+                    if alt83 == 1:\r
+                        # C.g:512:25: ( '<<' | '>>' ) additive_expression\r
+                        if (101 <= self.input.LA(1) <= 102):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_shift_expression2004\r
+                                )\r
+                            raise mse\r
+\r
+\r
+                        self.following.append(self.FOLLOW_additive_expression_in_shift_expression2010)\r
+                        self.additive_expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop83\r
+\r
+\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 59, shift_expression_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end shift_expression\r
+\r
+\r
+    # $ANTLR start statement\r
+    # C.g:517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );\r
+    def statement(self, ):\r
+\r
+        statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 60):\r
+                    return\r
+\r
+                # C.g:518:2: ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration )\r
+                alt84 = 11\r
+                LA84 = self.input.LA(1)\r
+                if LA84 == IDENTIFIER:\r
+                    LA84 = self.input.LA(2)\r
+                    if LA84 == 62:\r
+                        LA84_43 = self.input.LA(3)\r
+\r
+                        if (self.synpred169()) :\r
+                            alt84 = 3\r
+                        elif (self.synpred173()) :\r
+                            alt84 = 7\r
+                        elif (self.synpred174()) :\r
+                            alt84 = 8\r
+                        elif (True) :\r
+                            alt84 = 11\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 43, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA84 == 47:\r
+                        alt84 = 1\r
+                    elif LA84 == STRING_LITERAL or LA84 == 27 or LA84 == 28 or LA84 == 64 or LA84 == 68 or LA84 == 69 or LA84 == 70 or LA84 == 71 or LA84 == 72 or LA84 == 73 or LA84 == 75 or LA84 == 76 or LA84 == 77 or LA84 == 80 or LA84 == 81 or LA84 == 82 or LA84 == 83 or LA84 == 84 or LA84 == 85 or LA84 == 86 or LA84 == 87 or LA84 == 88 or LA84 == 89 or LA84 == 90 or LA84 == 91 or LA84 == 92 or LA84 == 93 or LA84 == 94 or LA84 == 95 or LA84 == 96 or LA84 == 97 or LA84 == 98 or LA84 == 99 or LA84 == 100 or LA84 == 101 or LA84 == 102:\r
+                        alt84 = 3\r
+                    elif LA84 == 66:\r
+                        LA84_47 = self.input.LA(3)\r
+\r
+                        if (self.synpred169()) :\r
+                            alt84 = 3\r
+                        elif (True) :\r
+                            alt84 = 11\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 47, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA84 == IDENTIFIER:\r
+                        LA84_53 = self.input.LA(3)\r
+\r
+                        if (self.synpred169()) :\r
+                            alt84 = 3\r
+                        elif (True) :\r
+                            alt84 = 11\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 53, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA84 == 25:\r
+                        LA84_68 = self.input.LA(3)\r
+\r
+                        if (self.synpred169()) :\r
+                            alt84 = 3\r
+                        elif (True) :\r
+                            alt84 = 11\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 68, self.input)\r
+\r
+                            raise nvae\r
+\r
+                    elif LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60 or LA84 == 61:\r
+                        alt84 = 11\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 1, self.input)\r
+\r
+                        raise nvae\r
+\r
+                elif LA84 == 106 or LA84 == 107:\r
+                    alt84 = 1\r
+                elif LA84 == 43:\r
+                    alt84 = 2\r
+                elif LA84 == HEX_LITERAL or LA84 == OCTAL_LITERAL or LA84 == DECIMAL_LITERAL or LA84 == CHARACTER_LITERAL or LA84 == STRING_LITERAL or LA84 == FLOATING_POINT_LITERAL or LA84 == 25 or LA84 == 62 or LA84 == 66 or LA84 == 68 or LA84 == 69 or LA84 == 72 or LA84 == 73 or LA84 == 74 or LA84 == 77 or LA84 == 78 or LA84 == 79:\r
+                    alt84 = 3\r
+                elif LA84 == 108 or LA84 == 110:\r
+                    alt84 = 4\r
+                elif LA84 == 111 or LA84 == 112 or LA84 == 113:\r
+                    alt84 = 5\r
+                elif LA84 == 114 or LA84 == 115 or LA84 == 116 or LA84 == 117:\r
+                    alt84 = 6\r
+                elif LA84 == 103:\r
+                    alt84 = 8\r
+                elif LA84 == 104:\r
+                    alt84 = 9\r
+                elif LA84 == 105:\r
+                    alt84 = 10\r
+                elif LA84 == 26 or LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60 or LA84 == 61:\r
+                    alt84 = 11\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt84 == 1:\r
+                    # C.g:518:4: labeled_statement\r
+                    self.following.append(self.FOLLOW_labeled_statement_in_statement2025)\r
+                    self.labeled_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 2:\r
+                    # C.g:519:4: compound_statement\r
+                    self.following.append(self.FOLLOW_compound_statement_in_statement2030)\r
+                    self.compound_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 3:\r
+                    # C.g:520:4: expression_statement\r
+                    self.following.append(self.FOLLOW_expression_statement_in_statement2035)\r
+                    self.expression_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 4:\r
+                    # C.g:521:4: selection_statement\r
+                    self.following.append(self.FOLLOW_selection_statement_in_statement2040)\r
+                    self.selection_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 5:\r
+                    # C.g:522:4: iteration_statement\r
+                    self.following.append(self.FOLLOW_iteration_statement_in_statement2045)\r
+                    self.iteration_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 6:\r
+                    # C.g:523:4: jump_statement\r
+                    self.following.append(self.FOLLOW_jump_statement_in_statement2050)\r
+                    self.jump_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 7:\r
+                    # C.g:524:4: macro_statement\r
+                    self.following.append(self.FOLLOW_macro_statement_in_statement2055)\r
+                    self.macro_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 8:\r
+                    # C.g:525:4: asm2_statement\r
+                    self.following.append(self.FOLLOW_asm2_statement_in_statement2060)\r
+                    self.asm2_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 9:\r
+                    # C.g:526:4: asm1_statement\r
+                    self.following.append(self.FOLLOW_asm1_statement_in_statement2065)\r
+                    self.asm1_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 10:\r
+                    # C.g:527:4: asm_statement\r
+                    self.following.append(self.FOLLOW_asm_statement_in_statement2070)\r
+                    self.asm_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt84 == 11:\r
+                    # C.g:528:4: declaration\r
+                    self.following.append(self.FOLLOW_declaration_in_statement2075)\r
+                    self.declaration()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 60, statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end statement\r
+\r
+\r
+    # $ANTLR start asm2_statement\r
+    # C.g:531:1: asm2_statement : ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' ;\r
+    def asm2_statement(self, ):\r
+\r
+        asm2_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 61):\r
+                    return\r
+\r
+                # C.g:532:2: ( ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' )\r
+                # C.g:532:4: ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';'\r
+                # C.g:532:4: ( '__asm__' )?\r
+                alt85 = 2\r
+                LA85_0 = self.input.LA(1)\r
+\r
+                if (LA85_0 == 103) :\r
+                    alt85 = 1\r
+                if alt85 == 1:\r
+                    # C.g:0:0: '__asm__'\r
+                    self.match(self.input, 103, self.FOLLOW_103_in_asm2_statement2086)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_asm2_statement2089)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 62, self.FOLLOW_62_in_asm2_statement2091)\r
+                if self.failed:\r
+                    return\r
+                # C.g:532:30: (~ ( ';' ) )*\r
+                while True: #loop86\r
+                    alt86 = 2\r
+                    LA86_0 = self.input.LA(1)\r
+\r
+                    if (LA86_0 == 63) :\r
+                        LA86_1 = self.input.LA(2)\r
+\r
+                        if ((IDENTIFIER <= LA86_1 <= LINE_COMMAND) or (26 <= LA86_1 <= 117)) :\r
+                            alt86 = 1\r
+\r
+\r
+                    elif ((IDENTIFIER <= LA86_0 <= LINE_COMMAND) or (26 <= LA86_0 <= 62) or (64 <= LA86_0 <= 117)) :\r
+                        alt86 = 1\r
+\r
+\r
+                    if alt86 == 1:\r
+                        # C.g:532:31: ~ ( ';' )\r
+                        if (IDENTIFIER <= self.input.LA(1) <= LINE_COMMAND) or (26 <= self.input.LA(1) <= 117):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_asm2_statement2094\r
+                                )\r
+                            raise mse\r
+\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop86\r
+\r
+\r
+                self.match(self.input, 63, self.FOLLOW_63_in_asm2_statement2101)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 25, self.FOLLOW_25_in_asm2_statement2103)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 61, asm2_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end asm2_statement\r
+\r
+\r
+    # $ANTLR start asm1_statement\r
+    # C.g:535:1: asm1_statement : '_asm' '{' (~ ( '}' ) )* '}' ;\r
+    def asm1_statement(self, ):\r
+\r
+        asm1_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 62):\r
+                    return\r
+\r
+                # C.g:536:2: ( '_asm' '{' (~ ( '}' ) )* '}' )\r
+                # C.g:536:4: '_asm' '{' (~ ( '}' ) )* '}'\r
+                self.match(self.input, 104, self.FOLLOW_104_in_asm1_statement2115)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 43, self.FOLLOW_43_in_asm1_statement2117)\r
+                if self.failed:\r
+                    return\r
+                # C.g:536:15: (~ ( '}' ) )*\r
+                while True: #loop87\r
+                    alt87 = 2\r
+                    LA87_0 = self.input.LA(1)\r
+\r
+                    if ((IDENTIFIER <= LA87_0 <= 43) or (45 <= LA87_0 <= 117)) :\r
+                        alt87 = 1\r
+\r
+\r
+                    if alt87 == 1:\r
+                        # C.g:536:16: ~ ( '}' )\r
+                        if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 117):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_asm1_statement2120\r
+                                )\r
+                            raise mse\r
+\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop87\r
+\r
+\r
+                self.match(self.input, 44, self.FOLLOW_44_in_asm1_statement2127)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 62, asm1_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end asm1_statement\r
+\r
+\r
+    # $ANTLR start asm_statement\r
+    # C.g:539:1: asm_statement : '__asm' '{' (~ ( '}' ) )* '}' ;\r
+    def asm_statement(self, ):\r
+\r
+        asm_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 63):\r
+                    return\r
+\r
+                # C.g:540:2: ( '__asm' '{' (~ ( '}' ) )* '}' )\r
+                # C.g:540:4: '__asm' '{' (~ ( '}' ) )* '}'\r
+                self.match(self.input, 105, self.FOLLOW_105_in_asm_statement2138)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 43, self.FOLLOW_43_in_asm_statement2140)\r
+                if self.failed:\r
+                    return\r
+                # C.g:540:16: (~ ( '}' ) )*\r
+                while True: #loop88\r
+                    alt88 = 2\r
+                    LA88_0 = self.input.LA(1)\r
+\r
+                    if ((IDENTIFIER <= LA88_0 <= 43) or (45 <= LA88_0 <= 117)) :\r
+                        alt88 = 1\r
+\r
+\r
+                    if alt88 == 1:\r
+                        # C.g:540:17: ~ ( '}' )\r
+                        if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 117):\r
+                            self.input.consume();\r
+                            self.errorRecovery = False\r
+                            self.failed = False\r
+\r
+                        else:\r
+                            if self.backtracking > 0:\r
+                                self.failed = True\r
+                                return\r
+\r
+                            mse = MismatchedSetException(None, self.input)\r
+                            self.recoverFromMismatchedSet(\r
+                                self.input, mse, self.FOLLOW_set_in_asm_statement2143\r
+                                )\r
+                            raise mse\r
+\r
+\r
+\r
+\r
+                    else:\r
+                        break #loop88\r
+\r
+\r
+                self.match(self.input, 44, self.FOLLOW_44_in_asm_statement2150)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 63, asm_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end asm_statement\r
+\r
+\r
+    # $ANTLR start macro_statement\r
+    # C.g:543:1: macro_statement : IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' ;\r
+    def macro_statement(self, ):\r
+\r
+        macro_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 64):\r
+                    return\r
+\r
+                # C.g:544:2: ( IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' )\r
+                # C.g:544:4: IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')'\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_macro_statement2162)\r
+                if self.failed:\r
+                    return\r
+                self.match(self.input, 62, self.FOLLOW_62_in_macro_statement2164)\r
+                if self.failed:\r
+                    return\r
+                # C.g:544:19: ( declaration )*\r
+                while True: #loop89\r
+                    alt89 = 2\r
+                    LA89 = self.input.LA(1)\r
+                    if LA89 == IDENTIFIER:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 62:\r
+                            LA89_45 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_47 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 66:\r
+                            LA89_50 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_68 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_71 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_72 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_73 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_74 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_75 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_76 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_77 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_78 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_79 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_80 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_81 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_82 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_83 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_84 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_85 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_86 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 26:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_87 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_88 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_89 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_90 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_91 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_92 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_93 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_94 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_95 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_96 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_97 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_98 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_99 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_100 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 66:\r
+                            LA89_101 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_102 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_103 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_104 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_105 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_106 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_107 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_108 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_109 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_110 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_111 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_112 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_113 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_114 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_115 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_116 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_117 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_118 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_119 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_120 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_121 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_122 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_123 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_124 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_125 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 34:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_126 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_127 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_128 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_129 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_130 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_131 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_132 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_133 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_134 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_135 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_136 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_137 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_138 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_139 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_140 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_141 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_142 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_143 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_144 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_145 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 35:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_146 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_147 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_148 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_149 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_150 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_151 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_152 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_153 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_154 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_155 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_156 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_157 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_158 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_159 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_160 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_161 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_162 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_163 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_164 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_165 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 36:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_166 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_167 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_168 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_169 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_170 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_171 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_172 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_173 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_174 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_175 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_176 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_177 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_178 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_179 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_180 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_181 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_182 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_183 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_184 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_185 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 37:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_186 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_187 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_188 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_189 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_190 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_191 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_192 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_193 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_194 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_195 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_196 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_197 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_198 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_199 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_200 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_201 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_202 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_203 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_204 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_205 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 38:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_206 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_207 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_208 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_209 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_210 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_211 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_212 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_213 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_214 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_215 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_216 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_217 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_218 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_219 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_220 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_221 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_222 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_223 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_224 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_225 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 39:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_226 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_227 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_228 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_229 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_230 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_231 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_232 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_233 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_234 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_235 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_236 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_237 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_238 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_239 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_240 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_241 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_242 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_243 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_244 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_245 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 40:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_246 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_247 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_248 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_249 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_250 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_251 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_252 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_253 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_254 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_255 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_256 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_257 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_258 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_259 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_260 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_261 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_262 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_263 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_264 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_265 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 41:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_266 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_267 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_268 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_269 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_270 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_271 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_272 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_273 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_274 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_275 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_276 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_277 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_278 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_279 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_280 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_281 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_282 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_283 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_284 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_285 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 42:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_286 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_287 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_288 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_289 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_290 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_291 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_292 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_293 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_294 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_295 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_296 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_297 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_298 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_299 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_300 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_301 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_302 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_303 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_304 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_305 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+                    elif LA89 == 45 or LA89 == 46:\r
+                        LA89_40 = self.input.LA(2)\r
+\r
+                        if (LA89_40 == IDENTIFIER) :\r
+                            LA89_306 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif (LA89_40 == 43) :\r
+                            LA89_307 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+\r
+                    elif LA89 == 48:\r
+                        LA89_41 = self.input.LA(2)\r
+\r
+                        if (LA89_41 == 43) :\r
+                            LA89_308 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif (LA89_41 == IDENTIFIER) :\r
+                            LA89_309 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+\r
+                    elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 58 or LA89 == 59 or LA89 == 60 or LA89 == 61:\r
+                        LA89 = self.input.LA(2)\r
+                        if LA89 == 66:\r
+                            LA89_310 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 58:\r
+                            LA89_311 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 59:\r
+                            LA89_312 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 60:\r
+                            LA89_313 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == IDENTIFIER:\r
+                            LA89_314 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 62:\r
+                            LA89_315 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 25:\r
+                            LA89_316 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33:\r
+                            LA89_317 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 34:\r
+                            LA89_318 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 35:\r
+                            LA89_319 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 36:\r
+                            LA89_320 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 37:\r
+                            LA89_321 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 38:\r
+                            LA89_322 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 39:\r
+                            LA89_323 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 40:\r
+                            LA89_324 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 41:\r
+                            LA89_325 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 42:\r
+                            LA89_326 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 45 or LA89 == 46:\r
+                            LA89_327 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 48:\r
+                            LA89_328 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+                        elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61:\r
+                            LA89_329 = self.input.LA(3)\r
+\r
+                            if (self.synpred181()) :\r
+                                alt89 = 1\r
+\r
+\r
+\r
+\r
+                    if alt89 == 1:\r
+                        # C.g:0:0: declaration\r
+                        self.following.append(self.FOLLOW_declaration_in_macro_statement2166)\r
+                        self.declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+                    else:\r
+                        break #loop89\r
+\r
+\r
+                # C.g:544:33: ( statement_list )?\r
+                alt90 = 2\r
+                LA90 = self.input.LA(1)\r
+                if LA90 == IDENTIFIER:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 25 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 45 or LA90 == 46 or LA90 == 47 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61:\r
+                        alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_45 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_46 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == IDENTIFIER:\r
+                        LA90_47 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 64:\r
+                        LA90_48 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_49 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_50 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_51 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_52 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_53 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_54 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_55 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_56 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_57 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_58 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_59 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_60 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_61 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_62 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_63 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_64 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_65 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_66 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_67 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_70 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 25 or LA90 == 26 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 43 or LA90 == 45 or LA90 == 46 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61 or LA90 == 103 or LA90 == 104 or LA90 == 105 or LA90 == 106 or LA90 == 107 or LA90 == 108 or LA90 == 110 or LA90 == 111 or LA90 == 112 or LA90 == 113 or LA90 == 114 or LA90 == 115 or LA90 == 116 or LA90 == 117:\r
+                    alt90 = 1\r
+                elif LA90 == HEX_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_87 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_88 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_89 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_90 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_91 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_92 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_93 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_94 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_95 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_96 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_97 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_98 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_99 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_100 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_101 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_102 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_103 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_104 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_105 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_106 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_107 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_108 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                elif LA90 == OCTAL_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_111 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_112 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_113 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_114 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_115 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_116 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_117 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_118 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_119 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_120 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_121 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_122 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_123 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_124 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_125 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_126 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_127 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_128 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_129 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_130 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_131 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_134 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == DECIMAL_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_135 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_136 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_137 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_138 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_139 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_140 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_141 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_142 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_143 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_144 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_145 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_146 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_147 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_148 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_149 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_150 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_151 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_152 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_153 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_154 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_155 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_156 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                elif LA90 == CHARACTER_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_159 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_160 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_161 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_162 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_163 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_164 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_165 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_166 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_167 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_168 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_169 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_170 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_171 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_172 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_173 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_174 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_175 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_176 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_177 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_178 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_179 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_181 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == STRING_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == IDENTIFIER:\r
+                        LA90_183 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 64:\r
+                        LA90_184 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_185 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_186 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_187 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_188 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_189 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_190 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_191 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_192 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_193 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_194 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_195 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_196 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_197 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_198 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_199 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_200 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_201 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_202 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_203 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_204 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_205 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_206 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                elif LA90 == FLOATING_POINT_LITERAL:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 64:\r
+                        LA90_209 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_210 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 75:\r
+                        LA90_211 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66:\r
+                        LA90_212 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 76:\r
+                        LA90_213 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_214 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_215 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89:\r
+                        LA90_216 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 70:\r
+                        LA90_217 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 71:\r
+                        LA90_218 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 68:\r
+                        LA90_219 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 69:\r
+                        LA90_220 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 101 or LA90 == 102:\r
+                        LA90_221 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100:\r
+                        LA90_222 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 95 or LA90 == 96:\r
+                        LA90_223 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 77:\r
+                        LA90_224 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 94:\r
+                        LA90_225 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 93:\r
+                        LA90_226 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 92:\r
+                        LA90_227 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 91:\r
+                        LA90_228 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 90:\r
+                        LA90_229 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 27:\r
+                        LA90_230 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 25:\r
+                        alt90 = 1\r
+                elif LA90 == 62:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == IDENTIFIER:\r
+                        LA90_233 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_234 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_235 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_236 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_237 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_238 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_239 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_240 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_241 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_242 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_243 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_244 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61:\r
+                        LA90_245 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 34:\r
+                        LA90_246 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 35:\r
+                        LA90_247 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 36:\r
+                        LA90_248 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 37:\r
+                        LA90_249 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 38:\r
+                        LA90_250 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 39:\r
+                        LA90_251 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 40:\r
+                        LA90_252 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 41:\r
+                        LA90_253 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 42:\r
+                        LA90_254 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 45 or LA90 == 46:\r
+                        LA90_255 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 48:\r
+                        LA90_256 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 72:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == IDENTIFIER:\r
+                        LA90_257 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_258 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_259 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_260 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_261 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_262 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_263 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_264 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_265 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_266 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_267 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_268 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 73:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == IDENTIFIER:\r
+                        LA90_269 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_270 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_271 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_272 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_273 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_274 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_275 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 62:\r
+                        LA90_276 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_277 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_278 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_279 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_280 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 62:\r
+                        LA90_281 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == IDENTIFIER:\r
+                        LA90_282 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_283 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_284 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_285 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_286 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_287 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_288 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_289 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_290 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_291 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_292 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                elif LA90 == 74:\r
+                    LA90 = self.input.LA(2)\r
+                    if LA90 == 62:\r
+                        LA90_293 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == IDENTIFIER:\r
+                        LA90_294 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == HEX_LITERAL:\r
+                        LA90_295 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == OCTAL_LITERAL:\r
+                        LA90_296 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == DECIMAL_LITERAL:\r
+                        LA90_297 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == CHARACTER_LITERAL:\r
+                        LA90_298 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == STRING_LITERAL:\r
+                        LA90_299 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == FLOATING_POINT_LITERAL:\r
+                        LA90_300 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 72:\r
+                        LA90_301 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 73:\r
+                        LA90_302 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79:\r
+                        LA90_303 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                    elif LA90 == 74:\r
+                        LA90_304 = self.input.LA(3)\r
+\r
+                        if (self.synpred182()) :\r
+                            alt90 = 1\r
+                if alt90 == 1:\r
+                    # C.g:0:0: statement_list\r
+                    self.following.append(self.FOLLOW_statement_list_in_macro_statement2170)\r
+                    self.statement_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+                # C.g:544:49: ( expression )?\r
+                alt91 = 2\r
+                LA91_0 = self.input.LA(1)\r
+\r
+                if ((IDENTIFIER <= LA91_0 <= FLOATING_POINT_LITERAL) or LA91_0 == 62 or LA91_0 == 66 or (68 <= LA91_0 <= 69) or (72 <= LA91_0 <= 74) or (77 <= LA91_0 <= 79)) :\r
+                    alt91 = 1\r
+                if alt91 == 1:\r
+                    # C.g:0:0: expression\r
+                    self.following.append(self.FOLLOW_expression_in_macro_statement2173)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+                self.match(self.input, 63, self.FOLLOW_63_in_macro_statement2176)\r
+                if self.failed:\r
+                    return\r
+\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 64, macro_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end macro_statement\r
+\r
+\r
+    # $ANTLR start labeled_statement\r
+    # C.g:547:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement );\r
+    def labeled_statement(self, ):\r
+\r
+        labeled_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 65):\r
+                    return\r
+\r
+                # C.g:548:2: ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement )\r
+                alt92 = 3\r
+                LA92 = self.input.LA(1)\r
+                if LA92 == IDENTIFIER:\r
+                    alt92 = 1\r
+                elif LA92 == 106:\r
+                    alt92 = 2\r
+                elif LA92 == 107:\r
+                    alt92 = 3\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("547:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement );", 92, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt92 == 1:\r
+                    # C.g:548:4: IDENTIFIER ':' statement\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_labeled_statement2188)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2190)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_labeled_statement2192)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt92 == 2:\r
+                    # C.g:549:4: 'case' constant_expression ':' statement\r
+                    self.match(self.input, 106, self.FOLLOW_106_in_labeled_statement2197)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_constant_expression_in_labeled_statement2199)\r
+                    self.constant_expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2201)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_labeled_statement2203)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt92 == 3:\r
+                    # C.g:550:4: 'default' ':' statement\r
+                    self.match(self.input, 107, self.FOLLOW_107_in_labeled_statement2208)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2210)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_labeled_statement2212)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 65, labeled_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end labeled_statement\r
+\r
+    class compound_statement_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
+\r
+\r
+\r
+    # $ANTLR start compound_statement\r
+    # C.g:553:1: compound_statement : '{' ( declaration )* ( statement_list )? '}' ;\r
+    def compound_statement(self, ):\r
+\r
+        retval = self.compound_statement_return()\r
+        retval.start = self.input.LT(1)\r
+        compound_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 66):\r
+                    return retval\r
+\r
+                # C.g:554:2: ( '{' ( declaration )* ( statement_list )? '}' )\r
+                # C.g:554:4: '{' ( declaration )* ( statement_list )? '}'\r
+                self.match(self.input, 43, self.FOLLOW_43_in_compound_statement2223)\r
+                if self.failed:\r
+                    return retval\r
+                # C.g:554:8: ( declaration )*\r
+                while True: #loop93\r
+                    alt93 = 2\r
+                    LA93 = self.input.LA(1)\r
+                    if LA93 == IDENTIFIER:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 62:\r
+                            LA93_44 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_47 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 66:\r
+                            LA93_48 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_49 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_50 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_51 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_52 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_53 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_54 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_55 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_56 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_57 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_58 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_59 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_60 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_61 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_62 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_63 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_64 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_65 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 26:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_86 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_87 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_88 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_89 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_90 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_91 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_92 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_93 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_94 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_95 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_96 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_97 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_98 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_99 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 66:\r
+                            LA93_100 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_101 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_102 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_103 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_104 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_105 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_106 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_107 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_108 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_109 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_110 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_111 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_112 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_113 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_114 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_115 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_116 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_117 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_118 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_119 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_120 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_121 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_122 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_123 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_124 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 34:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_125 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_126 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_127 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_128 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_129 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_130 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_131 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_132 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_133 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_134 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_135 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_136 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_137 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_138 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_139 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_140 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_141 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_142 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_143 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_144 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 35:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_145 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_146 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_147 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_148 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_149 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_150 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_151 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_152 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_153 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_154 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_155 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_156 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_157 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_158 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_159 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_160 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_161 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_162 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_163 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_164 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 36:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_165 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_166 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_167 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_168 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_169 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_170 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_171 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_172 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_173 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_174 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_175 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_176 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_177 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_178 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_179 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_180 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_181 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_182 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_183 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_184 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 37:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_185 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_186 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_187 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_188 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_189 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_190 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_191 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_192 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_193 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_194 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_195 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_196 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_197 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_198 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_199 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_200 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_201 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_202 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_203 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_204 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 38:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_205 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_206 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_207 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_208 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_209 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_210 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_211 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_212 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_213 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_214 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_215 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_216 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_217 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_218 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_219 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_220 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_221 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_222 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_223 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_224 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 39:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_225 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_226 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_227 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_228 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_229 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_230 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_231 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_232 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_233 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_234 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_235 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_236 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_237 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_238 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_239 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_240 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_241 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_242 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_243 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_244 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 40:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_245 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_246 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_247 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_248 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_249 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_250 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_251 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_252 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_253 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_254 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_255 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_256 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_257 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_258 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_259 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_260 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_261 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_262 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_263 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_264 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 41:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_265 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_266 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_267 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_268 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_269 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_270 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_271 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_272 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_273 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_274 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_275 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_276 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_277 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_278 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_279 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_280 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_281 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_282 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_283 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_284 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 42:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_285 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_286 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_287 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_288 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_289 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_290 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_291 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_292 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_293 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_294 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_295 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_296 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_297 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_298 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_299 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_300 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_301 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_302 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_303 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_304 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+                    elif LA93 == 45 or LA93 == 46:\r
+                        LA93_40 = self.input.LA(2)\r
+\r
+                        if (LA93_40 == IDENTIFIER) :\r
+                            LA93_305 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif (LA93_40 == 43) :\r
+                            LA93_306 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+\r
+                    elif LA93 == 48:\r
+                        LA93_41 = self.input.LA(2)\r
+\r
+                        if (LA93_41 == 43) :\r
+                            LA93_307 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif (LA93_41 == IDENTIFIER) :\r
+                            LA93_308 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+\r
+                    elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 58 or LA93 == 59 or LA93 == 60 or LA93 == 61:\r
+                        LA93 = self.input.LA(2)\r
+                        if LA93 == 66:\r
+                            LA93_309 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 58:\r
+                            LA93_310 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 59:\r
+                            LA93_311 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 60:\r
+                            LA93_312 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == IDENTIFIER:\r
+                            LA93_313 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 62:\r
+                            LA93_314 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 25:\r
+                            LA93_315 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33:\r
+                            LA93_316 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 34:\r
+                            LA93_317 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 35:\r
+                            LA93_318 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 36:\r
+                            LA93_319 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 37:\r
+                            LA93_320 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 38:\r
+                            LA93_321 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 39:\r
+                            LA93_322 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 40:\r
+                            LA93_323 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 41:\r
+                            LA93_324 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 42:\r
+                            LA93_325 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 45 or LA93 == 46:\r
+                            LA93_326 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 48:\r
+                            LA93_327 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+                        elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61:\r
+                            LA93_328 = self.input.LA(3)\r
+\r
+                            if (self.synpred186()) :\r
+                                alt93 = 1\r
+\r
+\r
+\r
+\r
+                    if alt93 == 1:\r
+                        # C.g:0:0: declaration\r
+                        self.following.append(self.FOLLOW_declaration_in_compound_statement2225)\r
+                        self.declaration()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return retval\r
+\r
+\r
+                    else:\r
+                        break #loop93\r
+\r
+\r
+                # C.g:554:21: ( statement_list )?\r
+                alt94 = 2\r
+                LA94_0 = self.input.LA(1)\r
+\r
+                if ((IDENTIFIER <= LA94_0 <= FLOATING_POINT_LITERAL) or (25 <= LA94_0 <= 26) or (29 <= LA94_0 <= 43) or (45 <= LA94_0 <= 46) or (48 <= LA94_0 <= 62) or LA94_0 == 66 or (68 <= LA94_0 <= 69) or (72 <= LA94_0 <= 74) or (77 <= LA94_0 <= 79) or (103 <= LA94_0 <= 108) or (110 <= LA94_0 <= 117)) :\r
+                    alt94 = 1\r
+                if alt94 == 1:\r
+                    # C.g:0:0: statement_list\r
+                    self.following.append(self.FOLLOW_statement_list_in_compound_statement2228)\r
+                    self.statement_list()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+\r
+\r
+\r
+                self.match(self.input, 44, self.FOLLOW_44_in_compound_statement2231)\r
+                if self.failed:\r
+                    return retval\r
+\r
+\r
+\r
+                retval.stop = self.input.LT(-1)\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 66, compound_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return retval\r
+\r
+    # $ANTLR end compound_statement\r
+\r
+\r
+    # $ANTLR start statement_list\r
+    # C.g:557:1: statement_list : ( statement )+ ;\r
+    def statement_list(self, ):\r
+\r
+        statement_list_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 67):\r
+                    return\r
+\r
+                # C.g:558:2: ( ( statement )+ )\r
+                # C.g:558:4: ( statement )+\r
+                # C.g:558:4: ( statement )+\r
+                cnt95 = 0\r
+                while True: #loop95\r
+                    alt95 = 2\r
+                    LA95 = self.input.LA(1)\r
+                    if LA95 == IDENTIFIER:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 62:\r
+                            LA95_46 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 25 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 45 or LA95 == 46 or LA95 == 47 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61:\r
+                            alt95 = 1\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_48 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == IDENTIFIER:\r
+                            LA95_49 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 64:\r
+                            LA95_50 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 75:\r
+                            LA95_51 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 66:\r
+                            LA95_52 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 76:\r
+                            LA95_53 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 72:\r
+                            LA95_54 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 73:\r
+                            LA95_55 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 70:\r
+                            LA95_56 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 71:\r
+                            LA95_57 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 68:\r
+                            LA95_58 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 69:\r
+                            LA95_59 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_60 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_61 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_62 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 77:\r
+                            LA95_63 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 94:\r
+                            LA95_64 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 93:\r
+                            LA95_65 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 92:\r
+                            LA95_66 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 91:\r
+                            LA95_67 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 90:\r
+                            LA95_68 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 27:\r
+                            LA95_69 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_88 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+\r
+                    elif LA95 == HEX_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_89 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 62:\r
+                            LA95_90 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 75:\r
+                            LA95_91 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 66:\r
+                            LA95_92 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 76:\r
+                            LA95_93 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 72:\r
+                            LA95_94 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 73:\r
+                            LA95_95 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_96 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 70:\r
+                            LA95_97 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 71:\r
+                            LA95_98 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 68:\r
+                            LA95_99 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 69:\r
+                            LA95_100 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_101 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_102 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_103 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 77:\r
+                            LA95_104 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 94:\r
+                            LA95_105 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 93:\r
+                            LA95_106 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 92:\r
+                            LA95_107 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 91:\r
+                            LA95_108 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 90:\r
+                            LA95_109 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 27:\r
+                            LA95_110 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
+\r
+                    elif LA95 == OCTAL_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_113 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 62:\r
+                            LA95_114 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 75:\r
+                            LA95_115 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 66:\r
+                            LA95_116 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 76:\r
+                            LA95_117 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 72:\r
+                            LA95_118 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 73:\r
+                            LA95_119 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 70:\r
+                            LA95_120 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 71:\r
+                            LA95_121 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
+\r
+                        elif LA95 == 68:\r
+                            LA95_122 = self.input.LA(3)\r
+\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
+\r
 \r
-    class Struct_or_union_specifierContext(ParserRuleContext):\r
+                        elif LA95 == 69:\r
+                            LA95_123 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def struct_or_union(self):\r
-            return self.getTypedRuleContext(CParser.Struct_or_unionContext,0)\r
 \r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_124 = self.input.LA(3)\r
 \r
-        def struct_declaration_list(self):\r
-            return self.getTypedRuleContext(CParser.Struct_declaration_listContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_125 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_or_union_specifier\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_or_union_specifier" ):\r
-                listener.enterStruct_or_union_specifier(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_or_union_specifier" ):\r
-                listener.exitStruct_or_union_specifier(self)\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_126 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 77:\r
+                            LA95_127 = self.input.LA(3)\r
 \r
-    def struct_or_union_specifier(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Struct_or_union_specifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 20, self.RULE_struct_or_union_specifier)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 262\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,18,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 251\r
-                self.struct_or_union()\r
-                self.state = 253\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.IDENTIFIER:\r
-                    self.state = 252\r
-                    self.match(CParser.IDENTIFIER)\r
-\r
-\r
-                self.state = 255\r
-                self.match(CParser.T__0)\r
-                self.state = 256\r
-                self.struct_declaration_list()\r
-                self.state = 257\r
-                self.match(CParser.T__19)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 259\r
-                self.struct_or_union()\r
-                self.state = 260\r
-                self.match(CParser.IDENTIFIER)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Struct_or_unionContext(ParserRuleContext):\r
+                        elif LA95 == 94:\r
+                            LA95_128 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_or_union\r
+                        elif LA95 == 93:\r
+                            LA95_129 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_or_union" ):\r
-                listener.enterStruct_or_union(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_or_union" ):\r
-                listener.exitStruct_or_union(self)\r
 \r
+                        elif LA95 == 92:\r
+                            LA95_130 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def struct_or_union(self):\r
+                        elif LA95 == 91:\r
+                            LA95_131 = self.input.LA(3)\r
 \r
-        localctx = CParser.Struct_or_unionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 22, self.RULE_struct_or_union)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 264\r
-            _la = self._input.LA(1)\r
-            if not(_la==CParser.T__20 or _la==CParser.T__21):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class Struct_declaration_listContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                        elif LA95 == 90:\r
+                            LA95_132 = self.input.LA(3)\r
 \r
-        def struct_declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Struct_declarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Struct_declarationContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_declaration_list\r
+                        elif LA95 == 27:\r
+                            LA95_133 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_declaration_list" ):\r
-                listener.enterStruct_declaration_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_declaration_list" ):\r
-                listener.exitStruct_declaration_list(self)\r
 \r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_135 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def struct_declaration_list(self):\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
 \r
-        localctx = CParser.Struct_declaration_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 24, self.RULE_struct_declaration_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 267 \r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while True:\r
-                self.state = 266\r
-                self.struct_declaration()\r
-                self.state = 269 \r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36))) != 0) or _la==CParser.IDENTIFIER):\r
-                    break\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                    elif LA95 == DECIMAL_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_137 = self.input.LA(3)\r
 \r
-    class Struct_declarationContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def specifier_qualifier_list(self):\r
-            return self.getTypedRuleContext(CParser.Specifier_qualifier_listContext,0)\r
+                        elif LA95 == 62:\r
+                            LA95_138 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def struct_declarator_list(self):\r
-            return self.getTypedRuleContext(CParser.Struct_declarator_listContext,0)\r
 \r
+                        elif LA95 == 75:\r
+                            LA95_139 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_declaration\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_declaration" ):\r
-                listener.enterStruct_declaration(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_declaration" ):\r
-                listener.exitStruct_declaration(self)\r
+                        elif LA95 == 66:\r
+                            LA95_140 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 76:\r
+                            LA95_141 = self.input.LA(3)\r
 \r
-    def struct_declaration(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Struct_declarationContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 26, self.RULE_struct_declaration)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 271\r
-            self.specifier_qualifier_list()\r
-            self.state = 272\r
-            self.struct_declarator_list()\r
-            self.state = 273\r
-            self.match(CParser.T__1)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Specifier_qualifier_listContext(ParserRuleContext):\r
+                        elif LA95 == 72:\r
+                            LA95_142 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def type_qualifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_qualifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_qualifierContext,i)\r
 \r
+                        elif LA95 == 73:\r
+                            LA95_143 = self.input.LA(3)\r
 \r
-        def type_specifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_specifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_specifierContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_specifier_qualifier_list\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_144 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterSpecifier_qualifier_list" ):\r
-                listener.enterSpecifier_qualifier_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitSpecifier_qualifier_list" ):\r
-                listener.exitSpecifier_qualifier_list(self)\r
 \r
+                        elif LA95 == 70:\r
+                            LA95_145 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def specifier_qualifier_list(self):\r
+                        elif LA95 == 71:\r
+                            LA95_146 = self.input.LA(3)\r
 \r
-        localctx = CParser.Specifier_qualifier_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 28, self.RULE_specifier_qualifier_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 277 \r
-            self._errHandler.sync(self)\r
-            _alt = 1\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt == 1:\r
-                    self.state = 277\r
-                    self._errHandler.sync(self)\r
-                    token = self._input.LA(1)\r
-                    if token in [CParser.T__24, CParser.T__25, CParser.T__26, CParser.T__27, CParser.T__28, CParser.T__29, CParser.T__30, CParser.T__31, CParser.T__32, CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__36]:\r
-                        self.state = 275\r
-                        self.type_qualifier()\r
-                        pass\r
-                    elif token in [CParser.T__10, CParser.T__11, CParser.T__12, CParser.T__13, CParser.T__14, CParser.T__15, CParser.T__16, CParser.T__17, CParser.T__18, CParser.T__20, CParser.T__21, CParser.T__23, CParser.IDENTIFIER]:\r
-                        self.state = 276\r
-                        self.type_specifier()\r
-                        pass\r
-                    else:\r
-                        raise NoViableAltException(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-                else:\r
-                    raise NoViableAltException(self)\r
-                self.state = 279 \r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,21,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 68:\r
+                            LA95_147 = self.input.LA(3)\r
 \r
-    class Struct_declarator_listContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def struct_declarator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Struct_declaratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Struct_declaratorContext,i)\r
+                        elif LA95 == 69:\r
+                            LA95_148 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_declarator_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_declarator_list" ):\r
-                listener.enterStruct_declarator_list(self)\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_149 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_declarator_list" ):\r
-                listener.exitStruct_declarator_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_150 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def struct_declarator_list(self):\r
 \r
-        localctx = CParser.Struct_declarator_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 30, self.RULE_struct_declarator_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 281\r
-            self.struct_declarator()\r
-            self.state = 286\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 282\r
-                self.match(CParser.T__3)\r
-                self.state = 283\r
-                self.struct_declarator()\r
-                self.state = 288\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_151 = self.input.LA(3)\r
 \r
-    class Struct_declaratorContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
+                        elif LA95 == 77:\r
+                            LA95_152 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
 \r
+                        elif LA95 == 94:\r
+                            LA95_153 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_struct_declarator\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStruct_declarator" ):\r
-                listener.enterStruct_declarator(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStruct_declarator" ):\r
-                listener.exitStruct_declarator(self)\r
+                        elif LA95 == 93:\r
+                            LA95_154 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 92:\r
+                            LA95_155 = self.input.LA(3)\r
 \r
-    def struct_declarator(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Struct_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 32, self.RULE_struct_declarator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 296\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__33, CParser.T__34, CParser.T__35, CParser.T__37, CParser.T__41, CParser.IDENTIFIER]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 289\r
-                self.declarator()\r
-                self.state = 292\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__22:\r
-                    self.state = 290\r
-                    self.match(CParser.T__22)\r
-                    self.state = 291\r
-                    self.constant_expression()\r
 \r
+                        elif LA95 == 91:\r
+                            LA95_156 = self.input.LA(3)\r
 \r
-                pass\r
-            elif token in [CParser.T__22]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 294\r
-                self.match(CParser.T__22)\r
-                self.state = 295\r
-                self.constant_expression()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Enum_specifierContext(ParserRuleContext):\r
+                        elif LA95 == 90:\r
+                            LA95_157 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enumerator_list(self):\r
-            return self.getTypedRuleContext(CParser.Enumerator_listContext,0)\r
 \r
+                        elif LA95 == 27:\r
+                            LA95_158 = self.input.LA(3)\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_enum_specifier\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterEnum_specifier" ):\r
-                listener.enterEnum_specifier(self)\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitEnum_specifier" ):\r
-                listener.exitEnum_specifier(self)\r
+                    elif LA95 == CHARACTER_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_161 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 62:\r
+                            LA95_162 = self.input.LA(3)\r
 \r
-    def enum_specifier(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Enum_specifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 34, self.RULE_enum_specifier)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 317\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,27,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 298\r
-                self.match(CParser.T__23)\r
-                self.state = 299\r
-                self.match(CParser.T__0)\r
-                self.state = 300\r
-                self.enumerator_list()\r
-                self.state = 302\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__3:\r
-                    self.state = 301\r
-                    self.match(CParser.T__3)\r
-\r
-\r
-                self.state = 304\r
-                self.match(CParser.T__19)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 306\r
-                self.match(CParser.T__23)\r
-                self.state = 307\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 308\r
-                self.match(CParser.T__0)\r
-                self.state = 309\r
-                self.enumerator_list()\r
-                self.state = 311\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__3:\r
-                    self.state = 310\r
-                    self.match(CParser.T__3)\r
-\r
-\r
-                self.state = 313\r
-                self.match(CParser.T__19)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 315\r
-                self.match(CParser.T__23)\r
-                self.state = 316\r
-                self.match(CParser.IDENTIFIER)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Enumerator_listContext(ParserRuleContext):\r
+                        elif LA95 == 75:\r
+                            LA95_163 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enumerator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.EnumeratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.EnumeratorContext,i)\r
 \r
+                        elif LA95 == 66:\r
+                            LA95_164 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_enumerator_list\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterEnumerator_list" ):\r
-                listener.enterEnumerator_list(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitEnumerator_list" ):\r
-                listener.exitEnumerator_list(self)\r
+                        elif LA95 == 76:\r
+                            LA95_165 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 72:\r
+                            LA95_166 = self.input.LA(3)\r
 \r
-    def enumerator_list(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Enumerator_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 36, self.RULE_enumerator_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 319\r
-            self.enumerator()\r
-            self.state = 324\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,28,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 320\r
-                    self.match(CParser.T__3)\r
-                    self.state = 321\r
-                    self.enumerator() \r
-                self.state = 326\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,28,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class EnumeratorContext(ParserRuleContext):\r
+                        elif LA95 == 73:\r
+                            LA95_167 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_168 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_enumerator\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterEnumerator" ):\r
-                listener.enterEnumerator(self)\r
+                        elif LA95 == 70:\r
+                            LA95_169 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitEnumerator" ):\r
-                listener.exitEnumerator(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 71:\r
+                            LA95_170 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def enumerator(self):\r
 \r
-        localctx = CParser.EnumeratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 38, self.RULE_enumerator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 327\r
-            self.match(CParser.IDENTIFIER)\r
-            self.state = 330\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__4:\r
-                self.state = 328\r
-                self.match(CParser.T__4)\r
-                self.state = 329\r
-                self.constant_expression()\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 68:\r
+                            LA95_171 = self.input.LA(3)\r
 \r
-    class Type_qualifierContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
+                        elif LA95 == 69:\r
+                            LA95_172 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_type_qualifier\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterType_qualifier" ):\r
-                listener.enterType_qualifier(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitType_qualifier" ):\r
-                listener.exitType_qualifier(self)\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_173 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_174 = self.input.LA(3)\r
 \r
-    def type_qualifier(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Type_qualifierContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 40, self.RULE_type_qualifier)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 332\r
-            _la = self._input.LA(1)\r
-            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36))) != 0)):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class DeclaratorContext(ParserRuleContext):\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_175 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def direct_declarator(self):\r
-            return self.getTypedRuleContext(CParser.Direct_declaratorContext,0)\r
 \r
+                        elif LA95 == 77:\r
+                            LA95_176 = self.input.LA(3)\r
 \r
-        def pointer(self):\r
-            return self.getTypedRuleContext(CParser.PointerContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_declarator\r
+                        elif LA95 == 94:\r
+                            LA95_177 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDeclarator" ):\r
-                listener.enterDeclarator(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDeclarator" ):\r
-                listener.exitDeclarator(self)\r
 \r
+                        elif LA95 == 93:\r
+                            LA95_178 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def declarator(self):\r
+                        elif LA95 == 92:\r
+                            LA95_179 = self.input.LA(3)\r
 \r
-        localctx = CParser.DeclaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 42, self.RULE_declarator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 348\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,34,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 335\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__41:\r
-                    self.state = 334\r
-                    self.pointer()\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-                self.state = 338\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__33:\r
-                    self.state = 337\r
-                    self.match(CParser.T__33)\r
+                        elif LA95 == 91:\r
+                            LA95_180 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                self.state = 341\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__34:\r
-                    self.state = 340\r
-                    self.match(CParser.T__34)\r
 \r
+                        elif LA95 == 90:\r
+                            LA95_181 = self.input.LA(3)\r
 \r
-                self.state = 344\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__35:\r
-                    self.state = 343\r
-                    self.match(CParser.T__35)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-                self.state = 346\r
-                self.direct_declarator()\r
-                pass\r
+                        elif LA95 == 27:\r
+                            LA95_182 = self.input.LA(3)\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 347\r
-                self.pointer()\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
 \r
-    class Direct_declaratorContext(ParserRuleContext):\r
+                    elif LA95 == STRING_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == IDENTIFIER:\r
+                            LA95_185 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def declarator_suffix(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Declarator_suffixContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Declarator_suffixContext,i)\r
+                        elif LA95 == 64:\r
+                            LA95_186 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def declarator(self):\r
-            return self.getTypedRuleContext(CParser.DeclaratorContext,0)\r
 \r
+                        elif LA95 == 62:\r
+                            LA95_187 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_direct_declarator\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDirect_declarator" ):\r
-                listener.enterDirect_declarator(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDirect_declarator" ):\r
-                listener.exitDirect_declarator(self)\r
+                        elif LA95 == 75:\r
+                            LA95_188 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 66:\r
+                            LA95_189 = self.input.LA(3)\r
 \r
-    def direct_declarator(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Direct_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 44, self.RULE_direct_declarator)\r
-        try:\r
-            self.state = 368\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.IDENTIFIER]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 350\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 354\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,35,self._ctx)\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt==1:\r
-                        self.state = 351\r
-                        self.declarator_suffix() \r
-                    self.state = 356\r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,35,self._ctx)\r
-\r
-                pass\r
-            elif token in [CParser.T__37]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 357\r
-                self.match(CParser.T__37)\r
-                self.state = 359\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,36,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 358\r
-                    self.match(CParser.T__33)\r
-\r
-\r
-                self.state = 361\r
-                self.declarator()\r
-                self.state = 362\r
-                self.match(CParser.T__38)\r
-                self.state = 364 \r
-                self._errHandler.sync(self)\r
-                _alt = 1\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt == 1:\r
-                        self.state = 363\r
-                        self.declarator_suffix()\r
 \r
-                    else:\r
-                        raise NoViableAltException(self)\r
-                    self.state = 366 \r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,37,self._ctx)\r
+                        elif LA95 == 76:\r
+                            LA95_190 = self.input.LA(3)\r
 \r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Declarator_suffixContext(ParserRuleContext):\r
+                        elif LA95 == 72:\r
+                            LA95_191 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
 \r
+                        elif LA95 == 73:\r
+                            LA95_192 = self.input.LA(3)\r
 \r
-        def parameter_type_list(self):\r
-            return self.getTypedRuleContext(CParser.Parameter_type_listContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def identifier_list(self):\r
-            return self.getTypedRuleContext(CParser.Identifier_listContext,0)\r
+                        elif LA95 == 70:\r
+                            LA95_193 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_declarator_suffix\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDeclarator_suffix" ):\r
-                listener.enterDeclarator_suffix(self)\r
+                        elif LA95 == 71:\r
+                            LA95_194 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDeclarator_suffix" ):\r
-                listener.exitDeclarator_suffix(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 68:\r
+                            LA95_195 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def declarator_suffix(self):\r
 \r
-        localctx = CParser.Declarator_suffixContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 46, self.RULE_declarator_suffix)\r
-        try:\r
-            self.state = 386\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,39,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 370\r
-                self.match(CParser.T__39)\r
-                self.state = 371\r
-                self.constant_expression()\r
-                self.state = 372\r
-                self.match(CParser.T__40)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 374\r
-                self.match(CParser.T__39)\r
-                self.state = 375\r
-                self.match(CParser.T__40)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 376\r
-                self.match(CParser.T__37)\r
-                self.state = 377\r
-                self.parameter_type_list()\r
-                self.state = 378\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 380\r
-                self.match(CParser.T__37)\r
-                self.state = 381\r
-                self.identifier_list()\r
-                self.state = 382\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 384\r
-                self.match(CParser.T__37)\r
-                self.state = 385\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 69:\r
+                            LA95_196 = self.input.LA(3)\r
 \r
-    class PointerContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def type_qualifier(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Type_qualifierContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Type_qualifierContext,i)\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_197 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def pointer(self):\r
-            return self.getTypedRuleContext(CParser.PointerContext,0)\r
 \r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_198 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_pointer\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterPointer" ):\r
-                listener.enterPointer(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitPointer" ):\r
-                listener.exitPointer(self)\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_199 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 77:\r
+                            LA95_200 = self.input.LA(3)\r
 \r
-    def pointer(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.PointerContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 48, self.RULE_pointer)\r
-        try:\r
-            self.state = 400\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,42,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 388\r
-                self.match(CParser.T__41)\r
-                self.state = 390 \r
-                self._errHandler.sync(self)\r
-                _alt = 1\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt == 1:\r
-                        self.state = 389\r
-                        self.type_qualifier()\r
 \r
-                    else:\r
-                        raise NoViableAltException(self)\r
-                    self.state = 392 \r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,40,self._ctx)\r
-\r
-                self.state = 395\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,41,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 394\r
-                    self.pointer()\r
+                        elif LA95 == 94:\r
+                            LA95_201 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                pass\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 397\r
-                self.match(CParser.T__41)\r
-                self.state = 398\r
-                self.pointer()\r
-                pass\r
+                        elif LA95 == 93:\r
+                            LA95_202 = self.input.LA(3)\r
 \r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 399\r
-                self.match(CParser.T__41)\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 92:\r
+                            LA95_203 = self.input.LA(3)\r
 \r
-    class Parameter_type_listContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def parameter_list(self):\r
-            return self.getTypedRuleContext(CParser.Parameter_listContext,0)\r
+                        elif LA95 == 91:\r
+                            LA95_204 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_parameter_type_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterParameter_type_list" ):\r
-                listener.enterParameter_type_list(self)\r
+                        elif LA95 == 90:\r
+                            LA95_205 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitParameter_type_list" ):\r
-                listener.exitParameter_type_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 27:\r
+                            LA95_206 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def parameter_type_list(self):\r
 \r
-        localctx = CParser.Parameter_type_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 50, self.RULE_parameter_type_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 402\r
-            self.parameter_list()\r
-            self.state = 408\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__3:\r
-                self.state = 403\r
-                self.match(CParser.T__3)\r
-                self.state = 405\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__28:\r
-                    self.state = 404\r
-                    self.match(CParser.T__28)\r
-\r
-\r
-                self.state = 407\r
-                self.match(CParser.T__42)\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_208 = self.input.LA(3)\r
 \r
-    class Parameter_listContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def parameter_declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Parameter_declarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Parameter_declarationContext,i)\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_209 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_parameter_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterParameter_list" ):\r
-                listener.enterParameter_list(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitParameter_list" ):\r
-                listener.exitParameter_list(self)\r
+                    elif LA95 == FLOATING_POINT_LITERAL:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 64:\r
+                            LA95_211 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 62:\r
+                            LA95_212 = self.input.LA(3)\r
 \r
-    def parameter_list(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Parameter_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 52, self.RULE_parameter_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 410\r
-            self.parameter_declaration()\r
-            self.state = 418\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,46,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 411\r
-                    self.match(CParser.T__3)\r
-                    self.state = 413\r
-                    self._errHandler.sync(self)\r
-                    la_ = self._interp.adaptivePredict(self._input,45,self._ctx)\r
-                    if la_ == 1:\r
-                        self.state = 412\r
-                        self.match(CParser.T__28)\r
-\r
-\r
-                    self.state = 415\r
-                    self.parameter_declaration() \r
-                self.state = 420\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,46,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Parameter_declarationContext(ParserRuleContext):\r
+                        elif LA95 == 75:\r
+                            LA95_213 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def declaration_specifiers(self):\r
-            return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)\r
 \r
+                        elif LA95 == 66:\r
+                            LA95_214 = self.input.LA(3)\r
 \r
-        def declarator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclaratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclaratorContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def abstract_declarator(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Abstract_declaratorContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Abstract_declaratorContext,i)\r
+                        elif LA95 == 76:\r
+                            LA95_215 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def pointer(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.PointerContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.PointerContext,i)\r
+                        elif LA95 == 72:\r
+                            LA95_216 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_parameter_declaration\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterParameter_declaration" ):\r
-                listener.enterParameter_declaration(self)\r
+                        elif LA95 == 73:\r
+                            LA95_217 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitParameter_declaration" ):\r
-                listener.exitParameter_declaration(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 70:\r
+                            LA95_218 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def parameter_declaration(self):\r
 \r
-        localctx = CParser.Parameter_declarationContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 54, self.RULE_parameter_declaration)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 439\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,51,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 421\r
-                self.declaration_specifiers()\r
-                self.state = 426\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (CParser.T__33 - 34)) | (1 << (CParser.T__34 - 34)) | (1 << (CParser.T__35 - 34)) | (1 << (CParser.T__37 - 34)) | (1 << (CParser.T__39 - 34)) | (1 << (CParser.T__41 - 34)) | (1 << (CParser.IDENTIFIER - 34)))) != 0):\r
-                    self.state = 424\r
-                    self._errHandler.sync(self)\r
-                    la_ = self._interp.adaptivePredict(self._input,47,self._ctx)\r
-                    if la_ == 1:\r
-                        self.state = 422\r
-                        self.declarator()\r
-                        pass\r
-\r
-                    elif la_ == 2:\r
-                        self.state = 423\r
-                        self.abstract_declarator()\r
-                        pass\r
+                        elif LA95 == 71:\r
+                            LA95_219 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                    self.state = 428\r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
 \r
-                self.state = 430\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__28:\r
-                    self.state = 429\r
-                    self.match(CParser.T__28)\r
+                        elif LA95 == 68:\r
+                            LA95_220 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                pass\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 435\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while _la==CParser.T__41:\r
-                    self.state = 432\r
-                    self.pointer()\r
-                    self.state = 437\r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
+                        elif LA95 == 69:\r
+                            LA95_221 = self.input.LA(3)\r
 \r
-                self.state = 438\r
-                self.match(CParser.IDENTIFIER)\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == 101 or LA95 == 102:\r
+                            LA95_222 = self.input.LA(3)\r
 \r
-    class Identifier_listContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def IDENTIFIER(self, i:int=None):\r
-            if i is None:\r
-                return self.getTokens(CParser.IDENTIFIER)\r
-            else:\r
-                return self.getToken(CParser.IDENTIFIER, i)\r
+                        elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100:\r
+                            LA95_223 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_identifier_list\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterIdentifier_list" ):\r
-                listener.enterIdentifier_list(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitIdentifier_list" ):\r
-                listener.exitIdentifier_list(self)\r
+                        elif LA95 == 95 or LA95 == 96:\r
+                            LA95_224 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 77:\r
+                            LA95_225 = self.input.LA(3)\r
 \r
-    def identifier_list(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Identifier_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 56, self.RULE_identifier_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 441\r
-            self.match(CParser.IDENTIFIER)\r
-            self.state = 446\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 442\r
-                self.match(CParser.T__3)\r
-                self.state = 443\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 448\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Type_nameContext(ParserRuleContext):\r
+                        elif LA95 == 94:\r
+                            LA95_226 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def specifier_qualifier_list(self):\r
-            return self.getTypedRuleContext(CParser.Specifier_qualifier_listContext,0)\r
 \r
+                        elif LA95 == 93:\r
+                            LA95_227 = self.input.LA(3)\r
 \r
-        def abstract_declarator(self):\r
-            return self.getTypedRuleContext(CParser.Abstract_declaratorContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def type_id(self):\r
-            return self.getTypedRuleContext(CParser.Type_idContext,0)\r
+                        elif LA95 == 92:\r
+                            LA95_228 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_type_name\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterType_name" ):\r
-                listener.enterType_name(self)\r
+                        elif LA95 == 91:\r
+                            LA95_229 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitType_name" ):\r
-                listener.exitType_name(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 90:\r
+                            LA95_230 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def type_name(self):\r
 \r
-        localctx = CParser.Type_nameContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 58, self.RULE_type_name)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 454\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,54,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 449\r
-                self.specifier_qualifier_list()\r
-                self.state = 451\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__37) | (1 << CParser.T__39) | (1 << CParser.T__41))) != 0):\r
-                    self.state = 450\r
-                    self.abstract_declarator()\r
+                        elif LA95 == 27:\r
+                            LA95_231 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                pass\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 453\r
-                self.type_id()\r
-                pass\r
+                        elif LA95 == 25:\r
+                            alt95 = 1\r
+                        elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89:\r
+                            LA95_234 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Abstract_declaratorContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                    elif LA95 == 62:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == IDENTIFIER:\r
+                            LA95_235 = self.input.LA(3)\r
 \r
-        def pointer(self):\r
-            return self.getTypedRuleContext(CParser.PointerContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def direct_abstract_declarator(self):\r
-            return self.getTypedRuleContext(CParser.Direct_abstract_declaratorContext,0)\r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_236 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_abstract_declarator\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAbstract_declarator" ):\r
-                listener.enterAbstract_declarator(self)\r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_237 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAbstract_declarator" ):\r
-                listener.exitAbstract_declarator(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_238 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def abstract_declarator(self):\r
 \r
-        localctx = CParser.Abstract_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 60, self.RULE_abstract_declarator)\r
-        try:\r
-            self.state = 461\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__41]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 456\r
-                self.pointer()\r
-                self.state = 458\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,55,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 457\r
-                    self.direct_abstract_declarator()\r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_239 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-                pass\r
-            elif token in [CParser.T__37, CParser.T__39]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 460\r
-                self.direct_abstract_declarator()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_240 = self.input.LA(3)\r
 \r
-    class Direct_abstract_declaratorContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def abstract_declarator(self):\r
-            return self.getTypedRuleContext(CParser.Abstract_declaratorContext,0)\r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_241 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def abstract_declarator_suffix(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Abstract_declarator_suffixContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Abstract_declarator_suffixContext,i)\r
 \r
+                        elif LA95 == 62:\r
+                            LA95_242 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_direct_abstract_declarator\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterDirect_abstract_declarator" ):\r
-                listener.enterDirect_abstract_declarator(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitDirect_abstract_declarator" ):\r
-                listener.exitDirect_abstract_declarator(self)\r
+                        elif LA95 == 72:\r
+                            LA95_243 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 73:\r
+                            LA95_244 = self.input.LA(3)\r
 \r
-    def direct_abstract_declarator(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Direct_abstract_declaratorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 62, self.RULE_direct_abstract_declarator)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 468\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,57,self._ctx)\r
-            if la_ == 1:\r
-                self.state = 463\r
-                self.match(CParser.T__37)\r
-                self.state = 464\r
-                self.abstract_declarator()\r
-                self.state = 465\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.state = 467\r
-                self.abstract_declarator_suffix()\r
-                pass\r
-\r
-\r
-            self.state = 473\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,58,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 470\r
-                    self.abstract_declarator_suffix() \r
-                self.state = 475\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,58,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Abstract_declarator_suffixContext(ParserRuleContext):\r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_245 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
 \r
+                        elif LA95 == 74:\r
+                            LA95_246 = self.input.LA(3)\r
 \r
-        def parameter_type_list(self):\r
-            return self.getTypedRuleContext(CParser.Parameter_type_listContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_abstract_declarator_suffix\r
+                        elif LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61:\r
+                            LA95_247 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAbstract_declarator_suffix" ):\r
-                listener.enterAbstract_declarator_suffix(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAbstract_declarator_suffix" ):\r
-                listener.exitAbstract_declarator_suffix(self)\r
 \r
+                        elif LA95 == 34:\r
+                            LA95_248 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def abstract_declarator_suffix(self):\r
+                        elif LA95 == 35:\r
+                            LA95_249 = self.input.LA(3)\r
 \r
-        localctx = CParser.Abstract_declarator_suffixContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 64, self.RULE_abstract_declarator_suffix)\r
-        try:\r
-            self.state = 488\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,59,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 476\r
-                self.match(CParser.T__39)\r
-                self.state = 477\r
-                self.match(CParser.T__40)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 478\r
-                self.match(CParser.T__39)\r
-                self.state = 479\r
-                self.constant_expression()\r
-                self.state = 480\r
-                self.match(CParser.T__40)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 482\r
-                self.match(CParser.T__37)\r
-                self.state = 483\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 484\r
-                self.match(CParser.T__37)\r
-                self.state = 485\r
-                self.parameter_type_list()\r
-                self.state = 486\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class InitializerContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                        elif LA95 == 36:\r
+                            LA95_250 = self.input.LA(3)\r
 \r
-        def assignment_expression(self):\r
-            return self.getTypedRuleContext(CParser.Assignment_expressionContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def initializer_list(self):\r
-            return self.getTypedRuleContext(CParser.Initializer_listContext,0)\r
+                        elif LA95 == 37:\r
+                            LA95_251 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_initializer\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInitializer" ):\r
-                listener.enterInitializer(self)\r
+                        elif LA95 == 38:\r
+                            LA95_252 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInitializer" ):\r
-                listener.exitInitializer(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 39:\r
+                            LA95_253 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def initializer(self):\r
 \r
-        localctx = CParser.InitializerContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 66, self.RULE_initializer)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 498\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__37, CParser.T__41, CParser.T__43, CParser.T__44, CParser.T__47, CParser.T__48, CParser.T__49, CParser.T__52, CParser.T__53, CParser.T__54, CParser.IDENTIFIER, CParser.CHARACTER_LITERAL, CParser.STRING_LITERAL, CParser.HEX_LITERAL, CParser.DECIMAL_LITERAL, CParser.OCTAL_LITERAL, CParser.FLOATING_POINT_LITERAL]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 490\r
-                self.assignment_expression()\r
-                pass\r
-            elif token in [CParser.T__0]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 491\r
-                self.match(CParser.T__0)\r
-                self.state = 492\r
-                self.initializer_list()\r
-                self.state = 494\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__3:\r
-                    self.state = 493\r
-                    self.match(CParser.T__3)\r
-\r
-\r
-                self.state = 496\r
-                self.match(CParser.T__19)\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                        elif LA95 == 40:\r
+                            LA95_254 = self.input.LA(3)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class Initializer_listContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                        elif LA95 == 41:\r
+                            LA95_255 = self.input.LA(3)\r
 \r
-        def initializer(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.InitializerContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.InitializerContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_initializer_list\r
+                        elif LA95 == 42:\r
+                            LA95_256 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInitializer_list" ):\r
-                listener.enterInitializer_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInitializer_list" ):\r
-                listener.exitInitializer_list(self)\r
 \r
+                        elif LA95 == 45 or LA95 == 46:\r
+                            LA95_257 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def initializer_list(self):\r
+                        elif LA95 == 48:\r
+                            LA95_258 = self.input.LA(3)\r
 \r
-        localctx = CParser.Initializer_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 68, self.RULE_initializer_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 500\r
-            self.initializer()\r
-            self.state = 505\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,62,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 501\r
-                    self.match(CParser.T__3)\r
-                    self.state = 502\r
-                    self.initializer() \r
-                self.state = 507\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,62,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class Argument_expression_listContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def assignment_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Assignment_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Assignment_expressionContext,i)\r
+                    elif LA95 == 72:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == IDENTIFIER:\r
+                            LA95_259 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_argument_expression_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterArgument_expression_list" ):\r
-                listener.enterArgument_expression_list(self)\r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_260 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitArgument_expression_list" ):\r
-                listener.exitArgument_expression_list(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_261 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def argument_expression_list(self):\r
 \r
-        localctx = CParser.Argument_expression_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 70, self.RULE_argument_expression_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 508\r
-            self.assignment_expression()\r
-            self.state = 510\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__28:\r
-                self.state = 509\r
-                self.match(CParser.T__28)\r
-\r
-\r
-            self.state = 519\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 512\r
-                self.match(CParser.T__3)\r
-                self.state = 513\r
-                self.assignment_expression()\r
-                self.state = 515\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                if _la==CParser.T__28:\r
-                    self.state = 514\r
-                    self.match(CParser.T__28)\r
-\r
-\r
-                self.state = 521\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_262 = self.input.LA(3)\r
 \r
-    class Additive_expressionContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def multiplicative_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Multiplicative_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Multiplicative_expressionContext,i)\r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_263 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_additive_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAdditive_expression" ):\r
-                listener.enterAdditive_expression(self)\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_264 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAdditive_expression" ):\r
-                listener.exitAdditive_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_265 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def additive_expression(self):\r
 \r
-        localctx = CParser.Additive_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 72, self.RULE_additive_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 522\r
-            self.multiplicative_expression()\r
-            self.state = 529\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__43 or _la==CParser.T__44:\r
-                self.state = 527\r
-                self._errHandler.sync(self)\r
-                token = self._input.LA(1)\r
-                if token in [CParser.T__43]:\r
-                    self.state = 523\r
-                    self.match(CParser.T__43)\r
-                    self.state = 524\r
-                    self.multiplicative_expression()\r
-                    pass\r
-                elif token in [CParser.T__44]:\r
-                    self.state = 525\r
-                    self.match(CParser.T__44)\r
-                    self.state = 526\r
-                    self.multiplicative_expression()\r
-                    pass\r
-                else:\r
-                    raise NoViableAltException(self)\r
+                        elif LA95 == 62:\r
+                            LA95_266 = self.input.LA(3)\r
 \r
-                self.state = 531\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Multiplicative_expressionContext(ParserRuleContext):\r
+                        elif LA95 == 72:\r
+                            LA95_267 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def cast_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Cast_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Cast_expressionContext,i)\r
 \r
+                        elif LA95 == 73:\r
+                            LA95_268 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_multiplicative_expression\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterMultiplicative_expression" ):\r
-                listener.enterMultiplicative_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitMultiplicative_expression" ):\r
-                listener.exitMultiplicative_expression(self)\r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_269 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 74:\r
+                            LA95_270 = self.input.LA(3)\r
 \r
-    def multiplicative_expression(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Multiplicative_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 74, self.RULE_multiplicative_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 532\r
-            self.cast_expression()\r
-            self.state = 541\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__41) | (1 << CParser.T__45) | (1 << CParser.T__46))) != 0):\r
-                self.state = 539\r
-                self._errHandler.sync(self)\r
-                token = self._input.LA(1)\r
-                if token in [CParser.T__41]:\r
-                    self.state = 533\r
-                    self.match(CParser.T__41)\r
-                    self.state = 534\r
-                    self.cast_expression()\r
-                    pass\r
-                elif token in [CParser.T__45]:\r
-                    self.state = 535\r
-                    self.match(CParser.T__45)\r
-                    self.state = 536\r
-                    self.cast_expression()\r
-                    pass\r
-                elif token in [CParser.T__46]:\r
-                    self.state = 537\r
-                    self.match(CParser.T__46)\r
-                    self.state = 538\r
-                    self.cast_expression()\r
-                    pass\r
-                else:\r
-                    raise NoViableAltException(self)\r
 \r
-                self.state = 543\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                    elif LA95 == 73:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == IDENTIFIER:\r
+                            LA95_271 = self.input.LA(3)\r
 \r
-    class Cast_expressionContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def type_name(self):\r
-            return self.getTypedRuleContext(CParser.Type_nameContext,0)\r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_272 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def cast_expression(self):\r
-            return self.getTypedRuleContext(CParser.Cast_expressionContext,0)\r
 \r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_273 = self.input.LA(3)\r
 \r
-        def unary_expression(self):\r
-            return self.getTypedRuleContext(CParser.Unary_expressionContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_cast_expression\r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_274 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterCast_expression" ):\r
-                listener.enterCast_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitCast_expression" ):\r
-                listener.exitCast_expression(self)\r
 \r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_275 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def cast_expression(self):\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_276 = self.input.LA(3)\r
 \r
-        localctx = CParser.Cast_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 76, self.RULE_cast_expression)\r
-        try:\r
-            self.state = 550\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,70,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 544\r
-                self.match(CParser.T__37)\r
-                self.state = 545\r
-                self.type_name()\r
-                self.state = 546\r
-                self.match(CParser.T__38)\r
-                self.state = 547\r
-                self.cast_expression()\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 549\r
-                self.unary_expression()\r
-                pass\r
 \r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_277 = self.input.LA(3)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    class Unary_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                        elif LA95 == 62:\r
+                            LA95_278 = self.input.LA(3)\r
 \r
-        def postfix_expression(self):\r
-            return self.getTypedRuleContext(CParser.Postfix_expressionContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def unary_expression(self):\r
-            return self.getTypedRuleContext(CParser.Unary_expressionContext,0)\r
+                        elif LA95 == 72:\r
+                            LA95_279 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def unary_operator(self):\r
-            return self.getTypedRuleContext(CParser.Unary_operatorContext,0)\r
 \r
+                        elif LA95 == 73:\r
+                            LA95_280 = self.input.LA(3)\r
 \r
-        def cast_expression(self):\r
-            return self.getTypedRuleContext(CParser.Cast_expressionContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def type_name(self):\r
-            return self.getTypedRuleContext(CParser.Type_nameContext,0)\r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_281 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_unary_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterUnary_expression" ):\r
-                listener.enterUnary_expression(self)\r
+                        elif LA95 == 74:\r
+                            LA95_282 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitUnary_expression" ):\r
-                listener.exitUnary_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
 \r
+                    elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 62:\r
+                            LA95_283 = self.input.LA(3)\r
 \r
-    def unary_expression(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Unary_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 78, self.RULE_unary_expression)\r
-        try:\r
-            self.state = 567\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,71,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 552\r
-                self.postfix_expression()\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 553\r
-                self.match(CParser.T__47)\r
-                self.state = 554\r
-                self.unary_expression()\r
-                pass\r
 \r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 555\r
-                self.match(CParser.T__48)\r
-                self.state = 556\r
-                self.unary_expression()\r
-                pass\r
+                        elif LA95 == IDENTIFIER:\r
+                            LA95_284 = self.input.LA(3)\r
 \r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 557\r
-                self.unary_operator()\r
-                self.state = 558\r
-                self.cast_expression()\r
-                pass\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 560\r
-                self.match(CParser.T__49)\r
-                self.state = 561\r
-                self.unary_expression()\r
-                pass\r
-\r
-            elif la_ == 6:\r
-                self.enterOuterAlt(localctx, 6)\r
-                self.state = 562\r
-                self.match(CParser.T__49)\r
-                self.state = 563\r
-                self.match(CParser.T__37)\r
-                self.state = 564\r
-                self.type_name()\r
-                self.state = 565\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
-\r
-    class Postfix_expressionContext(ParserRuleContext):\r
-\r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.FuncCallText = ''\r
-            self.p = None # Primary_expressionContext\r
-            self.a = None # Token\r
-            self.c = None # Argument_expression_listContext\r
-            self.b = None # Token\r
-            self.x = None # Token\r
-            self.y = None # Token\r
-            self.z = None # Token\r
-\r
-        def primary_expression(self):\r
-            return self.getTypedRuleContext(CParser.Primary_expressionContext,0)\r
-\r
-\r
-        def expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.ExpressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.ExpressionContext,i)\r
 \r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_285 = self.input.LA(3)\r
 \r
-        def macro_parameter_list(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Macro_parameter_listContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Macro_parameter_listContext,i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def argument_expression_list(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Argument_expression_listContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Argument_expression_listContext,i)\r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_286 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def IDENTIFIER(self, i:int=None):\r
-            if i is None:\r
-                return self.getTokens(CParser.IDENTIFIER)\r
-            else:\r
-                return self.getToken(CParser.IDENTIFIER, i)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_postfix_expression\r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_287 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterPostfix_expression" ):\r
-                listener.enterPostfix_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitPostfix_expression" ):\r
-                listener.exitPostfix_expression(self)\r
 \r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_288 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-    def postfix_expression(self):\r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_289 = self.input.LA(3)\r
 \r
-        localctx = CParser.Postfix_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 80, self.RULE_postfix_expression)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        self.FuncCallText=''\r
-            \r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 569\r
-            localctx.p = self.primary_expression()\r
-            self.FuncCallText += (None if localctx.p is None else self._input.getText((localctx.p.start,localctx.p.stop)))\r
-            self.state = 600\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,73,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 598\r
-                    self._errHandler.sync(self)\r
-                    la_ = self._interp.adaptivePredict(self._input,72,self._ctx)\r
-                    if la_ == 1:\r
-                        self.state = 571\r
-                        self.match(CParser.T__39)\r
-                        self.state = 572\r
-                        self.expression()\r
-                        self.state = 573\r
-                        self.match(CParser.T__40)\r
-                        pass\r
-\r
-                    elif la_ == 2:\r
-                        self.state = 575\r
-                        self.match(CParser.T__37)\r
-                        self.state = 576\r
-                        localctx.a = self.match(CParser.T__38)\r
-                        self.StoreFunctionCalling((None if localctx.p is None else localctx.p.start).line, (None if localctx.p is None else localctx.p.start).column, (0 if localctx.a is None else localctx.a.line), localctx.a.start.column, self.FuncCallText, '')\r
-                        pass\r
-\r
-                    elif la_ == 3:\r
-                        self.state = 578\r
-                        self.match(CParser.T__37)\r
-                        self.state = 579\r
-                        localctx.c = self.argument_expression_list()\r
-                        self.state = 580\r
-                        localctx.b = self.match(CParser.T__38)\r
-                        self.StoreFunctionCalling((None if localctx.p is None else localctx.p.start).line, (None if localctx.p is None else localctx.p.start).column, (0 if localctx.b is None else localctx.b.line), localctx.b.column, self.FuncCallText, (None if localctx.c is None else self._input.getText((localctx.c.start,localctx.c.stop))))\r
-                        pass\r
-\r
-                    elif la_ == 4:\r
-                        self.state = 583\r
-                        self.match(CParser.T__37)\r
-                        self.state = 584\r
-                        self.macro_parameter_list()\r
-                        self.state = 585\r
-                        self.match(CParser.T__38)\r
-                        pass\r
-\r
-                    elif la_ == 5:\r
-                        self.state = 587\r
-                        self.match(CParser.T__50)\r
-                        self.state = 588\r
-                        localctx.x = self.match(CParser.IDENTIFIER)\r
-                        self.FuncCallText += '.' + (None if localctx.x is None else localctx.x.text)\r
-                        pass\r
-\r
-                    elif la_ == 6:\r
-                        self.state = 590\r
-                        self.match(CParser.T__41)\r
-                        self.state = 591\r
-                        localctx.y = self.match(CParser.IDENTIFIER)\r
-                        self.FuncCallText = (None if localctx.y is None else localctx.y.text)\r
-                        pass\r
-\r
-                    elif la_ == 7:\r
-                        self.state = 593\r
-                        self.match(CParser.T__51)\r
-                        self.state = 594\r
-                        localctx.z = self.match(CParser.IDENTIFIER)\r
-                        self.FuncCallText += '->' + (None if localctx.z is None else localctx.z.text)\r
-                        pass\r
-\r
-                    elif la_ == 8:\r
-                        self.state = 596\r
-                        self.match(CParser.T__47)\r
-                        pass\r
-\r
-                    elif la_ == 9:\r
-                        self.state = 597\r
-                        self.match(CParser.T__48)\r
-                        pass\r
-\r
-             \r
-                self.state = 602\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,73,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Macro_parameter_listContext(ParserRuleContext):\r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_290 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def parameter_declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Parameter_declarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Parameter_declarationContext,i)\r
 \r
+                        elif LA95 == 72:\r
+                            LA95_291 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_macro_parameter_list\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterMacro_parameter_list" ):\r
-                listener.enterMacro_parameter_list(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitMacro_parameter_list" ):\r
-                listener.exitMacro_parameter_list(self)\r
+                        elif LA95 == 73:\r
+                            LA95_292 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_293 = self.input.LA(3)\r
 \r
-    def macro_parameter_list(self):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        localctx = CParser.Macro_parameter_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 82, self.RULE_macro_parameter_list)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 603\r
-            self.parameter_declaration()\r
-            self.state = 608\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 604\r
-                self.match(CParser.T__3)\r
-                self.state = 605\r
-                self.parameter_declaration()\r
-                self.state = 610\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Unary_operatorContext(ParserRuleContext):\r
+                        elif LA95 == 74:\r
+                            LA95_294 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_unary_operator\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterUnary_operator" ):\r
-                listener.enterUnary_operator(self)\r
+                    elif LA95 == 74:\r
+                        LA95 = self.input.LA(2)\r
+                        if LA95 == 62:\r
+                            LA95_295 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitUnary_operator" ):\r
-                listener.exitUnary_operator(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == IDENTIFIER:\r
+                            LA95_296 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def unary_operator(self):\r
 \r
-        localctx = CParser.Unary_operatorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 84, self.RULE_unary_operator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 611\r
-            _la = self._input.LA(1)\r
-            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__41) | (1 << CParser.T__43) | (1 << CParser.T__44) | (1 << CParser.T__52) | (1 << CParser.T__53) | (1 << CParser.T__54))) != 0)):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == HEX_LITERAL:\r
+                            LA95_297 = self.input.LA(3)\r
 \r
-    class Primary_expressionContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+                        elif LA95 == OCTAL_LITERAL:\r
+                            LA95_298 = self.input.LA(3)\r
 \r
-        def constant(self):\r
-            return self.getTypedRuleContext(CParser.ConstantContext,0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+                        elif LA95 == DECIMAL_LITERAL:\r
+                            LA95_299 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_primary_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterPrimary_expression" ):\r
-                listener.enterPrimary_expression(self)\r
+                        elif LA95 == CHARACTER_LITERAL:\r
+                            LA95_300 = self.input.LA(3)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitPrimary_expression" ):\r
-                listener.exitPrimary_expression(self)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
+                        elif LA95 == STRING_LITERAL:\r
+                            LA95_301 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-    def primary_expression(self):\r
 \r
-        localctx = CParser.Primary_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 86, self.RULE_primary_expression)\r
-        try:\r
-            self.state = 619\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,75,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 613\r
-                self.match(CParser.IDENTIFIER)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 614\r
-                self.constant()\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 615\r
-                self.match(CParser.T__37)\r
-                self.state = 616\r
-                self.expression()\r
-                self.state = 617\r
-                self.match(CParser.T__38)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        elif LA95 == FLOATING_POINT_LITERAL:\r
+                            LA95_302 = self.input.LA(3)\r
 \r
-    class ConstantContext(ParserRuleContext):\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def HEX_LITERAL(self):\r
-            return self.getToken(CParser.HEX_LITERAL, 0)\r
+                        elif LA95 == 72:\r
+                            LA95_303 = self.input.LA(3)\r
 \r
-        def OCTAL_LITERAL(self):\r
-            return self.getToken(CParser.OCTAL_LITERAL, 0)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def DECIMAL_LITERAL(self):\r
-            return self.getToken(CParser.DECIMAL_LITERAL, 0)\r
 \r
-        def CHARACTER_LITERAL(self):\r
-            return self.getToken(CParser.CHARACTER_LITERAL, 0)\r
+                        elif LA95 == 73:\r
+                            LA95_304 = self.input.LA(3)\r
 \r
-        def IDENTIFIER(self, i:int=None):\r
-            if i is None:\r
-                return self.getTokens(CParser.IDENTIFIER)\r
-            else:\r
-                return self.getToken(CParser.IDENTIFIER, i)\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def STRING_LITERAL(self, i:int=None):\r
-            if i is None:\r
-                return self.getTokens(CParser.STRING_LITERAL)\r
-            else:\r
-                return self.getToken(CParser.STRING_LITERAL, i)\r
 \r
-        def FLOATING_POINT_LITERAL(self):\r
-            return self.getToken(CParser.FLOATING_POINT_LITERAL, 0)\r
+                        elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79:\r
+                            LA95_305 = self.input.LA(3)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_constant\r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterConstant" ):\r
-                listener.enterConstant(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitConstant" ):\r
-                listener.exitConstant(self)\r
+                        elif LA95 == 74:\r
+                            LA95_306 = self.input.LA(3)\r
 \r
+                            if (self.synpred188()) :\r
+                                alt95 = 1\r
 \r
 \r
 \r
-    def constant(self):\r
+                    elif LA95 == 25 or LA95 == 26 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 43 or LA95 == 45 or LA95 == 46 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61 or LA95 == 103 or LA95 == 104 or LA95 == 105 or LA95 == 106 or LA95 == 107 or LA95 == 108 or LA95 == 110 or LA95 == 111 or LA95 == 112 or LA95 == 113 or LA95 == 114 or LA95 == 115 or LA95 == 116 or LA95 == 117:\r
+                        alt95 = 1\r
 \r
-        localctx = CParser.ConstantContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 88, self.RULE_constant)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.state = 647\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.HEX_LITERAL]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 621\r
-                self.match(CParser.HEX_LITERAL)\r
-                pass\r
-            elif token in [CParser.OCTAL_LITERAL]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 622\r
-                self.match(CParser.OCTAL_LITERAL)\r
-                pass\r
-            elif token in [CParser.DECIMAL_LITERAL]:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 623\r
-                self.match(CParser.DECIMAL_LITERAL)\r
-                pass\r
-            elif token in [CParser.CHARACTER_LITERAL]:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 624\r
-                self.match(CParser.CHARACTER_LITERAL)\r
-                pass\r
-            elif token in [CParser.IDENTIFIER, CParser.STRING_LITERAL]:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 636 \r
-                self._errHandler.sync(self)\r
-                _alt = 1\r
-                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                    if _alt == 1:\r
-                        self.state = 628\r
-                        self._errHandler.sync(self)\r
-                        _la = self._input.LA(1)\r
-                        while _la==CParser.IDENTIFIER:\r
-                            self.state = 625\r
-                            self.match(CParser.IDENTIFIER)\r
-                            self.state = 630\r
-                            self._errHandler.sync(self)\r
-                            _la = self._input.LA(1)\r
-\r
-                        self.state = 632 \r
-                        self._errHandler.sync(self)\r
-                        _alt = 1\r
-                        while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                            if _alt == 1:\r
-                                self.state = 631\r
-                                self.match(CParser.STRING_LITERAL)\r
-\r
-                            else:\r
-                                raise NoViableAltException(self)\r
-                            self.state = 634 \r
-                            self._errHandler.sync(self)\r
-                            _alt = self._interp.adaptivePredict(self._input,77,self._ctx)\r
+                    if alt95 == 1:\r
+                        # C.g:0:0: statement\r
+                        self.following.append(self.FOLLOW_statement_in_statement_list2242)\r
+                        self.statement()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
 \r
 \r
                     else:\r
-                        raise NoViableAltException(self)\r
-                    self.state = 638 \r
-                    self._errHandler.sync(self)\r
-                    _alt = self._interp.adaptivePredict(self._input,78,self._ctx)\r
-\r
-                self.state = 643\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-                while _la==CParser.IDENTIFIER:\r
-                    self.state = 640\r
-                    self.match(CParser.IDENTIFIER)\r
-                    self.state = 645\r
-                    self._errHandler.sync(self)\r
-                    _la = self._input.LA(1)\r
-\r
-                pass\r
-            elif token in [CParser.FLOATING_POINT_LITERAL]:\r
-                self.enterOuterAlt(localctx, 6)\r
-                self.state = 646\r
-                self.match(CParser.FLOATING_POINT_LITERAL)\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
+                        if cnt95 >= 1:\r
+                            break #loop95\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
 \r
-    class ExpressionContext(ParserRuleContext):\r
+                        eee = EarlyExitException(95, self.input)\r
+                        raise eee\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                    cnt95 += 1\r
 \r
-        def assignment_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Assignment_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Assignment_expressionContext,i)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterExpression" ):\r
-                listener.enterExpression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitExpression" ):\r
-                listener.exitExpression(self)\r
 \r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 67, statement_list_StartIndex)\r
 \r
+            pass\r
 \r
+        return\r
 \r
-    def expression(self):\r
+    # $ANTLR end statement_list\r
 \r
-        localctx = CParser.ExpressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 90, self.RULE_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 649\r
-            self.assignment_expression()\r
-            self.state = 654\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__3:\r
-                self.state = 650\r
-                self.match(CParser.T__3)\r
-                self.state = 651\r
-                self.assignment_expression()\r
-                self.state = 656\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    class expression_statement_return(object):\r
+        def __init__(self):\r
+            self.start = None\r
+            self.stop = None\r
 \r
-    class Constant_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def conditional_expression(self):\r
-            return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)\r
+    # $ANTLR start expression_statement\r
+    # C.g:561:1: expression_statement : ( ';' | expression ';' );\r
+    def expression_statement(self, ):\r
+\r
+        retval = self.expression_statement_return()\r
+        retval.start = self.input.LT(1)\r
+        expression_statement_StartIndex = self.input.index()\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 68):\r
+                    return retval\r
+\r
+                # C.g:562:2: ( ';' | expression ';' )\r
+                alt96 = 2\r
+                LA96_0 = self.input.LA(1)\r
+\r
+                if (LA96_0 == 25) :\r
+                    alt96 = 1\r
+                elif ((IDENTIFIER <= LA96_0 <= FLOATING_POINT_LITERAL) or LA96_0 == 62 or LA96_0 == 66 or (68 <= LA96_0 <= 69) or (72 <= LA96_0 <= 74) or (77 <= LA96_0 <= 79)) :\r
+                    alt96 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return retval\r
 \r
+                    nvae = NoViableAltException("561:1: expression_statement : ( ';' | expression ';' );", 96, 0, self.input)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_constant_expression\r
+                    raise nvae\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterConstant_expression" ):\r
-                listener.enterConstant_expression(self)\r
+                if alt96 == 1:\r
+                    # C.g:562:4: ';'\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2254)\r
+                    if self.failed:\r
+                        return retval\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitConstant_expression" ):\r
-                listener.exitConstant_expression(self)\r
 \r
+                elif alt96 == 2:\r
+                    # C.g:563:4: expression ';'\r
+                    self.following.append(self.FOLLOW_expression_in_expression_statement2259)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return retval\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2261)\r
+                    if self.failed:\r
+                        return retval\r
 \r
 \r
+                retval.stop = self.input.LT(-1)\r
 \r
-    def constant_expression(self):\r
 \r
-        localctx = CParser.Constant_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 92, self.RULE_constant_expression)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 657\r
-            self.conditional_expression()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 68, expression_statement_StartIndex)\r
 \r
-    class Assignment_expressionContext(ParserRuleContext):\r
+            pass\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+        return retval\r
 \r
-        def lvalue(self):\r
-            return self.getTypedRuleContext(CParser.LvalueContext,0)\r
+    # $ANTLR end expression_statement\r
 \r
 \r
-        def assignment_operator(self):\r
-            return self.getTypedRuleContext(CParser.Assignment_operatorContext,0)\r
+    # $ANTLR start selection_statement\r
+    # C.g:566:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement );\r
+    def selection_statement(self, ):\r
 \r
+        selection_statement_StartIndex = self.input.index()\r
+        e = None\r
 \r
-        def assignment_expression(self):\r
-            return self.getTypedRuleContext(CParser.Assignment_expressionContext,0)\r
+\r
+        try:\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 69):\r
+                    return\r
+\r
+                # C.g:567:2: ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement )\r
+                alt98 = 2\r
+                LA98_0 = self.input.LA(1)\r
+\r
+                if (LA98_0 == 108) :\r
+                    alt98 = 1\r
+                elif (LA98_0 == 110) :\r
+                    alt98 = 2\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("566:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement );", 98, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt98 == 1:\r
+                    # C.g:567:4: 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )?\r
+                    self.match(self.input, 108, self.FOLLOW_108_in_selection_statement2272)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2274)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_selection_statement2278)\r
+                    e = self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_selection_statement2280)\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
+\r
+                    self.following.append(self.FOLLOW_statement_in_selection_statement2284)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:567:167: ( options {k=1; backtrack=false; } : 'else' statement )?\r
+                    alt97 = 2\r
+                    LA97_0 = self.input.LA(1)\r
+\r
+                    if (LA97_0 == 109) :\r
+                        alt97 = 1\r
+                    if alt97 == 1:\r
+                        # C.g:567:200: 'else' statement\r
+                        self.match(self.input, 109, self.FOLLOW_109_in_selection_statement2299)\r
+                        if self.failed:\r
+                            return\r
+                        self.following.append(self.FOLLOW_statement_in_selection_statement2301)\r
+                        self.statement()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
+\r
+\r
+\r
+\r
+                elif alt98 == 2:\r
+                    # C.g:568:4: 'switch' '(' expression ')' statement\r
+                    self.match(self.input, 110, self.FOLLOW_110_in_selection_statement2308)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2310)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_selection_statement2312)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_selection_statement2314)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_selection_statement2316)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
 \r
 \r
-        def conditional_expression(self):\r
-            return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)\r
 \r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 69, selection_statement_StartIndex)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_assignment_expression\r
+            pass\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAssignment_expression" ):\r
-                listener.enterAssignment_expression(self)\r
+        return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAssignment_expression" ):\r
-                listener.exitAssignment_expression(self)\r
+    # $ANTLR end selection_statement\r
 \r
 \r
+    # $ANTLR start iteration_statement\r
+    # C.g:571:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement );\r
+    def iteration_statement(self, ):\r
 \r
+        iteration_statement_StartIndex = self.input.index()\r
+        e = None\r
 \r
-    def assignment_expression(self):\r
 \r
-        localctx = CParser.Assignment_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 94, self.RULE_assignment_expression)\r
         try:\r
-            self.state = 664\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,82,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 659\r
-                self.lvalue()\r
-                self.state = 660\r
-                self.assignment_operator()\r
-                self.state = 661\r
-                self.assignment_expression()\r
-                pass\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 70):\r
+                    return\r
+\r
+                # C.g:572:2: ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement )\r
+                alt100 = 3\r
+                LA100 = self.input.LA(1)\r
+                if LA100 == 111:\r
+                    alt100 = 1\r
+                elif LA100 == 112:\r
+                    alt100 = 2\r
+                elif LA100 == 113:\r
+                    alt100 = 3\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("571:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement );", 100, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt100 == 1:\r
+                    # C.g:572:4: 'while' '(' e= expression ')' statement\r
+                    self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2327)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2329)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_iteration_statement2333)\r
+                    e = self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2335)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_iteration_statement2337)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
 \r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 663\r
-                self.conditional_expression()\r
-                pass\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                elif alt100 == 2:\r
+                    # C.g:573:4: 'do' statement 'while' '(' e= expression ')' ';'\r
+                    self.match(self.input, 112, self.FOLLOW_112_in_iteration_statement2344)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_iteration_statement2346)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2348)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2350)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_iteration_statement2354)\r
+                    e = self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2356)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_iteration_statement2358)\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
+\r
+\r
+\r
+                elif alt100 == 3:\r
+                    # C.g:574:4: 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement\r
+                    self.match(self.input, 113, self.FOLLOW_113_in_iteration_statement2365)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2367)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2369)\r
+                    self.expression_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2373)\r
+                    e = self.expression_statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    # C.g:574:58: ( expression )?\r
+                    alt99 = 2\r
+                    LA99_0 = self.input.LA(1)\r
+\r
+                    if ((IDENTIFIER <= LA99_0 <= FLOATING_POINT_LITERAL) or LA99_0 == 62 or LA99_0 == 66 or (68 <= LA99_0 <= 69) or (72 <= LA99_0 <= 74) or (77 <= LA99_0 <= 79)) :\r
+                        alt99 = 1\r
+                    if alt99 == 1:\r
+                        # C.g:0:0: expression\r
+                        self.following.append(self.FOLLOW_expression_in_iteration_statement2375)\r
+                        self.expression()\r
+                        self.following.pop()\r
+                        if self.failed:\r
+                            return\r
+\r
 \r
-    class LvalueContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                    self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2378)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_statement_in_iteration_statement2380)\r
+                    self.statement()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    if self.backtracking == 0:\r
+                        self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start, e.stop))\r
 \r
-        def unary_expression(self):\r
-            return self.getTypedRuleContext(CParser.Unary_expressionContext,0)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_lvalue\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterLvalue" ):\r
-                listener.enterLvalue(self)\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
+        finally:\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 70, iteration_statement_StartIndex)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitLvalue" ):\r
-                listener.exitLvalue(self)\r
+            pass\r
 \r
+        return\r
 \r
+    # $ANTLR end iteration_statement\r
 \r
 \r
-    def lvalue(self):\r
+    # $ANTLR start jump_statement\r
+    # C.g:577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );\r
+    def jump_statement(self, ):\r
 \r
-        localctx = CParser.LvalueContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 96, self.RULE_lvalue)\r
+        jump_statement_StartIndex = self.input.index()\r
         try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 666\r
-            self.unary_expression()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
+            try:\r
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 71):\r
+                    return\r
+\r
+                # C.g:578:2: ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' )\r
+                alt101 = 5\r
+                LA101 = self.input.LA(1)\r
+                if LA101 == 114:\r
+                    alt101 = 1\r
+                elif LA101 == 115:\r
+                    alt101 = 2\r
+                elif LA101 == 116:\r
+                    alt101 = 3\r
+                elif LA101 == 117:\r
+                    LA101_4 = self.input.LA(2)\r
+\r
+                    if (LA101_4 == 25) :\r
+                        alt101 = 4\r
+                    elif ((IDENTIFIER <= LA101_4 <= FLOATING_POINT_LITERAL) or LA101_4 == 62 or LA101_4 == 66 or (68 <= LA101_4 <= 69) or (72 <= LA101_4 <= 74) or (77 <= LA101_4 <= 79)) :\r
+                        alt101 = 5\r
+                    else:\r
+                        if self.backtracking > 0:\r
+                            self.failed = True\r
+                            return\r
+\r
+                        nvae = NoViableAltException("577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 4, self.input)\r
+\r
+                        raise nvae\r
+\r
+                else:\r
+                    if self.backtracking > 0:\r
+                        self.failed = True\r
+                        return\r
+\r
+                    nvae = NoViableAltException("577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 0, self.input)\r
+\r
+                    raise nvae\r
+\r
+                if alt101 == 1:\r
+                    # C.g:578:4: 'goto' IDENTIFIER ';'\r
+                    self.match(self.input, 114, self.FOLLOW_114_in_jump_statement2393)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_jump_statement2395)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2397)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt101 == 2:\r
+                    # C.g:579:4: 'continue' ';'\r
+                    self.match(self.input, 115, self.FOLLOW_115_in_jump_statement2402)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2404)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt101 == 3:\r
+                    # C.g:580:4: 'break' ';'\r
+                    self.match(self.input, 116, self.FOLLOW_116_in_jump_statement2409)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2411)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt101 == 4:\r
+                    # C.g:581:4: 'return' ';'\r
+                    self.match(self.input, 117, self.FOLLOW_117_in_jump_statement2416)\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2418)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+                elif alt101 == 5:\r
+                    # C.g:582:4: 'return' expression ';'\r
+                    self.match(self.input, 117, self.FOLLOW_117_in_jump_statement2423)\r
+                    if self.failed:\r
+                        return\r
+                    self.following.append(self.FOLLOW_expression_in_jump_statement2425)\r
+                    self.expression()\r
+                    self.following.pop()\r
+                    if self.failed:\r
+                        return\r
+                    self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2427)\r
+                    if self.failed:\r
+                        return\r
+\r
+\r
+\r
+            except RecognitionException as re:\r
+                self.reportError(re)\r
+                self.recover(self.input, re)\r
         finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if self.backtracking > 0:\r
+                self.memoize(self.input, 71, jump_statement_StartIndex)\r
+\r
+            pass\r
+\r
+        return\r
+\r
+    # $ANTLR end jump_statement\r
+\r
+    # $ANTLR start synpred2\r
+    def synpred2_fragment(self, ):\r
+        # C.g:119:6: ( declaration_specifiers )\r
+        # C.g:119:6: declaration_specifiers\r
+        self.following.append(self.FOLLOW_declaration_specifiers_in_synpred2100)\r
+        self.declaration_specifiers()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+\r
+\r
+    # $ANTLR end synpred2\r
+\r
+\r
+\r
+    # $ANTLR start synpred4\r
+    def synpred4_fragment(self, ):\r
+        # C.g:119:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )\r
+        # C.g:119:6: ( declaration_specifiers )? declarator ( declaration )* '{'\r
+        # C.g:119:6: ( declaration_specifiers )?\r
+        alt102 = 2\r
+        LA102 = self.input.LA(1)\r
+        if LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33 or LA102 == 34 or LA102 == 35 or LA102 == 36 or LA102 == 37 or LA102 == 38 or LA102 == 39 or LA102 == 40 or LA102 == 41 or LA102 == 42 or LA102 == 45 or LA102 == 46 or LA102 == 48 or LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57 or LA102 == 61:\r
+            alt102 = 1\r
+        elif LA102 == IDENTIFIER:\r
+            LA102 = self.input.LA(2)\r
+            if LA102 == 62:\r
+                LA102_21 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33:\r
+                LA102_23 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 34:\r
+                LA102_24 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 35:\r
+                LA102_25 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 36:\r
+                LA102_26 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 37:\r
+                LA102_27 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 38:\r
+                LA102_28 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 39:\r
+                LA102_29 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 40:\r
+                LA102_30 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 41:\r
+                LA102_31 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 42:\r
+                LA102_32 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 45 or LA102 == 46:\r
+                LA102_33 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 48:\r
+                LA102_34 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == IDENTIFIER:\r
+                LA102_35 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 58:\r
+                LA102_36 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 66:\r
+                alt102 = 1\r
+            elif LA102 == 59:\r
+                LA102_39 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 60:\r
+                LA102_40 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+            elif LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57 or LA102 == 61:\r
+                LA102_41 = self.input.LA(3)\r
+\r
+                if (self.synpred2()) :\r
+                    alt102 = 1\r
+        elif LA102 == 58:\r
+            LA102_14 = self.input.LA(2)\r
+\r
+            if (self.synpred2()) :\r
+                alt102 = 1\r
+        elif LA102 == 59:\r
+            LA102_16 = self.input.LA(2)\r
+\r
+            if (self.synpred2()) :\r
+                alt102 = 1\r
+        elif LA102 == 60:\r
+            LA102_17 = self.input.LA(2)\r
+\r
+            if (self.synpred2()) :\r
+                alt102 = 1\r
+        if alt102 == 1:\r
+            # C.g:0:0: declaration_specifiers\r
+            self.following.append(self.FOLLOW_declaration_specifiers_in_synpred4100)\r
+            self.declaration_specifiers()\r
+            self.following.pop()\r
+            if self.failed:\r
+                return\r
+\r
+\r
+\r
+        self.following.append(self.FOLLOW_declarator_in_synpred4103)\r
+        self.declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        # C.g:119:41: ( declaration )*\r
+        while True: #loop103\r
+            alt103 = 2\r
+            LA103_0 = self.input.LA(1)\r
+\r
+            if (LA103_0 == IDENTIFIER or LA103_0 == 26 or (29 <= LA103_0 <= 42) or (45 <= LA103_0 <= 46) or (48 <= LA103_0 <= 61)) :\r
+                alt103 = 1\r
+\r
+\r
+            if alt103 == 1:\r
+                # C.g:0:0: declaration\r
+                self.following.append(self.FOLLOW_declaration_in_synpred4105)\r
+                self.declaration()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
-    class Assignment_operatorContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+            else:\r
+                break #loop103\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_assignment_operator\r
+        self.match(self.input, 43, self.FOLLOW_43_in_synpred4108)\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAssignment_operator" ):\r
-                listener.enterAssignment_operator(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAssignment_operator" ):\r
-                listener.exitAssignment_operator(self)\r
+    # $ANTLR end synpred4\r
 \r
 \r
 \r
+    # $ANTLR start synpred5\r
+    def synpred5_fragment(self, ):\r
+        # C.g:120:4: ( declaration )\r
+        # C.g:120:4: declaration\r
+        self.following.append(self.FOLLOW_declaration_in_synpred5118)\r
+        self.declaration()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    def assignment_operator(self):\r
 \r
-        localctx = CParser.Assignment_operatorContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 98, self.RULE_assignment_operator)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 668\r
-            _la = self._input.LA(1)\r
-            if not(((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (CParser.T__4 - 5)) | (1 << (CParser.T__55 - 5)) | (1 << (CParser.T__56 - 5)) | (1 << (CParser.T__57 - 5)) | (1 << (CParser.T__58 - 5)) | (1 << (CParser.T__59 - 5)) | (1 << (CParser.T__60 - 5)) | (1 << (CParser.T__61 - 5)) | (1 << (CParser.T__62 - 5)) | (1 << (CParser.T__63 - 5)) | (1 << (CParser.T__64 - 5)))) != 0)):\r
-                self._errHandler.recoverInline(self)\r
-            else:\r
-                self._errHandler.reportMatch(self)\r
-                self.consume()\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred5\r
 \r
-    class Conditional_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.e = None # Logical_or_expressionContext\r
 \r
-        def logical_or_expression(self):\r
-            return self.getTypedRuleContext(CParser.Logical_or_expressionContext,0)\r
+    # $ANTLR start synpred7\r
+    def synpred7_fragment(self, ):\r
+        # C.g:146:6: ( declaration_specifiers )\r
+        # C.g:146:6: declaration_specifiers\r
+        self.following.append(self.FOLLOW_declaration_specifiers_in_synpred7157)\r
+        self.declaration_specifiers()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+    # $ANTLR end synpred7\r
 \r
 \r
-        def conditional_expression(self):\r
-            return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)\r
 \r
+    # $ANTLR start synpred10\r
+    def synpred10_fragment(self, ):\r
+        # C.g:167:18: ( declaration_specifiers )\r
+        # C.g:167:18: declaration_specifiers\r
+        self.following.append(self.FOLLOW_declaration_specifiers_in_synpred10207)\r
+        self.declaration_specifiers()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_conditional_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterConditional_expression" ):\r
-                listener.enterConditional_expression(self)\r
+    # $ANTLR end synpred10\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitConditional_expression" ):\r
-                listener.exitConditional_expression(self)\r
 \r
 \r
+    # $ANTLR start synpred14\r
+    def synpred14_fragment(self, ):\r
+        # C.g:184:7: ( type_specifier )\r
+        # C.g:184:7: type_specifier\r
+        self.following.append(self.FOLLOW_type_specifier_in_synpred14272)\r
+        self.type_specifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-    def conditional_expression(self):\r
+    # $ANTLR end synpred14\r
 \r
-        localctx = CParser.Conditional_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 100, self.RULE_conditional_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 670\r
-            localctx.e = self.logical_or_expression()\r
-            self.state = 677\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__65:\r
-                self.state = 671\r
-                self.match(CParser.T__65)\r
-                self.state = 672\r
-                self.expression()\r
-                self.state = 673\r
-                self.match(CParser.T__22)\r
-                self.state = 674\r
-                self.conditional_expression()\r
-                self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
 \r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred15\r
+    def synpred15_fragment(self, ):\r
+        # C.g:185:13: ( type_qualifier )\r
+        # C.g:185:13: type_qualifier\r
+        self.following.append(self.FOLLOW_type_qualifier_in_synpred15286)\r
+        self.type_qualifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    class Logical_or_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred15\r
 \r
-        def logical_and_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Logical_and_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Logical_and_expressionContext,i)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_logical_or_expression\r
+    # $ANTLR start synpred33\r
+    def synpred33_fragment(self, ):\r
+        # C.g:225:16: ( type_qualifier )\r
+        # C.g:225:16: type_qualifier\r
+        self.following.append(self.FOLLOW_type_qualifier_in_synpred33444)\r
+        self.type_qualifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterLogical_or_expression" ):\r
-                listener.enterLogical_or_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitLogical_or_expression" ):\r
-                listener.exitLogical_or_expression(self)\r
+    # $ANTLR end synpred33\r
 \r
 \r
 \r
+    # $ANTLR start synpred34\r
+    def synpred34_fragment(self, ):\r
+        # C.g:225:4: ( IDENTIFIER ( type_qualifier )* declarator )\r
+        # C.g:225:5: IDENTIFIER ( type_qualifier )* declarator\r
+        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred34442)\r
+        if self.failed:\r
+            return\r
+        # C.g:225:16: ( type_qualifier )*\r
+        while True: #loop106\r
+            alt106 = 2\r
+            LA106 = self.input.LA(1)\r
+            if LA106 == 58:\r
+                LA106_2 = self.input.LA(2)\r
 \r
-    def logical_or_expression(self):\r
+                if (self.synpred33()) :\r
+                    alt106 = 1\r
 \r
-        localctx = CParser.Logical_or_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 102, self.RULE_logical_or_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 679\r
-            self.logical_and_expression()\r
-            self.state = 684\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__66:\r
-                self.state = 680\r
-                self.match(CParser.T__66)\r
-                self.state = 681\r
-                self.logical_and_expression()\r
-                self.state = 686\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Logical_and_expressionContext(ParserRuleContext):\r
+            elif LA106 == 59:\r
+                LA106_3 = self.input.LA(2)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                if (self.synpred33()) :\r
+                    alt106 = 1\r
 \r
-        def inclusive_or_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Inclusive_or_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Inclusive_or_expressionContext,i)\r
 \r
+            elif LA106 == 60:\r
+                LA106_4 = self.input.LA(2)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_logical_and_expression\r
+                if (self.synpred33()) :\r
+                    alt106 = 1\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterLogical_and_expression" ):\r
-                listener.enterLogical_and_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitLogical_and_expression" ):\r
-                listener.exitLogical_and_expression(self)\r
+            elif LA106 == 49 or LA106 == 50 or LA106 == 51 or LA106 == 52 or LA106 == 53 or LA106 == 54 or LA106 == 55 or LA106 == 56 or LA106 == 57 or LA106 == 61:\r
+                alt106 = 1\r
 \r
+            if alt106 == 1:\r
+                # C.g:0:0: type_qualifier\r
+                self.following.append(self.FOLLOW_type_qualifier_in_synpred34444)\r
+                self.type_qualifier()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
 \r
+            else:\r
+                break #loop106\r
 \r
-    def logical_and_expression(self):\r
 \r
-        localctx = CParser.Logical_and_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 104, self.RULE_logical_and_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 687\r
-            self.inclusive_or_expression()\r
-            self.state = 692\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__67:\r
-                self.state = 688\r
-                self.match(CParser.T__67)\r
-                self.state = 689\r
-                self.inclusive_or_expression()\r
-                self.state = 694\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+        self.following.append(self.FOLLOW_declarator_in_synpred34447)\r
+        self.declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    class Inclusive_or_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred34\r
 \r
-        def exclusive_or_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Exclusive_or_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Exclusive_or_expressionContext,i)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_inclusive_or_expression\r
+    # $ANTLR start synpred39\r
+    def synpred39_fragment(self, ):\r
+        # C.g:253:6: ( type_qualifier )\r
+        # C.g:253:6: type_qualifier\r
+        self.following.append(self.FOLLOW_type_qualifier_in_synpred39566)\r
+        self.type_qualifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterInclusive_or_expression" ):\r
-                listener.enterInclusive_or_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitInclusive_or_expression" ):\r
-                listener.exitInclusive_or_expression(self)\r
+    # $ANTLR end synpred39\r
 \r
 \r
 \r
+    # $ANTLR start synpred40\r
+    def synpred40_fragment(self, ):\r
+        # C.g:253:23: ( type_specifier )\r
+        # C.g:253:23: type_specifier\r
+        self.following.append(self.FOLLOW_type_specifier_in_synpred40570)\r
+        self.type_specifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    def inclusive_or_expression(self):\r
 \r
-        localctx = CParser.Inclusive_or_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 106, self.RULE_inclusive_or_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 695\r
-            self.exclusive_or_expression()\r
-            self.state = 700\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__68:\r
-                self.state = 696\r
-                self.match(CParser.T__68)\r
-                self.state = 697\r
-                self.exclusive_or_expression()\r
-                self.state = 702\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred40\r
 \r
-    class Exclusive_or_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def and_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.And_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.And_expressionContext,i)\r
+    # $ANTLR start synpred66\r
+    def synpred66_fragment(self, ):\r
+        # C.g:297:4: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator )\r
+        # C.g:297:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator\r
+        # C.g:297:4: ( pointer )?\r
+        alt111 = 2\r
+        LA111_0 = self.input.LA(1)\r
 \r
+        if (LA111_0 == 66) :\r
+            alt111 = 1\r
+        if alt111 == 1:\r
+            # C.g:0:0: pointer\r
+            self.following.append(self.FOLLOW_pointer_in_synpred66784)\r
+            self.pointer()\r
+            self.following.pop()\r
+            if self.failed:\r
+                return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_exclusive_or_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterExclusive_or_expression" ):\r
-                listener.enterExclusive_or_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitExclusive_or_expression" ):\r
-                listener.exitExclusive_or_expression(self)\r
+        # C.g:297:13: ( 'EFIAPI' )?\r
+        alt112 = 2\r
+        LA112_0 = self.input.LA(1)\r
 \r
+        if (LA112_0 == 58) :\r
+            alt112 = 1\r
+        if alt112 == 1:\r
+            # C.g:297:14: 'EFIAPI'\r
+            self.match(self.input, 58, self.FOLLOW_58_in_synpred66788)\r
+            if self.failed:\r
+                return\r
 \r
 \r
 \r
-    def exclusive_or_expression(self):\r
+        # C.g:297:25: ( 'EFI_BOOTSERVICE' )?\r
+        alt113 = 2\r
+        LA113_0 = self.input.LA(1)\r
 \r
-        localctx = CParser.Exclusive_or_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 108, self.RULE_exclusive_or_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 703\r
-            self.and_expression()\r
-            self.state = 708\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__69:\r
-                self.state = 704\r
-                self.match(CParser.T__69)\r
-                self.state = 705\r
-                self.and_expression()\r
-                self.state = 710\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+        if (LA113_0 == 59) :\r
+            alt113 = 1\r
+        if alt113 == 1:\r
+            # C.g:297:26: 'EFI_BOOTSERVICE'\r
+            self.match(self.input, 59, self.FOLLOW_59_in_synpred66793)\r
+            if self.failed:\r
+                return\r
 \r
-    class And_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def equality_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Equality_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Equality_expressionContext,i)\r
+        # C.g:297:46: ( 'EFI_RUNTIMESERVICE' )?\r
+        alt114 = 2\r
+        LA114_0 = self.input.LA(1)\r
 \r
+        if (LA114_0 == 60) :\r
+            alt114 = 1\r
+        if alt114 == 1:\r
+            # C.g:297:47: 'EFI_RUNTIMESERVICE'\r
+            self.match(self.input, 60, self.FOLLOW_60_in_synpred66798)\r
+            if self.failed:\r
+                return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_and_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAnd_expression" ):\r
-                listener.enterAnd_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAnd_expression" ):\r
-                listener.exitAnd_expression(self)\r
+        self.following.append(self.FOLLOW_direct_declarator_in_synpred66802)\r
+        self.direct_declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred66\r
 \r
 \r
-    def and_expression(self):\r
 \r
-        localctx = CParser.And_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 110, self.RULE_and_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 711\r
-            self.equality_expression()\r
-            self.state = 716\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__52:\r
-                self.state = 712\r
-                self.match(CParser.T__52)\r
-                self.state = 713\r
-                self.equality_expression()\r
-                self.state = 718\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred67\r
+    def synpred67_fragment(self, ):\r
+        # C.g:303:15: ( declarator_suffix )\r
+        # C.g:303:15: declarator_suffix\r
+        self.following.append(self.FOLLOW_declarator_suffix_in_synpred67821)\r
+        self.declarator_suffix()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    class Equality_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred67\r
 \r
-        def relational_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Relational_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Relational_expressionContext,i)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_equality_expression\r
+    # $ANTLR start synpred69\r
+    def synpred69_fragment(self, ):\r
+        # C.g:304:9: ( 'EFIAPI' )\r
+        # C.g:304:9: 'EFIAPI'\r
+        self.match(self.input, 58, self.FOLLOW_58_in_synpred69830)\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterEquality_expression" ):\r
-                listener.enterEquality_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitEquality_expression" ):\r
-                listener.exitEquality_expression(self)\r
+    # $ANTLR end synpred69\r
 \r
 \r
 \r
+    # $ANTLR start synpred70\r
+    def synpred70_fragment(self, ):\r
+        # C.g:304:35: ( declarator_suffix )\r
+        # C.g:304:35: declarator_suffix\r
+        self.following.append(self.FOLLOW_declarator_suffix_in_synpred70838)\r
+        self.declarator_suffix()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    def equality_expression(self):\r
 \r
-        localctx = CParser.Equality_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 112, self.RULE_equality_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 719\r
-            self.relational_expression()\r
-            self.state = 724\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__70 or _la==CParser.T__71:\r
-                self.state = 720\r
-                _la = self._input.LA(1)\r
-                if not(_la==CParser.T__70 or _la==CParser.T__71):\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 721\r
-                self.relational_expression()\r
-                self.state = 726\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred70\r
 \r
-    class Relational_expressionContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def shift_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Shift_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Shift_expressionContext,i)\r
+    # $ANTLR start synpred73\r
+    def synpred73_fragment(self, ):\r
+        # C.g:310:9: ( '(' parameter_type_list ')' )\r
+        # C.g:310:9: '(' parameter_type_list ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred73878)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_parameter_type_list_in_synpred73880)\r
+        self.parameter_type_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred73882)\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_relational_expression\r
+    # $ANTLR end synpred73\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterRelational_expression" ):\r
-                listener.enterRelational_expression(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitRelational_expression" ):\r
-                listener.exitRelational_expression(self)\r
 \r
+    # $ANTLR start synpred74\r
+    def synpred74_fragment(self, ):\r
+        # C.g:311:9: ( '(' identifier_list ')' )\r
+        # C.g:311:9: '(' identifier_list ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred74892)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_identifier_list_in_synpred74894)\r
+        self.identifier_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred74896)\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred74\r
 \r
-    def relational_expression(self):\r
 \r
-        localctx = CParser.Relational_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 114, self.RULE_relational_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 727\r
-            self.shift_expression()\r
-            self.state = 732\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & ((1 << (CParser.T__72 - 73)) | (1 << (CParser.T__73 - 73)) | (1 << (CParser.T__74 - 73)) | (1 << (CParser.T__75 - 73)))) != 0):\r
-                self.state = 728\r
-                _la = self._input.LA(1)\r
-                if not(((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & ((1 << (CParser.T__72 - 73)) | (1 << (CParser.T__73 - 73)) | (1 << (CParser.T__74 - 73)) | (1 << (CParser.T__75 - 73)))) != 0)):\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 729\r
-                self.shift_expression()\r
-                self.state = 734\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Shift_expressionContext(ParserRuleContext):\r
+    # $ANTLR start synpred75\r
+    def synpred75_fragment(self, ):\r
+        # C.g:316:8: ( type_qualifier )\r
+        # C.g:316:8: type_qualifier\r
+        self.following.append(self.FOLLOW_type_qualifier_in_synpred75921)\r
+        self.type_qualifier()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def additive_expression(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.Additive_expressionContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.Additive_expressionContext,i)\r
+    # $ANTLR end synpred75\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_shift_expression\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterShift_expression" ):\r
-                listener.enterShift_expression(self)\r
+    # $ANTLR start synpred76\r
+    def synpred76_fragment(self, ):\r
+        # C.g:316:24: ( pointer )\r
+        # C.g:316:24: pointer\r
+        self.following.append(self.FOLLOW_pointer_in_synpred76924)\r
+        self.pointer()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitShift_expression" ):\r
-                listener.exitShift_expression(self)\r
 \r
+    # $ANTLR end synpred76\r
 \r
 \r
 \r
-    def shift_expression(self):\r
+    # $ANTLR start synpred77\r
+    def synpred77_fragment(self, ):\r
+        # C.g:316:4: ( '*' ( type_qualifier )+ ( pointer )? )\r
+        # C.g:316:4: '*' ( type_qualifier )+ ( pointer )?\r
+        self.match(self.input, 66, self.FOLLOW_66_in_synpred77919)\r
+        if self.failed:\r
+            return\r
+        # C.g:316:8: ( type_qualifier )+\r
+        cnt116 = 0\r
+        while True: #loop116\r
+            alt116 = 2\r
+            LA116_0 = self.input.LA(1)\r
 \r
-        localctx = CParser.Shift_expressionContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 116, self.RULE_shift_expression)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 735\r
-            self.additive_expression()\r
-            self.state = 740\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while _la==CParser.T__76 or _la==CParser.T__77:\r
-                self.state = 736\r
-                _la = self._input.LA(1)\r
-                if not(_la==CParser.T__76 or _la==CParser.T__77):\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 737\r
-                self.additive_expression()\r
-                self.state = 742\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+            if ((49 <= LA116_0 <= 61)) :\r
+                alt116 = 1\r
 \r
-    class StatementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+            if alt116 == 1:\r
+                # C.g:0:0: type_qualifier\r
+                self.following.append(self.FOLLOW_type_qualifier_in_synpred77921)\r
+                self.type_qualifier()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
-        def labeled_statement(self):\r
-            return self.getTypedRuleContext(CParser.Labeled_statementContext,0)\r
 \r
+            else:\r
+                if cnt116 >= 1:\r
+                    break #loop116\r
 \r
-        def compound_statement(self):\r
-            return self.getTypedRuleContext(CParser.Compound_statementContext,0)\r
+                if self.backtracking > 0:\r
+                    self.failed = True\r
+                    return\r
 \r
+                eee = EarlyExitException(116, self.input)\r
+                raise eee\r
 \r
-        def expression_statement(self):\r
-            return self.getTypedRuleContext(CParser.Expression_statementContext,0)\r
+            cnt116 += 1\r
 \r
 \r
-        def selection_statement(self):\r
-            return self.getTypedRuleContext(CParser.Selection_statementContext,0)\r
+        # C.g:316:24: ( pointer )?\r
+        alt117 = 2\r
+        LA117_0 = self.input.LA(1)\r
 \r
+        if (LA117_0 == 66) :\r
+            alt117 = 1\r
+        if alt117 == 1:\r
+            # C.g:0:0: pointer\r
+            self.following.append(self.FOLLOW_pointer_in_synpred77924)\r
+            self.pointer()\r
+            self.following.pop()\r
+            if self.failed:\r
+                return\r
 \r
-        def iteration_statement(self):\r
-            return self.getTypedRuleContext(CParser.Iteration_statementContext,0)\r
 \r
 \r
-        def jump_statement(self):\r
-            return self.getTypedRuleContext(CParser.Jump_statementContext,0)\r
 \r
 \r
-        def macro_statement(self):\r
-            return self.getTypedRuleContext(CParser.Macro_statementContext,0)\r
+    # $ANTLR end synpred77\r
 \r
 \r
-        def asm2_statement(self):\r
-            return self.getTypedRuleContext(CParser.Asm2_statementContext,0)\r
 \r
+    # $ANTLR start synpred78\r
+    def synpred78_fragment(self, ):\r
+        # C.g:317:4: ( '*' pointer )\r
+        # C.g:317:4: '*' pointer\r
+        self.match(self.input, 66, self.FOLLOW_66_in_synpred78930)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_pointer_in_synpred78932)\r
+        self.pointer()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def asm1_statement(self):\r
-            return self.getTypedRuleContext(CParser.Asm1_statementContext,0)\r
 \r
+    # $ANTLR end synpred78\r
 \r
-        def asm_statement(self):\r
-            return self.getTypedRuleContext(CParser.Asm_statementContext,0)\r
 \r
 \r
-        def declaration(self):\r
-            return self.getTypedRuleContext(CParser.DeclarationContext,0)\r
+    # $ANTLR start synpred81\r
+    def synpred81_fragment(self, ):\r
+        # C.g:326:32: ( 'OPTIONAL' )\r
+        # C.g:326:32: 'OPTIONAL'\r
+        self.match(self.input, 53, self.FOLLOW_53_in_synpred81977)\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_statement\r
+    # $ANTLR end synpred81\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStatement" ):\r
-                listener.enterStatement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStatement" ):\r
-                listener.exitStatement(self)\r
 \r
+    # $ANTLR start synpred82\r
+    def synpred82_fragment(self, ):\r
+        # C.g:326:27: ( ',' ( 'OPTIONAL' )? parameter_declaration )\r
+        # C.g:326:27: ',' ( 'OPTIONAL' )? parameter_declaration\r
+        self.match(self.input, 27, self.FOLLOW_27_in_synpred82974)\r
+        if self.failed:\r
+            return\r
+        # C.g:326:31: ( 'OPTIONAL' )?\r
+        alt119 = 2\r
+        LA119_0 = self.input.LA(1)\r
 \r
+        if (LA119_0 == 53) :\r
+            LA119_1 = self.input.LA(2)\r
 \r
+            if (self.synpred81()) :\r
+                alt119 = 1\r
+        if alt119 == 1:\r
+            # C.g:326:32: 'OPTIONAL'\r
+            self.match(self.input, 53, self.FOLLOW_53_in_synpred82977)\r
+            if self.failed:\r
+                return\r
 \r
-    def statement(self):\r
 \r
-        localctx = CParser.StatementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 118, self.RULE_statement)\r
-        try:\r
-            self.state = 754\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,92,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 743\r
-                self.labeled_statement()\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 744\r
-                self.compound_statement()\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 745\r
-                self.expression_statement()\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 746\r
-                self.selection_statement()\r
-                pass\r
-\r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 747\r
-                self.iteration_statement()\r
-                pass\r
-\r
-            elif la_ == 6:\r
-                self.enterOuterAlt(localctx, 6)\r
-                self.state = 748\r
-                self.jump_statement()\r
-                pass\r
-\r
-            elif la_ == 7:\r
-                self.enterOuterAlt(localctx, 7)\r
-                self.state = 749\r
-                self.macro_statement()\r
-                pass\r
-\r
-            elif la_ == 8:\r
-                self.enterOuterAlt(localctx, 8)\r
-                self.state = 750\r
-                self.asm2_statement()\r
-                pass\r
-\r
-            elif la_ == 9:\r
-                self.enterOuterAlt(localctx, 9)\r
-                self.state = 751\r
-                self.asm1_statement()\r
-                pass\r
-\r
-            elif la_ == 10:\r
-                self.enterOuterAlt(localctx, 10)\r
-                self.state = 752\r
-                self.asm_statement()\r
-                pass\r
-\r
-            elif la_ == 11:\r
-                self.enterOuterAlt(localctx, 11)\r
-                self.state = 753\r
-                self.declaration()\r
-                pass\r
 \r
+        self.following.append(self.FOLLOW_parameter_declaration_in_synpred82981)\r
+        self.parameter_declaration()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Asm2_statementContext(ParserRuleContext):\r
+    # $ANTLR end synpred82\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_asm2_statement\r
+    # $ANTLR start synpred83\r
+    def synpred83_fragment(self, ):\r
+        # C.g:330:28: ( declarator )\r
+        # C.g:330:28: declarator\r
+        self.following.append(self.FOLLOW_declarator_in_synpred83997)\r
+        self.declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAsm2_statement" ):\r
-                listener.enterAsm2_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAsm2_statement" ):\r
-                listener.exitAsm2_statement(self)\r
+    # $ANTLR end synpred83\r
 \r
 \r
 \r
+    # $ANTLR start synpred84\r
+    def synpred84_fragment(self, ):\r
+        # C.g:330:39: ( abstract_declarator )\r
+        # C.g:330:39: abstract_declarator\r
+        self.following.append(self.FOLLOW_abstract_declarator_in_synpred84999)\r
+        self.abstract_declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    def asm2_statement(self):\r
 \r
-        localctx = CParser.Asm2_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 120, self.RULE_asm2_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 757\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if _la==CParser.T__78:\r
-                self.state = 756\r
-                self.match(CParser.T__78)\r
-\r
-\r
-            self.state = 759\r
-            self.match(CParser.IDENTIFIER)\r
-            self.state = 760\r
-            self.match(CParser.T__37)\r
-            self.state = 764\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,94,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 761\r
-                    _la = self._input.LA(1)\r
-                    if _la <= 0 or _la==CParser.T__1:\r
-                        self._errHandler.recoverInline(self)\r
-                    else:\r
-                        self._errHandler.reportMatch(self)\r
-                        self.consume() \r
-                self.state = 766\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,94,self._ctx)\r
-\r
-            self.state = 767\r
-            self.match(CParser.T__38)\r
-            self.state = 768\r
-            self.match(CParser.T__1)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred84\r
 \r
-    class Asm1_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
+    # $ANTLR start synpred86\r
+    def synpred86_fragment(self, ):\r
+        # C.g:330:4: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? )\r
+        # C.g:330:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )?\r
+        self.following.append(self.FOLLOW_declaration_specifiers_in_synpred86994)\r
+        self.declaration_specifiers()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        # C.g:330:27: ( declarator | abstract_declarator )*\r
+        while True: #loop120\r
+            alt120 = 3\r
+            LA120 = self.input.LA(1)\r
+            if LA120 == 66:\r
+                LA120_3 = self.input.LA(2)\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_asm1_statement\r
+                if (self.synpred83()) :\r
+                    alt120 = 1\r
+                elif (self.synpred84()) :\r
+                    alt120 = 2\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAsm1_statement" ):\r
-                listener.enterAsm1_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAsm1_statement" ):\r
-                listener.exitAsm1_statement(self)\r
+            elif LA120 == IDENTIFIER or LA120 == 58 or LA120 == 59 or LA120 == 60:\r
+                alt120 = 1\r
+            elif LA120 == 62:\r
+                LA120 = self.input.LA(2)\r
+                if LA120 == 29 or LA120 == 30 or LA120 == 31 or LA120 == 32 or LA120 == 33 or LA120 == 34 or LA120 == 35 or LA120 == 36 or LA120 == 37 or LA120 == 38 or LA120 == 39 or LA120 == 40 or LA120 == 41 or LA120 == 42 or LA120 == 45 or LA120 == 46 or LA120 == 48 or LA120 == 49 or LA120 == 50 or LA120 == 51 or LA120 == 52 or LA120 == 53 or LA120 == 54 or LA120 == 55 or LA120 == 56 or LA120 == 57 or LA120 == 61 or LA120 == 63 or LA120 == 64:\r
+                    alt120 = 2\r
+                elif LA120 == 58:\r
+                    LA120_21 = self.input.LA(3)\r
 \r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
 \r
+                elif LA120 == 66:\r
+                    LA120_22 = self.input.LA(3)\r
 \r
-    def asm1_statement(self):\r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
-        localctx = CParser.Asm1_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 122, self.RULE_asm1_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 770\r
-            self.match(CParser.T__79)\r
-            self.state = 771\r
-            self.match(CParser.T__0)\r
-            self.state = 775\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__22) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36) | (1 << CParser.T__37) | (1 << CParser.T__38) | (1 << CParser.T__39) | (1 << CParser.T__40) | (1 << CParser.T__41) | (1 << CParser.T__42) | (1 << CParser.T__43) | (1 << CParser.T__44) | (1 << CParser.T__45) | (1 << CParser.T__46) | (1 << CParser.T__47) | (1 << CParser.T__48) | (1 << CParser.T__49) | (1 << CParser.T__50) | (1 << CParser.T__51) | (1 << CParser.T__52) | (1 << CParser.T__53) | (1 << CParser.T__54) | (1 << CParser.T__55) | (1 << CParser.T__56) | (1 << CParser.T__57) | (1 << CParser.T__58) | (1 << CParser.T__59) | (1 << CParser.T__60) | (1 << CParser.T__61) | (1 << CParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (CParser.T__63 - 64)) | (1 << (CParser.T__64 - 64)) | (1 << (CParser.T__65 - 64)) | (1 << (CParser.T__66 - 64)) | (1 << (CParser.T__67 - 64)) | (1 << (CParser.T__68 - 64)) | (1 << (CParser.T__69 - 64)) | (1 << (CParser.T__70 - 64)) | (1 << (CParser.T__71 - 64)) | (1 << (CParser.T__72 - 64)) | (1 << (CParser.T__73 - 64)) | (1 << (CParser.T__74 - 64)) | (1 << (CParser.T__75 - 64)) | (1 << (CParser.T__76 - 64)) | (1 << (CParser.T__77 - 64)) | (1 << (CParser.T__78 - 64)) | (1 << (CParser.T__79 - 64)) | (1 << (CParser.T__80 - 64)) | (1 << (CParser.T__81 - 64)) | (1 << (CParser.T__82 - 64)) | (1 << (CParser.T__83 - 64)) | (1 << (CParser.T__84 - 64)) | (1 << (CParser.T__85 - 64)) | (1 << (CParser.T__86 - 64)) | (1 << (CParser.T__87 - 64)) | (1 << (CParser.T__88 - 64)) | (1 << (CParser.T__89 - 64)) | (1 << (CParser.T__90 - 64)) | (1 << (CParser.T__91 - 64)) | (1 << (CParser.IDENTIFIER - 64)) | (1 << (CParser.CHARACTER_LITERAL - 64)) | (1 << (CParser.STRING_LITERAL - 64)) | (1 << (CParser.HEX_LITERAL - 64)) | (1 << (CParser.DECIMAL_LITERAL - 64)) | (1 << (CParser.OCTAL_LITERAL - 64)) | (1 << (CParser.FLOATING_POINT_LITERAL - 64)) | (1 << (CParser.WS - 64)) | (1 << (CParser.BS - 64)) | (1 << (CParser.UnicodeVocabulary - 64)) | (1 << (CParser.COMMENT - 64)) | (1 << (CParser.LINE_COMMENT - 64)) | (1 << (CParser.LINE_COMMAND - 64)))) != 0):\r
-                self.state = 772\r
-                _la = self._input.LA(1)\r
-                if _la <= 0 or _la==CParser.T__19:\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 777\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-            self.state = 778\r
-            self.match(CParser.T__19)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Asm_statementContext(ParserRuleContext):\r
+                elif LA120 == 59:\r
+                    LA120_23 = self.input.LA(3)\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_asm_statement\r
+                elif LA120 == 60:\r
+                    LA120_24 = self.input.LA(3)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterAsm_statement" ):\r
-                listener.enterAsm_statement(self)\r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitAsm_statement" ):\r
-                listener.exitAsm_statement(self)\r
 \r
+                elif LA120 == IDENTIFIER:\r
+                    LA120_25 = self.input.LA(3)\r
 \r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
 \r
-    def asm_statement(self):\r
+                elif LA120 == 62:\r
+                    LA120_26 = self.input.LA(3)\r
 \r
-        localctx = CParser.Asm_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 124, self.RULE_asm_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 780\r
-            self.match(CParser.T__80)\r
-            self.state = 781\r
-            self.match(CParser.T__0)\r
-            self.state = 785\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__3) | (1 << CParser.T__4) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__22) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36) | (1 << CParser.T__37) | (1 << CParser.T__38) | (1 << CParser.T__39) | (1 << CParser.T__40) | (1 << CParser.T__41) | (1 << CParser.T__42) | (1 << CParser.T__43) | (1 << CParser.T__44) | (1 << CParser.T__45) | (1 << CParser.T__46) | (1 << CParser.T__47) | (1 << CParser.T__48) | (1 << CParser.T__49) | (1 << CParser.T__50) | (1 << CParser.T__51) | (1 << CParser.T__52) | (1 << CParser.T__53) | (1 << CParser.T__54) | (1 << CParser.T__55) | (1 << CParser.T__56) | (1 << CParser.T__57) | (1 << CParser.T__58) | (1 << CParser.T__59) | (1 << CParser.T__60) | (1 << CParser.T__61) | (1 << CParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (CParser.T__63 - 64)) | (1 << (CParser.T__64 - 64)) | (1 << (CParser.T__65 - 64)) | (1 << (CParser.T__66 - 64)) | (1 << (CParser.T__67 - 64)) | (1 << (CParser.T__68 - 64)) | (1 << (CParser.T__69 - 64)) | (1 << (CParser.T__70 - 64)) | (1 << (CParser.T__71 - 64)) | (1 << (CParser.T__72 - 64)) | (1 << (CParser.T__73 - 64)) | (1 << (CParser.T__74 - 64)) | (1 << (CParser.T__75 - 64)) | (1 << (CParser.T__76 - 64)) | (1 << (CParser.T__77 - 64)) | (1 << (CParser.T__78 - 64)) | (1 << (CParser.T__79 - 64)) | (1 << (CParser.T__80 - 64)) | (1 << (CParser.T__81 - 64)) | (1 << (CParser.T__82 - 64)) | (1 << (CParser.T__83 - 64)) | (1 << (CParser.T__84 - 64)) | (1 << (CParser.T__85 - 64)) | (1 << (CParser.T__86 - 64)) | (1 << (CParser.T__87 - 64)) | (1 << (CParser.T__88 - 64)) | (1 << (CParser.T__89 - 64)) | (1 << (CParser.T__90 - 64)) | (1 << (CParser.T__91 - 64)) | (1 << (CParser.IDENTIFIER - 64)) | (1 << (CParser.CHARACTER_LITERAL - 64)) | (1 << (CParser.STRING_LITERAL - 64)) | (1 << (CParser.HEX_LITERAL - 64)) | (1 << (CParser.DECIMAL_LITERAL - 64)) | (1 << (CParser.OCTAL_LITERAL - 64)) | (1 << (CParser.FLOATING_POINT_LITERAL - 64)) | (1 << (CParser.WS - 64)) | (1 << (CParser.BS - 64)) | (1 << (CParser.UnicodeVocabulary - 64)) | (1 << (CParser.COMMENT - 64)) | (1 << (CParser.LINE_COMMENT - 64)) | (1 << (CParser.LINE_COMMAND - 64)))) != 0):\r
-                self.state = 782\r
-                _la = self._input.LA(1)\r
-                if _la <= 0 or _la==CParser.T__19:\r
-                    self._errHandler.recoverInline(self)\r
-                else:\r
-                    self._errHandler.reportMatch(self)\r
-                    self.consume()\r
-                self.state = 787\r
-                self._errHandler.sync(self)\r
-                _la = self._input.LA(1)\r
-\r
-            self.state = 788\r
-            self.match(CParser.T__19)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+                    if (self.synpred83()) :\r
+                        alt120 = 1\r
+                    elif (self.synpred84()) :\r
+                        alt120 = 2\r
 \r
-    class Macro_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+            elif LA120 == 64:\r
+                alt120 = 2\r
 \r
-        def declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclarationContext,i)\r
+            if alt120 == 1:\r
+                # C.g:330:28: declarator\r
+                self.following.append(self.FOLLOW_declarator_in_synpred86997)\r
+                self.declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
 \r
-        def statement_list(self):\r
-            return self.getTypedRuleContext(CParser.Statement_listContext,0)\r
+            elif alt120 == 2:\r
+                # C.g:330:39: abstract_declarator\r
+                self.following.append(self.FOLLOW_abstract_declarator_in_synpred86999)\r
+                self.abstract_declarator()\r
+                self.following.pop()\r
+                if self.failed:\r
+                    return\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+            else:\r
+                break #loop120\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_macro_statement\r
+        # C.g:330:61: ( 'OPTIONAL' )?\r
+        alt121 = 2\r
+        LA121_0 = self.input.LA(1)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterMacro_statement" ):\r
-                listener.enterMacro_statement(self)\r
+        if (LA121_0 == 53) :\r
+            alt121 = 1\r
+        if alt121 == 1:\r
+            # C.g:330:62: 'OPTIONAL'\r
+            self.match(self.input, 53, self.FOLLOW_53_in_synpred861004)\r
+            if self.failed:\r
+                return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitMacro_statement" ):\r
-                listener.exitMacro_statement(self)\r
 \r
 \r
 \r
 \r
-    def macro_statement(self):\r
+    # $ANTLR end synpred86\r
 \r
-        localctx = CParser.Macro_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 126, self.RULE_macro_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 790\r
-            self.match(CParser.IDENTIFIER)\r
-            self.state = 791\r
-            self.match(CParser.T__37)\r
-            self.state = 795\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,97,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 792\r
-                    self.declaration() \r
-                self.state = 797\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,97,self._ctx)\r
-\r
-            self.state = 799\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,98,self._ctx)\r
-            if la_ == 1:\r
-                self.state = 798\r
-                self.statement_list()\r
-\r
-\r
-            self.state = 802\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if ((((_la - 38)) & ~0x3f) == 0 and ((1 << (_la - 38)) & ((1 << (CParser.T__37 - 38)) | (1 << (CParser.T__41 - 38)) | (1 << (CParser.T__43 - 38)) | (1 << (CParser.T__44 - 38)) | (1 << (CParser.T__47 - 38)) | (1 << (CParser.T__48 - 38)) | (1 << (CParser.T__49 - 38)) | (1 << (CParser.T__52 - 38)) | (1 << (CParser.T__53 - 38)) | (1 << (CParser.T__54 - 38)) | (1 << (CParser.IDENTIFIER - 38)) | (1 << (CParser.CHARACTER_LITERAL - 38)) | (1 << (CParser.STRING_LITERAL - 38)) | (1 << (CParser.HEX_LITERAL - 38)) | (1 << (CParser.DECIMAL_LITERAL - 38)) | (1 << (CParser.OCTAL_LITERAL - 38)) | (1 << (CParser.FLOATING_POINT_LITERAL - 38)))) != 0):\r
-                self.state = 801\r
-                self.expression()\r
-\r
-\r
-            self.state = 804\r
-            self.match(CParser.T__38)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Labeled_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR start synpred90\r
+    def synpred90_fragment(self, ):\r
+        # C.g:341:4: ( specifier_qualifier_list ( abstract_declarator )? )\r
+        # C.g:341:4: specifier_qualifier_list ( abstract_declarator )?\r
+        self.following.append(self.FOLLOW_specifier_qualifier_list_in_synpred901046)\r
+        self.specifier_qualifier_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        # C.g:341:29: ( abstract_declarator )?\r
+        alt122 = 2\r
+        LA122_0 = self.input.LA(1)\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
+        if (LA122_0 == 62 or LA122_0 == 64 or LA122_0 == 66) :\r
+            alt122 = 1\r
+        if alt122 == 1:\r
+            # C.g:0:0: abstract_declarator\r
+            self.following.append(self.FOLLOW_abstract_declarator_in_synpred901048)\r
+            self.abstract_declarator()\r
+            self.following.pop()\r
+            if self.failed:\r
+                return\r
 \r
-        def statement(self):\r
-            return self.getTypedRuleContext(CParser.StatementContext,0)\r
 \r
 \r
-        def constant_expression(self):\r
-            return self.getTypedRuleContext(CParser.Constant_expressionContext,0)\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_labeled_statement\r
+    # $ANTLR end synpred90\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterLabeled_statement" ):\r
-                listener.enterLabeled_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitLabeled_statement" ):\r
-                listener.exitLabeled_statement(self)\r
 \r
+    # $ANTLR start synpred91\r
+    def synpred91_fragment(self, ):\r
+        # C.g:346:12: ( direct_abstract_declarator )\r
+        # C.g:346:12: direct_abstract_declarator\r
+        self.following.append(self.FOLLOW_direct_abstract_declarator_in_synpred911067)\r
+        self.direct_abstract_declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred91\r
 \r
-    def labeled_statement(self):\r
 \r
-        localctx = CParser.Labeled_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 128, self.RULE_labeled_statement)\r
-        try:\r
-            self.state = 817\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.IDENTIFIER]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 806\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 807\r
-                self.match(CParser.T__22)\r
-                self.state = 808\r
-                self.statement()\r
-                pass\r
-            elif token in [CParser.T__81]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 809\r
-                self.match(CParser.T__81)\r
-                self.state = 810\r
-                self.constant_expression()\r
-                self.state = 811\r
-                self.match(CParser.T__22)\r
-                self.state = 812\r
-                self.statement()\r
-                pass\r
-            elif token in [CParser.T__82]:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 814\r
-                self.match(CParser.T__82)\r
-                self.state = 815\r
-                self.match(CParser.T__22)\r
-                self.state = 816\r
-                self.statement()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred93\r
+    def synpred93_fragment(self, ):\r
+        # C.g:351:6: ( '(' abstract_declarator ')' )\r
+        # C.g:351:6: '(' abstract_declarator ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred931086)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_abstract_declarator_in_synpred931088)\r
+        self.abstract_declarator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred931090)\r
+        if self.failed:\r
+            return\r
 \r
-    class Compound_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred93\r
 \r
-        def declaration(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.DeclarationContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.DeclarationContext,i)\r
 \r
 \r
-        def statement_list(self):\r
-            return self.getTypedRuleContext(CParser.Statement_listContext,0)\r
+    # $ANTLR start synpred94\r
+    def synpred94_fragment(self, ):\r
+        # C.g:351:65: ( abstract_declarator_suffix )\r
+        # C.g:351:65: abstract_declarator_suffix\r
+        self.following.append(self.FOLLOW_abstract_declarator_suffix_in_synpred941098)\r
+        self.abstract_declarator_suffix()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_compound_statement\r
+    # $ANTLR end synpred94\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterCompound_statement" ):\r
-                listener.enterCompound_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitCompound_statement" ):\r
-                listener.exitCompound_statement(self)\r
 \r
+    # $ANTLR start synpred109\r
+    def synpred109_fragment(self, ):\r
+        # C.g:386:4: ( '(' type_name ')' cast_expression )\r
+        # C.g:386:4: '(' type_name ')' cast_expression\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred1091282)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_type_name_in_synpred1091284)\r
+        self.type_name()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred1091286)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_cast_expression_in_synpred1091288)\r
+        self.cast_expression()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred109\r
 \r
-    def compound_statement(self):\r
 \r
-        localctx = CParser.Compound_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 130, self.RULE_compound_statement)\r
-        self._la = 0 # Token type\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 819\r
-            self.match(CParser.T__0)\r
-            self.state = 823\r
-            self._errHandler.sync(self)\r
-            _alt = self._interp.adaptivePredict(self._input,101,self._ctx)\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt==1:\r
-                    self.state = 820\r
-                    self.declaration() \r
-                self.state = 825\r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,101,self._ctx)\r
-\r
-            self.state = 827\r
-            self._errHandler.sync(self)\r
-            _la = self._input.LA(1)\r
-            if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << CParser.T__0) | (1 << CParser.T__1) | (1 << CParser.T__2) | (1 << CParser.T__5) | (1 << CParser.T__6) | (1 << CParser.T__7) | (1 << CParser.T__8) | (1 << CParser.T__9) | (1 << CParser.T__10) | (1 << CParser.T__11) | (1 << CParser.T__12) | (1 << CParser.T__13) | (1 << CParser.T__14) | (1 << CParser.T__15) | (1 << CParser.T__16) | (1 << CParser.T__17) | (1 << CParser.T__18) | (1 << CParser.T__20) | (1 << CParser.T__21) | (1 << CParser.T__23) | (1 << CParser.T__24) | (1 << CParser.T__25) | (1 << CParser.T__26) | (1 << CParser.T__27) | (1 << CParser.T__28) | (1 << CParser.T__29) | (1 << CParser.T__30) | (1 << CParser.T__31) | (1 << CParser.T__32) | (1 << CParser.T__33) | (1 << CParser.T__34) | (1 << CParser.T__35) | (1 << CParser.T__36) | (1 << CParser.T__37) | (1 << CParser.T__41) | (1 << CParser.T__43) | (1 << CParser.T__44) | (1 << CParser.T__47) | (1 << CParser.T__48) | (1 << CParser.T__49) | (1 << CParser.T__52) | (1 << CParser.T__53) | (1 << CParser.T__54))) != 0) or ((((_la - 79)) & ~0x3f) == 0 and ((1 << (_la - 79)) & ((1 << (CParser.T__78 - 79)) | (1 << (CParser.T__79 - 79)) | (1 << (CParser.T__80 - 79)) | (1 << (CParser.T__81 - 79)) | (1 << (CParser.T__82 - 79)) | (1 << (CParser.T__83 - 79)) | (1 << (CParser.T__85 - 79)) | (1 << (CParser.T__86 - 79)) | (1 << (CParser.T__87 - 79)) | (1 << (CParser.T__88 - 79)) | (1 << (CParser.T__89 - 79)) | (1 << (CParser.T__90 - 79)) | (1 << (CParser.T__91 - 79)) | (1 << (CParser.IDENTIFIER - 79)) | (1 << (CParser.CHARACTER_LITERAL - 79)) | (1 << (CParser.STRING_LITERAL - 79)) | (1 << (CParser.HEX_LITERAL - 79)) | (1 << (CParser.DECIMAL_LITERAL - 79)) | (1 << (CParser.OCTAL_LITERAL - 79)) | (1 << (CParser.FLOATING_POINT_LITERAL - 79)))) != 0):\r
-                self.state = 826\r
-                self.statement_list()\r
-\r
-\r
-            self.state = 829\r
-            self.match(CParser.T__19)\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Statement_listContext(ParserRuleContext):\r
+    # $ANTLR start synpred114\r
+    def synpred114_fragment(self, ):\r
+        # C.g:395:4: ( 'sizeof' unary_expression )\r
+        # C.g:395:4: 'sizeof' unary_expression\r
+        self.match(self.input, 74, self.FOLLOW_74_in_synpred1141330)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_unary_expression_in_synpred1141332)\r
+        self.unary_expression()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def statement(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.StatementContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.StatementContext,i)\r
+    # $ANTLR end synpred114\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_statement_list\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterStatement_list" ):\r
-                listener.enterStatement_list(self)\r
+    # $ANTLR start synpred117\r
+    def synpred117_fragment(self, ):\r
+        # C.g:409:13: ( '(' argument_expression_list ')' )\r
+        # C.g:409:13: '(' argument_expression_list ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred1171420)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_argument_expression_list_in_synpred1171424)\r
+        self.argument_expression_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred1171428)\r
+        if self.failed:\r
+            return\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitStatement_list" ):\r
-                listener.exitStatement_list(self)\r
 \r
+    # $ANTLR end synpred117\r
 \r
 \r
 \r
-    def statement_list(self):\r
+    # $ANTLR start synpred118\r
+    def synpred118_fragment(self, ):\r
+        # C.g:410:13: ( '(' macro_parameter_list ')' )\r
+        # C.g:410:13: '(' macro_parameter_list ')'\r
+        self.match(self.input, 62, self.FOLLOW_62_in_synpred1181444)\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_macro_parameter_list_in_synpred1181446)\r
+        self.macro_parameter_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, 63, self.FOLLOW_63_in_synpred1181448)\r
+        if self.failed:\r
+            return\r
 \r
-        localctx = CParser.Statement_listContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 132, self.RULE_statement_list)\r
-        try:\r
-            self.enterOuterAlt(localctx, 1)\r
-            self.state = 832 \r
-            self._errHandler.sync(self)\r
-            _alt = 1\r
-            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:\r
-                if _alt == 1:\r
-                    self.state = 831\r
-                    self.statement()\r
 \r
-                else:\r
-                    raise NoViableAltException(self)\r
-                self.state = 834 \r
-                self._errHandler.sync(self)\r
-                _alt = self._interp.adaptivePredict(self._input,103,self._ctx)\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR end synpred118\r
 \r
-    class Expression_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+    # $ANTLR start synpred120\r
+    def synpred120_fragment(self, ):\r
+        # C.g:412:13: ( '*' IDENTIFIER )\r
+        # C.g:412:13: '*' IDENTIFIER\r
+        self.match(self.input, 66, self.FOLLOW_66_in_synpred1201482)\r
+        if self.failed:\r
+            return\r
+        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1201486)\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_expression_statement\r
+    # $ANTLR end synpred120\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterExpression_statement" ):\r
-                listener.enterExpression_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitExpression_statement" ):\r
-                listener.exitExpression_statement(self)\r
 \r
+    # $ANTLR start synpred137\r
+    def synpred137_fragment(self, ):\r
+        # C.g:443:20: ( STRING_LITERAL )\r
+        # C.g:443:20: STRING_LITERAL\r
+        self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1371683)\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred137\r
 \r
-    def expression_statement(self):\r
 \r
-        localctx = CParser.Expression_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 134, self.RULE_expression_statement)\r
-        try:\r
-            self.state = 840\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__1]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 836\r
-                self.match(CParser.T__1)\r
-                pass\r
-            elif token in [CParser.T__37, CParser.T__41, CParser.T__43, CParser.T__44, CParser.T__47, CParser.T__48, CParser.T__49, CParser.T__52, CParser.T__53, CParser.T__54, CParser.IDENTIFIER, CParser.CHARACTER_LITERAL, CParser.STRING_LITERAL, CParser.HEX_LITERAL, CParser.DECIMAL_LITERAL, CParser.OCTAL_LITERAL, CParser.FLOATING_POINT_LITERAL]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 837\r
-                self.expression()\r
-                self.state = 838\r
-                self.match(CParser.T__1)\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred138\r
+    def synpred138_fragment(self, ):\r
+        # C.g:443:8: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )\r
+        # C.g:443:8: ( IDENTIFIER )* ( STRING_LITERAL )+\r
+        # C.g:443:8: ( IDENTIFIER )*\r
+        while True: #loop125\r
+            alt125 = 2\r
+            LA125_0 = self.input.LA(1)\r
 \r
-    class Selection_statementContext(ParserRuleContext):\r
+            if (LA125_0 == IDENTIFIER) :\r
+                alt125 = 1\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.e = None # ExpressionContext\r
 \r
-        def statement(self, i:int=None):\r
-            if i is None:\r
-                return self.getTypedRuleContexts(CParser.StatementContext)\r
-            else:\r
-                return self.getTypedRuleContext(CParser.StatementContext,i)\r
+            if alt125 == 1:\r
+                # C.g:0:0: IDENTIFIER\r
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1381680)\r
+                if self.failed:\r
+                    return\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+            else:\r
+                break #loop125\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_selection_statement\r
+        # C.g:443:20: ( STRING_LITERAL )+\r
+        cnt126 = 0\r
+        while True: #loop126\r
+            alt126 = 2\r
+            LA126_0 = self.input.LA(1)\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterSelection_statement" ):\r
-                listener.enterSelection_statement(self)\r
+            if (LA126_0 == STRING_LITERAL) :\r
+                alt126 = 1\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitSelection_statement" ):\r
-                listener.exitSelection_statement(self)\r
 \r
+            if alt126 == 1:\r
+                # C.g:0:0: STRING_LITERAL\r
+                self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1381683)\r
+                if self.failed:\r
+                    return\r
 \r
 \r
+            else:\r
+                if cnt126 >= 1:\r
+                    break #loop126\r
 \r
-    def selection_statement(self):\r
+                if self.backtracking > 0:\r
+                    self.failed = True\r
+                    return\r
 \r
-        localctx = CParser.Selection_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 136, self.RULE_selection_statement)\r
-        try:\r
-            self.state = 858\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__83]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 842\r
-                self.match(CParser.T__83)\r
-                self.state = 843\r
-                self.match(CParser.T__37)\r
-                self.state = 844\r
-                localctx.e = self.expression()\r
-                self.state = 845\r
-                self.match(CParser.T__38)\r
-                self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
-                self.state = 847\r
-                self.statement()\r
-                self.state = 850\r
-                self._errHandler.sync(self)\r
-                la_ = self._interp.adaptivePredict(self._input,105,self._ctx)\r
-                if la_ == 1:\r
-                    self.state = 848\r
-                    self.match(CParser.T__84)\r
-                    self.state = 849\r
-                    self.statement()\r
+                eee = EarlyExitException(126, self.input)\r
+                raise eee\r
 \r
+            cnt126 += 1\r
 \r
-                pass\r
-            elif token in [CParser.T__85]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 852\r
-                self.match(CParser.T__85)\r
-                self.state = 853\r
-                self.match(CParser.T__37)\r
-                self.state = 854\r
-                self.expression()\r
-                self.state = 855\r
-                self.match(CParser.T__38)\r
-                self.state = 856\r
-                self.statement()\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
-    class Iteration_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
-            self.e = None # ExpressionContext\r
+    # $ANTLR end synpred138\r
 \r
-        def statement(self):\r
-            return self.getTypedRuleContext(CParser.StatementContext,0)\r
 \r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
+    # $ANTLR start synpred142\r
+    def synpred142_fragment(self, ):\r
+        # C.g:458:4: ( lvalue assignment_operator assignment_expression )\r
+        # C.g:458:4: lvalue assignment_operator assignment_expression\r
+        self.following.append(self.FOLLOW_lvalue_in_synpred1421744)\r
+        self.lvalue()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_assignment_operator_in_synpred1421746)\r
+        self.assignment_operator()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+        self.following.append(self.FOLLOW_assignment_expression_in_synpred1421748)\r
+        self.assignment_expression()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_iteration_statement\r
+    # $ANTLR end synpred142\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterIteration_statement" ):\r
-                listener.enterIteration_statement(self)\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitIteration_statement" ):\r
-                listener.exitIteration_statement(self)\r
 \r
+    # $ANTLR start synpred169\r
+    def synpred169_fragment(self, ):\r
+        # C.g:520:4: ( expression_statement )\r
+        # C.g:520:4: expression_statement\r
+        self.following.append(self.FOLLOW_expression_statement_in_synpred1692035)\r
+        self.expression_statement()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred169\r
 \r
-    def iteration_statement(self):\r
 \r
-        localctx = CParser.Iteration_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 138, self.RULE_iteration_statement)\r
-        try:\r
-            self.state = 876\r
-            self._errHandler.sync(self)\r
-            token = self._input.LA(1)\r
-            if token in [CParser.T__86]:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 860\r
-                self.match(CParser.T__86)\r
-                self.state = 861\r
-                self.match(CParser.T__37)\r
-                self.state = 862\r
-                localctx.e = self.expression()\r
-                self.state = 863\r
-                self.match(CParser.T__38)\r
-                self.state = 864\r
-                self.statement()\r
-                self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
-                pass\r
-            elif token in [CParser.T__87]:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 867\r
-                self.match(CParser.T__87)\r
-                self.state = 868\r
-                self.statement()\r
-                self.state = 869\r
-                self.match(CParser.T__86)\r
-                self.state = 870\r
-                self.match(CParser.T__37)\r
-                self.state = 871\r
-                localctx.e = self.expression()\r
-                self.state = 872\r
-                self.match(CParser.T__38)\r
-                self.state = 873\r
-                self.match(CParser.T__1)\r
-                self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText((localctx.e.start,localctx.e.stop))))\r
-                pass\r
-            else:\r
-                raise NoViableAltException(self)\r
 \r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
+    # $ANTLR start synpred173\r
+    def synpred173_fragment(self, ):\r
+        # C.g:524:4: ( macro_statement )\r
+        # C.g:524:4: macro_statement\r
+        self.following.append(self.FOLLOW_macro_statement_in_synpred1732055)\r
+        self.macro_statement()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-    class Jump_statementContext(ParserRuleContext):\r
 \r
-        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):\r
-            super().__init__(parent, invokingState)\r
-            self.parser = parser\r
+    # $ANTLR end synpred173\r
 \r
-        def IDENTIFIER(self):\r
-            return self.getToken(CParser.IDENTIFIER, 0)\r
 \r
-        def expression(self):\r
-            return self.getTypedRuleContext(CParser.ExpressionContext,0)\r
 \r
+    # $ANTLR start synpred174\r
+    def synpred174_fragment(self, ):\r
+        # C.g:525:4: ( asm2_statement )\r
+        # C.g:525:4: asm2_statement\r
+        self.following.append(self.FOLLOW_asm2_statement_in_synpred1742060)\r
+        self.asm2_statement()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
-        def getRuleIndex(self):\r
-            return CParser.RULE_jump_statement\r
 \r
-        def enterRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "enterJump_statement" ):\r
-                listener.enterJump_statement(self)\r
+    # $ANTLR end synpred174\r
 \r
-        def exitRule(self, listener:ParseTreeListener):\r
-            if hasattr( listener, "exitJump_statement" ):\r
-                listener.exitJump_statement(self)\r
 \r
 \r
+    # $ANTLR start synpred181\r
+    def synpred181_fragment(self, ):\r
+        # C.g:544:19: ( declaration )\r
+        # C.g:544:19: declaration\r
+        self.following.append(self.FOLLOW_declaration_in_synpred1812166)\r
+        self.declaration()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
-    def jump_statement(self):\r
+    # $ANTLR end synpred181\r
 \r
-        localctx = CParser.Jump_statementContext(self, self._ctx, self.state)\r
-        self.enterRule(localctx, 140, self.RULE_jump_statement)\r
-        try:\r
-            self.state = 891\r
-            self._errHandler.sync(self)\r
-            la_ = self._interp.adaptivePredict(self._input,108,self._ctx)\r
-            if la_ == 1:\r
-                self.enterOuterAlt(localctx, 1)\r
-                self.state = 878\r
-                self.match(CParser.T__88)\r
-                self.state = 879\r
-                self.match(CParser.IDENTIFIER)\r
-                self.state = 880\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-            elif la_ == 2:\r
-                self.enterOuterAlt(localctx, 2)\r
-                self.state = 881\r
-                self.match(CParser.T__89)\r
-                self.state = 882\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-            elif la_ == 3:\r
-                self.enterOuterAlt(localctx, 3)\r
-                self.state = 883\r
-                self.match(CParser.T__90)\r
-                self.state = 884\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-            elif la_ == 4:\r
-                self.enterOuterAlt(localctx, 4)\r
-                self.state = 885\r
-                self.match(CParser.T__91)\r
-                self.state = 886\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-            elif la_ == 5:\r
-                self.enterOuterAlt(localctx, 5)\r
-                self.state = 887\r
-                self.match(CParser.T__91)\r
-                self.state = 888\r
-                self.expression()\r
-                self.state = 889\r
-                self.match(CParser.T__1)\r
-                pass\r
-\r
-\r
-        except RecognitionException as re:\r
-            localctx.exception = re\r
-            self._errHandler.reportError(self, re)\r
-            self._errHandler.recover(self, re)\r
-        finally:\r
-            self.exitRule()\r
-        return localctx\r
 \r
 \r
+    # $ANTLR start synpred182\r
+    def synpred182_fragment(self, ):\r
+        # C.g:544:33: ( statement_list )\r
+        # C.g:544:33: statement_list\r
+        self.following.append(self.FOLLOW_statement_list_in_synpred1822170)\r
+        self.statement_list()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
 \r
 \r
+    # $ANTLR end synpred182\r
+\r
+\r
+\r
+    # $ANTLR start synpred186\r
+    def synpred186_fragment(self, ):\r
+        # C.g:554:8: ( declaration )\r
+        # C.g:554:8: declaration\r
+        self.following.append(self.FOLLOW_declaration_in_synpred1862225)\r
+        self.declaration()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+\r
+\r
+    # $ANTLR end synpred186\r
+\r
+\r
+\r
+    # $ANTLR start synpred188\r
+    def synpred188_fragment(self, ):\r
+        # C.g:558:4: ( statement )\r
+        # C.g:558:4: statement\r
+        self.following.append(self.FOLLOW_statement_in_synpred1882242)\r
+        self.statement()\r
+        self.following.pop()\r
+        if self.failed:\r
+            return\r
+\r
+\r
+    # $ANTLR end synpred188\r
+\r
+\r
+\r
+    def synpred69(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred69_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred81(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred81_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred82(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred82_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred66(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred66_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred83(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred83_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred84(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred84_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred67(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred67_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred86(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred86_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred120(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred120_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred40(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred40_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred142(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred142_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred182(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred182_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred109(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred109_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred181(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred181_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred186(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred186_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred188(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred188_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred169(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred169_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred117(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred117_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred70(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred70_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred118(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred118_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred34(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred34_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred33(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred33_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred94(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred94_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred39(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred39_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred74(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred74_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred114(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred114_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred93(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred93_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred75(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred75_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred137(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred137_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred90(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred90_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred138(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred138_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred91(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred91_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred73(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred73_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred5(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred5_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred78(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred78_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred7(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred7_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred76(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred76_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred77(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred77_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred2(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred2_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred4(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred4_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred174(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred174_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred173(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred173_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred14(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred14_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred15(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred15_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+    def synpred10(self):\r
+        self.backtracking += 1\r
+        start = self.input.mark()\r
+        self.synpred10_fragment()\r
+        success = not self.failed\r
+        self.input.rewind(start)\r
+        self.backtracking -= 1\r
+        self.failed = False\r
+        return success\r
+\r
+\r
+\r
+\r
+\r
+    FOLLOW_external_declaration_in_translation_unit74 = frozenset([1, 4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66])\r
+    FOLLOW_function_definition_in_external_declaration113 = frozenset([1])\r
+    FOLLOW_declaration_in_external_declaration118 = frozenset([1])\r
+    FOLLOW_macro_statement_in_external_declaration123 = frozenset([1, 25])\r
+    FOLLOW_25_in_external_declaration126 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_function_definition157 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_declarator_in_function_definition160 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_declaration_in_function_definition166 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_compound_statement_in_function_definition171 = frozenset([1])\r
+    FOLLOW_compound_statement_in_function_definition180 = frozenset([1])\r
+    FOLLOW_26_in_declaration203 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66])\r
+    FOLLOW_declaration_specifiers_in_declaration207 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_init_declarator_list_in_declaration216 = frozenset([25])\r
+    FOLLOW_25_in_declaration220 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_declaration234 = frozenset([4, 25, 58, 59, 60, 62, 66])\r
+    FOLLOW_init_declarator_list_in_declaration238 = frozenset([25])\r
+    FOLLOW_25_in_declaration243 = frozenset([1])\r
+    FOLLOW_storage_class_specifier_in_declaration_specifiers264 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_specifier_in_declaration_specifiers272 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_qualifier_in_declaration_specifiers286 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_init_declarator_in_init_declarator_list308 = frozenset([1, 27])\r
+    FOLLOW_27_in_init_declarator_list311 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_init_declarator_in_init_declarator_list313 = frozenset([1, 27])\r
+    FOLLOW_declarator_in_init_declarator326 = frozenset([1, 28])\r
+    FOLLOW_28_in_init_declarator329 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_initializer_in_init_declarator331 = frozenset([1])\r
+    FOLLOW_set_in_storage_class_specifier0 = frozenset([1])\r
+    FOLLOW_34_in_type_specifier376 = frozenset([1])\r
+    FOLLOW_35_in_type_specifier381 = frozenset([1])\r
+    FOLLOW_36_in_type_specifier386 = frozenset([1])\r
+    FOLLOW_37_in_type_specifier391 = frozenset([1])\r
+    FOLLOW_38_in_type_specifier396 = frozenset([1])\r
+    FOLLOW_39_in_type_specifier401 = frozenset([1])\r
+    FOLLOW_40_in_type_specifier406 = frozenset([1])\r
+    FOLLOW_41_in_type_specifier411 = frozenset([1])\r
+    FOLLOW_42_in_type_specifier416 = frozenset([1])\r
+    FOLLOW_struct_or_union_specifier_in_type_specifier423 = frozenset([1])\r
+    FOLLOW_enum_specifier_in_type_specifier433 = frozenset([1])\r
+    FOLLOW_type_id_in_type_specifier451 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_type_id467 = frozenset([1])\r
+    FOLLOW_struct_or_union_in_struct_or_union_specifier494 = frozenset([4, 43])\r
+    FOLLOW_IDENTIFIER_in_struct_or_union_specifier496 = frozenset([43])\r
+    FOLLOW_43_in_struct_or_union_specifier499 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_struct_declaration_list_in_struct_or_union_specifier501 = frozenset([44])\r
+    FOLLOW_44_in_struct_or_union_specifier503 = frozenset([1])\r
+    FOLLOW_struct_or_union_in_struct_or_union_specifier508 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_struct_or_union_specifier510 = frozenset([1])\r
+    FOLLOW_set_in_struct_or_union0 = frozenset([1])\r
+    FOLLOW_struct_declaration_in_struct_declaration_list537 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_specifier_qualifier_list_in_struct_declaration549 = frozenset([4, 47, 58, 59, 60, 62, 66])\r
+    FOLLOW_struct_declarator_list_in_struct_declaration551 = frozenset([25])\r
+    FOLLOW_25_in_struct_declaration553 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_specifier_qualifier_list566 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_specifier_in_specifier_qualifier_list570 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_struct_declarator_in_struct_declarator_list584 = frozenset([1, 27])\r
+    FOLLOW_27_in_struct_declarator_list587 = frozenset([4, 47, 58, 59, 60, 62, 66])\r
+    FOLLOW_struct_declarator_in_struct_declarator_list589 = frozenset([1, 27])\r
+    FOLLOW_declarator_in_struct_declarator602 = frozenset([1, 47])\r
+    FOLLOW_47_in_struct_declarator605 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_struct_declarator607 = frozenset([1])\r
+    FOLLOW_47_in_struct_declarator614 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_struct_declarator616 = frozenset([1])\r
+    FOLLOW_48_in_enum_specifier634 = frozenset([43])\r
+    FOLLOW_43_in_enum_specifier636 = frozenset([4])\r
+    FOLLOW_enumerator_list_in_enum_specifier638 = frozenset([27, 44])\r
+    FOLLOW_27_in_enum_specifier640 = frozenset([44])\r
+    FOLLOW_44_in_enum_specifier643 = frozenset([1])\r
+    FOLLOW_48_in_enum_specifier648 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_enum_specifier650 = frozenset([43])\r
+    FOLLOW_43_in_enum_specifier652 = frozenset([4])\r
+    FOLLOW_enumerator_list_in_enum_specifier654 = frozenset([27, 44])\r
+    FOLLOW_27_in_enum_specifier656 = frozenset([44])\r
+    FOLLOW_44_in_enum_specifier659 = frozenset([1])\r
+    FOLLOW_48_in_enum_specifier664 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_enum_specifier666 = frozenset([1])\r
+    FOLLOW_enumerator_in_enumerator_list677 = frozenset([1, 27])\r
+    FOLLOW_27_in_enumerator_list680 = frozenset([4])\r
+    FOLLOW_enumerator_in_enumerator_list682 = frozenset([1, 27])\r
+    FOLLOW_IDENTIFIER_in_enumerator695 = frozenset([1, 28])\r
+    FOLLOW_28_in_enumerator698 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_enumerator700 = frozenset([1])\r
+    FOLLOW_set_in_type_qualifier0 = frozenset([1])\r
+    FOLLOW_pointer_in_declarator784 = frozenset([4, 58, 59, 60, 62])\r
+    FOLLOW_58_in_declarator788 = frozenset([4, 59, 60, 62])\r
+    FOLLOW_59_in_declarator793 = frozenset([4, 60, 62])\r
+    FOLLOW_60_in_declarator798 = frozenset([4, 62])\r
+    FOLLOW_direct_declarator_in_declarator802 = frozenset([1])\r
+    FOLLOW_pointer_in_declarator808 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_direct_declarator819 = frozenset([1, 62, 64])\r
+    FOLLOW_declarator_suffix_in_direct_declarator821 = frozenset([1, 62, 64])\r
+    FOLLOW_62_in_direct_declarator827 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_58_in_direct_declarator830 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_declarator_in_direct_declarator834 = frozenset([63])\r
+    FOLLOW_63_in_direct_declarator836 = frozenset([62, 64])\r
+    FOLLOW_declarator_suffix_in_direct_declarator838 = frozenset([1, 62, 64])\r
+    FOLLOW_64_in_declarator_suffix852 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_declarator_suffix854 = frozenset([65])\r
+    FOLLOW_65_in_declarator_suffix856 = frozenset([1])\r
+    FOLLOW_64_in_declarator_suffix866 = frozenset([65])\r
+    FOLLOW_65_in_declarator_suffix868 = frozenset([1])\r
+    FOLLOW_62_in_declarator_suffix878 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_type_list_in_declarator_suffix880 = frozenset([63])\r
+    FOLLOW_63_in_declarator_suffix882 = frozenset([1])\r
+    FOLLOW_62_in_declarator_suffix892 = frozenset([4])\r
+    FOLLOW_identifier_list_in_declarator_suffix894 = frozenset([63])\r
+    FOLLOW_63_in_declarator_suffix896 = frozenset([1])\r
+    FOLLOW_62_in_declarator_suffix906 = frozenset([63])\r
+    FOLLOW_63_in_declarator_suffix908 = frozenset([1])\r
+    FOLLOW_66_in_pointer919 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_qualifier_in_pointer921 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_pointer_in_pointer924 = frozenset([1])\r
+    FOLLOW_66_in_pointer930 = frozenset([66])\r
+    FOLLOW_pointer_in_pointer932 = frozenset([1])\r
+    FOLLOW_66_in_pointer937 = frozenset([1])\r
+    FOLLOW_parameter_list_in_parameter_type_list948 = frozenset([1, 27])\r
+    FOLLOW_27_in_parameter_type_list951 = frozenset([53, 67])\r
+    FOLLOW_53_in_parameter_type_list954 = frozenset([67])\r
+    FOLLOW_67_in_parameter_type_list958 = frozenset([1])\r
+    FOLLOW_parameter_declaration_in_parameter_list971 = frozenset([1, 27])\r
+    FOLLOW_27_in_parameter_list974 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_53_in_parameter_list977 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_declaration_in_parameter_list981 = frozenset([1, 27])\r
+    FOLLOW_declaration_specifiers_in_parameter_declaration994 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_declarator_in_parameter_declaration997 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_parameter_declaration999 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_53_in_parameter_declaration1004 = frozenset([1])\r
+    FOLLOW_pointer_in_parameter_declaration1013 = frozenset([4, 66])\r
+    FOLLOW_IDENTIFIER_in_parameter_declaration1016 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_identifier_list1027 = frozenset([1, 27])\r
+    FOLLOW_27_in_identifier_list1031 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_identifier_list1033 = frozenset([1, 27])\r
+    FOLLOW_specifier_qualifier_list_in_type_name1046 = frozenset([1, 62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_type_name1048 = frozenset([1])\r
+    FOLLOW_type_id_in_type_name1054 = frozenset([1])\r
+    FOLLOW_pointer_in_abstract_declarator1065 = frozenset([1, 62, 64])\r
+    FOLLOW_direct_abstract_declarator_in_abstract_declarator1067 = frozenset([1])\r
+    FOLLOW_direct_abstract_declarator_in_abstract_declarator1073 = frozenset([1])\r
+    FOLLOW_62_in_direct_abstract_declarator1086 = frozenset([62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_direct_abstract_declarator1088 = frozenset([63])\r
+    FOLLOW_63_in_direct_abstract_declarator1090 = frozenset([1, 62, 64])\r
+    FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1094 = frozenset([1, 62, 64])\r
+    FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1098 = frozenset([1, 62, 64])\r
+    FOLLOW_64_in_abstract_declarator_suffix1110 = frozenset([65])\r
+    FOLLOW_65_in_abstract_declarator_suffix1112 = frozenset([1])\r
+    FOLLOW_64_in_abstract_declarator_suffix1117 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_abstract_declarator_suffix1119 = frozenset([65])\r
+    FOLLOW_65_in_abstract_declarator_suffix1121 = frozenset([1])\r
+    FOLLOW_62_in_abstract_declarator_suffix1126 = frozenset([63])\r
+    FOLLOW_63_in_abstract_declarator_suffix1128 = frozenset([1])\r
+    FOLLOW_62_in_abstract_declarator_suffix1133 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_type_list_in_abstract_declarator_suffix1135 = frozenset([63])\r
+    FOLLOW_63_in_abstract_declarator_suffix1137 = frozenset([1])\r
+    FOLLOW_assignment_expression_in_initializer1150 = frozenset([1])\r
+    FOLLOW_43_in_initializer1155 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_initializer_list_in_initializer1157 = frozenset([27, 44])\r
+    FOLLOW_27_in_initializer1159 = frozenset([44])\r
+    FOLLOW_44_in_initializer1162 = frozenset([1])\r
+    FOLLOW_initializer_in_initializer_list1173 = frozenset([1, 27])\r
+    FOLLOW_27_in_initializer_list1176 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_initializer_in_initializer_list1178 = frozenset([1, 27])\r
+    FOLLOW_assignment_expression_in_argument_expression_list1196 = frozenset([1, 27, 53])\r
+    FOLLOW_53_in_argument_expression_list1199 = frozenset([1, 27])\r
+    FOLLOW_27_in_argument_expression_list1204 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_assignment_expression_in_argument_expression_list1206 = frozenset([1, 27, 53])\r
+    FOLLOW_53_in_argument_expression_list1209 = frozenset([1, 27])\r
+    FOLLOW_multiplicative_expression_in_additive_expression1225 = frozenset([1, 68, 69])\r
+    FOLLOW_68_in_additive_expression1229 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_multiplicative_expression_in_additive_expression1231 = frozenset([1, 68, 69])\r
+    FOLLOW_69_in_additive_expression1235 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_multiplicative_expression_in_additive_expression1237 = frozenset([1, 68, 69])\r
+    FOLLOW_cast_expression_in_multiplicative_expression1251 = frozenset([1, 66, 70, 71])\r
+    FOLLOW_66_in_multiplicative_expression1255 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_multiplicative_expression1257 = frozenset([1, 66, 70, 71])\r
+    FOLLOW_70_in_multiplicative_expression1261 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_multiplicative_expression1263 = frozenset([1, 66, 70, 71])\r
+    FOLLOW_71_in_multiplicative_expression1267 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_multiplicative_expression1269 = frozenset([1, 66, 70, 71])\r
+    FOLLOW_62_in_cast_expression1282 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_name_in_cast_expression1284 = frozenset([63])\r
+    FOLLOW_63_in_cast_expression1286 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_cast_expression1288 = frozenset([1])\r
+    FOLLOW_unary_expression_in_cast_expression1293 = frozenset([1])\r
+    FOLLOW_postfix_expression_in_unary_expression1304 = frozenset([1])\r
+    FOLLOW_72_in_unary_expression1309 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_unary_expression_in_unary_expression1311 = frozenset([1])\r
+    FOLLOW_73_in_unary_expression1316 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_unary_expression_in_unary_expression1318 = frozenset([1])\r
+    FOLLOW_unary_operator_in_unary_expression1323 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_unary_expression1325 = frozenset([1])\r
+    FOLLOW_74_in_unary_expression1330 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_unary_expression_in_unary_expression1332 = frozenset([1])\r
+    FOLLOW_74_in_unary_expression1337 = frozenset([62])\r
+    FOLLOW_62_in_unary_expression1339 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_name_in_unary_expression1341 = frozenset([63])\r
+    FOLLOW_63_in_unary_expression1343 = frozenset([1])\r
+    FOLLOW_primary_expression_in_postfix_expression1367 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_64_in_postfix_expression1383 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_postfix_expression1385 = frozenset([65])\r
+    FOLLOW_65_in_postfix_expression1387 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_62_in_postfix_expression1401 = frozenset([63])\r
+    FOLLOW_63_in_postfix_expression1405 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_62_in_postfix_expression1420 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_argument_expression_list_in_postfix_expression1424 = frozenset([63])\r
+    FOLLOW_63_in_postfix_expression1428 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_62_in_postfix_expression1444 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_macro_parameter_list_in_postfix_expression1446 = frozenset([63])\r
+    FOLLOW_63_in_postfix_expression1448 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_75_in_postfix_expression1462 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_postfix_expression1466 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_66_in_postfix_expression1482 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_postfix_expression1486 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_76_in_postfix_expression1502 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_postfix_expression1506 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_72_in_postfix_expression1522 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_73_in_postfix_expression1536 = frozenset([1, 62, 64, 66, 72, 73, 75, 76])\r
+    FOLLOW_parameter_declaration_in_macro_parameter_list1559 = frozenset([1, 27])\r
+    FOLLOW_27_in_macro_parameter_list1562 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_declaration_in_macro_parameter_list1564 = frozenset([1, 27])\r
+    FOLLOW_set_in_unary_operator0 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_primary_expression1613 = frozenset([1])\r
+    FOLLOW_constant_in_primary_expression1618 = frozenset([1])\r
+    FOLLOW_62_in_primary_expression1623 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_primary_expression1625 = frozenset([63])\r
+    FOLLOW_63_in_primary_expression1627 = frozenset([1])\r
+    FOLLOW_HEX_LITERAL_in_constant1643 = frozenset([1])\r
+    FOLLOW_OCTAL_LITERAL_in_constant1653 = frozenset([1])\r
+    FOLLOW_DECIMAL_LITERAL_in_constant1663 = frozenset([1])\r
+    FOLLOW_CHARACTER_LITERAL_in_constant1671 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_constant1680 = frozenset([4, 9])\r
+    FOLLOW_STRING_LITERAL_in_constant1683 = frozenset([1, 4, 9])\r
+    FOLLOW_IDENTIFIER_in_constant1688 = frozenset([1, 4])\r
+    FOLLOW_FLOATING_POINT_LITERAL_in_constant1699 = frozenset([1])\r
+    FOLLOW_assignment_expression_in_expression1715 = frozenset([1, 27])\r
+    FOLLOW_27_in_expression1718 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_assignment_expression_in_expression1720 = frozenset([1, 27])\r
+    FOLLOW_conditional_expression_in_constant_expression1733 = frozenset([1])\r
+    FOLLOW_lvalue_in_assignment_expression1744 = frozenset([28, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89])\r
+    FOLLOW_assignment_operator_in_assignment_expression1746 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_assignment_expression_in_assignment_expression1748 = frozenset([1])\r
+    FOLLOW_conditional_expression_in_assignment_expression1753 = frozenset([1])\r
+    FOLLOW_unary_expression_in_lvalue1765 = frozenset([1])\r
+    FOLLOW_set_in_assignment_operator0 = frozenset([1])\r
+    FOLLOW_logical_or_expression_in_conditional_expression1839 = frozenset([1, 90])\r
+    FOLLOW_90_in_conditional_expression1842 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_conditional_expression1844 = frozenset([47])\r
+    FOLLOW_47_in_conditional_expression1846 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_conditional_expression_in_conditional_expression1848 = frozenset([1])\r
+    FOLLOW_logical_and_expression_in_logical_or_expression1863 = frozenset([1, 91])\r
+    FOLLOW_91_in_logical_or_expression1866 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_logical_and_expression_in_logical_or_expression1868 = frozenset([1, 91])\r
+    FOLLOW_inclusive_or_expression_in_logical_and_expression1881 = frozenset([1, 92])\r
+    FOLLOW_92_in_logical_and_expression1884 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_inclusive_or_expression_in_logical_and_expression1886 = frozenset([1, 92])\r
+    FOLLOW_exclusive_or_expression_in_inclusive_or_expression1899 = frozenset([1, 93])\r
+    FOLLOW_93_in_inclusive_or_expression1902 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_exclusive_or_expression_in_inclusive_or_expression1904 = frozenset([1, 93])\r
+    FOLLOW_and_expression_in_exclusive_or_expression1917 = frozenset([1, 94])\r
+    FOLLOW_94_in_exclusive_or_expression1920 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_and_expression_in_exclusive_or_expression1922 = frozenset([1, 94])\r
+    FOLLOW_equality_expression_in_and_expression1935 = frozenset([1, 77])\r
+    FOLLOW_77_in_and_expression1938 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_equality_expression_in_and_expression1940 = frozenset([1, 77])\r
+    FOLLOW_relational_expression_in_equality_expression1952 = frozenset([1, 95, 96])\r
+    FOLLOW_set_in_equality_expression1955 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_relational_expression_in_equality_expression1961 = frozenset([1, 95, 96])\r
+    FOLLOW_shift_expression_in_relational_expression1975 = frozenset([1, 97, 98, 99, 100])\r
+    FOLLOW_set_in_relational_expression1978 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_shift_expression_in_relational_expression1988 = frozenset([1, 97, 98, 99, 100])\r
+    FOLLOW_additive_expression_in_shift_expression2001 = frozenset([1, 101, 102])\r
+    FOLLOW_set_in_shift_expression2004 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_additive_expression_in_shift_expression2010 = frozenset([1, 101, 102])\r
+    FOLLOW_labeled_statement_in_statement2025 = frozenset([1])\r
+    FOLLOW_compound_statement_in_statement2030 = frozenset([1])\r
+    FOLLOW_expression_statement_in_statement2035 = frozenset([1])\r
+    FOLLOW_selection_statement_in_statement2040 = frozenset([1])\r
+    FOLLOW_iteration_statement_in_statement2045 = frozenset([1])\r
+    FOLLOW_jump_statement_in_statement2050 = frozenset([1])\r
+    FOLLOW_macro_statement_in_statement2055 = frozenset([1])\r
+    FOLLOW_asm2_statement_in_statement2060 = frozenset([1])\r
+    FOLLOW_asm1_statement_in_statement2065 = frozenset([1])\r
+    FOLLOW_asm_statement_in_statement2070 = frozenset([1])\r
+    FOLLOW_declaration_in_statement2075 = frozenset([1])\r
+    FOLLOW_103_in_asm2_statement2086 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_asm2_statement2089 = frozenset([62])\r
+    FOLLOW_62_in_asm2_statement2091 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_set_in_asm2_statement2094 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_63_in_asm2_statement2101 = frozenset([25])\r
+    FOLLOW_25_in_asm2_statement2103 = frozenset([1])\r
+    FOLLOW_104_in_asm1_statement2115 = frozenset([43])\r
+    FOLLOW_43_in_asm1_statement2117 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_set_in_asm1_statement2120 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_44_in_asm1_statement2127 = frozenset([1])\r
+    FOLLOW_105_in_asm_statement2138 = frozenset([43])\r
+    FOLLOW_43_in_asm_statement2140 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_set_in_asm_statement2143 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_44_in_asm_statement2150 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_macro_statement2162 = frozenset([62])\r
+    FOLLOW_62_in_macro_statement2164 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_declaration_in_macro_statement2166 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_list_in_macro_statement2170 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_macro_statement2173 = frozenset([63])\r
+    FOLLOW_63_in_macro_statement2176 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_labeled_statement2188 = frozenset([47])\r
+    FOLLOW_47_in_labeled_statement2190 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_labeled_statement2192 = frozenset([1])\r
+    FOLLOW_106_in_labeled_statement2197 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_constant_expression_in_labeled_statement2199 = frozenset([47])\r
+    FOLLOW_47_in_labeled_statement2201 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_labeled_statement2203 = frozenset([1])\r
+    FOLLOW_107_in_labeled_statement2208 = frozenset([47])\r
+    FOLLOW_47_in_labeled_statement2210 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_labeled_statement2212 = frozenset([1])\r
+    FOLLOW_43_in_compound_statement2223 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_declaration_in_compound_statement2225 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_list_in_compound_statement2228 = frozenset([44])\r
+    FOLLOW_44_in_compound_statement2231 = frozenset([1])\r
+    FOLLOW_statement_in_statement_list2242 = frozenset([1, 4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_25_in_expression_statement2254 = frozenset([1])\r
+    FOLLOW_expression_in_expression_statement2259 = frozenset([25])\r
+    FOLLOW_25_in_expression_statement2261 = frozenset([1])\r
+    FOLLOW_108_in_selection_statement2272 = frozenset([62])\r
+    FOLLOW_62_in_selection_statement2274 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_selection_statement2278 = frozenset([63])\r
+    FOLLOW_63_in_selection_statement2280 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_selection_statement2284 = frozenset([1, 109])\r
+    FOLLOW_109_in_selection_statement2299 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_selection_statement2301 = frozenset([1])\r
+    FOLLOW_110_in_selection_statement2308 = frozenset([62])\r
+    FOLLOW_62_in_selection_statement2310 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_selection_statement2312 = frozenset([63])\r
+    FOLLOW_63_in_selection_statement2314 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_selection_statement2316 = frozenset([1])\r
+    FOLLOW_111_in_iteration_statement2327 = frozenset([62])\r
+    FOLLOW_62_in_iteration_statement2329 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_iteration_statement2333 = frozenset([63])\r
+    FOLLOW_63_in_iteration_statement2335 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_iteration_statement2337 = frozenset([1])\r
+    FOLLOW_112_in_iteration_statement2344 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_iteration_statement2346 = frozenset([111])\r
+    FOLLOW_111_in_iteration_statement2348 = frozenset([62])\r
+    FOLLOW_62_in_iteration_statement2350 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_iteration_statement2354 = frozenset([63])\r
+    FOLLOW_63_in_iteration_statement2356 = frozenset([25])\r
+    FOLLOW_25_in_iteration_statement2358 = frozenset([1])\r
+    FOLLOW_113_in_iteration_statement2365 = frozenset([62])\r
+    FOLLOW_62_in_iteration_statement2367 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_statement_in_iteration_statement2369 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_statement_in_iteration_statement2373 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_iteration_statement2375 = frozenset([63])\r
+    FOLLOW_63_in_iteration_statement2378 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117])\r
+    FOLLOW_statement_in_iteration_statement2380 = frozenset([1])\r
+    FOLLOW_114_in_jump_statement2393 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_jump_statement2395 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2397 = frozenset([1])\r
+    FOLLOW_115_in_jump_statement2402 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2404 = frozenset([1])\r
+    FOLLOW_116_in_jump_statement2409 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2411 = frozenset([1])\r
+    FOLLOW_117_in_jump_statement2416 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2418 = frozenset([1])\r
+    FOLLOW_117_in_jump_statement2423 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_expression_in_jump_statement2425 = frozenset([25])\r
+    FOLLOW_25_in_jump_statement2427 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred2100 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred4100 = frozenset([4, 58, 59, 60, 62, 66])\r
+    FOLLOW_declarator_in_synpred4103 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_declaration_in_synpred4105 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_43_in_synpred4108 = frozenset([1])\r
+    FOLLOW_declaration_in_synpred5118 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred7157 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred10207 = frozenset([1])\r
+    FOLLOW_type_specifier_in_synpred14272 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_synpred15286 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_synpred33444 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_synpred34442 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66])\r
+    FOLLOW_type_qualifier_in_synpred34444 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66])\r
+    FOLLOW_declarator_in_synpred34447 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_synpred39566 = frozenset([1])\r
+    FOLLOW_type_specifier_in_synpred40570 = frozenset([1])\r
+    FOLLOW_pointer_in_synpred66784 = frozenset([4, 58, 59, 60, 62])\r
+    FOLLOW_58_in_synpred66788 = frozenset([4, 59, 60, 62])\r
+    FOLLOW_59_in_synpred66793 = frozenset([4, 60, 62])\r
+    FOLLOW_60_in_synpred66798 = frozenset([4, 62])\r
+    FOLLOW_direct_declarator_in_synpred66802 = frozenset([1])\r
+    FOLLOW_declarator_suffix_in_synpred67821 = frozenset([1])\r
+    FOLLOW_58_in_synpred69830 = frozenset([1])\r
+    FOLLOW_declarator_suffix_in_synpred70838 = frozenset([1])\r
+    FOLLOW_62_in_synpred73878 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_type_list_in_synpred73880 = frozenset([63])\r
+    FOLLOW_63_in_synpred73882 = frozenset([1])\r
+    FOLLOW_62_in_synpred74892 = frozenset([4])\r
+    FOLLOW_identifier_list_in_synpred74894 = frozenset([63])\r
+    FOLLOW_63_in_synpred74896 = frozenset([1])\r
+    FOLLOW_type_qualifier_in_synpred75921 = frozenset([1])\r
+    FOLLOW_pointer_in_synpred76924 = frozenset([1])\r
+    FOLLOW_66_in_synpred77919 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_qualifier_in_synpred77921 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_pointer_in_synpred77924 = frozenset([1])\r
+    FOLLOW_66_in_synpred78930 = frozenset([66])\r
+    FOLLOW_pointer_in_synpred78932 = frozenset([1])\r
+    FOLLOW_53_in_synpred81977 = frozenset([1])\r
+    FOLLOW_27_in_synpred82974 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_53_in_synpred82977 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_parameter_declaration_in_synpred82981 = frozenset([1])\r
+    FOLLOW_declarator_in_synpred83997 = frozenset([1])\r
+    FOLLOW_abstract_declarator_in_synpred84999 = frozenset([1])\r
+    FOLLOW_declaration_specifiers_in_synpred86994 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_declarator_in_synpred86997 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_synpred86999 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66])\r
+    FOLLOW_53_in_synpred861004 = frozenset([1])\r
+    FOLLOW_specifier_qualifier_list_in_synpred901046 = frozenset([1, 62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_synpred901048 = frozenset([1])\r
+    FOLLOW_direct_abstract_declarator_in_synpred911067 = frozenset([1])\r
+    FOLLOW_62_in_synpred931086 = frozenset([62, 64, 66])\r
+    FOLLOW_abstract_declarator_in_synpred931088 = frozenset([63])\r
+    FOLLOW_63_in_synpred931090 = frozenset([1])\r
+    FOLLOW_abstract_declarator_suffix_in_synpred941098 = frozenset([1])\r
+    FOLLOW_62_in_synpred1091282 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61])\r
+    FOLLOW_type_name_in_synpred1091284 = frozenset([63])\r
+    FOLLOW_63_in_synpred1091286 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_cast_expression_in_synpred1091288 = frozenset([1])\r
+    FOLLOW_74_in_synpred1141330 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_unary_expression_in_synpred1141332 = frozenset([1])\r
+    FOLLOW_62_in_synpred1171420 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_argument_expression_list_in_synpred1171424 = frozenset([63])\r
+    FOLLOW_63_in_synpred1171428 = frozenset([1])\r
+    FOLLOW_62_in_synpred1181444 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66])\r
+    FOLLOW_macro_parameter_list_in_synpred1181446 = frozenset([63])\r
+    FOLLOW_63_in_synpred1181448 = frozenset([1])\r
+    FOLLOW_66_in_synpred1201482 = frozenset([4])\r
+    FOLLOW_IDENTIFIER_in_synpred1201486 = frozenset([1])\r
+    FOLLOW_STRING_LITERAL_in_synpred1371683 = frozenset([1])\r
+    FOLLOW_IDENTIFIER_in_synpred1381680 = frozenset([4, 9])\r
+    FOLLOW_STRING_LITERAL_in_synpred1381683 = frozenset([1, 9])\r
+    FOLLOW_lvalue_in_synpred1421744 = frozenset([28, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89])\r
+    FOLLOW_assignment_operator_in_synpred1421746 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79])\r
+    FOLLOW_assignment_expression_in_synpred1421748 = frozenset([1])\r
+    FOLLOW_expression_statement_in_synpred1692035 = frozenset([1])\r
+    FOLLOW_macro_statement_in_synpred1732055 = frozenset([1])\r
+    FOLLOW_asm2_statement_in_synpred1742060 = frozenset([1])\r
+    FOLLOW_declaration_in_synpred1812166 = frozenset([1])\r
+    FOLLOW_statement_list_in_synpred1822170 = frozenset([1])\r
+    FOLLOW_declaration_in_synpred1862225 = frozenset([1])\r
+    FOLLOW_statement_in_synpred1882242 = frozenset([1])\r
 \r
index 629192b2ca3d3af7a77ddd8fec8d319eccde0856..8a5e5df17e5aff5e34011e833becff72771e44b2 100644 (file)
@@ -21,7 +21,7 @@ import re
 import Common.LongFilePathOs as os\r
 import sys\r
 \r
-import antlr4\r
+import antlr3\r
 from .CLexer import CLexer\r
 from .CParser import CParser\r
 \r
diff --git a/BaseTools/Source/Python/Eot/Eot.py b/BaseTools/Source/Python/Eot/Eot.py
new file mode 100644 (file)
index 0000000..ce83da1
--- /dev/null
@@ -0,0 +1,2090 @@
+## @file\r
+# This file is used to be the main entrance of EOT tool\r
+#\r
+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\r
+# This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution.  The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+\r
+##\r
+# Import Modules\r
+#\r
+from __future__ import absolute_import\r
+import Common.LongFilePathOs as os, time, glob\r
+import Common.EdkLogger as EdkLogger\r
+from . import EotGlobalData\r
+from optparse import OptionParser\r
+from Common.StringUtils import NormPath\r
+from Common import BuildToolError\r
+from Common.Misc import GuidStructureStringToGuidString, sdict\r
+from .InfParserLite import *\r
+from . import c\r
+from . import Database\r
+from array import array\r
+from .Report import Report\r
+from Common.BuildVersion import gBUILD_VERSION\r
+from .Parser import ConvertGuid\r
+from Common.LongFilePathSupport import OpenLongFilePath as open\r
+import struct\r
+import uuid\r
+import copy\r
+import codecs\r
+\r
+gGuidStringFormat = "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X"\r
+gPeiAprioriFileNameGuid = '1b45cc0a-156a-428a-af62-49864da0e6e6'\r
+gAprioriGuid = 'fc510ee7-ffdc-11d4-bd41-0080c73c8881'\r
+gIndention = -4\r
+\r
+class Image(array):\r
+    _HEADER_ = struct.Struct("")\r
+    _HEADER_SIZE_ = _HEADER_.size\r
+\r
+    def __new__(cls, *args, **kwargs):\r
+        return array.__new__(cls, 'B')\r
+\r
+    def __init__(self, ID=None):\r
+        if ID is None:\r
+            self._ID_ = str(uuid.uuid1()).upper()\r
+        else:\r
+            self._ID_ = ID\r
+        self._BUF_ = None\r
+        self._LEN_ = None\r
+        self._OFF_ = None\r
+\r
+        self._SubImages = sdict() # {offset: Image()}\r
+\r
+        array.__init__(self, 'B')\r
+\r
+    def __repr__(self):\r
+        return self._ID_\r
+\r
+    def __len__(self):\r
+        Len = array.__len__(self)\r
+        for Offset in self._SubImages:\r
+            Len += len(self._SubImages[Offset])\r
+        return Len\r
+\r
+    def _Unpack(self):\r
+        self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_])\r
+        return len(self)\r
+\r
+    def _Pack(self, PadByte=0xFF):\r
+        raise NotImplementedError\r
+\r
+    def frombuffer(self, Buffer, Offset=0, Size=None):\r
+        self._BUF_ = Buffer\r
+        self._OFF_ = Offset\r
+        # we may need the Size information in advance if it's given\r
+        self._LEN_ = Size\r
+        self._LEN_ = self._Unpack()\r
+\r
+    def empty(self):\r
+        del self[0:]\r
+\r
+    def GetField(self, FieldStruct, Offset=0):\r
+        return FieldStruct.unpack_from(self, Offset)\r
+\r
+    def SetField(self, FieldStruct, Offset, *args):\r
+        # check if there's enough space\r
+        Size = FieldStruct.size\r
+        if Size > len(self):\r
+            self.extend([0] * (Size - len(self)))\r
+        FieldStruct.pack_into(self, Offset, *args)\r
+\r
+    def _SetData(self, Data):\r
+        if len(self) < self._HEADER_SIZE_:\r
+            self.extend([0] * (self._HEADER_SIZE_ - len(self)))\r
+        else:\r
+            del self[self._HEADER_SIZE_:]\r
+        self.extend(Data)\r
+\r
+    def _GetData(self):\r
+        if len(self) > self._HEADER_SIZE_:\r
+            return self[self._HEADER_SIZE_:]\r
+        return None\r
+\r
+    Data = property(_GetData, _SetData)\r
+\r
+## CompressedImage() class\r
+#\r
+#  A class for Compressed Image\r
+#\r
+class CompressedImage(Image):\r
+    # UncompressedLength = 4-byte\r
+    # CompressionType = 1-byte\r
+    _HEADER_ = struct.Struct("1I 1B")\r
+    _HEADER_SIZE_ = _HEADER_.size\r
+\r
+    _ORIG_SIZE_     = struct.Struct("1I")\r
+    _CMPRS_TYPE_    = struct.Struct("4x 1B")\r
+\r
+    def __init__(self, CompressedData=None, CompressionType=None, UncompressedLength=None):\r
+        Image.__init__(self)\r
+        if UncompressedLength is not None:\r
+            self.UncompressedLength = UncompressedLength\r
+        if CompressionType is not None:\r
+            self.CompressionType = CompressionType\r
+        if CompressedData is not None:\r
+            self.Data = CompressedData\r
+\r
+    def __str__(self):\r
+        global gIndention\r
+        S = "algorithm=%s uncompressed=%x" % (self.CompressionType, self.UncompressedLength)\r
+        for Sec in self.Sections:\r
+            S += '\n' + str(Sec)\r
+\r
+        return S\r
+\r
+    def _SetOriginalSize(self, Size):\r
+        self.SetField(self._ORIG_SIZE_, 0, Size)\r
+\r
+    def _GetOriginalSize(self):\r
+        return self.GetField(self._ORIG_SIZE_)[0]\r
+\r
+    def _SetCompressionType(self, Type):\r
+        self.SetField(self._CMPRS_TYPE_, 0, Type)\r
+\r
+    def _GetCompressionType(self):\r
+        return self.GetField(self._CMPRS_TYPE_)[0]\r
+\r
+    def _GetSections(self):\r
+        try:\r
+            from . import EfiCompressor\r
+            TmpData = EfiCompressor.FrameworkDecompress(\r
+                                        self[self._HEADER_SIZE_:],\r
+                                        len(self) - self._HEADER_SIZE_\r
+                                        )\r
+            DecData = array('B')\r
+            DecData.fromstring(TmpData)\r
+        except:\r
+            from . import EfiCompressor\r
+            TmpData = EfiCompressor.UefiDecompress(\r
+                                        self[self._HEADER_SIZE_:],\r
+                                        len(self) - self._HEADER_SIZE_\r
+                                        )\r
+            DecData = array('B')\r
+            DecData.fromstring(TmpData)\r
+\r
+        SectionList = []\r
+        Offset = 0\r
+        while Offset < len(DecData):\r
+            Sec = Section()\r
+            try:\r
+                Sec.frombuffer(DecData, Offset)\r
+                Offset += Sec.Size\r
+                # the section is aligned to 4-byte boundary\r
+            except:\r
+                break\r
+            SectionList.append(Sec)\r
+        return SectionList\r
+\r
+    UncompressedLength = property(_GetOriginalSize, _SetOriginalSize)\r
+    CompressionType = property(_GetCompressionType, _SetCompressionType)\r
+    Sections = property(_GetSections)\r
+\r
+## Ui() class\r
+#\r
+#  A class for Ui\r
+#\r
+class Ui(Image):\r
+    _HEADER_ = struct.Struct("")\r
+    _HEADER_SIZE_ = 0\r
+\r
+    def __init__(self):\r
+        Image.__init__(self)\r
+\r
+    def __str__(self):\r
+        return self.String\r
+\r
+    def _Unpack(self):\r
+        # keep header in this Image object\r
+        self.empty()\r
+        self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_])\r
+        return len(self)\r
+\r
+    def _GetUiString(self):\r
+        return codecs.utf_16_decode(self[0:-2].tostring())[0]\r
+\r
+    String = property(_GetUiString)\r
+\r
+## Depex() class\r
+#\r
+#  A class for Depex\r
+#\r
+class Depex(Image):\r
+    _HEADER_ = struct.Struct("")\r
+    _HEADER_SIZE_ = 0\r
+\r
+    _GUID_          = struct.Struct("1I2H8B")\r
+    _OPCODE_        = struct.Struct("1B")\r
+\r
+    _OPCODE_STRING_ = {\r
+        0x00    :   "BEFORE",\r
+        0x01    :   "AFTER",\r
+        0x02    :   "PUSH",\r
+        0x03    :   "AND",\r
+        0x04    :   "OR",\r
+        0x05    :   "NOT",\r
+        0x06    :   "TRUE",\r
+        0x07    :   "FALSE",\r
+        0x08    :   "END",\r
+        0x09    :   "SOR"\r
+    }\r
+\r
+    _NEXT_ = {\r
+        -1      :   _OPCODE_,   # first one in depex must be an opcdoe\r
+        0x00    :   _GUID_,     #"BEFORE",\r
+        0x01    :   _GUID_,     #"AFTER",\r
+        0x02    :   _GUID_,     #"PUSH",\r
+        0x03    :   _OPCODE_,   #"AND",\r
+        0x04    :   _OPCODE_,   #"OR",\r
+        0x05    :   _OPCODE_,   #"NOT",\r
+        0x06    :   _OPCODE_,   #"TRUE",\r
+        0x07    :   _OPCODE_,   #"FALSE",\r
+        0x08    :   None,       #"END",\r
+        0x09    :   _OPCODE_,   #"SOR"\r
+    }\r
+\r
+    def __init__(self):\r
+        Image.__init__(self)\r
+        self._ExprList = []\r
+\r
+    def __str__(self):\r
+        global gIndention\r
+        gIndention += 4\r
+        Indention = ' ' * gIndention\r
+        S = '\n'\r
+        for T in self.Expression:\r
+            if T in self._OPCODE_STRING_:\r
+                S += Indention + self._OPCODE_STRING_[T]\r
+                if T not in [0x00, 0x01, 0x02]:\r
+                    S += '\n'\r
+            else:\r
+                S += ' ' + gGuidStringFormat % T + '\n'\r
+        gIndention -= 4\r
+        return S\r
+\r
+    def _Unpack(self):\r
+        # keep header in this Image object\r
+        self.empty()\r
+        self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_])\r
+        return len(self)\r
+\r
+    def _GetExpression(self):\r
+        if self._ExprList == []:\r
+            Offset = 0\r
+            CurrentData = self._OPCODE_\r
+            while Offset < len(self):\r
+                Token = CurrentData.unpack_from(self, Offset)\r
+                Offset += CurrentData.size\r
+                if len(Token) == 1:\r
+                    Token = Token[0]\r
+                    if Token in self._NEXT_:\r
+                        CurrentData = self._NEXT_[Token]\r
+                    else:\r
+                        CurrentData = self._GUID_\r
+                else:\r
+                    CurrentData = self._OPCODE_\r
+                self._ExprList.append(Token)\r
+                if CurrentData is None:\r
+                    break\r
+        return self._ExprList\r
+\r
+    Expression = property(_GetExpression)\r
+\r
+## FirmwareVolume() class\r
+#\r
+#  A class for Firmware Volume\r
+#\r
+class FirmwareVolume(Image):\r
+    # Read FvLength, Attributes, HeaderLength, Checksum\r
+    _HEADER_ = struct.Struct("16x 1I2H8B 1Q 4x 1I 1H 1H")\r
+    _HEADER_SIZE_ = _HEADER_.size\r
+\r
+    _FfsGuid = "8C8CE578-8A3D-4F1C-9935-896185C32DD3"\r
+\r
+    _GUID_      = struct.Struct("16x 1I2H8B")\r
+    _LENGTH_    = struct.Struct("16x 16x 1Q")\r
+    _SIG_       = struct.Struct("16x 16x 8x 1I")\r
+    _ATTR_      = struct.Struct("16x 16x 8x 4x 1I")\r
+    _HLEN_      = struct.Struct("16x 16x 8x 4x 4x 1H")\r
+    _CHECKSUM_  = struct.Struct("16x 16x 8x 4x 4x 2x 1H")\r
+\r
+    def __init__(self, Name=''):\r
+        Image.__init__(self)\r
+        self.Name = Name\r
+        self.FfsDict = sdict()\r
+        self.OrderedFfsDict = sdict()\r
+        self.UnDispatchedFfsDict = sdict()\r
+        self.ProtocolList = sdict()\r
+\r
+    def CheckArchProtocol(self):\r
+        for Item in EotGlobalData.gArchProtocolGuids:\r
+            if Item.lower() not in EotGlobalData.gProtocolList:\r
+                return False\r
+        return True\r
+\r
+    def ParseDepex(self, Depex, Type):\r
+        List = None\r
+        if Type == 'Ppi':\r
+            List = EotGlobalData.gPpiList\r
+        if Type == 'Protocol':\r
+            List = EotGlobalData.gProtocolList\r
+        DepexStack = []\r
+        DepexList = []\r
+        DepexString = ''\r
+        FileDepex = None\r
+        CouldBeLoaded = True\r
+        for Index in range(0, len(Depex.Expression)):\r
+            Item = Depex.Expression[Index]\r
+            if Item == 0x00:\r
+                Index = Index + 1\r
+                Guid = gGuidStringFormat % Depex.Expression[Index]\r
+                if Guid in self.OrderedFfsDict and Depex.Expression[Index + 1] == 0x08:\r
+                    return (True, 'BEFORE %s' % Guid, [Guid, 'BEFORE'])\r
+            elif Item == 0x01:\r
+                Index = Index + 1\r
+                Guid = gGuidStringFormat % Depex.Expression[Index]\r
+                if Guid in self.OrderedFfsDict and Depex.Expression[Index + 1] == 0x08:\r
+                    return (True, 'AFTER %s' % Guid, [Guid, 'AFTER'])\r
+            elif Item == 0x02:\r
+                Index = Index + 1\r
+                Guid = gGuidStringFormat % Depex.Expression[Index]\r
+                if Guid.lower() in List:\r
+                    DepexStack.append(True)\r
+                    DepexList.append(Guid)\r
+                else:\r
+                    DepexStack.append(False)\r
+                    DepexList.append(Guid)\r
+                continue\r
+            elif Item == 0x03 or Item == 0x04:\r
+                DepexStack.append(eval(str(DepexStack.pop()) + ' ' + Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexStack.pop())))\r
+                DepexList.append(str(DepexList.pop()) + ' ' + Depex._OPCODE_STRING_[Item].upper() + ' ' + str(DepexList.pop()))\r
+            elif Item == 0x05:\r
+                DepexStack.append(eval(Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexStack.pop())))\r
+                DepexList.append(Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexList.pop()))\r
+            elif Item == 0x06:\r
+                DepexStack.append(True)\r
+                DepexList.append('TRUE')\r
+                DepexString = DepexString + 'TRUE' + ' '\r
+            elif Item == 0x07:\r
+                DepexStack.append(False)\r
+                DepexList.append('False')\r
+                DepexString = DepexString + 'FALSE' + ' '\r
+            elif Item == 0x08:\r
+                if Index != len(Depex.Expression) - 1:\r
+                    CouldBeLoaded = False\r
+                else:\r
+                    CouldBeLoaded = DepexStack.pop()\r
+            else:\r
+                CouldBeLoaded = False\r
+        if DepexList != []:\r
+            DepexString = DepexList[0].strip()\r
+        return (CouldBeLoaded, DepexString, FileDepex)\r
+\r
+    def Dispatch(self, Db = None):\r
+        if Db is None:\r
+            return False\r
+        self.UnDispatchedFfsDict = copy.copy(self.FfsDict)\r
+        # Find PeiCore, DexCore, PeiPriori, DxePriori first\r
+        FfsSecCoreGuid = None\r
+        FfsPeiCoreGuid = None\r
+        FfsDxeCoreGuid = None\r
+        FfsPeiPrioriGuid = None\r
+        FfsDxePrioriGuid = None\r
+        for FfsID in self.UnDispatchedFfsDict:\r
+            Ffs = self.UnDispatchedFfsDict[FfsID]\r
+            if Ffs.Type == 0x03:\r
+                FfsSecCoreGuid = FfsID\r
+                continue\r
+            if Ffs.Type == 0x04:\r
+                FfsPeiCoreGuid = FfsID\r
+                continue\r
+            if Ffs.Type == 0x05:\r
+                FfsDxeCoreGuid = FfsID\r
+                continue\r
+            if Ffs.Guid.lower() == gPeiAprioriFileNameGuid:\r
+                FfsPeiPrioriGuid = FfsID\r
+                continue\r
+            if Ffs.Guid.lower() == gAprioriGuid:\r
+                FfsDxePrioriGuid = FfsID\r
+                continue\r
+\r
+        # Parse SEC_CORE first\r
+        if FfsSecCoreGuid is not None:\r
+            self.OrderedFfsDict[FfsSecCoreGuid] = self.UnDispatchedFfsDict.pop(FfsSecCoreGuid)\r
+            self.LoadPpi(Db, FfsSecCoreGuid)\r
+\r
+        # Parse PEI first\r
+        if FfsPeiCoreGuid is not None:\r
+            self.OrderedFfsDict[FfsPeiCoreGuid] = self.UnDispatchedFfsDict.pop(FfsPeiCoreGuid)\r
+            self.LoadPpi(Db, FfsPeiCoreGuid)\r
+            if FfsPeiPrioriGuid is not None:\r
+                # Load PEIM described in priori file\r
+                FfsPeiPriori = self.UnDispatchedFfsDict.pop(FfsPeiPrioriGuid)\r
+                if len(FfsPeiPriori.Sections) == 1:\r
+                    Section = FfsPeiPriori.Sections.popitem()[1]\r
+                    if Section.Type == 0x19:\r
+                        GuidStruct = struct.Struct('1I2H8B')\r
+                        Start = 4\r
+                        while len(Section) > Start:\r
+                            Guid = GuidStruct.unpack_from(Section[Start : Start + 16])\r
+                            GuidString = gGuidStringFormat % Guid\r
+                            Start = Start + 16\r
+                            if GuidString in self.UnDispatchedFfsDict:\r
+                                self.OrderedFfsDict[GuidString] = self.UnDispatchedFfsDict.pop(GuidString)\r
+                                self.LoadPpi(Db, GuidString)\r
+        self.DisPatchPei(Db)\r
+\r
+        # Parse DXE then\r
+        if FfsDxeCoreGuid is not None:\r
+            self.OrderedFfsDict[FfsDxeCoreGuid] = self.UnDispatchedFfsDict.pop(FfsDxeCoreGuid)\r
+            self.LoadProtocol(Db, FfsDxeCoreGuid)\r
+            if FfsDxePrioriGuid is not None:\r
+                # Load PEIM described in priori file\r
+                FfsDxePriori = self.UnDispatchedFfsDict.pop(FfsDxePrioriGuid)\r
+                if len(FfsDxePriori.Sections) == 1:\r
+                    Section = FfsDxePriori.Sections.popitem()[1]\r
+                    if Section.Type == 0x19:\r
+                        GuidStruct = struct.Struct('1I2H8B')\r
+                        Start = 4\r
+                        while len(Section) > Start:\r
+                            Guid = GuidStruct.unpack_from(Section[Start : Start + 16])\r
+                            GuidString = gGuidStringFormat % Guid\r
+                            Start = Start + 16\r
+                            if GuidString in self.UnDispatchedFfsDict:\r
+                                self.OrderedFfsDict[GuidString] = self.UnDispatchedFfsDict.pop(GuidString)\r
+                                self.LoadProtocol(Db, GuidString)\r
+        self.DisPatchDxe(Db)\r
+\r
+    def LoadProtocol(self, Db, ModuleGuid):\r
+        SqlCommand = """select GuidValue from Report\r
+                        where SourceFileFullPath in\r
+                        (select Value1 from Inf where BelongsToFile =\r
+                        (select BelongsToFile from Inf\r
+                        where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s)\r
+                        and Model = %s)\r
+                        and ItemType = 'Protocol' and ItemMode = 'Produced'""" \\r
+                        % (ModuleGuid, 5001, 3007)\r
+        RecordSet = Db.TblReport.Exec(SqlCommand)\r
+        for Record in RecordSet:\r
+            SqlCommand = """select Value2 from Inf where BelongsToFile =\r
+                            (select DISTINCT BelongsToFile from Inf\r
+                            where Value1 =\r
+                            (select SourceFileFullPath from Report\r
+                            where GuidValue like '%s' and ItemMode = 'Callback'))\r
+                            and Value1 = 'FILE_GUID'""" % Record[0]\r
+            CallBackSet = Db.TblReport.Exec(SqlCommand)\r
+            if CallBackSet != []:\r
+                EotGlobalData.gProtocolList[Record[0].lower()] = ModuleGuid\r
+            else:\r
+                EotGlobalData.gProtocolList[Record[0].lower()] = ModuleGuid\r
+\r
+    def LoadPpi(self, Db, ModuleGuid):\r
+        SqlCommand = """select GuidValue from Report\r
+                        where SourceFileFullPath in\r
+                        (select Value1 from Inf where BelongsToFile =\r
+                        (select BelongsToFile from Inf\r
+                        where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s)\r
+                        and Model = %s)\r
+                        and ItemType = 'Ppi' and ItemMode = 'Produced'""" \\r
+                        % (ModuleGuid, 5001, 3007)\r
+        RecordSet = Db.TblReport.Exec(SqlCommand)\r
+        for Record in RecordSet:\r
+            EotGlobalData.gPpiList[Record[0].lower()] = ModuleGuid\r
+\r
+    def DisPatchDxe(self, Db):\r
+        IsInstalled = False\r
+        ScheduleList = sdict()\r
+        for FfsID in self.UnDispatchedFfsDict:\r
+            CouldBeLoaded = False\r
+            DepexString = ''\r
+            FileDepex = None\r
+            Ffs = self.UnDispatchedFfsDict[FfsID]\r
+            if Ffs.Type == 0x07:\r
+                # Get Depex\r
+                IsFoundDepex = False\r
+                for Section in Ffs.Sections.values():\r
+                    # Find Depex\r
+                    if Section.Type == 0x13:\r
+                        IsFoundDepex = True\r
+                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(Section._SubImages[4], 'Protocol')\r
+                        break\r
+                    if Section.Type == 0x01:\r
+                        CompressSections = Section._SubImages[4]\r
+                        for CompressSection in CompressSections.Sections:\r
+                            if CompressSection.Type == 0x13:\r
+                                IsFoundDepex = True\r
+                                CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(CompressSection._SubImages[4], 'Protocol')\r
+                                break\r
+                            if CompressSection.Type == 0x02:\r
+                                NewSections = CompressSection._SubImages[4]\r
+                                for NewSection in NewSections.Sections:\r
+                                    if NewSection.Type == 0x13:\r
+                                        IsFoundDepex = True\r
+                                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(NewSection._SubImages[4], 'Protocol')\r
+                                        break\r
+\r
+                # Not find Depex\r
+                if not IsFoundDepex:\r
+                    CouldBeLoaded = self.CheckArchProtocol()\r
+                    DepexString = ''\r
+                    FileDepex = None\r
+\r
+                # Append New Ffs\r
+                if CouldBeLoaded:\r
+                    IsInstalled = True\r
+                    NewFfs = self.UnDispatchedFfsDict.pop(FfsID)\r
+                    NewFfs.Depex = DepexString\r
+                    if FileDepex is not None:\r
+                        ScheduleList.insert(FileDepex[1], FfsID, NewFfs, FileDepex[0])\r
+                    else:\r
+                        ScheduleList[FfsID] = NewFfs\r
+                else:\r
+                    self.UnDispatchedFfsDict[FfsID].Depex = DepexString\r
+\r
+        for FfsID in ScheduleList:\r
+            NewFfs = ScheduleList.pop(FfsID)\r
+            FfsName = 'UnKnown'\r
+            self.OrderedFfsDict[FfsID] = NewFfs\r
+            self.LoadProtocol(Db, FfsID)\r
+\r
+            SqlCommand = """select Value2 from Inf\r
+                            where BelongsToFile = (select BelongsToFile from Inf where Value1 = 'FILE_GUID' and lower(Value2) = lower('%s') and Model = %s)\r
+                            and Model = %s and Value1='BASE_NAME'""" % (FfsID, 5001, 5001)\r
+            RecordSet = Db.TblReport.Exec(SqlCommand)\r
+            if RecordSet != []:\r
+                FfsName = RecordSet[0][0]\r
+        if IsInstalled:\r
+            self.DisPatchDxe(Db)\r
+\r
+    def DisPatchPei(self, Db):\r
+        IsInstalled = False\r
+        for FfsID in self.UnDispatchedFfsDict:\r
+            CouldBeLoaded = True\r
+            DepexString = ''\r
+            FileDepex = None\r
+            Ffs = self.UnDispatchedFfsDict[FfsID]\r
+            if Ffs.Type == 0x06 or Ffs.Type == 0x08:\r
+                # Get Depex\r
+                for Section in Ffs.Sections.values():\r
+                    if Section.Type == 0x1B:\r
+                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(Section._SubImages[4], 'Ppi')\r
+                        break\r
+\r
+                    if Section.Type == 0x01:\r
+                        CompressSections = Section._SubImages[4]\r
+                        for CompressSection in CompressSections.Sections:\r
+                            if CompressSection.Type == 0x1B:\r
+                                CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(CompressSection._SubImages[4], 'Ppi')\r
+                                break\r
+                            if CompressSection.Type == 0x02:\r
+                                NewSections = CompressSection._SubImages[4]\r
+                                for NewSection in NewSections.Sections:\r
+                                    if NewSection.Type == 0x1B:\r
+                                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(NewSection._SubImages[4], 'Ppi')\r
+                                        break\r
+\r
+                # Append New Ffs\r
+                if CouldBeLoaded:\r
+                    IsInstalled = True\r
+                    NewFfs = self.UnDispatchedFfsDict.pop(FfsID)\r
+                    NewFfs.Depex = DepexString\r
+                    self.OrderedFfsDict[FfsID] = NewFfs\r
+                    self.LoadPpi(Db, FfsID)\r
+                else:\r
+                    self.UnDispatchedFfsDict[FfsID].Depex = DepexString\r
+\r
+        if IsInstalled:\r
+            self.DisPatchPei(Db)\r
+\r
+    def __str__(self):\r
+        global gIndention\r
+        gIndention += 4\r
+        FvInfo = '\n' + ' ' * gIndention\r
+        FvInfo +=  "[FV:%s] file_system=%s size=%x checksum=%s\n" % (self.Name, self.FileSystemGuid, self.Size, self.Checksum)\r
+        FfsInfo = "\n".join([str(self.FfsDict[FfsId]) for FfsId in self.FfsDict])\r
+        gIndention -= 4\r
+        return FvInfo + FfsInfo\r
+\r
+    def _Unpack(self):\r
+        Size = self._LENGTH_.unpack_from(self._BUF_, self._OFF_)[0]\r
+        self.empty()\r
+        self.extend(self._BUF_[self._OFF_:self._OFF_+Size])\r
+\r
+        # traverse the FFS\r
+        EndOfFv = Size\r
+        FfsStartAddress = self.HeaderSize\r
+        LastFfsObj = None\r
+        while FfsStartAddress < EndOfFv:\r
+            FfsObj = Ffs()\r
+            FfsObj.frombuffer(self, FfsStartAddress)\r
+            FfsId = repr(FfsObj)\r
+            if ((self.Attributes & 0x00000800) != 0 and len(FfsObj) == 0xFFFFFF) \\r
+                or ((self.Attributes & 0x00000800) == 0 and len(FfsObj) == 0):\r
+                if LastFfsObj is not None:\r
+                    LastFfsObj.FreeSpace = EndOfFv - LastFfsObj._OFF_ - len(LastFfsObj)\r
+            else:\r
+                if FfsId in self.FfsDict:\r
+                    EdkLogger.error("FV", 0, "Duplicate GUID in FFS",\r
+                                    ExtraData="\t%s @ %s\n\t%s @ %s" \\r
+                                    % (FfsObj.Guid, FfsObj.Offset,\r
+                                       self.FfsDict[FfsId].Guid, self.FfsDict[FfsId].Offset))\r
+                self.FfsDict[FfsId] = FfsObj\r
+                if LastFfsObj is not None:\r
+                    LastFfsObj.FreeSpace = FfsStartAddress - LastFfsObj._OFF_ - len(LastFfsObj)\r
+\r
+            FfsStartAddress += len(FfsObj)\r
+            #\r
+            # align to next 8-byte aligned address: A = (A + 8 - 1) & (~(8 - 1))\r
+            # The next FFS must be at the latest next 8-byte aligned address\r
+            #\r
+            FfsStartAddress = (FfsStartAddress + 7) & (~7)\r
+            LastFfsObj = FfsObj\r
+\r
+    def _GetAttributes(self):\r
+        return self.GetField(self._ATTR_, 0)[0]\r
+\r
+    def _GetSize(self):\r
+        return self.GetField(self._LENGTH_, 0)[0]\r
+\r
+    def _GetChecksum(self):\r
+        return self.GetField(self._CHECKSUM_, 0)[0]\r
+\r
+    def _GetHeaderLength(self):\r
+        return self.GetField(self._HLEN_, 0)[0]\r
+\r
+    def _GetFileSystemGuid(self):\r
+        return gGuidStringFormat % self.GetField(self._GUID_, 0)\r
+\r
+    Attributes = property(_GetAttributes)\r
+    Size = property(_GetSize)\r
+    Checksum = property(_GetChecksum)\r
+    HeaderSize = property(_GetHeaderLength)\r
+    FileSystemGuid = property(_GetFileSystemGuid)\r
+\r
+## GuidDefinedImage() class\r
+#\r
+#  A class for GUID Defined Image\r
+#\r
+class GuidDefinedImage(Image):\r
+    _HEADER_ = struct.Struct("1I2H8B 1H 1H")\r
+    _HEADER_SIZE_ = _HEADER_.size\r
+\r
+    _GUID_          = struct.Struct("1I2H8B")\r
+    _DATA_OFFSET_   = struct.Struct("16x 1H")\r
+    _ATTR_          = struct.Struct("18x 1H")\r
+\r
+    CRC32_GUID          = "FC1BCDB0-7D31-49AA-936A-A4600D9DD083"\r
+    TIANO_COMPRESS_GUID = 'A31280AD-481E-41B6-95E8-127F4C984779'\r
+    LZMA_COMPRESS_GUID  = 'EE4E5898-3914-4259-9D6E-DC7BD79403CF'\r
+\r
+    def __init__(self, SectionDefinitionGuid=None, DataOffset=None, Attributes=None, Data=None):\r
+        Image.__init__(self)\r
+        if SectionDefinitionGuid is not None:\r
+            self.SectionDefinitionGuid = SectionDefinitionGuid\r
+        if DataOffset is not None:\r
+            self.DataOffset = DataOffset\r
+        if Attributes is not None:\r
+            self.Attributes = Attributes\r
+        if Data is not None:\r
+            self.Data = Data\r
+\r
+    def __str__(self):\r
+        S = "guid=%s" % (gGuidStringFormat % self.SectionDefinitionGuid)\r
+        for Sec in self.Sections:\r
+            S += "\n" + str(Sec)\r
+        return S\r
+\r
+    def _Unpack(self):\r
+        # keep header in this Image object\r
+        self.empty()\r
+        self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_])\r
+        return len(self)\r
+\r
+    def _SetAttribute(self, Attribute):\r
+        self.SetField(self._ATTR_, 0, Attribute)\r
+\r
+    def _GetAttribute(self):\r
+        return self.GetField(self._ATTR_)[0]\r
+\r
+    def _SetGuid(self, Guid):\r
+        self.SetField(self._GUID_, 0, Guid)\r
+\r
+    def _GetGuid(self):\r
+        return self.GetField(self._GUID_)\r
+\r
+    def _SetDataOffset(self, Offset):\r
+        self.SetField(self._DATA_OFFSET_, 0, Offset)\r
+\r
+    def _GetDataOffset(self):\r
+        return self.GetField(self._DATA_OFFSET_)[0]\r
+\r
+    def _GetSections(self):\r
+        SectionList = []\r
+        Guid = gGuidStringFormat % self.SectionDefinitionGuid\r
+        if Guid == self.CRC32_GUID:\r
+            # skip the CRC32 value, we don't do CRC32 verification here\r
+            Offset = self.DataOffset - 4\r
+            while Offset < len(self):\r
+                Sec = Section()\r
+                try:\r
+                    Sec.frombuffer(self, Offset)\r
+                    Offset += Sec.Size\r
+                    # the section is aligned to 4-byte boundary\r
+                    Offset = (Offset + 3) & (~3)\r
+                except:\r
+                    break\r
+                SectionList.append(Sec)\r
+        elif Guid == self.TIANO_COMPRESS_GUID:\r
+            try:\r
+                from . import EfiCompressor\r
+                # skip the header\r
+                Offset = self.DataOffset - 4\r
+                TmpData = EfiCompressor.FrameworkDecompress(self[Offset:], len(self)-Offset)\r
+                DecData = array('B')\r
+                DecData.fromstring(TmpData)\r
+                Offset = 0\r
+                while Offset < len(DecData):\r
+                    Sec = Section()\r
+                    try:\r
+                        Sec.frombuffer(DecData, Offset)\r
+                        Offset += Sec.Size\r
+                        # the section is aligned to 4-byte boundary\r
+                        Offset = (Offset + 3) & (~3)\r
+                    except:\r
+                        break\r
+                    SectionList.append(Sec)\r
+            except:\r
+                pass\r
+        elif Guid == self.LZMA_COMPRESS_GUID:\r
+            try:\r
+                from . import LzmaCompressor\r
+                # skip the header\r
+                Offset = self.DataOffset - 4\r
+                TmpData = LzmaCompressor.LzmaDecompress(self[Offset:], len(self)-Offset)\r
+                DecData = array('B')\r
+                DecData.fromstring(TmpData)\r
+                Offset = 0\r
+                while Offset < len(DecData):\r
+                    Sec = Section()\r
+                    try:\r
+                        Sec.frombuffer(DecData, Offset)\r
+                        Offset += Sec.Size\r
+                        # the section is aligned to 4-byte boundary\r
+                        Offset = (Offset + 3) & (~3)\r
+                    except:\r
+                        break\r
+                    SectionList.append(Sec)\r
+            except:\r
+                pass\r
+\r
+        return SectionList\r
+\r
+    Attributes = property(_GetAttribute, _SetAttribute)\r
+    SectionDefinitionGuid = property(_GetGuid, _SetGuid)\r
+    DataOffset = property(_GetDataOffset, _SetDataOffset)\r
+    Sections = property(_GetSections)\r
+\r
+## Section() class\r
+#\r
+#  A class for Section\r
+#\r
+class Section(Image):\r
+    _TypeName = {\r
+        0x00    :   "<unknown>",\r
+        0x01    :   "COMPRESSION",\r
+        0x02    :   "GUID_DEFINED",\r
+        0x10    :   "PE32",\r
+        0x11    :   "PIC",\r
+        0x12    :   "TE",\r
+        0x13    :   "DXE_DEPEX",\r
+        0x14    :   "VERSION",\r
+        0x15    :   "USER_INTERFACE",\r
+        0x16    :   "COMPATIBILITY16",\r
+        0x17    :   "FIRMWARE_VOLUME_IMAGE",\r
+        0x18    :   "FREEFORM_SUBTYPE_GUID",\r
+        0x19    :   "RAW",\r
+        0x1B    :   "PEI_DEPEX"\r
+    }\r
+\r
+    _SectionSubImages = {\r
+        0x01    :   CompressedImage,\r
+        0x02    :   GuidDefinedImage,\r
+        0x17    :   FirmwareVolume,\r
+        0x13    :   Depex,\r
+        0x1B    :   Depex,\r
+        0x15    :   Ui\r
+    }\r
+\r
+    # Size = 3-byte\r
+    # Type = 1-byte\r
+    _HEADER_ = struct.Struct("3B 1B")\r
+    _HEADER_SIZE_ = _HEADER_.size\r
+\r
+    # SubTypeGuid\r
+    # _FREE_FORM_SUBTYPE_GUID_HEADER_ = struct.Struct("1I2H8B")\r
+    _SIZE_          = struct.Struct("3B")\r
+    _TYPE_          = struct.Struct("3x 1B")\r
+\r
+    def __init__(self, Type=None, Size=None):\r
+        Image.__init__(self)\r
+        self._Alignment = 1\r
+        if Type is not None:\r
+            self.Type = Type\r
+        if Size is not None:\r
+            self.Size = Size\r
+\r
+    def __str__(self):\r
+        global gIndention\r
+        gIndention += 4\r
+        SectionInfo = ' ' * gIndention\r
+        if self.Type in self._TypeName:\r
+            SectionInfo += "[SECTION:%s] offset=%x size=%x" % (self._TypeName[self.Type], self._OFF_, self.Size)\r
+        else:\r
+            SectionInfo += "[SECTION:%x<unknown>] offset=%x size=%x " % (self.Type, self._OFF_, self.Size)\r
+        for Offset in self._SubImages:\r
+            SectionInfo += ", " + str(self._SubImages[Offset])\r
+        gIndention -= 4\r
+        return SectionInfo\r
+\r
+    def _Unpack(self):\r
+        self.empty()\r
+        Type, = self._TYPE_.unpack_from(self._BUF_, self._OFF_)\r
+        Size1, Size2, Size3 = self._SIZE_.unpack_from(self._BUF_, self._OFF_)\r
+        Size = Size1 + (Size2 << 8) + (Size3 << 16)\r
+\r
+        if Type not in self._SectionSubImages:\r
+            # no need to extract sub-image, keep all in this Image object\r
+            self.extend(self._BUF_[self._OFF_ : self._OFF_ + Size])\r
+        else:\r
+            # keep header in this Image object\r
+            self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._HEADER_SIZE_])\r
+            #\r
+            # use new Image object to represent payload, which may be another kind\r
+            # of image such as PE32\r
+            #\r
+            PayloadOffset = self._HEADER_SIZE_\r
+            PayloadLen = self.Size - self._HEADER_SIZE_\r
+            Payload = self._SectionSubImages[self.Type]()\r
+            Payload.frombuffer(self._BUF_, self._OFF_ + self._HEADER_SIZE_, PayloadLen)\r
+            self._SubImages[PayloadOffset] = Payload\r
+\r
+        return Size\r
+\r
+    def _SetSize(self, Size):\r
+        Size1 = Size & 0xFF\r
+        Size2 = (Size & 0xFF00) >> 8\r
+        Size3 = (Size & 0xFF0000) >> 16\r
+        self.SetField(self._SIZE_, 0, Size1, Size2, Size3)\r
+\r
+    def _GetSize(self):\r
+        Size1, Size2, Size3 = self.GetField(self._SIZE_)\r
+        return Size1 + (Size2 << 8) + (Size3 << 16)\r
+\r
+    def _SetType(self, Type):\r
+        self.SetField(self._TYPE_, 0, Type)\r
+\r
+    def _GetType(self):\r
+        return self.GetField(self._TYPE_)[0]\r
+\r
+    def _GetAlignment(self):\r
+        return self._Alignment\r
+\r
+    def _SetAlignment(self, Alignment):\r
+        self._Alignment = Alignment\r
+        AlignmentMask = Alignment - 1\r
+        # section alignment is actually for payload, so we need to add header size\r
+        PayloadOffset = self._OFF_ + self._HEADER_SIZE_\r
+        if (PayloadOffset & (~AlignmentMask)) == 0:\r
+            return\r
+        NewOffset = (PayloadOffset + AlignmentMask) & (~AlignmentMask)\r
+        while (NewOffset - PayloadOffset) < self._HEADER_SIZE_:\r
+            NewOffset += self._Alignment\r
+\r
+    def tofile(self, f):\r
+        self.Size = len(self)\r
+        Image.tofile(self, f)\r
+        for Offset in self._SubImages:\r
+            self._SubImages[Offset].tofile(f)\r
+\r
+    Type = property(_GetType, _SetType)\r
+    Size = property(_GetSize, _SetSize)\r
+    Alignment = property(_GetAlignment, _SetAlignment)\r
+\r
+## Ffs() class\r
+#\r
+#  A class for Ffs Section\r
+#\r
+class Ffs(Image):\r
+    _FfsFormat = "24B%(payload_size)sB"\r
+    # skip IntegrityCheck\r
+    _HEADER_ = struct.Struct("1I2H8B 2x 1B 1B 3B 1B")\r
+    _HEADER_SIZE_ = _HEADER_.size\r
+\r
+    _NAME_      = struct.Struct("1I2H8B")\r
+    _INT_CHECK_ = struct.Struct("16x 1H")\r
+    _TYPE_      = struct.Struct("18x 1B")\r
+    _ATTR_      = struct.Struct("19x 1B")\r
+    _SIZE_      = struct.Struct("20x 3B")\r
+    _STATE_     = struct.Struct("23x 1B")\r
+\r
+    VTF_GUID = "1BA0062E-C779-4582-8566-336AE8F78F09"\r
+\r
+    FFS_ATTRIB_FIXED              = 0x04\r
+    FFS_ATTRIB_DATA_ALIGNMENT     = 0x38\r
+    FFS_ATTRIB_CHECKSUM           = 0x40\r
+\r
+    _TypeName = {\r
+        0x00    :   "<unknown>",\r
+        0x01    :   "RAW",\r
+        0x02    :   "FREEFORM",\r
+        0x03    :   "SECURITY_CORE",\r
+        0x04    :   "PEI_CORE",\r
+        0x05    :   "DXE_CORE",\r
+        0x06    :   "PEIM",\r
+        0x07    :   "DRIVER",\r
+        0x08    :   "COMBINED_PEIM_DRIVER",\r
+        0x09    :   "APPLICATION",\r
+        0x0A    :   "SMM",\r
+        0x0B    :   "FIRMWARE_VOLUME_IMAGE",\r
+        0x0C    :   "COMBINED_SMM_DXE",\r
+        0x0D    :   "SMM_CORE",\r
+        0x0E    :   "MM_STANDALONE",\r
+        0x0F    :   "MM_CORE_STANDALONE",\r
+        0xc0    :   "OEM_MIN",\r
+        0xdf    :   "OEM_MAX",\r
+        0xe0    :   "DEBUG_MIN",\r
+        0xef    :   "DEBUG_MAX",\r
+        0xf0    :   "FFS_MIN",\r
+        0xff    :   "FFS_MAX",\r
+        0xf0    :   "FFS_PAD",\r
+    }\r
+\r
+    def __init__(self):\r
+        Image.__init__(self)\r
+        self.FreeSpace = 0\r
+\r
+        self.Sections = sdict()\r
+        self.Depex = ''\r
+\r
+        self.__ID__ = None\r
+\r
+    def __str__(self):\r
+        global gIndention\r
+        gIndention += 4\r
+        Indention = ' ' * gIndention\r
+        FfsInfo = Indention\r
+        FfsInfo +=  "[FFS:%s] offset=%x size=%x guid=%s free_space=%x alignment=%s\n" % \\r
+                    (Ffs._TypeName[self.Type], self._OFF_, self.Size, self.Guid, self.FreeSpace, self.Alignment)\r
+        SectionInfo = '\n'.join([str(self.Sections[Offset]) for Offset in self.Sections])\r
+        gIndention -= 4\r
+        return FfsInfo + SectionInfo + "\n"\r
+\r
+    def __len__(self):\r
+        return self.Size\r
+\r
+    def __repr__(self):\r
+        return self.__ID__\r
+\r
+    def _Unpack(self):\r
+        Size1, Size2, Size3 = self._SIZE_.unpack_from(self._BUF_, self._OFF_)\r
+        Size = Size1 + (Size2 << 8) + (Size3 << 16)\r
+        self.empty()\r
+        self.extend(self._BUF_[self._OFF_ : self._OFF_ + Size])\r
+\r
+        # Pad FFS may use the same GUID. We need to avoid it.\r
+        if self.Type == 0xf0:\r
+            self.__ID__ = str(uuid.uuid1()).upper()\r
+        else:\r
+            self.__ID__ = self.Guid\r
+\r
+        # Traverse the SECTION. RAW and PAD do not have sections\r
+        if self.Type not in [0xf0, 0x01] and Size > 0 and Size < 0xFFFFFF:\r
+            EndOfFfs = Size\r
+            SectionStartAddress = self._HEADER_SIZE_\r
+            while SectionStartAddress < EndOfFfs:\r
+                SectionObj = Section()\r
+                SectionObj.frombuffer(self, SectionStartAddress)\r
+                #f = open(repr(SectionObj), 'wb')\r
+                #SectionObj.Size = 0\r
+                #SectionObj.tofile(f)\r
+                #f.close()\r
+                self.Sections[SectionStartAddress] = SectionObj\r
+                SectionStartAddress += len(SectionObj)\r
+                SectionStartAddress = (SectionStartAddress + 3) & (~3)\r
+\r
+    def Pack(self):\r
+        pass\r
+\r
+    def SetFreeSpace(self, Size):\r
+        self.FreeSpace = Size\r
+\r
+    def _GetGuid(self):\r
+        return gGuidStringFormat % self.Name\r
+\r
+    def _SetName(self, Value):\r
+        # Guid1, Guid2, Guid3, Guid4, Guid5, Guid6, Guid7, Guid8, Guid9, Guid10, Guid11\r
+        self.SetField(self._NAME_, 0, Value)\r
+\r
+    def _GetName(self):\r
+        # Guid1, Guid2, Guid3, Guid4, Guid5, Guid6, Guid7, Guid8, Guid9, Guid10, Guid11\r
+        return self.GetField(self._NAME_)\r
+\r
+    def _SetSize(self, Size):\r
+        Size1 = Size & 0xFF\r
+        Size2 = (Size & 0xFF00) >> 8\r
+        Size3 = (Size & 0xFF0000) >> 16\r
+        self.SetField(self._SIZE_, 0, Size1, Size2, Size3)\r
+\r
+    def _GetSize(self):\r
+        Size1, Size2, Size3 = self.GetField(self._SIZE_)\r
+        return Size1 + (Size2 << 8) + (Size3 << 16)\r
+\r
+    def _SetType(self, Type):\r
+        self.SetField(self._TYPE_, 0, Type)\r
+\r
+    def _GetType(self):\r
+        return self.GetField(self._TYPE_)[0]\r
+\r
+    def _SetAttributes(self, Value):\r
+        self.SetField(self._ATTR_, 0, Value)\r
+\r
+    def _GetAttributes(self):\r
+        return self.GetField(self._ATTR_)[0]\r
+\r
+    def _GetFixed(self):\r
+        if (self.Attributes & self.FFS_ATTRIB_FIXED) != 0:\r
+            return True\r
+        return False\r
+\r
+    def _GetCheckSum(self):\r
+        if (self.Attributes & self.FFS_ATTRIB_CHECKSUM) != 0:\r
+            return True\r
+        return False\r
+\r
+    def _GetAlignment(self):\r
+        return (self.Attributes & self.FFS_ATTRIB_DATA_ALIGNMENT) >> 3\r
+\r
+    def _SetState(self, Value):\r
+        self.SetField(self._STATE_, 0, Value)\r
+\r
+    def _GetState(self):\r
+        return self.GetField(self._STATE_)[0]\r
+\r
+    Name = property(_GetName, _SetName)\r
+    Guid = property(_GetGuid)\r
+    Type = property(_GetType, _SetType)\r
+    Size = property(_GetSize, _SetSize)\r
+    Attributes = property(_GetAttributes, _SetAttributes)\r
+    Fixed = property(_GetFixed)\r
+    Checksum = property(_GetCheckSum)\r
+    Alignment = property(_GetAlignment)\r
+    State = property(_GetState, _SetState)\r
+\r
+## FirmwareVolume() class\r
+#\r
+#  A class for Firmware Volume\r
+#\r
+class FirmwareVolume(Image):\r
+    # Read FvLength, Attributes, HeaderLength, Checksum\r
+    _HEADER_ = struct.Struct("16x 1I2H8B 1Q 4x 1I 1H 1H")\r
+    _HEADER_SIZE_ = _HEADER_.size\r
+\r
+    _FfsGuid = "8C8CE578-8A3D-4F1C-9935-896185C32DD3"\r
+\r
+    _GUID_      = struct.Struct("16x 1I2H8B")\r
+    _LENGTH_    = struct.Struct("16x 16x 1Q")\r
+    _SIG_       = struct.Struct("16x 16x 8x 1I")\r
+    _ATTR_      = struct.Struct("16x 16x 8x 4x 1I")\r
+    _HLEN_      = struct.Struct("16x 16x 8x 4x 4x 1H")\r
+    _CHECKSUM_  = struct.Struct("16x 16x 8x 4x 4x 2x 1H")\r
+\r
+    def __init__(self, Name=''):\r
+        Image.__init__(self)\r
+        self.Name = Name\r
+        self.FfsDict = sdict()\r
+        self.OrderedFfsDict = sdict()\r
+        self.UnDispatchedFfsDict = sdict()\r
+        self.ProtocolList = sdict()\r
+\r
+    def CheckArchProtocol(self):\r
+        for Item in EotGlobalData.gArchProtocolGuids:\r
+            if Item.lower() not in EotGlobalData.gProtocolList:\r
+                return False\r
+        return True\r
+\r
+    def ParseDepex(self, Depex, Type):\r
+        List = None\r
+        if Type == 'Ppi':\r
+            List = EotGlobalData.gPpiList\r
+        if Type == 'Protocol':\r
+            List = EotGlobalData.gProtocolList\r
+        DepexStack = []\r
+        DepexList = []\r
+        DepexString = ''\r
+        FileDepex = None\r
+        CouldBeLoaded = True\r
+        for Index in range(0, len(Depex.Expression)):\r
+            Item = Depex.Expression[Index]\r
+            if Item == 0x00:\r
+                Index = Index + 1\r
+                Guid = gGuidStringFormat % Depex.Expression[Index]\r
+                if Guid in self.OrderedFfsDict and Depex.Expression[Index + 1] == 0x08:\r
+                    return (True, 'BEFORE %s' % Guid, [Guid, 'BEFORE'])\r
+            elif Item == 0x01:\r
+                Index = Index + 1\r
+                Guid = gGuidStringFormat % Depex.Expression[Index]\r
+                if Guid in self.OrderedFfsDict and Depex.Expression[Index + 1] == 0x08:\r
+                    return (True, 'AFTER %s' % Guid, [Guid, 'AFTER'])\r
+            elif Item == 0x02:\r
+                Index = Index + 1\r
+                Guid = gGuidStringFormat % Depex.Expression[Index]\r
+                if Guid.lower() in List:\r
+                    DepexStack.append(True)\r
+                    DepexList.append(Guid)\r
+                else:\r
+                    DepexStack.append(False)\r
+                    DepexList.append(Guid)\r
+                continue\r
+            elif Item == 0x03 or Item == 0x04:\r
+                DepexStack.append(eval(str(DepexStack.pop()) + ' ' + Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexStack.pop())))\r
+                DepexList.append(str(DepexList.pop()) + ' ' + Depex._OPCODE_STRING_[Item].upper() + ' ' + str(DepexList.pop()))\r
+            elif Item == 0x05:\r
+                DepexStack.append(eval(Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexStack.pop())))\r
+                DepexList.append(Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexList.pop()))\r
+            elif Item == 0x06:\r
+                DepexStack.append(True)\r
+                DepexList.append('TRUE')\r
+                DepexString = DepexString + 'TRUE' + ' '\r
+            elif Item == 0x07:\r
+                DepexStack.append(False)\r
+                DepexList.append('False')\r
+                DepexString = DepexString + 'FALSE' + ' '\r
+            elif Item == 0x08:\r
+                if Index != len(Depex.Expression) - 1:\r
+                    CouldBeLoaded = False\r
+                else:\r
+                    CouldBeLoaded = DepexStack.pop()\r
+            else:\r
+                CouldBeLoaded = False\r
+        if DepexList != []:\r
+            DepexString = DepexList[0].strip()\r
+        return (CouldBeLoaded, DepexString, FileDepex)\r
+\r
+    def Dispatch(self, Db = None):\r
+        if Db is None:\r
+            return False\r
+        self.UnDispatchedFfsDict = copy.copy(self.FfsDict)\r
+        # Find PeiCore, DexCore, PeiPriori, DxePriori first\r
+        FfsSecCoreGuid = None\r
+        FfsPeiCoreGuid = None\r
+        FfsDxeCoreGuid = None\r
+        FfsPeiPrioriGuid = None\r
+        FfsDxePrioriGuid = None\r
+        for FfsID in self.UnDispatchedFfsDict:\r
+            Ffs = self.UnDispatchedFfsDict[FfsID]\r
+            if Ffs.Type == 0x03:\r
+                FfsSecCoreGuid = FfsID\r
+                continue\r
+            if Ffs.Type == 0x04:\r
+                FfsPeiCoreGuid = FfsID\r
+                continue\r
+            if Ffs.Type == 0x05:\r
+                FfsDxeCoreGuid = FfsID\r
+                continue\r
+            if Ffs.Guid.lower() == gPeiAprioriFileNameGuid:\r
+                FfsPeiPrioriGuid = FfsID\r
+                continue\r
+            if Ffs.Guid.lower() == gAprioriGuid:\r
+                FfsDxePrioriGuid = FfsID\r
+                continue\r
+\r
+        # Parse SEC_CORE first\r
+        if FfsSecCoreGuid is not None:\r
+            self.OrderedFfsDict[FfsSecCoreGuid] = self.UnDispatchedFfsDict.pop(FfsSecCoreGuid)\r
+            self.LoadPpi(Db, FfsSecCoreGuid)\r
+\r
+        # Parse PEI first\r
+        if FfsPeiCoreGuid is not None:\r
+            self.OrderedFfsDict[FfsPeiCoreGuid] = self.UnDispatchedFfsDict.pop(FfsPeiCoreGuid)\r
+            self.LoadPpi(Db, FfsPeiCoreGuid)\r
+            if FfsPeiPrioriGuid is not None:\r
+                # Load PEIM described in priori file\r
+                FfsPeiPriori = self.UnDispatchedFfsDict.pop(FfsPeiPrioriGuid)\r
+                if len(FfsPeiPriori.Sections) == 1:\r
+                    Section = FfsPeiPriori.Sections.popitem()[1]\r
+                    if Section.Type == 0x19:\r
+                        GuidStruct = struct.Struct('1I2H8B')\r
+                        Start = 4\r
+                        while len(Section) > Start:\r
+                            Guid = GuidStruct.unpack_from(Section[Start : Start + 16])\r
+                            GuidString = gGuidStringFormat % Guid\r
+                            Start = Start + 16\r
+                            if GuidString in self.UnDispatchedFfsDict:\r
+                                self.OrderedFfsDict[GuidString] = self.UnDispatchedFfsDict.pop(GuidString)\r
+                                self.LoadPpi(Db, GuidString)\r
+\r
+        self.DisPatchPei(Db)\r
+\r
+        # Parse DXE then\r
+        if FfsDxeCoreGuid is not None:\r
+            self.OrderedFfsDict[FfsDxeCoreGuid] = self.UnDispatchedFfsDict.pop(FfsDxeCoreGuid)\r
+            self.LoadProtocol(Db, FfsDxeCoreGuid)\r
+            if FfsDxePrioriGuid is not None:\r
+                # Load PEIM described in priori file\r
+                FfsDxePriori = self.UnDispatchedFfsDict.pop(FfsDxePrioriGuid)\r
+                if len(FfsDxePriori.Sections) == 1:\r
+                    Section = FfsDxePriori.Sections.popitem()[1]\r
+                    if Section.Type == 0x19:\r
+                        GuidStruct = struct.Struct('1I2H8B')\r
+                        Start = 4\r
+                        while len(Section) > Start:\r
+                            Guid = GuidStruct.unpack_from(Section[Start : Start + 16])\r
+                            GuidString = gGuidStringFormat % Guid\r
+                            Start = Start + 16\r
+                            if GuidString in self.UnDispatchedFfsDict:\r
+                                self.OrderedFfsDict[GuidString] = self.UnDispatchedFfsDict.pop(GuidString)\r
+                                self.LoadProtocol(Db, GuidString)\r
+\r
+        self.DisPatchDxe(Db)\r
+\r
+    def LoadProtocol(self, Db, ModuleGuid):\r
+        SqlCommand = """select GuidValue from Report\r
+                        where SourceFileFullPath in\r
+                        (select Value1 from Inf where BelongsToFile =\r
+                        (select BelongsToFile from Inf\r
+                        where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s)\r
+                        and Model = %s)\r
+                        and ItemType = 'Protocol' and ItemMode = 'Produced'""" \\r
+                        % (ModuleGuid, 5001, 3007)\r
+        RecordSet = Db.TblReport.Exec(SqlCommand)\r
+        for Record in RecordSet:\r
+            SqlCommand = """select Value2 from Inf where BelongsToFile =\r
+                            (select DISTINCT BelongsToFile from Inf\r
+                            where Value1 =\r
+                            (select SourceFileFullPath from Report\r
+                            where GuidValue like '%s' and ItemMode = 'Callback'))\r
+                            and Value1 = 'FILE_GUID'""" % Record[0]\r
+            CallBackSet = Db.TblReport.Exec(SqlCommand)\r
+            if CallBackSet != []:\r
+                EotGlobalData.gProtocolList[Record[0].lower()] = ModuleGuid\r
+            else:\r
+                EotGlobalData.gProtocolList[Record[0].lower()] = ModuleGuid\r
+\r
+    def LoadPpi(self, Db, ModuleGuid):\r
+        SqlCommand = """select GuidValue from Report\r
+                        where SourceFileFullPath in\r
+                        (select Value1 from Inf where BelongsToFile =\r
+                        (select BelongsToFile from Inf\r
+                        where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s)\r
+                        and Model = %s)\r
+                        and ItemType = 'Ppi' and ItemMode = 'Produced'""" \\r
+                        % (ModuleGuid, 5001, 3007)\r
+        RecordSet = Db.TblReport.Exec(SqlCommand)\r
+        for Record in RecordSet:\r
+            EotGlobalData.gPpiList[Record[0].lower()] = ModuleGuid\r
+\r
+    def DisPatchDxe(self, Db):\r
+        IsInstalled = False\r
+        ScheduleList = sdict()\r
+        for FfsID in self.UnDispatchedFfsDict:\r
+            CouldBeLoaded = False\r
+            DepexString = ''\r
+            FileDepex = None\r
+            Ffs = self.UnDispatchedFfsDict[FfsID]\r
+            if Ffs.Type == 0x07:\r
+                # Get Depex\r
+                IsFoundDepex = False\r
+                for Section in Ffs.Sections.values():\r
+                    # Find Depex\r
+                    if Section.Type == 0x13:\r
+                        IsFoundDepex = True\r
+                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(Section._SubImages[4], 'Protocol')\r
+                        break\r
+                    if Section.Type == 0x01:\r
+                        CompressSections = Section._SubImages[4]\r
+                        for CompressSection in CompressSections.Sections:\r
+                            if CompressSection.Type == 0x13:\r
+                                IsFoundDepex = True\r
+                                CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(CompressSection._SubImages[4], 'Protocol')\r
+                                break\r
+                            if CompressSection.Type == 0x02:\r
+                                NewSections = CompressSection._SubImages[4]\r
+                                for NewSection in NewSections.Sections:\r
+                                    if NewSection.Type == 0x13:\r
+                                        IsFoundDepex = True\r
+                                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(NewSection._SubImages[4], 'Protocol')\r
+                                        break\r
+\r
+                # Not find Depex\r
+                if not IsFoundDepex:\r
+                    CouldBeLoaded = self.CheckArchProtocol()\r
+                    DepexString = ''\r
+                    FileDepex = None\r
+\r
+                # Append New Ffs\r
+                if CouldBeLoaded:\r
+                    IsInstalled = True\r
+                    NewFfs = self.UnDispatchedFfsDict.pop(FfsID)\r
+                    NewFfs.Depex = DepexString\r
+                    if FileDepex is not None:\r
+                        ScheduleList.insert(FileDepex[1], FfsID, NewFfs, FileDepex[0])\r
+                    else:\r
+                        ScheduleList[FfsID] = NewFfs\r
+                else:\r
+                    self.UnDispatchedFfsDict[FfsID].Depex = DepexString\r
+\r
+        for FfsID in ScheduleList:\r
+            NewFfs = ScheduleList.pop(FfsID)\r
+            FfsName = 'UnKnown'\r
+            self.OrderedFfsDict[FfsID] = NewFfs\r
+            self.LoadProtocol(Db, FfsID)\r
+\r
+            SqlCommand = """select Value2 from Inf\r
+                            where BelongsToFile = (select BelongsToFile from Inf where Value1 = 'FILE_GUID' and lower(Value2) = lower('%s') and Model = %s)\r
+                            and Model = %s and Value1='BASE_NAME'""" % (FfsID, 5001, 5001)\r
+            RecordSet = Db.TblReport.Exec(SqlCommand)\r
+            if RecordSet != []:\r
+                FfsName = RecordSet[0][0]\r
+\r
+        if IsInstalled:\r
+            self.DisPatchDxe(Db)\r
+\r
+    def DisPatchPei(self, Db):\r
+        IsInstalled = False\r
+        for FfsID in self.UnDispatchedFfsDict:\r
+            CouldBeLoaded = True\r
+            DepexString = ''\r
+            FileDepex = None\r
+            Ffs = self.UnDispatchedFfsDict[FfsID]\r
+            if Ffs.Type == 0x06 or Ffs.Type == 0x08:\r
+                # Get Depex\r
+                for Section in Ffs.Sections.values():\r
+                    if Section.Type == 0x1B:\r
+                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(Section._SubImages[4], 'Ppi')\r
+                        break\r
+                    if Section.Type == 0x01:\r
+                        CompressSections = Section._SubImages[4]\r
+                        for CompressSection in CompressSections.Sections:\r
+                            if CompressSection.Type == 0x1B:\r
+                                CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(CompressSection._SubImages[4], 'Ppi')\r
+                                break\r
+                            if CompressSection.Type == 0x02:\r
+                                NewSections = CompressSection._SubImages[4]\r
+                                for NewSection in NewSections.Sections:\r
+                                    if NewSection.Type == 0x1B:\r
+                                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(NewSection._SubImages[4], 'Ppi')\r
+                                        break\r
+\r
+                # Append New Ffs\r
+                if CouldBeLoaded:\r
+                    IsInstalled = True\r
+                    NewFfs = self.UnDispatchedFfsDict.pop(FfsID)\r
+                    NewFfs.Depex = DepexString\r
+                    self.OrderedFfsDict[FfsID] = NewFfs\r
+                    self.LoadPpi(Db, FfsID)\r
+                else:\r
+                    self.UnDispatchedFfsDict[FfsID].Depex = DepexString\r
+\r
+        if IsInstalled:\r
+            self.DisPatchPei(Db)\r
+\r
+\r
+    def __str__(self):\r
+        global gIndention\r
+        gIndention += 4\r
+        FvInfo = '\n' + ' ' * gIndention\r
+        FvInfo +=  "[FV:%s] file_system=%s size=%x checksum=%s\n" % (self.Name, self.FileSystemGuid, self.Size, self.Checksum)\r
+        FfsInfo = "\n".join([str(self.FfsDict[FfsId]) for FfsId in self.FfsDict])\r
+        gIndention -= 4\r
+        return FvInfo + FfsInfo\r
+\r
+    def _Unpack(self):\r
+        Size = self._LENGTH_.unpack_from(self._BUF_, self._OFF_)[0]\r
+        self.empty()\r
+        self.extend(self._BUF_[self._OFF_:self._OFF_+Size])\r
+\r
+        # traverse the FFS\r
+        EndOfFv = Size\r
+        FfsStartAddress = self.HeaderSize\r
+        LastFfsObj = None\r
+        while FfsStartAddress < EndOfFv:\r
+            FfsObj = Ffs()\r
+            FfsObj.frombuffer(self, FfsStartAddress)\r
+            FfsId = repr(FfsObj)\r
+            if ((self.Attributes & 0x00000800) != 0 and len(FfsObj) == 0xFFFFFF) \\r
+                or ((self.Attributes & 0x00000800) == 0 and len(FfsObj) == 0):\r
+                if LastFfsObj is not None:\r
+                    LastFfsObj.FreeSpace = EndOfFv - LastFfsObj._OFF_ - len(LastFfsObj)\r
+            else:\r
+                if FfsId in self.FfsDict:\r
+                    EdkLogger.error("FV", 0, "Duplicate GUID in FFS",\r
+                                    ExtraData="\t%s @ %s\n\t%s @ %s" \\r
+                                    % (FfsObj.Guid, FfsObj.Offset,\r
+                                       self.FfsDict[FfsId].Guid, self.FfsDict[FfsId].Offset))\r
+                self.FfsDict[FfsId] = FfsObj\r
+                if LastFfsObj is not None:\r
+                    LastFfsObj.FreeSpace = FfsStartAddress - LastFfsObj._OFF_ - len(LastFfsObj)\r
+\r
+            FfsStartAddress += len(FfsObj)\r
+            #\r
+            # align to next 8-byte aligned address: A = (A + 8 - 1) & (~(8 - 1))\r
+            # The next FFS must be at the latest next 8-byte aligned address\r
+            #\r
+            FfsStartAddress = (FfsStartAddress + 7) & (~7)\r
+            LastFfsObj = FfsObj\r
+\r
+    def _GetAttributes(self):\r
+        return self.GetField(self._ATTR_, 0)[0]\r
+\r
+    def _GetSize(self):\r
+        return self.GetField(self._LENGTH_, 0)[0]\r
+\r
+    def _GetChecksum(self):\r
+        return self.GetField(self._CHECKSUM_, 0)[0]\r
+\r
+    def _GetHeaderLength(self):\r
+        return self.GetField(self._HLEN_, 0)[0]\r
+\r
+    def _GetFileSystemGuid(self):\r
+        return gGuidStringFormat % self.GetField(self._GUID_, 0)\r
+\r
+    Attributes = property(_GetAttributes)\r
+    Size = property(_GetSize)\r
+    Checksum = property(_GetChecksum)\r
+    HeaderSize = property(_GetHeaderLength)\r
+    FileSystemGuid = property(_GetFileSystemGuid)\r
+\r
+## MultipleFv() class\r
+#\r
+#  A class for Multiple FV\r
+#\r
+class MultipleFv(FirmwareVolume):\r
+    def __init__(self, FvList):\r
+        FirmwareVolume.__init__(self)\r
+        self.BasicInfo = []\r
+        for FvPath in FvList:\r
+            FvName = os.path.splitext(os.path.split(FvPath)[1])[0]\r
+            Fd = open(FvPath, 'rb')\r
+            Buf = array('B')\r
+            try:\r
+                Buf.fromfile(Fd, os.path.getsize(FvPath))\r
+            except EOFError:\r
+                pass\r
+\r
+            Fv = FirmwareVolume(FvName)\r
+            Fv.frombuffer(Buf, 0, len(Buf))\r
+\r
+            self.BasicInfo.append([Fv.Name, Fv.FileSystemGuid, Fv.Size])\r
+            self.FfsDict.append(Fv.FfsDict)\r
+\r
+## Class Eot\r
+#\r
+# This class is used to define Eot main entrance\r
+#\r
+# @param object:          Inherited from object class\r
+#\r
+class Eot(object):\r
+    ## The constructor\r
+    #\r
+    #   @param  self:      The object pointer\r
+    #\r
+    def __init__(self, CommandLineOption=True, IsInit=True, SourceFileList=None, \\r
+                 IncludeDirList=None, DecFileList=None, GuidList=None, LogFile=None,\r
+                 FvFileList="", MapFileList="", Report='Report.html', Dispatch=None):\r
+        # Version and Copyright\r
+        self.VersionNumber = ("0.02" + " " + gBUILD_VERSION)\r
+        self.Version = "%prog Version " + self.VersionNumber\r
+        self.Copyright = "Copyright (c) 2008 - 2018, Intel Corporation  All rights reserved."\r
+        self.Report = Report\r
+\r
+        self.IsInit = IsInit\r
+        self.SourceFileList = SourceFileList\r
+        self.IncludeDirList = IncludeDirList\r
+        self.DecFileList = DecFileList\r
+        self.GuidList = GuidList\r
+        self.LogFile = LogFile\r
+        self.FvFileList = FvFileList\r
+        self.MapFileList = MapFileList\r
+        self.Dispatch = Dispatch\r
+\r
+        # Check workspace environment\r
+        if "EFI_SOURCE" not in os.environ:\r
+            if "EDK_SOURCE" not in os.environ:\r
+                pass\r
+            else:\r
+                EotGlobalData.gEDK_SOURCE = os.path.normpath(os.getenv("EDK_SOURCE"))\r
+        else:\r
+            EotGlobalData.gEFI_SOURCE = os.path.normpath(os.getenv("EFI_SOURCE"))\r
+            EotGlobalData.gEDK_SOURCE = os.path.join(EotGlobalData.gEFI_SOURCE, 'Edk')\r
+\r
+        if "WORKSPACE" not in os.environ:\r
+            EdkLogger.error("EOT", BuildToolError.ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found",\r
+                            ExtraData="WORKSPACE")\r
+        else:\r
+            EotGlobalData.gWORKSPACE = os.path.normpath(os.getenv("WORKSPACE"))\r
+\r
+        EotGlobalData.gMACRO['WORKSPACE'] = EotGlobalData.gWORKSPACE\r
+        EotGlobalData.gMACRO['EFI_SOURCE'] = EotGlobalData.gEFI_SOURCE\r
+        EotGlobalData.gMACRO['EDK_SOURCE'] = EotGlobalData.gEDK_SOURCE\r
+\r
+        # Parse the options and args\r
+        if CommandLineOption:\r
+            self.ParseOption()\r
+\r
+        if self.FvFileList:\r
+            for FvFile in GetSplitValueList(self.FvFileList, ' '):\r
+                FvFile = os.path.normpath(FvFile)\r
+                if not os.path.isfile(FvFile):\r
+                    EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "Can not find file %s " % FvFile)\r
+                EotGlobalData.gFV_FILE.append(FvFile)\r
+        else:\r
+            EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "The fv file list of target platform was not specified")\r
+\r
+        if self.MapFileList:\r
+            for MapFile in GetSplitValueList(self.MapFileList, ' '):\r
+                MapFile = os.path.normpath(MapFile)\r
+                if not os.path.isfile(MapFile):\r
+                    EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "Can not find file %s " % MapFile)\r
+                EotGlobalData.gMAP_FILE.append(MapFile)\r
+\r
+        # Generate source file list\r
+        self.GenerateSourceFileList(self.SourceFileList, self.IncludeDirList)\r
+\r
+        # Generate guid list of dec file list\r
+        self.ParseDecFile(self.DecFileList)\r
+\r
+        # Generate guid list from GUID list file\r
+        self.ParseGuidList(self.GuidList)\r
+\r
+        # Init Eot database\r
+        EotGlobalData.gDb = Database.Database(Database.DATABASE_PATH)\r
+        EotGlobalData.gDb.InitDatabase(self.IsInit)\r
+\r
+        # Build ECC database\r
+        self.BuildDatabase()\r
+\r
+        # Parse Ppi/Protocol\r
+        self.ParseExecutionOrder()\r
+\r
+        # Merge Identifier tables\r
+        self.GenerateQueryTable()\r
+\r
+        # Generate report database\r
+        self.GenerateReportDatabase()\r
+\r
+        # Load Fv Info\r
+        self.LoadFvInfo()\r
+\r
+        # Load Map Info\r
+        self.LoadMapInfo()\r
+\r
+        # Generate Report\r
+        self.GenerateReport()\r
+\r
+        # Convert log file\r
+        self.ConvertLogFile(self.LogFile)\r
+\r
+        # DONE\r
+        EdkLogger.quiet("EOT FINISHED!")\r
+\r
+        # Close Database\r
+        EotGlobalData.gDb.Close()\r
+\r
+    ## ParseDecFile() method\r
+    #\r
+    #  parse DEC file and get all GUID names with GUID values as {GuidName : GuidValue}\r
+    #  The Dict is stored in EotGlobalData.gGuidDict\r
+    #\r
+    #  @param self: The object pointer\r
+    #  @param DecFileList: A list of all DEC files\r
+    #\r
+    def ParseDecFile(self, DecFileList):\r
+        if DecFileList:\r
+            path = os.path.normpath(DecFileList)\r
+            lfr = open(path, 'rb')\r
+            for line in lfr:\r
+                path = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip()))\r
+                if os.path.exists(path):\r
+                    dfr = open(path, 'rb')\r
+                    for line in dfr:\r
+                        line = CleanString(line)\r
+                        list = line.split('=')\r
+                        if len(list) == 2:\r
+                            EotGlobalData.gGuidDict[list[0].strip()] = GuidStructureStringToGuidString(list[1].strip())\r
+\r
+\r
+    ## ParseGuidList() method\r
+    #\r
+    #  Parse Guid list and get all GUID names with GUID values as {GuidName : GuidValue}\r
+    #  The Dict is stored in EotGlobalData.gGuidDict\r
+    #\r
+    #  @param self: The object pointer\r
+    #  @param GuidList: A list of all GUID and its value\r
+    #\r
+    def ParseGuidList(self, GuidList):\r
+        Path = os.path.join(EotGlobalData.gWORKSPACE, GuidList)\r
+        if os.path.isfile(Path):\r
+            for Line in open(Path):\r
+                (GuidName, GuidValue) = Line.split()\r
+                EotGlobalData.gGuidDict[GuidName] = GuidValue\r
+\r
+    ## ConvertLogFile() method\r
+    #\r
+    #  Parse a real running log file to get real dispatch order\r
+    #  The result is saved to old file name + '.new'\r
+    #\r
+    #  @param self: The object pointer\r
+    #  @param LogFile: A real running log file name\r
+    #\r
+    def ConvertLogFile(self, LogFile):\r
+        newline = []\r
+        lfr = None\r
+        lfw = None\r
+        if LogFile:\r
+            lfr = open(LogFile, 'rb')\r
+            lfw = open(LogFile + '.new', 'wb')\r
+            for line in lfr:\r
+                line = line.strip()\r
+                line = line.replace('.efi', '')\r
+                index = line.find("Loading PEIM at ")\r
+                if index > -1:\r
+                    newline.append(line[index + 55 : ])\r
+                    continue\r
+                index = line.find("Loading driver at ")\r
+                if index > -1:\r
+                    newline.append(line[index + 57 : ])\r
+                    continue\r
+\r
+        for line in newline:\r
+            lfw.write(line + '\r\n')\r
+\r
+        if lfr:\r
+            lfr.close()\r
+        if lfw:\r
+            lfw.close()\r
+\r
+    ## GenerateSourceFileList() method\r
+    #\r
+    #  Generate a list of all source files\r
+    #  1. Search the file list one by one\r
+    #  2. Store inf file name with source file names under it like\r
+    #  { INF file name: [source file1, source file2, ...]}\r
+    #  3. Search the include list to find all .h files\r
+    #  4. Store source file list to EotGlobalData.gSOURCE_FILES\r
+    #  5. Store INF file list to EotGlobalData.gINF_FILES\r
+    #\r
+    #  @param self: The object pointer\r
+    #  @param SourceFileList: A list of all source files\r
+    #  @param IncludeFileList: A list of all include files\r
+    #\r
+    def GenerateSourceFileList(self, SourceFileList, IncludeFileList):\r
+        EdkLogger.quiet("Generating source files list ... ")\r
+        mSourceFileList = []\r
+        mInfFileList = []\r
+        mDecFileList = []\r
+        mFileList = {}\r
+        mCurrentInfFile = ''\r
+        mCurrentSourceFileList = []\r
+\r
+        if SourceFileList:\r
+            sfl = open(SourceFileList, 'rb')\r
+            for line in sfl:\r
+                line = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip()))\r
+                if line[-2:].upper() == '.C' or  line[-2:].upper() == '.H':\r
+                    if line not in mCurrentSourceFileList:\r
+                        mCurrentSourceFileList.append(line)\r
+                        mSourceFileList.append(line)\r
+                        EotGlobalData.gOP_SOURCE_FILES.write('%s\n' % line)\r
+                if line[-4:].upper() == '.INF':\r
+                    if mCurrentInfFile != '':\r
+                        mFileList[mCurrentInfFile] = mCurrentSourceFileList\r
+                        mCurrentSourceFileList = []\r
+                    mCurrentInfFile = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line))\r
+                    EotGlobalData.gOP_INF.write('%s\n' % mCurrentInfFile)\r
+            if mCurrentInfFile not in mFileList:\r
+                mFileList[mCurrentInfFile] = mCurrentSourceFileList\r
+\r
+        # Get all include files from packages\r
+        if IncludeFileList:\r
+            ifl = open(IncludeFileList, 'rb')\r
+            for line in ifl:\r
+                if not line.strip():\r
+                    continue\r
+                newline = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip()))\r
+                for Root, Dirs, Files in os.walk(str(newline)):\r
+                    for File in Files:\r
+                        FullPath = os.path.normpath(os.path.join(Root, File))\r
+                        if FullPath not in mSourceFileList and File[-2:].upper() == '.H':\r
+                            mSourceFileList.append(FullPath)\r
+                            EotGlobalData.gOP_SOURCE_FILES.write('%s\n' % FullPath)\r
+                        if FullPath not in mDecFileList and File.upper().find('.DEC') > -1:\r
+                            mDecFileList.append(FullPath)\r
+\r
+        EotGlobalData.gSOURCE_FILES = mSourceFileList\r
+        EotGlobalData.gOP_SOURCE_FILES.close()\r
+\r
+        EotGlobalData.gINF_FILES = mFileList\r
+        EotGlobalData.gOP_INF.close()\r
+\r
+    ## GenerateReport() method\r
+    #\r
+    #  Generate final HTML report\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    def GenerateReport(self):\r
+        EdkLogger.quiet("Generating report file ... ")\r
+        Rep = Report(self.Report, EotGlobalData.gFV, self.Dispatch)\r
+        Rep.GenerateReport()\r
+\r
+    ## LoadMapInfo() method\r
+    #\r
+    #  Load map files and parse them\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    def LoadMapInfo(self):\r
+        if EotGlobalData.gMAP_FILE != []:\r
+            EdkLogger.quiet("Parsing Map file ... ")\r
+            EotGlobalData.gMap = ParseMapFile(EotGlobalData.gMAP_FILE)\r
+\r
+    ## LoadFvInfo() method\r
+    #\r
+    #  Load FV binary files and parse them\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    def LoadFvInfo(self):\r
+        EdkLogger.quiet("Parsing FV file ... ")\r
+        EotGlobalData.gFV = MultipleFv(EotGlobalData.gFV_FILE)\r
+        EotGlobalData.gFV.Dispatch(EotGlobalData.gDb)\r
+\r
+        for Protocol in EotGlobalData.gProtocolList:\r
+            EotGlobalData.gOP_UN_MATCHED_IN_LIBRARY_CALLING.write('%s\n' %Protocol)\r
+\r
+    ## GenerateReportDatabase() method\r
+    #\r
+    #  Generate data for the information needed by report\r
+    #  1. Update name, macro and value of all found PPI/PROTOCOL GUID\r
+    #  2. Install hard coded PPI/PROTOCOL\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    def GenerateReportDatabase(self):\r
+        EdkLogger.quiet("Generating the cross-reference table of GUID for Ppi/Protocol ... ")\r
+\r
+        # Update Protocol/Ppi Guid\r
+        SqlCommand = """select DISTINCT GuidName from Report"""\r
+        RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
+        for Record in RecordSet:\r
+            GuidName = Record[0]\r
+            GuidMacro = ''\r
+            GuidMacro2 = ''\r
+            GuidValue = ''\r
+\r
+            # Find guid value defined in Dec file\r
+            if GuidName in EotGlobalData.gGuidDict:\r
+                GuidValue = EotGlobalData.gGuidDict[GuidName]\r
+                SqlCommand = """update Report set GuidMacro = '%s', GuidValue = '%s' where GuidName = '%s'""" %(GuidMacro, GuidValue, GuidName)\r
+                EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
+                continue\r
+\r
+            # Search defined Macros for guid name\r
+            SqlCommand ="""select DISTINCT Value, Modifier from Query where Name like '%s'""" % GuidName\r
+            GuidMacroSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
+            # Ignore NULL result\r
+            if not GuidMacroSet:\r
+                continue\r
+            GuidMacro = GuidMacroSet[0][0].strip()\r
+            if not GuidMacro:\r
+                continue\r
+            # Find Guid value of Guid Macro\r
+            SqlCommand ="""select DISTINCT Value from Query2 where Value like '%%%s%%' and Model = %s""" % (GuidMacro, MODEL_IDENTIFIER_MACRO_DEFINE)\r
+            GuidValueSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
+            if GuidValueSet != []:\r
+                GuidValue = GuidValueSet[0][0]\r
+                GuidValue = GuidValue[GuidValue.find(GuidMacro) + len(GuidMacro) :]\r
+                GuidValue = GuidValue.lower().replace('\\', '').replace('\r', '').replace('\n', '').replace('l', '').strip()\r
+                GuidValue = GuidStructureStringToGuidString(GuidValue)\r
+                SqlCommand = """update Report set GuidMacro = '%s', GuidValue = '%s' where GuidName = '%s'""" %(GuidMacro, GuidValue, GuidName)\r
+                EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
+                continue\r
+\r
+        # Update Hard Coded Ppi/Protocol\r
+        SqlCommand = """select DISTINCT GuidValue, ItemType from Report where ModuleID = -2 and ItemMode = 'Produced'"""\r
+        RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
+        for Record in RecordSet:\r
+            if Record[1] == 'Ppi':\r
+                EotGlobalData.gPpiList[Record[0].lower()] = -2\r
+            if Record[1] == 'Protocol':\r
+                EotGlobalData.gProtocolList[Record[0].lower()] = -2\r
+\r
+    ## GenerateQueryTable() method\r
+    #\r
+    #  Generate two tables improve query performance\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    def GenerateQueryTable(self):\r
+        EdkLogger.quiet("Generating temp query table for analysis ... ")\r
+        for Identifier in EotGlobalData.gIdentifierTableList:\r
+            SqlCommand = """insert into Query (Name, Modifier, Value, Model)\r
+                            select Name, Modifier, Value, Model from %s where (Model = %s or Model = %s)""" \\r
+                            % (Identifier[0], MODEL_IDENTIFIER_VARIABLE, MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION)\r
+            EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
+            SqlCommand = """insert into Query2 (Name, Modifier, Value, Model)\r
+                            select Name, Modifier, Value, Model from %s where Model = %s""" \\r
+                            % (Identifier[0], MODEL_IDENTIFIER_MACRO_DEFINE)\r
+            EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
+\r
+    ## ParseExecutionOrder() method\r
+    #\r
+    #  Get final execution order\r
+    #  1. Search all PPI\r
+    #  2. Search all PROTOCOL\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    def ParseExecutionOrder(self):\r
+        EdkLogger.quiet("Searching Ppi/Protocol ... ")\r
+        for Identifier in EotGlobalData.gIdentifierTableList:\r
+            ModuleID, ModuleName, ModuleGuid, SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, Enabled = \\r
+            -1, '', '', -1, '', '', '', '', '', '', '', '', 0\r
+\r
+            SourceFileID = Identifier[0].replace('Identifier', '')\r
+            SourceFileFullPath = Identifier[1]\r
+            Identifier = Identifier[0]\r
+\r
+            # Find Ppis\r
+            ItemMode = 'Produced'\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.InstallPpi', '->InstallPpi', 'PeiInstallPpi', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode)\r
+\r
+            ItemMode = 'Produced'\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.ReInstallPpi', '->ReInstallPpi', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 2)\r
+\r
+            SearchPpiCallFunction(Identifier, SourceFileID, SourceFileFullPath, ItemMode)\r
+\r
+            ItemMode = 'Consumed'\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.LocatePpi', '->LocatePpi', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode)\r
+\r
+            SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Ppi', ItemMode)\r
+\r
+            ItemMode = 'Callback'\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.NotifyPpi', '->NotifyPpi', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode)\r
+\r
+            # Find Procotols\r
+            ItemMode = 'Produced'\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.InstallProtocolInterface', '.ReInstallProtocolInterface', '->InstallProtocolInterface', '->ReInstallProtocolInterface', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 1)\r
+\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.InstallMultipleProtocolInterfaces', '->InstallMultipleProtocolInterfaces', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 2)\r
+\r
+            SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode)\r
+\r
+            ItemMode = 'Consumed'\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.LocateProtocol', '->LocateProtocol', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 0)\r
+\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.HandleProtocol', '->HandleProtocol', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 1)\r
+\r
+            SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode)\r
+\r
+            ItemMode = 'Callback'\r
+            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
+                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
+                            % (Identifier, '.RegisterProtocolNotify', '->RegisterProtocolNotify', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
+            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 0)\r
+\r
+            SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode)\r
+\r
+        # Hard Code\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gEfiSecPlatformInformationPpiGuid', '', '', '', 0)\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gEfiNtLoadAsDllPpiGuid', '', '', '', 0)\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gNtPeiLoadFileGuid', '', '', '', 0)\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiNtAutoScanPpiGuid', '', '', '', 0)\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gNtFwhPpiGuid', '', '', '', 0)\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiNtThunkPpiGuid', '', '', '', 0)\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiPlatformTypePpiGuid', '', '', '', 0)\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiFrequencySelectionCpuPpiGuid', '', '', '', 0)\r
+        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiCachePpiGuid', '', '', '', 0)\r
+\r
+        EotGlobalData.gDb.Conn.commit()\r
+\r
+\r
+    ## BuildDatabase() methoc\r
+    #\r
+    #  Build the database for target\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    def BuildDatabase(self):\r
+        # Clean report table\r
+        EotGlobalData.gDb.TblReport.Drop()\r
+        EotGlobalData.gDb.TblReport.Create()\r
+\r
+        # Build database\r
+        if self.IsInit:\r
+            self.BuildMetaDataFileDatabase(EotGlobalData.gINF_FILES)\r
+            EdkLogger.quiet("Building database for source code ...")\r
+            c.CreateCCodeDB(EotGlobalData.gSOURCE_FILES)\r
+            EdkLogger.quiet("Building database for source code done!")\r
+\r
+        EotGlobalData.gIdentifierTableList = GetTableList((MODEL_FILE_C, MODEL_FILE_H), 'Identifier', EotGlobalData.gDb)\r
+\r
+    ## BuildMetaDataFileDatabase() method\r
+    #\r
+    #  Build the database for meta data files\r
+    #\r
+    #  @param self: The object pointer\r
+    #  @param Inf_Files: A list for all INF files\r
+    #\r
+    def BuildMetaDataFileDatabase(self, Inf_Files):\r
+        EdkLogger.quiet("Building database for meta data files ...")\r
+        for InfFile in Inf_Files:\r
+            EdkLogger.quiet("Parsing %s ..."  % str(InfFile))\r
+            EdkInfParser(InfFile, EotGlobalData.gDb, Inf_Files[InfFile], '')\r
+\r
+        EotGlobalData.gDb.Conn.commit()\r
+        EdkLogger.quiet("Building database for meta data files done!")\r
+\r
+    ## ParseOption() method\r
+    #\r
+    #  Parse command line options\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    def ParseOption(self):\r
+        (Options, Target) = self.EotOptionParser()\r
+\r
+        # Set log level\r
+        self.SetLogLevel(Options)\r
+\r
+        if Options.FvFileList:\r
+            self.FvFileList = Options.FvFileList\r
+\r
+        if Options.MapFileList:\r
+            self.MapFileList = Options.FvMapFileList\r
+\r
+        if Options.SourceFileList:\r
+            self.SourceFileList = Options.SourceFileList\r
+\r
+        if Options.IncludeDirList:\r
+            self.IncludeDirList = Options.IncludeDirList\r
+\r
+        if Options.DecFileList:\r
+            self.DecFileList = Options.DecFileList\r
+\r
+        if Options.GuidList:\r
+            self.GuidList = Options.GuidList\r
+\r
+        if Options.LogFile:\r
+            self.LogFile = Options.LogFile\r
+\r
+        if Options.keepdatabase:\r
+            self.IsInit = False\r
+\r
+    ## SetLogLevel() method\r
+    #\r
+    #  Set current log level of the tool based on args\r
+    #\r
+    #  @param self: The object pointer\r
+    #  @param Option: The option list including log level setting\r
+    #\r
+    def SetLogLevel(self, Option):\r
+        if Option.verbose is not None:\r
+            EdkLogger.SetLevel(EdkLogger.VERBOSE)\r
+        elif Option.quiet is not None:\r
+            EdkLogger.SetLevel(EdkLogger.QUIET)\r
+        elif Option.debug is not None:\r
+            EdkLogger.SetLevel(Option.debug + 1)\r
+        else:\r
+            EdkLogger.SetLevel(EdkLogger.INFO)\r
+\r
+    ## EotOptionParser() method\r
+    #\r
+    #  Using standard Python module optparse to parse command line option of this tool.\r
+    #\r
+    #  @param self: The object pointer\r
+    #\r
+    #  @retval Opt   A optparse.Values object containing the parsed options\r
+    #  @retval Args  Target of build command\r
+    #\r
+    def EotOptionParser(self):\r
+        Parser = OptionParser(description = self.Copyright, version = self.Version, prog = "Eot.exe", usage = "%prog [options]")\r
+        Parser.add_option("-m", "--makefile filename", action="store", type="string", dest='MakeFile',\r
+            help="Specify a makefile for the platform.")\r
+        Parser.add_option("-c", "--dsc filename", action="store", type="string", dest="DscFile",\r
+            help="Specify a dsc file for the platform.")\r
+        Parser.add_option("-f", "--fv filename", action="store", type="string", dest="FvFileList",\r
+            help="Specify fv file list, quoted by \"\".")\r
+        Parser.add_option("-a", "--map filename", action="store", type="string", dest="MapFileList",\r
+            help="Specify map file list, quoted by \"\".")\r
+        Parser.add_option("-s", "--source files", action="store", type="string", dest="SourceFileList",\r
+            help="Specify source file list by a file")\r
+        Parser.add_option("-i", "--include dirs", action="store", type="string", dest="IncludeDirList",\r
+            help="Specify include dir list by a file")\r
+        Parser.add_option("-e", "--dec files", action="store", type="string", dest="DecFileList",\r
+            help="Specify dec file list by a file")\r
+        Parser.add_option("-g", "--guid list", action="store", type="string", dest="GuidList",\r
+            help="Specify guid file list by a file")\r
+        Parser.add_option("-l", "--log filename", action="store", type="string", dest="LogFile",\r
+            help="Specify real execution log file")\r
+\r
+        Parser.add_option("-k", "--keepdatabase", action="store_true", type=None, help="The existing Eot database will not be cleaned except report information if this option is specified.")\r
+\r
+        Parser.add_option("-q", "--quiet", action="store_true", type=None, help="Disable all messages except FATAL ERRORS.")\r
+        Parser.add_option("-v", "--verbose", action="store_true", type=None, help="Turn on verbose output with informational messages printed, "\\r
+                                                                                   "including library instances selected, final dependency expression, "\\r
+                                                                                   "and warning messages, etc.")\r
+        Parser.add_option("-d", "--debug", action="store", type="int", help="Enable debug messages at specified level.")\r
+\r
+        (Opt, Args)=Parser.parse_args()\r
+\r
+        return (Opt, Args)\r
+\r
+##\r
+#\r
+# This acts like the main() function for the script, unless it is 'import'ed into another\r
+# script.\r
+#\r
+if __name__ == '__main__':\r
+    # Initialize log system\r
+    EdkLogger.Initialize()\r
+    EdkLogger.IsRaiseError = False\r
+    EdkLogger.quiet(time.strftime("%H:%M:%S, %b.%d %Y ", time.localtime()) + "[00:00]" + "\n")\r
+\r
+    StartTime = time.clock()\r
+    Eot = Eot()\r
+    FinishTime = time.clock()\r
+\r
+    BuildDuration = time.strftime("%M:%S", time.gmtime(int(round(FinishTime - StartTime))))\r
+    EdkLogger.quiet("\n%s [%s]" % (time.strftime("%H:%M:%S, %b.%d %Y", time.localtime()), BuildDuration))\r
diff --git a/BaseTools/Source/Python/Eot/EotMain.py b/BaseTools/Source/Python/Eot/EotMain.py
deleted file mode 100644 (file)
index f86ceec..0000000
+++ /dev/null
@@ -1,1721 +0,0 @@
-## @file\r
-# This file is used to be the main entrance of EOT tool\r
-#\r
-# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-\r
-##\r
-# Import Modules\r
-#\r
-from __future__ import absolute_import\r
-import Common.LongFilePathOs as os, time, glob\r
-import Common.EdkLogger as EdkLogger\r
-from Eot import EotGlobalData\r
-from optparse import OptionParser\r
-from Common.StringUtils import NormPath\r
-from Common import BuildToolError\r
-from Common.Misc import GuidStructureStringToGuidString, sdict\r
-from Eot.Parser import *\r
-from Eot.InfParserLite import EdkInfParser\r
-from Common.StringUtils import GetSplitValueList\r
-from Eot import c\r
-from Eot import Database\r
-from array import array\r
-from Eot.Report import Report\r
-from Common.BuildVersion import gBUILD_VERSION\r
-from Eot.Parser import ConvertGuid\r
-from Common.LongFilePathSupport import OpenLongFilePath as open\r
-import struct\r
-import uuid\r
-import copy\r
-import codecs\r
-\r
-gGuidStringFormat = "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X"\r
-gPeiAprioriFileNameGuid = '1b45cc0a-156a-428a-af62-49864da0e6e6'\r
-gAprioriGuid = 'fc510ee7-ffdc-11d4-bd41-0080c73c8881'\r
-gIndention = -4\r
-\r
-class Image(array):\r
-    _HEADER_ = struct.Struct("")\r
-    _HEADER_SIZE_ = _HEADER_.size\r
-\r
-    def __new__(cls, *args, **kwargs):\r
-        return array.__new__(cls, 'B')\r
-\r
-    def __init__(self, ID=None):\r
-        if ID is None:\r
-            self._ID_ = str(uuid.uuid1()).upper()\r
-        else:\r
-            self._ID_ = ID\r
-        self._BUF_ = None\r
-        self._LEN_ = None\r
-        self._OFF_ = None\r
-\r
-        self._SubImages = sdict() # {offset: Image()}\r
-\r
-        array.__init__(self)\r
-\r
-    def __repr__(self):\r
-        return self._ID_\r
-\r
-    def __len__(self):\r
-        Len = array.__len__(self)\r
-        for Offset in self._SubImages.keys():\r
-            Len += len(self._SubImages[Offset])\r
-        return Len\r
-\r
-    def _Unpack(self):\r
-        self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_])\r
-        return len(self)\r
-\r
-    def _Pack(self, PadByte=0xFF):\r
-        raise NotImplementedError\r
-\r
-    def frombuffer(self, Buffer, Offset=0, Size=None):\r
-        self._BUF_ = Buffer\r
-        self._OFF_ = Offset\r
-        # we may need the Size information in advance if it's given\r
-        self._LEN_ = Size\r
-        self._LEN_ = self._Unpack()\r
-\r
-    def empty(self):\r
-        del self[0:]\r
-\r
-    def GetField(self, FieldStruct, Offset=0):\r
-        return FieldStruct.unpack_from(self, Offset)\r
-\r
-    def SetField(self, FieldStruct, Offset, *args):\r
-        # check if there's enough space\r
-        Size = FieldStruct.size\r
-        if Size > len(self):\r
-            self.extend([0] * (Size - len(self)))\r
-        FieldStruct.pack_into(self, Offset, *args)\r
-\r
-    def _SetData(self, Data):\r
-        if len(self) < self._HEADER_SIZE_:\r
-            self.extend([0] * (self._HEADER_SIZE_ - len(self)))\r
-        else:\r
-            del self[self._HEADER_SIZE_:]\r
-        self.extend(Data)\r
-\r
-    def _GetData(self):\r
-        if len(self) > self._HEADER_SIZE_:\r
-            return self[self._HEADER_SIZE_:]\r
-        return None\r
-\r
-    Data = property(_GetData, _SetData)\r
-\r
-## CompressedImage() class\r
-#\r
-#  A class for Compressed Image\r
-#\r
-class CompressedImage(Image):\r
-    # UncompressedLength = 4-byte\r
-    # CompressionType = 1-byte\r
-    _HEADER_ = struct.Struct("1I 1B")\r
-    _HEADER_SIZE_ = _HEADER_.size\r
-\r
-    _ORIG_SIZE_     = struct.Struct("1I")\r
-    _CMPRS_TYPE_    = struct.Struct("4x 1B")\r
-\r
-    def __init__(self, CompressedData=None, CompressionType=None, UncompressedLength=None):\r
-        Image.__init__(self)\r
-        if UncompressedLength is not None:\r
-            self.UncompressedLength = UncompressedLength\r
-        if CompressionType is not None:\r
-            self.CompressionType = CompressionType\r
-        if CompressedData is not None:\r
-            self.Data = CompressedData\r
-\r
-    def __str__(self):\r
-        global gIndention\r
-        S = "algorithm=%s uncompressed=%x" % (self.CompressionType, self.UncompressedLength)\r
-        for Sec in self.Sections:\r
-            S += '\n' + str(Sec)\r
-\r
-        return S\r
-\r
-    def _SetOriginalSize(self, Size):\r
-        self.SetField(self._ORIG_SIZE_, 0, Size)\r
-\r
-    def _GetOriginalSize(self):\r
-        return self.GetField(self._ORIG_SIZE_)[0]\r
-\r
-    def _SetCompressionType(self, Type):\r
-        self.SetField(self._CMPRS_TYPE_, 0, Type)\r
-\r
-    def _GetCompressionType(self):\r
-        return self.GetField(self._CMPRS_TYPE_)[0]\r
-\r
-    def _GetSections(self):\r
-        try:\r
-            TmpData = DeCompress('Efi', self[self._HEADER_SIZE_:])\r
-            DecData = array('B')\r
-            DecData.fromstring(TmpData)\r
-        except:\r
-            TmpData = DeCompress('Framework', self[self._HEADER_SIZE_:])\r
-            DecData = array('B')\r
-            DecData.fromstring(TmpData)\r
-\r
-        SectionList = []\r
-        Offset = 0\r
-        while Offset < len(DecData):\r
-            Sec = Section()\r
-            try:\r
-                Sec.frombuffer(DecData, Offset)\r
-                Offset += Sec.Size\r
-                # the section is aligned to 4-byte boundary\r
-            except:\r
-                break\r
-            SectionList.append(Sec)\r
-        return SectionList\r
-\r
-    UncompressedLength = property(_GetOriginalSize, _SetOriginalSize)\r
-    CompressionType = property(_GetCompressionType, _SetCompressionType)\r
-    Sections = property(_GetSections)\r
-\r
-## Ui() class\r
-#\r
-#  A class for Ui\r
-#\r
-class Ui(Image):\r
-    _HEADER_ = struct.Struct("")\r
-    _HEADER_SIZE_ = 0\r
-\r
-    def __init__(self):\r
-        Image.__init__(self)\r
-\r
-    def __str__(self):\r
-        return self.String\r
-\r
-    def _Unpack(self):\r
-        # keep header in this Image object\r
-        self.empty()\r
-        self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_])\r
-        return len(self)\r
-\r
-    def _GetUiString(self):\r
-        return codecs.utf_16_decode(self[0:-2].tostring())[0]\r
-\r
-    String = property(_GetUiString)\r
-\r
-## Depex() class\r
-#\r
-#  A class for Depex\r
-#\r
-class Depex(Image):\r
-    _HEADER_ = struct.Struct("")\r
-    _HEADER_SIZE_ = 0\r
-\r
-    _GUID_          = struct.Struct("1I2H8B")\r
-    _OPCODE_        = struct.Struct("1B")\r
-\r
-    _OPCODE_STRING_ = {\r
-        0x00    :   "BEFORE",\r
-        0x01    :   "AFTER",\r
-        0x02    :   "PUSH",\r
-        0x03    :   "AND",\r
-        0x04    :   "OR",\r
-        0x05    :   "NOT",\r
-        0x06    :   "TRUE",\r
-        0x07    :   "FALSE",\r
-        0x08    :   "END",\r
-        0x09    :   "SOR"\r
-    }\r
-\r
-    _NEXT_ = {\r
-        -1      :   _OPCODE_,   # first one in depex must be an opcdoe\r
-        0x00    :   _GUID_,     #"BEFORE",\r
-        0x01    :   _GUID_,     #"AFTER",\r
-        0x02    :   _GUID_,     #"PUSH",\r
-        0x03    :   _OPCODE_,   #"AND",\r
-        0x04    :   _OPCODE_,   #"OR",\r
-        0x05    :   _OPCODE_,   #"NOT",\r
-        0x06    :   _OPCODE_,   #"TRUE",\r
-        0x07    :   _OPCODE_,   #"FALSE",\r
-        0x08    :   None,       #"END",\r
-        0x09    :   _OPCODE_,   #"SOR"\r
-    }\r
-\r
-    def __init__(self):\r
-        Image.__init__(self)\r
-        self._ExprList = []\r
-\r
-    def __str__(self):\r
-        global gIndention\r
-        gIndention += 4\r
-        Indention = ' ' * gIndention\r
-        S = '\n'\r
-        for T in self.Expression:\r
-            if T in self._OPCODE_STRING_:\r
-                S += Indention + self._OPCODE_STRING_[T]\r
-                if T not in [0x00, 0x01, 0x02]:\r
-                    S += '\n'\r
-            else:\r
-                S += ' ' + gGuidStringFormat % T + '\n'\r
-        gIndention -= 4\r
-        return S\r
-\r
-    def _Unpack(self):\r
-        # keep header in this Image object\r
-        self.empty()\r
-        self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_])\r
-        return len(self)\r
-\r
-    def _GetExpression(self):\r
-        if self._ExprList == []:\r
-            Offset = 0\r
-            CurrentData = self._OPCODE_\r
-            while Offset < len(self):\r
-                Token = CurrentData.unpack_from(self, Offset)\r
-                Offset += CurrentData.size\r
-                if len(Token) == 1:\r
-                    Token = Token[0]\r
-                    if Token in self._NEXT_:\r
-                        CurrentData = self._NEXT_[Token]\r
-                    else:\r
-                        CurrentData = self._GUID_\r
-                else:\r
-                    CurrentData = self._OPCODE_\r
-                self._ExprList.append(Token)\r
-                if CurrentData is None:\r
-                    break\r
-        return self._ExprList\r
-\r
-    Expression = property(_GetExpression)\r
-\r
-# # FirmwareVolume() class\r
-#\r
-#  A class for Firmware Volume\r
-#\r
-class FirmwareVolume(Image):\r
-    # Read FvLength, Attributes, HeaderLength, Checksum\r
-    _HEADER_ = struct.Struct("16x 1I2H8B 1Q 4x 1I 1H 1H")\r
-    _HEADER_SIZE_ = _HEADER_.size\r
-\r
-    _FfsGuid = "8C8CE578-8A3D-4F1C-9935-896185C32DD3"\r
-\r
-    _GUID_ = struct.Struct("16x 1I2H8B")\r
-    _LENGTH_ = struct.Struct("16x 16x 1Q")\r
-    _SIG_ = struct.Struct("16x 16x 8x 1I")\r
-    _ATTR_ = struct.Struct("16x 16x 8x 4x 1I")\r
-    _HLEN_ = struct.Struct("16x 16x 8x 4x 4x 1H")\r
-    _CHECKSUM_ = struct.Struct("16x 16x 8x 4x 4x 2x 1H")\r
-\r
-    def __init__(self, Name=''):\r
-        Image.__init__(self)\r
-        self.Name = Name\r
-        self.FfsDict = sdict()\r
-        self.OrderedFfsDict = sdict()\r
-        self.UnDispatchedFfsDict = sdict()\r
-        self.ProtocolList = sdict()\r
-\r
-    def CheckArchProtocol(self):\r
-        for Item in EotGlobalData.gArchProtocolGuids:\r
-            if Item.lower() not in EotGlobalData.gProtocolList:\r
-                return False\r
-        return True\r
-\r
-    def ParseDepex(self, Depex, Type):\r
-        List = None\r
-        if Type == 'Ppi':\r
-            List = EotGlobalData.gPpiList\r
-        if Type == 'Protocol':\r
-            List = EotGlobalData.gProtocolList\r
-        DepexStack = []\r
-        DepexList = []\r
-        DepexString = ''\r
-        FileDepex = None\r
-        CouldBeLoaded = True\r
-        for Index in range(0, len(Depex.Expression)):\r
-            Item = Depex.Expression[Index]\r
-            if Item == 0x00:\r
-                Index = Index + 1\r
-                Guid = gGuidStringFormat % Depex.Expression[Index]\r
-                if Guid in self.OrderedFfsDict and Depex.Expression[Index + 1] == 0x08:\r
-                    return (True, 'BEFORE %s' % Guid, [Guid, 'BEFORE'])\r
-            elif Item == 0x01:\r
-                Index = Index + 1\r
-                Guid = gGuidStringFormat % Depex.Expression[Index]\r
-                if Guid in self.OrderedFfsDict and Depex.Expression[Index + 1] == 0x08:\r
-                    return (True, 'AFTER %s' % Guid, [Guid, 'AFTER'])\r
-            elif Item == 0x02:\r
-                Index = Index + 1\r
-                Guid = gGuidStringFormat % Depex.Expression[Index]\r
-                if Guid.lower() in List:\r
-                    DepexStack.append(True)\r
-                    DepexList.append(Guid)\r
-                else:\r
-                    DepexStack.append(False)\r
-                    DepexList.append(Guid)\r
-                continue\r
-            elif Item == 0x03 or Item == 0x04:\r
-                DepexStack.append(eval(str(DepexStack.pop()) + ' ' + Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexStack.pop())))\r
-                DepexList.append(str(DepexList.pop()) + ' ' + Depex._OPCODE_STRING_[Item].upper() + ' ' + str(DepexList.pop()))\r
-            elif Item == 0x05:\r
-                DepexStack.append(eval(Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexStack.pop())))\r
-                DepexList.append(Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexList.pop()))\r
-            elif Item == 0x06:\r
-                DepexStack.append(True)\r
-                DepexList.append('TRUE')\r
-                DepexString = DepexString + 'TRUE' + ' '\r
-            elif Item == 0x07:\r
-                DepexStack.append(False)\r
-                DepexList.append('False')\r
-                DepexString = DepexString + 'FALSE' + ' '\r
-            elif Item == 0x08:\r
-                if Index != len(Depex.Expression) - 1:\r
-                    CouldBeLoaded = False\r
-                else:\r
-                    CouldBeLoaded = DepexStack.pop()\r
-            else:\r
-                CouldBeLoaded = False\r
-        if DepexList != []:\r
-            DepexString = DepexList[0].strip()\r
-        return (CouldBeLoaded, DepexString, FileDepex)\r
-\r
-    def Dispatch(self, Db=None):\r
-        if Db is None:\r
-            return False\r
-        self.UnDispatchedFfsDict = copy.copy(self.FfsDict)\r
-        # Find PeiCore, DexCore, PeiPriori, DxePriori first\r
-        FfsSecCoreGuid = None\r
-        FfsPeiCoreGuid = None\r
-        FfsDxeCoreGuid = None\r
-        FfsPeiPrioriGuid = None\r
-        FfsDxePrioriGuid = None\r
-        for FfsID in self.UnDispatchedFfsDict.keys():\r
-            Ffs = self.UnDispatchedFfsDict[FfsID]\r
-            if Ffs.Type == 0x03:\r
-                FfsSecCoreGuid = FfsID\r
-                continue\r
-            if Ffs.Type == 0x04:\r
-                FfsPeiCoreGuid = FfsID\r
-                continue\r
-            if Ffs.Type == 0x05:\r
-                FfsDxeCoreGuid = FfsID\r
-                continue\r
-            if Ffs.Guid.lower() == gPeiAprioriFileNameGuid:\r
-                FfsPeiPrioriGuid = FfsID\r
-                continue\r
-            if Ffs.Guid.lower() == gAprioriGuid:\r
-                FfsDxePrioriGuid = FfsID\r
-                continue\r
-\r
-        # Parse SEC_CORE first\r
-        if FfsSecCoreGuid is not None:\r
-            self.OrderedFfsDict[FfsSecCoreGuid] = self.UnDispatchedFfsDict.pop(FfsSecCoreGuid)\r
-            self.LoadPpi(Db, FfsSecCoreGuid)\r
-\r
-        # Parse PEI first\r
-        if FfsPeiCoreGuid is not None:\r
-            self.OrderedFfsDict[FfsPeiCoreGuid] = self.UnDispatchedFfsDict.pop(FfsPeiCoreGuid)\r
-            self.LoadPpi(Db, FfsPeiCoreGuid)\r
-            if FfsPeiPrioriGuid is not None:\r
-                # Load PEIM described in priori file\r
-                FfsPeiPriori = self.UnDispatchedFfsDict.pop(FfsPeiPrioriGuid)\r
-                if len(FfsPeiPriori.Sections) == 1:\r
-                    Section = FfsPeiPriori.Sections.popitem()[1]\r
-                    if Section.Type == 0x19:\r
-                        GuidStruct = struct.Struct('1I2H8B')\r
-                        Start = 4\r
-                        while len(Section) > Start:\r
-                            Guid = GuidStruct.unpack_from(Section[Start : Start + 16])\r
-                            GuidString = gGuidStringFormat % Guid\r
-                            Start = Start + 16\r
-                            if GuidString in self.UnDispatchedFfsDict:\r
-                                self.OrderedFfsDict[GuidString] = self.UnDispatchedFfsDict.pop(GuidString)\r
-                                self.LoadPpi(Db, GuidString)\r
-\r
-        self.DisPatchPei(Db)\r
-\r
-        # Parse DXE then\r
-        if FfsDxeCoreGuid is not None:\r
-            self.OrderedFfsDict[FfsDxeCoreGuid] = self.UnDispatchedFfsDict.pop(FfsDxeCoreGuid)\r
-            self.LoadProtocol(Db, FfsDxeCoreGuid)\r
-            if FfsDxePrioriGuid is not None:\r
-                # Load PEIM described in priori file\r
-                FfsDxePriori = self.UnDispatchedFfsDict.pop(FfsDxePrioriGuid)\r
-                if len(FfsDxePriori.Sections) == 1:\r
-                    Section = FfsDxePriori.Sections.popitem()[1]\r
-                    if Section.Type == 0x19:\r
-                        GuidStruct = struct.Struct('1I2H8B')\r
-                        Start = 4\r
-                        while len(Section) > Start:\r
-                            Guid = GuidStruct.unpack_from(Section[Start : Start + 16])\r
-                            GuidString = gGuidStringFormat % Guid\r
-                            Start = Start + 16\r
-                            if GuidString in self.UnDispatchedFfsDict:\r
-                                self.OrderedFfsDict[GuidString] = self.UnDispatchedFfsDict.pop(GuidString)\r
-                                self.LoadProtocol(Db, GuidString)\r
-\r
-        self.DisPatchDxe(Db)\r
-\r
-    def LoadProtocol(self, Db, ModuleGuid):\r
-        SqlCommand = """select GuidValue from Report\r
-                        where SourceFileFullPath in\r
-                        (select Value1 from Inf where BelongsToFile =\r
-                        (select BelongsToFile from Inf\r
-                        where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s)\r
-                        and Model = %s)\r
-                        and ItemType = 'Protocol' and ItemMode = 'Produced'""" \\r
-                        % (ModuleGuid, 5001, 3007)\r
-        RecordSet = Db.TblReport.Exec(SqlCommand)\r
-        for Record in RecordSet:\r
-            SqlCommand = """select Value2 from Inf where BelongsToFile =\r
-                            (select DISTINCT BelongsToFile from Inf\r
-                            where Value1 =\r
-                            (select SourceFileFullPath from Report\r
-                            where GuidValue like '%s' and ItemMode = 'Callback'))\r
-                            and Value1 = 'FILE_GUID'""" % Record[0]\r
-            CallBackSet = Db.TblReport.Exec(SqlCommand)\r
-            if CallBackSet != []:\r
-                EotGlobalData.gProtocolList[Record[0].lower()] = ModuleGuid\r
-            else:\r
-                EotGlobalData.gProtocolList[Record[0].lower()] = ModuleGuid\r
-\r
-    def LoadPpi(self, Db, ModuleGuid):\r
-        SqlCommand = """select GuidValue from Report\r
-                        where SourceFileFullPath in\r
-                        (select Value1 from Inf where BelongsToFile =\r
-                        (select BelongsToFile from Inf\r
-                        where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s)\r
-                        and Model = %s)\r
-                        and ItemType = 'Ppi' and ItemMode = 'Produced'""" \\r
-                        % (ModuleGuid, 5001, 3007)\r
-        RecordSet = Db.TblReport.Exec(SqlCommand)\r
-        for Record in RecordSet:\r
-            EotGlobalData.gPpiList[Record[0].lower()] = ModuleGuid\r
-\r
-    def DisPatchDxe(self, Db):\r
-        IsInstalled = False\r
-        ScheduleList = sdict()\r
-        for FfsID in self.UnDispatchedFfsDict.keys():\r
-            CouldBeLoaded = False\r
-            DepexString = ''\r
-            FileDepex = None\r
-            Ffs = self.UnDispatchedFfsDict[FfsID]\r
-            if Ffs.Type == 0x07:\r
-                # Get Depex\r
-                IsFoundDepex = False\r
-                for Section in Ffs.Sections.values():\r
-                    # Find Depex\r
-                    if Section.Type == 0x13:\r
-                        IsFoundDepex = True\r
-                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(Section._SubImages[4], 'Protocol')\r
-                        break\r
-                    if Section.Type == 0x01:\r
-                        CompressSections = Section._SubImages[4]\r
-                        for CompressSection in CompressSections.Sections:\r
-                            if CompressSection.Type == 0x13:\r
-                                IsFoundDepex = True\r
-                                CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(CompressSection._SubImages[4], 'Protocol')\r
-                                break\r
-                            if CompressSection.Type == 0x02:\r
-                                NewSections = CompressSection._SubImages[4]\r
-                                for NewSection in NewSections.Sections:\r
-                                    if NewSection.Type == 0x13:\r
-                                        IsFoundDepex = True\r
-                                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(NewSection._SubImages[4], 'Protocol')\r
-                                        break\r
-\r
-                # Not find Depex\r
-                if not IsFoundDepex:\r
-                    CouldBeLoaded = self.CheckArchProtocol()\r
-                    DepexString = ''\r
-                    FileDepex = None\r
-\r
-                # Append New Ffs\r
-                if CouldBeLoaded:\r
-                    IsInstalled = True\r
-                    NewFfs = self.UnDispatchedFfsDict.pop(FfsID)\r
-                    NewFfs.Depex = DepexString\r
-                    if FileDepex is not None:\r
-                        ScheduleList.insert(FileDepex[1], FfsID, NewFfs, FileDepex[0])\r
-                    else:\r
-                        ScheduleList[FfsID] = NewFfs\r
-                else:\r
-                    self.UnDispatchedFfsDict[FfsID].Depex = DepexString\r
-\r
-        for FfsID in ScheduleList.keys():\r
-            NewFfs = ScheduleList.pop(FfsID)\r
-            FfsName = 'UnKnown'\r
-            self.OrderedFfsDict[FfsID] = NewFfs\r
-            self.LoadProtocol(Db, FfsID)\r
-\r
-            SqlCommand = """select Value2 from Inf\r
-                            where BelongsToFile = (select BelongsToFile from Inf where Value1 = 'FILE_GUID' and lower(Value2) = lower('%s') and Model = %s)\r
-                            and Model = %s and Value1='BASE_NAME'""" % (FfsID, 5001, 5001)\r
-            RecordSet = Db.TblReport.Exec(SqlCommand)\r
-            if RecordSet != []:\r
-                FfsName = RecordSet[0][0]\r
-\r
-        if IsInstalled:\r
-            self.DisPatchDxe(Db)\r
-\r
-    def DisPatchPei(self, Db):\r
-        IsInstalled = False\r
-        for FfsID in self.UnDispatchedFfsDict.keys():\r
-            CouldBeLoaded = True\r
-            DepexString = ''\r
-            FileDepex = None\r
-            Ffs = self.UnDispatchedFfsDict[FfsID]\r
-            if Ffs.Type == 0x06 or Ffs.Type == 0x08:\r
-                # Get Depex\r
-                for Section in Ffs.Sections.values():\r
-                    if Section.Type == 0x1B:\r
-                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(Section._SubImages[4], 'Ppi')\r
-                        break\r
-                    if Section.Type == 0x01:\r
-                        CompressSections = Section._SubImages[4]\r
-                        for CompressSection in CompressSections.Sections:\r
-                            if CompressSection.Type == 0x1B:\r
-                                CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(CompressSection._SubImages[4], 'Ppi')\r
-                                break\r
-                            if CompressSection.Type == 0x02:\r
-                                NewSections = CompressSection._SubImages[4]\r
-                                for NewSection in NewSections.Sections:\r
-                                    if NewSection.Type == 0x1B:\r
-                                        CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(NewSection._SubImages[4], 'Ppi')\r
-                                        break\r
-\r
-                # Append New Ffs\r
-                if CouldBeLoaded:\r
-                    IsInstalled = True\r
-                    NewFfs = self.UnDispatchedFfsDict.pop(FfsID)\r
-                    NewFfs.Depex = DepexString\r
-                    self.OrderedFfsDict[FfsID] = NewFfs\r
-                    self.LoadPpi(Db, FfsID)\r
-                else:\r
-                    self.UnDispatchedFfsDict[FfsID].Depex = DepexString\r
-\r
-        if IsInstalled:\r
-            self.DisPatchPei(Db)\r
-\r
-\r
-    def __str__(self):\r
-        global gIndention\r
-        gIndention += 4\r
-        FvInfo = '\n' + ' ' * gIndention\r
-        FvInfo += "[FV:%s] file_system=%s size=%x checksum=%s\n" % (self.Name, self.FileSystemGuid, self.Size, self.Checksum)\r
-        FfsInfo = "\n".join([str(self.FfsDict[FfsId]) for FfsId in self.FfsDict])\r
-        gIndention -= 4\r
-        return FvInfo + FfsInfo\r
-\r
-    def _Unpack(self):\r
-        Size = self._LENGTH_.unpack_from(self._BUF_, self._OFF_)[0]\r
-        self.empty()\r
-        self.extend(self._BUF_[self._OFF_:self._OFF_ + Size])\r
-\r
-        # traverse the FFS\r
-        EndOfFv = Size\r
-        FfsStartAddress = self.HeaderSize\r
-        LastFfsObj = None\r
-        while FfsStartAddress < EndOfFv:\r
-            FfsObj = Ffs()\r
-            FfsObj.frombuffer(self, FfsStartAddress)\r
-            FfsId = repr(FfsObj)\r
-            if ((self.Attributes & 0x00000800) != 0 and len(FfsObj) == 0xFFFFFF) \\r
-                or ((self.Attributes & 0x00000800) == 0 and len(FfsObj) == 0):\r
-                if LastFfsObj is not None:\r
-                    LastFfsObj.FreeSpace = EndOfFv - LastFfsObj._OFF_ - len(LastFfsObj)\r
-            else:\r
-                if FfsId in self.FfsDict:\r
-                    EdkLogger.error("FV", 0, "Duplicate GUID in FFS",\r
-                                    ExtraData="\t%s @ %s\n\t%s @ %s" \\r
-                                    % (FfsObj.Guid, FfsObj.Offset,\r
-                                       self.FfsDict[FfsId].Guid, self.FfsDict[FfsId].Offset))\r
-                self.FfsDict[FfsId] = FfsObj\r
-                if LastFfsObj is not None:\r
-                    LastFfsObj.FreeSpace = FfsStartAddress - LastFfsObj._OFF_ - len(LastFfsObj)\r
-\r
-            FfsStartAddress += len(FfsObj)\r
-            #\r
-            # align to next 8-byte aligned address: A = (A + 8 - 1) & (~(8 - 1))\r
-            # The next FFS must be at the latest next 8-byte aligned address\r
-            #\r
-            FfsStartAddress = (FfsStartAddress + 7) & (~7)\r
-            LastFfsObj = FfsObj\r
-\r
-    def _GetAttributes(self):\r
-        return self.GetField(self._ATTR_, 0)[0]\r
-\r
-    def _GetSize(self):\r
-        return self.GetField(self._LENGTH_, 0)[0]\r
-\r
-    def _GetChecksum(self):\r
-        return self.GetField(self._CHECKSUM_, 0)[0]\r
-\r
-    def _GetHeaderLength(self):\r
-        return self.GetField(self._HLEN_, 0)[0]\r
-\r
-    def _GetFileSystemGuid(self):\r
-        return gGuidStringFormat % self.GetField(self._GUID_, 0)\r
-\r
-    Attributes = property(_GetAttributes)\r
-    Size = property(_GetSize)\r
-    Checksum = property(_GetChecksum)\r
-    HeaderSize = property(_GetHeaderLength)\r
-    FileSystemGuid = property(_GetFileSystemGuid)\r
-\r
-## GuidDefinedImage() class\r
-#\r
-#  A class for GUID Defined Image\r
-#\r
-class GuidDefinedImage(Image):\r
-    _HEADER_ = struct.Struct("1I2H8B 1H 1H")\r
-    _HEADER_SIZE_ = _HEADER_.size\r
-\r
-    _GUID_          = struct.Struct("1I2H8B")\r
-    _DATA_OFFSET_   = struct.Struct("16x 1H")\r
-    _ATTR_          = struct.Struct("18x 1H")\r
-\r
-    CRC32_GUID          = "FC1BCDB0-7D31-49AA-936A-A4600D9DD083"\r
-    TIANO_COMPRESS_GUID = 'A31280AD-481E-41B6-95E8-127F4C984779'\r
-    LZMA_COMPRESS_GUID  = 'EE4E5898-3914-4259-9D6E-DC7BD79403CF'\r
-\r
-    def __init__(self, SectionDefinitionGuid=None, DataOffset=None, Attributes=None, Data=None):\r
-        Image.__init__(self)\r
-        if SectionDefinitionGuid is not None:\r
-            self.SectionDefinitionGuid = SectionDefinitionGuid\r
-        if DataOffset is not None:\r
-            self.DataOffset = DataOffset\r
-        if Attributes is not None:\r
-            self.Attributes = Attributes\r
-        if Data is not None:\r
-            self.Data = Data\r
-\r
-    def __str__(self):\r
-        S = "guid=%s" % (gGuidStringFormat % self.SectionDefinitionGuid)\r
-        for Sec in self.Sections:\r
-            S += "\n" + str(Sec)\r
-        return S\r
-\r
-    def _Unpack(self):\r
-        # keep header in this Image object\r
-        self.empty()\r
-        self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_])\r
-        return len(self)\r
-\r
-    def _SetAttribute(self, Attribute):\r
-        self.SetField(self._ATTR_, 0, Attribute)\r
-\r
-    def _GetAttribute(self):\r
-        return self.GetField(self._ATTR_)[0]\r
-\r
-    def _SetGuid(self, Guid):\r
-        self.SetField(self._GUID_, 0, Guid)\r
-\r
-    def _GetGuid(self):\r
-        return self.GetField(self._GUID_)\r
-\r
-    def _SetDataOffset(self, Offset):\r
-        self.SetField(self._DATA_OFFSET_, 0, Offset)\r
-\r
-    def _GetDataOffset(self):\r
-        return self.GetField(self._DATA_OFFSET_)[0]\r
-\r
-    def _GetSections(self):\r
-        SectionList = []\r
-        Guid = gGuidStringFormat % self.SectionDefinitionGuid\r
-        if Guid == self.CRC32_GUID:\r
-            # skip the CRC32 value, we don't do CRC32 verification here\r
-            Offset = self.DataOffset - 4\r
-            while Offset < len(self):\r
-                Sec = Section()\r
-                try:\r
-                    Sec.frombuffer(self, Offset)\r
-                    Offset += Sec.Size\r
-                    # the section is aligned to 4-byte boundary\r
-                    Offset = (Offset + 3) & (~3)\r
-                except:\r
-                    break\r
-                SectionList.append(Sec)\r
-        elif Guid == self.TIANO_COMPRESS_GUID:\r
-            try:\r
-                # skip the header\r
-                Offset = self.DataOffset - 4\r
-                TmpData = DeCompress('Framework', self[self.Offset:])\r
-                DecData = array('B')\r
-                DecData.fromstring(TmpData)\r
-                Offset = 0\r
-                while Offset < len(DecData):\r
-                    Sec = Section()\r
-                    try:\r
-                        Sec.frombuffer(DecData, Offset)\r
-                        Offset += Sec.Size\r
-                        # the section is aligned to 4-byte boundary\r
-                        Offset = (Offset + 3) & (~3)\r
-                    except:\r
-                        break\r
-                    SectionList.append(Sec)\r
-            except:\r
-                pass\r
-        elif Guid == self.LZMA_COMPRESS_GUID:\r
-            try:\r
-                # skip the header\r
-                Offset = self.DataOffset - 4\r
-\r
-                TmpData = DeCompress('Lzma', self[self.Offset:])\r
-                DecData = array('B')\r
-                DecData.fromstring(TmpData)\r
-                Offset = 0\r
-                while Offset < len(DecData):\r
-                    Sec = Section()\r
-                    try:\r
-                        Sec.frombuffer(DecData, Offset)\r
-                        Offset += Sec.Size\r
-                        # the section is aligned to 4-byte boundary\r
-                        Offset = (Offset + 3) & (~3)\r
-                    except:\r
-                        break\r
-                    SectionList.append(Sec)\r
-            except:\r
-                pass\r
-\r
-        return SectionList\r
-\r
-    Attributes = property(_GetAttribute, _SetAttribute)\r
-    SectionDefinitionGuid = property(_GetGuid, _SetGuid)\r
-    DataOffset = property(_GetDataOffset, _SetDataOffset)\r
-    Sections = property(_GetSections)\r
-\r
-## Section() class\r
-#\r
-#  A class for Section\r
-#\r
-class Section(Image):\r
-    _TypeName = {\r
-        0x00    :   "<unknown>",\r
-        0x01    :   "COMPRESSION",\r
-        0x02    :   "GUID_DEFINED",\r
-        0x10    :   "PE32",\r
-        0x11    :   "PIC",\r
-        0x12    :   "TE",\r
-        0x13    :   "DXE_DEPEX",\r
-        0x14    :   "VERSION",\r
-        0x15    :   "USER_INTERFACE",\r
-        0x16    :   "COMPATIBILITY16",\r
-        0x17    :   "FIRMWARE_VOLUME_IMAGE",\r
-        0x18    :   "FREEFORM_SUBTYPE_GUID",\r
-        0x19    :   "RAW",\r
-        0x1B    :   "PEI_DEPEX"\r
-    }\r
-\r
-    _SectionSubImages = {\r
-        0x01    :   CompressedImage,\r
-        0x02    :   GuidDefinedImage,\r
-        0x17    :   FirmwareVolume,\r
-        0x13    :   Depex,\r
-        0x1B    :   Depex,\r
-        0x15    :   Ui\r
-    }\r
-\r
-    # Size = 3-byte\r
-    # Type = 1-byte\r
-    _HEADER_ = struct.Struct("3B 1B")\r
-    _HEADER_SIZE_ = _HEADER_.size\r
-\r
-    # SubTypeGuid\r
-    # _FREE_FORM_SUBTYPE_GUID_HEADER_ = struct.Struct("1I2H8B")\r
-    _SIZE_          = struct.Struct("3B")\r
-    _TYPE_          = struct.Struct("3x 1B")\r
-\r
-    def __init__(self, Type=None, Size=None):\r
-        Image.__init__(self)\r
-        self._Alignment = 1\r
-        if Type is not None:\r
-            self.Type = Type\r
-        if Size is not None:\r
-            self.Size = Size\r
-\r
-    def __str__(self):\r
-        global gIndention\r
-        gIndention += 4\r
-        SectionInfo = ' ' * gIndention\r
-        if self.Type in self._TypeName:\r
-            SectionInfo += "[SECTION:%s] offset=%x size=%x" % (self._TypeName[self.Type], self._OFF_, self.Size)\r
-        else:\r
-            SectionInfo += "[SECTION:%x<unknown>] offset=%x size=%x " % (self.Type, self._OFF_, self.Size)\r
-        for Offset in self._SubImages.keys():\r
-            SectionInfo += ", " + str(self._SubImages[Offset])\r
-        gIndention -= 4\r
-        return SectionInfo\r
-\r
-    def _Unpack(self):\r
-        self.empty()\r
-        Type, = self._TYPE_.unpack_from(self._BUF_, self._OFF_)\r
-        Size1, Size2, Size3 = self._SIZE_.unpack_from(self._BUF_, self._OFF_)\r
-        Size = Size1 + (Size2 << 8) + (Size3 << 16)\r
-\r
-        if Type not in self._SectionSubImages:\r
-            # no need to extract sub-image, keep all in this Image object\r
-            self.extend(self._BUF_[self._OFF_ : self._OFF_ + Size])\r
-        else:\r
-            # keep header in this Image object\r
-            self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._HEADER_SIZE_])\r
-            #\r
-            # use new Image object to represent payload, which may be another kind\r
-            # of image such as PE32\r
-            #\r
-            PayloadOffset = self._HEADER_SIZE_\r
-            PayloadLen = self.Size - self._HEADER_SIZE_\r
-            Payload = self._SectionSubImages[self.Type]()\r
-            Payload.frombuffer(self._BUF_, self._OFF_ + self._HEADER_SIZE_, PayloadLen)\r
-            self._SubImages[PayloadOffset] = Payload\r
-\r
-        return Size\r
-\r
-    def _SetSize(self, Size):\r
-        Size1 = Size & 0xFF\r
-        Size2 = (Size & 0xFF00) >> 8\r
-        Size3 = (Size & 0xFF0000) >> 16\r
-        self.SetField(self._SIZE_, 0, Size1, Size2, Size3)\r
-\r
-    def _GetSize(self):\r
-        Size1, Size2, Size3 = self.GetField(self._SIZE_)\r
-        return Size1 + (Size2 << 8) + (Size3 << 16)\r
-\r
-    def _SetType(self, Type):\r
-        self.SetField(self._TYPE_, 0, Type)\r
-\r
-    def _GetType(self):\r
-        return self.GetField(self._TYPE_)[0]\r
-\r
-    def _GetAlignment(self):\r
-        return self._Alignment\r
-\r
-    def _SetAlignment(self, Alignment):\r
-        self._Alignment = Alignment\r
-        AlignmentMask = Alignment - 1\r
-        # section alignment is actually for payload, so we need to add header size\r
-        PayloadOffset = self._OFF_ + self._HEADER_SIZE_\r
-        if (PayloadOffset & (~AlignmentMask)) == 0:\r
-            return\r
-        NewOffset = (PayloadOffset + AlignmentMask) & (~AlignmentMask)\r
-        while (NewOffset - PayloadOffset) < self._HEADER_SIZE_:\r
-            NewOffset += self._Alignment\r
-\r
-    def tofile(self, f):\r
-        self.Size = len(self)\r
-        Image.tofile(self, f)\r
-        for Offset in self._SubImages:\r
-            self._SubImages[Offset].tofile(f)\r
-\r
-    Type = property(_GetType, _SetType)\r
-    Size = property(_GetSize, _SetSize)\r
-    Alignment = property(_GetAlignment, _SetAlignment)\r
-\r
-## Ffs() class\r
-#\r
-#  A class for Ffs Section\r
-#\r
-class Ffs(Image):\r
-    _FfsFormat = "24B%(payload_size)sB"\r
-    # skip IntegrityCheck\r
-    _HEADER_ = struct.Struct("1I2H8B 2x 1B 1B 3B 1B")\r
-    _HEADER_SIZE_ = _HEADER_.size\r
-\r
-    _NAME_      = struct.Struct("1I2H8B")\r
-    _INT_CHECK_ = struct.Struct("16x 1H")\r
-    _TYPE_      = struct.Struct("18x 1B")\r
-    _ATTR_      = struct.Struct("19x 1B")\r
-    _SIZE_      = struct.Struct("20x 3B")\r
-    _STATE_     = struct.Struct("23x 1B")\r
-\r
-    VTF_GUID = "1BA0062E-C779-4582-8566-336AE8F78F09"\r
-\r
-    FFS_ATTRIB_FIXED              = 0x04\r
-    FFS_ATTRIB_DATA_ALIGNMENT     = 0x38\r
-    FFS_ATTRIB_CHECKSUM           = 0x40\r
-\r
-    _TypeName = {\r
-        0x00    :   "<unknown>",\r
-        0x01    :   "RAW",\r
-        0x02    :   "FREEFORM",\r
-        0x03    :   "SECURITY_CORE",\r
-        0x04    :   "PEI_CORE",\r
-        0x05    :   "DXE_CORE",\r
-        0x06    :   "PEIM",\r
-        0x07    :   "DRIVER",\r
-        0x08    :   "COMBINED_PEIM_DRIVER",\r
-        0x09    :   "APPLICATION",\r
-        0x0A    :   "SMM",\r
-        0x0B    :   "FIRMWARE_VOLUME_IMAGE",\r
-        0x0C    :   "COMBINED_SMM_DXE",\r
-        0x0D    :   "SMM_CORE",\r
-        0x0E    :   "MM_STANDALONE",\r
-        0x0F    :   "MM_CORE_STANDALONE",\r
-        0xc0    :   "OEM_MIN",\r
-        0xdf    :   "OEM_MAX",\r
-        0xe0    :   "DEBUG_MIN",\r
-        0xef    :   "DEBUG_MAX",\r
-        0xf0    :   "FFS_MIN",\r
-        0xff    :   "FFS_MAX",\r
-        0xf0    :   "FFS_PAD",\r
-    }\r
-\r
-    def __init__(self):\r
-        Image.__init__(self)\r
-        self.FreeSpace = 0\r
-\r
-        self.Sections = sdict()\r
-        self.Depex = ''\r
-\r
-        self.__ID__ = None\r
-\r
-    def __str__(self):\r
-        global gIndention\r
-        gIndention += 4\r
-        Indention = ' ' * gIndention\r
-        FfsInfo = Indention\r
-        FfsInfo +=  "[FFS:%s] offset=%x size=%x guid=%s free_space=%x alignment=%s\n" % \\r
-                    (Ffs._TypeName[self.Type], self._OFF_, self.Size, self.Guid, self.FreeSpace, self.Alignment)\r
-        SectionInfo = '\n'.join([str(self.Sections[Offset]) for Offset in self.Sections.keys()])\r
-        gIndention -= 4\r
-        return FfsInfo + SectionInfo + "\n"\r
-\r
-    def __len__(self):\r
-        return self.Size\r
-\r
-    def __repr__(self):\r
-        return self.__ID__\r
-\r
-    def _Unpack(self):\r
-        Size1, Size2, Size3 = self._SIZE_.unpack_from(self._BUF_, self._OFF_)\r
-        Size = Size1 + (Size2 << 8) + (Size3 << 16)\r
-        self.empty()\r
-        self.extend(self._BUF_[self._OFF_ : self._OFF_ + Size])\r
-\r
-        # Pad FFS may use the same GUID. We need to avoid it.\r
-        if self.Type == 0xf0:\r
-            self.__ID__ = str(uuid.uuid1()).upper()\r
-        else:\r
-            self.__ID__ = self.Guid\r
-\r
-        # Traverse the SECTION. RAW and PAD do not have sections\r
-        if self.Type not in [0xf0, 0x01] and Size > 0 and Size < 0xFFFFFF:\r
-            EndOfFfs = Size\r
-            SectionStartAddress = self._HEADER_SIZE_\r
-            while SectionStartAddress < EndOfFfs:\r
-                SectionObj = Section()\r
-                SectionObj.frombuffer(self, SectionStartAddress)\r
-                #f = open(repr(SectionObj), 'wb')\r
-                #SectionObj.Size = 0\r
-                #SectionObj.tofile(f)\r
-                #f.close()\r
-                self.Sections[SectionStartAddress] = SectionObj\r
-                SectionStartAddress += len(SectionObj)\r
-                SectionStartAddress = (SectionStartAddress + 3) & (~3)\r
-\r
-    def Pack(self):\r
-        pass\r
-\r
-    def SetFreeSpace(self, Size):\r
-        self.FreeSpace = Size\r
-\r
-    def _GetGuid(self):\r
-        return gGuidStringFormat % self.Name\r
-\r
-    def _SetName(self, Value):\r
-        # Guid1, Guid2, Guid3, Guid4, Guid5, Guid6, Guid7, Guid8, Guid9, Guid10, Guid11\r
-        self.SetField(self._NAME_, 0, Value)\r
-\r
-    def _GetName(self):\r
-        # Guid1, Guid2, Guid3, Guid4, Guid5, Guid6, Guid7, Guid8, Guid9, Guid10, Guid11\r
-        return self.GetField(self._NAME_)\r
-\r
-    def _SetSize(self, Size):\r
-        Size1 = Size & 0xFF\r
-        Size2 = (Size & 0xFF00) >> 8\r
-        Size3 = (Size & 0xFF0000) >> 16\r
-        self.SetField(self._SIZE_, 0, Size1, Size2, Size3)\r
-\r
-    def _GetSize(self):\r
-        Size1, Size2, Size3 = self.GetField(self._SIZE_)\r
-        return Size1 + (Size2 << 8) + (Size3 << 16)\r
-\r
-    def _SetType(self, Type):\r
-        self.SetField(self._TYPE_, 0, Type)\r
-\r
-    def _GetType(self):\r
-        return self.GetField(self._TYPE_)[0]\r
-\r
-    def _SetAttributes(self, Value):\r
-        self.SetField(self._ATTR_, 0, Value)\r
-\r
-    def _GetAttributes(self):\r
-        return self.GetField(self._ATTR_)[0]\r
-\r
-    def _GetFixed(self):\r
-        if (self.Attributes & self.FFS_ATTRIB_FIXED) != 0:\r
-            return True\r
-        return False\r
-\r
-    def _GetCheckSum(self):\r
-        if (self.Attributes & self.FFS_ATTRIB_CHECKSUM) != 0:\r
-            return True\r
-        return False\r
-\r
-    def _GetAlignment(self):\r
-        return (self.Attributes & self.FFS_ATTRIB_DATA_ALIGNMENT) >> 3\r
-\r
-    def _SetState(self, Value):\r
-        self.SetField(self._STATE_, 0, Value)\r
-\r
-    def _GetState(self):\r
-        return self.GetField(self._STATE_)[0]\r
-\r
-    Name = property(_GetName, _SetName)\r
-    Guid = property(_GetGuid)\r
-    Type = property(_GetType, _SetType)\r
-    Size = property(_GetSize, _SetSize)\r
-    Attributes = property(_GetAttributes, _SetAttributes)\r
-    Fixed = property(_GetFixed)\r
-    Checksum = property(_GetCheckSum)\r
-    Alignment = property(_GetAlignment)\r
-    State = property(_GetState, _SetState)\r
-\r
-\r
-## MultipleFv() class\r
-#\r
-#  A class for Multiple FV\r
-#\r
-class MultipleFv(FirmwareVolume):\r
-    def __init__(self, FvList):\r
-        FirmwareVolume.__init__(self)\r
-        self.BasicInfo = []\r
-        for FvPath in FvList:\r
-            Fd = None\r
-            FvName = os.path.splitext(os.path.split(FvPath)[1])[0]\r
-            if FvPath.strip():\r
-                Fd = open(FvPath, 'rb')\r
-            Buf = array('B')\r
-            try:\r
-                Buf.fromfile(Fd, os.path.getsize(FvPath))\r
-            except EOFError:\r
-                pass\r
-\r
-            Fv = FirmwareVolume(FvName)\r
-            Fv.frombuffer(Buf, 0, len(Buf))\r
-\r
-            self.BasicInfo.append([Fv.Name, Fv.FileSystemGuid, Fv.Size])\r
-            self.FfsDict.append(Fv.FfsDict)\r
-\r
-## Class Eot\r
-#\r
-# This class is used to define Eot main entrance\r
-#\r
-# @param object:          Inherited from object class\r
-#\r
-class Eot(object):\r
-    ## The constructor\r
-    #\r
-    #   @param  self:      The object pointer\r
-    #\r
-    def __init__(self, CommandLineOption=True, IsInit=True, SourceFileList=None, \\r
-                 IncludeDirList=None, DecFileList=None, GuidList=None, LogFile=None,\r
-                 FvFileList="", MapFileList="", Report='Report.html', Dispatch=None):\r
-        # Version and Copyright\r
-        self.VersionNumber = ("0.02" + " " + gBUILD_VERSION)\r
-        self.Version = "%prog Version " + self.VersionNumber\r
-        self.Copyright = "Copyright (c) 2008 - 2018, Intel Corporation  All rights reserved."\r
-        self.Report = Report\r
-\r
-        self.IsInit = IsInit\r
-        self.SourceFileList = SourceFileList\r
-        self.IncludeDirList = IncludeDirList\r
-        self.DecFileList = DecFileList\r
-        self.GuidList = GuidList\r
-        self.LogFile = LogFile\r
-        self.FvFileList = FvFileList\r
-        self.MapFileList = MapFileList\r
-        self.Dispatch = Dispatch\r
-\r
-        # Check workspace environment\r
-        if "EFI_SOURCE" not in os.environ:\r
-            if "EDK_SOURCE" not in os.environ:\r
-                pass\r
-            else:\r
-                EotGlobalData.gEDK_SOURCE = os.path.normpath(os.getenv("EDK_SOURCE"))\r
-        else:\r
-            EotGlobalData.gEFI_SOURCE = os.path.normpath(os.getenv("EFI_SOURCE"))\r
-            EotGlobalData.gEDK_SOURCE = os.path.join(EotGlobalData.gEFI_SOURCE, 'Edk')\r
-\r
-        if "WORKSPACE" not in os.environ:\r
-            EdkLogger.error("EOT", BuildToolError.ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found",\r
-                            ExtraData="WORKSPACE")\r
-        else:\r
-            EotGlobalData.gWORKSPACE = os.path.normpath(os.getenv("WORKSPACE"))\r
-\r
-        EotGlobalData.gMACRO['WORKSPACE'] = EotGlobalData.gWORKSPACE\r
-        EotGlobalData.gMACRO['EFI_SOURCE'] = EotGlobalData.gEFI_SOURCE\r
-        EotGlobalData.gMACRO['EDK_SOURCE'] = EotGlobalData.gEDK_SOURCE\r
-\r
-        # Parse the options and args\r
-        if CommandLineOption:\r
-            self.ParseOption()\r
-\r
-        if self.FvFileList:\r
-            for FvFile in GetSplitValueList(self.FvFileList, ' '):\r
-                FvFile = os.path.normpath(FvFile)\r
-                if not os.path.isfile(FvFile):\r
-                    EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "Can not find file %s " % FvFile)\r
-                EotGlobalData.gFV_FILE.append(FvFile)\r
-        else:\r
-            EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "The fv file list of target platform was not specified")\r
-\r
-        if self.MapFileList:\r
-            for MapFile in GetSplitValueList(self.MapFileList, ' '):\r
-                MapFile = os.path.normpath(MapFile)\r
-                if not os.path.isfile(MapFile):\r
-                    EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "Can not find file %s " % MapFile)\r
-                EotGlobalData.gMAP_FILE.append(MapFile)\r
-\r
-        # Generate source file list\r
-        self.GenerateSourceFileList(self.SourceFileList, self.IncludeDirList)\r
-\r
-        # Generate guid list of dec file list\r
-        self.ParseDecFile(self.DecFileList)\r
-\r
-        # Generate guid list from GUID list file\r
-        self.ParseGuidList(self.GuidList)\r
-\r
-        # Init Eot database\r
-        EotGlobalData.gDb = Database.Database(Database.DATABASE_PATH)\r
-        EotGlobalData.gDb.InitDatabase(self.IsInit)\r
-\r
-        # Build ECC database\r
-        self.BuildDatabase()\r
-\r
-        # Parse Ppi/Protocol\r
-        self.ParseExecutionOrder()\r
-\r
-        # Merge Identifier tables\r
-        self.GenerateQueryTable()\r
-\r
-        # Generate report database\r
-        self.GenerateReportDatabase()\r
-\r
-        # Load Fv Info\r
-        self.LoadFvInfo()\r
-\r
-        # Load Map Info\r
-        self.LoadMapInfo()\r
-\r
-        # Generate Report\r
-        self.GenerateReport()\r
-\r
-        # Convert log file\r
-        self.ConvertLogFile(self.LogFile)\r
-\r
-        # DONE\r
-        EdkLogger.quiet("EOT FINISHED!")\r
-\r
-        # Close Database\r
-        EotGlobalData.gDb.Close()\r
-\r
-    ## ParseDecFile() method\r
-    #\r
-    #  parse DEC file and get all GUID names with GUID values as {GuidName : GuidValue}\r
-    #  The Dict is stored in EotGlobalData.gGuidDict\r
-    #\r
-    #  @param self: The object pointer\r
-    #  @param DecFileList: A list of all DEC files\r
-    #\r
-    def ParseDecFile(self, DecFileList):\r
-        if DecFileList:\r
-            path = os.path.normpath(DecFileList)\r
-            lfr = open(path, 'rb')\r
-            for line in lfr:\r
-                path = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip()))\r
-                if os.path.exists(path):\r
-                    dfr = open(path, 'rb')\r
-                    for line in dfr:\r
-                        line = CleanString(line)\r
-                        list = line.split('=')\r
-                        if len(list) == 2:\r
-                            EotGlobalData.gGuidDict[list[0].strip()] = GuidStructureStringToGuidString(list[1].strip())\r
-\r
-\r
-    ## ParseGuidList() method\r
-    #\r
-    #  Parse Guid list and get all GUID names with GUID values as {GuidName : GuidValue}\r
-    #  The Dict is stored in EotGlobalData.gGuidDict\r
-    #\r
-    #  @param self: The object pointer\r
-    #  @param GuidList: A list of all GUID and its value\r
-    #\r
-    def ParseGuidList(self, GuidList):\r
-        Path = os.path.join(EotGlobalData.gWORKSPACE, GuidList)\r
-        if os.path.isfile(Path):\r
-            for Line in open(Path):\r
-                if Line.strip():\r
-                    (GuidName, GuidValue) = Line.split()\r
-                    EotGlobalData.gGuidDict[GuidName] = GuidValue\r
-\r
-    ## ConvertLogFile() method\r
-    #\r
-    #  Parse a real running log file to get real dispatch order\r
-    #  The result is saved to old file name + '.new'\r
-    #\r
-    #  @param self: The object pointer\r
-    #  @param LogFile: A real running log file name\r
-    #\r
-    def ConvertLogFile(self, LogFile):\r
-        newline = []\r
-        lfr = None\r
-        lfw = None\r
-        if LogFile:\r
-            lfr = open(LogFile, 'rb')\r
-            lfw = open(LogFile + '.new', 'wb')\r
-            for line in lfr:\r
-                line = line.strip()\r
-                line = line.replace('.efi', '')\r
-                index = line.find("Loading PEIM at ")\r
-                if index > -1:\r
-                    newline.append(line[index + 55 : ])\r
-                    continue\r
-                index = line.find("Loading driver at ")\r
-                if index > -1:\r
-                    newline.append(line[index + 57 : ])\r
-                    continue\r
-\r
-        for line in newline:\r
-            lfw.write(line + '\r\n')\r
-\r
-        if lfr:\r
-            lfr.close()\r
-        if lfw:\r
-            lfw.close()\r
-\r
-    ## GenerateSourceFileList() method\r
-    #\r
-    #  Generate a list of all source files\r
-    #  1. Search the file list one by one\r
-    #  2. Store inf file name with source file names under it like\r
-    #  { INF file name: [source file1, source file2, ...]}\r
-    #  3. Search the include list to find all .h files\r
-    #  4. Store source file list to EotGlobalData.gSOURCE_FILES\r
-    #  5. Store INF file list to EotGlobalData.gINF_FILES\r
-    #\r
-    #  @param self: The object pointer\r
-    #  @param SourceFileList: A list of all source files\r
-    #  @param IncludeFileList: A list of all include files\r
-    #\r
-    def GenerateSourceFileList(self, SourceFileList, IncludeFileList):\r
-        EdkLogger.quiet("Generating source files list ... ")\r
-        mSourceFileList = []\r
-        mInfFileList = []\r
-        mDecFileList = []\r
-        mFileList = {}\r
-        mCurrentInfFile = ''\r
-        mCurrentSourceFileList = []\r
-\r
-        if SourceFileList:\r
-            sfl = open(SourceFileList, 'r')\r
-            for line in sfl:\r
-                line = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip()))\r
-                if line[-2:].upper() == '.C' or  line[-2:].upper() == '.H':\r
-                    if line not in mCurrentSourceFileList:\r
-                        mCurrentSourceFileList.append(line)\r
-                        mSourceFileList.append(line)\r
-                        EotGlobalData.gOP_SOURCE_FILES.write('%s\n' % line)\r
-                if line[-4:].upper() == '.INF':\r
-                    if mCurrentInfFile != '':\r
-                        mFileList[mCurrentInfFile] = mCurrentSourceFileList\r
-                        mCurrentSourceFileList = []\r
-                    mCurrentInfFile = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line))\r
-                    EotGlobalData.gOP_INF.write('%s\n' % mCurrentInfFile)\r
-            if mCurrentInfFile not in mFileList:\r
-                mFileList[mCurrentInfFile] = mCurrentSourceFileList\r
-\r
-        # Get all include files from packages\r
-        if IncludeFileList:\r
-            ifl = open(IncludeFileList, 'rb')\r
-            for line in ifl:\r
-                if not line.strip():\r
-                    continue\r
-                newline = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip()))\r
-                for Root, Dirs, Files in os.walk(str(newline)):\r
-                    for File in Files:\r
-                        FullPath = os.path.normpath(os.path.join(Root, File))\r
-                        if FullPath not in mSourceFileList and File[-2:].upper() == '.H':\r
-                            mSourceFileList.append(FullPath)\r
-                            EotGlobalData.gOP_SOURCE_FILES.write('%s\n' % FullPath)\r
-                        if FullPath not in mDecFileList and File.upper().find('.DEC') > -1:\r
-                            mDecFileList.append(FullPath)\r
-\r
-        EotGlobalData.gSOURCE_FILES = mSourceFileList\r
-        EotGlobalData.gOP_SOURCE_FILES.close()\r
-\r
-        EotGlobalData.gINF_FILES = mFileList\r
-        EotGlobalData.gOP_INF.close()\r
-\r
-    ## GenerateReport() method\r
-    #\r
-    #  Generate final HTML report\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    def GenerateReport(self):\r
-        EdkLogger.quiet("Generating report file ... ")\r
-        Rep = Report(self.Report, EotGlobalData.gFV, self.Dispatch)\r
-        Rep.GenerateReport()\r
-\r
-    ## LoadMapInfo() method\r
-    #\r
-    #  Load map files and parse them\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    def LoadMapInfo(self):\r
-        if EotGlobalData.gMAP_FILE != []:\r
-            EdkLogger.quiet("Parsing Map file ... ")\r
-            EotGlobalData.gMap = ParseMapFile(EotGlobalData.gMAP_FILE)\r
-\r
-    ## LoadFvInfo() method\r
-    #\r
-    #  Load FV binary files and parse them\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    def LoadFvInfo(self):\r
-        EdkLogger.quiet("Parsing FV file ... ")\r
-        EotGlobalData.gFV = MultipleFv(EotGlobalData.gFV_FILE)\r
-        EotGlobalData.gFV.Dispatch(EotGlobalData.gDb)\r
-\r
-        for Protocol in EotGlobalData.gProtocolList:\r
-            EotGlobalData.gOP_UN_MATCHED_IN_LIBRARY_CALLING.write('%s\n' %Protocol)\r
-\r
-    ## GenerateReportDatabase() method\r
-    #\r
-    #  Generate data for the information needed by report\r
-    #  1. Update name, macro and value of all found PPI/PROTOCOL GUID\r
-    #  2. Install hard coded PPI/PROTOCOL\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    def GenerateReportDatabase(self):\r
-        EdkLogger.quiet("Generating the cross-reference table of GUID for Ppi/Protocol ... ")\r
-\r
-        # Update Protocol/Ppi Guid\r
-        SqlCommand = """select DISTINCT GuidName from Report"""\r
-        RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
-        for Record in RecordSet:\r
-            GuidName = Record[0]\r
-            GuidMacro = ''\r
-            GuidMacro2 = ''\r
-            GuidValue = ''\r
-\r
-            # Find guid value defined in Dec file\r
-            if GuidName in EotGlobalData.gGuidDict:\r
-                GuidValue = EotGlobalData.gGuidDict[GuidName]\r
-                SqlCommand = """update Report set GuidMacro = '%s', GuidValue = '%s' where GuidName = '%s'""" %(GuidMacro, GuidValue, GuidName)\r
-                EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
-                continue\r
-\r
-            # Search defined Macros for guid name\r
-            SqlCommand ="""select DISTINCT Value, Modifier from Query where Name like '%s'""" % GuidName\r
-            GuidMacroSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
-            # Ignore NULL result\r
-            if not GuidMacroSet:\r
-                continue\r
-            GuidMacro = GuidMacroSet[0][0].strip()\r
-            if not GuidMacro:\r
-                continue\r
-            # Find Guid value of Guid Macro\r
-            SqlCommand ="""select DISTINCT Value from Query2 where Value like '%%%s%%' and Model = %s""" % (GuidMacro, MODEL_IDENTIFIER_MACRO_DEFINE)\r
-            GuidValueSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
-            if GuidValueSet != []:\r
-                GuidValue = GuidValueSet[0][0]\r
-                GuidValue = GuidValue[GuidValue.find(GuidMacro) + len(GuidMacro) :]\r
-                GuidValue = GuidValue.lower().replace('\\', '').replace('\r', '').replace('\n', '').replace('l', '').strip()\r
-                GuidValue = GuidStructureStringToGuidString(GuidValue)\r
-                SqlCommand = """update Report set GuidMacro = '%s', GuidValue = '%s' where GuidName = '%s'""" %(GuidMacro, GuidValue, GuidName)\r
-                EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
-                continue\r
-\r
-        # Update Hard Coded Ppi/Protocol\r
-        SqlCommand = """select DISTINCT GuidValue, ItemType from Report where ModuleID = -2 and ItemMode = 'Produced'"""\r
-        RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
-        for Record in RecordSet:\r
-            if Record[1] == 'Ppi':\r
-                EotGlobalData.gPpiList[Record[0].lower()] = -2\r
-            if Record[1] == 'Protocol':\r
-                EotGlobalData.gProtocolList[Record[0].lower()] = -2\r
-\r
-    ## GenerateQueryTable() method\r
-    #\r
-    #  Generate two tables improve query performance\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    def GenerateQueryTable(self):\r
-        EdkLogger.quiet("Generating temp query table for analysis ... ")\r
-        for Identifier in EotGlobalData.gIdentifierTableList:\r
-            SqlCommand = """insert into Query (Name, Modifier, Value, Model)\r
-                            select Name, Modifier, Value, Model from %s where (Model = %s or Model = %s)""" \\r
-                            % (Identifier[0], MODEL_IDENTIFIER_VARIABLE, MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION)\r
-            EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
-            SqlCommand = """insert into Query2 (Name, Modifier, Value, Model)\r
-                            select Name, Modifier, Value, Model from %s where Model = %s""" \\r
-                            % (Identifier[0], MODEL_IDENTIFIER_MACRO_DEFINE)\r
-            EotGlobalData.gDb.TblReport.Exec(SqlCommand)\r
-\r
-    ## ParseExecutionOrder() method\r
-    #\r
-    #  Get final execution order\r
-    #  1. Search all PPI\r
-    #  2. Search all PROTOCOL\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    def ParseExecutionOrder(self):\r
-        EdkLogger.quiet("Searching Ppi/Protocol ... ")\r
-        for Identifier in EotGlobalData.gIdentifierTableList:\r
-            ModuleID, ModuleName, ModuleGuid, SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, Enabled = \\r
-            -1, '', '', -1, '', '', '', '', '', '', '', '', 0\r
-\r
-            SourceFileID = Identifier[0].replace('Identifier', '')\r
-            SourceFileFullPath = Identifier[1]\r
-            Identifier = Identifier[0]\r
-\r
-            # Find Ppis\r
-            ItemMode = 'Produced'\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.InstallPpi', '->InstallPpi', 'PeiInstallPpi', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode)\r
-\r
-            ItemMode = 'Produced'\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.ReInstallPpi', '->ReInstallPpi', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 2)\r
-\r
-            SearchPpiCallFunction(Identifier, SourceFileID, SourceFileFullPath, ItemMode)\r
-\r
-            ItemMode = 'Consumed'\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.LocatePpi', '->LocatePpi', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode)\r
-\r
-            SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Ppi', ItemMode)\r
-\r
-            ItemMode = 'Callback'\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.NotifyPpi', '->NotifyPpi', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode)\r
-\r
-            # Find Procotols\r
-            ItemMode = 'Produced'\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.InstallProtocolInterface', '.ReInstallProtocolInterface', '->InstallProtocolInterface', '->ReInstallProtocolInterface', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 1)\r
-\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.InstallMultipleProtocolInterfaces', '->InstallMultipleProtocolInterfaces', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 2)\r
-\r
-            SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode)\r
-\r
-            ItemMode = 'Consumed'\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.LocateProtocol', '->LocateProtocol', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 0)\r
-\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.HandleProtocol', '->HandleProtocol', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 1)\r
-\r
-            SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode)\r
-\r
-            ItemMode = 'Callback'\r
-            SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s\r
-                            where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \\r
-                            % (Identifier, '.RegisterProtocolNotify', '->RegisterProtocolNotify', MODEL_IDENTIFIER_FUNCTION_CALLING)\r
-            SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 0)\r
-\r
-            SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode)\r
-\r
-        # Hard Code\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gEfiSecPlatformInformationPpiGuid', '', '', '', 0)\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gEfiNtLoadAsDllPpiGuid', '', '', '', 0)\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gNtPeiLoadFileGuid', '', '', '', 0)\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiNtAutoScanPpiGuid', '', '', '', 0)\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gNtFwhPpiGuid', '', '', '', 0)\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiNtThunkPpiGuid', '', '', '', 0)\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiPlatformTypePpiGuid', '', '', '', 0)\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiFrequencySelectionCpuPpiGuid', '', '', '', 0)\r
-        EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiCachePpiGuid', '', '', '', 0)\r
-\r
-        EotGlobalData.gDb.Conn.commit()\r
-\r
-\r
-    ## BuildDatabase() methoc\r
-    #\r
-    #  Build the database for target\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    def BuildDatabase(self):\r
-        # Clean report table\r
-        EotGlobalData.gDb.TblReport.Drop()\r
-        EotGlobalData.gDb.TblReport.Create()\r
-\r
-        # Build database\r
-        if self.IsInit:\r
-            self.BuildMetaDataFileDatabase(EotGlobalData.gINF_FILES)\r
-            EdkLogger.quiet("Building database for source code ...")\r
-            c.CreateCCodeDB(EotGlobalData.gSOURCE_FILES)\r
-            EdkLogger.quiet("Building database for source code done!")\r
-\r
-        EotGlobalData.gIdentifierTableList = GetTableList((MODEL_FILE_C, MODEL_FILE_H), 'Identifier', EotGlobalData.gDb)\r
-\r
-    ## BuildMetaDataFileDatabase() method\r
-    #\r
-    #  Build the database for meta data files\r
-    #\r
-    #  @param self: The object pointer\r
-    #  @param Inf_Files: A list for all INF files\r
-    #\r
-    def BuildMetaDataFileDatabase(self, Inf_Files):\r
-        EdkLogger.quiet("Building database for meta data files ...")\r
-        for InfFile in Inf_Files:\r
-            if not InfFile:\r
-                continue\r
-            EdkLogger.quiet("Parsing %s ..."  % str(InfFile))\r
-            EdkInfParser(InfFile, EotGlobalData.gDb, Inf_Files[InfFile], '')\r
-\r
-        EotGlobalData.gDb.Conn.commit()\r
-        EdkLogger.quiet("Building database for meta data files done!")\r
-\r
-    ## ParseOption() method\r
-    #\r
-    #  Parse command line options\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    def ParseOption(self):\r
-        (Options, Target) = self.EotOptionParser()\r
-\r
-        # Set log level\r
-        self.SetLogLevel(Options)\r
-\r
-        if Options.FvFileList:\r
-            self.FvFileList = Options.FvFileList\r
-\r
-        if Options.MapFileList:\r
-            self.MapFileList = Options.FvMapFileList\r
-\r
-        if Options.SourceFileList:\r
-            self.SourceFileList = Options.SourceFileList\r
-\r
-        if Options.IncludeDirList:\r
-            self.IncludeDirList = Options.IncludeDirList\r
-\r
-        if Options.DecFileList:\r
-            self.DecFileList = Options.DecFileList\r
-\r
-        if Options.GuidList:\r
-            self.GuidList = Options.GuidList\r
-\r
-        if Options.LogFile:\r
-            self.LogFile = Options.LogFile\r
-\r
-        if Options.keepdatabase:\r
-            self.IsInit = False\r
-\r
-    ## SetLogLevel() method\r
-    #\r
-    #  Set current log level of the tool based on args\r
-    #\r
-    #  @param self: The object pointer\r
-    #  @param Option: The option list including log level setting\r
-    #\r
-    def SetLogLevel(self, Option):\r
-        if Option.verbose is not None:\r
-            EdkLogger.SetLevel(EdkLogger.VERBOSE)\r
-        elif Option.quiet is not None:\r
-            EdkLogger.SetLevel(EdkLogger.QUIET)\r
-        elif Option.debug is not None:\r
-            EdkLogger.SetLevel(Option.debug + 1)\r
-        else:\r
-            EdkLogger.SetLevel(EdkLogger.INFO)\r
-\r
-    ## EotOptionParser() method\r
-    #\r
-    #  Using standard Python module optparse to parse command line option of this tool.\r
-    #\r
-    #  @param self: The object pointer\r
-    #\r
-    #  @retval Opt   A optparse.Values object containing the parsed options\r
-    #  @retval Args  Target of build command\r
-    #\r
-    def EotOptionParser(self):\r
-        Parser = OptionParser(description = self.Copyright, version = self.Version, prog = "Eot.exe", usage = "%prog [options]")\r
-        Parser.add_option("-m", "--makefile filename", action="store", type="string", dest='MakeFile',\r
-            help="Specify a makefile for the platform.")\r
-        Parser.add_option("-c", "--dsc filename", action="store", type="string", dest="DscFile",\r
-            help="Specify a dsc file for the platform.")\r
-        Parser.add_option("-f", "--fv filename", action="store", type="string", dest="FvFileList",\r
-            help="Specify fv file list, quoted by \"\".")\r
-        Parser.add_option("-a", "--map filename", action="store", type="string", dest="MapFileList",\r
-            help="Specify map file list, quoted by \"\".")\r
-        Parser.add_option("-s", "--source files", action="store", type="string", dest="SourceFileList",\r
-            help="Specify source file list by a file")\r
-        Parser.add_option("-i", "--include dirs", action="store", type="string", dest="IncludeDirList",\r
-            help="Specify include dir list by a file")\r
-        Parser.add_option("-e", "--dec files", action="store", type="string", dest="DecFileList",\r
-            help="Specify dec file list by a file")\r
-        Parser.add_option("-g", "--guid list", action="store", type="string", dest="GuidList",\r
-            help="Specify guid file list by a file")\r
-        Parser.add_option("-l", "--log filename", action="store", type="string", dest="LogFile",\r
-            help="Specify real execution log file")\r
-\r
-        Parser.add_option("-k", "--keepdatabase", action="store_true", type=None, help="The existing Eot database will not be cleaned except report information if this option is specified.")\r
-\r
-        Parser.add_option("-q", "--quiet", action="store_true", type=None, help="Disable all messages except FATAL ERRORS.")\r
-        Parser.add_option("-v", "--verbose", action="store_true", type=None, help="Turn on verbose output with informational messages printed, "\\r
-                                                                                   "including library instances selected, final dependency expression, "\\r
-                                                                                   "and warning messages, etc.")\r
-        Parser.add_option("-d", "--debug", action="store", type="int", help="Enable debug messages at specified level.")\r
-\r
-        (Opt, Args)=Parser.parse_args()\r
-\r
-        return (Opt, Args)\r
-\r
-##\r
-#\r
-# This acts like the main() function for the script, unless it is 'import'ed into another\r
-# script.\r
-#\r
-if __name__ == '__main__':\r
-    # Initialize log system\r
-    EdkLogger.Initialize()\r
-    EdkLogger.IsRaiseError = False\r
-    EdkLogger.quiet(time.strftime("%H:%M:%S, %b.%d %Y ", time.localtime()) + "[00:00]" + "\n")\r
-\r
-    StartTime = time.clock()\r
-    Eot = Eot(CommandLineOption=False,\r
-              SourceFileList=r'C:\TestEot\Source.txt',\r
-              GuidList=r'C:\TestEot\Guid.txt',\r
-              FvFileList=r'C:\TestEot\FVRECOVERY.Fv')\r
-    FinishTime = time.clock()\r
-\r
-    BuildDuration = time.strftime("%M:%S", time.gmtime(int(round(FinishTime - StartTime))))\r
-    EdkLogger.quiet("\n%s [%s]" % (time.strftime("%H:%M:%S, %b.%d %Y", time.localtime()), BuildDuration))\r
index 7de88990e4536c929e53953522d9a640e90df5e5..88d7e7d58e0bbe022240c83382c8693ccdd2544a 100644 (file)
@@ -22,8 +22,8 @@ from Common.DataType import *
 from CommonDataClass.DataClass import *\r
 from Common.Identification import *\r
 from Common.StringUtils import *\r
-from Eot.Parser import *\r
-from Eot import Database\r
+from .Parser import *\r
+from . import Database\r
 \r
 ## EdkInfParser() class\r
 #\r
@@ -153,3 +153,21 @@ class EdkInfParser(object):
         self.ParserSource(CurrentSection, SectionItemList, ArchList, ThirdList)\r
         #End of For\r
 \r
+##\r
+#\r
+# This acts like the main() function for the script, unless it is 'import'ed into another\r
+# script.\r
+#\r
+if __name__ == '__main__':\r
+    EdkLogger.Initialize()\r
+    EdkLogger.SetLevel(EdkLogger.QUIET)\r
+\r
+    Db = Database.Database('Inf.db')\r
+    Db.InitDatabase()\r
+    P = EdkInfParser(os.path.normpath("C:\Framework\Edk\Sample\Platform\Nt32\Dxe\PlatformBds\PlatformBds.inf"), Db, '', '')\r
+    for Inf in P.Sources:\r
+        print(Inf)\r
+    for Item in P.Macros:\r
+        print(Item, P.Macros[Item])\r
+\r
+    Db.Close()\r
index 04afa8f2b8f47268b11132535b3c179ea605a7a2..e01a9770befbc7d3340d79c41e153b67571184ae 100644 (file)
@@ -2,7 +2,7 @@
 # This file is used to define common parsing related functions used in parsing\r
 # Inf/Dsc/Makefile process\r
 #\r
-# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
 # This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.  The full text of the license may be found at\r
@@ -25,32 +25,6 @@ from . import EotGlobalData
 from Common.StringUtils import GetSplitList\r
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 \r
-import subprocess\r
-\r
-## DeCompress\r
-#\r
-# Call external decompress tool to decompress the fv section\r
-#\r
-def DeCompress(Method, Input):\r
-    # Write the input to a temp file\r
-    open('_Temp.bin', 'wb').write(Input)\r
-    cmd = ''\r
-    if Method == 'Lzma':\r
-        cmd = r'LzmaCompress -o _New.bin -d _Temp.bin'\r
-    if Method == 'Efi':\r
-        cmd = r'TianoCompress -d --uefi -o _New.bin _Temp.bin'\r
-    if Method == 'Framework':\r
-        cmd = r'TianoCompress -d -o _New.bin _Temp.bin'\r
-\r
-    # Call tool to create the decompressed output file\r
-    Process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)\r
-    Process.communicate()[0]\r
-\r
-    # Return the beffer of New.bin\r
-    if os.path.exists('New.bin'):\r
-        return open('New.bin', 'rb').read()\r
-\r
-\r
 ## PreProcess() method\r
 #\r
 #  Pre process a file\r
index 01ad86ad3ee831e5a988c7b00291ba7002dfcb3e..4ddddb1034013670bafb10ee78c095c45a285475 100644 (file)
@@ -77,7 +77,7 @@ class Report(object):
     def GenerateUnDispatchedList(self):\r
         FvObj = self.FvObj\r
         EotGlobalData.gOP_UN_DISPATCHED.write('%s\n' % FvObj.Name)\r
-        for Item in FvObj.UnDispatchedFfsDict.keys():\r
+        for Item in FvObj.UnDispatchedFfsDict:\r
             EotGlobalData.gOP_UN_DISPATCHED.write('%s\n' % FvObj.UnDispatchedFfsDict[Item])\r
 \r
     ## GenerateFv() method\r
@@ -112,7 +112,7 @@ class Report(object):
         self.WriteLn(Content)\r
 \r
         EotGlobalData.gOP_DISPATCH_ORDER.write('Dispatched:\n')\r
-        for FfsId in FvObj.OrderedFfsDict.keys():\r
+        for FfsId in FvObj.OrderedFfsDict:\r
             self.GenerateFfs(FvObj.OrderedFfsDict[FfsId])\r
         Content = """     </table></td>\r
   </tr>"""\r
@@ -125,7 +125,7 @@ class Report(object):
         self.WriteLn(Content)\r
 \r
         EotGlobalData.gOP_DISPATCH_ORDER.write('\nUnDispatched:\n')\r
-        for FfsId in FvObj.UnDispatchedFfsDict.keys():\r
+        for FfsId in FvObj.UnDispatchedFfsDict:\r
             self.GenerateFfs(FvObj.UnDispatchedFfsDict[FfsId])\r
         Content = """     </table></td>\r
   </tr>"""\r
index 13142ef7c071a91e95c9645c30c0b8e8b7cd1254..7196f7f2c753c53eef0e0962b1428d3093cecfb4 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from struct import *\r
 import Common.LongFilePathOs as os\r
 from io import BytesIO\r
@@ -51,7 +52,7 @@ class AprioriSection (AprioriSectionClassObject):
     def GenFfs (self, FvName, Dict = {}, IsMakefile = False):\r
         DXE_GUID = "FC510EE7-FFDC-11D4-BD41-0080C73C8881"\r
         PEI_GUID = "1B45CC0A-156A-428A-AF62-49864DA0E6E6"\r
-        Buffer = BytesIO()\r
+        Buffer = BytesIO('')\r
         AprioriFileGuid = DXE_GUID\r
         if self.AprioriType == "PEI":\r
             AprioriFileGuid = PEI_GUID\r
@@ -96,7 +97,7 @@ class AprioriSection (AprioriSectionClassObject):
 \r
 \r
             GuidPart = Guid.split('-')\r
-            Buffer.write(pack('I', int(GuidPart[0], 16)))\r
+            Buffer.write(pack('I', long(GuidPart[0], 16)))\r
             Buffer.write(pack('H', int(GuidPart[1], 16)))\r
             Buffer.write(pack('H', int(GuidPart[2], 16)))\r
 \r
index 1c673949fa8009b8b6cd621aac6f290a1e898764..baa6e1dfa2ab8bc31f61aaaca0b8c0bc501ef82f 100644 (file)
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
 from .GenFdsGlobalVariable import FindExtendTool\r
 from CommonDataClass.FdfClass import CapsuleClassObject\r
 import Common.LongFilePathOs as os\r
 import subprocess\r
 from io import BytesIO\r
-from io import StringIO\r
 from Common.Misc import SaveFileOnChange\r
 from Common.Misc import PackRegistryFormatGuid\r
 import uuid\r
@@ -185,7 +185,7 @@ class Capsule (CapsuleClassObject) :
         #\r
         # The real capsule header structure is 28 bytes\r
         #\r
-        Header.write(b'\x00'*(HdrSize-28))\r
+        Header.write('\x00'*(HdrSize-28))\r
         Header.write(FwMgrHdr.getvalue())\r
         Header.write(Content.getvalue())\r
         #\r
@@ -247,7 +247,7 @@ class Capsule (CapsuleClassObject) :
     def GenCapInf(self):\r
         self.CapInfFileName = os.path.join(GenFdsGlobalVariable.FvDir,\r
                                    self.UiCapsuleName +  "_Cap" + '.inf')\r
-        CapInfFile = StringIO() #open (self.CapInfFileName , 'w+')\r
+        CapInfFile = BytesIO() #open (self.CapInfFileName , 'w+')\r
 \r
         CapInfFile.writelines("[options]" + T_CHAR_LF)\r
 \r
index 5f93734935c2921015871941246fc06864489de6..0caba8983d2e1b35f5d937910100a5e245472339 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Ffs\r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
 from io import BytesIO\r
@@ -82,7 +83,7 @@ class CapsuleFv (CapsuleData):
         if self.FvName.find('.fv') == -1:\r
             if self.FvName.upper() in GenFdsGlobalVariable.FdfParser.Profile.FvDict:\r
                 FvObj = GenFdsGlobalVariable.FdfParser.Profile.FvDict[self.FvName.upper()]\r
-                FdBuffer = BytesIO()\r
+                FdBuffer = BytesIO('')\r
                 FvObj.CapsuleName = self.CapsuleName\r
                 FvFile = FvObj.AddToBuffer(FdBuffer)\r
                 FvObj.CapsuleName = None\r
@@ -229,7 +230,7 @@ class CapsulePayload(CapsuleData):
                        )\r
         if AuthData:\r
             Buffer += pack('QIHH', AuthData[0], AuthData[1], AuthData[2], AuthData[3])\r
-            Buffer += uuid.UUID(AuthData[4]).bytes_le\r
+            Buffer += uuid.UUID(AuthData[4]).get_bytes_le()\r
 \r
         #\r
         # Append file content to the structure\r
index 65f678227583eca8e6825c634a3a522a0910489f..aaaabf84dca8268dea68246aefcc2e1a3692b8d0 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from .Ffs import Ffs\r
 from . import Section\r
 import subprocess\r
index 3302c140917f570512e5b884d3b905699b96e818..a6387b07c582b15fb06496276dca863b1b8d44ea 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Section\r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
 import subprocess\r
@@ -87,9 +88,9 @@ class DataSection (DataSectionClassObject):
             if ImageObj.SectionAlignment < 0x400:\r
                 self.Alignment = str (ImageObj.SectionAlignment)\r
             elif ImageObj.SectionAlignment < 0x100000:\r
-                self.Alignment = str (ImageObj.SectionAlignment // 0x400) + 'K'\r
+                self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'\r
             else:\r
-                self.Alignment = str (ImageObj.SectionAlignment // 0x100000) + 'M'\r
+                self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'\r
 \r
         NoStrip = True\r
         if self.SecType in (BINARY_FILE_TYPE_TE, BINARY_FILE_TYPE_PE32):\r
index 1868f0aab7f554c92ab3353066947a660c5f2273..b2d123bfc04578883016688bf00ded6e8faf4280 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Section\r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
 import subprocess\r
index 9fe7db3f46e034903c5d710a4e7f187d1f210b92..623b77d27427a83d42c75842a507718fc115da3f 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from struct import *\r
 from . import Section\r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
@@ -247,9 +248,9 @@ class EfiSection (EfiSectionClassObject):
                         if ImageObj.SectionAlignment < 0x400:\r
                             Align = str (ImageObj.SectionAlignment)\r
                         elif ImageObj.SectionAlignment < 0x100000:\r
-                            Align = str (ImageObj.SectionAlignment // 0x400) + 'K'\r
+                            Align = str (ImageObj.SectionAlignment / 0x400) + 'K'\r
                         else:\r
-                            Align = str (ImageObj.SectionAlignment // 0x100000) + 'M'\r
+                            Align = str (ImageObj.SectionAlignment / 0x100000) + 'M'\r
 \r
                     if File[(len(File)-4):] == '.efi':\r
                         MapFile = File.replace('.efi', '.map')\r
index 0ba6decc9eb59ade105fafad541235bac01773c8..bfae1217984a1a50825608cd8ecea6d8b51f8773 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Region\r
 from . import Fv\r
 import Common.LongFilePathOs as os\r
@@ -74,7 +75,7 @@ class FD(FDClassObject):
                 HasCapsuleRegion = True\r
                 break\r
         if HasCapsuleRegion:\r
-            TempFdBuffer = BytesIO()\r
+            TempFdBuffer = BytesIO('')\r
             PreviousRegionStart = -1\r
             PreviousRegionSize = 1\r
 \r
@@ -103,7 +104,7 @@ class FD(FDClassObject):
                 GenFdsGlobalVariable.VerboseLogger('Call each region\'s AddToBuffer function')\r
                 RegionObj.AddToBuffer (TempFdBuffer, self.BaseAddress, self.BlockSizeList, self.ErasePolarity, GenFdsGlobalVariable.ImageBinDict, self.vtfRawDict, self.DefineVarDict)\r
 \r
-        FdBuffer = BytesIO()\r
+        FdBuffer = BytesIO('')\r
         PreviousRegionStart = -1\r
         PreviousRegionSize = 1\r
         for RegionObj in self.RegionList :\r
index ff8ccf21bda5898794c1786238d5c72a76335d07..63687e98bb313ed50a9cdfe9b5a2c14298d5454b 100644 (file)
@@ -16,6 +16,8 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 import re\r
 \r
 from . import Fd\r
@@ -155,7 +157,7 @@ class IncludeFileProfile :
         self.FileName = FileName\r
         self.FileLinesList = []\r
         try:\r
-            fsock = open(FileName, "r")\r
+            fsock = open(FileName, "rb", 0)\r
             try:\r
                 self.FileLinesList = fsock.readlines()\r
                 for index, line in enumerate(self.FileLinesList):\r
@@ -216,7 +218,7 @@ class FileProfile :
     def __init__(self, FileName):\r
         self.FileLinesList = []\r
         try:\r
-            fsock = open(FileName, "r")\r
+            fsock = open(FileName, "rb", 0)\r
             try:\r
                 self.FileLinesList = fsock.readlines()\r
             finally:\r
@@ -1615,7 +1617,7 @@ class FdfParser:
                 self.SetPcdLocalation(pcdPair)\r
                 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
                 self.Profile.PcdFileLineDict[pcdPair] = FileLineTuple\r
-            Obj.Size = int(Size, 0)\r
+            Obj.Size = long(Size, 0)\r
             return True\r
 \r
         if self.__IsKeyword( "ErasePolarity"):\r
@@ -1651,7 +1653,7 @@ class FdfParser:
             if not self.__GetNextDecimalNumber() and not self.__GetNextHexNumber():\r
                 raise Warning("expected address", self.FileName, self.CurrentLineNumber)\r
 \r
-            BsAddress = int(self.__Token, 0)\r
+            BsAddress = long(self.__Token, 0)\r
             Obj.BsBaseAddress = BsAddress\r
 \r
         if self.__IsKeyword("RtBaseAddress"):\r
@@ -1661,7 +1663,7 @@ class FdfParser:
             if not self.__GetNextDecimalNumber() and not self.__GetNextHexNumber():\r
                 raise Warning("expected address", self.FileName, self.CurrentLineNumber)\r
 \r
-            RtAddress = int(self.__Token, 0)\r
+            RtAddress = long(self.__Token, 0)\r
             Obj.RtBaseAddress = RtAddress\r
 \r
     ## __GetBlockStatements() method\r
@@ -1709,7 +1711,7 @@ class FdfParser:
             self.SetPcdLocalation(PcdPair)\r
             FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
             self.Profile.PcdFileLineDict[PcdPair] = FileLineTuple\r
-        BlockSize = int(BlockSize, 0)\r
+        BlockSize = long(BlockSize, 0)\r
 \r
         BlockNumber = None\r
         if self.__IsKeyword( "NumBlocks"):\r
@@ -1719,7 +1721,7 @@ class FdfParser:
             if not self.__GetNextDecimalNumber() and not self.__GetNextHexNumber():\r
                 raise Warning("expected block numbers", self.FileName, self.CurrentLineNumber)\r
 \r
-            BlockNumber = int(self.__Token, 0)\r
+            BlockNumber = long(self.__Token, 0)\r
 \r
         Obj.BlockSizeList.append((BlockSize, BlockNumber, BlockSizePcd))\r
         return True\r
@@ -1828,7 +1830,7 @@ class FdfParser:
             Expr += CurCh\r
             self.__GetOneChar()\r
         try:\r
-            return int(\r
+            return long(\r
                 ValueExpression(Expr,\r
                                 self.__CollectMacroPcd()\r
                                 )(True), 0)\r
@@ -1876,7 +1878,7 @@ class FdfParser:
                            RegionOffsetPcdPattern.match(self.__CurrentLine()[self.CurrentOffsetWithinLine:]))\r
             if IsRegionPcd:\r
                 RegionObj.PcdOffset = self.__GetNextPcdSettings()\r
-                self.Profile.PcdDict[RegionObj.PcdOffset] = "0x%08X" % (RegionObj.Offset + int(Fd.BaseAddress, 0))\r
+                self.Profile.PcdDict[RegionObj.PcdOffset] = "0x%08X" % (RegionObj.Offset + long(Fd.BaseAddress, 0))\r
                 self.SetPcdLocalation(RegionObj.PcdOffset)\r
                 self.__PcdDict['%s.%s' % (RegionObj.PcdOffset[1], RegionObj.PcdOffset[0])] = "0x%x" % RegionObj.Offset\r
                 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
@@ -3231,9 +3233,9 @@ class FdfParser:
                     if FdfParser.__Verify(Name, Value, 'UINT64'):\r
                         FmpData.MonotonicCount = Value\r
                         if FmpData.MonotonicCount.upper().startswith('0X'):\r
-                            FmpData.MonotonicCount = (int)(FmpData.MonotonicCount, 16)\r
+                            FmpData.MonotonicCount = (long)(FmpData.MonotonicCount, 16)\r
                         else:\r
-                            FmpData.MonotonicCount = (int)(FmpData.MonotonicCount)\r
+                            FmpData.MonotonicCount = (long)(FmpData.MonotonicCount)\r
             if not self.__GetNextToken():\r
                 break\r
         else:\r
index 3daf75b20584ff15db1dd548d5d9bd66f80d2985..4c35aac76a000e016d4386a2b5b995103c4006ed 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Ffs\r
 from . import Rule\r
 import Common.LongFilePathOs as os\r
@@ -82,7 +83,7 @@ class FileStatement (FileStatementClassObject) :
         Dict.update(self.DefineVarDict)\r
         SectionAlignments = None\r
         if self.FvName is not None :\r
-            Buffer = BytesIO()\r
+            Buffer = BytesIO('')\r
             if self.FvName.upper() not in GenFdsGlobalVariable.FdfParser.Profile.FvDict:\r
                 EdkLogger.error("GenFds", GENFDS_ERROR, "FV (%s) is NOT described in FDF file!" % (self.FvName))\r
             Fv = GenFdsGlobalVariable.FdfParser.Profile.FvDict.get(self.FvName.upper())\r
@@ -99,7 +100,7 @@ class FileStatement (FileStatementClassObject) :
         elif self.FileName is not None:\r
             if hasattr(self, 'FvFileType') and self.FvFileType == 'RAW':\r
                 if isinstance(self.FileName, list) and isinstance(self.SubAlignment, list) and len(self.FileName) == len(self.SubAlignment):\r
-                    FileContent = BytesIO()\r
+                    FileContent = ''\r
                     MaxAlignIndex = 0\r
                     MaxAlignValue = 1\r
                     for Index, File in enumerate(self.FileName):\r
@@ -115,15 +116,15 @@ class FileStatement (FileStatementClassObject) :
                         if AlignValue > MaxAlignValue:\r
                             MaxAlignIndex = Index\r
                             MaxAlignValue = AlignValue\r
-                        FileContent.write(Content)\r
-                        if len(FileContent.getvalue()) % AlignValue != 0:\r
+                        FileContent += Content\r
+                        if len(FileContent) % AlignValue != 0:\r
                             Size = AlignValue - len(FileContent) % AlignValue\r
                             for i in range(0, Size):\r
-                                FileContent.write(pack('B', 0xFF))\r
+                                FileContent += pack('B', 0xFF)\r
 \r
-                    if FileContent.getvalue() != b'':\r
+                    if FileContent:\r
                         OutputRAWFile = os.path.join(GenFdsGlobalVariable.FfsDir, self.NameGuid, self.NameGuid + '.raw')\r
-                        SaveFileOnChange(OutputRAWFile, FileContent.getvalue(), True)\r
+                        SaveFileOnChange(OutputRAWFile, FileContent, True)\r
                         self.FileName = OutputRAWFile\r
                         self.SubAlignment = self.SubAlignment[MaxAlignIndex]\r
 \r
index 9ef03edeccf184755673f4b781c089799918b516..6149bc81b4ef53bbe70e0c2bcd8e18cbff1ac542 100644 (file)
@@ -16,6 +16,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Rule\r
 import Common.LongFilePathOs as os\r
 from io import BytesIO\r
@@ -770,9 +771,9 @@ class FfsInfStatement(FfsInfStatementClassObject):
                     if ImageObj.SectionAlignment < 0x400:\r
                         self.Alignment = str (ImageObj.SectionAlignment)\r
                     elif ImageObj.SectionAlignment < 0x100000:\r
-                        self.Alignment = str (ImageObj.SectionAlignment // 0x400) + 'K'\r
+                        self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'\r
                     else:\r
-                        self.Alignment = str (ImageObj.SectionAlignment // 0x100000) + 'M'\r
+                        self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'\r
 \r
                 if not NoStrip:\r
                     FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc')\r
@@ -812,9 +813,9 @@ class FfsInfStatement(FfsInfStatementClassObject):
                 if ImageObj.SectionAlignment < 0x400:\r
                     self.Alignment = str (ImageObj.SectionAlignment)\r
                 elif ImageObj.SectionAlignment < 0x100000:\r
-                    self.Alignment = str (ImageObj.SectionAlignment // 0x400) + 'K'\r
+                    self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'\r
                 else:\r
-                    self.Alignment = str (ImageObj.SectionAlignment // 0x100000) + 'M'\r
+                    self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'\r
 \r
             if not NoStrip:\r
                 FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc')\r
@@ -1073,7 +1074,7 @@ class FfsInfStatement(FfsInfStatementClassObject):
     def __GetBuildOutputMapFileVfrUniInfo(self, VfrUniBaseName):\r
         MapFileName = os.path.join(self.EfiOutputPath, self.BaseName + ".map")\r
         EfiFileName = os.path.join(self.EfiOutputPath, self.BaseName + ".efi")\r
-        return GetVariableOffset(MapFileName, EfiFileName, list(VfrUniBaseName.values()))\r
+        return GetVariableOffset(MapFileName, EfiFileName, VfrUniBaseName.values())\r
 \r
     ## __GenUniVfrOffsetFile() method\r
     #\r
@@ -1086,7 +1087,7 @@ class FfsInfStatement(FfsInfStatementClassObject):
     def __GenUniVfrOffsetFile(VfrUniOffsetList, UniVfrOffsetFileName):\r
 \r
         # Use a instance of StringIO to cache data\r
-        fStringIO = BytesIO()\r
+        fStringIO = BytesIO('')\r
 \r
         for Item in VfrUniOffsetList:\r
             if (Item[0].find("Strings") != -1):\r
@@ -1096,7 +1097,8 @@ class FfsInfStatement(FfsInfStatementClassObject):
                 # { 0x8913c5e0, 0x33f6, 0x4d86, { 0x9b, 0xf1, 0x43, 0xef, 0x89, 0xfc, 0x6, 0x66 } }\r
                 #\r
                 UniGuid = [0xe0, 0xc5, 0x13, 0x89, 0xf6, 0x33, 0x86, 0x4d, 0x9b, 0xf1, 0x43, 0xef, 0x89, 0xfc, 0x6, 0x66]\r
-                fStringIO.write(bytes(UniGuid))\r
+                UniGuid = [chr(ItemGuid) for ItemGuid in UniGuid]\r
+                fStringIO.write(''.join(UniGuid))\r
                 UniValue = pack ('Q', int (Item[1], 16))\r
                 fStringIO.write (UniValue)\r
             else:\r
@@ -1106,7 +1108,8 @@ class FfsInfStatement(FfsInfStatementClassObject):
                 # { 0xd0bc7cb4, 0x6a47, 0x495f, { 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2 } };\r
                 #\r
                 VfrGuid = [0xb4, 0x7c, 0xbc, 0xd0, 0x47, 0x6a, 0x5f, 0x49, 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2]\r
-                fStringIO.write(bytes(VfrGuid))\r
+                VfrGuid = [chr(ItemGuid) for ItemGuid in VfrGuid]\r
+                fStringIO.write(''.join(VfrGuid))\r
                 type (Item[1])\r
                 VfrValue = pack ('Q', int (Item[1], 16))\r
                 fStringIO.write (VfrValue)\r
index 3c3cd0b308042358984aff0a6a3f668a10f9762a..0d005ebf5bb630fa9e5a6124be2b690da4dd1e54 100644 (file)
@@ -1,3 +1,4 @@
+from __future__ import absolute_import\r
 ## @file\r
 # process FV generation\r
 #\r
@@ -18,7 +19,6 @@
 import Common.LongFilePathOs as os\r
 import subprocess\r
 from io import BytesIO\r
-from io import StringIO\r
 from struct import *\r
 \r
 from . import Ffs\r
@@ -205,16 +205,16 @@ class FV (FvClassObject):
                 # PI FvHeader is 0x48 byte\r
                 FvHeaderBuffer = FvFileObj.read(0x48)\r
                 # FV alignment position.\r
-                FvAlignmentValue = 1 << (FvHeaderBuffer[0x2E] & 0x1F)\r
+                FvAlignmentValue = 1 << (ord(FvHeaderBuffer[0x2E]) & 0x1F)\r
                 if FvAlignmentValue >= 0x400:\r
                     if FvAlignmentValue >= 0x100000:\r
                         if FvAlignmentValue >= 0x1000000:\r
                         #The max alignment supported by FFS is 16M.\r
                             self.FvAlignment = "16M"\r
                         else:\r
-                            self.FvAlignment = str(FvAlignmentValue // 0x100000) + "M"\r
+                            self.FvAlignment = str(FvAlignmentValue / 0x100000) + "M"\r
                     else:\r
-                        self.FvAlignment = str(FvAlignmentValue // 0x400) + "K"\r
+                        self.FvAlignment = str(FvAlignmentValue / 0x400) + "K"\r
                 else:\r
                     # FvAlignmentValue is less than 1K\r
                     self.FvAlignment = str (FvAlignmentValue)\r
@@ -265,7 +265,7 @@ class FV (FvClassObject):
         #\r
         self.InfFileName = os.path.join(GenFdsGlobalVariable.FvDir,\r
                                    self.UiFvName + '.inf')\r
-        self.FvInfFile = StringIO()\r
+        self.FvInfFile = BytesIO()\r
 \r
         #\r
         # Add [Options]\r
@@ -340,7 +340,7 @@ class FV (FvClassObject):
                 GenFdsGlobalVariable.ErrorLogger("FV Extension Header Entries declared for %s with no FvNameGuid declaration." % (self.UiFvName))\r
         else:\r
             TotalSize = 16 + 4\r
-            Buffer = bytearray()\r
+            Buffer = ''\r
             if self.UsedSizeEnable:\r
                 TotalSize += (4 + 4)\r
                 ## define EFI_FV_EXT_TYPE_USED_SIZE_TYPE 0x03\r
@@ -367,7 +367,7 @@ class FV (FvClassObject):
                 #\r
                 Buffer += (pack('HH', (FvUiLen + 16 + 4), 0x0002)\r
                            + PackGUID(Guid)\r
-                           + bytes(self.UiFvName, 'utf-8'))\r
+                           + self.UiFvName)\r
 \r
             for Index in range (0, len(self.FvExtEntryType)):\r
                 if self.FvExtEntryType[Index] == 'FILE':\r
index f15df235146ce7550a861407ea66094884ae94fb..04556fc870998ce1422fcd0638ffc5ef77b7485b 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Section\r
 from io import BytesIO\r
 from .Ffs import Ffs\r
@@ -70,7 +71,7 @@ class FvImageSection(FvImageSectionClassObject):
                     # PI FvHeader is 0x48 byte\r
                     FvHeaderBuffer = FvFileObj.read(0x48)\r
                     # FV alignment position.\r
-                    FvAlignmentValue = 1 << (FvHeaderBuffer[0x2E] & 0x1F)\r
+                    FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)\r
                     FvFileObj.close()\r
                 if FvAlignmentValue > MaxFvAlignment:\r
                     MaxFvAlignment = FvAlignmentValue\r
@@ -86,9 +87,9 @@ class FvImageSection(FvImageSectionClassObject):
                     if MaxFvAlignment >= 0x1000000:\r
                         self.Alignment = "16M"\r
                     else:\r
-                        self.Alignment = str(MaxFvAlignment // 0x100000) + "M"\r
+                        self.Alignment = str(MaxFvAlignment / 0x100000) + "M"\r
                 else:\r
-                    self.Alignment = str (MaxFvAlignment // 0x400) + "K"\r
+                    self.Alignment = str (MaxFvAlignment / 0x400) + "K"\r
             else:\r
                 # MaxFvAlignment is less than 1K\r
                 self.Alignment = str (MaxFvAlignment)\r
@@ -98,12 +99,10 @@ class FvImageSection(FvImageSectionClassObject):
         # Generate Fv\r
         #\r
         if self.FvName is not None:\r
-            Buffer = BytesIO()\r
+            Buffer = BytesIO('')\r
             Fv = GenFdsGlobalVariable.FdfParser.Profile.FvDict.get(self.FvName)\r
             if Fv is not None:\r
                 self.Fv = Fv\r
-                if not self.FvAddr and self.Fv.BaseAddress:\r
-                    self.FvAddr = self.Fv.BaseAddress\r
                 FvFileName = Fv.AddToBuffer(Buffer, self.FvAddr, MacroDict = Dict, Flag=IsMakefile)\r
                 if Fv.FvAlignment is not None:\r
                     if self.Alignment is None:\r
@@ -120,7 +119,7 @@ class FvImageSection(FvImageSectionClassObject):
                         # PI FvHeader is 0x48 byte\r
                         FvHeaderBuffer = FvFileObj.read(0x48)\r
                         # FV alignment position.\r
-                        FvAlignmentValue = 1 << (FvHeaderBuffer[0x2E] & 0x1F)\r
+                        FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)\r
                         # FvAlignmentValue is larger than or equal to 1K\r
                         if FvAlignmentValue >= 0x400:\r
                             if FvAlignmentValue >= 0x100000:\r
@@ -128,9 +127,9 @@ class FvImageSection(FvImageSectionClassObject):
                                 if FvAlignmentValue >= 0x1000000:\r
                                     self.Alignment = "16M"\r
                                 else:\r
-                                    self.Alignment = str(FvAlignmentValue // 0x100000) + "M"\r
+                                    self.Alignment = str(FvAlignmentValue / 0x100000) + "M"\r
                             else:\r
-                                self.Alignment = str (FvAlignmentValue // 0x400) + "K"\r
+                                self.Alignment = str (FvAlignmentValue / 0x400) + "K"\r
                         else:\r
                             # FvAlignmentValue is less than 1K\r
                             self.Alignment = str (FvAlignmentValue)\r
index 32824ae80ec365e0a940fd411e12b6723ad2fe60..9dec9c5eb57d3885ec36401d833b9838ffcddaa6 100644 (file)
@@ -15,6 +15,8 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 from optparse import OptionParser\r
 import sys\r
 import Common.LongFilePathOs as os\r
@@ -27,7 +29,6 @@ from Workspace.BuildClassObject import PcdClassObject
 from . import RuleComplexFile\r
 from .EfiSection import EfiSection\r
 from io import BytesIO\r
-from io import StringIO\r
 import Common.TargetTxtClassObject as TargetTxtClassObject\r
 import Common.ToolDefClassObject as ToolDefClassObject\r
 from Common.DataType import *\r
@@ -321,8 +322,6 @@ def main():
                             continue\r
                         for RegionData in RegionObj.RegionDataList:\r
                             if FvObj.UiFvName.upper() == RegionData.upper():\r
-                                if not FvObj.BaseAddress:\r
-                                    FvObj.BaseAddress = '0x%x' % (int(FdObj.BaseAddress, 0) + RegionObj.Offset)\r
                                 if FvObj.FvRegionInFD:\r
                                     if FvObj.FvRegionInFD != RegionObj.Size:\r
                                         EdkLogger.error("GenFds", FORMAT_INVALID, "The FV %s's region is specified in multiple FD with different value." %FvObj.UiFvName)\r
@@ -457,7 +456,7 @@ class GenFds :
                 return\r
         elif GenFds.OnlyGenerateThisFv is None:\r
             for FvObj in GenFdsGlobalVariable.FdfParser.Profile.FvDict.values():\r
-                Buffer = BytesIO()\r
+                Buffer = BytesIO('')\r
                 FvObj.AddToBuffer(Buffer)\r
                 Buffer.close()\r
 \r
@@ -560,9 +559,9 @@ class GenFds :
         GenFdsGlobalVariable.InfLogger('\nFV Space Information')\r
         for FvSpaceInfo in FvSpaceInfoList:\r
             Name = FvSpaceInfo[0]\r
-            TotalSizeValue = int(FvSpaceInfo[1], 0)\r
-            UsedSizeValue = int(FvSpaceInfo[2], 0)\r
-            FreeSizeValue = int(FvSpaceInfo[3], 0)\r
+            TotalSizeValue = long(FvSpaceInfo[1], 0)\r
+            UsedSizeValue = long(FvSpaceInfo[2], 0)\r
+            FreeSizeValue = long(FvSpaceInfo[3], 0)\r
             if UsedSizeValue == TotalSizeValue:\r
                 Percentage = '100'\r
             else:\r
@@ -588,7 +587,7 @@ class GenFds :
         if PcdValue == '':\r
             return\r
 \r
-        Int64PcdValue = int(PcdValue, 0)\r
+        Int64PcdValue = long(PcdValue, 0)\r
         if Int64PcdValue == 0 or Int64PcdValue < -1:\r
             return\r
 \r
@@ -603,27 +602,22 @@ class GenFds :
 \r
     def GenerateGuidXRefFile(BuildDb, ArchList, FdfParserObj):\r
         GuidXRefFileName = os.path.join(GenFdsGlobalVariable.FvDir, "Guid.xref")\r
-        GuidXRefFile = StringIO('')\r
+        GuidXRefFile = BytesIO('')\r
         PkgGuidDict = {}\r
         GuidDict = {}\r
         ModuleList = []\r
         FileGuidList = []\r
         GuidPattern = gGuidPattern\r
-        VariableGuidSet = set()\r
         for Arch in ArchList:\r
             PlatformDataBase = BuildDb.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]\r
             PkgList = GenFdsGlobalVariable.WorkSpace.GetPackageList(GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag)\r
             for P in PkgList:\r
                 PkgGuidDict.update(P.Guids)\r
-            for Name, Guid in sorted(PlatformDataBase.Pcds):\r
+            for Name, Guid in PlatformDataBase.Pcds:\r
                 Pcd = PlatformDataBase.Pcds[Name, Guid]\r
                 if Pcd.Type in [TAB_PCDS_DYNAMIC_HII, TAB_PCDS_DYNAMIC_EX_HII]:\r
                     for SkuId in Pcd.SkuInfoList:\r
                         Sku = Pcd.SkuInfoList[SkuId]\r
-                        if Sku.VariableGuid in VariableGuidSet:\r
-                            continue\r
-                        else:\r
-                            VariableGuidSet.add(Sku.VariableGuid)\r
                         if Sku.VariableGuid and Sku.VariableGuid in PkgGuidDict.keys():\r
                             GuidDict[Sku.VariableGuid] = PkgGuidDict[Sku.VariableGuid]\r
             for ModuleFile in PlatformDataBase.Modules:\r
@@ -691,7 +685,7 @@ class GenFds :
                                     F.read()\r
                                     length = F.tell()\r
                                     F.seek(4)\r
-                                    TmpStr = unpack('%dh' % ((length - 4) // 2), F.read())\r
+                                    TmpStr = unpack('%dh' % ((length - 4) / 2), F.read())\r
                                     Name = ''.join(chr(c) for c in TmpStr[:-1])\r
                         else:\r
                             FileList = []\r
index 052736b9d8c745f2ea14d723edb9a28f1ed6178c..14578a92a9b19c6fdc6655fa42034f87723f8811 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
 import Common.LongFilePathOs as os\r
 import sys\r
 import subprocess\r
@@ -720,8 +721,8 @@ class GenFdsGlobalVariable:
             return\r
         if PopenObject.returncode != 0 or GenFdsGlobalVariable.VerboseMode or GenFdsGlobalVariable.DebugLevel != -1:\r
             GenFdsGlobalVariable.InfLogger ("Return Value = %d" % PopenObject.returncode)\r
-            GenFdsGlobalVariable.InfLogger (out.decode(encoding='utf-8',errors='ignore'))\r
-            GenFdsGlobalVariable.InfLogger (error.decode(encoding='utf-8', errors='ignore'))\r
+            GenFdsGlobalVariable.InfLogger (out)\r
+            GenFdsGlobalVariable.InfLogger (error)\r
             if PopenObject.returncode != 0:\r
                 print("###", cmd)\r
                 EdkLogger.error("GenFds", COMMAND_FAILURE, errorMess)\r
index 1f0c87dd7e50feef85d3182551bccd33f5cb7b54..fd660737f421f46d961bf5bc2921acff11ac8af8 100644 (file)
@@ -16,6 +16,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Section\r
 import subprocess\r
 from .Ffs import Ffs\r
index 5d0325015848936ee773967f6640ca5934747274..e56174ec3c86fc22aa4662893a80a5ee1f1b17f0 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 \r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
index c5d106fd85ee452d641f12ce7b45e85766049a69..e416b838d1e45b354bbdd0a60f354d0ed96a7dd4 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import RuleSimpleFile\r
 from . import RuleComplexFile\r
 from . import Section\r
index ebe30fec5864f8396d8672b2834c9f27d013f7fb..bb7071fa7fca36df97b8eaca0ac8d915620193f4 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 import subprocess\r
 \r
index 31c65a32a12431e30e1433e10b4a6fc158cfc5cb..5242b74c9e707954e9535107710fac384694fe7d 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from struct import *\r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
 from io import BytesIO\r
@@ -57,8 +58,8 @@ class Region(RegionClassObject):
                 PadByte = pack('B', 0xFF)\r
             else:\r
                 PadByte = pack('B', 0)\r
-            for i in range(0, Size):\r
-                Buffer.write(PadByte)\r
+            PadData = ''.join(PadByte for i in xrange(0, Size))\r
+            Buffer.write(PadData)\r
 \r
     ## AddToBuffer()\r
     #\r
@@ -127,7 +128,7 @@ class Region(RegionClassObject):
                         if self.FvAddress % FvAlignValue != 0:\r
                             EdkLogger.error("GenFds", GENFDS_ERROR,\r
                                             "FV (%s) is NOT %s Aligned!" % (FvObj.UiFvName, FvObj.FvAlignment))\r
-                        FvBuffer = BytesIO()\r
+                        FvBuffer = BytesIO('')\r
                         FvBaseAddress = '0x%X' % self.FvAddress\r
                         BlockSize = None\r
                         BlockNum = None\r
@@ -296,7 +297,7 @@ class Region(RegionClassObject):
             else:\r
                 # region ended within current blocks\r
                 if self.Offset + self.Size <= End:\r
-                    ExpectedList.append((BlockSize, (RemindingSize + BlockSize - 1) // BlockSize))\r
+                    ExpectedList.append((BlockSize, (RemindingSize + BlockSize - 1) / BlockSize))\r
                     break\r
                 # region not ended yet\r
                 else:\r
@@ -305,7 +306,7 @@ class Region(RegionClassObject):
                         UsedBlockNum = BlockNum\r
                     # region started in middle of current blocks\r
                     else:\r
-                        UsedBlockNum = (End - self.Offset) // BlockSize\r
+                        UsedBlockNum = (End - self.Offset) / BlockSize\r
                     Start = End\r
                     ExpectedList.append((BlockSize, UsedBlockNum))\r
                     RemindingSize -= BlockSize * UsedBlockNum\r
index 066156a2f671554c822f54f8e757be4f699cdf53..c357fedbd3beecd513a60805cd6bf742050c670d 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Rule\r
 from  CommonDataClass.FdfClass import RuleComplexFileClassObject\r
 \r
index 4e6b9231a2d078fc7f46cf85302709f4ee9554bd..7aa184e7d8bbda663c09528842fa5c024f6370ba 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Rule\r
 from CommonDataClass.FdfClass import RuleSimpleFileClassObject\r
 \r
index 61dc32762bc6fd64ceda583a45f507fd6152d6ef..19a70009dccea4cd157017137aea3a1a9dcc75a5 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from CommonDataClass.FdfClass import SectionClassObject\r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
 import Common.LongFilePathOs as os, glob\r
index ba0534fa49026907b87bfa0631930d1526dccf50..24f2f3ca938dee1b8506840a3f5ad0639b38460d 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from . import Section\r
 from .Ffs import Ffs\r
 import subprocess\r
index eb3e93075525ce8e6cec8aad0a6817394bc2e923..db71fe9653d40777466771b519655a9a18abb95e 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from .Ffs import Ffs\r
 from . import Section\r
 import Common.LongFilePathOs as os\r
index 6a8294afb0548894d8de96b66d51ace6dcbd97e0..5cb2d4acfb1cc1eed456618768fb3614bffee5fb 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
 import Common.LongFilePathOs as os\r
 from CommonDataClass.FdfClass import VtfClassObject\r
index 3b54d19887c5e110859bb8f7c7a94aaf6a36989b..1be0a28177ff8c39f001629c93d8a84c883d897f 100644 (file)
@@ -17,6 +17,7 @@
 #\r
 \r
 #======================================  External Libraries ========================================\r
+from __future__ import print_function\r
 import optparse\r
 import Common.LongFilePathOs as os\r
 import re\r
index fb99302933f44f6f70e47a887561d55d298d419d..8e243aea9603f474193eaea0192c1a3b07dc4575 100644 (file)
@@ -133,7 +133,7 @@ def PatchBinaryFile(FileName, ValueOffset, TypeName, ValueString, MaxSize=0):
         #\r
         for Index in range(ValueLength):\r
             ByteList[ValueOffset + Index] = ValueNumber % 0x100\r
-            ValueNumber = ValueNumber // 0x100\r
+            ValueNumber = ValueNumber / 0x100\r
     elif TypeName == TAB_VOID:\r
         ValueString = SavedStr\r
         if ValueString.startswith('L"'):\r
index 14e92a5d8b5fd7ad95b4a10a8b07cc11c5772429..a44781f2e8399fee455244cd1d45147abb8803bd 100644 (file)
@@ -19,6 +19,7 @@
 '''\r
 Pkcs7Sign\r
 '''\r
+from __future__ import print_function\r
 \r
 import os\r
 import sys\r
@@ -75,9 +76,8 @@ if __name__ == '__main__':
   #\r
   # Create command line argument parser object\r
   #\r
-  parser = argparse.ArgumentParser(prog=__prog__, usage=__usage__, description=__copyright__, conflict_handler='resolve')\r
+  parser = argparse.ArgumentParser(prog=__prog__, version=__version__, usage=__usage__, description=__copyright__, conflict_handler='resolve')\r
   group = parser.add_mutually_exclusive_group(required=True)\r
-  group.add_argument("--version", action='version', version=__version__)\r
   group.add_argument("-e", action="store_true", dest='Encode', help='encode file')\r
   group.add_argument("-d", action="store_true", dest='Decode', help='decode file')\r
   parser.add_argument("-o", "--output", dest='OutputFile', type=str, metavar='filename', help="specify the output filename", required=True)\r
@@ -121,7 +121,7 @@ if __name__ == '__main__':
   if Process.returncode != 0:\r
     print('ERROR: Open SSL command not available.  Please verify PATH or set OPENSSL_PATH')\r
     sys.exit(Process.returncode)\r
-  print(Version[0].decode())\r
+  print(Version[0])\r
 \r
   #\r
   # Read input file into a buffer and save input filename\r
@@ -141,11 +141,11 @@ if __name__ == '__main__':
 \r
   try:\r
     if args.MonotonicCountStr.upper().startswith('0X'):\r
-      args.MonotonicCountValue = (int)(args.MonotonicCountStr, 16)\r
+      args.MonotonicCountValue = (long)(args.MonotonicCountStr, 16)\r
     else:\r
-      args.MonotonicCountValue = (int)(args.MonotonicCountStr)\r
+      args.MonotonicCountValue = (long)(args.MonotonicCountStr)\r
   except:\r
-    args.MonotonicCountValue = (int)(0)\r
+    args.MonotonicCountValue = (long)(0)\r
 \r
   if args.Encode:\r
     #\r
@@ -251,9 +251,9 @@ if __name__ == '__main__':
       sys.exit(1)\r
     else:\r
       if args.SignatureSizeStr.upper().startswith('0X'):\r
-        SignatureSize = (int)(args.SignatureSizeStr, 16)\r
+        SignatureSize = (long)(args.SignatureSizeStr, 16)\r
       else:\r
-        SignatureSize = (int)(args.SignatureSizeStr)\r
+        SignatureSize = (long)(args.SignatureSizeStr)\r
     if SignatureSize < 0:\r
         print("ERROR: The value of option --signature-size can't be set to negative value!")\r
         sys.exit(1)\r
index 7bdc460146f76626560efc8b86cbe876b836e14b..a34dac423b8c1eeb5698917e3e0b9422c12ea9dc 100644 (file)
@@ -22,6 +22,7 @@
 '''\r
 Rsa2048Sha256GenerateKeys\r
 '''\r
+from __future__ import print_function\r
 \r
 import os\r
 import sys\r
@@ -42,9 +43,8 @@ if __name__ == '__main__':
   #\r
   # Create command line argument parser object\r
   #\r
-  parser = argparse.ArgumentParser(prog=__prog__, usage=__usage__, description=__copyright__, conflict_handler='resolve')\r
+  parser = argparse.ArgumentParser(prog=__prog__, version=__version__, usage=__usage__, description=__copyright__, conflict_handler='resolve')\r
   group = parser.add_mutually_exclusive_group(required=True)\r
-  group.add_argument("--version", action='version', version=__version__)\r
   group.add_argument("-o", "--output", dest='OutputFile', type=argparse.FileType('wb'), metavar='filename', nargs='*', help="specify the output private key filename in PEM format")\r
   group.add_argument("-i", "--input", dest='InputFile', type=argparse.FileType('rb'), metavar='filename', nargs='*', help="specify the input private key filename in PEM format")\r
   parser.add_argument("--public-key-hash", dest='PublicKeyHashFile', type=argparse.FileType('wb'), help="specify the public key hash filename that is SHA 256 hash of 2048 bit RSA public key in binary format")\r
@@ -83,7 +83,7 @@ if __name__ == '__main__':
   if Process.returncode != 0:\r
     print('ERROR: Open SSL command not available.  Please verify PATH or set OPENSSL_PATH')\r
     sys.exit(Process.returncode)\r
-  print(Version[0].decode())\r
+  print(Version[0])\r
 \r
   args.PemFileName = []\r
 \r
@@ -118,19 +118,19 @@ if __name__ == '__main__':
       args.PemFileName.append(Item.name)\r
       Item.close()\r
 \r
-  PublicKeyHash = bytearray()\r
+  PublicKeyHash = ''\r
   for Item in args.PemFileName:\r
     #\r
     # Extract public key from private key into STDOUT\r
     #\r
     Process = subprocess.Popen('%s rsa -in %s -modulus -noout' % (OpenSslCommand, Item), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)\r
-    PublicKeyHexString = Process.communicate()[0].split(b'=')[1].strip()\r
+    PublicKeyHexString = Process.communicate()[0].split('=')[1].strip()\r
     if Process.returncode != 0:\r
       print('ERROR: Unable to extract public key from private key')\r
       sys.exit(Process.returncode)\r
-    PublicKey = bytearray()\r
+    PublicKey = ''\r
     for Index in range (0, len(PublicKeyHexString), 2):\r
-      PublicKey = PublicKey + PublicKeyHexString[Index:Index + 2]\r
+      PublicKey = PublicKey + chr(int(PublicKeyHexString[Index:Index + 2], 16))\r
 \r
     #\r
     # Generate SHA 256 hash of RSA 2048 bit public key into STDOUT\r
@@ -156,14 +156,14 @@ if __name__ == '__main__':
   #\r
   PublicKeyHashC = '{'\r
   for Item in PublicKeyHash:\r
-    PublicKeyHashC = PublicKeyHashC + '0x%02x, ' % (Item)\r
+    PublicKeyHashC = PublicKeyHashC + '0x%02x, ' % (ord(Item))\r
   PublicKeyHashC = PublicKeyHashC[:-2] + '}'\r
 \r
   #\r
   # Write SHA 256 of 2048 bit binary public key to public key hash C structure file\r
   #\r
   try:\r
-    args.PublicKeyHashCFile.write (bytes(PublicKeyHashC))\r
+    args.PublicKeyHashCFile.write (PublicKeyHashC)\r
     args.PublicKeyHashCFile.close ()\r
   except:\r
     pass\r
index 2f901a7f29fa4c6dca786901099c7cf511c01900..3fd7eefd6af5555c7d8678fa095f9d52f6177655 100644 (file)
@@ -17,6 +17,7 @@
 '''\r
 Rsa2048Sha256Sign\r
 '''\r
+from __future__ import print_function\r
 \r
 import os\r
 import sys\r
@@ -61,9 +62,8 @@ if __name__ == '__main__':
   #\r
   # Create command line argument parser object\r
   #\r
-  parser = argparse.ArgumentParser(prog=__prog__, usage=__usage__, description=__copyright__, conflict_handler='resolve')\r
+  parser = argparse.ArgumentParser(prog=__prog__, version=__version__, usage=__usage__, description=__copyright__, conflict_handler='resolve')\r
   group = parser.add_mutually_exclusive_group(required=True)\r
-  group.add_argument("--version", action='version', version=__version__)\r
   group.add_argument("-e", action="store_true", dest='Encode', help='encode file')\r
   group.add_argument("-d", action="store_true", dest='Decode', help='decode file')\r
   parser.add_argument("-o", "--output", dest='OutputFile', type=str, metavar='filename', help="specify the output filename", required=True)\r
@@ -104,7 +104,7 @@ if __name__ == '__main__':
   if Process.returncode != 0:\r
     print('ERROR: Open SSL command not available.  Please verify PATH or set OPENSSL_PATH')\r
     sys.exit(Process.returncode)\r
-  print(Version[0].decode())\r
+  print(Version[0])\r
 \r
   #\r
   # Read input file into a buffer and save input filename\r
@@ -152,11 +152,10 @@ if __name__ == '__main__':
   # Extract public key from private key into STDOUT\r
   #\r
   Process = subprocess.Popen('%s rsa -in "%s" -modulus -noout' % (OpenSslCommand, args.PrivateKeyFileName), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)\r
-  PublicKeyHexString = Process.communicate()[0].split(b'=')[1].strip()\r
-  PublicKeyHexString = PublicKeyHexString.decode(encoding='utf-8')\r
+  PublicKeyHexString = Process.communicate()[0].split('=')[1].strip()\r
   PublicKey = ''\r
   while len(PublicKeyHexString) > 0:\r
-    PublicKey = PublicKey + PublicKeyHexString[0:2]\r
+    PublicKey = PublicKey + chr(int(PublicKeyHexString[0:2], 16))\r
     PublicKeyHexString=PublicKeyHexString[2:]\r
   if Process.returncode != 0:\r
     sys.exit(Process.returncode)\r
@@ -164,9 +163,9 @@ if __name__ == '__main__':
   if args.MonotonicCountStr:\r
     try:\r
       if args.MonotonicCountStr.upper().startswith('0X'):\r
-        args.MonotonicCountValue = (int)(args.MonotonicCountStr, 16)\r
+        args.MonotonicCountValue = (long)(args.MonotonicCountStr, 16)\r
       else:\r
-        args.MonotonicCountValue = (int)(args.MonotonicCountStr)\r
+        args.MonotonicCountValue = (long)(args.MonotonicCountStr)\r
     except:\r
         pass\r
 \r
@@ -187,8 +186,8 @@ if __name__ == '__main__':
     # Write output file that contains hash GUID, Public Key, Signature, and Input data\r
     #\r
     args.OutputFile = open(args.OutputFileName, 'wb')\r
-    args.OutputFile.write(EFI_HASH_ALGORITHM_SHA256_GUID.bytes_le)\r
-    args.OutputFile.write(bytearray.fromhex(PublicKey))\r
+    args.OutputFile.write(EFI_HASH_ALGORITHM_SHA256_GUID.get_bytes_le())\r
+    args.OutputFile.write(PublicKey)\r
     args.OutputFile.write(Signature)\r
     args.OutputFile.write(args.InputFileBuffer)\r
     args.OutputFile.close()\r
@@ -210,7 +209,7 @@ if __name__ == '__main__':
     #\r
     # Verify the public key\r
     #\r
-    if Header.PublicKey != bytearray.fromhex(PublicKey):\r
+    if Header.PublicKey != PublicKey:\r
       print('ERROR: Public key in input file does not match public key from private key file')\r
       sys.exit(1)\r
 \r
index 9f3e008bc65b2c223279d54bba11104d49cee722..b01c3ecf6aea0b64975bbf3f2c340b5fa8319c56 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 import CommonDataClass.DataClass as DataClass\r
 from Table.Table import Table\r
index 532c15971aa830ad1bcba658ac380e5256872691..1d887dc1e195c97f2592298e008466e155659d66 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 import CommonDataClass.DataClass as DataClass\r
 from Table.Table import Table\r
index 886b752aa823b3c77abf46974e61fcb7a3192de7..0a45f7f5b617052cf09f5c4c84061d02462a0c29 100644 (file)
@@ -1,3 +1,4 @@
+from __future__ import absolute_import\r
 ## @file\r
 # This file is used to create/update/query/erase table for dsc datas\r
 #\r
index 2567411dd7dd2d29c900af0721173d1dba1b3369..6f2fb37189aa7be4785612aa5d55f9bfb0f5cef9 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 import Common.LongFilePathOs as os, time\r
 from Table.Table import Table\r
index 5b5e0d3f57c520cf95b39519d27a5936a17bf56e..668f56269a70f20a657d17cdbaa07013b438096d 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 import CommonDataClass.DataClass as DataClass\r
 from Table.Table import Table\r
index bfcea583a95ee4f0a12b6f77d4ee8b66deb7c4f5..805a528cea879e2af4a42a14f6dca193aacbdd2c 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 from Table.Table import Table\r
 from Common.StringUtils import ConvertToSqlString\r
index ebaddc5fff159e8c55d19085e5293ec06d23afd4..ee677cf1079e445b209490b1c40a9ac8e66dd2ef 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 from Table.Table import Table\r
 from Common.StringUtils import ConvertToSqlString\r
index 1d00c35f965145b55b0dffb35e01c1578b3958e9..6b658cf35753408aff0dad2ad95bb74be5e1e42b 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 from Common.StringUtils import ConvertToSqlString\r
 from Table.Table import Table\r
index 0401d46d6b00c67ee858c447c381ee26128c4622..e0ffb170f994f54121d9b3cb5fc44824646b7b32 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 import CommonDataClass.DataClass as DataClass\r
 from Table.Table import Table\r
index caa82b7324f234fe476db76cfde2d7fe2465f372..5096862e6e52e73e65579f88355af8be3bacbe12 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 from Table.Table import Table\r
 from Common.StringUtils import ConvertToSqlString\r
index fa807b882b88e4fc72c8063141ce00de3bd9cd1d..8e7d313c71e2fd0adf7bfe7fb372dcd45266dc5b 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 from Common.StringUtils import ConvertToSqlString\r
 from Table.Table import Table\r
index 54977010a208676bb27c71e06de2c11489961eac..00022962ffe03bd6bb54eb12c4f9f36975ce52eb 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import Common.EdkLogger as EdkLogger\r
 import Common.LongFilePathOs as os, time\r
 from Table.Table import Table\r
index f9f7d3413588f154ff1078d2c764c9deaa3ee68d..8d523a6ab8fc709a762915cbe83b37388ac6fa27 100644 (file)
@@ -12,6 +12,7 @@
 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import print_function\r
 import Common.LongFilePathOs as os\r
 import sys\r
 import traceback\r
index 4b7c2020b4ebf184b398804245aee7dbd6b25b27..4b3091bec3df2372d4b6f3a46e4529f01e964784 100644 (file)
@@ -245,7 +245,7 @@ def TrimPreprocessedFile(Source, Target, ConvertHex, TrimLong):
 \r
     # save to file\r
     try:\r
-        f = open (Target, 'w')\r
+        f = open (Target, 'wb')\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
     f.writelines(NewLines)\r
@@ -458,7 +458,7 @@ def GenerateVfrBinSec(ModuleName, DebugDir, OutputFile):
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, "File open failed for %s" %OutputFile, None)\r
 \r
     # Use a instance of BytesIO to cache data\r
-    fStringIO = BytesIO()\r
+    fStringIO = BytesIO('')\r
 \r
     for Item in VfrUniOffsetList:\r
         if (Item[0].find("Strings") != -1):\r
@@ -468,7 +468,8 @@ def GenerateVfrBinSec(ModuleName, DebugDir, OutputFile):
             # { 0x8913c5e0, 0x33f6, 0x4d86, { 0x9b, 0xf1, 0x43, 0xef, 0x89, 0xfc, 0x6, 0x66 } }\r
             #\r
             UniGuid = [0xe0, 0xc5, 0x13, 0x89, 0xf6, 0x33, 0x86, 0x4d, 0x9b, 0xf1, 0x43, 0xef, 0x89, 0xfc, 0x6, 0x66]\r
-            fStringIO.write(bytes(UniGuid))\r
+            UniGuid = [chr(ItemGuid) for ItemGuid in UniGuid]\r
+            fStringIO.write(''.join(UniGuid))\r
             UniValue = pack ('Q', int (Item[1], 16))\r
             fStringIO.write (UniValue)\r
         else:\r
@@ -478,7 +479,9 @@ def GenerateVfrBinSec(ModuleName, DebugDir, OutputFile):
             # { 0xd0bc7cb4, 0x6a47, 0x495f, { 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2 } };\r
             #\r
             VfrGuid = [0xb4, 0x7c, 0xbc, 0xd0, 0x47, 0x6a, 0x5f, 0x49, 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2]\r
-            fStringIO.write(bytes(VfrGuid))\r
+            VfrGuid = [chr(ItemGuid) for ItemGuid in VfrGuid]\r
+            fStringIO.write(''.join(VfrGuid))\r
+            type (Item[1])\r
             VfrValue = pack ('Q', int (Item[1], 16))\r
             fStringIO.write (VfrValue)\r
 \r
@@ -559,7 +562,7 @@ def TrimEdkSourceCode(Source, Target):
     CreateDirectory(os.path.dirname(Target))\r
 \r
     try:\r
-        f = open (Source, 'r')\r
+        f = open (Source, 'rb')\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Source)\r
     # read whole file\r
@@ -578,7 +581,7 @@ def TrimEdkSourceCode(Source, Target):
         return\r
 \r
     try:\r
-        f = open (Target, 'w')\r
+        f = open (Target, 'wb')\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
     f.write(NewLines)\r
index 247dc4bd348a994dc4e12155955f13f8f00ffaee..ceae12fb37c9793b1df34bbe32bb84b2b12745a4 100644 (file)
@@ -66,7 +66,7 @@ class RecoverMgr:
         arc = self._tryhook(path)\r
         if arc and os.path.isfile(path):\r
             self._createzip()\r
-            self.zip.write(path, arc)\r
+            self.zip.write(path, arc.encode('utf_8'))\r
             sta = os.stat(path)\r
             oldmode = stat.S_IMODE(sta.st_mode)\r
             self.rlist.append(_PathInfo(_CHMOD, path, oldmode))\r
index 6c85c9756c4e5ece1b6e1e090e59fbafaa7a0b10..a781d358c86c0d742978ef6ee92366c0e791bc51 100644 (file)
@@ -44,7 +44,7 @@ class IpiDatabase(object):
         Dir = os.path.dirname(DbPath)\r
         if not os.path.isdir(Dir):\r
             os.mkdir(Dir)\r
-        self.Conn = sqlite3.connect(DbPath, isolation_level='DEFERRED')\r
+        self.Conn = sqlite3.connect(unicode(DbPath), isolation_level='DEFERRED')\r
         self.Conn.execute("PRAGMA page_size=4096")\r
         self.Conn.execute("PRAGMA synchronous=OFF")\r
         self.Cur = self.Conn.cursor()\r
index a377dce9d9a243909ecdd7b8ff747d38e6079d94..e2dd6a02dccc9c434cd3bc3131261a307f6945dd 100644 (file)
@@ -585,17 +585,17 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO
 \r
     ContainerFile = GetUniFileName(os.path.dirname(PackageObject.GetFullPath()), PackageObject.GetBaseName())\r
 \r
-    Content = UniFileHeader + '\n'\r
-    Content += '\n'\r
+    Content = UniFileHeader + '\r\n'\r
+    Content += '\r\n'\r
 \r
-    Content += FormatUniEntry('#string ' + TAB_DEC_PACKAGE_ABSTRACT, PackageObject.GetAbstract(), ContainerFile) + '\n'\r
+    Content += FormatUniEntry('#string ' + TAB_DEC_PACKAGE_ABSTRACT, PackageObject.GetAbstract(), ContainerFile) + '\r\n'\r
 \r
     Content += FormatUniEntry('#string ' + TAB_DEC_PACKAGE_DESCRIPTION, PackageObject.GetDescription(), ContainerFile) \\r
-    + '\n'\r
+    + '\r\n'\r
 \r
-    Content += FormatUniEntry('#string ' + TAB_DEC_BINARY_ABSTRACT, BinaryAbstract, ContainerFile) + '\n'\r
+    Content += FormatUniEntry('#string ' + TAB_DEC_BINARY_ABSTRACT, BinaryAbstract, ContainerFile) + '\r\n'\r
 \r
-    Content += FormatUniEntry('#string ' + TAB_DEC_BINARY_DESCRIPTION, BinaryDescription, ContainerFile) + '\n'\r
+    Content += FormatUniEntry('#string ' + TAB_DEC_BINARY_DESCRIPTION, BinaryDescription, ContainerFile) + '\r\n'\r
 \r
     PromptGenList = []\r
     HelpTextGenList = []\r
@@ -612,7 +612,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO
             if (PcdPromptStrName, Lang) not in PromptGenList:\r
                 TokenValueList.append((Lang, PromptStr))\r
                 PromptGenList.append((PcdPromptStrName, Lang))\r
-        PromptString = FormatUniEntry(PcdPromptStrName, TokenValueList, ContainerFile) + '\n'\r
+        PromptString = FormatUniEntry(PcdPromptStrName, TokenValueList, ContainerFile) + '\r\n'\r
         if PromptString not in Content:\r
             Content += PromptString\r
 \r
@@ -628,7 +628,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO
             if (PcdHelpStrName, Lang) not in HelpTextGenList:\r
                 TokenValueList.append((Lang, HelpStr))\r
                 HelpTextGenList.append((PcdHelpStrName, Lang))\r
-        HelpTextString = FormatUniEntry(PcdHelpStrName, TokenValueList, ContainerFile) + '\n'\r
+        HelpTextString = FormatUniEntry(PcdHelpStrName, TokenValueList, ContainerFile) + '\r\n'\r
         if HelpTextString not in Content:\r
             Content += HelpTextString\r
 \r
@@ -639,7 +639,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO
                 PcdErrStrName = '#string ' + TAB_STR_TOKENCNAME + TAB_UNDERLINE_SPLIT + Pcd.GetTokenSpaceGuidCName() \\r
                     + TAB_UNDERLINE_SPLIT + TAB_STR_TOKENERR \\r
                     + TAB_UNDERLINE_SPLIT + ErrorNo[2:]\r
-                PcdErrString = FormatUniEntry(PcdErrStrName, PcdError.GetErrorMessageList(), ContainerFile) + '\n'\r
+                PcdErrString = FormatUniEntry(PcdErrStrName, PcdError.GetErrorMessageList(), ContainerFile) + '\r\n'\r
                 if PcdErrString not in Content:\r
                     Content += PcdErrString\r
 \r
index 82df4c62cfaa5b27c42fefd4c25adac54dc75bd1..c2a240a88410c965715c9b6a4958abab315f432d 100644 (file)
@@ -234,22 +234,22 @@ def GenModuleUNIEncodeFile(ModuleObject, UniFileHeader='', Encoding=DT.TAB_ENCOD
     if not os.path.exists(os.path.dirname(ModuleObject.GetFullPath())):\r
         os.makedirs(os.path.dirname(ModuleObject.GetFullPath()))\r
 \r
-    Content = UniFileHeader + '\n'\r
-    Content += '\n'\r
+    Content = UniFileHeader + '\r\n'\r
+    Content += '\r\n'\r
 \r
-    Content += FormatUniEntry('#string ' + DT.TAB_INF_ABSTRACT, ModuleObject.GetAbstract(), ContainerFile) + '\n'\r
+    Content += FormatUniEntry('#string ' + DT.TAB_INF_ABSTRACT, ModuleObject.GetAbstract(), ContainerFile) + '\r\n'\r
 \r
     Content += FormatUniEntry('#string ' + DT.TAB_INF_DESCRIPTION, ModuleObject.GetDescription(), ContainerFile) \\r
-            + '\n'\r
+            + '\r\n'\r
 \r
     BinaryAbstractString = FormatUniEntry('#string ' + DT.TAB_INF_BINARY_ABSTRACT, BinaryAbstract, ContainerFile)\r
     if BinaryAbstractString:\r
-        Content += BinaryAbstractString + '\n'\r
+        Content += BinaryAbstractString + '\r\n'\r
 \r
     BinaryDescriptionString = FormatUniEntry('#string ' + DT.TAB_INF_BINARY_DESCRIPTION, BinaryDescription, \\r
                                              ContainerFile)\r
     if BinaryDescriptionString:\r
-        Content += BinaryDescriptionString + '\n'\r
+        Content += BinaryDescriptionString + '\r\n'\r
 \r
     if not os.path.exists(ContainerFile):\r
         File = codecs.open(ContainerFile, 'wb', Encoding)\r
@@ -274,7 +274,7 @@ def GenDefines(ModuleObject):
         if not DefinesDict:\r
             continue\r
         for Statement in DefinesDict:\r
-            if len(Statement.split(DT.TAB_EQUAL_SPLIT)) > 1:\r
+            if Statement.split(DT.TAB_EQUAL_SPLIT) > 1:\r
                 Statement = (u'%s ' % Statement.split(DT.TAB_EQUAL_SPLIT, 1)[0]).ljust(LeftOffset) \\r
                              + u'= %s' % Statement.split(DT.TAB_EQUAL_SPLIT, 1)[1].lstrip()\r
             SortedArch = DT.TAB_ARCH_COMMON\r
@@ -409,7 +409,7 @@ def GenLibraryClasses(ModuleObject):
                 Statement += '|' + FFE\r
             ModuleList = LibraryClass.GetSupModuleList()\r
             ArchList = LibraryClass.GetSupArchList()\r
-            for Index in range(0, len(ArchList)):\r
+            for Index in xrange(0, len(ArchList)):\r
                 ArchList[Index] = ConvertArchForInstall(ArchList[Index])\r
             ArchList.sort()\r
             SortedArch = ' '.join(ArchList)\r
@@ -572,7 +572,7 @@ def GenUserExtensions(ModuleObject):
 #         if not Statement:\r
 #             continue\r
         ArchList = UserExtension.GetSupArchList()\r
-        for Index in range(0, len(ArchList)):\r
+        for Index in xrange(0, len(ArchList)):\r
             ArchList[Index] = ConvertArchForInstall(ArchList[Index])\r
         ArchList.sort()\r
         KeyList = []\r
index 78d3c91581e18a65145a1f0ef556ad968c96a9f3..4726629695803cfa2ef115486a3b43dc49bfe452 100644 (file)
@@ -124,46 +124,50 @@ def GenHeaderCommentSection(Abstract, Description, Copyright, License, IsBinaryH
     #\r
     # Convert special character to (c), (r) and (tm).\r
     #\r
+    if isinstance(Abstract, unicode):\r
+        Abstract = ConvertSpecialUnicodes(Abstract)\r
+    if isinstance(Description, unicode):\r
+        Description = ConvertSpecialUnicodes(Description)\r
     if IsBinaryHeader:\r
-        Content += CommChar * 2 + TAB_SPACE_SPLIT + TAB_BINARY_HEADER_COMMENT + '\n'\r
+        Content += CommChar * 2 + TAB_SPACE_SPLIT + TAB_BINARY_HEADER_COMMENT + '\r\n'\r
     elif CommChar == TAB_COMMENT_EDK1_SPLIT:\r
         Content += CommChar + TAB_SPACE_SPLIT + TAB_COMMENT_EDK1_START + TAB_STAR + TAB_SPACE_SPLIT +\\r
-         TAB_HEADER_COMMENT + '\n'\r
+         TAB_HEADER_COMMENT + '\r\n'\r
     else:\r
-        Content += CommChar * 2 + TAB_SPACE_SPLIT + TAB_HEADER_COMMENT + '\n'\r
+        Content += CommChar * 2 + TAB_SPACE_SPLIT + TAB_HEADER_COMMENT + '\r\n'\r
     if Abstract:\r
-        Abstract = Abstract.rstrip('\n')\r
-        Content += CommChar + TAB_SPACE_SPLIT + ('\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
+        Abstract = Abstract.rstrip('\r\n')\r
+        Content += CommChar + TAB_SPACE_SPLIT + ('\r\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
                                                                                                 (Abstract, '\n'))\r
-        Content += '\n' + CommChar + '\n'\r
+        Content += '\r\n' + CommChar + '\r\n'\r
     else:\r
-        Content += CommChar + '\n'\r
+        Content += CommChar + '\r\n'\r
 \r
     if Description:\r
-        Description = Description.rstrip('\n')\r
-        Content += CommChar + TAB_SPACE_SPLIT + ('\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
+        Description = Description.rstrip('\r\n')\r
+        Content += CommChar + TAB_SPACE_SPLIT + ('\r\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
                                                   (Description, '\n'))\r
-        Content += '\n' + CommChar + '\n'\r
+        Content += '\r\n' + CommChar + '\r\n'\r
 \r
     #\r
     # There is no '#\n' line to separate multiple copyright lines in code base\r
     #\r
     if Copyright:\r
-        Copyright = Copyright.rstrip('\n')\r
-        Content += CommChar + TAB_SPACE_SPLIT + ('\n' + CommChar + TAB_SPACE_SPLIT).join\\r
+        Copyright = Copyright.rstrip('\r\n')\r
+        Content += CommChar + TAB_SPACE_SPLIT + ('\r\n' + CommChar + TAB_SPACE_SPLIT).join\\r
         (GetSplitValueList(Copyright, '\n'))\r
-        Content += '\n' + CommChar + '\n'\r
+        Content += '\r\n' + CommChar + '\r\n'\r
 \r
     if License:\r
-        License = License.rstrip('\n')\r
-        Content += CommChar + TAB_SPACE_SPLIT + ('\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
+        License = License.rstrip('\r\n')\r
+        Content += CommChar + TAB_SPACE_SPLIT + ('\r\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
                                                   (License, '\n'))\r
-        Content += '\n' + CommChar + '\n'\r
+        Content += '\r\n' + CommChar + '\r\n'\r
 \r
     if CommChar == TAB_COMMENT_EDK1_SPLIT:\r
-        Content += CommChar + TAB_SPACE_SPLIT + TAB_STAR + TAB_COMMENT_EDK1_END + '\n'\r
+        Content += CommChar + TAB_SPACE_SPLIT + TAB_STAR + TAB_COMMENT_EDK1_END + '\r\n'\r
     else:\r
-        Content += CommChar * 2 + '\n'\r
+        Content += CommChar * 2 + '\r\n'\r
 \r
     return Content\r
 \r
index 8f9fec75959f05bc4de3d99f706125a4331812c8..285812c9c2f8465674e077449339333e8ff69480 100644 (file)
@@ -74,7 +74,7 @@ def ParseHeaderCommentSection(CommentList, FileName = None, IsBinaryHeader = Fal
     # first find the last copyright line\r
     #\r
     Last = 0\r
-    for Index in range(len(CommentList)-1, 0, -1):\r
+    for Index in xrange(len(CommentList)-1, 0, -1):\r
         Line = CommentList[Index][0]\r
         if _IsCopyrightLine(Line):\r
             Last = Index\r
@@ -206,14 +206,17 @@ def ParsePcdErrorCode (Value = None, ContainerFile = None, LineNum = None):
             Base = 16\r
         else:\r
             Base = 10\r
-        ErrorCode = int(Value, Base)\r
+        ErrorCode = long(Value, Base)\r
         if ErrorCode > PCD_ERR_CODE_MAX_SIZE or ErrorCode < 0:\r
             Logger.Error('Parser',\r
                         FORMAT_NOT_SUPPORTED,\r
                         "The format %s of ErrorCode is not valid, should be UNIT32 type or long type" % Value,\r
                         File = ContainerFile,\r
                         Line = LineNum)\r
-        return hex(ErrorCode)\r
+        #\r
+        # To delete the tailing 'L'\r
+        #\r
+        return hex(ErrorCode)[:-1]\r
     except ValueError as XStr:\r
         if XStr:\r
             pass\r
index 35b963ed0f3d93cc449d233aa8f8d464d1baf3c0..2e0253ab51016a962275c68b05f776f5375b9bb3 100644 (file)
@@ -14,6 +14,7 @@
 '''\r
 ExpressionValidate\r
 '''\r
+from __future__ import print_function\r
 \r
 ##\r
 # Import Modules\r
index f9ca8f32e068cdebce05f2c0e2b88daa07e61713..8c2a6787f0c16ef25cc13235e36e172c1b7b5cb7 100644 (file)
@@ -32,7 +32,7 @@ from os import linesep
 from os import walk\r
 from os import environ\r
 import re\r
-from collections import UserDict as IterableUserDict\r
+from UserDict import IterableUserDict\r
 \r
 import Logger.Log as Logger\r
 from Logger import StringTable as ST\r
@@ -160,23 +160,19 @@ def RemoveDirectory(Directory, Recursively=False):
 #                              or not\r
 #\r
 def SaveFileOnChange(File, Content, IsBinaryFile=True):\r
+    if not IsBinaryFile:\r
+        Content = Content.replace("\n", linesep)\r
+\r
     if os.path.exists(File):\r
         try:\r
-            if isinstance(Content, bytes):\r
-                if Content == __FileHookOpen__(File, "rb").read():\r
-                    return False\r
-            else:\r
-                if Content == __FileHookOpen__(File, "r").read():\r
-                    return False\r
+            if Content == __FileHookOpen__(File, "rb").read():\r
+                return False\r
         except BaseException:\r
             Logger.Error(None, ToolError.FILE_OPEN_FAILURE, ExtraData=File)\r
 \r
     CreateDirectory(os.path.dirname(File))\r
     try:\r
-        if isinstance(Content, bytes):\r
-            FileFd = __FileHookOpen__(File, "wb")\r
-        else:\r
-            FileFd = __FileHookOpen__(File, "w")\r
+        FileFd = __FileHookOpen__(File, "wb")\r
         FileFd.write(Content)\r
         FileFd.close()\r
     except BaseException:\r
@@ -441,7 +437,7 @@ class Sdict(IterableUserDict):
 def CommonPath(PathList):\r
     Path1 = min(PathList).split(os.path.sep)\r
     Path2 = max(PathList).split(os.path.sep)\r
-    for Index in range(min(len(Path1), len(Path2))):\r
+    for Index in xrange(min(len(Path1), len(Path2))):\r
         if Path1[Index] != Path2[Index]:\r
             return os.path.sep.join(Path1[:Index])\r
     return os.path.sep.join(Path1)\r
@@ -894,7 +890,7 @@ def ProcessEdkComment(LineList):
             if FindEdkBlockComment:\r
                 if FirstPos == -1:\r
                     FirstPos = StartPos\r
-                for Index in range(StartPos, EndPos+1):\r
+                for Index in xrange(StartPos, EndPos+1):\r
                     LineList[Index] = ''\r
                 FindEdkBlockComment = False\r
         elif Line.find("//") != -1 and not Line.startswith("#"):\r
@@ -961,7 +957,7 @@ def GetLibInstanceInfo(String, WorkSpace, LineNo):
         FileLinesList = []\r
 \r
         try:\r
-            FInputfile = open(FullFileName, "r")\r
+            FInputfile = open(FullFileName, "rb", 0)\r
             try:\r
                 FileLinesList = FInputfile.readlines()\r
             except BaseException:\r
index 87d156fa4ce166f7056f839bbda40de38b5c3c95..31b9b68cd57e70dde6fa3cfd3929364057f416b0 100644 (file)
@@ -727,7 +727,7 @@ def IsValidUserId(UserId):
 #\r
 def CheckUTF16FileHeader(File):\r
     FileIn = open(File, 'rb').read(2)\r
-    if FileIn != b'\xff\xfe':\r
+    if FileIn != '\xff\xfe':\r
         return False\r
 \r
     return True\r
index 0564080d35937caaed980fc8b2107fb337445427..81729d6cdbf7b3a2c43e6bfaf6072117e128296d 100644 (file)
@@ -16,6 +16,7 @@
 '''\r
 Parsing\r
 '''\r
+from __future__ import absolute_import\r
 \r
 ##\r
 # Import Modules\r
@@ -973,7 +974,7 @@ def GenSection(SectionName, SectionDict, SplitArch=True, NeedBlankLine=False):
                     ArchList = GetSplitValueList(SectionAttrs, DataType.TAB_COMMENT_SPLIT)\r
                 else:\r
                     ArchList = [SectionAttrs]\r
-            for Index in range(0, len(ArchList)):\r
+            for Index in xrange(0, len(ArchList)):\r
                 ArchList[Index] = ConvertArchForInstall(ArchList[Index])\r
             Section = '[' + SectionName + '.' + (', ' + SectionName + '.').join(ArchList) + ']'\r
         else:\r
index 011eb98ca6963f117a1e72dcdd24720a15ebe9a4..2be382fa1797041fee13bf8e31323311237496a6 100644 (file)
@@ -20,6 +20,7 @@ StringUtils
 #\r
 import re\r
 import os.path\r
+from string import strip\r
 import Logger.Log as Logger\r
 import Library.DataType as DataType\r
 from Logger.ToolError import FORMAT_INVALID\r
@@ -43,7 +44,7 @@ gMACRO_PATTERN = re.compile("\$\(([_A-Z][_A-Z0-9]*)\)", re.UNICODE)
 #\r
 #\r
 def GetSplitValueList(String, SplitTag=DataType.TAB_VALUE_SPLIT, MaxSplit= -1):\r
-    return list(map(lambda l: l.strip(), String.split(SplitTag, MaxSplit)))\r
+    return map(lambda l: l.strip(), String.split(SplitTag, MaxSplit))\r
 \r
 ## MergeArches\r
 #\r
@@ -434,7 +435,7 @@ def GetSingleValueOfKeyFromLines(Lines, Dictionary, CommentCharacter, KeySplitCh
                 #\r
                 LineList[1] = CleanString(LineList[1], CommentCharacter)\r
                 if ValueSplitFlag:\r
-                    Value = map(lambda x: x.strip(), LineList[1].split(ValueSplitCharacter))\r
+                    Value = map(strip, LineList[1].split(ValueSplitCharacter))\r
                 else:\r
                     Value = CleanString(LineList[1], CommentCharacter).splitlines()\r
 \r
@@ -501,7 +502,7 @@ def PreCheck(FileName, FileContent, SupSectionTag):
         #\r
         # Regenerate FileContent\r
         #\r
-        NewFileContent = NewFileContent + Line + '\n'\r
+        NewFileContent = NewFileContent + Line + '\r\n'\r
 \r
     if IsFailed:\r
         Logger.Error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError=Logger.IS_RAISE_ERROR)\r
@@ -679,7 +680,9 @@ def GetHelpTextList(HelpTextClassList):
 # @param String: the source string\r
 #\r
 def StringArrayLength(String):\r
-    if String.startswith('L"'):\r
+    if isinstance(String, unicode):\r
+        return (len(String) + 1) * 2 + 1\r
+    elif String.startswith('L"'):\r
         return (len(String) - 3 + 1) * 2\r
     elif String.startswith('"'):\r
         return (len(String) - 2 + 1)\r
@@ -937,14 +940,14 @@ def SplitPcdEntry(String):
 def IsMatchArch(Arch1, Arch2):\r
     if 'COMMON' in Arch1 or 'COMMON' in Arch2:\r
         return True\r
-    if isinstance(Arch1, str) and isinstance(Arch2, str):\r
+    if isinstance(Arch1, basestring) and isinstance(Arch2, basestring):\r
         if Arch1 == Arch2:\r
             return True\r
 \r
-    if isinstance(Arch1, str) and isinstance(Arch2, list):\r
+    if isinstance(Arch1, basestring) and isinstance(Arch2, list):\r
         return Arch1 in Arch2\r
 \r
-    if isinstance(Arch2, str) and isinstance(Arch1, list):\r
+    if isinstance(Arch2, basestring) and isinstance(Arch1, list):\r
         return Arch2 in Arch1\r
 \r
     if isinstance(Arch1, list) and isinstance(Arch2, list):\r
index 549f278b05c9a8bcbc7921aae56e14961586e04f..670cf3b4eeac19a9f945f06c575b593eed6463d0 100644 (file)
@@ -14,6 +14,7 @@
 """\r
 Collect all defined strings in multiple uni files\r
 """\r
+from __future__ import print_function\r
 \r
 ##\r
 # Import Modules\r
@@ -246,9 +247,9 @@ def FormatUniEntry(StrTokenName, TokenValueList, ContainerFile):
         for SubValue in ValueList:\r
             if SubValue.strip():\r
                 SubValueContent += \\r
-                ' ' * (PreFormatLength + len('#language en-US ')) + '\"%s\\n\"' % SubValue.strip() + '\n'\r
+                ' ' * (PreFormatLength + len('#language en-US ')) + '\"%s\\n\"' % SubValue.strip() + '\r\n'\r
         SubValueContent = SubValueContent[(PreFormatLength + len('#language en-US ')):SubValueContent.rfind('\\n')] \\r
-        + '\"' + '\n'\r
+        + '\"' + '\r\n'\r
         SubContent += ' '*PreFormatLength + '#language %-5s ' % Lang + SubValueContent\r
     if SubContent:\r
         SubContent = StrTokenName + ' '*(PreFormatLength - len(StrTokenName)) + SubContent[PreFormatLength:]\r
@@ -290,7 +291,7 @@ class StringDefClassObject(object):
     def UpdateValue(self, Value = None):\r
         if Value is not None:\r
             if self.StringValue:\r
-                self.StringValue = self.StringValue + '\n' + Value\r
+                self.StringValue = self.StringValue + '\r\n' + Value\r
             else:\r
                 self.StringValue = Value\r
             self.StringValueByteList = UniToHexList(self.StringValue)\r
@@ -464,7 +465,7 @@ class UniFileClassObject(object):
             if not Line.startswith(DT.TAB_COMMENT_EDK1_SPLIT) and HeaderStart and not HeaderEnd:\r
                 HeaderEnd = True\r
             if Line.startswith(DT.TAB_COMMENT_EDK1_SPLIT) and HeaderStart and not HeaderEnd and FirstGenHeader:\r
-                self.UniFileHeader += Line + '\n'\r
+                self.UniFileHeader += Line + '\r\n'\r
                 continue\r
 \r
         #\r
@@ -510,11 +511,11 @@ class UniFileClassObject(object):
                 if FileIn[LineCount].strip().startswith('#language'):\r
                     Line = Line + FileIn[LineCount]\r
                     FileIn[LineCount-1] = Line\r
-                    FileIn[LineCount] = '\n'\r
+                    FileIn[LineCount] = '\r\n'\r
                     LineCount -= 1\r
-                    for Index in range (LineCount + 1, len (FileIn) - 1):\r
+                    for Index in xrange (LineCount + 1, len (FileIn) - 1):\r
                         if (Index == len(FileIn) -1):\r
-                            FileIn[Index] = '\n'\r
+                            FileIn[Index] = '\r\n'\r
                         else:\r
                             FileIn[Index] = FileIn[Index + 1]\r
                     continue\r
@@ -866,12 +867,12 @@ class UniFileClassObject(object):
                                 Value = Value + Lines[IndexJ].strip()[1:-1]\r
                             CombineToken = False\r
                         else:\r
-                            Value = Value + Lines[IndexJ].strip()[1:-1] + '\n'\r
+                            Value = Value + Lines[IndexJ].strip()[1:-1] + '\r\n'\r
                     else:\r
                         IndexI = IndexJ\r
                         break\r
-                if Value.endswith('\n'):\r
-                    Value = Value[: Value.rfind('\n')]\r
+                if Value.endswith('\r\n'):\r
+                    Value = Value[: Value.rfind('\r\n')]\r
                 Language = GetLanguageCode(Language, self.IsCompatibleMode, self.File)\r
                 self.AddStringToList(Name, Language, Value)\r
                 continue\r
index 061943925aaaf3ff4870c9d6964209e6c2fdb4b3..c1c7732b40ce4747d2aa41d936be844db2b98ca1 100644 (file)
@@ -42,7 +42,7 @@ MSG_USAGE_STRING = _("\n"
 MSG_VERSION_NUMBER = _("1.1")\r
 MSG_VERSION = _("UEFI Packaging Tool (UEFIPT) - Revision " + \\r
                 MSG_VERSION_NUMBER)\r
-MSG_COPYRIGHT = _("Copyright (c) 2011 - 2018 Intel Corporation All Rights Reserved.")\r
+MSG_COPYRIGHT = _("Copyright (c) 2011 - 2016 Intel Corporation All Rights Reserved.")\r
 MSG_VERSION_COPYRIGHT = _("\n  %s\n  %s" % (MSG_VERSION, MSG_COPYRIGHT))\r
 MSG_USAGE = _("%s [options]\n%s" % ("UPT", MSG_VERSION_COPYRIGHT))\r
 MSG_DESCRIPTION = _("The UEFIPT is used to create, " + \\r
index 49b507e0103e3bf60ebbd25028542bdc167865fa..053d1155477a912f7bb64a772cfc9564273190bd 100644 (file)
@@ -136,7 +136,7 @@ def Main(Options = None):
                 # strings in your desired encoding before passing them to\r
                 # write().\r
                 #\r
-                FromFile = os.path.normpath(FileObject.GetURI())\r
+                FromFile = os.path.normpath(FileObject.GetURI()).encode('utf_8')\r
                 FileFullPath = mws.join(WorkspaceDir, FromFile)\r
                 if FileFullPath in RePkgDict:\r
                     (DpGuid, DpVersion, DpName, Repackage) = RePkgDict[FileFullPath]\r
index 51dc4b2bd24102f34a9f4e7dfe7ce2d489a1fb9a..a88b51d05529253f15c5254504afd3d484850596 100644 (file)
@@ -620,11 +620,11 @@ class _DecPcd(_DecBase):
         if not IsValidToken(PCD_TOKEN_PATTERN, Token):\r
             self._LoggerError(ST.ERR_DECPARSE_PCD_TOKEN % Token)\r
         elif not Token.startswith('0x') and not Token.startswith('0X'):\r
-            if int(Token) > 4294967295:\r
+            if long(Token) > 4294967295:\r
                 self._LoggerError(ST.ERR_DECPARSE_PCD_TOKEN_INT % Token)\r
-            Token = hex(int(Token))\r
+            Token = hex(long(Token))[:-1]\r
 \r
-        IntToken = int(Token, 0)\r
+        IntToken = long(Token, 0)\r
         if (Guid, IntToken) in self.TokenMap:\r
             if self.TokenMap[Guid, IntToken] != CName:\r
                 self._LoggerError(ST.ERR_DECPARSE_PCD_TOKEN_UNIQUE%(Token))\r
@@ -752,7 +752,7 @@ class _DecUserExtension(_DecBase):
 class Dec(_DecBase, _DecComments):\r
     def __init__(self, DecFile, Parse = True):\r
         try:\r
-            Content = ConvertSpecialChar(open(DecFile, 'r').readlines())\r
+            Content = ConvertSpecialChar(open(DecFile, 'rb').readlines())\r
         except BaseException:\r
             Logger.Error(TOOL_NAME, FILE_OPEN_FAILURE, File=DecFile,\r
                          ExtraData=ST.ERR_DECPARSE_FILEOPEN % DecFile)\r
index cd4d87224d22127317a3cd5b161a9a07f7975e56..c5c35ede785b9fa8e7d421d216e657aa2dd17067 100644 (file)
@@ -151,7 +151,7 @@ def IsValidNumValUint8(Token):
     else:\r
         Base = 10\r
     try:\r
-        TokenValue = int(Token, Base)\r
+        TokenValue = long(Token, Base)\r
     except BaseException:\r
         Valid, Cause = IsValidLogicalExpr(Token, True)\r
         if Cause:\r
@@ -262,7 +262,7 @@ def IsValidPcdDatum(Type, Value):
                 Value = Value.lstrip('0')\r
                 if not Value:\r
                     return True, ""\r
-            Value = int(Value, 0)\r
+            Value = long(Value, 0)\r
             TypeLenMap = {\r
                 #\r
                 # 0x00 - 0xff\r
index 3c313a089d2f0801fc3eeb6a15470e6f12e91694..029a436cec5d6c54c34b92d68ba869137b5b25ab 100644 (file)
@@ -205,7 +205,7 @@ def GetFileLineContent(FileName, WorkSpace, LineNo, OriginalString):
 \r
     try:\r
         FullFileName = FullFileName.replace('\\', '/')\r
-        Inputfile = open(FullFileName, "r")\r
+        Inputfile = open(FullFileName, "rb", 0)\r
         try:\r
             FileLinesList = Inputfile.readlines()\r
         except BaseException:\r
index d17d2c887bbef7fe5a38793490881601be3a7d46..cd99262e036249ffa1c68044ffd4bd15f8472e1b 100644 (file)
@@ -51,7 +51,7 @@ def OpenInfFile(Filename):
     FileLinesList = []\r
 \r
     try:\r
-        FInputfile = open(Filename, "r")\r
+        FInputfile = open(Filename, "rb", 0)\r
         try:\r
             FileLinesList = FInputfile.readlines()\r
         except BaseException:\r
@@ -86,7 +86,7 @@ class InfParser(InfSectionParser):
         #\r
         # Call parent class construct function\r
         #\r
-        super().__init__()\r
+        super(InfParser, self).__init__()\r
 \r
         self.WorkspaceDir    = WorkspaceDir\r
         self.SupArchList     = DT.ARCH_LIST\r
index 44243b467b4151160f4844472b5244027186838e..1f254058d1332685891585017ae8289dc030bd3f 100644 (file)
@@ -206,7 +206,7 @@ class InfSectionParser(InfDefinSectionParser,
         if FilePath in cls.MetaFiles:\r
             return cls.MetaFiles[FilePath]\r
         else:\r
-            ParserObject = super().__new__(cls)\r
+            ParserObject = super(InfSectionParser, cls).__new__(cls)\r
             cls.MetaFiles[FilePath] = ParserObject\r
             return ParserObject\r
 \r
@@ -227,7 +227,7 @@ class InfSectionParser(InfDefinSectionParser,
         self.InfBuildOptionSection = InfBuildOptionsObject()\r
         self.InfLibraryClassSection = InfLibraryClassObject()\r
         self.InfPackageSection = InfPackageObject()\r
-        self.InfPcdSection = InfPcdObject(list(self.MetaFiles.keys())[0])\r
+        self.InfPcdSection = InfPcdObject(self.MetaFiles.keys()[0])\r
         self.InfSourcesSection = InfSourcesObject()\r
         self.InfUserExtensionSection = InfUserExtensionObject()\r
         self.InfProtocolSection = InfProtocolObject()\r
@@ -455,7 +455,7 @@ class InfSectionParser(InfDefinSectionParser,
                     Arch = Match.groups(1)[0].upper()\r
                     ArchList.append(Arch)\r
             CommentSoFar = ''\r
-            for Index in range(1, len(List)):\r
+            for Index in xrange(1, len(List)):\r
                 Result = ParseComment(List[Index], DT.ALL_USAGE_TOKENS, TokenDict, [], False)\r
                 Usage = Result[0]\r
                 Type = Result[1]\r
index 5d27d415ea4ffe6f2cca49cd4a64908a5dbc7d78..5dc00affade8e8040d5c35e5f271ba2361f0d70b 100644 (file)
@@ -15,6 +15,7 @@
 '''\r
 DecPomAlignment\r
 '''\r
+from __future__ import print_function\r
 \r
 ##\r
 # Import Modules\r
index 930a8c1d4cd251bbbcdea57cd621d56e2a0308e5..004fc5ff2f3b5d2198efc9023b5dcc66cf42f0e7 100644 (file)
@@ -21,6 +21,10 @@ UPT
 #\r
 import locale\r
 import sys\r
+encoding = locale.getdefaultlocale()[1]\r
+if encoding:\r
+    reload(sys)\r
+    sys.setdefaultencoding(encoding)\r
 from Core import FileHook\r
 import os.path\r
 from sys import platform\r
index 567cf03e1ddc59f842c64b201a2b07b8ef2f25ff..0ea5ea1e0fa8f0583cc1d8659ea3fdb341512468 100644 (file)
@@ -11,6 +11,7 @@
 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
+from __future__ import print_function\r
 import os\r
 import unittest\r
 \r
index 163e4cf7dfea7758fa0eafd020aa1d61dd70b250..9a10ec15c47953f8202d25b4adf93f1604f0143a 100644 (file)
@@ -11,6 +11,7 @@
 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
+from __future__ import print_function\r
 import os\r
 #import Object.Parser.InfObject as InfObject\r
 from Object.Parser.InfCommonObject import CurrentLine\r
index 8125f183be5e26535f83efd1b5a216006e315251..70d8fb19f2697d9b1c36aced87d26d1580a549f4 100644 (file)
@@ -326,7 +326,7 @@ def IniToXml(IniFile):
     CurrentKey = ''\r
     PreMap = None\r
     Map = None\r
-    FileContent = ConvertSpecialChar(open(IniFile, 'r').readlines())\r
+    FileContent = ConvertSpecialChar(open(IniFile, 'rb').readlines())\r
     LastIndex = 0\r
     for Index in range(0, len(FileContent)):\r
         LastIndex = Index\r
index bf64d89f17d9ad830f78dfe1f7c0546eb149fd75..d170761aad8e5e5cbc5a2240d5d810de89c7b8a4 100644 (file)
@@ -53,7 +53,7 @@ def ConvertVariableName(VariableName):
         if SecondByte != 0:\r
             return None\r
 \r
-        if FirstByte not in range(0x20, 0x7F):\r
+        if FirstByte not in xrange(0x20, 0x7F):\r
             return None\r
         TransferedStr += ('%c')%FirstByte\r
         Index = Index + 2\r
index 2e36fd233f0239e2cc84fbb64f6a2ced935ff543..95edc376fe6ebc2eeacca973a5a31ab60257ca47 100644 (file)
@@ -166,7 +166,7 @@ class StructurePcd(PcdClassObject):
             expressions = []\r
         if Packages is None:\r
             Packages = []\r
-        super().__init__(Name, Guid, Type, DatumType, Value, Token, MaxDatumSize, SkuInfoList, IsOverrided, GuidValue, validateranges, validlists, expressions)\r
+        super(StructurePcd, self).__init__(Name, Guid, Type, DatumType, Value, Token, MaxDatumSize, SkuInfoList, IsOverrided, GuidValue, validateranges, validlists, expressions)\r
         self.StructuredPcdIncludeFile = [] if StructuredPcdIncludeFile is None else StructuredPcdIncludeFile\r
         self.PackageDecs = Packages\r
         self.DefaultStoreName = [default_store]\r
@@ -242,7 +242,7 @@ class StructurePcd(PcdClassObject):
             self.PcdFieldValueFromComm = PcdObject.PcdFieldValueFromComm if PcdObject.PcdFieldValueFromComm else self.PcdFieldValueFromComm\r
             self.PcdFieldValueFromFdf = PcdObject.PcdFieldValueFromFdf if PcdObject.PcdFieldValueFromFdf else self.PcdFieldValueFromFdf\r
 \r
-LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModList'])\r
+LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModList'], verbose=False)\r
 \r
 ## ModuleBuildClassObject\r
 #\r
index 5ed879c8d7a919dc48f5c721df57b0d768c58e32..39db945fb86facc28ae5ebbb76ac1be34d4a42b4 100644 (file)
@@ -17,6 +17,8 @@
 #  This class is used to retrieve information stored in database and convert them\r
 # into PlatformBuildClassObject form for easier use for AutoGen.\r
 #\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 from Common.StringUtils import *\r
 from Common.DataType import *\r
 from Common.Misc import *\r
@@ -128,16 +130,9 @@ def GetDependencyList(FileStack, SearchPathList):
 \r
             if len(FileContent) == 0:\r
                 continue\r
-            IncludedFileList = []\r
+\r
             if FileContent[0] == 0xff or FileContent[0] == 0xfe:\r
-                FileContent = str(FileContent, "utf-16")\r
-                IncludedFileList = gIncludePattern.findall(FileContent)\r
-            else:\r
-                try:\r
-                    FileContent = str(FileContent, "utf-8")\r
-                    IncludedFileList = gIncludePattern.findall(FileContent)\r
-                except:\r
-                    pass\r
+                FileContent = unicode(FileContent, "utf-16")\r
             IncludedFileList = gIncludePattern.findall(FileContent)\r
 \r
             for Inc in IncludedFileList:\r
@@ -937,8 +932,7 @@ class DscBuildData(PlatformBuildClassObject):
                 EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
             if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
-                if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() in TAB_PCD_NUMERIC_TYPES_VOID \\r
-                 and self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
+                if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
                     EdkLogger.error('build', FORMAT_INVALID, "Pcd datumtype used in DSC file is not the same as its declaration in DEC file.", File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
         if (TokenSpaceGuid + '.' + PcdCName) in GlobalData.gPlatformPcds:\r
@@ -1552,7 +1546,7 @@ class DscBuildData(PlatformBuildClassObject):
                 elif TAB_DEFAULT in pcd.SkuInfoList and TAB_COMMON in pcd.SkuInfoList:\r
                     del pcd.SkuInfoList[TAB_COMMON]\r
 \r
-        list(map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType]))\r
+        map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType])\r
         return Pcds\r
 \r
     ## Retrieve non-dynamic PCD settings\r
@@ -1602,7 +1596,7 @@ class DscBuildData(PlatformBuildClassObject):
             else:\r
                 PcdValueDict[PcdCName, TokenSpaceGuid] = {SkuName:(PcdValue, DatumType, MaxDatumSize)}\r
 \r
-        for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.items():\r
+        for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.iteritems():\r
             if self.SkuIdMgr.SystemSkuId in PcdSetting:\r
                 PcdValue, DatumType, MaxDatumSize = PcdSetting[self.SkuIdMgr.SystemSkuId]\r
             elif TAB_DEFAULT in PcdSetting:\r
@@ -1663,7 +1657,7 @@ class DscBuildData(PlatformBuildClassObject):
         except:\r
             EdkLogger.error('Build', COMMAND_FAILURE, 'Can not execute command: %s' % Command)\r
         Result = Process.communicate()\r
-        return Process.returncode, Result[0].decode(encoding='utf-8', errors='ignore'), Result[1].decode(encoding='utf-8', errors='ignore')\r
+        return Process.returncode, Result[0], Result[1]\r
 \r
     @staticmethod\r
     def IntToCString(Value, ValueSize):\r
@@ -2506,7 +2500,7 @@ class DscBuildData(PlatformBuildClassObject):
             elif TAB_DEFAULT in pcd.SkuInfoList and TAB_COMMON in pcd.SkuInfoList:\r
                 del pcd.SkuInfoList[TAB_COMMON]\r
 \r
-        list(map(self.FilterSkuSettings, Pcds.values()))\r
+        map(self.FilterSkuSettings, Pcds.values())\r
 \r
         return Pcds\r
 \r
@@ -2571,7 +2565,7 @@ class DscBuildData(PlatformBuildClassObject):
                     PcdObj.SkuInfoList[skuname].SkuId = skuid\r
                     PcdObj.SkuInfoList[skuname].SkuIdName = skuname\r
             if PcdType in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
-                PcdObj.DefaultValue = list(PcdObj.SkuInfoList.values())[0].HiiDefaultValue if self.SkuIdMgr.SkuUsageType == self.SkuIdMgr.SINGLE else PcdObj.SkuInfoList[TAB_DEFAULT].HiiDefaultValue\r
+                PcdObj.DefaultValue = PcdObj.SkuInfoList.values()[0].HiiDefaultValue if self.SkuIdMgr.SkuUsageType == self.SkuIdMgr.SINGLE else PcdObj.SkuInfoList[TAB_DEFAULT].HiiDefaultValue\r
             Pcds[PcdCName, TokenSpaceGuid]= PcdObj\r
         return Pcds\r
     ## Retrieve dynamic HII PCD settings\r
@@ -2692,7 +2686,7 @@ class DscBuildData(PlatformBuildClassObject):
                 Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
             Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][DefaultStore] = DefaultValue\r
         for pcd in Pcds.values():\r
-            SkuInfoObj = list(pcd.SkuInfoList.values())[0]\r
+            SkuInfoObj = pcd.SkuInfoList.values()[0]\r
             pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
             pcd.DatumType = pcdDecObject.DatumType\r
             # Only fix the value while no value provided in DSC file.\r
@@ -2732,7 +2726,7 @@ class DscBuildData(PlatformBuildClassObject):
             invalidpcd = ",".join(invalidhii)\r
             EdkLogger.error('build', PCD_VARIABLE_INFO_ERROR, Message='The same HII PCD must map to the same EFI variable for all SKUs', File=self.MetaFile, ExtraData=invalidpcd)\r
 \r
-        list(map(self.FilterSkuSettings, Pcds.values()))\r
+        map(self.FilterSkuSettings, Pcds.values())\r
 \r
         return Pcds\r
 \r
@@ -2830,7 +2824,7 @@ class DscBuildData(PlatformBuildClassObject):
                 Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
             Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = InitialValue\r
         for pcd in Pcds.values():\r
-            SkuInfoObj = list(pcd.SkuInfoList.values())[0]\r
+            SkuInfoObj = pcd.SkuInfoList.values()[0]\r
             pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
             pcd.DatumType = pcdDecObject.DatumType\r
             # Only fix the value while no value provided in DSC file.\r
@@ -2848,7 +2842,7 @@ class DscBuildData(PlatformBuildClassObject):
                 del pcd.SkuInfoList[TAB_COMMON]\r
 \r
 \r
-        list(map(self.FilterSkuSettings, Pcds.values()))\r
+        map(self.FilterSkuSettings, Pcds.values())\r
         return Pcds\r
 \r
     ## Add external modules\r
index c606b1a404d50150533ed0ae81b706fa9161da2d..44d44d24eb6be378c6a21477e5eac485023e4b33 100644 (file)
@@ -12,6 +12,7 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import absolute_import\r
 from Common.DataType import *\r
 from Common.Misc import *\r
 from Common.caching import cached_property, cached_class_function\r
index 3300954cf586d6b0b3c94ac526a293e576c3e20b..bd751eadfbc58591750ab28a2426428f538d7bf9 100644 (file)
@@ -22,7 +22,7 @@ from CommonDataClass.DataClass import FileClass
 \r
 ## Convert to SQL required string format\r
 def ConvertToSqlString(StringList):\r
-    return list(map(lambda s: "'" + s.replace("'", "''") + "'", StringList))\r
+    return map(lambda s: "'" + s.replace("'", "''") + "'", StringList)\r
 \r
 ## TableFile\r
 #\r
index 470cfed5b6a35f9243196ef6288f6dfa0ec17e1a..f1707c06feb9127080c41a04aa6bbe09c7163bcd 100644 (file)
@@ -15,6 +15,8 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
 import Common.LongFilePathOs as os\r
 import re\r
 import time\r
@@ -139,7 +141,7 @@ class MetaFileParser(object):
         if FilePath in Class.MetaFiles:\r
             return Class.MetaFiles[FilePath]\r
         else:\r
-            ParserObject = super().__new__(Class)\r
+            ParserObject = super(MetaFileParser, Class).__new__(Class)\r
             Class.MetaFiles[FilePath] = ParserObject\r
             return ParserObject\r
 \r
@@ -1931,10 +1933,10 @@ class DecParser(MetaFileParser):
                     return\r
 \r
                 if self._include_flag:\r
-                    self._ValueList[1] = "<HeaderFiles>_" + md5(self._CurrentLine.encode('utf-8')).hexdigest()\r
+                    self._ValueList[1] = "<HeaderFiles>_" + md5(self._CurrentLine).hexdigest()\r
                     self._ValueList[2] = self._CurrentLine\r
                 if self._package_flag and "}" != self._CurrentLine:\r
-                    self._ValueList[1] = "<Packages>_" + md5(self._CurrentLine.encode('utf-8')).hexdigest()\r
+                    self._ValueList[1] = "<Packages>_" + md5(self._CurrentLine).hexdigest()\r
                     self._ValueList[2] = self._CurrentLine\r
                 if self._CurrentLine == "}":\r
                     self._package_flag = False\r
index 89fe97d60a324ed98682b90db1179fd6fd15576c..e0a0b8d923517388871eed61cde6dc12997d1c5b 100644 (file)
@@ -14,6 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import uuid\r
 \r
 import Common.EdkLogger as EdkLogger\r
index f4217969157ad4b9b10494bebe068a1441998a0d..8d8a3e278987ee64f5fe0d3eb5ee32709730d0d4 100644 (file)
@@ -11,6 +11,7 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from __future__ import absolute_import\r
 from collections import OrderedDict, defaultdict\r
 from Common.DataType import SUP_MODULE_USER_DEFINED\r
 from .BuildClassObject import LibraryClassObject\r
@@ -22,7 +23,7 @@ from Common.BuildToolError import BUILD_ERROR
 \r
 class OrderedListDict(OrderedDict):\r
     def __init__(self, *args, **kwargs):\r
-        super().__init__(*args, **kwargs)\r
+        super(OrderedListDict, self).__init__(*args, **kwargs)\r
         self.default_factory = list\r
 \r
     def __missing__(self, key):\r
index fdf7738a3105be2afe769e925f68349778d5c6b1..3bb287b8b24c69a3480a0226e2a7167548e06cf7 100644 (file)
@@ -15,6 +15,7 @@
 ##\r
 # Import Modules\r
 #\r
+from __future__ import absolute_import\r
 import sqlite3\r
 from Common.StringUtils import *\r
 from Common.DataType import *\r
@@ -164,7 +165,7 @@ class WorkspaceDatabase(object):
                 os.remove(DbPath)\r
 \r
         # create db with optimized parameters\r
-        self.Conn = sqlite3.connect(DbPath, isolation_level=None)\r
+        self.Conn = sqlite3.connect(DbPath, isolation_level='DEFERRED')\r
         self.Conn.execute("PRAGMA synchronous=OFF")\r
         self.Conn.execute("PRAGMA temp_store=MEMORY")\r
         self.Conn.execute("PRAGMA count_changes=OFF")\r
index 30c5b10bcc3be309f714b890028193066a0da4cf..4fe29f124d842d3371de129f0a173f7b6b3978f8 100644 (file)
@@ -28,7 +28,7 @@ import hashlib
 import subprocess\r
 import threading\r
 from datetime import datetime\r
-from io import StringIO\r
+from io import BytesIO\r
 from Common import EdkLogger\r
 from Common.Misc import SaveFileOnChange\r
 from Common.Misc import GuidStructureByteArrayToGuidString\r
@@ -79,7 +79,7 @@ gGlueLibEntryPoint = re.compile(r"__EDKII_GLUE_MODULE_ENTRY_POINT__\s*=\s*(\w+)"
 gLineMaxLength = 120\r
 \r
 ## Tags for end of line in report\r
-gEndOfLine = "\n"\r
+gEndOfLine = "\r\n"\r
 \r
 ## Tags for section start, end and separator\r
 gSectionStart = ">" + "=" * (gLineMaxLength - 2) + "<"\r
@@ -600,7 +600,7 @@ class ModuleReport(object):
             # Collect all module used PCD set: module INF referenced directly or indirectly.\r
             # It also saves module INF default values of them in case they exist.\r
             #\r
-            for Pcd in list(M.ModulePcdList) + list(M.LibraryPcdList):\r
+            for Pcd in M.ModulePcdList + M.LibraryPcdList:\r
                 self.ModulePcdSet.setdefault((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Type), (Pcd.InfDefaultValue, Pcd.DefaultValue))\r
 \r
         self.LibraryReport = None\r
@@ -634,14 +634,14 @@ class ModuleReport(object):
         FwReportFileName = os.path.join(self._BuildDir, "DEBUG", self.ModuleName + ".txt")\r
         if os.path.isfile(FwReportFileName):\r
             try:\r
-                FileContents = open(FwReportFileName, 'r').read()\r
+                FileContents = open(FwReportFileName).read()\r
                 Match = gModuleSizePattern.search(FileContents)\r
                 if Match:\r
                     self.Size = int(Match.group(1))\r
 \r
                 Match = gTimeStampPattern.search(FileContents)\r
                 if Match:\r
-                    self.BuildTimeStamp = datetime.utcfromtimestamp(int(Match.group(1)))\r
+                    self.BuildTimeStamp = datetime.fromtimestamp(int(Match.group(1)))\r
             except IOError:\r
                 EdkLogger.warn(None, "Fail to read report file", FwReportFileName)\r
 \r
@@ -726,8 +726,8 @@ def ReadMessage(From, To, ExitFlag):
         # read one line a time\r
         Line = From.readline()\r
         # empty string means "end"\r
-        if Line is not None and Line != b"":\r
-            To(Line.rstrip().decode(encoding='utf-8', errors='ignore'))\r
+        if Line is not None and Line != "":\r
+            To(Line.rstrip())\r
         else:\r
             break\r
         if ExitFlag.isSet():\r
@@ -853,7 +853,7 @@ class PcdReport(object):
                 #\r
                 # Collect module override PCDs\r
                 #\r
-                for ModulePcd in list(Module.M.ModulePcdList) + list(Module.M.LibraryPcdList):\r
+                for ModulePcd in Module.M.ModulePcdList + Module.M.LibraryPcdList:\r
                     TokenCName = ModulePcd.TokenCName\r
                     TokenSpaceGuid = ModulePcd.TokenSpaceGuidCName\r
                     ModuleDefault = ModulePcd.DefaultValue\r
@@ -1031,10 +1031,7 @@ class PcdReport(object):
 \r
 \r
                 if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
-                    try:\r
-                        PcdValueNumber = int(PcdValue.strip(), 0)\r
-                    except:\r
-                        PcdValueNumber = int(PcdValue.lstrip('0'))\r
+                    PcdValueNumber = int(PcdValue.strip(), 0)\r
                     if DecDefaultValue is None:\r
                         DecMatch = True\r
                     else:\r
@@ -1050,10 +1047,7 @@ class PcdReport(object):
                     if DscDefaultValue is None:\r
                         DscMatch = True\r
                     else:\r
-                        try:\r
-                            DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)\r
-                        except:\r
-                            DscDefaultValueNumber = int(DscDefaultValue.lstrip('0'))\r
+                        DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)\r
                         DscMatch = (DscDefaultValueNumber == PcdValueNumber)\r
                 else:\r
                     if DecDefaultValue is None:\r
@@ -1085,48 +1079,37 @@ class PcdReport(object):
                         DecMatch = False\r
                     elif Pcd.SkuOverrideValues:\r
                         DscOverride = False\r
-                        if Pcd.DefaultFromDSC:\r
-                            DscOverride = True\r
+                        if not Pcd.SkuInfoList:\r
+                            OverrideValues = Pcd.SkuOverrideValues\r
+                            if OverrideValues:\r
+                                Keys = OverrideValues.keys()\r
+                                Data = OverrideValues[Keys[0]]\r
+                                Struct = Data.values()[0]\r
+                                DscOverride = self.ParseStruct(Struct)\r
                         else:\r
-                            DictLen = 0\r
-                            for item in Pcd.SkuOverrideValues:\r
-                                DictLen += len(Pcd.SkuOverrideValues[item])\r
-                            if not DictLen:\r
-                                DscOverride = False\r
-                            else:\r
-                                if not Pcd.SkuInfoList:\r
-                                    OverrideValues = Pcd.SkuOverrideValues\r
-                                    if OverrideValues:\r
-                                        Keys = list(OverrideValues.keys())\r
-                                        Data = OverrideValues[Keys[0]]\r
-                                        Struct = list(Data.values())\r
-                                        DscOverride = self.ParseStruct(Struct[0])\r
-                                else:\r
-                                    SkuList = sorted(Pcd.SkuInfoList.keys())\r
-                                    for Sku in SkuList:\r
-                                        SkuInfo = Pcd.SkuInfoList[Sku]\r
-                                        if TypeName in ('DYNHII', 'DEXHII'):\r
-                                            if SkuInfo.DefaultStoreDict:\r
-                                                DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
-                                                for DefaultStore in DefaultStoreList:\r
-                                                    OverrideValues = Pcd.SkuOverrideValues[Sku]\r
-                                                    DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
-                                                    if DscOverride:\r
-                                                        break\r
-                                        else:\r
+                            SkuList = sorted(Pcd.SkuInfoList.keys())\r
+                            for Sku in SkuList:\r
+                                SkuInfo = Pcd.SkuInfoList[Sku]\r
+                                if TypeName in ('DYNHII', 'DEXHII'):\r
+                                    if SkuInfo.DefaultStoreDict:\r
+                                        DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
+                                        for DefaultStore in DefaultStoreList:\r
                                             OverrideValues = Pcd.SkuOverrideValues[Sku]\r
-                                            if OverrideValues:\r
-                                                Keys = list(OverrideValues.keys())\r
-                                                OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
-                                                DscOverride = self.ParseStruct(OverrideFieldStruct)\r
-                                        if DscOverride:\r
-                                            break\r
+                                            DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
+                                            if DscOverride:\r
+                                                break\r
+                                else:\r
+                                    OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+                                    if OverrideValues:\r
+                                        Keys = OverrideValues.keys()\r
+                                        OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
+                                        DscOverride = self.ParseStruct(OverrideFieldStruct)\r
+                                if DscOverride:\r
+                                    break\r
                         if DscOverride:\r
                             DscDefaultValue = True\r
                             DscMatch = True\r
                             DecMatch = False\r
-                        else:\r
-                            DecMatch = True\r
                     else:\r
                         DscDefaultValue = True\r
                         DscMatch = True\r
@@ -1169,10 +1152,7 @@ class PcdReport(object):
                         for ModulePath in ModuleOverride:\r
                             ModuleDefault = ModuleOverride[ModulePath]\r
                             if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
-                                try:\r
-                                    ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
-                                except:\r
-                                    ModulePcdDefaultValueNumber = int(ModuleDefault.lstrip('0'))\r
+                                ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
                                 Match = (ModulePcdDefaultValueNumber == PcdValueNumber)\r
                                 if Pcd.DatumType == 'BOOLEAN':\r
                                     ModuleDefault = str(ModulePcdDefaultValueNumber)\r
@@ -1251,10 +1231,7 @@ class PcdReport(object):
                     if Value.startswith(('0x', '0X')):\r
                         Value = '{} ({:d})'.format(Value, int(Value, 0))\r
                     else:\r
-                        try:\r
-                            Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
-                        except:\r
-                            Value = "0x{:X} ({})".format(int(Value.lstrip('0')), Value)\r
+                        Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
                 FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))\r
             if IsStructure:\r
                 self.PrintStructureInfo(File, Pcd.DefaultValues)\r
@@ -1279,12 +1256,11 @@ class PcdReport(object):
             if IsStructure:\r
                 OverrideValues = Pcd.SkuOverrideValues\r
                 if OverrideValues:\r
-                    Keys = list(OverrideValues.keys())\r
+                    Keys = OverrideValues.keys()\r
                     Data = OverrideValues[Keys[0]]\r
-                    Struct = list(Data.values())\r
-                    if Struct:\r
-                        OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct[0])\r
-                        self.PrintStructureInfo(File, OverrideFieldStruct)\r
+                    Struct = Data.values()[0]\r
+                    OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct)\r
+                    self.PrintStructureInfo(File, OverrideFieldStruct)\r
             self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
         else:\r
             FirstPrint = True\r
@@ -1406,7 +1382,7 @@ class PcdReport(object):
                     if IsStructure:\r
                         OverrideValues = Pcd.SkuOverrideValues[Sku]\r
                         if OverrideValues:\r
-                            Keys = list(OverrideValues.keys())\r
+                            Keys = OverrideValues.keys()\r
                             OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
                             self.PrintStructureInfo(File, OverrideFieldStruct)\r
                     self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
@@ -1638,7 +1614,7 @@ class PredictionReport(object):
         TempFile.close()\r
 \r
         try:\r
-            from Eot.EotMain import Eot\r
+            from Eot.Eot import Eot\r
 \r
             #\r
             # Invoke EOT tool and echo its runtime performance\r
@@ -2270,7 +2246,7 @@ class BuildReport(object):
     def GenerateReport(self, BuildDuration, AutoGenTime, MakeTime, GenFdsTime):\r
         if self.ReportFile:\r
             try:\r
-                File = StringIO('')\r
+                File = BytesIO('')\r
                 for (Wa, MaList) in self.ReportList:\r
                     PlatformReport(Wa, MaList, self.ReportType).GenerateReport(File, BuildDuration, AutoGenTime, MakeTime, GenFdsTime, self.ReportType)\r
                 Content = FileLinesSplit(File.getvalue(), gLineMaxLength)\r
index 1a2139569924b23027ecfecec5d1e10c2a92dea4..d74082fc2666154ae59293b66dd770107a3cba7c 100644 (file)
 ##\r
 # Import Modules\r
 #\r
+from __future__ import print_function\r
 import Common.LongFilePathOs as os\r
 import re\r
-from io import StringIO\r
+from io import BytesIO\r
 import sys\r
 import glob\r
 import time\r
 import platform\r
 import traceback\r
 import encodings.ascii\r
+import itertools\r
 import multiprocessing\r
 \r
 from struct import *\r
@@ -242,8 +244,8 @@ def ReadMessage(From, To, ExitFlag):
         # read one line a time\r
         Line = From.readline()\r
         # empty string means "end"\r
-        if Line is not None and Line != b"":\r
-            To(Line.rstrip().decode(encoding='utf-8', errors='ignore'))\r
+        if Line is not None and Line != "":\r
+            To(Line.rstrip())\r
         else:\r
             break\r
         if ExitFlag.isSet():\r
@@ -503,7 +505,7 @@ class BuildTask:
 \r
                 # get all pending tasks\r
                 BuildTask._PendingQueueLock.acquire()\r
-                BuildObjectList = list(BuildTask._PendingQueue.keys())\r
+                BuildObjectList = BuildTask._PendingQueue.keys()\r
                 #\r
                 # check if their dependency is resolved, and if true, move them\r
                 # into ready queue\r
@@ -724,7 +726,7 @@ class PeImageInfo():
         self.OutputDir        = OutputDir\r
         self.DebugDir         = DebugDir\r
         self.Image            = ImageClass\r
-        self.Image.Size       = (self.Image.Size // 0x1000 + 1) * 0x1000\r
+        self.Image.Size       = (self.Image.Size / 0x1000 + 1) * 0x1000\r
 \r
 ## The class implementing the EDK2 build process\r
 #\r
@@ -1171,9 +1173,9 @@ class Build():
                 f = open(PrebuildEnvFile)\r
                 envs = f.readlines()\r
                 f.close()\r
-                envs = map(lambda l: l.split('=', 1), envs)\r
-                envs = filter(lambda l: len(l) == 2, envs)\r
-                envs = map(lambda l: [i.strip() for i in l], envs)\r
+                envs = itertools.imap(lambda l: l.split('=', 1), envs)\r
+                envs = itertools.ifilter(lambda l: len(l) == 2, envs)\r
+                envs = itertools.imap(lambda l: [i.strip() for i in l], envs)\r
                 os.environ.update(dict(envs))\r
             EdkLogger.info("\n- Prebuild Done -\n")\r
 \r
@@ -1597,7 +1599,7 @@ class Build():
                         RtModuleList[Module.MetaFile] = ImageInfo\r
                         #IPF runtime driver needs to be at 2 page alignment.\r
                         if IsIpfPlatform and ImageInfo.Image.Size % 0x2000 != 0:\r
-                            ImageInfo.Image.Size = (ImageInfo.Image.Size // 0x2000 + 1) * 0x2000\r
+                            ImageInfo.Image.Size = (ImageInfo.Image.Size / 0x2000 + 1) * 0x2000\r
                         RtSize += ImageInfo.Image.Size\r
                     elif Module.ModuleType in [SUP_MODULE_SMM_CORE, SUP_MODULE_DXE_SMM_DRIVER, SUP_MODULE_MM_STANDALONE, SUP_MODULE_MM_CORE_STANDALONE]:\r
                         SmmModuleList[Module.MetaFile] = ImageInfo\r
@@ -1666,21 +1668,21 @@ class Build():
             for PcdInfo in PcdTable:\r
                 ReturnValue = 0\r
                 if PcdInfo[0] == TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_PEI_PAGE_SIZE:\r
-                    ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_PEI_PAGE_SIZE_DATA_TYPE, str (PeiSize // 0x1000))\r
+                    ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_PEI_PAGE_SIZE_DATA_TYPE, str (PeiSize / 0x1000))\r
                 elif PcdInfo[0] == TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_DXE_PAGE_SIZE:\r
-                    ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_DXE_PAGE_SIZE_DATA_TYPE, str (BtSize // 0x1000))\r
+                    ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_DXE_PAGE_SIZE_DATA_TYPE, str (BtSize / 0x1000))\r
                 elif PcdInfo[0] == TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE:\r
-                    ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE_DATA_TYPE, str (RtSize // 0x1000))\r
+                    ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE_DATA_TYPE, str (RtSize / 0x1000))\r
                 elif PcdInfo[0] == TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE and len (SmmModuleList) > 0:\r
-                    ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE_DATA_TYPE, str (SmmSize // 0x1000))\r
+                    ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE_DATA_TYPE, str (SmmSize / 0x1000))\r
                 if ReturnValue != 0:\r
                     EdkLogger.error("build", PARAMETER_INVALID, "Patch PCD value failed", ExtraData=ErrorInfo)\r
 \r
-        MapBuffer.write('PEI_CODE_PAGE_NUMBER      = 0x%x\n' % (PeiSize // 0x1000))\r
-        MapBuffer.write('BOOT_CODE_PAGE_NUMBER     = 0x%x\n' % (BtSize // 0x1000))\r
-        MapBuffer.write('RUNTIME_CODE_PAGE_NUMBER  = 0x%x\n' % (RtSize // 0x1000))\r
+        MapBuffer.write('PEI_CODE_PAGE_NUMBER      = 0x%x\n' % (PeiSize / 0x1000))\r
+        MapBuffer.write('BOOT_CODE_PAGE_NUMBER     = 0x%x\n' % (BtSize / 0x1000))\r
+        MapBuffer.write('RUNTIME_CODE_PAGE_NUMBER  = 0x%x\n' % (RtSize / 0x1000))\r
         if len (SmmModuleList) > 0:\r
-            MapBuffer.write('SMM_CODE_PAGE_NUMBER      = 0x%x\n' % (SmmSize // 0x1000))\r
+            MapBuffer.write('SMM_CODE_PAGE_NUMBER      = 0x%x\n' % (SmmSize / 0x1000))\r
 \r
         PeiBaseAddr = TopMemoryAddress - RtSize - BtSize\r
         BtBaseAddr  = TopMemoryAddress - RtSize\r
@@ -1780,7 +1782,7 @@ class Build():
                             if not Ma.IsLibrary:\r
                                 ModuleList[Ma.Guid.upper()] = Ma\r
 \r
-                    MapBuffer = StringIO('')\r
+                    MapBuffer = BytesIO('')\r
                     if self.LoadFixAddress != 0:\r
                         #\r
                         # Rebase module to the preferred memory address before GenFds\r
@@ -1938,7 +1940,7 @@ class Build():
                             if not Ma.IsLibrary:\r
                                 ModuleList[Ma.Guid.upper()] = Ma\r
 \r
-                    MapBuffer = StringIO('')\r
+                    MapBuffer = BytesIO('')\r
                     if self.LoadFixAddress != 0:\r
                         #\r
                         # Rebase module to the preferred memory address before GenFds\r
@@ -2125,7 +2127,7 @@ class Build():
                     #\r
                     # Rebase module to the preferred memory address before GenFds\r
                     #\r
-                    MapBuffer = StringIO('')\r
+                    MapBuffer = BytesIO('')\r
                     if self.LoadFixAddress != 0:\r
                         self._CollectModuleMapBuffer(MapBuffer, ModuleList)\r
 \r
@@ -2177,7 +2179,7 @@ class Build():
 \r
                     # Look through the tool definitions for GUIDed tools\r
                     guidAttribs = []\r
-                    for (attrib, value) in self.ToolDef.ToolsDefTxtDictionary.items():\r
+                    for (attrib, value) in self.ToolDef.ToolsDefTxtDictionary.iteritems():\r
                         if attrib.upper().endswith('_GUID'):\r
                             split = attrib.split('_')\r
                             thisPrefix = '_'.join(split[0:3]) + '_'\r
index c76b2bc20eb8a78dcd47f8fffd4f73ae76aeb888..6ae62f180a840090141d4fdf23aafe0e3a7e99c8 100644 (file)
@@ -110,7 +110,7 @@ class Tests(TestTools.BaseToolsTest):
         # This test makes sure that BaseTools rejects these characters\r
         # if seen in a .uni file.\r
         #\r
-        data = codecs.BOM_UTF16_LE + b'//\x01\xd8 '\r
+        data = codecs.BOM_UTF16_LE + '//\x01\xd8 '\r
 \r
         self.CheckFile(encoding=None, shouldPass=False, string=data)\r
 \r
@@ -161,7 +161,7 @@ class Tests(TestTools.BaseToolsTest):
         # This test makes sure that BaseTools rejects these characters\r
         # if seen in a .uni file.\r
         #\r
-        data = b'\xed\xa0\x81'\r
+        data = '\xed\xa0\x81'\r
 \r
         self.CheckFile(encoding=None, shouldPass=False, string=data)\r
 \r
@@ -170,7 +170,7 @@ class Tests(TestTools.BaseToolsTest):
         # Same test as testSurrogatePairUnicodeCharInUtf8File, but add\r
         # the UTF-8 BOM\r
         #\r
-        data = codecs.BOM_UTF8 + b'\xed\xa0\x81'\r
+        data = codecs.BOM_UTF8 + '\xed\xa0\x81'\r
 \r
         self.CheckFile(encoding=None, shouldPass=False, string=data)\r
 \r
index b920044ae17bd73a2f68846d19fd83fe663e216a..0c11f6aae94652caab22c79fbba5a492153e3565 100644 (file)
@@ -14,7 +14,7 @@
 all: test\r
 \r
 test:\r
-       @if command -v python3 >/dev/null 2>&1; then python3 RunTests.py; else echo "Error: Please install a python 3 tool!"; fi\r
+       @if command -v python2 >/dev/null 2>&1; then python2 RunTests.py; else python RunTests.py; fi\r
 \r
 clean:\r
        find . -name '*.pyc' -exec rm '{}' ';'\r
index 65948a7ae2ec039f8dd089673b5e659510cb57f1..e16e993048e469ea58481e40955375deb40ba298 100644 (file)
@@ -40,7 +40,7 @@ if PythonSourceDir not in sys.path:
 \r
 def MakeTheTestSuite(localItems):\r
     tests = []\r
-    for name, item in localItems.items():\r
+    for name, item in localItems.iteritems():\r
         if isinstance(item, type):\r
             if issubclass(item, unittest.TestCase):\r
                 tests.append(unittest.TestLoader().loadTestsFromTestCase(item))\r
@@ -146,12 +146,9 @@ class BaseToolsTest(unittest.TestCase):
         return data\r
 \r
     def WriteTmpFile(self, fileName, data):\r
-        if isinstance(data, bytes):\r
-            with open(self.GetTmpFilePath(fileName), 'wb') as f:\r
-                f.write(data)\r
-        else:\r
-            with open(self.GetTmpFilePath(fileName), 'w') as f:\r
-                f.write(data)\r
+        f = open(self.GetTmpFilePath(fileName), 'w')\r
+        f.write(data)\r
+        f.close()\r
 \r
     def GenRandomFileData(self, fileName, minlen = None, maxlen = None):\r
         if maxlen is None: maxlen = minlen\r
@@ -164,7 +161,7 @@ class BaseToolsTest(unittest.TestCase):
         if maxlen is None: maxlen = minlen\r
         return ''.join(\r
             [chr(random.randint(0, 255))\r
-             for x in range(random.randint(minlen, maxlen))\r
+             for x in xrange(random.randint(minlen, maxlen))\r
             ])\r
 \r
     def setUp(self):\r
@@ -186,3 +183,4 @@ class BaseToolsTest(unittest.TestCase):
 \r
         os.environ['PATH'] = self.savedEnvPath\r
         sys.path = self.savedSysPath\r
+\r
index 0d4028db785f573e9ddf4a3f9b3694d3e4bfac09..33d50f58ad87df6909ae7dbcc691cd5503e3789e 100755 (executable)
@@ -299,32 +299,18 @@ goto end
      )\r
   )\r
 \r
-set PYTHON3=py -3\r
-:check_python_version\r
-  %PYTHON3% --version >NUL 2>&1\r
-  if %ERRORLEVEL% NEQ 0 (\r
-    if defined PYTHON_HOME (\r
-      if EXIST "%PYTHON_HOME%" (\r
-        set PYTHON3=%PYTHON_HOME%\python.exe\r
-      )\r
+  if not defined PYTHON_HOME (\r
+    if defined PYTHONHOME (\r
+      set PYTHON_HOME=%PYTHONHOME%\r
+    ) else (\r
+      echo.\r
+      echo !!! ERROR !!! Binary python tools are missing. PYTHON_HOME environment variable is not set.\r
+      echo PYTHON_HOME is required to build or execute the python tools.\r
+      echo.\r
+      goto end\r
     )\r
   )\r
-  %PYTHON3% --version >NUL 2>&1\r
-  if %ERRORLEVEL% NEQ 0 (\r
-     echo.\r
-     echo !!! ERROR !!!  %PYTHON3% not install.\r
-     echo.\r
-     goto end\r
-   )\r
-  FOR /F "TOKENS=1,2" %%i IN ('%PYTHON3% --version') DO set VERSION=%%j\r
-  if /I "%VERSION%" LSS "3.6" (\r
-     echo.\r
-     echo !!! ERROR !!!  python version should greater than or equal to version 3.6.\r
-     echo.\r
-     goto end\r
-  )\r
 \r
-:check_freezer_path\r
   @REM We have Python, now test for FreezePython application\r
   if not defined PYTHON_FREEZER_PATH (\r
     echo.\r
index d4e577e607811fa90f712c8e691a70c6218f13ee..93d652575804d49f9922862f51c862ad98552091 100755 (executable)
@@ -111,41 +111,10 @@ function SetupEnv()
   fi
 }
 
-function SetupPython3()
-{
-  for python in $(whereis python3)
-  do
-    python=$(echo $python | grep "[[:digit:]]$" || true)
-    python_version=${python##*python}
-    if [ -z "${python_version}" ];then
-      continue
-    fi
-    if [ -z $origin_version ];then
-      origin_version=$python_version
-      export PYTHON3=$python
-      continue
-    fi
-    ret=`echo "$origin_version < $python_version" |bc`
-    if [ "$ret" -eq 1 ]; then
-      origin_version=$python_version
-      export PYTHON3=$python
-    fi
-  done
-  if [ -z "$origin_version" ] || [ `echo "$origin_version < 3.6" |bc` -eq 1 ]; then
-    echo
-    echo ERROR!!!, python version should greater than or equal to version 3.6.
-    echo 
-    return 1
-  fi
-
-}
-
 function SourceEnv()
 {
   SetWorkspace &&
   SetupEnv
-  SetupPython3
 }
 
 I=$#