diff --git a/tools/lexer/jflex-1.4/.classpath b/tools/lexer/jflex-1.4/.classpath deleted file mode 100644 index c7ff90e6b35c..000000000000 --- a/tools/lexer/jflex-1.4/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/tools/lexer/jflex-1.4/.project b/tools/lexer/jflex-1.4/.project deleted file mode 100644 index 3160ec94a23d..000000000000 --- a/tools/lexer/jflex-1.4/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - jflex - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/tools/lexer/jflex-1.4/COPYRIGHT b/tools/lexer/jflex-1.4/COPYRIGHT deleted file mode 100644 index 0109c544d770..000000000000 --- a/tools/lexer/jflex-1.4/COPYRIGHT +++ /dev/null @@ -1,303 +0,0 @@ -JFlex - Copying, Warranty & License - - - -JFlex is free software, published under the terms of the GNU General Public License. - -There is absolutely NO WARRANTY for JFlex, its code and its documentation. - -The code generated by JFlex inherits the copyright of the specification it -was produced from. If it was your specification, you may use the generated -code without restriction. - - - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - - -0. - This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - - -1. - You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - -2. - You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - - - a) - You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - - b) - You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - - c) - If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - - -3. - You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - - - a) - Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - - b) - Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - - c) - Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - -4. - You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - - -5. - You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - - -6. - Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - - -7. - If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - - -8. - If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - - -9. - The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - - - -10. - If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - - -NO WARRANTY - - - -11. - BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - - -12. - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - - - -END OF TERMS AND CONDITIONS diff --git a/tools/lexer/jflex-1.4/JFlex-Changes.txt b/tools/lexer/jflex-1.4/JFlex-Changes.txt deleted file mode 100644 index e9fecd873b72..000000000000 --- a/tools/lexer/jflex-1.4/JFlex-Changes.txt +++ /dev/null @@ -1,21 +0,0 @@ -The following changes to JFlex 1.4.3 have been done by JetBrains developers: - -July 26, 2005: - - * JFlexTask.java: Added setCharAt() method for setting the -charat option from Ant - builds. - -July 8, 2005: - - * Main.java, Options.java, Emitter.java: Added new command line option -charat. - The option replaces array index access when accessing the zzBufferL array with - calls to the .charAt() method. - -December 21, 2009 - * Applied jflex-1.4.3-unicode-character-category.patch - - -October 1, 2012: - * Merged pull request : - Fix JFlex's Action.GENERAL_LOOK lookahead option to work with --charAt and --sliceandcharat. - https://github.com/gshakhn/intellij-community/commit/e537a27e2bfc8e12500f00fa33e8e51ccaf47243 diff --git a/tools/lexer/jflex-1.4/bin/jflex b/tools/lexer/jflex-1.4/bin/jflex deleted file mode 100755 index 65cb93efbbbb..000000000000 --- a/tools/lexer/jflex-1.4/bin/jflex +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# -# JFlex start script $Revision$ -# -# if Java is not in your binary path, you need to supply its -# location in this script. The script automatically finds -# JFLEX_HOME when called directly, via binary path, or symbolic -# link. -# -# Site wide installation: simply make a symlink from e.g. -# /usr/bin/jflex to this script at its original position -# -#=================================================================== -# -# configurables: - -# path to the java interpreter -JAVA=java - -# end configurables -# -#=================================================================== -# - -# calculate true location - -PRG=`type $0` -PRG="${PRG##* }" - -# If PRG is a symlink, trace it to the real home directory - -while [ -L "$PRG" ] -do - newprg=$(ls -l ${PRG}) - newprg="${newprg##*-> }" - [ "${newprg}" = "${newprg#/}" ] && newprg="${PRG%/*}/${newprg}" - PRG="$newprg" -done - -PRG="${PRG%/*}" -JFLEX_HOME="${PRG}/.." - -# -------------------------------------------------------------------- - -export CLASSPATH -CLASSPATH=$JFLEX_HOME/lib/JFlex.jar - -$JAVA JFlex.Main $@ - -#for more memory: -#$JAVA -Xmx128m JFlex.Main $@ diff --git a/tools/lexer/jflex-1.4/bin/jflex.bat b/tools/lexer/jflex-1.4/bin/jflex.bat deleted file mode 100644 index dda2f4358a8f..000000000000 --- a/tools/lexer/jflex-1.4/bin/jflex.bat +++ /dev/null @@ -1,19 +0,0 @@ -@echo off -REM Please adjust the paths JFLEX_HOME and JAVA_HOME to suit your needs -REM (please do not add a trailing backslash) - -set JFLEX_HOME=C:\JFLEX - -REM only needed for JDK 1.1.x: -set JAVA_HOME=C:\JAVA - - -REM ------------------------------------------------------------------- - -set CLPATH=%JAVA_HOME%\lib\classes.zip;%JFLEX_HOME%\lib\JFlex.jar - -REM for JDK 1.1.x -%JAVA_HOME%\bin\java -classpath %CLPATH% JFlex.Main %1 %2 %3 %4 %5 %6 %7 %8 %9 - -REM for JDK 1.2 -rem java -Xmx128m -jar %JFLEX_HOME%\lib\JFlex.jar %1 %2 %3 %4 %5 %6 %7 %8 %9 diff --git a/tools/lexer/jflex-1.4/doc/COPYRIGHT b/tools/lexer/jflex-1.4/doc/COPYRIGHT deleted file mode 100644 index 0109c544d770..000000000000 --- a/tools/lexer/jflex-1.4/doc/COPYRIGHT +++ /dev/null @@ -1,303 +0,0 @@ -JFlex - Copying, Warranty & License - - - -JFlex is free software, published under the terms of the GNU General Public License. - -There is absolutely NO WARRANTY for JFlex, its code and its documentation. - -The code generated by JFlex inherits the copyright of the specification it -was produced from. If it was your specification, you may use the generated -code without restriction. - - - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - - -0. - This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - - -1. - You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - -2. - You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - - - a) - You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - - b) - You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - - c) - If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - - -3. - You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - - - a) - Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - - b) - Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - - c) - Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - -4. - You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - - -5. - You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - - -6. - Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - - -7. - If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - - -8. - If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - - -9. - The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - - - -10. - If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - - -NO WARRANTY - - - -11. - BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - - -12. - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - - - -END OF TERMS AND CONDITIONS diff --git a/tools/lexer/jflex-1.4/doc/crossref.png b/tools/lexer/jflex-1.4/doc/crossref.png deleted file mode 100644 index 295d626ced7d..000000000000 Binary files a/tools/lexer/jflex-1.4/doc/crossref.png and /dev/null differ diff --git a/tools/lexer/jflex-1.4/doc/footnote.png b/tools/lexer/jflex-1.4/doc/footnote.png deleted file mode 100644 index 5eccb4ef18af..000000000000 Binary files a/tools/lexer/jflex-1.4/doc/footnote.png and /dev/null differ diff --git a/tools/lexer/jflex-1.4/doc/jflex_anttask.html b/tools/lexer/jflex-1.4/doc/jflex_anttask.html deleted file mode 100644 index 3a05aaf2488d..000000000000 --- a/tools/lexer/jflex-1.4/doc/jflex_anttask.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - -JFlex Ant Task - - - - -

JFlex Ant Task

-

- JFlex can be easily integrated with Ant build tool. - To use JFlex with Ant, simply copy JFlex.jar to $ANT_HOME/lib/ directory. -

-

Description

-

- The JFlex Ant Task invokes the JFlex lexical - analyzer generator on a grammar file. -

-

- To use the JFlex task, the following line must be placed in the Ant build file: -

-
<taskdef classname="JFlex.anttask.JFlexTask" name="jflex" />
- -

- The JFlex task requires the file attribute to be set to the source grammar file (*.flex). - Unless the target directory is specified with the destdir option, - the generated class will be saved to the same directory where grammar file resides. - Like javac, the JFlex task creates subdirectories in destdir according to the - generated class package. -

-

- This task only invokes JFlex if the grammar file is newer than the generated - files. -

- -

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionRequiredDefault
file="file"The grammar file to process.Yes
destdir="dir" - The directory to write the generated files to. If not set, the files - are written to the directory containing the grammar file. Note that unlike - JFlex's "-d" command line option, destdir causes the generated file to be written to - {destdir}/{package name}. This behaviour is similar to javac -d dir. - No
outdir="dir" - The directory to write the generated files to. If not set, the files - are written to the directory containing the grammar file. This options works - exactly like JFlex's "-d" command line option, it causes the output file to - be written to dir regardless of the package name. - No
verboseDisplay generation process messages.No"off"
dumpDump character classes, NFA and DFA tables.No"off"
time or

timeStatistics

Display generation time statistics.No"off"
nomin or

skipMinimization

Skip minimization step.No"off"
skel="file" or

skeleton="file"

Use external skeleton file.No"off"
dot or

generateDot

Write graphviz .dot files for the generated automata (alpha).No"off"
nobakDo not make a backup if the generated file exists.No"off"
switchUse code generation method switch.No"off"
tableUse code generation method table.No"off"
packUse code generation method pack.No"on"
-

Example

-
-<jflex
-    file="src/parser/Parser.flex"
-    destdir="build/generated/"
-/>
-
-

- JFlex generates the lexical analyzer for src/parser/Parser.flex and saves the result - to build/generated/parser/, providing Parser.flex declares to be in package parser. -

- -
-<jflex
-    file="src/parser/Parser.flex"
-    destdir="build/generated/"
-/>
-<javac
-    srcdir="build/generated/"
-    destdir="build/classes/"
-/>
-
-

- The same as above plus compile generated classes to build/classes -

-
- - - - diff --git a/tools/lexer/jflex-1.4/doc/logo.gif b/tools/lexer/jflex-1.4/doc/logo.gif deleted file mode 100644 index 1da5d28c1d94..000000000000 Binary files a/tools/lexer/jflex-1.4/doc/logo.gif and /dev/null differ diff --git a/tools/lexer/jflex-1.4/doc/manual.css b/tools/lexer/jflex-1.4/doc/manual.css deleted file mode 100644 index 1d69acfd988b..000000000000 --- a/tools/lexer/jflex-1.4/doc/manual.css +++ /dev/null @@ -1,19 +0,0 @@ -body { background-color:#FFFFFF; } -table { background-color:#F0F0F0; } -h1 { font-size:16pt; font-style:italic; font-weight:bold; font-family:arial,helvetica; - border-top-width:medium; border-top-style:solid; padding-top:5mm; margin-top:1cm; } -h2 { font-size:14pt; font-style:italic; font-weight:bold; font-family:arial,helvetica; - border-top-width:medium; border-top-style:solid; padding-top:5mm; margin-top:1cm; } -h3 { font-size:14pt; font-weight:bold; font-family:arial,helvetica; margin-top:1cm; } -h4 { font-size:12pt; font-family:arial,helvetica; } - -SMALL.TINY { font-size:xx-small } -SMALL.SCRIPTSIZE { font-size:xx-small } -SMALL.FOOTNOTESIZE { font-size:x-small } -SMALL.SMALL { font-size:small } -BIG.LARGE { font-size:large } -BIG.XLARGE { font-size:x-large } -BIG.XXLARGE { font-size:xx-large } -BIG.HUGE { font-size:xx-large } -BIG.XHUGE { font-size:xx-large } - diff --git a/tools/lexer/jflex-1.4/doc/manual.html b/tools/lexer/jflex-1.4/doc/manual.html deleted file mode 100644 index 26713a5afe91..000000000000 --- a/tools/lexer/jflex-1.4/doc/manual.html +++ /dev/null @@ -1,3920 +0,0 @@ - - - - - -JFlex User's Manual - - - - - - - - - - - - - - - -

- -

- - -
- -

-

-The Fast Lexical Analyser Generator -
-

-
-

-
Copyright ©1998-2004 by Gerwin Klein -
-


-

JFlex User's Manual -
-


-

Version 1.4, April 12, 2004 - -
- -

-
- -

-Contents -

- - - - - -


-Introduction -

-JFlex is a lexical analyzer generator for Java[*]written in Java. It is also a rewrite of the very useful tool JLex [3] which -was developed by Elliot Berk at Princeton University. As Vern Paxon states -for his C/C++ tool flex [11]: They do not share any code though. - -

- -

-Design goals -

-The main design goals of JFlex are: - - - -

- -

-About this manual -

-This manual gives a brief but complete description of the tool JFlex. It -assumes that you are familiar with the issue of lexical analysis. The references [1], -[2], and [13] provide a good introduction to this topic. - -

-The next section of this manual describes installation procedures -for JFlex. If you never worked with JLex or -just want to compare a JLex and a JFlex scanner specification you -should also read Working with JFlex - an example -(section [*]). All options and the complete -specification syntax are presented in -Lexical specifications (section [*]); -Encodings, Platforms, and Unicode (section [*]) -provides information about scannig text vs. binary files. -If you are interested in performance -considerations and comparing JLex with JFlex speed, -a few words on performance (section [*]) -might be just right for you. Those who want to -use their old JLex specifications may want to check out section [*] -Porting from JLex to avoid possible problems -with not portable or non standard JLex behavior that has been fixed in -JFlex. Section [*] talks about porting scanners from the -Unix tools lex and flex. Interfacing JFlex scanners with the LALR -parser generators CUP and BYacc/J is explained in working - together (section [*]). Section [*] -Bugs gives a list of currently known active bugs. -The manual concludes with notes about -Copying and License (section [*]) and -references. - -

- -


-Installing and Running JFlex -

- -

- -

-Installing JFlex -

- -

- -


-Windows -

-To install JFlex on Windows 95/98/NT/XP, follow these three steps: - -
    -
  1. Unzip the file you downloaded into the directory you want JFlex in (using -something like -WinZip). -If you unzipped it to say C:\, the following directory structure -should be generated: - -
    -C:\JFlex\                          
    -      +--bin\                   (start scripts) 
    -      +--doc\                   (FAQ and manual)
    -      +--examples\ 
    -               +--binary\       (scanning binary files)
    -               +--byaccj\       (calculator example for BYacc/J)
    -               +--cup\          (calculator example for cup)
    -               +--interpreter\  (interpreter example for cup)
    -               +--java\         (Java lexer specification) 
    -               +--simple\       (example scanner)
    -               +--standalone\   (a simple standalone scanner) 
    -      +--lib\                   (the precompiled classes) 
    -      +--src\ 
    -          +--JFlex\             (source code of JFlex) 
    -          +--JFlex\gui          (source code of JFlex UI classes)
    -          +--java_cup\runtime\  (source code of cup runtime classes)
    -
    - -

    -

  2. -
  3. Edit the file bin\jflex.bat -(in the example it's C:\JFlex\bin\jflex.bat) -such that - -

    - -

    - -

    -

  4. -
  5. Include the bin\ directory of JFlex in your path. -(the one that contains the start script, in the example: C:\JFlex\bin). -
  6. -
- -

- -

-Unix with tar archive -

- -

-To install JFlex on a Unix system, follow these two steps: - -

- -

-You can verify the integrity of the downloaded file with -the MD5 checksum available on the JFlex download page. -If you put the checksum file in the same directory -as the archive, you run: - -

-md5sum --check jflex-1.4.tar.gz.md5 - -

-It should tell you - -

-jflex-1.4.tar.gz: OK - -

- -

-Linux with RPM -

- -

- -

- -

-You can verify the integrity of the downloaded rpm file with - -

-rpm --checksig jflex-1.4-0.rpm - -

-This requires my pgp public key. If you don't have it, you can use - -

-rpm --checksig --nopgp jflex-1.4-0.rpm - -

-or you can get it from http://www.jflex.de/public-key.asc. - -

- -

-Running JFlex -

-You run JFlex with: - -

-jflex <options> <inputfiles> - -

-It is also possible to skip the start script in bin\ -and include the file lib\JFlex.jar -in your CLASSPATH environment variable instead. - -

-Then you run JFlex with: - -

-java JFlex.Main <options> <inputfiles> - -

-The input files and options are in both cases optional. If you don't provide a file name on -the command line, JFlex will pop up a window to ask you for one. - -

-JFlex knows about the following options: - -

-

-
-
-d <directory> -
writes the generated file to the directory <directory> - -

-

-
-
--skel <file> -
uses external skeleton <file>. This is mainly for JFlex - maintenance and special low level customizations. Use only when you - know what you are doing! JFlex comes with a skeleton file in the - src directory that reflects exactly the internal, precompiled - skeleton and can be used with the -skel option. - -

-

-
-
--nomin -
skip the DFA minimization step during scanner generation. - -

-

-
-
--jlex -
tries even harder to comply to JLex interpretation of specs. - -

-

-
-
--dot -
generate graphviz dot files for the NFA, DFA and minimized - DFA. This feature is still in alpha status, and not - fully implemented yet. - -

-

-
-
--dump -
display transition tables of NFA, initial DFA, and minimized DFA - -

-

-
-
--verbose or -v -
display generation progress messages (enabled by default) - -

-

-
-
--quiet or -q -
display error messages only (no chatter about what JFlex is - currently doing) - -

-

-
-
--time -
display time statistics about the code generation process - (not very accurate) - -

-

-
-
--version -
print version number - -

-

-
-
--info -
print system and JDK information (useful if you'd like - to report a problem) - -

-

-
-
--pack -
use the %pack code generation method by default - -

-

-
-
--table -
use the %table code generation method by default - -

-

-
-
--switch -
use the %switch code generation method by default - -

-

-
-
--help or -h -
print a help message explaining options and usage of JFlex. -
-
- -

- -


-A simple Example: How to work with JFlex -

-To demonstrate what a lexical specification with JFlex looks like, this -section presents a part of the specification for the Java language. -The example does not describe the whole lexical structure of Java programs, -but only a small and simplified part of it (some keywords, some operators, -comments and only two kinds of literals). It also shows how to interface -with the LALR parser generator CUP [8] and therefore -uses a class sym (generated by CUP), where integer constants for -the terminal tokens of the CUP grammar are declared. JFlex comes with a -directory examples, where you can find a small standalone scanner -that doesn't need other tools like CUP to give you a running example. -The "examples" directory also contains a complete JFlex -specification of the lexical structure of Java programs together with the -CUP parser specification for Java by -C. Scott Ananian, obtained -from the CUP [8] website (it was modified to interface with the JFlex scanner). -Both specifications adhere to the Java Language Specification [7]. - -

-

-/* JFlex example: part of Java language lexer specification */
-import java_cup.runtime.*;
-
-/**
- * This class is a simple example lexer.
- */
-%%
-
-
-%class Lexer
-%unicode
-%cup
-%line
-%column
-
-
-%{
-  StringBuffer string = new StringBuffer();
-
-  private Symbol symbol(int type) {
-    return new Symbol(type, yyline, yycolumn);
-  }
-  private Symbol symbol(int type, Object value) {
-    return new Symbol(type, yyline, yycolumn, value);
-  }
-%}
-
-
-LineTerminator = \r|\n|\r\n
-InputCharacter = [^\r\n]
-WhiteSpace     = {LineTerminator} | [ \t\f]
-
-/* comments */
-Comment = {TraditionalComment} | {EndOfLineComment} | {DocumentationComment}
-
-TraditionalComment   = "/*" [^*] ~"*/" | "/*" "*"+ "/"
-EndOfLineComment     = "//" {InputCharacter}* {LineTerminator}
-DocumentationComment = "/**" {CommentContent} "*"+ "/"
-CommentContent       = ( [^*] | \*+ [^/*] )*
-
-Identifier = [:jletter:] [:jletterdigit:]*
-
-DecIntegerLiteral = 0 | [1-9][0-9]*
-
-
-%state STRING
-
-%%
-
-
-/* keywords */
-<YYINITIAL> "abstract"           { return symbol(sym.ABSTRACT); }
-<YYINITIAL> "boolean"            { return symbol(sym.BOOLEAN); }
-<YYINITIAL> "break"              { return symbol(sym.BREAK); }
-
-
-<YYINITIAL> {
-  /* identifiers */ 
-  {Identifier}                   { return symbol(sym.IDENTIFIER); }
- 
-  /* literals */
-  {DecIntegerLiteral}            { return symbol(sym.INTEGER_LITERAL); }
-  \"                             { string.setLength(0); yybegin(STRING); }
-
-  /* operators */
-  "="                            { return symbol(sym.EQ); }
-  "=="                           { return symbol(sym.EQEQ); }
-  "+"                            { return symbol(sym.PLUS); }
-
-  /* comments */
-  {Comment}                      { /* ignore */ }
- 
-  /* whitespace */
-  {WhiteSpace}                   { /* ignore */ }
-}
-
-
-<STRING> {
-  \"                             { yybegin(YYINITIAL); 
-                                   return symbol(sym.STRING_LITERAL, 
-                                   string.toString()); }
-  [^\n\r\"\\]+                   { string.append( yytext() ); }
-  \\t                            { string.append('\t'); }
-  \\n                            { string.append('\n'); }
-
-  \\r                            { string.append('\r'); }
-  \\\"                           { string.append('\"'); }
-  \\                             { string.append('\\'); }
-}
-
-
-/* error fallback */
-.|\n                             { throw new Error("Illegal character <"+
-                                                    yytext()+">"); }
-
- -

-From this specification JFlex generates a .java file with one -class that contains code for the scanner. The class will have a -constructor taking a java.io.Reader from which the input is -read. The class will also have a function yylex() that runs the -scanner and that can be used to get the next token from the input (in this -example the function actually has the name next_token() because -the specification uses the %cup switch). - -

-As with JLex, the specification consists of three parts, divided by %%: - -

- -

- -


-Code to include -

-Let's take a look at the first section, ``user code'': The text up to the -first line starting with %% is copied verbatim to the top -of the generated lexer class (before the actual class declaration). -Beside package and import statements there is usually not much -to do here. If the code ends with a javadoc class comment, the generated class -will get this comment, if not, JFlex will generate one automatically. - -

- -


-Options and Macros -

-The second section ``options and declarations'' is more interesting. It consists -of a set of options, code that is included inside the generated scanner -class, lexical states and macro declarations. Each JFlex option must begin -a line of the specification and starts with a %. In our example -the following options are used: - -

- -

- -

-The code included in %{...%} -is copied verbatim into the generated lexer class source. -Here you can declare member variables and functions that are used -inside scanner actions. In our example we declare a StringBuffer ``string'' -in which we will store parts of string literals and two helper functions -``symbol'' that create java_cup.runtime.Symbol objects -with position information of the current token (see section [*] -JFlex and CUP -for how to interface with the parser generator CUP). As JFlex options, both -%{ and \%} must begin a line. - -

-The specification continues with macro declarations. Macros are -abbreviations for regular expressions, used to make lexical specifications -easier to read and understand. A macro declaration -consists of a macro identifier followed by =, then followed by -the regular expression it represents. This regular expression may -itself contain macro usages. Although this allows a grammar like specification -style, macros are still just abbreviations and not non terminals - they -cannot be recursive or mutually recursive. Cycles in macro definitions -are detected and reported at generation time by JFlex. - -

-Here some of the example macros in more detail: - -

- -

-The last part of the second section in our -lexical specification is a lexical state declaration: -%state STRING -declares a lexical state STRING that can be -used in the ``lexical rules'' part of the specification. A state declaration -is a line starting with %state followed by a space or comma -separated list of state identifiers. There can be more than one line starting -with %state. - -

- -


-Rules and Actions -

-The "lexical rules" section of a JFlex specification contains regular expressions -and actions (Java code) that are executed when the scanner matches the -associated regular expression. As the scanner reads its input, it keeps -track of all regular expressions and activates the action of the expression -that has the longest match. Our specification above for instance would with input -"breaker" match the regular expression for Identifier -and not the keyword "break" -followed by the Identifier "er", because rule {Identifier} -matches more of this input at once (i.e. it matches all of it) -than any other rule in the specification. If two regular expressions both -have the longest match for a certain input, the scanner chooses the action -of the expression that appears first in the specification. In that way, we -get for input "break" the keyword "break" and not an -Identifier "break". - -

-Additional to regular expression matches, one can use lexical states to -refine a specification. A lexical state acts like a start condition. -If the scanner is in lexical state STRING, only expressions that -are preceded by the start condition <STRING> can be matched. -A start condition of a regular expression can contain more than one lexical -state. It is then matched when the lexer is in any of these lexical states. -The lexical state YYINITIAL is predefined and is also the state -in which the lexer begins scanning. If a regular expression has no start -conditions it is matched in all lexical states. - -

-Since you often have a bunch of expressions with the same start conditions, -JFlex allows the same abbreviation as the Unix tool flex: -

-<STRING> {
-  expr1   { action1 }
-  expr2   { action2 }
-}
-
-means that both expr1 and expr2 have start condition <STRING>. - -

-The first three rules in our example demonstrate the syntax of a regular -expression preceded by the start condition <YYINITIAL>. - -

-<YYINITIAL> "abstract" { return symbol(sym.ABSTRACT); } - -

-matches the input "abstract" only if the scanner is in its -start state "YYINITIAL". When the string "abstract" is -matched, the scanner function returns the CUP symbol sym.ABSTRACT. -If an action does not return a value, the scanning process is resumed immediately -after executing the action. - -

-The rules enclosed in - -

-<YYINITIAL> { -
... -
}
- -

-demonstrate the abbreviated syntax and are also only matched in state YYINITIAL. - -

-Of these rules, one may be of special interest: - -

-\" { string.setLength(0); yybegin(STRING); } - -

-If the scanner matches a double quote in state YYINITIAL we -have recognized the start of a string literal. Therefore we clear our StringBuffer -that will hold the content of this string literal and tell the scanner -with yybegin(STRING) to switch into the lexical state STRING. -Because we do not yet return a value to the parser, our scanner proceeds -immediately. - -

-In lexical state STRING another -rule demonstrates how to refer to the input that has been matched: - -

-[^\n\r\"]+ { string.append( yytext() ); } - -

-The expression [^\n\r\"]+ matches -all characters in the input up to the next backslash (indicating an -escape sequence such as \n), double quote (indicating the end -of the string), or line terminator (which must not occur in a string literal). -The matched region of the input is referred to with yytext() -and appended to the content of the string literal parsed so far. - -

-The last lexical rule in the example specification -is used as an error fallback. It matches any character in any state that -has not been matched by another rule. It doesn't conflict with any other -rule because it has the least priority (because it's the last rule) and -because it matches only one character (so it can't have longest match -precedence over any other rule). - -

- -

-How to get it going -

- - - -

- -


-Lexical Specifications -

-As shown above, a lexical specification file for JFlex consists of three -parts divided by a single line starting with %%: - -

-UserCode -
%% -
Options and declarations -
%% -
Lexical rules - -

-In all parts of the specification comments of the form -/* comment text */ and the Java style end of line comments starting with // -are permitted. JFlex comments do nest - so the number of /* and */ -should be balanced. - -

- -


-User code -

-The first part contains user code that is copied verbatim into the beginning -of the source file of the generated lexer before the scanner class is declared. -As shown in the example above, this is the place to put package -declarations and import -statements. It is possible, but not considered as good Java programming -style to put own helper class (such as token classes) in this section. -They should get their own .java file instead. - -

- -


-Options and declarations -

-The second part of the lexical specification contains options -to customize your generated lexer (JFlex directives and Java code to include in -different parts of the lexer), declarations of lexical states and -macro definitions for use in the third section -``Lexical rules'' of the lexical specification file. - -

-Each JFlex directive must be situated at the beginning of a line -and starts with the % character. Directives that have one or -more parameters are described as follows: - -

-%class "classname" - -

-means that you start a line with %class followed by a space followed -by the name of the class for the generated scanner (the double quotes are -not to be entered, see the example specification in -section [*]). - -

- -


-Class options and user class code -

-These options regard name, constructor, API, and related parts of the -generated scanner class. - - - -

- -


-Scanning method -

-This section shows how the scanning method can be customized. You can redefine -the name and return type of the method and it is possible to declare -exceptions that may be thrown in one of the actions of the specification. -If no return type is specified, the scanning method will be declared as -returning values of class Yytoken. - - - -

- -


-The end of file -

-There is always a default value that the scanning method will return when -the end of file has been reached. You may however define a specific value -to return and a specific piece of code that should be executed when the -end of file is reached. - -

-The default end of file values depends on the return type of the scanning method: - -

- -

-User values and code to be executed at the end of file can be defined using these directives: - -

- -

- -


-Standalone scanners -

- - - -

- -


-CUP compatibility -

-You may also want to read section [*] JFlex and CUP -if you are interested in how to interface your generated -scanner with CUP. - - - -

- -


-BYacc/J compatibility -

-You may also want to read section [*] JFlex and BYacc/J -if you are interested in how to interface your generated -scanner with Byacc/J. - - - -

- -


-Code generation -

-The following options define what kind of lexical analyzer code JFlex -will produce. %pack is the default setting and will be used, -when no code generation method is specified. - -

- -

- -

- -


-Character sets -

- - -


-Line, character and column counting -

- - - -

- -


-Obsolete JLex options -

- - - -

- -


-State declarations -

-State declarations have the following from: - -

-%s[tate] "state identifier" [, "state identifier", ... ] for inclusive or -
%x[state] "state identifier" [, "state identifier", ... ] for exlusive states - -

-There may be more than one line of state declarations, each starting with -%state or %xstate (the first character is sufficient, -%s and %x works, too). State identifiers are letters followed -by a sequence of letters, digits or underscores. State identifiers can be separated -by whitespace or comma. - -

-The sequence - -

-%state STATE1 -
%xstate STATE3, XYZ, STATE_10 -
%state ABC STATE5 - -

-declares the set of identifiers STATE1, STATE3, XYZ, - STATE_10, ABC, STATE5 as lexical states, STATE1, ABC, STATE5 -as inclusive, and STATE3, XYZ, STATE_10 as exclusive. -See also section -[*] on the way lexical states influence how the input is -matched. - -

- -


-Macro definitions -

-A macro definition has the form - -

-macroidentifier = regular expression - -

-That means, a macro definition is a macro identifier (letter followed -by a sequence of letters, digits or underscores), that can later be -used to reference the macro, followed by optional whitespace, followed -by an "=", followed by optional whitespace, followed by a -regular expression (see section [*] lexical - rules for more information about regular expressions). - -

-The regular expression on the right hand side must be well formed and -must not contain the ^, / or $ operators. Differently -to JLex, macros are not just pieces of text that are expanded by copying -- they are parsed and must be well formed. - -

-This is a feature. It eliminates some very hard to find bugs in -lexical specifications (such like not having parentheses around more -complicated macros - which is not necessary with JFlex). See section -[*] Porting from JLex for more -details on the problems of JLex style macros. - -

-Since it is allowed to have macro usages in macro definitions, it is -possible to use a grammar like notation to specify the desired lexical -structure. Macros however remain just abbreviations of the regular expressions -they represent. They are not non terminals of a grammar and cannot be used -recursively in any way. JFlex detects cycles in macro definitions and reports -them at generation time. JFlex also warns you about macros that have been -defined but never used in the ``lexical rules'' section of the specification. - -

- -


-Lexical rules -

-The ``lexical rules'' section of an JFlex specification contains a set of -regular expressions and actions (Java code) that are executed when the -scanner matches the associated regular expression. - -

- -


-Syntax -

-The syntax of the "lexical rules" section is described by the following -BNF grammar (terminal symbols are enclosed in 'quotes'): - -

-

-LexicalRules ::= Rule+ 
-Rule         ::= [StateList] ['^'] RegExp [LookAhead] Action 
-               | [StateList] '<<EOF>>' Action
-               | StateGroup 
-StateGroup   ::= StateList '{' Rule+ '}' 
-StateList    ::= '<' Identifier (',' Identifier)* '>' 
-LookAhead    ::= '$' | '/' RegExp
-Action       ::= '{' JavaCode '}' | '|'
-
-RegExp       ::= RegExp '|' RegExp 
-               | RegExp RegExp 
-               | '(' RegExp ')'
-               | ('!'|'~') RegExp
-               | RegExp ('*'|'+'|'?')
-               | RegExp "{" Number ["," Number] "}" 
-               | '[' ['^'] (Character|Character'-'Character)* ']' 
-               | PredefinedClass 
-               | '{' Identifier '}' 
-               | '"' StringCharacter+ '"' 
-               | Character 
-
-PredefinedClass ::= '[:jletter:]' 
-                  | '[:jletterdigit:]' 
-                  | '[:letter:]' 
-                  | '[:digit:]' 
-                  | '[:uppercase:]' 
-                  | '[:lowercase:]' 
-                  | '.'
-
- -

-The grammar uses the following terminal symbols: - -

- -

-Please note that the \n escape sequence stands for the ASCII -LF character - not for the end of line. If you would like to match the -line terminator, you should use the expression \r|\n|\r\n if you want -the Java conventions, or \r|\n|\r\n|\u2028|\u2029|\u000B|\u000C|\u0085 -if you want to be fully Unicode compliant (see also [5]). - -

-As of version 1.1 of JFlex the whitespace characters " " -(space) and "\t" (tab) can be used to improve the readability of -regular expressions. They will be ignored by JFlex. In character -classes and strings however, whitespace characters keep standing for -themselves (so the string " " still matches exactly one space -character and [ \n] still matches an ASCII LF or a space -character). - -

-JFlex applies the following standard operator precedences in regular -expression (from highest to lowest): - -

- -

- -

-So the expression a | abc | !cd* for instance is parsed as -(a|(abc)) | ((!c)(d*)). - -

- -


-Semantics -

-This section gives an informal description of which text is matched by -a regular expression (i.e. an expression described by the RegExp -production of the grammar presented above). - -

-A regular expression that consists solely of - -

- -

-If a and b are regular expressions, then - -

-

-
a | b
-
(union) - -

-is the regular expression, that matches - all input that is matched by a or by b. - -

-

-
a b
-
(concatenation) - -

-is the regular expression, - that matches the input matched by a followed by the - input matched by b. - -

-

-
a*
-
(kleene closure) - -

-matches zero or more repetitions - of the input matched by a - -

-

-
a+
-
(iteration) - -

-is equivalent to aa* - -

-

-
a?
-
(option) - -

-matches the empty input or the input matched - by a - -

-

-
!a
-
(negation) - -

-matches everything but the strings matched by a. - Use with care: the construction of !a involves - an additional, possibly exponential NFA to DFA transformation - on the NFA for a. Note that - with negation and union you also have (by applying DeMorgan) - intersection and set difference: the intersection of - a and b is !(!a|!b), the expression - that matches everything of a not matched by b is - !(!a|b) - -

-

-
~a
-
(upto) - -

-matches everything up to (and including) the first occurrence of a text - matched by a. The expression ~a is equivalent - to !([^]* a [^]* | "") a. A traditional C-style comment - is matched by "/*" ~"*/" - -

-

-
a{n}
-
(repeat) - -

-is equivalent to n times the concatenation of a. - So a{4} for instance is equivalent to the expression a a a a. - The decimal integer n must be positive. - -

-

-
a{n,m}
-
is equivalent to at least n times and at most m times the - concatenation of a. So a{2,4} for instance is equivalent - to the expression a a a? a?. Both n and m are non - negative decimal integers and m must not be smaller than n. - -

-

-
( a )
-
matches the same input as a. - -

-

-
- -

-In a lexical rule, a regular expression r may be preceded by a -'^' (the beginning of line operator). r is then -only matched at the beginning of a line in the input. A line begins -after each occurrence of \r|\n|\r\n|\u2028|\u2029|\u000B|\u000C|\u0085 -(see also [5]) and at the beginning of input. -The preceding line terminator in the input is not consumed and can -be matched by another rule. - -

-In a lexical rule, a regular expression r may be followed by a -lookahead expression. A lookahead expression is either a '$' -(the end of line operator) or a '/' followed by an arbitrary -regular expression. In both cases the lookahead is not consumed and -not included in the matched text region, but it is considered -while determining which rule has the longest match (see also -[*] How the input is matched). - -

-In the '$' case r is only matched at the end of a line in -the input. The end of a line is denoted by the regular expression -\r|\n|\r\n|\u2028|\u2029|\u000B|\u000C|\u0085. -So a$ is equivalent to a / \r|\n|\r\n|\u2028|\u2029|\u000B|\u000C|\u0085.This is a bit different to the situation described in [5]: -since in JFlex $ is a true trailing context, the end of file -does not count as end of line. - -

- -

-For arbitrary lookahead (also called trailing context) the -expression is matched only when followed by input that matches the -trailing context. Unfortunately the lookahead expression is not -really arbitrary: In a rule r1 / r2, either the text matched -by r1 must have a fixed length (e.g. if r1 is a string) -or the beginning of the trailing context r2 must not match the -end of r1. So for example "abc" / "a"|"b" is ok because -"abc" has a fixed length, "a"|"ab" / "x"* is ok because -no prefix of "x"* matches a postfix of "a"|"ab", but -"x"|"xy" / "yx" is not possible, because the postfix "y" -of "x"|"xy" is also a prefix of "yx". JFlex will report -such cases at generation time. The algorithm JFlex currently uses for matching -trailing context expressions is the one described in [1] (leading -to the deficiencies mentioned above). - -

-As of version 1.2, JFlex allows lex/flex style «EOF» rules in -lexical specifications. A rule -

-[StateList]  <<EOF>>    { some action code }
-
-is very similar to the %eofval directive (section [*]). -The difference lies in the optional StateList that may precede the «EOF» rule. The -action code will only be executed when the end of file is read and the -scanner is currently in one of the lexical states listed in StateList. -The same StateGroup (see section [*] -How the input is matched) and precedence -rules as in the ``normal'' rule case apply -(i.e. if there is more than one «EOF» -rule for a certain lexical state, the action of the one appearing -earlier in the specification will be executed). «EOF» rules -override settings of the %cup and %byaccj options and -should not be mixed with the %eofval directive. - -

-An Action consists either of a piece of Java code enclosed in -curly braces or is the special | action. The | action is -an abbreviation for the action of the following expression. - -

-Example: -

-expression1   |
-expression2   |
-expression3   { some action }
-
-is equivalent to the expanded form -
-expression1   { some action }
-expression2   { some action }
-expression3   { some action }
-
- -

-They are useful when you work with trailing context expressions. The -expression a | (c / d) | b is not syntactically legal, but can -easily be expressed using the | action: -

-a       |
-c / d   |
-b       { some action }
-
- -

- -


-How the input is matched -

-When consuming its input, the scanner determines the regular expression -that matches the longest portion of the input (longest match rule). If -there is more than one regular expression that matches the longest portion -of input (i.e. they all match the same input), the generated scanner chooses -the expression that appears first in the specification. After determining -the active regular expression, the associated action is executed. If there -is no matching regular expression, the scanner terminates the program with -an error message (if the %standalone directive has been used, the -scanner prints the unmatched input to java.lang.System.out instead -and resumes scanning). - -

-Lexical states can be used to further restrict the set of regular expressions -that match the current input. - -

- -

- -

- -

-The generated class -

-JFlex generates exactly one file containing one class from the specification -(unless you have declared another class in the first specification section). - -

-The generated class contains (among other things) the DFA tables, an input buffer, -the lexical states of the specification, a constructor, and the scanning method -with the user supplied actions. - -

-The name of the class is by default Yylex, it is customizable -with the %class directive (see also section -[*]). The input buffer of the lexer is connected with an -input stream over the java.io.Reader object which is passed -to the lexer in the generated constructor. If you want to provide your -own constructor for the lexer, you should always call the generated -one in it to initialize the input buffer. The input buffer should not -be accessed directly, but only over the advertised API (see also -section [*]). Its internal implementation may change -between releases or skeleton files without notice. - -

-The main interface to the outside world is the generated scanning -method (default name yylex, default return type -Yytoken). Most of its aspects are customizable (name, return -type, declared exceptions etc., see also section -[*]). If it is called, it will consume input until -one of the expressions in the specification is matched or an error -occurs. If an expression is matched, the corresponding action is -executed. It may return a value of the specified return type (in which -case the scanning method return with this value), or if it doesn't -return a value, the scanner resumes consuming input until the next -expression is matched. If the end of file is reached, the scanner -executes the EOF action, and (also upon each further call to the scanning -method) returns the specified EOF value (see also section [*]). - -

- -


-Scanner methods and fields accessible in actions (API) -

-Generated methods and member fields in JFlex scanners are prefixed -with yy to indicate that they are generated and to avoid name -conflicts with user code copied into the class. Since user code is -part of the same class, JFlex has no language means like the -private modifier to indicate which members and methods are -internal and which ones belong to the API. Instead, JFlex follows a -naming convention: everything starting with a zz prefix like -zzStartRead is to be considered internal and subject to -change without notice between JFlex releases. Methods and members of -the generated class that do not have a zz prefix like -yycharat belong to the API that the scanner class provides to -users in action code of the specification. They will be remain stable -and supported between JFlex releases as long as possible. - -

-Currently, the API consists of the following methods and member fields: - -

- -

- -


-Encodings, Platforms, and Unicode -

- -

-This section tries to shed some light on the issues of Unicode and -encodings, cross platform scanning, and how to deal with binary data. -My thanks go to Stephen Ostermiller for his input on this topic. - -

- -


-The Problem -

- -

-Before we dive straight into details, let's take a look at what the -problem is. The problem is Java's platform independence when you want -to use it. For scanners the interesting part about platform -independence is character encodings and how they are handled. - -

-If a program reads a file from disk, it gets a stream of bytes. In -earlier times, when the grass was green, and the world was much -simpler, everybody knew that the byte value 65 is, of course, an A. -It was no problem to see which bytes meant which characters (actually -these times never existed, but anyway). The normal Latin alphabet -only has 26 characters, so 7 bits or 128 distinct values should surely -be enough to map them, even if you allow yourself the luxury of upper -and lower case. Nowadays, things are different. The world suddenly -grew much larger, and all kinds of people wanted all kinds of special -characters, just because they use them in their language and writing. -This is were the mess starts. Since the 128 distinct values were -already filled up with other stuff, people began to use all 8 bits of -the byte, and extended the byte/character mappings to fit their need, -and of course everybody did it differently. Some people for instance -may have said ``let's use the value 213 for the German character ä''. Others -may have found that 213 should much rather mean é, because they didn't need -German and wrote French instead. As long as you use your program and -data files only on one platform, this is no problem, as all know what -means what, and everything gets used consistently. - -

-Now Java comes into play, and wants to run everywhere (once written, -that is) and now there suddenly is a problem: how do I get the same -program to say ä to a certain byte when it runs in Germany and maybe é -when it runs in France? And also the other way around: when I want to -say é on the screen, which byte value should I send to the operating -system? - -

-Java's solution to this is to use Unicode internally. Unicode aims to -be a superset of all known character sets and is therefore a perfect base -for encoding things that might get used all over the world. To make -things work correctly, you still have to know where you are and how to -map byte values to Unicode characters and vice versa, but the -important thing is, that this mapping is at least possible (you can -map Kanji characters to Unicode, but you cannot map them to ASCII or -iso-latin-1). - -

- -


-Scanning text files -

- -

-Scanning text files is the standard application for scanners like -JFlex. Therefore it should also be the most convenient one. Most times -it is. - -

-The following scenario works like a breeze: -You work on a platform X, write your lexer specification there, can -use any obscure Unicode character in it as you like, and compile the -program. Your users work on any platform Y (possibly but not -necessarily something different from X), they write their input files -on Y and they run your program on Y. No problems. - -

-Java does this as follows: -If you want to read anything in Java that is supposed to contain text, -you use a FileReader or some InputStream together with -an InputStreamReader. InputStreams return the raw bytes, the -InputStreamReader converts the bytes into Unicode characters with -the platform's default encoding. If a text file is produced on the -same platform, the platform's default encoding should do the mapping -correctly. Since JFlex also uses readers and Unicode internally, this -mechanism also works for the scanner specifications. If you write an -A in your text editor and the editor uses the platform's encoding (say A is 65), -then Java translates this into the logical Unicode A internally. -If a user writes an A on a completely different platform (say A is 237 there), -then Java also translates this into the logical Unicode A internally. Scanning -is performed after that translation and both match. - -

-Note that because of this mapping from bytes to characters, you should always -use the %unicode switch in you lexer specification if you want to scan -text files. %8bit may not be enough, even if -you know that your platform only uses one byte per character. The encoding -Cp1252 used on many Windows machines for instance knows 256 characters, but -the character ´ with Cp1252 code \x92 has the Unicode value \u2019, which -is larger than 255 and which would make your scanner throw an -ArrayIndexOutOfBoundsException if it is encountered. - -

-So for the usual case you don't have to do anything but use the -%unicode switch in your lexer specification. - -

-Things may break when you produce a text file on platform X and -consume it on a different platform Y. Let's say you have a file -written on a Windows PC using the encoding Cp1252. Then you move -this file to a Linux PC with encoding ISO 8859-1 and there you want -to run your scanner on it. Java now thinks the file is encoded -in ISO 8859-1 (the platform's default encoding) while it really is -encoded in Cp1252. For most characters -Cp1252 and ISO 8859-1 are the same, but for the byte values \x80 -to \x9f they disagree: ISO 8859-1 is undefined there. You can fix -the problem by telling Java explicitly which encoding to use. When -constructing the InputStreamReader, you can give the encoding -as argument. The line -

-Reader r = new InputStreamReader(input, "Cp1252"); - -
-will do the trick. - -

-Of course the encoding to use can also come from the data itself: -for instance, when you scan a HTML page, it may have embedded -information about its character encoding in the headers. - -

-More information about encodings, which ones are supported, how -they are called, and how to set them may be found in the -official Java documentation in the chapter about -internationalization. -The link -http://java.sun.com/j2se/1.3/docs/guide/intl/ -leads to an online version of this for Sun's JDK 1.3. - -

- -


-Scanning binaries -

- -

-Scanning binaries is both easier and more difficult -than scanning text files. It's easier because you want -the raw bytes and not their meaning, i.e. you don't want -any translation. -It's more difficult because it's not so easy to get -``no translation'' when you use Java readers. - -

-The problem (for binaries) is that JFlex scanners are -designed to work on text. Therefore the interface is -the Reader class (there is a constructor -for InputStream instances, but it's just there -for convenience and wraps an InputStreamReader -around it to get characters, not bytes). -You can still get a binary scanner when you write -your own custom InputStreamReader class that -does explicitly no translation, but just copies -byte values to character codes instead. It sounds -quite easy, and actually it is no big deal, but there -are a few little pitfalls on the way. In the scanner -specification you can only enter positive character -codes (for bytes that is \x00 -to \xFF). Java's byte type on the other hand -is a signed 8 bit integer (-128 to 127), so you have to convert -them properly in your custom Reader. Also, you should -take care when you write your lexer spec: if you -use text in there, it gets interpreted by an encoding -first, and what scanner you get as result might depend -on which platform you run JFlex on when you generate -the scanner (this is what you want for text, but for binaries it -gets in the way). If you are not sure, or if the development -platform might change, it's probably best to use character -code escapes in all places, since they don't change their -meaning. - -

-To illustrate these points, the example in examples/binary -contains a very small binary scanner that tries to -detect if a file is a Java class file. For that -purpose it looks if the file begins with the magic number \xCAFEBABE. - -

- -


-A few words on performance -

-This section gives some empirical results about the speed of JFlex generated -scanners in comparison to those generated by JLex, -compares a JFlex scanner with a handwritten -one, and presents some tips on how to make -your specification produce a faster scanner. - -

- -


-Comparison of JLex and JFlex -

-Scanners generated by the tool JLex are quite fast. It was however -possible to further improve the performance of generated scanners -using JFlex. The following table shows the results that were produced -by the scanner specification of a small toy programming language (in -fact the example from the JLex website). The scanner was generated -using JLex and all three different JFlex code generation methods. Then -it was run on a W98 system using Sun's JDK 1.3 with different sample inputs -of that toy programming language. All test runs were made under the -same conditions on an otherwise idle machine. - -

-The values presented in the table denote the time from the first call -to the scanning method to returning the EOF value and the speedup in -percent. The tests were run both int the mixed (HotSpot) JVM mode and -the pure interpreted mode. The mixed mode JVM brings -about a factor of 10 performance improvement, the difference between -JLex and JFlex only decreases slightly. - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 KBJVMJLex%switchspeedup%tablespeedup%packspeedup
 496hotspot325 ms261 ms24.5 %261 ms24.5 %261 ms24.5 %
 187hotspot127 ms98 ms29.6 %94 ms35.1 %96 ms32.3 %
 93hotspot66 ms50 ms32.0 %50 ms32.0 %48 ms37.5 %
 496interpr.4009 ms3025 ms32.5 %3258 ms23.1 %3231 ms24.1 %
 187interpr.1641 ms1155 ms42.1 %1245 ms31.8 %1234 ms33.0 %
 93interpr.817 ms573 ms42.6 %617 ms32.4 %613 ms33.3 %
- -


- -

-Since the scanning time of the lexical analyzer examined in the table -above includes lexical actions that often need to create new object instances, -another table shows the execution time for the same specification with empty -lexical actions to compare the pure scanning engines. - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 KBJVMJLex%switchspeedup%tablespeedup%packspeedup
 496hotspot204 ms140 ms45.7 %138 ms47.8 %140 ms45.7 %
 187hotspot83 ms55 ms50.9 %52 ms59.6 %52 ms59.6 %
 93hotspot41 ms28 ms46.4 %26 ms57.7 %26 ms57.7 %
 496interpr.2983 ms2036 ms46.5 %2230 ms33.8 %2232 ms33.6 %
 187interpr.1260 ms793 ms58.9 %865 ms45.7 %867 ms45.3 %
 93interpr.628 ms395 ms59.0 %432 ms45.4 %432 ms45.4 %
- -


- -

-Execution time of single instructions depends on the platform and -the implementation of the Java Virtual Machine the program is executed -on. Therefore the tables above cannot be used as a reference to which -code generation method of JFlex is the right one to choose in general. -The following table was produced by the same lexical specification and -the same input on a Linux system also using Sun's JDK 1.3. - -

-With actions: - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 KBJVMJLex%switchspeedup%tablespeedup%packspeedup
 496hotspot246 ms203 ms21.2 %193 ms27.5 %190 ms29.5 %
 187hotspot99 ms76 ms30.3 %69 ms43.5 %70 ms41.4 %
 93hotspot48 ms36 ms33.3 %34 ms41.2 %35 ms37.1 %
 496interpr.3251 ms2247 ms44.7 %2430 ms33.8 %2444 ms33.0 %
 187interpr.1320 ms848 ms55.7 %958 ms37.8 %920 ms43.5 %
 93interpr.658 ms423 ms55.6 %456 ms44.3 %452 ms45.6 %
- -


- -

-Without actions: - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 KBJVMJLex%switchspeedup%tablespeedup%packspeedup
 496hotspot136 ms78 ms74.4 %76 ms78.9 %77 ms76.6 %
 187hotspot59 ms31 ms90.3 %48 ms22.9 %32 ms84.4 %
 93hotspot28 ms15 ms86.7 %15 ms86.7 %15 ms86.7 %
 496interpr.1992 ms1047 ms90.3 %1246 ms59.9 %1215 ms64.0 %
 187interpr.859 ms408 ms110.5 %479 ms79.3 %487 ms76.4 %
 93interpr.435 ms200 ms117.5 %237 ms83.5 %242 ms79.8 %
- -


- -

-Although all JFlex scanners were faster than those generated by JLex, -slight differences between JFlex code generation methods show up when compared -to the run on the W98 system. - -

-The following table compares a handwritten scanner for the Java language -obtained from the website of CUP with the JFlex generated scanner for Java -that comes with JFlex in the examples directory. They were tested -on different .java files on a Linux machine with Sun's JDK 1.3. - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 linesKBJVMhandwritten scannerJFlex generated scanner
 19050496hotspot824 ms248 ms235 % faster
 6350165hotspot272 ms84 ms232 % faster
 127033hotspot53 ms18 ms194 % faster
 19050496interpreted5.83 s3.85 s51 % faster
 6350165interpreted1.95 s1.29 s51 % faster
 127033interpreted0.38 s0.25 s52 % faster
- -


- -

-Although JDK 1.3 seems to speed up the handwritten scanner if compared -to JDK 1.1 or 1.2 more than the generated one, the generated scanner is -still up to 3.3 times as fast as the handwritten one. One example of -a handwritten scanner that is -considerably slower than the equivalent generated one is surely no -proof for all generated scanners being faster than handwritten. It is -clearly impossible to prove something like that, since you could -always write the generated scanner by hand. From a software -engineering point of view however, there is no excuse for writing a -scanner by hand since this task takes more time, is more difficult and -therefore more error prone than writing a compact, readable and easy -to change lexical specification. (I'd like to add, that I do not -think, that the handwritten scanner from the CUP website used here in -the test is stupid or badly written or anything like that. I actually -think, Scott did a great job with it, and that for learning about -lexers it is quite valuable to study it or even to write a similar one -for oneself.) - -

- -


-How to write a faster specification -

-Although JFlex generated scanners show good performance without -special optimizations, there are some heuristics that can make a -lexical specification produce an even faster scanner. Those are -(roughly in order of performance gain): - -

- -

- -

-Note that writing more rules in a specification does not make the generated -scanner slower (except when you have to switch to another code generation -method because of the larger size). - -

-The two main rules of optimization apply also for lexical specifications: - -

    -
  1. don't do it -
  2. -
  3. (for experts only) don't do it yet -
  4. -
- -

-Some of the performance tips above contradict a readable and compact -specification style. When in doubt or when requirements are not or not -yet fixed: don't use them - the specification can always be optimized -in a later state of the development process. - -

- -

-Porting Issues -

- -

- -


-Porting from JLex -

-JFlex was designed to read old JLex specifications unchanged and to -generate a scanner which behaves exactly the same as the one generated -by JLex with the only difference of being faster. - -

-This works as expected on all well formed JLex specifications. - -

-Since the statement above is somewhat absolute, let's take a look at -what ``well formed'' means here. A JLex specification is well formed, when -it - -

- -

- -


-Porting from lex/flex -

-This section tries to give an overview of activities and possible -problems when porting a lexical specification from the C/C++ tools lex -and flex [11] available on most Unix systems to JFlex. - -

-Most of the C/C++ specific features are naturally not present in JFlex, -but most ``clean'' lex/flex lexical specifications can be ported to -JFlex without very much work. - -

-This section is by far not complete and is based mainly on a survey of -the flex man page and very little personal experience. If you do -engage in any porting activity from lex/flex to JFlex and encounter -problems, have better solutions for points presented here or have just -some tips you would like to share, please do contact me. I will -incorporate your experiences in this manual (with all due credit to you, -of course). - -

- -

-Basic structure -

-A lexical specification for flex has the following basic structure: -
-definitions
-%%
-rules
-%%
-user code
-
- -

-The user code section usually contains some C code that is used -in actions of the rules part of the specification. For JFlex most -of this code will have to be included in the class code %{..%} -directive in the options and declarations section (after -translating the C code to Java, of course). - -

- -

-Macros and Regular Expression Syntax -

-The definitions section of a flex specification is quite similar -to the options and declarations part of JFlex specs. - -

-Macro definitions in flex have the form: -

-<identifier>  <expression>
-
-To port them to JFlex macros, just insert a = between <identifier> -and <expression>. - -

-The syntax and semantics of regular expressions in flex are pretty much the -same as in JFlex. A little attention is needed for some escape sequences -present in flex (such as \a) that are not supported in JFlex. These -escape sequences should be transformed into their octal or hexadecimal -equivalent. - -

-Another point are predefined character classes. Flex offers the ones directly -supported by C, JFlex offers the ones supported by Java. These classes will -sometimes have to be listed manually (if there is need for this feature, it -may be implemented in a future JFlex version). - -

- -

-Lexical Rules -

-Since flex is mostly Unix based, the '^' (beginning of line) and -'$' (end of line) operators, consider the \n character as only line terminator. This should usually cause not much problems, but you -should be prepared for occurrences of \r or \r\n or one of -the characters \u2028, \u2029, \u000B, \u000C, -or \u0085. They are considered to be line terminators in Unicode and -therefore may not be consumed when -^ or $ is present in a rule. -

-The trailing context algorithm of flex is better than the one used in -JFlex. Therefore lookahead expressions could cause major headaches. JFlex -will issue an error message at generation time, if it cannot generate -a scanner for a certain lookahead expression. (sorry, I have no more tips here -on that yet. If anyone knows how the flex lookahead algorithm works (or any better one) -and can be efficiently implemented, again: please contact me). - -

- -


-Working together -

- -

- -


-JFlex and CUP -

-One of the main design goals of JFlex was to make interfacing with the free -Java parser generator CUP [8] as easy as possibly. -This has been done by giving -the %cup directive a special meaning. An -interface however always has two sides. This section concentrates on the -CUP side of the story. - -

- -

-CUP version 0.10j -

-Since CUP version 0.10j, this has been simplified greatly by the new -CUP scanner interface java_cup.runtime.Scanner. JFlex lexers now implement -this interface automatically when then %cup -switch is used. There are no special parser code, init - code or scan with options any more that you have to provide -in your CUP parser specification. You can just concentrate on your grammar. - -

-If your generated Lexer has the class name Scanner, the parser -is started from the a main program like this: - -

-

-...
-  try {
-    parser p = new parser(new Scanner(new FileReader(fileName)));
-    Object result = p.parse().value;
-  }
-  catch (Exception e) {
-...
-
- -

- -

-Using existing JFlex/CUP specifications with CUP 0.10j -

-If you already have an existing specification and you would like to upgrade -both JFlex and CUP to their newest version, you will probably have to adjust -your specification. - -

-The main difference between the %cup switch in -JFlex 1.2.1 and lower, and the current JFlex version is, that JFlex scanners -now automatically implement the java_cup.runtime.Scanner interface. -This means, that the scanning function now changes its name from yylex() -to next_token(). - -

-The main difference from older CUP versions to 0.10j is, that CUP now -has a default constructor that accepts a java_cup.runtime.Scanner -as argument and that uses this scanner as -default (so no scan with code is necessary any more). - -

-If you have an existing CUP specification, it will probably look somewhat like this: -

-parser code {:
-  Lexer lexer;
-
-  public parser (java.io.Reader input) {
-    lexer = new Lexer(input);
-  }
-:};
-
-scan with {: return lexer.yylex(); :};
-
- -

-To upgrade to CUP 0.10j, you could change it to look like this: -

-parser code {:
-  public parser (java.io.Reader input) {
-    super(new Lexer(input));
-  }
-:};
-
- -

-If you do not mind to change the method that is calling the parser, -you could remove the constructor entirely (and if there is nothing else -in it, the whole parser code section as well, of course). The calling -main procedure would then construct the parser as shown in the section above. - -

-The JFlex specification does not need to be changed. - -

- -

-Using older versions of CUP -

-For people, who like or have to use older versions of CUP, the following section -explains ``the old way''. Please note, that the standard name of the scanning -function with the %cup switch is not -yylex(), but next_token(). - -

-If you have a scanner specification that begins like this: - -

-

-package PACKAGE;
-import java_cup.runtime.*;   /* this is convenience, but not necessary */
- 
-%%
- 
-%class Lexer
-%cup
-..
-
- -

-then it matches a CUP specification starting like - -

-

-package PACKAGE;
-
-parser code {:
-  Lexer lexer;
-
-  public parser (java.io.Reader input) {
-    lexer = new Lexer(input);
-  }
-:};
-
-scan with {: return lexer.next_token(); :};
-
-..
-
- -

-This assumes that the generated parser will get the name parser. -If it doesn't, you have to adjust the constructor name. - -

-The parser can then be started in a main routine like this: - -

-

-..
-  try {
-    parser p = new parser(new FileReader(fileName));
-    Object result = p.parse().value; 
-  }
-  catch (Exception e) {
-..
-
- -

-If you want the parser specification to be independent of the name of the generated -scanner, you can instead write an interface Lexer - -

-

-public interface Lexer {
-  public java_cup.runtime.Symbol next_token() throws java.io.IOException;
-}
-
- -

-change the parser code to: - -

-

-package PACKAGE;
-
-parser code {:
-  Lexer lexer;
-
-  public parser (Lexer lexer) {
-    this.lexer = lexer;
-  }
-:};
-
-scan with {: return lexer.next_token(); :};
-
-..
-
- -

-tell JFlex about the Lexer -interface using the %implements -directive: - -

-

-..
-%class Scanner     /* not Lexer now since that is our interface! */
-%implements Lexer
-%cup
-..
-
- -

-and finally change the main routine to look like - -

-

-...
-  try {
-    parser p = new parser(new Scanner(new FileReader(fileName)));
-    Object result = p.parse().value;
-  }
-  catch (Exception e) {
-...
-
- -

-If you want to improve the error messages that CUP generated parsers -produce, you can also override the methods report_error and report_fatal_error -in the ``parser code'' section of the CUP specification. The new methods -could for instance use yyline and yycolumn (stored in -the left and right members of class java_cup.runtime.Symbol) -to report error positions more conveniently for the user. The lexer and -parser for the Java language in the examples/java directory of the -JFlex distribution use this style of error reporting. These specifications -also demonstrate the techniques above in action. - -

- -


-JFlex and BYacc/J -

- -

-JFlex has builtin support for the Java extension -BYacc/J -[9] by Bob Jamison -to the classical Berkeley Yacc parser generator. -This section describes how to interface BYacc/J with JFlex. It -builds on many helpful suggestions and comments from Larry Bell. - -

-Since Yacc's architecture is a bit different from CUP's, the -interface setup also works in a slightly different manner. -BYacc/J expects a function int yylex() in the parser -class that returns each next token. Semantic values are expected -in a field yylval of type parserval where ``parser'' -is the name of the generated parser class. - -

-For a small calculator example, one could use a setup like the -following on the JFlex side: - -

-

-%%
-
-%byaccj
-
-%{
-  /* store a reference to the parser object */
-  private parser yyparser;
-
-  /* constructor taking an additional parser object */
-  public Yylex(java.io.Reader r, parser yyparser) {
-    this(r);
-    this.yyparser = yyparser;
-  }
-%}
-
-NUM = [0-9]+ ("." [0-9]+)?
-NL  = \n | \r | \r\n
-
-%%
-
-/* operators */
-"+" | 
-..
-"(" | 
-")"    { return (int) yycharat(0); }
-
-/* newline */
-{NL}   { return parser.NL; }
-
-/* float */
-{NUM}  { yyparser.yylval = new parserval(Double.parseDouble(yytext()));
-         return parser.NUM; }
-
- -

-The lexer expects a reference to the parser in its constructor. -Since Yacc allows direct use of terminal characters like '+' -in its specifications, we just return the character code for -single char matches (e.g. the operators in the example). Symbolic -token names are stored as public static int constants in -the generated parser class. They are used as in the NL token -above. Finally, for some tokens, a semantic value may have to be -communicated to the parser. The NUM rule demonstrates that -bit. - -

-A matching BYacc/J parser specification could look like this: -

-%{
-  import java.io.*;
-%}
-      
-%token NL          /* newline  */
-%token <dval> NUM  /* a number */
-
-%type <dval> exp
-
-%left '-' '+'
-..
-%right '^'         /* exponentiation */
-      
-%%
-
-..
-      
-exp:     NUM          { $$ = $1; }
-       | exp '+' exp  { $$ = $1 + $3; }
-       ..
-       | exp '^' exp  { $$ = Math.pow($1, $3); }
-       | '(' exp ')'  { $$ = $2; }
-       ;
-
-%%
-  /* a reference to the lexer object */
-  private Yylex lexer;
-
-  /* interface to the lexer */
-  private int yylex () {
-    int yyl_return = -1;
-    try {
-      yyl_return = lexer.yylex();
-    }
-    catch (IOException e) {
-      System.err.println("IO error :"+e);
-    }
-    return yyl_return;
-  }
-
-  /* error reporting */
-  public void yyerror (String error) {
-    System.err.println ("Error: " + error);
-  }
-
-  /* lexer is created in the constructor */
-  public parser(Reader r) {
-    lexer = new Yylex(r, this);
-  }
-
-  /* that's how you use the parser */
-  public static void main(String args[]) throws IOException {
-    parser yyparser = new parser(new FileReader(args[0]));
-    yyparser.yyparse();    
-  }
-
- -

-Here, the customized part is mostly in the user code section: -We create the lexer in the constructor of the parser and store -a reference to it for later use in the parser's int yylex() -method. This yylex in the parser only calls int yylex() -of the generated lexer and passes the result on. If something goes -wrong, it returns -1 to indicate an error. - -

-Runnable versions of the specifications above -are located in the examples/byaccj directory of the JFlex -distribution. - -

- -


-Bugs and Deficiencies -

- -

- -

-Deficiencies -

-The trailing context algorithm described in [1] and used in -JFlex is incorrect. It does not work, when a postfix of the regular -expression matches a prefix of the trailing context and the length -of the text matched by the expression does not have a fixed size. -JFlex will report these cases as errors at generation time. - -

- -

-Bugs -

- -

-As of April 12, 2004 the following bugs are known in JFlex: - -

- -

-If you find new ones, please use the bugs section of the -JFlex website -to report them. - -

- -


-Copying and License -

-JFlex is free software, published under the terms of the -GNU General Public License. - -

-There is absolutely NO WARRANTY for JFlex, its code and its documentation. - -

-The code generated by JFlex inherits the copyright of the specification it -was produced from. If it was your specification, you may use the generated -code without restriction. - -

-See the file COPYRIGHT -for more information. - -

- -


-Bibliography -

- -

-

1 -
- A. Aho, R. Sethi, J. Ullman, Compilers: Principles, Techniques, and Tools, 1986 - -

-

2 -
- A. W. Appel, Modern Compiler Implementation in Java: basic techniques, 1997 - -

-

3 -
- E. Berk, JLex: A lexical analyser generator for Java, -
http://www.cs.princeton.edu/~appel/modern/java/JLex/ -

-

4 -
- K. Brouwer, W. Gellerich,E. Ploedereder, - Myths and Facts about the Efficient Implementation of Finite Automata and Lexical Analysis, - in: Proceedings of the 7th International Conference on Compiler Construction (CC '98), 1998 - -

-

5 -
- M. Davis, Unicode Regular Expression Guidelines, Unicode Technical Report #18, 2000 -
http://www.unicode.org/unicode/reports/tr18/tr18-5.1.html -

-

6 -
- P. Dencker, K. Dürre, J. Henft, Optimization of Parser Tables for portable Compilers, - in: ACM Transactions on Programming Languages and Systems 6(4), 1984 - -

-

7 -
- J. Gosling, B. Joy, G. Steele, The Java Language Specifcation, 1996, -
http://www.javasoft.com/docs/books/jls/ -

-

8 -
- S. E. Hudson, CUP LALR Parser Generator for Java, -
http://www.cs.princeton.edu/~appel/modern/java/CUP/ -

-

9 -
- B. Jamison, BYacc/J, -
http://troi.lincom-asg.com/~rjamison/byacc/ -

-

10 -
- T. Lindholm, F. Yellin, The Java Virtual Machine Specification, 1996, -
http://www.javasoft.com/docs/books/vmspec/ -

-

11 -
- V. Paxon, flex - The fast lexical analyzer generator, 1995 - -

-

12 -
- R. E. Tarjan, A. Yao, Storing a Sparse Table, in: Communications of the ACM 22(11), 1979 - -

-

13 -
- R. Wilhelm, D. Maurer, Übersetzerbau, Berlin 19972 - -

-

- -

-


Footnotes

-
-
... Java[*] -
Java is a trademark of -Sun Microsystems, Inc., and refers to Sun's Java programming language. -JFlex is not sponsored by or affiliated with Sun Microsystems, Inc. - -


-
-Mon Apr 12 20:58:12 EST 2004, Gerwin Klein -
- - diff --git a/tools/lexer/jflex-1.4/doc/manual.pdf b/tools/lexer/jflex-1.4/doc/manual.pdf deleted file mode 100644 index 96734f832122..000000000000 Binary files a/tools/lexer/jflex-1.4/doc/manual.pdf and /dev/null differ diff --git a/tools/lexer/jflex-1.4/doc/manual.ps.gz b/tools/lexer/jflex-1.4/doc/manual.ps.gz deleted file mode 100644 index 50c8ab54802d..000000000000 Binary files a/tools/lexer/jflex-1.4/doc/manual.ps.gz and /dev/null differ diff --git a/tools/lexer/jflex-1.4/examples/binary/Makefile b/tools/lexer/jflex-1.4/examples/binary/Makefile deleted file mode 100644 index 52607f7f210e..000000000000 --- a/tools/lexer/jflex-1.4/examples/binary/Makefile +++ /dev/null @@ -1,22 +0,0 @@ - -JAVA = java -JAVAC = javac -JFLEX = jflex - -# ------------------------------------------------- - -all: run - -run: compile - $(JAVA) BinaryLexer * - -compile: BinaryLexer.class StraightStreamReader.class - -clean: - rm -f *~ *.class BinaryLexer.java - -%.class: %.java - $(JAVAC) $^ - -BinaryLexer.java: binary.flex - $(JFLEX) $^ diff --git a/tools/lexer/jflex-1.4/examples/binary/README b/tools/lexer/jflex-1.4/examples/binary/README deleted file mode 100644 index 8fceab48c4b8..000000000000 --- a/tools/lexer/jflex-1.4/examples/binary/README +++ /dev/null @@ -1,18 +0,0 @@ -This directory contains a small example of a scanner for binary files. - -The example tries to detect if an input file is a java class file by -checking if the first 4 bytes contain the magic number 0xCAFEBABE. -It uses a custom Reader class that copies bytes to characters one to -one. The characters the scanner gets to read are the bytes from the -input stream without any conversion. Many thanks to Stephen Ostermiller -for providing the custom Reader class, the original version of that -class is available from http://www.smo.f2s.com/utils/ - -See the JFlex manual for details on how to scan binaries and how -this is different from scanning text files. - -Files: -binary.flex the scanner spec -StraightStreamReader.java the custom reader class (by Stephen Ostermiller) -Makefile rules for make to compile and run the example -README this file diff --git a/tools/lexer/jflex-1.4/examples/binary/StraightStreamReader.java b/tools/lexer/jflex-1.4/examples/binary/StraightStreamReader.java deleted file mode 100644 index 7f418b5823cf..000000000000 --- a/tools/lexer/jflex-1.4/examples/binary/StraightStreamReader.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * An InputStreamReader that does no character encoding translations. - * Copyright (C) 2001 Stephen Ostermiller - * - * Changes: (2001 by Gerwin Klein ) - * - commented out package declaration for the example - * - original version at http://www.smo.f2s.com/utils/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * See COPYING.TXT for details. - */ - -// package com.Ostermiller.util; - -import java.io.*; - -/** - * A StraightStreamReader is a bridge from byte streams to character streams: It reads bytes - * and translates them into characters without using a character encoding. The characters - * that a StraightStreamReader returns may not be valid unicode characters but they are - * guaranteed to be in the 0x00 to 0xFF range. - *

- * Most of the time you want to do character encoding translation when translating bytes to - * characters. If you are planning on displaying the text, you should always do this and should - * use an InputStreamReader for the purpose. Sometimes it is useful to treat characters as bytes - * with some extra bits. In these cases you would want to use a StraightStreamReader. - *

- * For top efficiency, consider wrapping an StraightStreamReader within a BufferedReader. For example:
- * BufferedReader in = new BufferedReader(new StraightStreamReader(System.in)); - */ -public class StraightStreamReader extends Reader{ - - /** - * The input stream from which all methods in this class read. - */ - private InputStream in; - - /** - * A byte array to be used for calls to the InputStream. This - * is cached as a class variable to avoid object creation and - * deletion each time a read is called. This buffer may be - * null and may not be large enough. Make sure to check it - * before using it. - */ - private byte[] buffer; - - /** - * Create a StraightStreamReader from an InputStream - * - * @param in InputStream to wrap a Reader around. - */ - public StraightStreamReader(InputStream in) { - this.in = in; - } - - /** - * Close the stream. - * - * @throws IOException If an I/O error occurs - */ - public void close() throws IOException { - in.close(); - } - - /** - * Mark the present position in the stream. Subsequent calls to reset() - * will attempt to reposition the stream to this point. Not all - * character-input streams support the mark() operation. - * - * @param readAheadLimit Limit on the number of characters that may be read - * while still preserving the mark. After reading this many characters, - * attempting to reset the stream may fail. - * @throws IOException If the stream does not support mark(), or if some other I/O error occurs - */ - public void mark(int readAheadLimit) throws IOException { - in.mark(readAheadLimit); - } - - /** - * Tell whether this stream supports the mark() operation. - * - * @return true if and only if this stream supports the mark operation. - */ - public boolean markSupported(){ - return in.markSupported(); - } - - /** - * Read a single character. This method will block until a character is available, an - * I/O error occurs, or the end of the stream is reached. - * - * @return The character read, as an integer in the range 0 to 256 (0x00-0xff), or -1 if - * the end of the stream has been reached - * @throws IOException If an I/O error occurs - */ - public int read() throws IOException { - return in.read(); - } - - /** - * Read characters into an array. This method will block until some input is available, - * an I/O error occurs, or the end of the stream is reached. - * - * @param cbuf Destination buffer - * @return The number of bytes read, or -1 if the end of the stream has been reached - * @throws IOException If an I/O error occurs - */ - public int read(char[] cbuf) throws IOException { - return read(cbuf, 0, cbuf.length); - } - - /** - * Read characters into an array. This method will block until some input is available, - * an I/O error occurs, or the end of the stream is reached. - * - * @param cbuf Destination buffer - * @param off Offset at which to start storing characters - * @param len Maximum number of characters to read - * @return The number of bytes read, or -1 if the end of the stream has been reached - * @throws IOException If an I/O error occurs - */ - public int read(char[] cbuf, int off, int len) throws IOException { - // ensure the capacity of the buffer that we will be using - // to read from the input stream - if (buffer == null || buffer.length < len){ - buffer = new byte[len]; - } - // read from the input stream and copy it to the character array - int length = in.read(buffer, 0, len); - for (int i=0; i 0); - } - - /** - * Reset the stream. If the stream has been marked, then attempt to reposition it at the mark. - * If the stream has not been marked, then attempt to reset it in some way appropriate to the - * particular stream, for example by repositioning it to its starting point. Not all - * character-input streams support the reset() operation, and some support reset() - * without supporting mark(). - * - * @throws IOException If the stream has not been marked, or if the mark has been invalidated, - * or if the stream does not support reset(), or if some other I/O error occurs - */ - public void reset() throws IOException { - in.reset(); - } - - /** - * Skip characters. This method will block until some characters are available, - * an I/O error occurs, or the end of the stream is reached. - * - * @param n The number of characters to skip - * @return The number of characters actually skipped - * @throws IllegalArgumentException If n is negative - * @throws IOException If an I/O error occurs - */ - public long skip(long n) throws IOException { - return in.skip(n); - } - - /** - * Regression test for this class. If this class is working, this should - * run and print no errors. - *

- * This method creates a tempory file in the working directory called "test.txt". - * This file should not exist before hand, and the program should have create, - * read, write, and delete access to this file. - * - * @param args command line arguments (ignored) - */ - private static void main(String[] args){ - try { - File f = new File("test.txt"); - if (f.exists()){ - throw new IOException(f + " already exists. I don't want to overwrite it."); - } - StraightStreamReader in; - char[] cbuf = new char[0x1000]; - int read; - int totRead; - - // write a file with all possible values of bytes - FileOutputStream out = new FileOutputStream(f); - for (int i=0x00; i<0x100; i++){ - out.write(i); - } - out.close(); - - // read it back using the read single character method - in = new StraightStreamReader(new FileInputStream(f)); - for (int i=0x00; i<0x100; i++){ - read = in.read(); - if (read != i){ - System.err.println("Error: " + i + " read as " + read); - } - } - in.close(); - - // read as much of it back as possible with one simple buffer read. - in = new StraightStreamReader(new FileInputStream(f)); - totRead = in.read(cbuf); - if (totRead != 0x100){ - System.err.println("Simple buffered read did not read the full amount: 0x" + Integer.toHexString(totRead)); - } - for (int i=0x00; i 0){ - totRead += read; - } - if (totRead != 0x100){ - System.err.println("Not enough read. Bytes read: " + Integer.toHexString(totRead)); - } - for (int i=0x00; i 0){ - totRead += read; - } - if (totRead != 0x100){ - System.err.println("Not enough read. Bytes read: " + Integer.toHexString(totRead)); - } - for (int i=0x00; i 0){ - totRead += read; - } - if (totRead != 0x100){ - System.err.println("Not enough read. Bytes read: " + Integer.toHexString(totRead)); - } - for (int i=0x00; i * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -import java.io.*; - -%% - -%class BinaryLexer -%8bit - -%int - -%{ - public static void main(String [] argv) { - for (int i = 0; i < argv.length; i++) { - try { - System.out.print("["+argv[i]+"] is "); - BinaryLexer l = new BinaryLexer(new StraightStreamReader(new FileInputStream(argv[i]))); - l.yylex(); - } - catch (Exception e) { - e.printStackTrace(System.out); - System.exit(1); - } - } - } -%} - -magic = \xCA \xFE \xBA \xBE - -%% - -{magic} [^]+ { System.out.println("a class file"); } - -[^]+ { System.out.println("not a class file"); } diff --git a/tools/lexer/jflex-1.4/examples/byaccj/Makefile b/tools/lexer/jflex-1.4/examples/byaccj/Makefile deleted file mode 100644 index 28a361dda157..000000000000 --- a/tools/lexer/jflex-1.4/examples/byaccj/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# only works with the Java extension of yacc: -# byacc/j from http://troi.lincom-asg.com/~rjamison/byacc/ - -JFLEX = jflex -BYACCJ = yacc -J -JAVAC = javac - -# targets: - -all: Parser.class - -run: Parser.class - java Parser - -build: clean Parser.class - -clean: - rm -f *~ *.class *.java - -Parser.class: Yylex.java Parser.java - $(JAVAC) Parser.java - -Yylex.java: calc.flex - $(JFLEX) calc.flex - -Parser.java: calc.y - $(BYACCJ) calc.y diff --git a/tools/lexer/jflex-1.4/examples/byaccj/README b/tools/lexer/jflex-1.4/examples/byaccj/README deleted file mode 100644 index ab6831e8026c..000000000000 --- a/tools/lexer/jflex-1.4/examples/byaccj/README +++ /dev/null @@ -1,22 +0,0 @@ -This directory contains an interoperability example for BYacc/J and JFlex -(a small calculator) - -You need the parser generator byacc/j from -http://troi.lincom-asg.com/~rjamison/byacc/ -for this example to work (version byacc/j 1.1 has been tested). - -Use the Makefile to generate the lexer and parser. -The example can then be started with - -java Parser - - -files: - -calc.flex - JFlex specification for the lexical part of the arithmetic expressions - -calc.y - BYacc/J specification and main program for the calculator - - diff --git a/tools/lexer/jflex-1.4/examples/byaccj/calc.flex b/tools/lexer/jflex-1.4/examples/byaccj/calc.flex deleted file mode 100644 index 8ad62bc4332f..000000000000 --- a/tools/lexer/jflex-1.4/examples/byaccj/calc.flex +++ /dev/null @@ -1,62 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2000 Gerwin Klein * - * All rights reserved. * - * * - * Thanks to Larry Bell and Bob Jamison for suggestions and comments. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -%% - -%byaccj - -%{ - private Parser yyparser; - - public Yylex(java.io.Reader r, Parser yyparser) { - this(r); - this.yyparser = yyparser; - } -%} - -NUM = [0-9]+ ("." [0-9]+)? -NL = \n | \r | \r\n - -%% - -/* operators */ -"+" | -"-" | -"*" | -"/" | -"^" | -"(" | -")" { return (int) yycharat(0); } - -/* newline */ -{NL} { return Parser.NL; } - -/* float */ -{NUM} { yyparser.yylval = new ParserVal(Double.parseDouble(yytext())); - return Parser.NUM; } - -/* whitespace */ -[ \t]+ { } - -\b { System.err.println("Sorry, backspace doesn't work"); } - -/* error fallback */ -[^] { System.err.println("Error: unexpected character '"+yytext()+"'"); return -1; } diff --git a/tools/lexer/jflex-1.4/examples/byaccj/calc.y b/tools/lexer/jflex-1.4/examples/byaccj/calc.y deleted file mode 100644 index 7ab42c271729..000000000000 --- a/tools/lexer/jflex-1.4/examples/byaccj/calc.y +++ /dev/null @@ -1,112 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * All rights reserved. * - * * - * This is a modified version of the example from * - * http://www.lincom-asg.com/~rjamison/byacc/ * - * * - * Thanks to Larry Bell and Bob Jamison for suggestions and comments. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -%{ - import java.io.*; -%} - -%token NL /* newline */ -%token NUM /* a number */ - -%type exp - -%left '-' '+' -%left '*' '/' -%left NEG /* negation--unary minus */ -%right '^' /* exponentiation */ - -%% - -input: /* empty string */ - | input line - ; - -line: NL { if (interactive) System.out.print("Expression: "); } - | exp NL { System.out.println(" = " + $1); - if (interactive) System.out.print("Expression: "); } - ; - -exp: NUM { $$ = $1; } - | exp '+' exp { $$ = $1 + $3; } - | exp '-' exp { $$ = $1 - $3; } - | exp '*' exp { $$ = $1 * $3; } - | exp '/' exp { $$ = $1 / $3; } - | '-' exp %prec NEG { $$ = -$2; } - | exp '^' exp { $$ = Math.pow($1, $3); } - | '(' exp ')' { $$ = $2; } - ; - -%% - - private Yylex lexer; - - - private int yylex () { - int yyl_return = -1; - try { - yylval = new ParserVal(0); - yyl_return = lexer.yylex(); - } - catch (IOException e) { - System.err.println("IO error :"+e); - } - return yyl_return; - } - - - public void yyerror (String error) { - System.err.println ("Error: " + error); - } - - - public Parser(Reader r) { - lexer = new Yylex(r, this); - } - - - static boolean interactive; - - public static void main(String args[]) throws IOException { - System.out.println("BYACC/Java with JFlex Calculator Demo"); - - Parser yyparser; - if ( args.length > 0 ) { - // parse a file - yyparser = new Parser(new FileReader(args[0])); - } - else { - // interactive mode - System.out.println("[Quit with CTRL-D]"); - System.out.print("Expression: "); - interactive = true; - yyparser = new Parser(new InputStreamReader(System.in)); - } - - yyparser.yyparse(); - - if (interactive) { - System.out.println(); - System.out.println("Have a nice day"); - } - } diff --git a/tools/lexer/jflex-1.4/examples/cup/Main.java b/tools/lexer/jflex-1.4/examples/cup/Main.java deleted file mode 100644 index fba453289fe3..000000000000 --- a/tools/lexer/jflex-1.4/examples/cup/Main.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - This example comes from a short article series in the Linux - Gazette by Richard A. Sevenich and Christopher Lopes, titled - "Compiler Construction Tools". The article series starts at - - http://www.linuxgazette.com/issue39/sevenich.html - - Small changes and updates to newest JFlex+Cup versions - by Gerwin Klein -*/ - -/* - Commented By: Christopher Lopes - File Name: Main.java - To Create: - After the scanner, lcalc.flex, and the parser, ycalc.cup, have been created. - > javac Main.java - - To Run: - > java Main test.txt - where test.txt is an test input file for the calculator. -*/ - -import java.io.FileReader; - -public class Main { - static public void main(String argv[]) { - /* Start the parser */ - try { - parser p = new parser(new Lexer(new FileReader(argv[0]))); - Object result = p.parse().value; - } catch (Exception e) { - /* do cleanup here -- possibly rethrow e */ - e.printStackTrace(); - } - } -} - - diff --git a/tools/lexer/jflex-1.4/examples/cup/Makefile b/tools/lexer/jflex-1.4/examples/cup/Makefile deleted file mode 100644 index fff6fbced6b4..000000000000 --- a/tools/lexer/jflex-1.4/examples/cup/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -JAVA=java -JAVAC=javac -JFLEX=jflex -CUP=$(JAVA) java_cup.Main < - -all: test - -test: output.txt - @(diff output.txt output.good && echo "Test OK!") || echo "Test failed!" - -output.txt: Main.class test.txt - $(JAVA) Main test.txt > output.txt - -Main.class: Main.java Lexer.java parser.java - -%.class: %.java - $(JAVAC) $^ - -Lexer.java: lcalc.flex - $(JFLEX) lcalc.flex - -parser.java: ycalc.cup - $(CUP) ycalc.cup - -clean: - rm -f parser.java Lexer.java sym.java output.txt *.class *~ diff --git a/tools/lexer/jflex-1.4/examples/cup/README b/tools/lexer/jflex-1.4/examples/cup/README deleted file mode 100644 index 6b0d333bd188..000000000000 --- a/tools/lexer/jflex-1.4/examples/cup/README +++ /dev/null @@ -1,30 +0,0 @@ -A small JFlex+Cup example - -It comes from a short article series in the Linux Gazette by Richard -A. Sevenich and Christopher Lopes, titled "Compiler Construction -Tools". The article series starts at - -http://www.linuxgazette.com/issue39/sevenich.html - -Small changes and updates to newest JFlex+Cup versions by Gerwin Klein - - -To compile: ->jflex lcalc.flex ->java java_cup.Main < ycalc.cup ->javac Main.java - -To run: ->java Main test.txt - - -Files: - -Main.java demo of a main program -Makefile makefile to compile and test the example -README this file -lcalc.flex the lexer spec -output.good how the output should look like for the test -ycalc.cup the parser spec -test.txt sample input for testing - diff --git a/tools/lexer/jflex-1.4/examples/cup/lcalc.flex b/tools/lexer/jflex-1.4/examples/cup/lcalc.flex deleted file mode 100644 index 181bf0198f01..000000000000 --- a/tools/lexer/jflex-1.4/examples/cup/lcalc.flex +++ /dev/null @@ -1,142 +0,0 @@ -/* - This example comes from a short article series in the Linux - Gazette by Richard A. Sevenich and Christopher Lopes, titled - "Compiler Construction Tools". The article series starts at - - http://www.linuxgazette.com/issue39/sevenich.html - - Small changes and updates to newest JFlex+Cup versions - by Gerwin Klein -*/ - -/* - Commented By: Christopher Lopes - File Name: lcalc.flex - To Create: > jflex lcalc.flex - - and then after the parser is created - > javac Lexer.java -*/ - -/* --------------------------Usercode Section------------------------ */ - -import java_cup.runtime.*; - -%% - -/* -----------------Options and Declarations Section----------------- */ - -/* - The name of the class JFlex will create will be Lexer. - Will write the code to the file Lexer.java. -*/ -%class Lexer - -/* - The current line number can be accessed with the variable yyline - and the current column number with the variable yycolumn. -*/ -%line -%column - -/* - Will switch to a CUP compatibility mode to interface with a CUP - generated parser. -*/ -%cup - -/* - Declarations - - Code between %{ and %}, both of which must be at the beginning of a - line, will be copied letter to letter into the lexer class source. - Here you declare member variables and functions that are used inside - scanner actions. -*/ -%{ - /* To create a new java_cup.runtime.Symbol with information about - the current token, the token will have no value in this - case. */ - private Symbol symbol(int type) { - return new Symbol(type, yyline, yycolumn); - } - - /* Also creates a new java_cup.runtime.Symbol with information - about the current token, but this object has a value. */ - private Symbol symbol(int type, Object value) { - return new Symbol(type, yyline, yycolumn, value); - } -%} - - -/* - Macro Declarations - - These declarations are regular expressions that will be used latter - in the Lexical Rules Section. -*/ - -/* A line terminator is a \r (carriage return), \n (line feed), or - \r\n. */ -LineTerminator = \r|\n|\r\n - -/* White space is a line terminator, space, tab, or line feed. */ -WhiteSpace = {LineTerminator} | [ \t\f] - -/* A literal integer is is a number beginning with a number between - one and nine followed by zero or more numbers between zero and nine - or just a zero. */ -dec_int_lit = 0 | [1-9][0-9]* - -/* A identifier integer is a word beginning a letter between A and - Z, a and z, or an underscore followed by zero or more letters - between A and Z, a and z, zero and nine, or an underscore. */ -dec_int_id = [A-Za-z_][A-Za-z_0-9]* - -%% -/* ------------------------Lexical Rules Section---------------------- */ - -/* - This section contains regular expressions and actions, i.e. Java - code, that will be executed when the scanner matches the associated - regular expression. */ - - /* YYINITIAL is the state at which the lexer begins scanning. So - these regular expressions will only be matched if the scanner is in - the start state YYINITIAL. */ - - { - - /* Return the token SEMI declared in the class sym that was found. */ - ";" { return symbol(sym.SEMI); } - - /* Print the token found that was declared in the class sym and then - return it. */ - "+" { System.out.print(" + "); return symbol(sym.PLUS); } - "-" { System.out.print(" - "); return symbol(sym.MINUS); } - "*" { System.out.print(" * "); return symbol(sym.TIMES); } - "/" { System.out.print(" / "); return symbol(sym.DIVIDE); } - "(" { System.out.print(" ( "); return symbol(sym.LPAREN); } - ")" { System.out.print(" ) "); return symbol(sym.RPAREN); } - - /* If an integer is found print it out, return the token NUMBER - that represents an integer and the value of the integer that is - held in the string yytext which will get turned into an integer - before returning */ - {dec_int_lit} { System.out.print(yytext()); - return symbol(sym.NUMBER, new Integer(yytext())); } - - /* If an identifier is found print it out, return the token ID - that represents an identifier and the default value one that is - given to all identifiers. */ - {dec_int_id} { System.out.print(yytext()); - return symbol(sym.ID, new Integer(1));} - - /* Don't do anything if whitespace is found */ - {WhiteSpace} { /* just skip what was found, do nothing */ } -} - - -/* No token was found for the input so through an error. Print out an - Illegal character message with the illegal character that was found. */ -[^] { throw new Error("Illegal character <"+yytext()+">"); } diff --git a/tools/lexer/jflex-1.4/examples/cup/output.good b/tools/lexer/jflex-1.4/examples/cup/output.good deleted file mode 100644 index cbceb636f601..000000000000 --- a/tools/lexer/jflex-1.4/examples/cup/output.good +++ /dev/null @@ -1,4 +0,0 @@ -2 + 4 = 6 -5 * ( 6 - 3 ) + 1 = 16 -6 / 3 * 5 + 20 = 30 -4 * 76 / 31 = 9 diff --git a/tools/lexer/jflex-1.4/examples/cup/test.txt b/tools/lexer/jflex-1.4/examples/cup/test.txt deleted file mode 100644 index 3f8344bccdb2..000000000000 --- a/tools/lexer/jflex-1.4/examples/cup/test.txt +++ /dev/null @@ -1,4 +0,0 @@ -2+4; -5*(6-3)+1; -6/3*5+20; -4*76/31; diff --git a/tools/lexer/jflex-1.4/examples/cup/ycalc.cup b/tools/lexer/jflex-1.4/examples/cup/ycalc.cup deleted file mode 100644 index a67a20d3b09a..000000000000 --- a/tools/lexer/jflex-1.4/examples/cup/ycalc.cup +++ /dev/null @@ -1,234 +0,0 @@ -/* - This example comes from a short article series in the Linux - Gazette by Richard A. Sevenich and Christopher Lopes, titled - "Compiler Construction Tools". The article series starts at - - http://www.linuxgazette.com/issue39/sevenich.html - - Small changes and updates to newest JFlex+Cup versions - by Gerwin Klein -*/ - -/* - Commented By: Christopher Lopes - File Name: ycalc.cup - To Create: > java java_cup.Main < ycalc.cup -*/ - - -/* ----------------------Preliminary Declarations Section--------------------*/ - -/* Import the class java_cup.runtime.* */ -import java_cup.runtime.*; - -/* Parser code to change the way the parser reports errors (include - line and column number of the error). */ -parser code {: - - /* Change the method report_error so it will display the line and - column of where the error occurred in the input as well as the - reason for the error which is passed into the method in the - String 'message'. */ - public void report_error(String message, Object info) { - - /* Create a StringBuffer called 'm' with the string 'Error' in it. */ - StringBuffer m = new StringBuffer("Error"); - - /* Check if the information passed to the method is the same - type as the type java_cup.runtime.Symbol. */ - if (info instanceof java_cup.runtime.Symbol) { - /* Declare a java_cup.runtime.Symbol object 's' with the - information in the object info that is being typecasted - as a java_cup.runtime.Symbol object. */ - java_cup.runtime.Symbol s = ((java_cup.runtime.Symbol) info); - - /* Check if the line number in the input is greater or - equal to zero. */ - if (s.left >= 0) { - /* Add to the end of the StringBuffer error message - the line number of the error in the input. */ - m.append(" in line "+(s.left+1)); - /* Check if the column number in the input is greater - or equal to zero. */ - if (s.right >= 0) - /* Add to the end of the StringBuffer error message - the column number of the error in the input. */ - m.append(", column "+(s.right+1)); - } - } - - /* Add to the end of the StringBuffer error message created in - this method the message that was passed into this method. */ - m.append(" : "+message); - - /* Print the contents of the StringBuffer 'm', which contains - an error message, out on a line. */ - System.err.println(m); - } - - /* Change the method report_fatal_error so when it reports a fatal - error it will display the line and column number of where the - fatal error occurred in the input as well as the reason for the - fatal error which is passed into the method in the object - 'message' and then exit.*/ - public void report_fatal_error(String message, Object info) { - report_error(message, info); - System.exit(1); - } -:}; - - - -/* ------------Declaration of Terminals and Non Terminals Section----------- */ - -/* Terminals (tokens returned by the scanner). - - Terminals that have no value are listed first and then terminals - that do have an value, in this case an integer value, are listed on - the next line down. */ -terminal SEMI, PLUS, MINUS, TIMES, DIVIDE, LPAREN, RPAREN; -terminal Integer NUMBER, ID; - -/* Non terminals used in the grammar section. - - Non terminals that have an object value are listed first and then - non terminals that have an integer value are listed. An object - value means that it can be any type, it isn't set to a specific - type. So it could be an Integer or a String or whatever. */ -non terminal Object expr_list, expr_part; -non terminal Integer expr, factor, term; - - -/* -------------Precedence and Associatively of Terminals Section----------- */ - -/* - Precedence of non terminals could be defined here. If you do define - precedence here you won't need to worry about precedence in the - Grammar Section, i.e. that TIMES should have a higher precedence - than PLUS. - - The precedence defined here would look something like this where the - lower line always will have higher precedence than the line before it. - - precedence left PLUS, MINUS; - precedence left TIMES, DIVIDE; -*/ - - -/* ----------------------------Grammar Section-------------------- */ - -/* The grammar for our parser. - - expr_list ::= expr_list expr_part - | expr_part - expr_part ::= expr SEMI - expr ::= factor PLUS expr - | factor MINUS expr - | factor - factor ::= factor TIMES term - | factor DIVIDE term - | term - term ::= LPAREN expr RPAREN - | NUMBER - | ID -*/ - -/* 'expr_list' is the start of our grammar. It can lead to another - 'expr_list' followed by an 'expr_part' or it can just lead to an - 'expr_part'. The lhs of the non terminals 'expr_list' and - 'expr_part' that are in the rhs side of the production below need - to be found. Then the rhs sides of those non terminals need to be - followed in a similar manner, i.e. if there are any non terminals - in the rhs of those productions then the productions with those non - terminals need to be found and those rhs's followed. This process - keeps continuing until only terminals are found in the rhs of a - production. Then we can work our way back up the grammar bringing - any values that might have been assigned from a terminal. */ - - expr_list ::= expr_list expr_part - | - expr_part; - -/* 'expr_part' is an 'expr' followed by the terminal 'SEMI'. The ':e' - after the non terminal 'expr' is a label an is used to access the - value of 'expr' which will be an integer. The action for the - production lies between {: and :}. This action will print out the - line " = + e" where e is the value of 'expr'. Before the action - takes places we need to go deeper into the grammar since 'expr' is - a non terminal. Whenever a non terminal is encountered on the rhs - of a production we need to find the rhs of that non terminal until - there are no more non terminals in the rhs. So when we finish - going through the grammar and don't encounter any more non - terminals in the rhs productions will return until we get back to - 'expr' and at that point 'expr' will contain an integer value. */ - - expr_part ::= expr:e - {: System.out.println(" = " + e); :} - SEMI - ; - -/* 'expr' can lead to 'factor PLUS expr', 'factor MINUS expr', or - 'factor'. The 'TIMES' and 'DIVIDE' productions are not at this - level. They are at a lower level in the grammar which in affect - makes them have higher precedence. Actions for the rhs of the non - terminal 'expr' return a value to 'expr'. This value that is - created is an integer and gets stored in 'RESULT' in the action. - RESULT is the label that is assigned automatically to the rhs, in - this case 'expr'. If the rhs is just 'factor' then 'f' refers to - the non terminal 'factor'. The value of 'f' is retrieved with the - function 'intValue()' and will be stored in 'RESULT'. In the other - two cases 'f' and 'e' refers to the non terminals 'factor' and - 'expr' respectively with a terminal between them, either 'PLUS' or - 'MINUS'. The value of each is retrieved with the same function - 'intValue'. The values will be added or subtracted and then the - new integer will be stored in 'RESULT'.*/ - - expr ::= factor:f PLUS expr:e - {: RESULT = new Integer(f.intValue() + e.intValue()); :} - | - factor:f MINUS expr:e - {: RESULT = new Integer(f.intValue() - e.intValue()); :} - | - factor:f - {: RESULT = new Integer(f.intValue()); :} - ; - -/* 'factor' can lead to 'factor TIMES term', 'factor DIVIDE term', or - 'term'. Since the productions for TIMES and DIVIDE are lower in - the grammar than 'PLUS' and 'MINUS' they will have higher - precedence. The same sort of actions take place in the rhs of - 'factor' as in 'expr'. The only difference is the operations that - takes place on the values retrieved with 'intValue()', 'TIMES' and - 'DIVIDE' here instead of 'PLUS' and 'MINUS'. */ - - factor ::= factor:f TIMES term:t - {: RESULT = new Integer(f.intValue() * t.intValue()); :} - | - factor:f DIVIDE term:t - {: RESULT = new Integer(f.intValue() / t.intValue()); :} - | - term:t - {: RESULT = new Integer(t.intValue()); :} - ; - -/* 'term' can lead to 'LPAREN expr RPAREN', 'NUMBER', or 'ID'. The - first production has the non terminal 'expr' in it so the - production with its lhs side needs to be found and followed. The - next rhs has no non terminals. So the grammar ends here and can go - back up. When it goes back up it will bring the value that was - retrieved when the scanner encounter the token 'NUMBER'. 'RESULT' - is assigned 'n', which refers to 'NUMBER', as the action for this - production. The same action occurs for 'ID', except the 'i' is - used to refer to 'ID'. 'ID' is also the only thing on the rhs of - the production. And since 'ID' is a terminal the grammar will end - here and go back up. */ - - term ::= LPAREN expr:e RPAREN - {: RESULT = e; :} - | - NUMBER:n - {: RESULT = n; :} - | - ID:i - {: RESULT = i; :} - ; diff --git a/tools/lexer/jflex-1.4/examples/interpreter/AST.java b/tools/lexer/jflex-1.4/examples/interpreter/AST.java deleted file mode 100644 index 194a42c4a33c..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/AST.java +++ /dev/null @@ -1,30 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * General interface for nodes in the abstract syntax tree. Contains - * only the method toString which is already inherited from Object, - * so the interface doesn't add any functionality. It only provides - * a common super type for all elements in the AST. - */ -interface AST { - public String toString(); // already inherited from Object -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Main.java b/tools/lexer/jflex-1.4/examples/interpreter/Main.java deleted file mode 100644 index 4fbaf1a7a6e1..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Main.java +++ /dev/null @@ -1,88 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -import java.io.File; -import java.io.FileReader; -import java.io.InputStreamReader; -import java.io.Reader; - -/** - * Main program of the interpreter for the AS programming language. - * Based on JFlex/CUP. - * - * Steps: - * - scanning (Yylex) - * - context free parsing and AST building (yyparse) - * - build up symbol table (setSymtabs) - * - check context conditions (checkcontext) - * - prepare interpretation (prepInterp) - * - start interpretation (interpret) - */ -public class Main { - - public static void main(String [] args) throws Exception { - Reader reader = null; - - if (args.length == 1) { - File input = new File(args[0]); - if (!input.canRead()) { - System.out.println("Error: could not read ["+input+"]"); - } - reader = new FileReader(input); - } - else { - reader = new InputStreamReader(System.in); - } - - Yylex scanner = new Yylex(reader); // create scanner - SymTab symtab = new SymTab(); // set global symbol table - scanner.setSymtab(symtab); - - parser parser = new parser(scanner); // create parser - Tprogram syntaxbaum = null; - - try { - syntaxbaum = (Tprogram) parser.parse().value; // parse - } - catch (Exception e) { - e.printStackTrace(); - } - - // System.out.println(symtab); - System.out.println(syntaxbaum); - - syntaxbaum.setSymtabs(); // set symbol table - // syntaxbaum.printSymtabs(); // print symbol table - - syntaxbaum.checkcontext(); // CoCo (DefVar, DefFun, Arity) - if(contexterror>0) return; - - syntaxbaum.prepInterp(); // var. indices and function pointers - // im Syntaxbaum setzen - syntaxbaum.interpret(); // interpretation - } - - static int contexterror = 0; // number of errors in context conditions - - public static void error(String s) { - System.out.println((contexterror++)+". "+s); - } -} diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Makefile b/tools/lexer/jflex-1.4/examples/interpreter/Makefile deleted file mode 100644 index de5afbe94d7b..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# uses JFlex >= 1.3.2, and CUP >= 0.10j -# -# targets: -# -# make all -# generates lexer, and parser, and compiles all *.java files -# -# make run (or just: make) -# starts the program on a test example -# - - - -.SUFFIXES: $(SUFFIXES) .class .java - -.java.class: - javac $*.java - -FILE= Yylex.java parser.java sym.java \ - SymTab.java AST.java \ - Tnumber.java Tident.java Texp.java \ - Tfun.java Texpinfix.java Tuminus.java \ - Tboolexp.java Tifthenelse.java \ - Tdekl.java Tdekllist.java \ - Tparlist.java Texplist.java Tprogram.java \ - Main.java \ - SymtabEntry.java STEfun.java STEvar.java - - -run: all - java Main < example.as - -all: Yylex.java parser.java $(FILE:java=class) - -clean: - rm -f *.class *~ *.bak Yylex.java parser.java sym.java - -Yylex.java: scanner.flex - jflex scanner.flex - -parser.java: parser.cup - java java_cup.Main -interface < parser.cup diff --git a/tools/lexer/jflex-1.4/examples/interpreter/README b/tools/lexer/jflex-1.4/examples/interpreter/README deleted file mode 100644 index 731bd5c1b208..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/README +++ /dev/null @@ -1,31 +0,0 @@ -This directory contains an interpreter for a small functional -programming language (called "AS"). It uses JFlex and CUP. - -Directory contents: - -- Main.java is the main program. It reads an AS program from - std in and interprets it. - -- Makefile runs jflex, cup, javac and the compiled interpreter - -- Classes beginning with "T" implement the abstract syntax tree. - They also contain context condition checking and the interpreter. - -- Symtab.java, SymtabEntry.java, STEfun.java, STEvar.java implement - the symbol table. - -- scanner.lex and parser.cup contain the scanner and parser. - -- example.as is an example program in AS - - -The language is described in: -Manfred Broy: Einfuehrung in die Informatik, Springer Verlag - -The files are a solution to excercise 3.40 in the book: -Manfred Broy,Bernhard Rumpe: -Uebungen zur Einfuehrung in die Informatik -- -Strukturierte Aufgabensammlung mit Musterloesungen, -Springer Verlag, 2001 - -Both books are only available in German. Sorry. diff --git a/tools/lexer/jflex-1.4/examples/interpreter/STEfun.java b/tools/lexer/jflex-1.4/examples/interpreter/STEfun.java deleted file mode 100644 index 655813b4dcee..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/STEfun.java +++ /dev/null @@ -1,54 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * Symbol table entry for functions. - * - * Contains arity and reference to location of definition - */ -class STEfun extends SymtabEntry { - int arity; - Tdekl dekl; // location of definition - - public STEfun(String f, Tdekl d, int a) { - super(f); - dekl=d; - arity=a; - } - - public int kind() { - return SymtabEntry.FUN; - } - - public String toString() { - return "function "+name+", arity "+arity; - } - - public int arity() { - return arity; - } - - public Tdekl getDekl() { - return dekl; - } -} - - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/STEvar.java b/tools/lexer/jflex-1.4/examples/interpreter/STEvar.java deleted file mode 100644 index c4d420db2e79..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/STEvar.java +++ /dev/null @@ -1,57 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * Symbol table entry for variables. - * - * Contains index in the parameter list and a flag if it - * is an input variable. - */ -class STEvar extends SymtabEntry { - boolean is_input; - int index; - - public STEvar(String v, boolean ii, int ind) { - super(v); - is_input=ii; - index=ind; - } - - public int kind() { - return SymtabEntry.VAR; - } - - public String toString() { - if (is_input) - return "input var "+name+" ("+index+")"; - else - return "parameter "+name+" ("+index+")"; - } - - public int getIndex() { - return index; - } - - public boolean isInput() { - return is_input; - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/SymTab.java b/tools/lexer/jflex-1.4/examples/interpreter/SymTab.java deleted file mode 100644 index 676a736cfb15..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/SymTab.java +++ /dev/null @@ -1,79 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -import java.util.Enumeration; -import java.util.Hashtable; - -/** - * Symbol table for the interpreter, contains information about - * variables and functions. - * - * For every binding location of a name a symbol will be created. - * The symbol tables are connected hierarchically by pointers to - * the predecessor. Lookup takes predecessors into account. - */ -public class SymTab { - Hashtable h; // contains the liste of words - // key: String, value: SymtabEntry - - SymTab pred; // predecessor symbol table (if exists) - - public SymTab() { - this(null); - } - - public SymTab(SymTab p) { - h = new Hashtable(); - pred = p; - } - - public boolean enter(String s, SymtabEntry e) { - Object value = lookup(s); - h.put(s, e); - return(value==null); - } - - public SymtabEntry lookup(String s) { - Object value = h.get(s); - if (value==null && pred!=null) - value = pred.lookup(s); - return ((SymtabEntry)value); - } - - public String toString() { // for output with print - String res = "symbol table\n=============\n"; - Enumeration e = h.keys(); - String key; - - while(e.hasMoreElements()) { - key = (String)e.nextElement(); - res += key+" \t"+h.get(key)+"\n"; - } - - if (pred!=null) res+="++ predecessor!\n"; - return(res); - } - - public int size() { - return(h.size()); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/SymtabEntry.java b/tools/lexer/jflex-1.4/examples/interpreter/SymtabEntry.java deleted file mode 100644 index 9eb7f1385c0d..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/SymtabEntry.java +++ /dev/null @@ -1,48 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * Symbol table entry for names, there are subclasses for - * variables and functions. - * - * Defines constants UNKNOWN, VAR und FUN as kinds of - * symbol table entries. - */ -class SymtabEntry { - String name; - - public SymtabEntry(String v) { - name=v; - } - - public int kind() { - return UNKNOWN; - } - - public String toString() { - return("unknown "+name); - } - - static final int UNKNOWN = 12; - static final int VAR = 13; - static final int FUN = 14; -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tboolexp.java b/tools/lexer/jflex-1.4/examples/interpreter/Tboolexp.java deleted file mode 100644 index 59ab0e30a885..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tboolexp.java +++ /dev/null @@ -1,64 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for bool expressions - */ -class Tboolexp implements AST { - Texp exp1, exp2; // left and right subexpression - char kind; // '=', '<' and '!' for "<=" - - public Tboolexp(Texp e1, char k, Texp e2) { - exp1=e1; - kind=k; - exp2=e2; - } - - public String toString() { - if (kind!='!') - return(""+exp1+kind+exp2); - else - return(exp1+"<="+exp2); - } - - public void checkcontext(SymTab st) { // context conditions - exp1.checkcontext(st); - exp2.checkcontext(st); - } - - public void prepInterp(SymTab st) { // set pointers and indices - exp1.prepInterp(st); - exp2.prepInterp(st); - } - - public boolean interpret(int[] in, int[] par) { - int e1 = exp1.interpret(in,par); - int e2 = exp2.interpret(in,par); - switch(kind) { - case '=': return(e1==e2); - case '<': return(e1 * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for function declarations. - * - * Also contains a reference to the symbol table of - * the paramaters and their arity. - */ -class Tdekl implements AST { - Tident ident; // identifier - Tparlist parlist; // liste of parameter - Texp exp; // function body - - public Tdekl(Tident i, Tparlist p, Texp e) { - parlist=p; - ident=i; - exp=e; - } - - public String toString() { - return(ident+"("+parlist+") = \n "+exp); - } - - SymTab params; // symbol table of the parameters - int arity; - - public void setSymtab(SymTab st) { - params = new SymTab(st); - parlist.setSymtab(params,false,0); - arity = params.size(); - - boolean isNew = st.enter(ident.toString(), - new STEfun(ident.toString(),this,arity)); - // CoCo (Fun) - if(!isNew) Main.error("funktion "+ident+" defined twice!"); - } - - public void printSymtabs() { - System.out.print("funktion "+ident.toString()+"\n"+params); - } - - public void checkcontext() { - exp.checkcontext(params); // CoCo (DefFun,DefVar,Arity) - } - - public void prepInterp(SymTab st) { // set pointers and indices - exp.prepInterp(params); - } - - public int interpret(int[] in, int[] par) { - return(exp.interpret(in,par)); - } - - public int arity() { return(arity); } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tdekllist.java b/tools/lexer/jflex-1.4/examples/interpreter/Tdekllist.java deleted file mode 100644 index 6f409a6a7829..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tdekllist.java +++ /dev/null @@ -1,69 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for declaration lists of functions - */ -class Tdekllist implements AST { - Tdekllist dekllist; // rest list (optional null) - Tdekl dekl; // declaration - - public Tdekllist(Tdekllist p, Tdekl e) { - dekllist=p; - dekl=e; - } - - public Tdekllist(Tdekl e) { - dekllist=null; - dekl=e; - } - - public String toString() { - if (dekllist!=null) - return(dekllist+",\n"+dekl); - else - return(dekl.toString()); - } - - public void setSymtab(SymTab st) { - if (dekllist!=null) - dekllist.setSymtab(st); - dekl.setSymtab(st); - } - - public void printSymtabs() { - if (dekllist!=null) - dekllist.printSymtabs(); - dekl.printSymtabs(); - } - - public void checkcontext() { - if (dekllist!=null) - dekllist.checkcontext(); - dekl.checkcontext(); // CoCo (DefFun,DefVar,Arity) - } // in function body - - public void prepInterp(SymTab st) { // set pointers and indices - dekl.prepInterp(st); - if (dekllist!=null) dekllist.prepInterp(st); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Texp.java b/tools/lexer/jflex-1.4/examples/interpreter/Texp.java deleted file mode 100644 index 8c4ef9460d9a..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Texp.java +++ /dev/null @@ -1,43 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for an integer expression. - * - * The non terminal exp is the sum of multiple variants and - * therefore modeled as an abstract class. - * - * The interpretation function interpret is called with - * valuations of input variables in and parameters - * par. Before interpret can be called, pointers - * and variable indices must be set with prepInterp. - */ -abstract class Texp implements AST { - // test context conditions (DefFun,DefVar,Arity) - abstract public void checkcontext(SymTab st); - - // set pointers and indices for variables and functions - abstract public void prepInterp(SymTab st); - - // interpretation - abstract public int interpret(int[] in, int[] par); -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Texpinfix.java b/tools/lexer/jflex-1.4/examples/interpreter/Texpinfix.java deleted file mode 100644 index 9db0b0c17c5b..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Texpinfix.java +++ /dev/null @@ -1,64 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for infix expressions - */ -class Texpinfix extends Texp implements AST { - Texp exp1, exp2; // left and right sub expression - char kind; // kind ('+', '-', '*', '/') - - public Texpinfix(Texp e1, char k, Texp e2) { - exp1=e1; - kind=k; - exp2=e2; - } - - public String toString() { - return("("+exp1+kind+exp2+")"); - } - - public void checkcontext(SymTab st) { // context conditions - exp1.checkcontext(st); - exp2.checkcontext(st); - } - - public void prepInterp(SymTab st) { // set pointers und indices - exp1.prepInterp(st); - exp2.prepInterp(st); - } - - public int interpret(int[] in, int[] par) { - int e1 = exp1.interpret(in,par); - int e2 = exp2.interpret(in,par); - - switch (kind) { - case '+': return(e1+e2); - case '-': return(e1-e2); - case '*': return(e1*e2); - case '/': return(e1/e2); - } - - return -1; // error - } -} - - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Texplist.java b/tools/lexer/jflex-1.4/examples/interpreter/Texplist.java deleted file mode 100644 index 84ffe96b8ae3..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Texplist.java +++ /dev/null @@ -1,73 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for a list of expressions. - * - * The interpretation of a list of expressions stores the - * results of the expressions in an array that can be used - * as parameter list for function calls. - */ -class Texplist implements AST { - Texplist explist; // next list element (optional null) - Texp exp; // expression of this list node - - public Texplist(Texplist p, Texp e) { - explist=p; - exp=e; - } - - public Texplist(Texp e) { - explist=null; - exp=e; - } - - public String toString() { - if (explist!=null) - return explist+","+exp; - else - return exp.toString(); - } - - public void checkcontext(SymTab st) { - if (explist!=null) - explist.checkcontext(st); - exp.checkcontext(st); // CoCo (DefFun,DefVar,Arity) - } // in expression - - public int length() { - if (explist!=null) - return 1+explist.length(); - else - return 1; - } - - public void prepInterp(SymTab st) { // set pointers and indices - exp.prepInterp(st); - if (explist!=null) explist.prepInterp(st); - } - - public void interpret(int[] in, int[] par, int[] res, int index) { - res[index] = exp.interpret(in,par); - if (explist!=null) explist.interpret(in,par,res,index+1); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tfun.java b/tools/lexer/jflex-1.4/examples/interpreter/Tfun.java deleted file mode 100644 index 9776ae98be05..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tfun.java +++ /dev/null @@ -1,66 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for function application. - * - * Also contains pointer to declaration location of the function. - */ -class Tfun extends Texp implements AST { - Tident ident; // name of the function - Texplist explist; // parameter list - - public Tfun(Tident i, Texplist e) { - ident=i; - explist=e; - } - - public String toString() { - return ident+"("+explist+")"; - } - - public void checkcontext(SymTab st) { // CoCo (DefFun,Arity) - explist.checkcontext(st); - SymtabEntry ste = st.lookup(ident.toString()); - if (ste==null) - Main.error("function not defined: "+ident); - else if (ste.kind() != SymtabEntry.FUN) - Main.error("variable used as funktion: "+ident); - else if (((STEfun)ste).arity() != explist.length()) - Main.error("wrong arity at function call: "+ident); - } - - Tdekl fundekl; // pointer to location of function declaration - - // set pointers and indices - public void prepInterp(SymTab st) { - fundekl = ((STEfun)st.lookup(ident.toString())).getDekl(); - explist.prepInterp(st); - } - - public int interpret(int[] in, int[] par) { - int[] newparams = new int[fundekl.arity()]; - explist.interpret(in,par,newparams,0); - return fundekl.interpret(in,newparams); - } -} - - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tident.java b/tools/lexer/jflex-1.4/examples/interpreter/Tident.java deleted file mode 100644 index dc8cba98a825..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tident.java +++ /dev/null @@ -1,62 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for an identifier - */ -class Tident extends Texp implements AST { - String name; - - public Tident(String s) { - name = s; - } - - public String toString() { - return name; - } - - public void checkcontext(SymTab st) { // CoCo (DefVar) - SymtabEntry ste = st.lookup(name); - - if (ste==null) - Main.error("variable not defined: "+name); - else if (ste.kind() != SymtabEntry.VAR) - Main.error("function used as variable: "+name); - } - - int index; // number of ident in environment - boolean is_input; // is it an input variable? - - public void prepInterp(SymTab st) { // set index for environment - STEvar ste = (STEvar)st.lookup(name); - index = ste.getIndex(); - is_input = ste.isInput(); - } - - public int interpret(int[] in, int[] par) { - if (is_input) - return(in[index]); - else - return(par[index]); - } -} - - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tifthenelse.java b/tools/lexer/jflex-1.4/examples/interpreter/Tifthenelse.java deleted file mode 100644 index e7193f87ab66..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tifthenelse.java +++ /dev/null @@ -1,59 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for if-then-else expressions - */ -class Tifthenelse extends Texp implements AST { - Tboolexp boolexp; // condition - Texp exp1, exp2; // then and else branch - - public Tifthenelse(Tboolexp b, Texp e1, Texp e2) { - boolexp=b; - exp1=e1; - exp2=e2; - } - - public String toString() { - return "if "+boolexp+" then "+exp1+" else "+exp2+" fi"; - } - - public void checkcontext(SymTab st) { - boolexp.checkcontext(st); - exp1.checkcontext(st); - exp2.checkcontext(st); - } - - public void prepInterp(SymTab st) { - boolexp.prepInterp(st); - exp1.prepInterp(st); - exp2.prepInterp(st); - } - - public int interpret(int[] in, int[] par) { - boolean b = boolexp.interpret(in,par); - if (b) - return exp1.interpret(in,par); - else - return exp2.interpret(in,par); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tnumber.java b/tools/lexer/jflex-1.4/examples/interpreter/Tnumber.java deleted file mode 100644 index fef710ae24c5..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tnumber.java +++ /dev/null @@ -1,47 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for a number - */ -class Tnumber extends Texp implements AST { - int n; // value of the number - - public Tnumber(String s) { - try { n = Integer.parseInt(s); } - catch (NumberFormatException e) { n=-1; }; - } - - public String toString() { - return(""+n); - } - - public void checkcontext(SymTab st) { - } - - public void prepInterp(SymTab st) { - } - - public int interpret(int[] in, int[] par) { - return(n); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tparlist.java b/tools/lexer/jflex-1.4/examples/interpreter/Tparlist.java deleted file mode 100644 index 6f2ada93f0a6..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tparlist.java +++ /dev/null @@ -1,54 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for a parameter list. - */ -class Tparlist implements AST { - Tparlist parlist; // rest of the liste (optional null) - Tident ident; // identifier - - public Tparlist(Tparlist p, Tident i) { - parlist=p; - ident=i; - } - - public Tparlist(Tident i) { - parlist=null; - ident=i; - } - - public String toString() { - if (parlist!=null) - return parlist+","+ident; - else - return ident.toString(); - } - - public void setSymtab(SymTab st, boolean isInput, int index) { - boolean isNew = st.enter(ident.toString(), - new STEvar(ident.toString(), isInput, index)); - - if (!isNew) Main.error("Variable "+ident+" defined twice!"); - if (parlist!=null) parlist.setSymtab(st, isInput, index+1); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tprogram.java b/tools/lexer/jflex-1.4/examples/interpreter/Tprogram.java deleted file mode 100644 index 08a93d17fc80..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tprogram.java +++ /dev/null @@ -1,99 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for the whole program (top node). - * - * Also contains two symbol tables, one for input variables, - * one for function names. - * - * All operations like context check, symbol table build up - * etc. start here. - */ -class Tprogram implements AST { - - Tparlist parlist; // input variables - Tdekllist dekllist; // function declarations - Texplist explist; // result expressions - Texplist arguments; // input values - - public Tprogram(Tparlist p, Tdekllist d, Texplist e, Texplist a) { - parlist=p; - dekllist=d; - explist=e; - arguments=a; - } - - public String toString() { - return("Program:\n=============\ninput "+parlist+ - "\nfunctions\n"+dekllist+"\noutput "+explist+ - "\narguments "+arguments+"\nend"); - } - - SymTab inputs; // table of input variables - SymTab functions; // table of functions - - public void setSymtabs() { // calculate symbol table entries - inputs = new SymTab(); // set input variables - parlist.setSymtab(inputs, true, 0); - functions = new SymTab(inputs); - dekllist.setSymtab(functions); - } - - public void printSymtabs() { - System.out.print("Input variables-\n"+inputs); - System.out.print("Functions-\n"+functions); - dekllist.printSymtabs(); - } - - public void checkcontext() { - dekllist.checkcontext(); // CoCo (DefFun,DefVar,Arity) - // in function bodies - explist.checkcontext(functions); // CoCo (DefFun,DefVar,Arity) - // in result expressions - arguments.checkcontext(new SymTab()); // CoCo (constants) - // in arguments - if (arguments.length()!=inputs.size()) - Main.error("Argument list and input variables list differ!"); - } - - public void prepInterp() { // set pointers and indices - dekllist.prepInterp(functions); - explist.prepInterp(functions); - } - - public void interpret() { - int[] inputEnv = new int[inputs.size()]; // set input - - arguments.interpret(null,null,inputEnv,0); - - System.out.println("Result:\n============="); - - int[] ergebnis = new int[explist.length()]; - explist.interpret(inputEnv,null,ergebnis,0); // calculate result - - int i; - for (i=explist.length()-1; i > 0; i--) - System.out.print(ergebnis[i]+", "); - System.out.println(ergebnis[i]); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/Tuminus.java b/tools/lexer/jflex-1.4/examples/interpreter/Tuminus.java deleted file mode 100644 index d269b34f4a5e..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/Tuminus.java +++ /dev/null @@ -1,49 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * AST node for unary minus expressions. - */ -class Tuminus extends Texp implements AST { - - Texp exp; // the negated expression - - public Tuminus(Texp e) { - exp=e; - } - - public String toString() { - return "-"+exp; - } - - public void checkcontext(SymTab st) { - exp.checkcontext(st); - } - - public void prepInterp(SymTab st) { - exp.prepInterp(st); - } - - public int interpret(int[] in, int[] par) { - return -(exp.interpret(in,par)); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/build.xml b/tools/lexer/jflex-1.4/examples/interpreter/build.xml deleted file mode 100644 index 51829ba97893..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/build.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/lexer/jflex-1.4/examples/interpreter/example.as b/tools/lexer/jflex-1.4/examples/interpreter/example.as deleted file mode 100644 index 81522472e175..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/example.as +++ /dev/null @@ -1,16 +0,0 @@ - -// example program for interpreter testing -// contains division and modulo functins - -input a,b -functions div(x,y) = if x < y - then 0 - else div(x-y,y)+1 - fi, - mod(x,y) = if x < y - then x - else mod(x-y,y) - fi -output div(a,b), mod(a,b) -arguments 324, 17 -end diff --git a/tools/lexer/jflex-1.4/examples/interpreter/parser.cup b/tools/lexer/jflex-1.4/examples/interpreter/parser.cup deleted file mode 100644 index 3d7f856a679d..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/parser.cup +++ /dev/null @@ -1,112 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -// definition of tokens, if applicable with token type -terminal INPUT, FUNCTIONS, OUTPUT, END, ARGUMENTS; -terminal IF, THEN, ELSE, FI, ERROR; -terminal COMMA, LPAR, RPAR; -terminal EQ, LE, LEQ, MINUS, PLUS, TIMES, DIV, UMINUS; - -terminal String ID, NUMBER; - -non terminal Tprogram program; -non terminal Tparlist parlist; -non terminal Texplist explist; -non terminal Tdekllist dekllist; -non terminal Tdekl dekl; -non terminal Texp exp; -non terminal Tboolexp boolexp; -non terminal Tident ident; -non terminal Tnumber number; - - -// precedences, left associativity -precedence left EQ, LE, LEQ; -precedence left MINUS, PLUS; -precedence left TIMES, DIV; -precedence left UMINUS; - - -// here the rules start -program ::= INPUT parlist:p FUNCTIONS dekllist:d OUTPUT explist:o - ARGUMENTS explist:a END - {: RESULT = new Tprogram(p,d,o,a); :} - ; - -parlist ::= ident:i - {: RESULT = new Tparlist(i); :} - | parlist:p COMMA ident:i - {: RESULT = new Tparlist(p,i); :} - ; - -explist ::= exp:e - {: RESULT = new Texplist(e); :} - | explist:l COMMA exp:e - {: RESULT = new Texplist(l,e); :} - ; - -dekllist ::= dekl:d - {: RESULT = new Tdekllist(d);:} - | dekllist:l COMMA dekl:d - {: RESULT = new Tdekllist(l,d); :} - ; - -dekl ::= ident:i LPAR parlist:p RPAR EQ exp:e - {: RESULT = new Tdekl(i,p,e); :} - ; - -exp ::= number:n - {: RESULT = n; :} - | ident:i - {: RESULT = i; :} - | ident:i LPAR explist:e RPAR - {: RESULT = new Tfun(i,e); :} - | LPAR exp:e RPAR - {: RESULT = e; :} - | MINUS exp:e - {: RESULT = new Tuminus(e); :} %prec UMINUS - | exp:l PLUS exp:r - {: RESULT = new Texpinfix(l,'+',r); :} - | exp:l TIMES exp:r - {: RESULT = new Texpinfix(l,'*',r); :} - | exp:l DIV exp:r - {: RESULT = new Texpinfix(l,'/',r); :} - | exp:l MINUS exp:r - {: RESULT = new Texpinfix(l,'-',r); :} - | IF boolexp:b THEN exp:t ELSE exp:e FI - {: RESULT = new Tifthenelse(b,t,e); :} - ; - -boolexp ::= exp:l EQ exp:r - {: RESULT = new Tboolexp(l,'=',r); :} - | exp:l LE exp:r - {: RESULT = new Tboolexp(l,'<',r); :} - | exp:l LEQ exp:r - {: RESULT = new Tboolexp(l,'!',r); :} - ; - -ident ::= ID:n - {: RESULT = new Tident(n); :} - ; - -number ::= NUMBER:z - {: RESULT = new Tnumber(z); :} - ; diff --git a/tools/lexer/jflex-1.4/examples/interpreter/scanner.flex b/tools/lexer/jflex-1.4/examples/interpreter/scanner.flex deleted file mode 100644 index a6c3ca7e6c91..000000000000 --- a/tools/lexer/jflex-1.4/examples/interpreter/scanner.flex +++ /dev/null @@ -1,71 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2001 Gerwin Klein * - * Copyright (C) 2001 Bernhard Rumpe * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -import java_cup.runtime.Symbol; - -%% - -%cup -%implements sym - -%{ - SymTab symtab; // externe symbol table - - public void setSymtab(SymTab symtab) { - this.symtab = symtab; - } - - private Symbol sym(int sym) { - return new Symbol(sym); - } - - private Symbol sym(int sym, Object val) { - return new Symbol(sym, val); - } -%} - -%% - -"arguments" { return sym(ARGUMENTS); } -"input" { return sym(INPUT); } -"functions" { return sym(FUNCTIONS); } -"output" { return sym(OUTPUT); } -"end" { return sym(END); } -"if" { return sym(IF); } -"then" { return sym(THEN); } -"else" { return sym(ELSE); } -"fi" { return sym(FI); } -[a-z]+ { symtab.enter(yytext(),new SymtabEntry(yytext())); - return sym(ID,yytext()); } -[0-9]+ { return sym(NUMBER,yytext()); } -"," { return sym(COMMA); } -"(" { return sym(LPAR); } -")" { return sym(RPAR); } -"=" { return sym(EQ); } -"-" { return sym(MINUS); } -"+" { return sym(PLUS); } -"*" { return sym(TIMES); } -"/" { return sym(DIV); } -"<" { return sym(LE); } -"<=" { return sym(LEQ); } -[\ \t\b\f\r\n]+ { /* eat whitespace */ } -"//"[^\n]* { /* one-line comment */ } -. { throw new Error("Unexpected character ["+yytext()+"]"); } diff --git a/tools/lexer/jflex-1.4/examples/java/JavaParser.java b/tools/lexer/jflex-1.4/examples/java/JavaParser.java deleted file mode 100644 index 4c587051b460..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/JavaParser.java +++ /dev/null @@ -1,47 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 1998-2004 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -import java.io.FileReader; - - -/** - * Simple test driver for the java parser. Just runs it on some - * input files, gives no useful output. - */ -public class JavaParser { - - public static void main(String argv[]) { - - for (int i = 0; i < argv.length; i++) { - try { - System.out.println("Parsing ["+argv[i]+"]"); - Scanner s = new Scanner(new UnicodeEscapes(new FileReader(argv[i]))); - parser p = new parser(s); - p.parse(); - - System.out.println("No errors."); - } - catch (Exception e) { - e.printStackTrace(System.out); - System.exit(1); - } - } - } - -} diff --git a/tools/lexer/jflex-1.4/examples/java/JavaSymbol.java b/tools/lexer/jflex-1.4/examples/java/JavaSymbol.java deleted file mode 100644 index d27b63dfe69f..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/JavaSymbol.java +++ /dev/null @@ -1,31 +0,0 @@ - -public class JavaSymbol extends java_cup.runtime.Symbol { - private int line; - private int column; - - public JavaSymbol(int type, int line, int column) { - this(type, line, column, -1, -1, null); - } - - public JavaSymbol(int type, int line, int column, Object value) { - this(type, line, column, -1, -1, value); - } - - public JavaSymbol(int type, int line, int column, int left, int right, Object value) { - super(type, left, right, value); - this.line = line; - this.column = column; - } - - public int getLine() { - return line; - } - - public int getColumn() { - return column; - } - - public String toString() { - return "line "+line+", column "+column+", sym: "+sym+(value == null ? "" : (", value: '"+value+"'")); - } -} diff --git a/tools/lexer/jflex-1.4/examples/java/Makefile b/tools/lexer/jflex-1.4/examples/java/Makefile deleted file mode 100644 index 655ebd368150..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -# You need CUP v0.10j (or newer) for this makefile to work (for java12.cup) -# -# CUP classes should be included in CLASSPATH - -CUP = java java_cup.Main -interface < -JFLEX = jflex -JAVA = java -JAVAC = javac -#JAVAC = jikes -JAVACFLAGS = - -# -------------------------------------------------- - -all: test - -test: lexer-output.txt - @(diff lexer-output.txt lexer-output.good && echo "Test OK!") || echo "Test failed!" - -lexer-output.txt: compile - $(JAVA) TestLexer TestLexer.java > lexer-output.txt - - -compile: scanner parser unicode - $(JAVAC) $(JAVACFLAGS) JavaParser.java TestLexer.java - -parser: parser.java - -parser.java: java12.cup - $(CUP) java12.cup - -scanner: Scanner.java - -Scanner.java: java.flex - $(JFLEX) java.flex - -unicode: UnicodeEscapes.java - -UnicodeEscapes.java: unicode.flex - $(JFLEX) unicode.flex - -clean: - rm -f *.class - rm -f *~ - rm -f Scanner.java - rm -f parser.java - rm -f sym.java - rm -f UnicodeEscapes.java - rm -f lexer-output.txt diff --git a/tools/lexer/jflex-1.4/examples/java/README b/tools/lexer/jflex-1.4/examples/java/README deleted file mode 100644 index 096582bf4417..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/README +++ /dev/null @@ -1,41 +0,0 @@ -This directory contains a scanner and parser for the Java programming language. - -You need the parser generator CUP v0.10j (or newer) for the parser to work. -Use the Makefile to generate the lexer and parser, or type: - -jflex unicode.flex -jflex java.flex -java java_cup.Main -interface < java12.cup -javac JavaParser.java TestLexer.java - - -The parser can be tested with: -java JavaParser - -The scanner (without parser attached) can be test with: -java TestLexer - - -files: - -unicode.flex - JFlex specification for the Unicode preprocessing phase - (see section 3.3 of the Java Language Specification). - Demonstrates how to implement a FilterReader with JFlex. - -java.flex - JFlex specification for the "real" Java 1.2 lexer. - -java12.cup - CUP specification for the Java 1.2 parser - Copyright (C) 1998 by C. Scott Ananian - (with small modifications to interface with the Lexer) - -JavaParser.java - a simple main class to run the parser (no other useful output though) - -TestLexer.java - a simple test driver for the scanner, produces debug output - -lexer-output.good - lexer output for input file TestLexer.java for testing diff --git a/tools/lexer/jflex-1.4/examples/java/TestLexer.java b/tools/lexer/jflex-1.4/examples/java/TestLexer.java deleted file mode 100644 index 90e4f35681bf..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/TestLexer.java +++ /dev/null @@ -1,62 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2004 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -import java_cup.runtime.Symbol; - -import java.io.FileReader; - - -/** - * Simple test driver for the java lexer. Just runs it on some - * input files and produces debug output. Needs symbol class from - * parser. - */ -public class TestLexer { - - /** some numerals to for lexer testing */ - int intDec = 37; - long longDec = 37l; - int intHex = 0x0001; - long longHex = 0xFFFFl; - int intOct = 0377; - long longOc = 007l; - - - public static void main(String argv[]) { - - for (int i = 0; i < argv.length; i++) { - try { - System.out.println("Lexing ["+argv[i]+"]"); - Scanner scanner = new Scanner(new UnicodeEscapes(new FileReader(argv[i]))); - - Symbol s; - do { - s = scanner.debug_next_token(); - System.out.println("token: "+s); - } while (s.sym != sym.EOF); - - System.out.println("No errors."); - } - catch (Exception e) { - e.printStackTrace(System.out); - System.exit(1); - } - } - } -} diff --git a/tools/lexer/jflex-1.4/examples/java/java.flex b/tools/lexer/jflex-1.4/examples/java/java.flex deleted file mode 100644 index cdce5b6a11cb..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/java.flex +++ /dev/null @@ -1,312 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 1998-2004 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* Java 1.2 language lexer specification */ - -/* Use together with unicode.flex for Unicode preprocesssing */ -/* and java12.cup for a Java 1.2 parser */ - -/* Note that this lexer specification is not tuned for speed. - It is in fact quite slow on integer and floating point literals, - because the input is read twice and the methods used to parse - the numbers are not very fast. - For a production quality application (e.g. a Java compiler) - this could be optimized */ - - -import java_cup.runtime.*; - -%% - -%public -%class Scanner -%implements sym - -%unicode - -%line -%column - -%cup -%cupdebug - -%{ - StringBuffer string = new StringBuffer(); - - private Symbol symbol(int type) { - return new JavaSymbol(type, yyline+1, yycolumn+1); - } - - private Symbol symbol(int type, Object value) { - return new JavaSymbol(type, yyline+1, yycolumn+1, value); - } - - /** - * assumes correct representation of a long value for - * specified radix in scanner buffer from start - * to end - */ - private long parseLong(int start, int end, int radix) { - long result = 0; - long digit; - - for (int i = start; i < end; i++) { - digit = Character.digit(yycharat(i),radix); - result*= radix; - result+= digit; - } - - return result; - } -%} - -/* main character classes */ -LineTerminator = \r|\n|\r\n -InputCharacter = [^\r\n] - -WhiteSpace = {LineTerminator} | [ \t\f] - -/* comments */ -Comment = {TraditionalComment} | {EndOfLineComment} | - {DocumentationComment} - -TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" -EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? -DocumentationComment = "/*" "*"+ [^/*] ~"*/" - -/* identifiers */ -Identifier = [:jletter:][:jletterdigit:]* - -/* integer literals */ -DecIntegerLiteral = 0 | [1-9][0-9]* -DecLongLiteral = {DecIntegerLiteral} [lL] - -HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} -HexLongLiteral = 0 [xX] 0* {HexDigit} {1,16} [lL] -HexDigit = [0-9a-fA-F] - -OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} -OctLongLiteral = 0+ 1? {OctDigit} {1,21} [lL] -OctDigit = [0-7] - -/* floating point literals */ -FloatLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? [fF] -DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? - -FLit1 = [0-9]+ \. [0-9]* -FLit2 = \. [0-9]+ -FLit3 = [0-9]+ -Exponent = [eE] [+-]? [0-9]+ - -/* string and character literals */ -StringCharacter = [^\r\n\"\\] -SingleCharacter = [^\r\n\'\\] - -%state STRING, CHARLITERAL - -%% - - { - - /* keywords */ - "abstract" { return symbol(ABSTRACT); } - "boolean" { return symbol(BOOLEAN); } - "break" { return symbol(BREAK); } - "byte" { return symbol(BYTE); } - "case" { return symbol(CASE); } - "catch" { return symbol(CATCH); } - "char" { return symbol(CHAR); } - "class" { return symbol(CLASS); } - "const" { return symbol(CONST); } - "continue" { return symbol(CONTINUE); } - "do" { return symbol(DO); } - "double" { return symbol(DOUBLE); } - "else" { return symbol(ELSE); } - "extends" { return symbol(EXTENDS); } - "final" { return symbol(FINAL); } - "finally" { return symbol(FINALLY); } - "float" { return symbol(FLOAT); } - "for" { return symbol(FOR); } - "default" { return symbol(DEFAULT); } - "implements" { return symbol(IMPLEMENTS); } - "import" { return symbol(IMPORT); } - "instanceof" { return symbol(INSTANCEOF); } - "int" { return symbol(INT); } - "interface" { return symbol(INTERFACE); } - "long" { return symbol(LONG); } - "native" { return symbol(NATIVE); } - "new" { return symbol(NEW); } - "goto" { return symbol(GOTO); } - "if" { return symbol(IF); } - "public" { return symbol(PUBLIC); } - "short" { return symbol(SHORT); } - "super" { return symbol(SUPER); } - "switch" { return symbol(SWITCH); } - "synchronized" { return symbol(SYNCHRONIZED); } - "package" { return symbol(PACKAGE); } - "private" { return symbol(PRIVATE); } - "protected" { return symbol(PROTECTED); } - "transient" { return symbol(TRANSIENT); } - "return" { return symbol(RETURN); } - "void" { return symbol(VOID); } - "static" { return symbol(STATIC); } - "while" { return symbol(WHILE); } - "this" { return symbol(THIS); } - "throw" { return symbol(THROW); } - "throws" { return symbol(THROWS); } - "try" { return symbol(TRY); } - "volatile" { return symbol(VOLATILE); } - "strictfp" { return symbol(STRICTFP); } - - /* boolean literals */ - "true" { return symbol(BOOLEAN_LITERAL, new Boolean(true)); } - "false" { return symbol(BOOLEAN_LITERAL, new Boolean(false)); } - - /* null literal */ - "null" { return symbol(NULL_LITERAL); } - - - /* separators */ - "(" { return symbol(LPAREN); } - ")" { return symbol(RPAREN); } - "{" { return symbol(LBRACE); } - "}" { return symbol(RBRACE); } - "[" { return symbol(LBRACK); } - "]" { return symbol(RBRACK); } - ";" { return symbol(SEMICOLON); } - "," { return symbol(COMMA); } - "." { return symbol(DOT); } - - /* operators */ - "=" { return symbol(EQ); } - ">" { return symbol(GT); } - "<" { return symbol(LT); } - "!" { return symbol(NOT); } - "~" { return symbol(COMP); } - "?" { return symbol(QUESTION); } - ":" { return symbol(COLON); } - "==" { return symbol(EQEQ); } - "<=" { return symbol(LTEQ); } - ">=" { return symbol(GTEQ); } - "!=" { return symbol(NOTEQ); } - "&&" { return symbol(ANDAND); } - "||" { return symbol(OROR); } - "++" { return symbol(PLUSPLUS); } - "--" { return symbol(MINUSMINUS); } - "+" { return symbol(PLUS); } - "-" { return symbol(MINUS); } - "*" { return symbol(MULT); } - "/" { return symbol(DIV); } - "&" { return symbol(AND); } - "|" { return symbol(OR); } - "^" { return symbol(XOR); } - "%" { return symbol(MOD); } - "<<" { return symbol(LSHIFT); } - ">>" { return symbol(RSHIFT); } - ">>>" { return symbol(URSHIFT); } - "+=" { return symbol(PLUSEQ); } - "-=" { return symbol(MINUSEQ); } - "*=" { return symbol(MULTEQ); } - "/=" { return symbol(DIVEQ); } - "&=" { return symbol(ANDEQ); } - "|=" { return symbol(OREQ); } - "^=" { return symbol(XOREQ); } - "%=" { return symbol(MODEQ); } - "<<=" { return symbol(LSHIFTEQ); } - ">>=" { return symbol(RSHIFTEQ); } - ">>>=" { return symbol(URSHIFTEQ); } - - /* string literal */ - \" { yybegin(STRING); string.setLength(0); } - - /* character literal */ - \' { yybegin(CHARLITERAL); } - - /* numeric literals */ - - {DecIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer(yytext())); } - {DecLongLiteral} { return symbol(INTEGER_LITERAL, new Long(yytext().substring(0,yylength()-1))); } - - {HexIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(2, yylength(), 16))); } - {HexLongLiteral} { return symbol(INTEGER_LITERAL, new Long(parseLong(2, yylength()-1, 16))); } - - {OctIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(0, yylength(), 8))); } - {OctLongLiteral} { return symbol(INTEGER_LITERAL, new Long(parseLong(0, yylength()-1, 8))); } - - {FloatLiteral} { return symbol(FLOATING_POINT_LITERAL, new Float(yytext().substring(0,yylength()-1))); } - {DoubleLiteral} { return symbol(FLOATING_POINT_LITERAL, new Double(yytext())); } - {DoubleLiteral}[dD] { return symbol(FLOATING_POINT_LITERAL, new Double(yytext().substring(0,yylength()-1))); } - - /* comments */ - {Comment} { /* ignore */ } - - /* whitespace */ - {WhiteSpace} { /* ignore */ } - - /* identifiers */ - {Identifier} { return symbol(IDENTIFIER, yytext()); } -} - - { - \" { yybegin(YYINITIAL); return symbol(STRING_LITERAL, string.toString()); } - - {StringCharacter}+ { string.append( yytext() ); } - - /* escape sequences */ - "\\b" { string.append( '\b' ); } - "\\t" { string.append( '\t' ); } - "\\n" { string.append( '\n' ); } - "\\f" { string.append( '\f' ); } - "\\r" { string.append( '\r' ); } - "\\\"" { string.append( '\"' ); } - "\\'" { string.append( '\'' ); } - "\\\\" { string.append( '\\' ); } - \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); } - - /* error cases */ - \\. { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); } - {LineTerminator} { throw new RuntimeException("Unterminated string at end of line"); } -} - - { - {SingleCharacter}\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character(yytext().charAt(0))); } - - /* escape sequences */ - "\\b"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\b'));} - "\\t"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\t'));} - "\\n"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\n'));} - "\\f"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\f'));} - "\\r"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\r'));} - "\\\""\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\"'));} - "\\'"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\''));} - "\\\\"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, new Character('\\')); } - \\[0-3]?{OctDigit}?{OctDigit}\' { yybegin(YYINITIAL); - int val = Integer.parseInt(yytext().substring(1,yylength()-1),8); - return symbol(CHARACTER_LITERAL, new Character((char)val)); } - - /* error cases */ - \\. { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); } - {LineTerminator} { throw new RuntimeException("Unterminated character literal at end of line"); } -} - -/* error fallback */ -.|\n { throw new RuntimeException("Illegal character \""+yytext()+ - "\" at line "+yyline+", column "+yycolumn); } -<> { return symbol(EOF); } \ No newline at end of file diff --git a/tools/lexer/jflex-1.4/examples/java/java12.cup b/tools/lexer/jflex-1.4/examples/java/java12.cup deleted file mode 100644 index d8c258775b48..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/java12.cup +++ /dev/null @@ -1,885 +0,0 @@ -import java_cup.runtime.*; - - -/* August 1999 - modified by Gerwin Klein - to interface with JFlex scanners, - allows empty semicolon in class decls. - - changed productions: - - class_member_declaration ::= - field_declaration - | method_declaration - [..] - | interface_declaration - | SEMICOLON - ; - - interface_member_declaration ::= - constant_declaration - | abstract_method_declaration - | class_declaration - | interface_declaration - | SEMICOLON - ; - -*/ - - -/* Java 1.2 parser for CUP. - * Copyright (C) 1998 C. Scott Ananian - * This program is released under the terms of the GPL; see the file - * COPYING for more details. There is NO WARRANTY on this code. - */ - -/* -JDK 1.2 Features added: - strictfp modifier. - explicit_constructor_invocation ::= ... - | primary DOT THIS LPAREN argument_list_opt RPAREN SEMICOLON ; - field_access ::= ... - | name DOT SUPER DOT IDENTIFIER ; - method_invocation ::= ... - | name DOT SUPER DOT IDENTIFIER LPAREN argument_list_opt RPAREN ; -*/ - -parser code {: - public void report_error(String message, Object info) { - StringBuffer m = new StringBuffer("Error "); - - if (info instanceof java_cup.runtime.Symbol) - m.append( "("+info.toString()+")" ); - - m.append(" : "+message); - - System.out.println(m); - } - - public void report_fatal_error(String message, Object info) { - report_error(message, info); - throw new RuntimeException("Fatal Syntax Error"); - } -:}; - -terminal BOOLEAN; // primitive_type -terminal BYTE, SHORT, INT, LONG, CHAR; // integral_type -terminal FLOAT, DOUBLE; // floating_point_type -terminal LBRACK, RBRACK; // array_type -terminal DOT; // qualified_name -terminal SEMICOLON, MULT, COMMA, LBRACE, RBRACE, EQ, LPAREN, RPAREN, COLON; -terminal PACKAGE; // package_declaration -terminal IMPORT; // import_declaration -terminal PUBLIC, PROTECTED, PRIVATE; // modifier -terminal STATIC; // modifier -terminal ABSTRACT, FINAL, NATIVE, SYNCHRONIZED, TRANSIENT, VOLATILE; -terminal CLASS; // class_declaration -terminal EXTENDS; // super -terminal IMPLEMENTS; // interfaces -terminal VOID; // method_header -terminal THROWS; // throws -terminal THIS, SUPER; // explicit_constructor_invocation -terminal INTERFACE; // interface_declaration -terminal IF, ELSE; // if_then_statement, if_then_else_statement -terminal SWITCH; // switch_statement -terminal CASE, DEFAULT; // switch_label -terminal DO, WHILE; // while_statement, do_statement -terminal FOR; // for_statement -terminal BREAK; // break_statement -terminal CONTINUE; // continue_statement -terminal RETURN; // return_statement -terminal THROW; // throw_statement -terminal TRY; // try_statement -terminal CATCH; // catch_clause -terminal FINALLY; // finally -terminal NEW; // class_instance_creation_expression -terminal PLUSPLUS; // postincrement_expression -terminal MINUSMINUS; // postdecrement_expression -terminal PLUS, MINUS, COMP, NOT, DIV, MOD; -terminal LSHIFT, RSHIFT, URSHIFT; // shift_expression -terminal LT, GT, LTEQ, GTEQ, INSTANCEOF; // relational_expression -terminal EQEQ, NOTEQ; // equality_expression -terminal AND; // and_expression -terminal XOR; // exclusive_or_expression -terminal OR; // inclusive_or_expression -terminal ANDAND; // conditional_and_expression -terminal OROR; // conditional_or_expression -terminal QUESTION; // conditional_expression -terminal MULTEQ, DIVEQ, MODEQ, PLUSEQ, MINUSEQ; // assignment_operator -terminal LSHIFTEQ, RSHIFTEQ, URSHIFTEQ; // assignment_operator -terminal ANDEQ, XOREQ, OREQ; // assignment_operator - -terminal java.lang.Number INTEGER_LITERAL; -terminal java.lang.Number FLOATING_POINT_LITERAL; -terminal java.lang.Boolean BOOLEAN_LITERAL; -terminal java.lang.Character CHARACTER_LITERAL; -terminal java.lang.String STRING_LITERAL; -terminal java.lang.String IDENTIFIER; // name -terminal NULL_LITERAL; - -// strictfp keyword, new in Java 1.2 -terminal STRICTFP; - -// Reserved but unused: -terminal CONST, GOTO; - -// 19.2) The Syntactic Grammar -non terminal goal; -// 19.3) Lexical Structure -non terminal literal; -// 19.4) Types, Values, and Variables -non terminal type, primitive_type, numeric_type; -non terminal integral_type, floating_point_type; -non terminal reference_type; -non terminal class_or_interface_type; -non terminal class_type, interface_type; -non terminal array_type; -// 19.5) Names -non terminal name, simple_name, qualified_name; -// 19.6) Packages -non terminal compilation_unit; -non terminal package_declaration_opt, package_declaration; -non terminal import_declarations_opt, import_declarations; -non terminal type_declarations_opt, type_declarations; -non terminal import_declaration; -non terminal single_type_import_declaration; -non terminal type_import_on_demand_declaration; -non terminal type_declaration; -// 19.7) Productions used only in the LALR(1) grammar -non terminal modifiers_opt, modifiers, modifier; -// 19.8.1) Class Declaration -non terminal class_declaration, super, super_opt; -non terminal interfaces, interfaces_opt, interface_type_list; -non terminal class_body; -non terminal class_body_declarations, class_body_declarations_opt; -non terminal class_body_declaration, class_member_declaration; -// 19.8.2) Field Declarations -non terminal field_declaration, variable_declarators, variable_declarator; -non terminal variable_declarator_id, variable_initializer; -// 19.8.3) Method Declarations -non terminal method_declaration, method_header, method_declarator; -non terminal formal_parameter_list_opt, formal_parameter_list; -non terminal formal_parameter; -non terminal throws_opt, throws; -non terminal class_type_list, method_body; -// 19.8.4) Static Initializers -non terminal static_initializer; -// 19.8.5) Constructor Declarations -non terminal constructor_declaration, constructor_declarator; -non terminal constructor_body; -non terminal explicit_constructor_invocation; -// 19.9.1) Interface Declarations -non terminal interface_declaration; -non terminal extends_interfaces_opt, extends_interfaces; -non terminal interface_body; -non terminal interface_member_declarations_opt, interface_member_declarations; -non terminal interface_member_declaration, constant_declaration; -non terminal abstract_method_declaration; -// 19.10) Arrays -non terminal array_initializer; -non terminal variable_initializers; -// 19.11) Blocks and Statements -non terminal block; -non terminal block_statements_opt, block_statements, block_statement; -non terminal local_variable_declaration_statement, local_variable_declaration; -non terminal statement, statement_no_short_if; -non terminal statement_without_trailing_substatement; -non terminal empty_statement; -non terminal labeled_statement, labeled_statement_no_short_if; -non terminal expression_statement, statement_expression; -non terminal if_then_statement; -non terminal if_then_else_statement, if_then_else_statement_no_short_if; -non terminal switch_statement, switch_block; -non terminal switch_block_statement_groups; -non terminal switch_block_statement_group; -non terminal switch_labels, switch_label; -non terminal while_statement, while_statement_no_short_if; -non terminal do_statement; -non terminal for_statement, for_statement_no_short_if; -non terminal for_init_opt, for_init; -non terminal for_update_opt, for_update; -non terminal statement_expression_list; -non terminal identifier_opt; -non terminal break_statement, continue_statement; -non terminal return_statement, throw_statement; -non terminal synchronized_statement, try_statement; -non terminal catches_opt, catches, catch_clause; -non terminal finally; -// 19.12) Expressions -non terminal primary, primary_no_new_array; -non terminal class_instance_creation_expression; -non terminal argument_list_opt, argument_list; -non terminal array_creation_expression; -non terminal dim_exprs, dim_expr, dims_opt, dims; -non terminal field_access, method_invocation, array_access; -non terminal postfix_expression; -non terminal postincrement_expression, postdecrement_expression; -non terminal unary_expression, unary_expression_not_plus_minus; -non terminal preincrement_expression, predecrement_expression; -non terminal cast_expression; -non terminal multiplicative_expression, additive_expression; -non terminal shift_expression, relational_expression, equality_expression; -non terminal and_expression, exclusive_or_expression, inclusive_or_expression; -non terminal conditional_and_expression, conditional_or_expression; -non terminal conditional_expression, assignment_expression; -non terminal assignment; -non terminal left_hand_side; -non terminal assignment_operator; -non terminal expression_opt, expression; -non terminal constant_expression; - - -start with goal; - -// 19.2) The Syntactic Grammar -goal ::= compilation_unit - ; - -// 19.3) Lexical Structure. -literal ::= INTEGER_LITERAL - | FLOATING_POINT_LITERAL - | BOOLEAN_LITERAL - | CHARACTER_LITERAL - | STRING_LITERAL - | NULL_LITERAL - ; - -// 19.4) Types, Values, and Variables -type ::= primitive_type - | reference_type - ; -primitive_type ::= - numeric_type - | BOOLEAN - ; -numeric_type::= integral_type - | floating_point_type - ; -integral_type ::= - BYTE - | SHORT - | INT - | LONG - | CHAR - ; -floating_point_type ::= - FLOAT - | DOUBLE - ; - -reference_type ::= - class_or_interface_type - | array_type - ; -class_or_interface_type ::= name; - -class_type ::= class_or_interface_type; -interface_type ::= class_or_interface_type; - -array_type ::= primitive_type dims - | name dims - ; - -// 19.5) Names -name ::= simple_name - | qualified_name - ; -simple_name ::= IDENTIFIER - ; -qualified_name ::= - name DOT IDENTIFIER - ; - -// 19.6) Packages -compilation_unit ::= - package_declaration_opt - import_declarations_opt - type_declarations_opt - ; -package_declaration_opt ::= package_declaration | ; -import_declarations_opt ::= import_declarations | ; -type_declarations_opt ::= type_declarations | ; - -import_declarations ::= - import_declaration - | import_declarations import_declaration - ; -type_declarations ::= - type_declaration - | type_declarations type_declaration - ; -package_declaration ::= - PACKAGE name SEMICOLON - ; -import_declaration ::= - single_type_import_declaration - | type_import_on_demand_declaration - ; -single_type_import_declaration ::= - IMPORT name SEMICOLON - ; -type_import_on_demand_declaration ::= - IMPORT name DOT MULT SEMICOLON - ; -type_declaration ::= - class_declaration - | interface_declaration - | SEMICOLON - ; - -// 19.7) Productions used only in the LALR(1) grammar -modifiers_opt::= - | modifiers - ; -modifiers ::= modifier - | modifiers modifier - ; -modifier ::= PUBLIC | PROTECTED | PRIVATE - | STATIC - | ABSTRACT | FINAL | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE - | STRICTFP // note that semantic analysis must check that the - // context of the modifier allows strictfp. - ; - -// 19.8) Classes - -// 19.8.1) Class Declaration: -class_declaration ::= - modifiers_opt CLASS IDENTIFIER super_opt interfaces_opt class_body - ; -super ::= EXTENDS class_type - ; -super_opt ::= - | super - ; -interfaces ::= IMPLEMENTS interface_type_list - ; -interfaces_opt::= - | interfaces - ; -interface_type_list ::= - interface_type - | interface_type_list COMMA interface_type - ; -class_body ::= LBRACE class_body_declarations_opt RBRACE - ; -class_body_declarations_opt ::= - | class_body_declarations ; -class_body_declarations ::= - class_body_declaration - | class_body_declarations class_body_declaration - ; -class_body_declaration ::= - class_member_declaration - | static_initializer - | constructor_declaration - | block - ; -class_member_declaration ::= - field_declaration - | method_declaration - /* repeat the prod for 'class_declaration' here: */ - | modifiers_opt CLASS IDENTIFIER super_opt interfaces_opt class_body - | interface_declaration - | SEMICOLON - ; - -// 19.8.2) Field Declarations -field_declaration ::= - modifiers_opt type variable_declarators SEMICOLON - ; -variable_declarators ::= - variable_declarator - | variable_declarators COMMA variable_declarator - ; -variable_declarator ::= - variable_declarator_id - | variable_declarator_id EQ variable_initializer - ; -variable_declarator_id ::= - IDENTIFIER - | variable_declarator_id LBRACK RBRACK - ; -variable_initializer ::= - expression - | array_initializer - ; - -// 19.8.3) Method Declarations -method_declaration ::= - method_header method_body - ; -method_header ::= - modifiers_opt type method_declarator throws_opt - | modifiers_opt VOID method_declarator throws_opt - ; -method_declarator ::= - IDENTIFIER LPAREN formal_parameter_list_opt RPAREN - | method_declarator LBRACK RBRACK // deprecated - // be careful; the above production also allows 'void foo() []' - ; -formal_parameter_list_opt ::= - | formal_parameter_list - ; -formal_parameter_list ::= - formal_parameter - | formal_parameter_list COMMA formal_parameter - ; -formal_parameter ::= - type variable_declarator_id - | FINAL type variable_declarator_id - ; -throws_opt ::= - | throws - ; -throws ::= THROWS class_type_list - ; -class_type_list ::= - class_type - | class_type_list COMMA class_type - ; -method_body ::= block - | SEMICOLON - ; - -// 19.8.4) Static Initializers -static_initializer ::= - STATIC block - ; - -// 19.8.5) Constructor Declarations -constructor_declaration ::= - modifiers_opt constructor_declarator throws_opt - constructor_body - ; -constructor_declarator ::= - simple_name LPAREN formal_parameter_list_opt RPAREN - ; -constructor_body ::= - LBRACE explicit_constructor_invocation - block_statements RBRACE - | LBRACE explicit_constructor_invocation RBRACE - | LBRACE block_statements RBRACE - | LBRACE RBRACE - ; -explicit_constructor_invocation ::= - THIS LPAREN argument_list_opt RPAREN SEMICOLON - | SUPER LPAREN argument_list_opt RPAREN SEMICOLON - | primary DOT THIS LPAREN argument_list_opt RPAREN SEMICOLON - | primary DOT SUPER LPAREN argument_list_opt RPAREN SEMICOLON - ; - -// 19.9) Interfaces - -// 19.9.1) Interface Declarations -interface_declaration ::= - modifiers_opt INTERFACE IDENTIFIER extends_interfaces_opt - interface_body - ; -extends_interfaces_opt ::= - | extends_interfaces - ; -extends_interfaces ::= - EXTENDS interface_type - | extends_interfaces COMMA interface_type - ; -interface_body ::= - LBRACE interface_member_declarations_opt RBRACE - ; -interface_member_declarations_opt ::= - | interface_member_declarations - ; -interface_member_declarations ::= - interface_member_declaration - | interface_member_declarations interface_member_declaration - ; -interface_member_declaration ::= - constant_declaration - | abstract_method_declaration - | class_declaration - | interface_declaration - | SEMICOLON - ; -constant_declaration ::= - field_declaration - ; -abstract_method_declaration ::= - method_header SEMICOLON - ; - -// 19.10) Arrays -array_initializer ::= - LBRACE variable_initializers COMMA RBRACE - | LBRACE variable_initializers RBRACE - | LBRACE COMMA RBRACE - | LBRACE RBRACE - ; -variable_initializers ::= - variable_initializer - | variable_initializers COMMA variable_initializer - ; - -// 19.11) Blocks and Statements -block ::= LBRACE block_statements_opt RBRACE - ; -block_statements_opt ::= - | block_statements - ; -block_statements ::= - block_statement - | block_statements block_statement - ; -block_statement ::= - local_variable_declaration_statement - | statement - | class_declaration - | interface_declaration - ; -local_variable_declaration_statement ::= - local_variable_declaration SEMICOLON - ; -local_variable_declaration ::= - type variable_declarators - | FINAL type variable_declarators - ; -statement ::= statement_without_trailing_substatement - | labeled_statement - | if_then_statement - | if_then_else_statement - | while_statement - | for_statement - ; -statement_no_short_if ::= - statement_without_trailing_substatement - | labeled_statement_no_short_if - | if_then_else_statement_no_short_if - | while_statement_no_short_if - | for_statement_no_short_if - ; -statement_without_trailing_substatement ::= - block - | empty_statement - | expression_statement - | switch_statement - | do_statement - | break_statement - | continue_statement - | return_statement - | synchronized_statement - | throw_statement - | try_statement - ; -empty_statement ::= - SEMICOLON - ; -labeled_statement ::= - IDENTIFIER COLON statement - ; -labeled_statement_no_short_if ::= - IDENTIFIER COLON statement_no_short_if - ; -expression_statement ::= - statement_expression SEMICOLON - ; -statement_expression ::= - assignment - | preincrement_expression - | predecrement_expression - | postincrement_expression - | postdecrement_expression - | method_invocation - | class_instance_creation_expression - ; -if_then_statement ::= - IF LPAREN expression RPAREN statement - ; -if_then_else_statement ::= - IF LPAREN expression RPAREN statement_no_short_if - ELSE statement - ; -if_then_else_statement_no_short_if ::= - IF LPAREN expression RPAREN statement_no_short_if - ELSE statement_no_short_if - ; -switch_statement ::= - SWITCH LPAREN expression RPAREN switch_block - ; -switch_block ::= - LBRACE switch_block_statement_groups switch_labels RBRACE - | LBRACE switch_block_statement_groups RBRACE - | LBRACE switch_labels RBRACE - | LBRACE RBRACE - ; -switch_block_statement_groups ::= - switch_block_statement_group - | switch_block_statement_groups switch_block_statement_group - ; -switch_block_statement_group ::= - switch_labels block_statements - ; -switch_labels ::= - switch_label - | switch_labels switch_label - ; -switch_label ::= - CASE constant_expression COLON - | DEFAULT COLON - ; - -while_statement ::= - WHILE LPAREN expression RPAREN statement - ; -while_statement_no_short_if ::= - WHILE LPAREN expression RPAREN statement_no_short_if - ; -do_statement ::= - DO statement WHILE LPAREN expression RPAREN SEMICOLON - ; -for_statement ::= - FOR LPAREN for_init_opt SEMICOLON expression_opt SEMICOLON - for_update_opt RPAREN statement - ; -for_statement_no_short_if ::= - FOR LPAREN for_init_opt SEMICOLON expression_opt SEMICOLON - for_update_opt RPAREN statement_no_short_if - ; -for_init_opt ::= - | for_init - ; -for_init ::= statement_expression_list - | local_variable_declaration - ; -for_update_opt ::= - | for_update - ; -for_update ::= statement_expression_list - ; -statement_expression_list ::= - statement_expression - | statement_expression_list COMMA statement_expression - ; - -identifier_opt ::= - | IDENTIFIER - ; - -break_statement ::= - BREAK identifier_opt SEMICOLON - ; - -continue_statement ::= - CONTINUE identifier_opt SEMICOLON - ; -return_statement ::= - RETURN expression_opt SEMICOLON - ; -throw_statement ::= - THROW expression SEMICOLON - ; -synchronized_statement ::= - SYNCHRONIZED LPAREN expression RPAREN block - ; -try_statement ::= - TRY block catches - | TRY block catches_opt finally - ; -catches_opt ::= - | catches - ; -catches ::= catch_clause - | catches catch_clause - ; -catch_clause ::= - CATCH LPAREN formal_parameter RPAREN block - ; -finally ::= FINALLY block - ; - -// 19.12) Expressions -primary ::= primary_no_new_array - | array_creation_expression - ; -primary_no_new_array ::= - literal - | THIS - | LPAREN expression RPAREN - | class_instance_creation_expression - | field_access - | method_invocation - | array_access - | primitive_type DOT CLASS - | VOID DOT CLASS - | array_type DOT CLASS - | name DOT CLASS - | name DOT THIS - ; -class_instance_creation_expression ::= - NEW class_type LPAREN argument_list_opt RPAREN - | NEW class_type LPAREN argument_list_opt RPAREN class_body - | primary DOT NEW IDENTIFIER - LPAREN argument_list_opt RPAREN - | primary DOT NEW IDENTIFIER - LPAREN argument_list_opt RPAREN class_body - ; -argument_list_opt ::= - | argument_list - ; -argument_list ::= - expression - | argument_list COMMA expression - ; -array_creation_expression ::= - NEW primitive_type dim_exprs dims_opt - | NEW class_or_interface_type dim_exprs dims_opt - | NEW primitive_type dims array_initializer - | NEW class_or_interface_type dims array_initializer - ; -dim_exprs ::= dim_expr - | dim_exprs dim_expr - ; -dim_expr ::= LBRACK expression RBRACK - ; -dims_opt ::= - | dims - ; -dims ::= LBRACK RBRACK - | dims LBRACK RBRACK - ; -field_access ::= - primary DOT IDENTIFIER - | SUPER DOT IDENTIFIER - | name DOT SUPER DOT IDENTIFIER - ; -method_invocation ::= - name LPAREN argument_list_opt RPAREN - | primary DOT IDENTIFIER LPAREN argument_list_opt RPAREN - | SUPER DOT IDENTIFIER LPAREN argument_list_opt RPAREN - | name DOT SUPER DOT IDENTIFIER LPAREN argument_list_opt RPAREN - ; -array_access ::= - name LBRACK expression RBRACK - | primary_no_new_array LBRACK expression RBRACK - ; -postfix_expression ::= - primary - | name - | postincrement_expression - | postdecrement_expression - ; -postincrement_expression ::= - postfix_expression PLUSPLUS - ; -postdecrement_expression ::= - postfix_expression MINUSMINUS - ; -unary_expression ::= - preincrement_expression - | predecrement_expression - | PLUS unary_expression - | MINUS unary_expression - | unary_expression_not_plus_minus - ; -preincrement_expression ::= - PLUSPLUS unary_expression - ; -predecrement_expression ::= - MINUSMINUS unary_expression - ; -unary_expression_not_plus_minus ::= - postfix_expression - | COMP unary_expression - | NOT unary_expression - | cast_expression - ; -cast_expression ::= - LPAREN primitive_type dims_opt RPAREN unary_expression - | LPAREN expression RPAREN unary_expression_not_plus_minus - | LPAREN name dims RPAREN unary_expression_not_plus_minus - ; -multiplicative_expression ::= - unary_expression - | multiplicative_expression MULT unary_expression - | multiplicative_expression DIV unary_expression - | multiplicative_expression MOD unary_expression - ; -additive_expression ::= - multiplicative_expression - | additive_expression PLUS multiplicative_expression - | additive_expression MINUS multiplicative_expression - ; -shift_expression ::= - additive_expression - | shift_expression LSHIFT additive_expression - | shift_expression RSHIFT additive_expression - | shift_expression URSHIFT additive_expression - ; -relational_expression ::= - shift_expression - | relational_expression LT shift_expression - | relational_expression GT shift_expression - | relational_expression LTEQ shift_expression - | relational_expression GTEQ shift_expression - | relational_expression INSTANCEOF reference_type - ; -equality_expression ::= - relational_expression - | equality_expression EQEQ relational_expression - | equality_expression NOTEQ relational_expression - ; -and_expression ::= - equality_expression - | and_expression AND equality_expression - ; -exclusive_or_expression ::= - and_expression - | exclusive_or_expression XOR and_expression - ; -inclusive_or_expression ::= - exclusive_or_expression - | inclusive_or_expression OR exclusive_or_expression - ; -conditional_and_expression ::= - inclusive_or_expression - | conditional_and_expression ANDAND inclusive_or_expression - ; -conditional_or_expression ::= - conditional_and_expression - | conditional_or_expression OROR conditional_and_expression - ; -conditional_expression ::= - conditional_or_expression - | conditional_or_expression QUESTION expression - COLON conditional_expression - ; -assignment_expression ::= - conditional_expression - | assignment - ; -assignment ::= left_hand_side assignment_operator assignment_expression - ; -left_hand_side ::= - name - | field_access - | array_access - ; -assignment_operator ::= - EQ - | MULTEQ - | DIVEQ - | MODEQ - | PLUSEQ - | MINUSEQ - | LSHIFTEQ - | RSHIFTEQ - | URSHIFTEQ - | ANDEQ - | XOREQ - | OREQ - ; -expression_opt ::= - | expression - ; -expression ::= assignment_expression - ; -constant_expression ::= - expression - ; diff --git a/tools/lexer/jflex-1.4/examples/java/lexer-output.good b/tools/lexer/jflex-1.4/examples/java/lexer-output.good deleted file mode 100644 index d6d9af33c3d4..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/lexer-output.good +++ /dev/null @@ -1,376 +0,0 @@ -Lexing [TestLexer.java] -line:20 col:1 --import--IMPORT-- -token: line 20, column 1, sym: 23 -line:20 col:8 --java--IDENTIFIER-- -token: line 20, column 8, sym: 98, value: 'java' -line:20 col:12 --.--DOT-- -token: line 20, column 12, sym: 12 -line:20 col:13 --io--IDENTIFIER-- -token: line 20, column 13, sym: 98, value: 'io' -line:20 col:15 --.--DOT-- -token: line 20, column 15, sym: 12 -line:20 col:16 --*--MULT-- -token: line 20, column 16, sym: 14 -line:20 col:17 --;--SEMICOLON-- -token: line 20, column 17, sym: 13 -line:21 col:1 --import--IMPORT-- -token: line 21, column 1, sym: 23 -line:21 col:8 --java_cup--IDENTIFIER-- -token: line 21, column 8, sym: 98, value: 'java_cup' -line:21 col:16 --.--DOT-- -token: line 21, column 16, sym: 12 -line:21 col:17 --runtime--IDENTIFIER-- -token: line 21, column 17, sym: 98, value: 'runtime' -line:21 col:24 --.--DOT-- -token: line 21, column 24, sym: 12 -line:21 col:25 --Symbol--IDENTIFIER-- -token: line 21, column 25, sym: 98, value: 'Symbol' -line:21 col:31 --;--SEMICOLON-- -token: line 21, column 31, sym: 13 -line:29 col:1 --public--PUBLIC-- -token: line 29, column 1, sym: 24 -line:29 col:8 --class--CLASS-- -token: line 29, column 8, sym: 34 -line:29 col:14 --TestLexer--IDENTIFIER-- -token: line 29, column 14, sym: 98, value: 'TestLexer' -line:29 col:24 --{--LBRACE-- -token: line 29, column 24, sym: 16 -line:32 col:3 --int--INT-- -token: line 32, column 3, sym: 5 -line:32 col:7 --intDec--IDENTIFIER-- -token: line 32, column 7, sym: 98, value: 'intDec' -line:32 col:14 --=--EQ-- -token: line 32, column 14, sym: 18 -line:32 col:16 --37--INTEGER_LITERAL-- -token: line 32, column 16, sym: 93, value: '37' -line:32 col:18 --;--SEMICOLON-- -token: line 32, column 18, sym: 13 -line:33 col:3 --long--LONG-- -token: line 33, column 3, sym: 6 -line:33 col:8 --longDec--IDENTIFIER-- -token: line 33, column 8, sym: 98, value: 'longDec' -line:33 col:16 --=--EQ-- -token: line 33, column 16, sym: 18 -line:33 col:18 --37l--INTEGER_LITERAL-- -token: line 33, column 18, sym: 93, value: '37' -line:33 col:21 --;--SEMICOLON-- -token: line 33, column 21, sym: 13 -line:34 col:3 --int--INT-- -token: line 34, column 3, sym: 5 -line:34 col:7 --intHex--IDENTIFIER-- -token: line 34, column 7, sym: 98, value: 'intHex' -line:34 col:14 --=--EQ-- -token: line 34, column 14, sym: 18 -line:34 col:16 --0x0001--INTEGER_LITERAL-- -token: line 34, column 16, sym: 93, value: '1' -line:34 col:22 --;--SEMICOLON-- -token: line 34, column 22, sym: 13 -line:35 col:3 --long--LONG-- -token: line 35, column 3, sym: 6 -line:35 col:8 --longHex--IDENTIFIER-- -token: line 35, column 8, sym: 98, value: 'longHex' -line:35 col:16 --=--EQ-- -token: line 35, column 16, sym: 18 -line:35 col:18 --0xFFFFl--INTEGER_LITERAL-- -token: line 35, column 18, sym: 93, value: '65535' -line:35 col:25 --;--SEMICOLON-- -token: line 35, column 25, sym: 13 -line:36 col:3 --int--INT-- -token: line 36, column 3, sym: 5 -line:36 col:7 --intOct--IDENTIFIER-- -token: line 36, column 7, sym: 98, value: 'intOct' -line:36 col:14 --=--EQ-- -token: line 36, column 14, sym: 18 -line:36 col:16 --0377--INTEGER_LITERAL-- -token: line 36, column 16, sym: 93, value: '255' -line:36 col:20 --;--SEMICOLON-- -token: line 36, column 20, sym: 13 -line:37 col:3 --long--LONG-- -token: line 37, column 3, sym: 6 -line:37 col:8 --longOc--IDENTIFIER-- -token: line 37, column 8, sym: 98, value: 'longOc' -line:37 col:15 --=--EQ-- -token: line 37, column 15, sym: 18 -line:37 col:17 --007l--INTEGER_LITERAL-- -token: line 37, column 17, sym: 93, value: '7' -line:37 col:21 --;--SEMICOLON-- -token: line 37, column 21, sym: 13 -line:40 col:3 --public--PUBLIC-- -token: line 40, column 3, sym: 24 -line:40 col:10 --static--STATIC-- -token: line 40, column 10, sym: 27 -line:40 col:17 --void--VOID-- -token: line 40, column 17, sym: 37 -line:40 col:22 --main--IDENTIFIER-- -token: line 40, column 22, sym: 98, value: 'main' -line:40 col:26 --(--LPAREN-- -token: line 40, column 26, sym: 19 -line:40 col:27 --String--IDENTIFIER-- -token: line 40, column 27, sym: 98, value: 'String' -line:40 col:34 --argv--IDENTIFIER-- -token: line 40, column 34, sym: 98, value: 'argv' -line:40 col:38 --[--LBRACK-- -token: line 40, column 38, sym: 10 -line:40 col:39 --]--RBRACK-- -token: line 40, column 39, sym: 11 -line:40 col:40 --)--RPAREN-- -token: line 40, column 40, sym: 20 -line:40 col:42 --{--LBRACE-- -token: line 40, column 42, sym: 16 -line:42 col:5 --for--FOR-- -token: line 42, column 5, sym: 49 -line:42 col:9 --(--LPAREN-- -token: line 42, column 9, sym: 19 -line:42 col:10 --int--INT-- -token: line 42, column 10, sym: 5 -line:42 col:14 --i--IDENTIFIER-- -token: line 42, column 14, sym: 98, value: 'i' -line:42 col:16 --=--EQ-- -token: line 42, column 16, sym: 18 -line:42 col:18 --0--INTEGER_LITERAL-- -token: line 42, column 18, sym: 93, value: '0' -line:42 col:19 --;--SEMICOLON-- -token: line 42, column 19, sym: 13 -line:42 col:21 --i--IDENTIFIER-- -token: line 42, column 21, sym: 98, value: 'i' -line:42 col:23 --<--LT-- -token: line 42, column 23, sym: 69 -line:42 col:25 --argv--IDENTIFIER-- -token: line 42, column 25, sym: 98, value: 'argv' -line:42 col:29 --.--DOT-- -token: line 42, column 29, sym: 12 -line:42 col:30 --length--IDENTIFIER-- -token: line 42, column 30, sym: 98, value: 'length' -line:42 col:36 --;--SEMICOLON-- -token: line 42, column 36, sym: 13 -line:42 col:38 --i--IDENTIFIER-- -token: line 42, column 38, sym: 98, value: 'i' -line:42 col:39 --++--PLUSPLUS-- -token: line 42, column 39, sym: 58 -line:42 col:41 --)--RPAREN-- -token: line 42, column 41, sym: 20 -line:42 col:43 --{--LBRACE-- -token: line 42, column 43, sym: 16 -line:43 col:7 --try--TRY-- -token: line 43, column 7, sym: 54 -line:43 col:11 --{--LBRACE-- -token: line 43, column 11, sym: 16 -line:44 col:9 --System--IDENTIFIER-- -token: line 44, column 9, sym: 98, value: 'System' -line:44 col:15 --.--DOT-- -token: line 44, column 15, sym: 12 -line:44 col:16 --out--IDENTIFIER-- -token: line 44, column 16, sym: 98, value: 'out' -line:44 col:19 --.--DOT-- -token: line 44, column 19, sym: 12 -line:44 col:20 --println--IDENTIFIER-- -token: line 44, column 20, sym: 98, value: 'println' -line:44 col:27 --(--LPAREN-- -token: line 44, column 27, sym: 19 -line:44 col:37 --"--STRING_LITERAL-- -token: line 44, column 37, sym: 97, value: 'Lexing [' -line:44 col:38 --+--PLUS-- -token: line 44, column 38, sym: 60 -line:44 col:39 --argv--IDENTIFIER-- -token: line 44, column 39, sym: 98, value: 'argv' -line:44 col:43 --[--LBRACK-- -token: line 44, column 43, sym: 10 -line:44 col:44 --i--IDENTIFIER-- -token: line 44, column 44, sym: 98, value: 'i' -line:44 col:45 --]--RBRACK-- -token: line 44, column 45, sym: 11 -line:44 col:46 --+--PLUS-- -token: line 44, column 46, sym: 60 -line:44 col:49 --"--STRING_LITERAL-- -token: line 44, column 49, sym: 97, value: ']' -line:44 col:50 --)--RPAREN-- -token: line 44, column 50, sym: 20 -line:44 col:51 --;--SEMICOLON-- -token: line 44, column 51, sym: 13 -line:45 col:9 --Scanner--IDENTIFIER-- -token: line 45, column 9, sym: 98, value: 'Scanner' -line:45 col:17 --scanner--IDENTIFIER-- -token: line 45, column 17, sym: 98, value: 'scanner' -line:45 col:25 --=--EQ-- -token: line 45, column 25, sym: 18 -line:45 col:27 --new--NEW-- -token: line 45, column 27, sym: 57 -line:45 col:31 --Scanner--IDENTIFIER-- -token: line 45, column 31, sym: 98, value: 'Scanner' -line:45 col:38 --(--LPAREN-- -token: line 45, column 38, sym: 19 -line:45 col:39 --new--NEW-- -token: line 45, column 39, sym: 57 -line:45 col:43 --UnicodeEscapes--IDENTIFIER-- -token: line 45, column 43, sym: 98, value: 'UnicodeEscapes' -line:45 col:57 --(--LPAREN-- -token: line 45, column 57, sym: 19 -line:45 col:58 --new--NEW-- -token: line 45, column 58, sym: 57 -line:45 col:62 --FileReader--IDENTIFIER-- -token: line 45, column 62, sym: 98, value: 'FileReader' -line:45 col:72 --(--LPAREN-- -token: line 45, column 72, sym: 19 -line:45 col:73 --argv--IDENTIFIER-- -token: line 45, column 73, sym: 98, value: 'argv' -line:45 col:77 --[--LBRACK-- -token: line 45, column 77, sym: 10 -line:45 col:78 --i--IDENTIFIER-- -token: line 45, column 78, sym: 98, value: 'i' -line:45 col:79 --]--RBRACK-- -token: line 45, column 79, sym: 11 -line:45 col:80 --)--RPAREN-- -token: line 45, column 80, sym: 20 -line:45 col:81 --)--RPAREN-- -token: line 45, column 81, sym: 20 -line:45 col:82 --)--RPAREN-- -token: line 45, column 82, sym: 20 -line:45 col:83 --;--SEMICOLON-- -token: line 45, column 83, sym: 13 -line:47 col:9 --Symbol--IDENTIFIER-- -token: line 47, column 9, sym: 98, value: 'Symbol' -line:47 col:16 --s--IDENTIFIER-- -token: line 47, column 16, sym: 98, value: 's' -line:47 col:17 --;--SEMICOLON-- -token: line 47, column 17, sym: 13 -line:48 col:9 --do--DO-- -token: line 48, column 9, sym: 47 -line:48 col:12 --{--LBRACE-- -token: line 48, column 12, sym: 16 -line:49 col:11 --s--IDENTIFIER-- -token: line 49, column 11, sym: 98, value: 's' -line:49 col:13 --=--EQ-- -token: line 49, column 13, sym: 18 -line:49 col:15 --scanner--IDENTIFIER-- -token: line 49, column 15, sym: 98, value: 'scanner' -line:49 col:22 --.--DOT-- -token: line 49, column 22, sym: 12 -line:49 col:23 --debug_next_token--IDENTIFIER-- -token: line 49, column 23, sym: 98, value: 'debug_next_token' -line:49 col:39 --(--LPAREN-- -token: line 49, column 39, sym: 19 -line:49 col:40 --)--RPAREN-- -token: line 49, column 40, sym: 20 -line:49 col:41 --;--SEMICOLON-- -token: line 49, column 41, sym: 13 -line:50 col:11 --System--IDENTIFIER-- -token: line 50, column 11, sym: 98, value: 'System' -line:50 col:17 --.--DOT-- -token: line 50, column 17, sym: 12 -line:50 col:18 --out--IDENTIFIER-- -token: line 50, column 18, sym: 98, value: 'out' -line:50 col:21 --.--DOT-- -token: line 50, column 21, sym: 12 -line:50 col:22 --println--IDENTIFIER-- -token: line 50, column 22, sym: 98, value: 'println' -line:50 col:29 --(--LPAREN-- -token: line 50, column 29, sym: 19 -line:50 col:38 --"--STRING_LITERAL-- -token: line 50, column 38, sym: 97, value: 'token: ' -line:50 col:39 --+--PLUS-- -token: line 50, column 39, sym: 60 -line:50 col:40 --s--IDENTIFIER-- -token: line 50, column 40, sym: 98, value: 's' -line:50 col:41 --)--RPAREN-- -token: line 50, column 41, sym: 20 -line:50 col:42 --;--SEMICOLON-- -token: line 50, column 42, sym: 13 -line:51 col:9 --}--RBRACE-- -token: line 51, column 9, sym: 17 -line:51 col:11 --while--WHILE-- -token: line 51, column 11, sym: 48 -line:51 col:17 --(--LPAREN-- -token: line 51, column 17, sym: 19 -line:51 col:18 --s--IDENTIFIER-- -token: line 51, column 18, sym: 98, value: 's' -line:51 col:19 --.--DOT-- -token: line 51, column 19, sym: 12 -line:51 col:20 --sym--IDENTIFIER-- -token: line 51, column 20, sym: 98, value: 'sym' -line:51 col:24 --!=--NOTEQ-- -token: line 51, column 24, sym: 75 -line:51 col:27 --sym--IDENTIFIER-- -token: line 51, column 27, sym: 98, value: 'sym' -line:51 col:30 --.--DOT-- -token: line 51, column 30, sym: 12 -line:51 col:31 --EOF--IDENTIFIER-- -token: line 51, column 31, sym: 98, value: 'EOF' -line:51 col:34 --)--RPAREN-- -token: line 51, column 34, sym: 20 -line:51 col:35 --;--SEMICOLON-- -token: line 51, column 35, sym: 13 -line:53 col:9 --System--IDENTIFIER-- -token: line 53, column 9, sym: 98, value: 'System' -line:53 col:15 --.--DOT-- -token: line 53, column 15, sym: 12 -line:53 col:16 --out--IDENTIFIER-- -token: line 53, column 16, sym: 98, value: 'out' -line:53 col:19 --.--DOT-- -token: line 53, column 19, sym: 12 -line:53 col:20 --println--IDENTIFIER-- -token: line 53, column 20, sym: 98, value: 'println' -line:53 col:27 --(--LPAREN-- -token: line 53, column 27, sym: 19 -line:53 col:39 --"--STRING_LITERAL-- -token: line 53, column 39, sym: 97, value: 'No errors.' -line:53 col:40 --)--RPAREN-- -token: line 53, column 40, sym: 20 -line:53 col:41 --;--SEMICOLON-- -token: line 53, column 41, sym: 13 -line:54 col:7 --}--RBRACE-- -token: line 54, column 7, sym: 17 -line:55 col:7 --catch--CATCH-- -token: line 55, column 7, sym: 55 -line:55 col:13 --(--LPAREN-- -token: line 55, column 13, sym: 19 -line:55 col:14 --Exception--IDENTIFIER-- -token: line 55, column 14, sym: 98, value: 'Exception' -line:55 col:24 --e--IDENTIFIER-- -token: line 55, column 24, sym: 98, value: 'e' -line:55 col:25 --)--RPAREN-- -token: line 55, column 25, sym: 20 -line:55 col:27 --{--LBRACE-- -token: line 55, column 27, sym: 16 -line:56 col:9 --e--IDENTIFIER-- -token: line 56, column 9, sym: 98, value: 'e' -line:56 col:10 --.--DOT-- -token: line 56, column 10, sym: 12 -line:56 col:11 --printStackTrace--IDENTIFIER-- -token: line 56, column 11, sym: 98, value: 'printStackTrace' -line:56 col:26 --(--LPAREN-- -token: line 56, column 26, sym: 19 -line:56 col:27 --System--IDENTIFIER-- -token: line 56, column 27, sym: 98, value: 'System' -line:56 col:33 --.--DOT-- -token: line 56, column 33, sym: 12 -line:56 col:34 --out--IDENTIFIER-- -token: line 56, column 34, sym: 98, value: 'out' -line:56 col:37 --)--RPAREN-- -token: line 56, column 37, sym: 20 -line:56 col:38 --;--SEMICOLON-- -token: line 56, column 38, sym: 13 -line:57 col:9 --System--IDENTIFIER-- -token: line 57, column 9, sym: 98, value: 'System' -line:57 col:15 --.--DOT-- -token: line 57, column 15, sym: 12 -line:57 col:16 --exit--IDENTIFIER-- -token: line 57, column 16, sym: 98, value: 'exit' -line:57 col:20 --(--LPAREN-- -token: line 57, column 20, sym: 19 -line:57 col:21 --1--INTEGER_LITERAL-- -token: line 57, column 21, sym: 93, value: '1' -line:57 col:22 --)--RPAREN-- -token: line 57, column 22, sym: 20 -line:57 col:23 --;--SEMICOLON-- -token: line 57, column 23, sym: 13 -line:58 col:7 --}--RBRACE-- -token: line 58, column 7, sym: 17 -line:59 col:5 --}--RBRACE-- -token: line 59, column 5, sym: 17 -line:60 col:3 --}--RBRACE-- -token: line 60, column 3, sym: 17 -line:61 col:1 --}--RBRACE-- -token: line 61, column 1, sym: 17 -line:62 col:1 ----EOF-- -token: line 62, column 1, sym: 0 -No errors. diff --git a/tools/lexer/jflex-1.4/examples/java/unicode.flex b/tools/lexer/jflex-1.4/examples/java/unicode.flex deleted file mode 100644 index 31af811a72e7..000000000000 --- a/tools/lexer/jflex-1.4/examples/java/unicode.flex +++ /dev/null @@ -1,149 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 1998-2004 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/* §3.3 of the Java Language Specification : - -UnicodeInputCharacter: - - UnicodeEscape - - RawInputCharacter - - UnicodeEscape: - - \ UnicodeMarker HexDigit HexDigit HexDigit HexDigit - - UnicodeMarker: - - u - - UnicodeMarker u - - RawInputCharacter: - - any Unicode character - - HexDigit: one of - - 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F - -only an even number of '\' is eligible to start a Unicode escape sequence - -*/ - -import java.io.*; - -%% - -%public -%final -%class UnicodeEscapes -%extends FilterReader - -%int -%function read - -%switch -%16bit - -UnicodeEscape = {UnicodeMarker} {HexDigit} {4} -UnicodeMarker = "u"+ -HexDigit = [0-9a-fA-F] - -%state DIGITS - -%init{ - super(in); -%init} - -%{ - private boolean even; - - private int value() { - int r = 0; - - for (int k = zzMarkedPos-4; k < zzMarkedPos; k++) { - int c = zzBuffer[k]; - - if (c >= 'a') - c-= 'a'-10; - else if (c >= 'A') - c-= 'A'-10; - else - c-= '0'; - - r <<= 4; - r += c; - } - - return r; - } - - public int read(char cbuf[], int off, int len) throws IOException { - if ( !ready() ) return -1; - - len+= off; - - for (int i=off; i { - \\ { even = false; return '\\'; } - \\ / \\ { even = !even; return '\\'; } - \\ / "u" { - if (even) { - even = false; - return '\\'; - } - else - yybegin(DIGITS); - } - .|\n { return zzBuffer[zzStartRead]; } - - <> { return -1; } -} - - { - {UnicodeEscape} { yybegin(YYINITIAL); return value(); } - .|\n { throw new Error("incorrect Unicode escape"); } - - <> { throw new Error("EOF in Unicode escape"); } -} diff --git a/tools/lexer/jflex-1.4/examples/simple/Makefile b/tools/lexer/jflex-1.4/examples/simple/Makefile deleted file mode 100644 index d46a13e02feb..000000000000 --- a/tools/lexer/jflex-1.4/examples/simple/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -JAVA=java -JAVAC=javac -JFLEX=jflex -CUP=$(JAVA) java_cup.Main < - -all: test - -test: output.txt - @(diff output.txt output.good && echo "Test OK!") || echo "Test failed!" - -output.txt: Yylex.class test.txt - $(JAVA) Yylex test.txt > output.txt - -Yylex.class: Yylex.java Yytoken.java Utility.java - -%.class: %.java - $(JAVAC) $^ - -Yylex.java: simple.flex - $(JFLEX) simple.flex - -clean: - rm -f Yylex.java output.txt *.class *~ diff --git a/tools/lexer/jflex-1.4/examples/simple/README b/tools/lexer/jflex-1.4/examples/simple/README deleted file mode 100644 index b050b3e242b1..000000000000 --- a/tools/lexer/jflex-1.4/examples/simple/README +++ /dev/null @@ -1,29 +0,0 @@ -This directory contains a scanner for a toy programming language. - -It is the example from the JLex website with some small modifications, -to make it a bit more readable. - -It does nothing really useful, because there is no parser for the -toy programming language. It's just a demonstatration how a small simple -scanner looks like. - -files: - -YYtoken.java: - the tokens returned by the scanner - -Utility.java: - small class collecting some utility functions - -simple.flex: - the example specification - -test.txt: - sample input - -output.good: - output matching the sample input from test.txt - -Makefile: (for Unix only) - make to generate scanner and run test - make clean to remove generated files diff --git a/tools/lexer/jflex-1.4/examples/simple/Utility.java b/tools/lexer/jflex-1.4/examples/simple/Utility.java deleted file mode 100644 index 889b030531d0..000000000000 --- a/tools/lexer/jflex-1.4/examples/simple/Utility.java +++ /dev/null @@ -1,19 +0,0 @@ -class Utility { - - private static final String errorMsg[] = { - "Error: Unmatched end-of-comment punctuation.", - "Error: Unmatched start-of-comment punctuation.", - "Error: Unclosed string.", - "Error: Illegal character." - }; - - public static final int E_ENDCOMMENT = 0; - public static final int E_STARTCOMMENT = 1; - public static final int E_UNCLOSEDSTR = 2; - public static final int E_UNMATCHED = 3; - - public static void error(int code) { - System.out.println(errorMsg[code]); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/simple/Yytoken.java b/tools/lexer/jflex-1.4/examples/simple/Yytoken.java deleted file mode 100644 index ed60fb8f10c5..000000000000 --- a/tools/lexer/jflex-1.4/examples/simple/Yytoken.java +++ /dev/null @@ -1,24 +0,0 @@ -class Yytoken { - public int m_index; - public String m_text; - public int m_line; - public int m_charBegin; - public int m_charEnd; - - Yytoken (int index, String text, int line, int charBegin, int charEnd) { - m_index = index; - m_text = text; - m_line = line; - m_charBegin = charBegin; - m_charEnd = charEnd; - } - - public String toString() { - return "Text : "+m_text+ - "\nindex : "+m_index+ - "\nline : "+m_line+ - "\ncBeg. : "+m_charBegin+ - "\ncEnd. : "+m_charEnd; - } -} - diff --git a/tools/lexer/jflex-1.4/examples/simple/output.good b/tools/lexer/jflex-1.4/examples/simple/output.good deleted file mode 100644 index 04599b114d0e..000000000000 --- a/tools/lexer/jflex-1.4/examples/simple/output.good +++ /dev/null @@ -1,660 +0,0 @@ -line: 1 match: --class-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : class -index : 43 -line : 0 -cBeg. : 0 -cEnd. : 5 -line: 1 match: -- -- -action [76] { } -line: 1 match: --Utility-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : Utility -index : 43 -line : 0 -cBeg. : 6 -cEnd. : 13 -line: 1 match: -- -- -action [76] { } -line: 1 match: --{-- -action [36] { return (new Yytoken(7,yytext(),yyline,yychar,yychar+1)); } -Text : { -index : 7 -line : 0 -cBeg. : 14 -cEnd. : 15 -line: 1 match: -- - - -- -action [76] { } -line: 3 match: --private-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : private -index : 43 -line : 2 -cBeg. : 21 -cEnd. : 28 -line: 3 match: -- -- -action [76] { } -line: 3 match: --static-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : static -index : 43 -line : 2 -cBeg. : 29 -cEnd. : 35 -line: 3 match: -- -- -action [76] { } -line: 3 match: --final-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : final -index : 43 -line : 2 -cBeg. : 36 -cEnd. : 41 -line: 3 match: -- -- -action [76] { } -line: 3 match: --String-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : String -index : 43 -line : 2 -cBeg. : 42 -cEnd. : 48 -line: 3 match: -- -- -action [76] { } -line: 3 match: --errorMsg-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : errorMsg -index : 43 -line : 2 -cBeg. : 49 -cEnd. : 57 -line: 3 match: --[-- -action [34] { return (new Yytoken(5,yytext(),yyline,yychar,yychar+1)); } -Text : [ -index : 5 -line : 2 -cBeg. : 57 -cEnd. : 58 -line: 3 match: --]-- -action [35] { return (new Yytoken(6,yytext(),yyline,yychar,yychar+1)); } -Text : ] -index : 6 -line : 2 -cBeg. : 58 -cEnd. : 59 -line: 3 match: -- -- -action [76] { } -line: 3 match: --=-- -action [43] { return (new Yytoken(14,yytext(),yyline,yychar,yychar+1)); } -Text : = -index : 14 -line : 2 -cBeg. : 60 -cEnd. : 61 -line: 3 match: -- -- -action [76] { } -line: 3 match: --{-- -action [36] { return (new Yytoken(7,yytext(),yyline,yychar,yychar+1)); } -Text : { -index : 7 -line : 2 -cBeg. : 62 -cEnd. : 63 -line: 3 match: -- - -- -action [76] { } -line: 4 match: --"Error: Unmatched end-of-comment punctuation."-- -action [57] { String str = yytext().substring(1,yylength()-1); - return (new Yytoken(40,str,yyline,yychar,yychar+yylength())); } -Text : Error: Unmatched end-of-comment punctuation. -index : 40 -line : 3 -cBeg. : 68 -cEnd. : 114 -line: 4 match: --,-- -action [29] { return (new Yytoken(0,yytext(),yyline,yychar,yychar+1)); } -Text : , -index : 0 -line : 3 -cBeg. : 114 -cEnd. : 115 -line: 4 match: -- - -- -action [76] { } -line: 5 match: --"Error: Unmatched start-of-comment punctuation."-- -action [57] { String str = yytext().substring(1,yylength()-1); - return (new Yytoken(40,str,yyline,yychar,yychar+yylength())); } -Text : Error: Unmatched start-of-comment punctuation. -index : 40 -line : 4 -cBeg. : 120 -cEnd. : 168 -line: 5 match: --,-- -action [29] { return (new Yytoken(0,yytext(),yyline,yychar,yychar+1)); } -Text : , -index : 0 -line : 4 -cBeg. : 168 -cEnd. : 169 -line: 5 match: -- - -- -action [76] { } -line: 6 match: --"Error: Unclosed string."-- -action [57] { String str = yytext().substring(1,yylength()-1); - return (new Yytoken(40,str,yyline,yychar,yychar+yylength())); } -Text : Error: Unclosed string. -index : 40 -line : 5 -cBeg. : 174 -cEnd. : 199 -line: 6 match: --,-- -action [29] { return (new Yytoken(0,yytext(),yyline,yychar,yychar+1)); } -Text : , -index : 0 -line : 5 -cBeg. : 199 -cEnd. : 200 -line: 6 match: -- - -- -action [76] { } -line: 7 match: --"Error: Illegal character."-- -action [57] { String str = yytext().substring(1,yylength()-1); - return (new Yytoken(40,str,yyline,yychar,yychar+yylength())); } -Text : Error: Illegal character. -index : 40 -line : 6 -cBeg. : 205 -cEnd. : 232 -line: 7 match: -- - -- -action [76] { } -line: 8 match: --}-- -action [37] { return (new Yytoken(8,yytext(),yyline,yychar,yychar+1)); } -Text : } -index : 8 -line : 7 -cBeg. : 237 -cEnd. : 238 -line: 8 match: --;-- -action [31] { return (new Yytoken(2,yytext(),yyline,yychar,yychar+1)); } -Text : ; -index : 2 -line : 7 -cBeg. : 238 -cEnd. : 239 -line: 8 match: -- - - -- -action [76] { } -line: 10 match: --public-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : public -index : 43 -line : 9 -cBeg. : 245 -cEnd. : 251 -line: 10 match: -- -- -action [76] { } -line: 10 match: --static-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : static -index : 43 -line : 9 -cBeg. : 252 -cEnd. : 258 -line: 10 match: -- -- -action [76] { } -line: 10 match: --final-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : final -index : 43 -line : 9 -cBeg. : 259 -cEnd. : 264 -line: 10 match: -- -- -action [76] { } -line: 10 match: --int-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : int -index : 43 -line : 9 -cBeg. : 265 -cEnd. : 268 -line: 10 match: -- -- -action [76] { } -line: 10 match: --E_ENDCOMMENT-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : E_ENDCOMMENT -index : 43 -line : 9 -cBeg. : 269 -cEnd. : 281 -line: 10 match: -- -- -action [76] { } -line: 10 match: --=-- -action [43] { return (new Yytoken(14,yytext(),yyline,yychar,yychar+1)); } -Text : = -index : 14 -line : 9 -cBeg. : 282 -cEnd. : 283 -line: 10 match: -- -- -action [76] { } -line: 10 match: --0-- -action [68] { return (new Yytoken(42,yytext(),yyline,yychar,yychar+yylength())); } -Text : 0 -index : 42 -line : 9 -cBeg. : 284 -cEnd. : 285 -line: 10 match: --;-- -action [31] { return (new Yytoken(2,yytext(),yyline,yychar,yychar+1)); } -Text : ; -index : 2 -line : 9 -cBeg. : 285 -cEnd. : 286 -line: 10 match: -- - -- -action [76] { } -line: 11 match: --public-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : public -index : 43 -line : 10 -cBeg. : 290 -cEnd. : 296 -line: 11 match: -- -- -action [76] { } -line: 11 match: --static-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : static -index : 43 -line : 10 -cBeg. : 297 -cEnd. : 303 -line: 11 match: -- -- -action [76] { } -line: 11 match: --final-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : final -index : 43 -line : 10 -cBeg. : 304 -cEnd. : 309 -line: 11 match: -- -- -action [76] { } -line: 11 match: --int-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : int -index : 43 -line : 10 -cBeg. : 310 -cEnd. : 313 -line: 11 match: -- -- -action [76] { } -line: 11 match: --E_STARTCOMMENT-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : E_STARTCOMMENT -index : 43 -line : 10 -cBeg. : 314 -cEnd. : 328 -line: 11 match: -- -- -action [76] { } -line: 11 match: --=-- -action [43] { return (new Yytoken(14,yytext(),yyline,yychar,yychar+1)); } -Text : = -index : 14 -line : 10 -cBeg. : 329 -cEnd. : 330 -line: 11 match: -- -- -action [76] { } -line: 11 match: --1-- -action [68] { return (new Yytoken(42,yytext(),yyline,yychar,yychar+yylength())); } -Text : 1 -index : 42 -line : 10 -cBeg. : 331 -cEnd. : 332 -line: 11 match: --;-- -action [31] { return (new Yytoken(2,yytext(),yyline,yychar,yychar+1)); } -Text : ; -index : 2 -line : 10 -cBeg. : 332 -cEnd. : 333 -line: 11 match: -- - -- -action [76] { } -line: 12 match: --public-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : public -index : 43 -line : 11 -cBeg. : 337 -cEnd. : 343 -line: 12 match: -- -- -action [76] { } -line: 12 match: --static-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : static -index : 43 -line : 11 -cBeg. : 344 -cEnd. : 350 -line: 12 match: -- -- -action [76] { } -line: 12 match: --final-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : final -index : 43 -line : 11 -cBeg. : 351 -cEnd. : 356 -line: 12 match: -- -- -action [76] { } -line: 12 match: --int-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : int -index : 43 -line : 11 -cBeg. : 357 -cEnd. : 360 -line: 12 match: -- -- -action [76] { } -line: 12 match: --E_UNCLOSEDSTR-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : E_UNCLOSEDSTR -index : 43 -line : 11 -cBeg. : 361 -cEnd. : 374 -line: 12 match: -- -- -action [76] { } -line: 12 match: --=-- -action [43] { return (new Yytoken(14,yytext(),yyline,yychar,yychar+1)); } -Text : = -index : 14 -line : 11 -cBeg. : 375 -cEnd. : 376 -line: 12 match: -- -- -action [76] { } -line: 12 match: --2-- -action [68] { return (new Yytoken(42,yytext(),yyline,yychar,yychar+yylength())); } -Text : 2 -index : 42 -line : 11 -cBeg. : 377 -cEnd. : 378 -line: 12 match: --;-- -action [31] { return (new Yytoken(2,yytext(),yyline,yychar,yychar+1)); } -Text : ; -index : 2 -line : 11 -cBeg. : 378 -cEnd. : 379 -line: 12 match: -- - -- -action [76] { } -line: 13 match: --public-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : public -index : 43 -line : 12 -cBeg. : 383 -cEnd. : 389 -line: 13 match: -- -- -action [76] { } -line: 13 match: --static-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : static -index : 43 -line : 12 -cBeg. : 390 -cEnd. : 396 -line: 13 match: -- -- -action [76] { } -line: 13 match: --final-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : final -index : 43 -line : 12 -cBeg. : 397 -cEnd. : 402 -line: 13 match: -- -- -action [76] { } -line: 13 match: --int-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : int -index : 43 -line : 12 -cBeg. : 403 -cEnd. : 406 -line: 13 match: -- -- -action [76] { } -line: 13 match: --E_UNMATCHED-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : E_UNMATCHED -index : 43 -line : 12 -cBeg. : 407 -cEnd. : 418 -line: 13 match: -- -- -action [76] { } -line: 13 match: --=-- -action [43] { return (new Yytoken(14,yytext(),yyline,yychar,yychar+1)); } -Text : = -index : 14 -line : 12 -cBeg. : 419 -cEnd. : 420 -line: 13 match: -- -- -action [76] { } -line: 13 match: --3-- -action [68] { return (new Yytoken(42,yytext(),yyline,yychar,yychar+yylength())); } -Text : 3 -index : 42 -line : 12 -cBeg. : 421 -cEnd. : 422 -line: 13 match: --;-- -action [31] { return (new Yytoken(2,yytext(),yyline,yychar,yychar+1)); } -Text : ; -index : 2 -line : 12 -cBeg. : 422 -cEnd. : 423 -line: 13 match: -- - - -- -action [76] { } -line: 15 match: --public-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : public -index : 43 -line : 14 -cBeg. : 428 -cEnd. : 434 -line: 15 match: -- -- -action [76] { } -line: 15 match: --static-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : static -index : 43 -line : 14 -cBeg. : 435 -cEnd. : 441 -line: 15 match: -- -- -action [76] { } -line: 15 match: --void-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : void -index : 43 -line : 14 -cBeg. : 442 -cEnd. : 446 -line: 15 match: -- -- -action [76] { } -line: 15 match: --error-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : error -index : 43 -line : 14 -cBeg. : 447 -cEnd. : 452 -line: 15 match: --(-- -action [32] { return (new Yytoken(3,yytext(),yyline,yychar,yychar+1)); } -Text : ( -index : 3 -line : 14 -cBeg. : 452 -cEnd. : 453 -line: 15 match: --int-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : int -index : 43 -line : 14 -cBeg. : 453 -cEnd. : 456 -line: 15 match: -- -- -action [76] { } -line: 15 match: --code-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : code -index : 43 -line : 14 -cBeg. : 457 -cEnd. : 461 -line: 15 match: --)-- -action [33] { return (new Yytoken(4,yytext(),yyline,yychar,yychar+1)); } -Text : ) -index : 4 -line : 14 -cBeg. : 461 -cEnd. : 462 -line: 15 match: -- -- -action [76] { } -line: 15 match: --{-- -action [36] { return (new Yytoken(7,yytext(),yyline,yychar,yychar+1)); } -Text : { -index : 7 -line : 14 -cBeg. : 463 -cEnd. : 464 -line: 15 match: -- - -- -action [76] { } -line: 16 match: --System-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : System -index : 43 -line : 15 -cBeg. : 468 -cEnd. : 474 -line: 16 match: --.-- -action [38] { return (new Yytoken(9,yytext(),yyline,yychar,yychar+1)); } -Text : . -index : 9 -line : 15 -cBeg. : 474 -cEnd. : 475 -line: 16 match: --out-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : out -index : 43 -line : 15 -cBeg. : 475 -cEnd. : 478 -line: 16 match: --.-- -action [38] { return (new Yytoken(9,yytext(),yyline,yychar,yychar+1)); } -Text : . -index : 9 -line : 15 -cBeg. : 478 -cEnd. : 479 -line: 16 match: --println-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : println -index : 43 -line : 15 -cBeg. : 479 -cEnd. : 486 -line: 16 match: --(-- -action [32] { return (new Yytoken(3,yytext(),yyline,yychar,yychar+1)); } -Text : ( -index : 3 -line : 15 -cBeg. : 486 -cEnd. : 487 -line: 16 match: --errorMsg-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : errorMsg -index : 43 -line : 15 -cBeg. : 487 -cEnd. : 495 -line: 16 match: --[-- -action [34] { return (new Yytoken(5,yytext(),yyline,yychar,yychar+1)); } -Text : [ -index : 5 -line : 15 -cBeg. : 495 -cEnd. : 496 -line: 16 match: --code-- -action [70] { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -Text : code -index : 43 -line : 15 -cBeg. : 496 -cEnd. : 500 -line: 16 match: --]-- -action [35] { return (new Yytoken(6,yytext(),yyline,yychar,yychar+1)); } -Text : ] -index : 6 -line : 15 -cBeg. : 500 -cEnd. : 501 -line: 16 match: --)-- -action [33] { return (new Yytoken(4,yytext(),yyline,yychar,yychar+1)); } -Text : ) -index : 4 -line : 15 -cBeg. : 501 -cEnd. : 502 -line: 16 match: --;-- -action [31] { return (new Yytoken(2,yytext(),yyline,yychar,yychar+1)); } -Text : ; -index : 2 -line : 15 -cBeg. : 502 -cEnd. : 503 -line: 16 match: -- - -- -action [76] { } -line: 17 match: --}-- -action [37] { return (new Yytoken(8,yytext(),yyline,yychar,yychar+1)); } -Text : } -index : 8 -line : 16 -cBeg. : 506 -cEnd. : 507 -line: 17 match: -- --- -action [76] { } -line: 18 match: --}-- -action [37] { return (new Yytoken(8,yytext(),yyline,yychar,yychar+1)); } -Text : } -index : 8 -line : 17 -cBeg. : 508 -cEnd. : 509 -line: 18 match: -- - --- -action [76] { } -null diff --git a/tools/lexer/jflex-1.4/examples/simple/simple.flex b/tools/lexer/jflex-1.4/examples/simple/simple.flex deleted file mode 100644 index 790133952271..000000000000 --- a/tools/lexer/jflex-1.4/examples/simple/simple.flex +++ /dev/null @@ -1,86 +0,0 @@ -/* this is the scanner example from the JLex website - (with small modifications to make it more readable) */ - -%% - -%{ - private int comment_count = 0; -%} - -%line -%char -%state COMMENT -%full - -%debug - -ALPHA=[A-Za-z] -DIGIT=[0-9] -NONNEWLINE_WHITE_SPACE_CHAR=[\ \t\b\012] -NEWLINE=\r|\n|\r\n -WHITE_SPACE_CHAR=[\n\r\ \t\b\012] -STRING_TEXT=(\\\"|[^\n\r\"]|\\{WHITE_SPACE_CHAR}+\\)* -COMMENT_TEXT=([^*/\n]|[^*\n]"/"[^*\n]|[^/\n]"*"[^/\n]|"*"[^/\n]|"/"[^*\n])* -Ident = {ALPHA}({ALPHA}|{DIGIT}|_)* - -%% - - { - "," { return (new Yytoken(0,yytext(),yyline,yychar,yychar+1)); } - ":" { return (new Yytoken(1,yytext(),yyline,yychar,yychar+1)); } - ";" { return (new Yytoken(2,yytext(),yyline,yychar,yychar+1)); } - "(" { return (new Yytoken(3,yytext(),yyline,yychar,yychar+1)); } - ")" { return (new Yytoken(4,yytext(),yyline,yychar,yychar+1)); } - "[" { return (new Yytoken(5,yytext(),yyline,yychar,yychar+1)); } - "]" { return (new Yytoken(6,yytext(),yyline,yychar,yychar+1)); } - "{" { return (new Yytoken(7,yytext(),yyline,yychar,yychar+1)); } - "}" { return (new Yytoken(8,yytext(),yyline,yychar,yychar+1)); } - "." { return (new Yytoken(9,yytext(),yyline,yychar,yychar+1)); } - "+" { return (new Yytoken(10,yytext(),yyline,yychar,yychar+1)); } - "-" { return (new Yytoken(11,yytext(),yyline,yychar,yychar+1)); } - "*" { return (new Yytoken(12,yytext(),yyline,yychar,yychar+1)); } - "/" { return (new Yytoken(13,yytext(),yyline,yychar,yychar+1)); } - "=" { return (new Yytoken(14,yytext(),yyline,yychar,yychar+1)); } - "<>" { return (new Yytoken(15,yytext(),yyline,yychar,yychar+2)); } - "<" { return (new Yytoken(16,yytext(),yyline,yychar,yychar+1)); } - "<=" { return (new Yytoken(17,yytext(),yyline,yychar,yychar+2)); } - ">" { return (new Yytoken(18,yytext(),yyline,yychar,yychar+1)); } - ">=" { return (new Yytoken(19,yytext(),yyline,yychar,yychar+2)); } - "&" { return (new Yytoken(20,yytext(),yyline,yychar,yychar+1)); } - "|" { return (new Yytoken(21,yytext(),yyline,yychar,yychar+1)); } - ":=" { return (new Yytoken(22,yytext(),yyline,yychar,yychar+2)); } - - {NONNEWLINE_WHITE_SPACE_CHAR}+ { } - - "/*" { yybegin(COMMENT); comment_count++; } - - \"{STRING_TEXT}\" { - String str = yytext().substring(1,yylength()-1); - return (new Yytoken(40,str,yyline,yychar,yychar+yylength())); - } - - \"{STRING_TEXT} { - String str = yytext().substring(1,yytext().length()); - Utility.error(Utility.E_UNCLOSEDSTR); - return (new Yytoken(41,str,yyline,yychar,yychar + str.length())); - } - - {DIGIT}+ { return (new Yytoken(42,yytext(),yyline,yychar,yychar+yylength())); } - - {Ident} { return (new Yytoken(43,yytext(),yyline,yychar,yychar+yylength())); } -} - - { - "/*" { comment_count++; } - "*/" { if (--comment_count == 0) yybegin(YYINITIAL); } - {COMMENT_TEXT} { } -} - - -{NEWLINE} { } - -. { - System.out.println("Illegal character: <" + yytext() + ">"); - Utility.error(Utility.E_UNMATCHED); -} - diff --git a/tools/lexer/jflex-1.4/examples/simple/test.txt b/tools/lexer/jflex-1.4/examples/simple/test.txt deleted file mode 100644 index 889b030531d0..000000000000 --- a/tools/lexer/jflex-1.4/examples/simple/test.txt +++ /dev/null @@ -1,19 +0,0 @@ -class Utility { - - private static final String errorMsg[] = { - "Error: Unmatched end-of-comment punctuation.", - "Error: Unmatched start-of-comment punctuation.", - "Error: Unclosed string.", - "Error: Illegal character." - }; - - public static final int E_ENDCOMMENT = 0; - public static final int E_STARTCOMMENT = 1; - public static final int E_UNCLOSEDSTR = 2; - public static final int E_UNMATCHED = 3; - - public static void error(int code) { - System.out.println(errorMsg[code]); - } -} - diff --git a/tools/lexer/jflex-1.4/examples/standalone/Makefile b/tools/lexer/jflex-1.4/examples/standalone/Makefile deleted file mode 100644 index c9a9ab6951f7..000000000000 --- a/tools/lexer/jflex-1.4/examples/standalone/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -all: run - -run: Subst.class - java Subst sample.inp - -Subst.class: Subst.java - javac Subst.java - -Subst.java: standalone.flex - jflex standalone.flex - -clean: - rm -rf *.class *~ *.java diff --git a/tools/lexer/jflex-1.4/examples/standalone/README b/tools/lexer/jflex-1.4/examples/standalone/README deleted file mode 100644 index 1be85a86998f..000000000000 --- a/tools/lexer/jflex-1.4/examples/standalone/README +++ /dev/null @@ -1,20 +0,0 @@ -This is a small example of a standalone text substitution scanner. - -It reads a name after the keyword name and replaces all occurences -of "hello" by "hello !". - -sample.inp - contains a sample input for the scanner - -standalone.flex - the lexical specification for the scanner - -build.xml - ant build file - -to run the example use ant or type: - -jflex standalone.flex -javac Subst.java -java Subst sample.inp - diff --git a/tools/lexer/jflex-1.4/examples/standalone/build.xml b/tools/lexer/jflex-1.4/examples/standalone/build.xml deleted file mode 100644 index 3d8bae7ca2a5..000000000000 --- a/tools/lexer/jflex-1.4/examples/standalone/build.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/lexer/jflex-1.4/examples/standalone/sample.inp b/tools/lexer/jflex-1.4/examples/standalone/sample.inp deleted file mode 100644 index 550ac7373812..000000000000 --- a/tools/lexer/jflex-1.4/examples/standalone/sample.inp +++ /dev/null @@ -1,8 +0,0 @@ -name someone - -Hello -This is a sample input file for the -standalone example scanner. - -Have a nice day! - diff --git a/tools/lexer/jflex-1.4/examples/standalone/standalone.flex b/tools/lexer/jflex-1.4/examples/standalone/standalone.flex deleted file mode 100644 index 0c7e12f94d8f..000000000000 --- a/tools/lexer/jflex-1.4/examples/standalone/standalone.flex +++ /dev/null @@ -1,44 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 1998-2004 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - This is a small example of a standalone text substitution scanner - It reads a name after the keyword name and substitutes all occurences - of "hello" with "hello !". There is a sample input file - "sample.inp" provided in this directory -*/ - -%% - -%public -%class Subst -%standalone - -%unicode - -%{ - String name; -%} - -%% - -"name " [a-zA-Z]+ { name = yytext().substring(5); } -[Hh] "ello" { System.out.print(yytext()+" "+name+"!"); } - diff --git a/tools/lexer/jflex-1.4/jflex-1.4.3-unicode-character-category.patch b/tools/lexer/jflex-1.4/jflex-1.4.3-unicode-character-category.patch deleted file mode 100644 index 0e2101560c66..000000000000 --- a/tools/lexer/jflex-1.4/jflex-1.4.3-unicode-character-category.patch +++ /dev/null @@ -1,7211 +0,0 @@ -Index: jflex/src/JFlex/LexParse.java -=================================================================== ---- jflex/src/JFlex/LexParse.java (revision 370) -+++ jflex/src/JFlex/LexParse.java Tue Dec 01 08:13:39 EST 2009 -@@ -1,15 +1,15 @@ - - //---------------------------------------------------- --// The following code was generated by CUP v0.10k --// Tue May 27 20:22:19 EST 2008 -+// The following code was generated by CUP v0.11a beta 20060608 -+// Tue Dec 01 08:13:38 EST 2009 - //---------------------------------------------------- - - package JFlex; - - import java.util.*; - --/** CUP v0.10k generated parser. -- * @version Tue May 27 20:22:19 EST 2008 -+/** CUP v0.11a beta 20060608 generated parser. -+ * @version Tue Dec 01 08:13:38 EST 2009 - */ - public class LexParse extends java_cup.runtime.lr_parser { - -@@ -19,33 +19,45 @@ - /** Constructor which sets the default scanner. */ - public LexParse(java_cup.runtime.Scanner s) {super(s);} - -+ /** Constructor which sets the default scanner. */ -+ public LexParse(java_cup.runtime.Scanner s, java_cup.runtime.SymbolFactory sf) {super(s,sf);} -+ - /** Production table. */ - protected static final short _production_table[][] = - unpackFromStrings(new String[] { -- "\000\113\000\002\002\004\000\002\006\006\000\002\006" + -- "\002\000\002\003\002\000\002\003\004\000\002\003\003" + -- "\000\002\004\003\000\002\004\003\000\002\004\003\000" + -- "\002\004\006\000\002\004\004\000\002\022\004\000\002" + -- "\022\011\000\002\022\010\000\002\022\003\000\002\005" + -- "\006\000\002\005\007\000\002\005\007\000\002\005\005" + -- "\000\002\005\003\000\002\014\003\000\002\014\004\000" + -- "\002\014\005\000\002\024\004\000\002\025\003\000\002" + -- "\025\003\000\002\017\005\000\002\017\002\000\002\016" + -- "\005\000\002\016\003\000\002\016\004\000\002\023\003" + -- "\000\002\023\002\000\002\007\005\000\002\007\003\000" + -- "\002\007\003\000\002\010\004\000\002\010\003\000\002" + -- "\011\003\000\002\011\004\000\002\011\004\000\002\012" + -- "\004\000\002\012\004\000\002\012\004\000\002\012\005" + -- "\000\002\012\006\000\002\012\005\000\002\012\003\000" + -- "\002\012\003\000\002\012\003\000\002\012\003\000\002" + -- "\012\003\000\002\012\003\000\002\013\004\000\002\013" + -- "\005\000\002\013\005\000\002\013\006\000\002\013\006" + -- "\000\002\013\007\000\002\020\004\000\002\020\003\000" + -- "\002\020\004\000\002\020\003\000\002\020\004\000\002" + -- "\020\003\000\002\020\004\000\002\020\003\000\002\015" + -- "\005\000\002\015\003\000\002\021\003\000\002\021\003" + -- "\000\002\021\003\000\002\021\003\000\002\021\003\000" + -- "\002\021\003" }); -+ "\000\151\000\002\002\004\000\002\005\006\000\002\005" + -+ "\002\000\002\002\002\000\002\002\004\000\002\002\003" + -+ "\000\002\003\003\000\002\003\003\000\002\003\003\000" + -+ "\002\003\006\000\002\003\004\000\002\021\004\000\002" + -+ "\021\011\000\002\021\010\000\002\021\003\000\002\004" + -+ "\006\000\002\004\007\000\002\004\007\000\002\004\005" + -+ "\000\002\004\003\000\002\013\003\000\002\013\004\000" + -+ "\002\013\005\000\002\023\004\000\002\024\003\000\002" + -+ "\024\003\000\002\016\005\000\002\016\002\000\002\015" + -+ "\005\000\002\015\003\000\002\015\004\000\002\022\003" + -+ "\000\002\022\002\000\002\006\005\000\002\006\003\000" + -+ "\002\006\003\000\002\007\004\000\002\007\003\000\002" + -+ "\010\003\000\002\010\004\000\002\010\004\000\002\011" + -+ "\004\000\002\011\004\000\002\011\004\000\002\011\005" + -+ "\000\002\011\006\000\002\011\005\000\002\011\003\000" + -+ "\002\011\003\000\002\011\003\000\002\011\003\000\002" + -+ "\011\003\000\002\011\003\000\002\012\004\000\002\012" + -+ "\005\000\002\012\005\000\002\012\006\000\002\012\006" + -+ "\000\002\012\007\000\002\017\004\000\002\017\003\000" + -+ "\002\017\004\000\002\017\003\000\002\017\004\000\002" + -+ "\017\003\000\002\017\004\000\002\017\003\000\002\014" + -+ "\005\000\002\014\003\000\002\020\003\000\002\020\003" + -+ "\000\002\020\003\000\002\020\003\000\002\020\003\000" + -+ "\002\020\003\000\002\020\003\000\002\020\003\000\002" + -+ "\020\003\000\002\020\003\000\002\020\003\000\002\020" + -+ "\003\000\002\020\003\000\002\020\003\000\002\020\003" + -+ "\000\002\020\003\000\002\020\003\000\002\020\003\000" + -+ "\002\020\003\000\002\020\003\000\002\020\003\000\002" + -+ "\020\003\000\002\020\003\000\002\020\003\000\002\020" + -+ "\003\000\002\020\003\000\002\020\003\000\002\020\003" + -+ "\000\002\020\003\000\002\020\003\000\002\020\003\000" + -+ "\002\020\003\000\002\020\003\000\002\020\003\000\002" + -+ "\020\003\000\002\020\003" }); - - /** Access to production table. */ - public short[][] production_table() {return _production_table;} -@@ -53,277 +65,900 @@ - /** Parse-action table. */ - protected static final short[][] _action_table = - unpackFromStrings(new String[] { -- "\000\156\000\006\002\uffff\041\004\001\002\000\016\003" + -- "\007\013\ufffe\022\ufffe\023\ufffe\024\ufffe\040\ufffe\001\002" + -+ "\000\214\000\006\002\uffff\077\004\001\002\000\016\003" + -+ "\007\013\ufffe\022\ufffe\023\ufffe\024\ufffe\076\ufffe\001\002" + - "\000\004\002\006\001\002\000\004\002\001\001\002\000" + -- "\014\013\ufffc\022\ufffc\023\ufffc\024\ufffc\040\ufffc\001\002" + -- "\000\014\013\012\022\011\023\016\024\015\040\014\001" + -- "\002\000\014\013\ufffb\022\ufffb\023\ufffb\024\ufffb\040\ufffb" + -- "\001\002\000\050\003\114\004\uffe6\006\uffe6\010\uffe6\016" + -- "\116\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6" + -- "\034\uffe6\045\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6\053" + -- "\uffe6\054\uffe6\001\002\000\014\013\ufffd\022\ufffd\023\ufffd" + -- "\024\ufffd\040\ufffd\001\002\000\004\014\017\001\002\000" + -- "\014\013\ufff9\022\ufff9\023\ufff9\024\ufff9\040\ufff9\001\002" + -- "\000\014\013\ufffa\022\ufffa\023\ufffa\024\ufffa\040\ufffa\001" + -- "\002\000\052\004\034\010\044\013\ufff7\022\ufff7\023\ufff7" + -- "\024\ufff7\026\023\027\031\030\020\031\042\032\035\033" + -- "\032\040\ufff7\045\041\047\022\050\037\051\024\052\021" + -- "\053\030\054\025\001\002\000\064\004\uffba\005\uffba\007" + -- "\uffba\010\uffba\011\uffba\025\uffba\026\uffba\027\uffba\030\uffba" + -- "\031\uffba\032\uffba\033\uffba\035\uffba\036\uffba\042\uffba\043" + -- "\uffba\044\uffba\045\uffba\046\uffba\047\uffba\050\uffba\051\uffba" + -- "\052\uffba\053\uffba\054\uffba\001\002\000\062\004\uffcd\005" + -- "\uffcd\007\uffcd\010\uffcd\025\uffcd\026\uffcd\027\uffcd\030\uffcd" + -- "\031\uffcd\032\uffcd\033\uffcd\035\uffcd\036\uffcd\042\uffcd\043" + -- "\uffcd\044\uffcd\045\uffcd\046\uffcd\047\uffcd\050\uffcd\051\uffcd" + -- "\052\uffcd\053\uffcd\054\uffcd\001\002\000\062\004\uffce\005" + -- "\uffce\007\uffce\010\uffce\025\uffce\026\uffce\027\uffce\030\uffce" + -- "\031\uffce\032\uffce\033\uffce\035\uffce\036\uffce\042\uffce\043" + -- "\uffce\044\uffce\045\uffce\046\uffce\047\uffce\050\uffce\051\uffce" + -- "\052\uffce\053\uffce\054\uffce\001\002\000\064\004\uffbc\005" + -- "\uffbc\007\uffbc\010\uffbc\011\uffbc\025\uffbc\026\uffbc\027\uffbc" + -- "\030\uffbc\031\uffbc\032\uffbc\033\uffbc\035\uffbc\036\uffbc\042" + -- "\uffbc\043\uffbc\044\uffbc\045\uffbc\046\uffbc\047\uffbc\050\uffbc" + -- "\051\uffbc\052\uffbc\053\uffbc\054\uffbc\001\002\000\036\004" + -- "\034\010\044\026\023\027\031\030\020\031\042\032\035" + -- "\033\032\047\022\050\037\051\024\052\021\053\030\054" + -- "\025\001\002\000\062\004\uffd2\005\uffd2\007\uffd2\010\uffd2" + -- "\025\uffd2\026\uffd2\027\uffd2\030\uffd2\031\uffd2\032\uffd2\033" + -- "\uffd2\035\uffd2\036\uffd2\042\uffd2\043\uffd2\044\uffd2\045\uffd2" + -- "\046\uffd2\047\uffd2\050\uffd2\051\uffd2\052\uffd2\053\uffd2\054" + -- "\uffd2\001\002\000\006\025\112\045\106\001\002\000\062" + -- "\004\uffd0\005\uffd0\007\uffd0\010\uffd0\025\uffd0\026\uffd0\027" + -- "\uffd0\030\uffd0\031\uffd0\032\uffd0\033\uffd0\035\uffd0\036\uffd0" + -- "\042\uffd0\043\uffd0\044\uffd0\045\uffd0\046\uffd0\047\uffd0\050" + -- "\uffd0\051\uffd0\052\uffd0\053\uffd0\054\uffd0\001\002\000\062" + -- "\004\uffcf\005\uffcf\007\uffcf\010\uffcf\025\uffcf\026\uffcf\027" + -- "\uffcf\030\uffcf\031\uffcf\032\uffcf\033\uffcf\035\uffcf\036\uffcf" + -- "\042\uffcf\043\uffcf\044\uffcf\045\uffcf\046\uffcf\047\uffcf\050" + -- "\uffcf\051\uffcf\052\uffcf\053\uffcf\054\uffcf\001\002\000\064" + -- "\004\uffbb\005\uffbb\007\uffbb\010\uffbb\011\uffbb\025\uffbb\026" + -- "\uffbb\027\uffbb\030\uffbb\031\uffbb\032\uffbb\033\uffbb\035\uffbb" + -- "\036\uffbb\042\uffbb\043\uffbb\044\uffbb\045\uffbb\046\uffbb\047" + -- "\uffbb\050\uffbb\051\uffbb\052\uffbb\053\uffbb\054\uffbb\001\002" + -- "\000\064\004\uffb7\005\uffb7\007\uffb7\010\uffb7\011\uffb7\025" + -- "\uffb7\026\uffb7\027\uffb7\030\uffb7\031\uffb7\032\uffb7\033\uffb7" + -- "\035\uffb7\036\uffb7\042\uffb7\043\uffb7\044\uffb7\045\uffb7\046" + -- "\uffb7\047\uffb7\050\uffb7\051\uffb7\052\uffb7\053\uffb7\054\uffb7" + -- "\001\002\000\052\004\034\005\uffdf\007\uffdf\010\044\025" + -- "\uffdf\026\023\027\031\030\020\031\042\032\035\033\032" + -- "\035\uffdf\036\uffdf\045\uffdf\047\022\050\037\051\024\052" + -- "\021\053\030\054\025\001\002\000\040\004\034\010\044" + -- "\026\023\027\031\030\020\031\042\032\035\033\032\045" + -- "\041\047\022\050\037\051\024\052\021\053\030\054\025" + -- "\001\002\000\064\004\uffb8\005\uffb8\007\uffb8\010\uffb8\011" + -- "\uffb8\025\uffb8\026\uffb8\027\uffb8\030\uffb8\031\uffb8\032\uffb8" + -- "\033\uffb8\035\uffb8\036\uffb8\042\uffb8\043\uffb8\044\uffb8\045" + -- "\uffb8\046\uffb8\047\uffb8\050\uffb8\051\uffb8\052\uffb8\053\uffb8" + -- "\054\uffb8\001\002\000\062\004\uffd1\005\uffd1\007\uffd1\010" + -- "\uffd1\025\uffd1\026\uffd1\027\uffd1\030\uffd1\031\uffd1\032\uffd1" + -- "\033\uffd1\035\uffd1\036\uffd1\042\uffd1\043\uffd1\044\uffd1\045" + -- "\uffd1\046\uffd1\047\uffd1\050\uffd1\051\uffd1\052\uffd1\053\uffd1" + -- "\054\uffd1\001\002\000\036\004\034\010\044\026\023\027" + -- "\031\030\020\031\042\032\035\033\032\047\022\050\037" + -- "\051\024\052\021\053\030\054\025\001\002\000\052\004" + -- "\uffdc\005\uffdc\007\uffdc\010\uffdc\025\uffdc\026\uffdc\027\uffdc" + -- "\030\uffdc\031\uffdc\032\uffdc\033\uffdc\035\uffdc\036\uffdc\045" + -- "\uffdc\047\uffdc\050\uffdc\051\uffdc\052\uffdc\053\uffdc\054\uffdc" + -- "\001\002\000\016\005\uffde\007\uffde\025\uffde\035\uffde\036" + -- "\uffde\045\uffde\001\002\000\064\004\uffb9\005\uffb9\007\uffb9" + -- "\010\uffb9\011\uffb9\025\uffb9\026\uffb9\027\uffb9\030\uffb9\031" + -- "\uffb9\032\uffb9\033\uffb9\035\uffb9\036\uffb9\042\uffb9\043\uffb9" + -- "\044\uffb9\045\uffb9\046\uffb9\047\uffb9\050\uffb9\051\uffb9\052" + -- "\uffb9\053\uffb9\054\uffb9\001\002\000\062\004\uffdb\005\uffdb" + -- "\007\uffdb\010\uffdb\025\uffdb\026\uffdb\027\uffdb\030\uffdb\031" + -- "\uffdb\032\uffdb\033\uffdb\035\uffdb\036\uffdb\042\077\043\075" + -- "\044\076\045\uffdb\046\100\047\uffdb\050\uffdb\051\uffdb\052" + -- "\uffdb\053\uffdb\054\uffdb\001\002\000\032\006\047\011\051" + -- "\012\050\026\023\027\031\030\020\031\042\032\035\033" + -- "\032\052\055\053\052\054\053\001\002\000\026\011\uffc3" + -- "\026\uffc3\027\uffc3\030\uffc3\031\uffc3\032\uffc3\033\uffc3\052" + -- "\uffc3\053\uffc3\054\uffc3\001\002\000\026\011\uffc5\026\uffc5" + -- "\027\uffc5\030\uffc5\031\uffc5\032\uffc5\033\uffc5\052\uffc5\053" + -- "\uffc5\054\uffc5\001\002\000\030\011\070\012\067\026\023" + -- "\027\031\030\020\031\042\032\035\033\032\052\055\053" + -- "\052\054\053\001\002\000\024\026\023\027\031\030\020" + -- "\031\042\032\035\033\032\052\055\053\052\054\053\001" + -- "\002\000\062\004\uffcc\005\uffcc\007\uffcc\010\uffcc\025\uffcc" + -- "\026\uffcc\027\uffcc\030\uffcc\031\uffcc\032\uffcc\033\uffcc\035" + -- "\uffcc\036\uffcc\042\uffcc\043\uffcc\044\uffcc\045\uffcc\046\uffcc" + -- "\047\uffcc\050\uffcc\051\uffcc\052\uffcc\053\uffcc\054\uffcc\001" + -- "\002\000\026\011\uffc1\026\uffc1\027\uffc1\030\uffc1\031\uffc1" + -- "\032\uffc1\033\uffc1\052\uffc1\053\uffc1\054\uffc1\001\002\000" + -- "\026\011\uffbf\026\uffbf\027\uffbf\030\uffbf\031\uffbf\032\uffbf" + -- "\033\uffbf\052\uffbf\053\uffbf\054\uffbf\001\002\000\026\011" + -- "\062\026\023\027\031\030\020\031\042\032\035\033\032" + -- "\052\055\053\063\054\064\001\002\000\030\011\uffbd\012" + -- "\056\026\uffbd\027\uffbd\030\uffbd\031\uffbd\032\uffbd\033\uffbd" + -- "\052\uffbd\053\uffbd\054\uffbd\001\002\000\004\052\057\001" + -- "\002\000\026\011\uffbe\026\uffbe\027\uffbe\030\uffbe\031\uffbe" + -- "\032\uffbe\033\uffbe\052\uffbe\053\uffbe\054\uffbe\001\002\000" + -- "\026\011\uffc4\026\uffc4\027\uffc4\030\uffc4\031\uffc4\032\uffc4" + -- "\033\uffc4\052\uffc4\053\uffc4\054\uffc4\001\002\000\026\011" + -- "\uffc6\026\uffc6\027\uffc6\030\uffc6\031\uffc6\032\uffc6\033\uffc6" + -- "\052\uffc6\053\uffc6\054\uffc6\001\002\000\062\004\uffcb\005" + -- "\uffcb\007\uffcb\010\uffcb\025\uffcb\026\uffcb\027\uffcb\030\uffcb" + -- "\031\uffcb\032\uffcb\033\uffcb\035\uffcb\036\uffcb\042\uffcb\043" + -- "\uffcb\044\uffcb\045\uffcb\046\uffcb\047\uffcb\050\uffcb\051\uffcb" + -- "\052\uffcb\053\uffcb\054\uffcb\001\002\000\026\011\uffc2\026" + -- "\uffc2\027\uffc2\030\uffc2\031\uffc2\032\uffc2\033\uffc2\052\uffc2" + -- "\053\uffc2\054\uffc2\001\002\000\026\011\uffc0\026\uffc0\027" + -- "\uffc0\030\uffc0\031\uffc0\032\uffc0\033\uffc0\052\uffc0\053\uffc0" + -- "\054\uffc0\001\002\000\026\011\066\026\023\027\031\030" + -- "\020\031\042\032\035\033\032\052\055\053\063\054\064" + -- "\001\002\000\062\004\uffc8\005\uffc8\007\uffc8\010\uffc8\025" + -- "\uffc8\026\uffc8\027\uffc8\030\uffc8\031\uffc8\032\uffc8\033\uffc8" + -- "\035\uffc8\036\uffc8\042\uffc8\043\uffc8\044\uffc8\045\uffc8\046" + -- "\uffc8\047\uffc8\050\uffc8\051\uffc8\052\uffc8\053\uffc8\054\uffc8" + -- "\001\002\000\024\026\023\027\031\030\020\031\042\032" + -- "\035\033\032\052\055\053\052\054\053\001\002\000\062" + -- "\004\uffca\005\uffca\007\uffca\010\uffca\025\uffca\026\uffca\027" + -- "\uffca\030\uffca\031\uffca\032\uffca\033\uffca\035\uffca\036\uffca" + -- "\042\uffca\043\uffca\044\uffca\045\uffca\046\uffca\047\uffca\050" + -- "\uffca\051\uffca\052\uffca\053\uffca\054\uffca\001\002\000\026" + -- "\011\072\026\023\027\031\030\020\031\042\032\035\033" + -- "\032\052\055\053\063\054\064\001\002\000\062\004\uffc9" + -- "\005\uffc9\007\uffc9\010\uffc9\025\uffc9\026\uffc9\027\uffc9\030" + -- "\uffc9\031\uffc9\032\uffc9\033\uffc9\035\uffc9\036\uffc9\042\uffc9" + -- "\043\uffc9\044\uffc9\045\uffc9\046\uffc9\047\uffc9\050\uffc9\051" + -- "\uffc9\052\uffc9\053\uffc9\054\uffc9\001\002\000\026\011\074" + -- "\026\023\027\031\030\020\031\042\032\035\033\032\052" + -- "\055\053\063\054\064\001\002\000\062\004\uffc7\005\uffc7" + -- "\007\uffc7\010\uffc7\025\uffc7\026\uffc7\027\uffc7\030\uffc7\031" + -- "\uffc7\032\uffc7\033\uffc7\035\uffc7\036\uffc7\042\uffc7\043\uffc7" + -- "\044\uffc7\045\uffc7\046\uffc7\047\uffc7\050\uffc7\051\uffc7\052" + -- "\uffc7\053\uffc7\054\uffc7\001\002\000\062\004\uffd8\005\uffd8" + -- "\007\uffd8\010\uffd8\025\uffd8\026\uffd8\027\uffd8\030\uffd8\031" + -- "\uffd8\032\uffd8\033\uffd8\035\uffd8\036\uffd8\042\uffd8\043\uffd8" + -- "\044\uffd8\045\uffd8\046\uffd8\047\uffd8\050\uffd8\051\uffd8\052" + -- "\uffd8\053\uffd8\054\uffd8\001\002\000\062\004\uffd7\005\uffd7" + -- "\007\uffd7\010\uffd7\025\uffd7\026\uffd7\027\uffd7\030\uffd7\031" + -- "\uffd7\032\uffd7\033\uffd7\035\uffd7\036\uffd7\042\uffd7\043\uffd7" + -- "\044\uffd7\045\uffd7\046\uffd7\047\uffd7\050\uffd7\051\uffd7\052" + -- "\uffd7\053\uffd7\054\uffd7\001\002\000\006\021\101\042\102" + -- "\001\002\000\062\004\uffd6\005\uffd6\007\uffd6\010\uffd6\025" + -- "\uffd6\026\uffd6\027\uffd6\030\uffd6\031\uffd6\032\uffd6\033\uffd6" + -- "\035\uffd6\036\uffd6\042\uffd6\043\uffd6\044\uffd6\045\uffd6\046" + -- "\uffd6\047\uffd6\050\uffd6\051\uffd6\052\uffd6\053\uffd6\054\uffd6" + -- "\001\002\000\062\004\uffd5\005\uffd5\007\uffd5\010\uffd5\025" + -- "\uffd5\026\uffd5\027\uffd5\030\uffd5\031\uffd5\032\uffd5\033\uffd5" + -- "\035\uffd5\036\uffd5\042\uffd5\043\uffd5\044\uffd5\045\uffd5\046" + -- "\uffd5\047\uffd5\050\uffd5\051\uffd5\052\uffd5\053\uffd5\054\uffd5" + -- "\001\002\000\004\021\103\001\002\000\062\004\uffd4\005" + -- "\uffd4\007\uffd4\010\uffd4\025\uffd4\026\uffd4\027\uffd4\030\uffd4" + -- "\031\uffd4\032\uffd4\033\uffd4\035\uffd4\036\uffd4\042\uffd4\043" + -- "\uffd4\044\uffd4\045\uffd4\046\uffd4\047\uffd4\050\uffd4\051\uffd4" + -- "\052\uffd4\053\uffd4\054\uffd4\001\002\000\052\004\uffda\005" + -- "\uffda\007\uffda\010\uffda\025\uffda\026\uffda\027\uffda\030\uffda" + -- "\031\uffda\032\uffda\033\uffda\035\uffda\036\uffda\045\uffda\047" + -- "\uffda\050\uffda\051\uffda\052\uffda\053\uffda\054\uffda\001\002" + -- "\000\006\005\107\045\106\001\002\000\036\004\034\010" + -- "\044\026\023\027\031\030\020\031\042\032\035\033\032" + -- "\047\022\050\037\051\024\052\021\053\030\054\025\001" + -- "\002\000\062\004\uffd3\005\uffd3\007\uffd3\010\uffd3\025\uffd3" + -- "\026\uffd3\027\uffd3\030\uffd3\031\uffd3\032\uffd3\033\uffd3\035" + -- "\uffd3\036\uffd3\042\uffd3\043\uffd3\044\uffd3\045\uffd3\046\uffd3" + -- "\047\uffd3\050\uffd3\051\uffd3\052\uffd3\053\uffd3\054\uffd3\001" + -- "\002\000\052\004\034\005\uffe0\007\uffe0\010\044\025\uffe0" + -- "\026\023\027\031\030\020\031\042\032\035\033\032\035" + -- "\uffe0\036\uffe0\045\uffe0\047\022\050\037\051\024\052\021" + -- "\053\030\054\025\001\002\000\052\004\uffdd\005\uffdd\007" + -- "\uffdd\010\uffdd\025\uffdd\026\uffdd\027\uffdd\030\uffdd\031\uffdd" + -- "\032\uffdd\033\uffdd\035\uffdd\036\uffdd\045\uffdd\047\uffdd\050" + -- "\uffdd\051\uffdd\052\uffdd\053\uffdd\054\uffdd\001\002\000\014" + -- "\013\ufff8\022\ufff8\023\ufff8\024\ufff8\040\ufff8\001\002\000" + -- "\052\004\uffd9\005\uffd9\007\uffd9\010\uffd9\025\uffd9\026\uffd9" + -- "\027\uffd9\030\uffd9\031\uffd9\032\uffd9\033\uffd9\035\uffd9\036" + -- "\uffd9\045\uffd9\047\uffd9\050\uffd9\051\uffd9\052\uffd9\053\uffd9" + -- "\054\uffd9\001\002\000\054\002\uffee\003\uffee\004\uffee\006" + -- "\uffee\010\uffee\016\uffee\021\uffee\026\uffee\027\uffee\030\uffee" + -- "\031\uffee\032\uffee\033\uffee\034\uffee\045\uffee\047\uffee\050" + -- "\uffee\051\uffee\052\uffee\053\uffee\054\uffee\001\002\000\044" + -- "\004\uffe1\006\142\010\uffe1\026\uffe1\027\uffe1\030\uffe1\031" + -- "\uffe1\032\uffe1\033\uffe1\034\140\045\uffe1\047\uffe1\050\uffe1" + -- "\051\uffe1\052\uffe1\053\uffe1\054\uffe1\001\002\000\004\040" + -- "\124\001\002\000\054\002\ufff3\003\ufff3\004\ufff3\006\ufff3" + -- "\010\ufff3\016\ufff3\021\ufff3\026\ufff3\027\ufff3\030\ufff3\031" + -- "\ufff3\032\ufff3\033\ufff3\034\ufff3\045\ufff3\047\ufff3\050\ufff3" + -- "\051\ufff3\052\ufff3\053\ufff3\054\ufff3\001\002\000\052\002" + -- "\000\003\114\004\uffe6\006\uffe6\010\uffe6\016\121\026\uffe6" + -- "\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6\034\uffe6\045" + -- "\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6\054\uffe6" + -- "\001\002\000\004\040\124\001\002\000\054\002\ufff6\003" + -- "\ufff6\004\ufff6\006\ufff6\010\ufff6\016\ufff6\021\ufff6\026\ufff6" + -- "\027\ufff6\030\ufff6\031\ufff6\032\ufff6\033\ufff6\034\ufff6\045" + -- "\ufff6\047\ufff6\050\ufff6\051\ufff6\052\ufff6\053\ufff6\054\ufff6" + -- "\001\002\000\004\017\127\001\002\000\006\015\125\017" + -- "\uffe4\001\002\000\006\017\uffe3\040\124\001\002\000\004" + -- "\017\uffe5\001\002\000\046\004\uffe7\006\uffe7\010\uffe7\020" + -- "\130\026\uffe7\027\uffe7\030\uffe7\031\uffe7\032\uffe7\033\uffe7" + -- "\034\uffe7\045\uffe7\047\uffe7\050\uffe7\051\uffe7\052\uffe7\053" + -- "\uffe7\054\uffe7\001\002\000\050\003\114\004\uffe6\006\uffe6" + -- "\010\uffe6\016\116\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032" + -- "\uffe6\033\uffe6\034\uffe6\045\uffe6\047\uffe6\050\uffe6\051\uffe6" + -- "\052\uffe6\053\uffe6\054\uffe6\001\002\000\052\003\114\004" + -- "\uffe6\006\uffe6\010\uffe6\016\121\021\132\026\uffe6\027\uffe6" + -- "\030\uffe6\031\uffe6\032\uffe6\033\uffe6\034\uffe6\045\uffe6\047" + -- "\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6\054\uffe6\001\002" + -- "\000\054\002\ufff5\003\ufff5\004\ufff5\006\ufff5\010\ufff5\016" + -- "\ufff5\021\ufff5\026\ufff5\027\ufff5\030\ufff5\031\ufff5\032\ufff5" + -- "\033\ufff5\034\ufff5\045\ufff5\047\ufff5\050\ufff5\051\ufff5\052" + -- "\ufff5\053\ufff5\054\ufff5\001\002\000\004\017\134\001\002" + -- "\000\046\004\uffe7\006\uffe7\010\uffe7\020\135\026\uffe7\027" + -- "\uffe7\030\uffe7\031\uffe7\032\uffe7\033\uffe7\034\uffe7\045\uffe7" + -- "\047\uffe7\050\uffe7\051\uffe7\052\uffe7\053\uffe7\054\uffe7\001" + -- "\002\000\050\003\114\004\uffe6\006\uffe6\010\uffe6\016\116" + -- "\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6\034" + -- "\uffe6\045\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6" + -- "\054\uffe6\001\002\000\052\003\114\004\uffe6\006\uffe6\010" + -- "\uffe6\016\121\021\137\026\uffe6\027\uffe6\030\uffe6\031\uffe6" + -- "\032\uffe6\033\uffe6\034\uffe6\045\uffe6\047\uffe6\050\uffe6\051" + -- "\uffe6\052\uffe6\053\uffe6\054\uffe6\001\002\000\054\002\ufff4" + -- "\003\ufff4\004\ufff4\006\ufff4\010\ufff4\016\ufff4\021\ufff4\026" + -- "\ufff4\027\ufff4\030\ufff4\031\ufff4\032\ufff4\033\ufff4\034\ufff4" + -- "\045\ufff4\047\ufff4\050\ufff4\051\ufff4\052\ufff4\053\ufff4\054" + -- "\ufff4\001\002\000\004\037\160\001\002\000\040\004\034" + -- "\010\044\026\023\027\031\030\020\031\042\032\035\033" + -- "\032\045\041\047\022\050\037\051\024\052\021\053\030" + -- "\054\025\001\002\000\040\004\uffe2\010\uffe2\026\uffe2\027" + -- "\uffe2\030\uffe2\031\uffe2\032\uffe2\033\uffe2\045\uffe2\047\uffe2" + -- "\050\uffe2\051\uffe2\052\uffe2\053\uffe2\054\uffe2\001\002\000" + -- "\014\007\152\025\147\035\144\036\146\045\106\001\002" + -- "\000\054\002\uffe8\003\uffe8\004\uffe8\006\uffe8\010\uffe8\016" + -- "\uffe8\021\uffe8\026\uffe8\027\uffe8\030\uffe8\031\uffe8\032\uffe8" + -- "\033\uffe8\034\uffe8\045\uffe8\047\uffe8\050\uffe8\051\uffe8\052" + -- "\uffe8\053\uffe8\054\uffe8\001\002\000\054\002\uffe9\003\uffe9" + -- "\004\uffe9\006\uffe9\010\uffe9\016\uffe9\021\uffe9\026\uffe9\027" + -- "\uffe9\030\uffe9\031\uffe9\032\uffe9\033\uffe9\034\uffe9\045\uffe9" + -- "\047\uffe9\050\uffe9\051\uffe9\052\uffe9\053\uffe9\054\uffe9\001" + -- "\002\000\040\004\034\010\044\026\023\027\031\030\020" + -- "\031\042\032\035\033\032\045\041\047\022\050\037\051" + -- "\024\052\021\053\030\054\025\001\002\000\004\037\155" + -- "\001\002\000\006\025\147\035\153\001\002\000\054\002" + -+ "\014\013\ufffc\022\ufffc\023\ufffc\024\ufffc\076\ufffc\001\002" + -+ "\000\014\013\012\022\011\023\016\024\015\076\014\001" + -+ "\002\000\014\013\ufffb\022\ufffb\023\ufffb\024\ufffb\076\ufffb" + -+ "\001\002\000\144\003\152\004\uffe6\006\uffe6\010\uffe6\016" + -+ "\154\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6" + -+ "\034\uffe6\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044" + -+ "\uffe6\045\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6" + -+ "\053\uffe6\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061" + -+ "\uffe6\062\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6" + -+ "\070\uffe6\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105" + -+ "\uffe6\106\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002" + -+ "\000\014\013\ufffd\022\ufffd\023\ufffd\024\ufffd\076\ufffd\001" + -+ "\002\000\004\014\017\001\002\000\014\013\ufff9\022\ufff9" + -+ "\023\ufff9\024\ufff9\076\ufff9\001\002\000\014\013\ufffa\022" + -+ "\ufffa\023\ufffa\024\ufffa\076\ufffa\001\002\000\146\004\066" + -+ "\010\064\013\ufff7\022\ufff7\023\ufff7\024\ufff7\026\056\027" + -+ "\043\030\072\031\060\032\076\033\023\037\061\040\033" + -+ "\041\021\042\074\043\063\044\062\045\073\046\071\047" + -+ "\036\050\050\051\101\052\053\053\052\054\047\055\055" + -+ "\056\054\057\044\060\042\061\067\062\040\063\102\064" + -+ "\032\065\051\066\031\067\034\070\020\071\075\072\100" + -+ "\073\025\074\026\076\ufff7\103\037\105\070\106\041\107" + -+ "\035\110\022\111\077\112\024\001\002\000\160\004\uff9d" + -+ "\005\uff9d\007\uff9d\010\uff9d\011\uff9d\025\uff9d\026\uff9d\027" + -+ "\uff9d\030\uff9d\031\uff9d\032\uff9d\033\uff9d\035\uff9d\036\uff9d" + -+ "\037\uff9d\040\uff9d\041\uff9d\042\uff9d\043\uff9d\044\uff9d\045" + -+ "\uff9d\046\uff9d\047\uff9d\050\uff9d\051\uff9d\052\uff9d\053\uff9d" + -+ "\054\uff9d\055\uff9d\056\uff9d\057\uff9d\060\uff9d\061\uff9d\062" + -+ "\uff9d\063\uff9d\064\uff9d\065\uff9d\066\uff9d\067\uff9d\070\uff9d" + -+ "\071\uff9d\072\uff9d\073\uff9d\074\uff9d\100\uff9d\101\uff9d\102" + -+ "\uff9d\103\uff9d\104\uff9d\105\uff9d\106\uff9d\107\uff9d\110\uff9d" + -+ "\111\uff9d\112\uff9d\001\002\000\160\004\uffb4\005\uffb4\007" + -+ "\uffb4\010\uffb4\011\uffb4\025\uffb4\026\uffb4\027\uffb4\030\uffb4" + -+ "\031\uffb4\032\uffb4\033\uffb4\035\uffb4\036\uffb4\037\uffb4\040" + -+ "\uffb4\041\uffb4\042\uffb4\043\uffb4\044\uffb4\045\uffb4\046\uffb4" + -+ "\047\uffb4\050\uffb4\051\uffb4\052\uffb4\053\uffb4\054\uffb4\055" + -+ "\uffb4\056\uffb4\057\uffb4\060\uffb4\061\uffb4\062\uffb4\063\uffb4" + -+ "\064\uffb4\065\uffb4\066\uffb4\067\uffb4\070\uffb4\071\uffb4\072" + -+ "\uffb4\073\uffb4\074\uffb4\100\uffb4\101\uffb4\102\uffb4\103\uffb4" + -+ "\104\uffb4\105\uffb4\106\uffb4\107\uffb4\110\uffb4\111\uffb4\112" + -+ "\uffb4\001\002\000\156\004\uffcd\005\uffcd\007\uffcd\010\uffcd" + -+ "\025\uffcd\026\uffcd\027\uffcd\030\uffcd\031\uffcd\032\uffcd\033" + -+ "\uffcd\035\uffcd\036\uffcd\037\uffcd\040\uffcd\041\uffcd\042\uffcd" + -+ "\043\uffcd\044\uffcd\045\uffcd\046\uffcd\047\uffcd\050\uffcd\051" + -+ "\uffcd\052\uffcd\053\uffcd\054\uffcd\055\uffcd\056\uffcd\057\uffcd" + -+ "\060\uffcd\061\uffcd\062\uffcd\063\uffcd\064\uffcd\065\uffcd\066" + -+ "\uffcd\067\uffcd\070\uffcd\071\uffcd\072\uffcd\073\uffcd\074\uffcd" + -+ "\100\uffcd\101\uffcd\102\uffcd\103\uffcd\104\uffcd\105\uffcd\106" + -+ "\uffcd\107\uffcd\110\uffcd\111\uffcd\112\uffcd\001\002\000\160" + -+ "\004\uffb7\005\uffb7\007\uffb7\010\uffb7\011\uffb7\025\uffb7\026" + -+ "\uffb7\027\uffb7\030\uffb7\031\uffb7\032\uffb7\033\uffb7\035\uffb7" + -+ "\036\uffb7\037\uffb7\040\uffb7\041\uffb7\042\uffb7\043\uffb7\044" + -+ "\uffb7\045\uffb7\046\uffb7\047\uffb7\050\uffb7\051\uffb7\052\uffb7" + -+ "\053\uffb7\054\uffb7\055\uffb7\056\uffb7\057\uffb7\060\uffb7\061" + -+ "\uffb7\062\uffb7\063\uffb7\064\uffb7\065\uffb7\066\uffb7\067\uffb7" + -+ "\070\uffb7\071\uffb7\072\uffb7\073\uffb7\074\uffb7\100\uffb7\101" + -+ "\uffb7\102\uffb7\103\uffb7\104\uffb7\105\uffb7\106\uffb7\107\uffb7" + -+ "\110\uffb7\111\uffb7\112\uffb7\001\002\000\156\004\uffd2\005" + -+ "\uffd2\007\uffd2\010\uffd2\025\uffd2\026\uffd2\027\uffd2\030\uffd2" + -+ "\031\uffd2\032\uffd2\033\uffd2\035\uffd2\036\uffd2\037\uffd2\040" + -+ "\uffd2\041\uffd2\042\uffd2\043\uffd2\044\uffd2\045\uffd2\046\uffd2" + -+ "\047\uffd2\050\uffd2\051\uffd2\052\uffd2\053\uffd2\054\uffd2\055" + -+ "\uffd2\056\uffd2\057\uffd2\060\uffd2\061\uffd2\062\uffd2\063\uffd2" + -+ "\064\uffd2\065\uffd2\066\uffd2\067\uffd2\070\uffd2\071\uffd2\072" + -+ "\uffd2\073\uffd2\074\uffd2\100\uffd2\101\uffd2\102\uffd2\103\uffd2" + -+ "\104\uffd2\105\uffd2\106\uffd2\107\uffd2\110\uffd2\111\uffd2\112" + -+ "\uffd2\001\002\000\160\004\uff9a\005\uff9a\007\uff9a\010\uff9a" + -+ "\011\uff9a\025\uff9a\026\uff9a\027\uff9a\030\uff9a\031\uff9a\032" + -+ "\uff9a\033\uff9a\035\uff9a\036\uff9a\037\uff9a\040\uff9a\041\uff9a" + -+ "\042\uff9a\043\uff9a\044\uff9a\045\uff9a\046\uff9a\047\uff9a\050" + -+ "\uff9a\051\uff9a\052\uff9a\053\uff9a\054\uff9a\055\uff9a\056\uff9a" + -+ "\057\uff9a\060\uff9a\061\uff9a\062\uff9a\063\uff9a\064\uff9a\065" + -+ "\uff9a\066\uff9a\067\uff9a\070\uff9a\071\uff9a\072\uff9a\073\uff9a" + -+ "\074\uff9a\100\uff9a\101\uff9a\102\uff9a\103\uff9a\104\uff9a\105" + -+ "\uff9a\106\uff9a\107\uff9a\110\uff9a\111\uff9a\112\uff9a\001\002" + -+ "\000\160\004\uff99\005\uff99\007\uff99\010\uff99\011\uff99\025" + -+ "\uff99\026\uff99\027\uff99\030\uff99\031\uff99\032\uff99\033\uff99" + -+ "\035\uff99\036\uff99\037\uff99\040\uff99\041\uff99\042\uff99\043" + -+ "\uff99\044\uff99\045\uff99\046\uff99\047\uff99\050\uff99\051\uff99" + -+ "\052\uff99\053\uff99\054\uff99\055\uff99\056\uff99\057\uff99\060" + -+ "\uff99\061\uff99\062\uff99\063\uff99\064\uff99\065\uff99\066\uff99" + -+ "\067\uff99\070\uff99\071\uff99\072\uff99\073\uff99\074\uff99\100" + -+ "\uff99\101\uff99\102\uff99\103\uff99\104\uff99\105\uff99\106\uff99" + -+ "\107\uff99\110\uff99\111\uff99\112\uff99\001\002\000\006\025" + -+ "\151\103\104\001\002\000\146\004\066\005\uffdf\007\uffdf" + -+ "\010\064\025\uffdf\026\056\027\043\030\072\031\060\032" + -+ "\076\033\023\035\uffdf\036\uffdf\037\061\040\033\041\021" + -+ "\042\074\043\063\044\062\045\073\046\071\047\036\050" + -+ "\050\051\101\052\053\053\052\054\047\055\055\056\054" + -+ "\057\044\060\042\061\067\062\040\063\102\064\032\065" + -+ "\051\066\031\067\034\070\020\071\075\072\100\073\025" + -+ "\074\026\103\uffdf\105\070\106\041\107\035\110\022\111" + -+ "\077\112\024\001\002\000\160\004\uff9f\005\uff9f\007\uff9f" + -+ "\010\uff9f\011\uff9f\025\uff9f\026\uff9f\027\uff9f\030\uff9f\031" + -+ "\uff9f\032\uff9f\033\uff9f\035\uff9f\036\uff9f\037\uff9f\040\uff9f" + -+ "\041\uff9f\042\uff9f\043\uff9f\044\uff9f\045\uff9f\046\uff9f\047" + -+ "\uff9f\050\uff9f\051\uff9f\052\uff9f\053\uff9f\054\uff9f\055\uff9f" + -+ "\056\uff9f\057\uff9f\060\uff9f\061\uff9f\062\uff9f\063\uff9f\064" + -+ "\uff9f\065\uff9f\066\uff9f\067\uff9f\070\uff9f\071\uff9f\072\uff9f" + -+ "\073\uff9f\074\uff9f\100\uff9f\101\uff9f\102\uff9f\103\uff9f\104" + -+ "\uff9f\105\uff9f\106\uff9f\107\uff9f\110\uff9f\111\uff9f\112\uff9f" + -+ "\001\002\000\160\004\uffa1\005\uffa1\007\uffa1\010\uffa1\011" + -+ "\uffa1\025\uffa1\026\uffa1\027\uffa1\030\uffa1\031\uffa1\032\uffa1" + -+ "\033\uffa1\035\uffa1\036\uffa1\037\uffa1\040\uffa1\041\uffa1\042" + -+ "\uffa1\043\uffa1\044\uffa1\045\uffa1\046\uffa1\047\uffa1\050\uffa1" + -+ "\051\uffa1\052\uffa1\053\uffa1\054\uffa1\055\uffa1\056\uffa1\057" + -+ "\uffa1\060\uffa1\061\uffa1\062\uffa1\063\uffa1\064\uffa1\065\uffa1" + -+ "\066\uffa1\067\uffa1\070\uffa1\071\uffa1\072\uffa1\073\uffa1\074" + -+ "\uffa1\100\uffa1\101\uffa1\102\uffa1\103\uffa1\104\uffa1\105\uffa1" + -+ "\106\uffa1\107\uffa1\110\uffa1\111\uffa1\112\uffa1\001\002\000" + -+ "\160\004\uffb5\005\uffb5\007\uffb5\010\uffb5\011\uffb5\025\uffb5" + -+ "\026\uffb5\027\uffb5\030\uffb5\031\uffb5\032\uffb5\033\uffb5\035" + -+ "\uffb5\036\uffb5\037\uffb5\040\uffb5\041\uffb5\042\uffb5\043\uffb5" + -+ "\044\uffb5\045\uffb5\046\uffb5\047\uffb5\050\uffb5\051\uffb5\052" + -+ "\uffb5\053\uffb5\054\uffb5\055\uffb5\056\uffb5\057\uffb5\060\uffb5" + -+ "\061\uffb5\062\uffb5\063\uffb5\064\uffb5\065\uffb5\066\uffb5\067" + -+ "\uffb5\070\uffb5\071\uffb5\072\uffb5\073\uffb5\074\uffb5\100\uffb5" + -+ "\101\uffb5\102\uffb5\103\uffb5\104\uffb5\105\uffb5\106\uffb5\107" + -+ "\uffb5\110\uffb5\111\uffb5\112\uffb5\001\002\000\160\004\uff9e" + -+ "\005\uff9e\007\uff9e\010\uff9e\011\uff9e\025\uff9e\026\uff9e\027" + -+ "\uff9e\030\uff9e\031\uff9e\032\uff9e\033\uff9e\035\uff9e\036\uff9e" + -+ "\037\uff9e\040\uff9e\041\uff9e\042\uff9e\043\uff9e\044\uff9e\045" + -+ "\uff9e\046\uff9e\047\uff9e\050\uff9e\051\uff9e\052\uff9e\053\uff9e" + -+ "\054\uff9e\055\uff9e\056\uff9e\057\uff9e\060\uff9e\061\uff9e\062" + -+ "\uff9e\063\uff9e\064\uff9e\065\uff9e\066\uff9e\067\uff9e\070\uff9e" + -+ "\071\uff9e\072\uff9e\073\uff9e\074\uff9e\100\uff9e\101\uff9e\102" + -+ "\uff9e\103\uff9e\104\uff9e\105\uff9e\106\uff9e\107\uff9e\110\uff9e" + -+ "\111\uff9e\112\uff9e\001\002\000\132\004\066\010\064\026" + -+ "\056\027\043\030\072\031\060\032\076\033\023\037\061" + -+ "\040\033\041\021\042\074\043\063\044\062\045\073\046" + -+ "\071\047\036\050\050\051\101\052\053\053\052\054\047" + -+ "\055\055\056\054\057\044\060\042\061\067\062\040\063" + -+ "\102\064\032\065\051\066\031\067\034\070\020\071\075" + -+ "\072\100\073\025\074\026\105\070\106\041\107\035\110" + -+ "\022\111\077\112\024\001\002\000\160\004\uffae\005\uffae" + -+ "\007\uffae\010\uffae\011\uffae\025\uffae\026\uffae\027\uffae\030" + -+ "\uffae\031\uffae\032\uffae\033\uffae\035\uffae\036\uffae\037\uffae" + -+ "\040\uffae\041\uffae\042\uffae\043\uffae\044\uffae\045\uffae\046" + -+ "\uffae\047\uffae\050\uffae\051\uffae\052\uffae\053\uffae\054\uffae" + -+ "\055\uffae\056\uffae\057\uffae\060\uffae\061\uffae\062\uffae\063" + -+ "\uffae\064\uffae\065\uffae\066\uffae\067\uffae\070\uffae\071\uffae" + -+ "\072\uffae\073\uffae\074\uffae\100\uffae\101\uffae\102\uffae\103" + -+ "\uffae\104\uffae\105\uffae\106\uffae\107\uffae\110\uffae\111\uffae" + -+ "\112\uffae\001\002\000\016\005\uffde\007\uffde\025\uffde\035" + -+ "\uffde\036\uffde\103\uffde\001\002\000\160\004\uffa3\005\uffa3" + -+ "\007\uffa3\010\uffa3\011\uffa3\025\uffa3\026\uffa3\027\uffa3\030" + -+ "\uffa3\031\uffa3\032\uffa3\033\uffa3\035\uffa3\036\uffa3\037\uffa3" + -+ "\040\uffa3\041\uffa3\042\uffa3\043\uffa3\044\uffa3\045\uffa3\046" + -+ "\uffa3\047\uffa3\050\uffa3\051\uffa3\052\uffa3\053\uffa3\054\uffa3" + -+ "\055\uffa3\056\uffa3\057\uffa3\060\uffa3\061\uffa3\062\uffa3\063" + -+ "\uffa3\064\uffa3\065\uffa3\066\uffa3\067\uffa3\070\uffa3\071\uffa3" + -+ "\072\uffa3\073\uffa3\074\uffa3\100\uffa3\101\uffa3\102\uffa3\103" + -+ "\uffa3\104\uffa3\105\uffa3\106\uffa3\107\uffa3\110\uffa3\111\uffa3" + -+ "\112\uffa3\001\002\000\132\004\066\010\064\026\056\027" + -+ "\043\030\072\031\060\032\076\033\023\037\061\040\033" + -+ "\041\021\042\074\043\063\044\062\045\073\046\071\047" + -+ "\036\050\050\051\101\052\053\053\052\054\047\055\055" + -+ "\056\054\057\044\060\042\061\067\062\040\063\102\064" + -+ "\032\065\051\066\031\067\034\070\020\071\075\072\100" + -+ "\073\025\074\026\105\070\106\041\107\035\110\022\111" + -+ "\077\112\024\001\002\000\160\004\uffa5\005\uffa5\007\uffa5" + -+ "\010\uffa5\011\uffa5\025\uffa5\026\uffa5\027\uffa5\030\uffa5\031" + -+ "\uffa5\032\uffa5\033\uffa5\035\uffa5\036\uffa5\037\uffa5\040\uffa5" + -+ "\041\uffa5\042\uffa5\043\uffa5\044\uffa5\045\uffa5\046\uffa5\047" + -+ "\uffa5\050\uffa5\051\uffa5\052\uffa5\053\uffa5\054\uffa5\055\uffa5" + -+ "\056\uffa5\057\uffa5\060\uffa5\061\uffa5\062\uffa5\063\uffa5\064" + -+ "\uffa5\065\uffa5\066\uffa5\067\uffa5\070\uffa5\071\uffa5\072\uffa5" + -+ "\073\uffa5\074\uffa5\100\uffa5\101\uffa5\102\uffa5\103\uffa5\104" + -+ "\uffa5\105\uffa5\106\uffa5\107\uffa5\110\uffa5\111\uffa5\112\uffa5" + -+ "\001\002\000\160\004\uffbb\005\uffbb\007\uffbb\010\uffbb\011" + -+ "\uffbb\025\uffbb\026\uffbb\027\uffbb\030\uffbb\031\uffbb\032\uffbb" + -+ "\033\uffbb\035\uffbb\036\uffbb\037\uffbb\040\uffbb\041\uffbb\042" + -+ "\uffbb\043\uffbb\044\uffbb\045\uffbb\046\uffbb\047\uffbb\050\uffbb" + -+ "\051\uffbb\052\uffbb\053\uffbb\054\uffbb\055\uffbb\056\uffbb\057" + -+ "\uffbb\060\uffbb\061\uffbb\062\uffbb\063\uffbb\064\uffbb\065\uffbb" + -+ "\066\uffbb\067\uffbb\070\uffbb\071\uffbb\072\uffbb\073\uffbb\074" + -+ "\uffbb\100\uffbb\101\uffbb\102\uffbb\103\uffbb\104\uffbb\105\uffbb" + -+ "\106\uffbb\107\uffbb\110\uffbb\111\uffbb\112\uffbb\001\002\000" + -+ "\160\004\uffa6\005\uffa6\007\uffa6\010\uffa6\011\uffa6\025\uffa6" + -+ "\026\uffa6\027\uffa6\030\uffa6\031\uffa6\032\uffa6\033\uffa6\035" + -+ "\uffa6\036\uffa6\037\uffa6\040\uffa6\041\uffa6\042\uffa6\043\uffa6" + -+ "\044\uffa6\045\uffa6\046\uffa6\047\uffa6\050\uffa6\051\uffa6\052" + -+ "\uffa6\053\uffa6\054\uffa6\055\uffa6\056\uffa6\057\uffa6\060\uffa6" + -+ "\061\uffa6\062\uffa6\063\uffa6\064\uffa6\065\uffa6\066\uffa6\067" + -+ "\uffa6\070\uffa6\071\uffa6\072\uffa6\073\uffa6\074\uffa6\100\uffa6" + -+ "\101\uffa6\102\uffa6\103\uffa6\104\uffa6\105\uffa6\106\uffa6\107" + -+ "\uffa6\110\uffa6\111\uffa6\112\uffa6\001\002\000\156\004\uffdb" + -+ "\005\uffdb\007\uffdb\010\uffdb\025\uffdb\026\uffdb\027\uffdb\030" + -+ "\uffdb\031\uffdb\032\uffdb\033\uffdb\035\uffdb\036\uffdb\037\uffdb" + -+ "\040\uffdb\041\uffdb\042\uffdb\043\uffdb\044\uffdb\045\uffdb\046" + -+ "\uffdb\047\uffdb\050\uffdb\051\uffdb\052\uffdb\053\uffdb\054\uffdb" + -+ "\055\uffdb\056\uffdb\057\uffdb\060\uffdb\061\uffdb\062\uffdb\063" + -+ "\uffdb\064\uffdb\065\uffdb\066\uffdb\067\uffdb\070\uffdb\071\uffdb" + -+ "\072\uffdb\073\uffdb\074\uffdb\100\142\101\140\102\141\103" + -+ "\uffdb\104\143\105\uffdb\106\uffdb\107\uffdb\110\uffdb\111\uffdb" + -+ "\112\uffdb\001\002\000\156\004\uffd0\005\uffd0\007\uffd0\010" + -+ "\uffd0\025\uffd0\026\uffd0\027\uffd0\030\uffd0\031\uffd0\032\uffd0" + -+ "\033\uffd0\035\uffd0\036\uffd0\037\uffd0\040\uffd0\041\uffd0\042" + -+ "\uffd0\043\uffd0\044\uffd0\045\uffd0\046\uffd0\047\uffd0\050\uffd0" + -+ "\051\uffd0\052\uffd0\053\uffd0\054\uffd0\055\uffd0\056\uffd0\057" + -+ "\uffd0\060\uffd0\061\uffd0\062\uffd0\063\uffd0\064\uffd0\065\uffd0" + -+ "\066\uffd0\067\uffd0\070\uffd0\071\uffd0\072\uffd0\073\uffd0\074" + -+ "\uffd0\100\uffd0\101\uffd0\102\uffd0\103\uffd0\104\uffd0\105\uffd0" + -+ "\106\uffd0\107\uffd0\110\uffd0\111\uffd0\112\uffd0\001\002\000" + -+ "\160\004\uffa9\005\uffa9\007\uffa9\010\uffa9\011\uffa9\025\uffa9" + -+ "\026\uffa9\027\uffa9\030\uffa9\031\uffa9\032\uffa9\033\uffa9\035" + -+ "\uffa9\036\uffa9\037\uffa9\040\uffa9\041\uffa9\042\uffa9\043\uffa9" + -+ "\044\uffa9\045\uffa9\046\uffa9\047\uffa9\050\uffa9\051\uffa9\052" + -+ "\uffa9\053\uffa9\054\uffa9\055\uffa9\056\uffa9\057\uffa9\060\uffa9" + -+ "\061\uffa9\062\uffa9\063\uffa9\064\uffa9\065\uffa9\066\uffa9\067" + -+ "\uffa9\070\uffa9\071\uffa9\072\uffa9\073\uffa9\074\uffa9\100\uffa9" + -+ "\101\uffa9\102\uffa9\103\uffa9\104\uffa9\105\uffa9\106\uffa9\107" + -+ "\uffa9\110\uffa9\111\uffa9\112\uffa9\001\002\000\160\004\uffad" + -+ "\005\uffad\007\uffad\010\uffad\011\uffad\025\uffad\026\uffad\027" + -+ "\uffad\030\uffad\031\uffad\032\uffad\033\uffad\035\uffad\036\uffad" + -+ "\037\uffad\040\uffad\041\uffad\042\uffad\043\uffad\044\uffad\045" + -+ "\uffad\046\uffad\047\uffad\050\uffad\051\uffad\052\uffad\053\uffad" + -+ "\054\uffad\055\uffad\056\uffad\057\uffad\060\uffad\061\uffad\062" + -+ "\uffad\063\uffad\064\uffad\065\uffad\066\uffad\067\uffad\070\uffad" + -+ "\071\uffad\072\uffad\073\uffad\074\uffad\100\uffad\101\uffad\102" + -+ "\uffad\103\uffad\104\uffad\105\uffad\106\uffad\107\uffad\110\uffad" + -+ "\111\uffad\112\uffad\001\002\000\160\004\uffa0\005\uffa0\007" + -+ "\uffa0\010\uffa0\011\uffa0\025\uffa0\026\uffa0\027\uffa0\030\uffa0" + -+ "\031\uffa0\032\uffa0\033\uffa0\035\uffa0\036\uffa0\037\uffa0\040" + -+ "\uffa0\041\uffa0\042\uffa0\043\uffa0\044\uffa0\045\uffa0\046\uffa0" + -+ "\047\uffa0\050\uffa0\051\uffa0\052\uffa0\053\uffa0\054\uffa0\055" + -+ "\uffa0\056\uffa0\057\uffa0\060\uffa0\061\uffa0\062\uffa0\063\uffa0" + -+ "\064\uffa0\065\uffa0\066\uffa0\067\uffa0\070\uffa0\071\uffa0\072" + -+ "\uffa0\073\uffa0\074\uffa0\100\uffa0\101\uffa0\102\uffa0\103\uffa0" + -+ "\104\uffa0\105\uffa0\106\uffa0\107\uffa0\110\uffa0\111\uffa0\112" + -+ "\uffa0\001\002\000\160\004\uffaa\005\uffaa\007\uffaa\010\uffaa" + -+ "\011\uffaa\025\uffaa\026\uffaa\027\uffaa\030\uffaa\031\uffaa\032" + -+ "\uffaa\033\uffaa\035\uffaa\036\uffaa\037\uffaa\040\uffaa\041\uffaa" + -+ "\042\uffaa\043\uffaa\044\uffaa\045\uffaa\046\uffaa\047\uffaa\050" + -+ "\uffaa\051\uffaa\052\uffaa\053\uffaa\054\uffaa\055\uffaa\056\uffaa" + -+ "\057\uffaa\060\uffaa\061\uffaa\062\uffaa\063\uffaa\064\uffaa\065" + -+ "\uffaa\066\uffaa\067\uffaa\070\uffaa\071\uffaa\072\uffaa\073\uffaa" + -+ "\074\uffaa\100\uffaa\101\uffaa\102\uffaa\103\uffaa\104\uffaa\105" + -+ "\uffaa\106\uffaa\107\uffaa\110\uffaa\111\uffaa\112\uffaa\001\002" + -+ "\000\160\004\uffab\005\uffab\007\uffab\010\uffab\011\uffab\025" + -+ "\uffab\026\uffab\027\uffab\030\uffab\031\uffab\032\uffab\033\uffab" + -+ "\035\uffab\036\uffab\037\uffab\040\uffab\041\uffab\042\uffab\043" + -+ "\uffab\044\uffab\045\uffab\046\uffab\047\uffab\050\uffab\051\uffab" + -+ "\052\uffab\053\uffab\054\uffab\055\uffab\056\uffab\057\uffab\060" + -+ "\uffab\061\uffab\062\uffab\063\uffab\064\uffab\065\uffab\066\uffab" + -+ "\067\uffab\070\uffab\071\uffab\072\uffab\073\uffab\074\uffab\100" + -+ "\uffab\101\uffab\102\uffab\103\uffab\104\uffab\105\uffab\106\uffab" + -+ "\107\uffab\110\uffab\111\uffab\112\uffab\001\002\000\160\004" + -+ "\uffa7\005\uffa7\007\uffa7\010\uffa7\011\uffa7\025\uffa7\026\uffa7" + -+ "\027\uffa7\030\uffa7\031\uffa7\032\uffa7\033\uffa7\035\uffa7\036" + -+ "\uffa7\037\uffa7\040\uffa7\041\uffa7\042\uffa7\043\uffa7\044\uffa7" + -+ "\045\uffa7\046\uffa7\047\uffa7\050\uffa7\051\uffa7\052\uffa7\053" + -+ "\uffa7\054\uffa7\055\uffa7\056\uffa7\057\uffa7\060\uffa7\061\uffa7" + -+ "\062\uffa7\063\uffa7\064\uffa7\065\uffa7\066\uffa7\067\uffa7\070" + -+ "\uffa7\071\uffa7\072\uffa7\073\uffa7\074\uffa7\100\uffa7\101\uffa7" + -+ "\102\uffa7\103\uffa7\104\uffa7\105\uffa7\106\uffa7\107\uffa7\110" + -+ "\uffa7\111\uffa7\112\uffa7\001\002\000\160\004\uffa8\005\uffa8" + -+ "\007\uffa8\010\uffa8\011\uffa8\025\uffa8\026\uffa8\027\uffa8\030" + -+ "\uffa8\031\uffa8\032\uffa8\033\uffa8\035\uffa8\036\uffa8\037\uffa8" + -+ "\040\uffa8\041\uffa8\042\uffa8\043\uffa8\044\uffa8\045\uffa8\046" + -+ "\uffa8\047\uffa8\050\uffa8\051\uffa8\052\uffa8\053\uffa8\054\uffa8" + -+ "\055\uffa8\056\uffa8\057\uffa8\060\uffa8\061\uffa8\062\uffa8\063" + -+ "\uffa8\064\uffa8\065\uffa8\066\uffa8\067\uffa8\070\uffa8\071\uffa8" + -+ "\072\uffa8\073\uffa8\074\uffa8\100\uffa8\101\uffa8\102\uffa8\103" + -+ "\uffa8\104\uffa8\105\uffa8\106\uffa8\107\uffa8\110\uffa8\111\uffa8" + -+ "\112\uffa8\001\002\000\160\004\uffbc\005\uffbc\007\uffbc\010" + -+ "\uffbc\011\uffbc\025\uffbc\026\uffbc\027\uffbc\030\uffbc\031\uffbc" + -+ "\032\uffbc\033\uffbc\035\uffbc\036\uffbc\037\uffbc\040\uffbc\041" + -+ "\uffbc\042\uffbc\043\uffbc\044\uffbc\045\uffbc\046\uffbc\047\uffbc" + -+ "\050\uffbc\051\uffbc\052\uffbc\053\uffbc\054\uffbc\055\uffbc\056" + -+ "\uffbc\057\uffbc\060\uffbc\061\uffbc\062\uffbc\063\uffbc\064\uffbc" + -+ "\065\uffbc\066\uffbc\067\uffbc\070\uffbc\071\uffbc\072\uffbc\073" + -+ "\uffbc\074\uffbc\100\uffbc\101\uffbc\102\uffbc\103\uffbc\104\uffbc" + -+ "\105\uffbc\106\uffbc\107\uffbc\110\uffbc\111\uffbc\112\uffbc\001" + -+ "\002\000\156\004\uffd1\005\uffd1\007\uffd1\010\uffd1\025\uffd1" + -+ "\026\uffd1\027\uffd1\030\uffd1\031\uffd1\032\uffd1\033\uffd1\035" + -+ "\uffd1\036\uffd1\037\uffd1\040\uffd1\041\uffd1\042\uffd1\043\uffd1" + -+ "\044\uffd1\045\uffd1\046\uffd1\047\uffd1\050\uffd1\051\uffd1\052" + -+ "\uffd1\053\uffd1\054\uffd1\055\uffd1\056\uffd1\057\uffd1\060\uffd1" + -+ "\061\uffd1\062\uffd1\063\uffd1\064\uffd1\065\uffd1\066\uffd1\067" + -+ "\uffd1\070\uffd1\071\uffd1\072\uffd1\073\uffd1\074\uffd1\100\uffd1" + -+ "\101\uffd1\102\uffd1\103\uffd1\104\uffd1\105\uffd1\106\uffd1\107" + -+ "\uffd1\110\uffd1\111\uffd1\112\uffd1\001\002\000\160\004\uffb9" + -+ "\005\uffb9\007\uffb9\010\uffb9\011\uffb9\025\uffb9\026\uffb9\027" + -+ "\uffb9\030\uffb9\031\uffb9\032\uffb9\033\uffb9\035\uffb9\036\uffb9" + -+ "\037\uffb9\040\uffb9\041\uffb9\042\uffb9\043\uffb9\044\uffb9\045" + -+ "\uffb9\046\uffb9\047\uffb9\050\uffb9\051\uffb9\052\uffb9\053\uffb9" + -+ "\054\uffb9\055\uffb9\056\uffb9\057\uffb9\060\uffb9\061\uffb9\062" + -+ "\uffb9\063\uffb9\064\uffb9\065\uffb9\066\uffb9\067\uffb9\070\uffb9" + -+ "\071\uffb9\072\uffb9\073\uffb9\074\uffb9\100\uffb9\101\uffb9\102" + -+ "\uffb9\103\uffb9\104\uffb9\105\uffb9\106\uffb9\107\uffb9\110\uffb9" + -+ "\111\uffb9\112\uffb9\001\002\000\160\004\uffb6\005\uffb6\007" + -+ "\uffb6\010\uffb6\011\uffb6\025\uffb6\026\uffb6\027\uffb6\030\uffb6" + -+ "\031\uffb6\032\uffb6\033\uffb6\035\uffb6\036\uffb6\037\uffb6\040" + -+ "\uffb6\041\uffb6\042\uffb6\043\uffb6\044\uffb6\045\uffb6\046\uffb6" + -+ "\047\uffb6\050\uffb6\051\uffb6\052\uffb6\053\uffb6\054\uffb6\055" + -+ "\uffb6\056\uffb6\057\uffb6\060\uffb6\061\uffb6\062\uffb6\063\uffb6" + -+ "\064\uffb6\065\uffb6\066\uffb6\067\uffb6\070\uffb6\071\uffb6\072" + -+ "\uffb6\073\uffb6\074\uffb6\100\uffb6\101\uffb6\102\uffb6\103\uffb6" + -+ "\104\uffb6\105\uffb6\106\uffb6\107\uffb6\110\uffb6\111\uffb6\112" + -+ "\uffb6\001\002\000\160\004\uffb1\005\uffb1\007\uffb1\010\uffb1" + -+ "\011\uffb1\025\uffb1\026\uffb1\027\uffb1\030\uffb1\031\uffb1\032" + -+ "\uffb1\033\uffb1\035\uffb1\036\uffb1\037\uffb1\040\uffb1\041\uffb1" + -+ "\042\uffb1\043\uffb1\044\uffb1\045\uffb1\046\uffb1\047\uffb1\050" + -+ "\uffb1\051\uffb1\052\uffb1\053\uffb1\054\uffb1\055\uffb1\056\uffb1" + -+ "\057\uffb1\060\uffb1\061\uffb1\062\uffb1\063\uffb1\064\uffb1\065" + -+ "\uffb1\066\uffb1\067\uffb1\070\uffb1\071\uffb1\072\uffb1\073\uffb1" + -+ "\074\uffb1\100\uffb1\101\uffb1\102\uffb1\103\uffb1\104\uffb1\105" + -+ "\uffb1\106\uffb1\107\uffb1\110\uffb1\111\uffb1\112\uffb1\001\002" + -+ "\000\160\004\uffb2\005\uffb2\007\uffb2\010\uffb2\011\uffb2\025" + -+ "\uffb2\026\uffb2\027\uffb2\030\uffb2\031\uffb2\032\uffb2\033\uffb2" + -+ "\035\uffb2\036\uffb2\037\uffb2\040\uffb2\041\uffb2\042\uffb2\043" + -+ "\uffb2\044\uffb2\045\uffb2\046\uffb2\047\uffb2\050\uffb2\051\uffb2" + -+ "\052\uffb2\053\uffb2\054\uffb2\055\uffb2\056\uffb2\057\uffb2\060" + -+ "\uffb2\061\uffb2\062\uffb2\063\uffb2\064\uffb2\065\uffb2\066\uffb2" + -+ "\067\uffb2\070\uffb2\071\uffb2\072\uffb2\073\uffb2\074\uffb2\100" + -+ "\uffb2\101\uffb2\102\uffb2\103\uffb2\104\uffb2\105\uffb2\106\uffb2" + -+ "\107\uffb2\110\uffb2\111\uffb2\112\uffb2\001\002\000\126\006" + -+ "\114\011\115\012\113\026\056\027\043\030\072\031\060" + -+ "\032\076\033\023\037\061\040\033\041\021\042\074\043" + -+ "\063\044\062\045\073\046\071\047\036\050\050\051\101" + -+ "\052\053\053\052\054\047\055\055\056\054\057\044\060" + -+ "\042\061\067\062\040\063\102\064\032\065\051\066\031" + -+ "\067\034\070\020\071\075\072\100\073\025\074\026\110" + -+ "\110\111\116\112\111\001\002\000\146\004\uffdc\005\uffdc" + -+ "\007\uffdc\010\uffdc\025\uffdc\026\uffdc\027\uffdc\030\uffdc\031" + -+ "\uffdc\032\uffdc\033\uffdc\035\uffdc\036\uffdc\037\uffdc\040\uffdc" + -+ "\041\uffdc\042\uffdc\043\uffdc\044\uffdc\045\uffdc\046\uffdc\047" + -+ "\uffdc\050\uffdc\051\uffdc\052\uffdc\053\uffdc\054\uffdc\055\uffdc" + -+ "\056\uffdc\057\uffdc\060\uffdc\061\uffdc\062\uffdc\063\uffdc\064" + -+ "\uffdc\065\uffdc\066\uffdc\067\uffdc\070\uffdc\071\uffdc\072\uffdc" + -+ "\073\uffdc\074\uffdc\103\uffdc\105\uffdc\106\uffdc\107\uffdc\110" + -+ "\uffdc\111\uffdc\112\uffdc\001\002\000\134\004\066\010\064" + -+ "\026\056\027\043\030\072\031\060\032\076\033\023\037" + -+ "\061\040\033\041\021\042\074\043\063\044\062\045\073" + -+ "\046\071\047\036\050\050\051\101\052\053\053\052\054" + -+ "\047\055\055\056\054\057\044\060\042\061\067\062\040" + -+ "\063\102\064\032\065\051\066\031\067\034\070\020\071" + -+ "\075\072\100\073\025\074\026\103\037\105\070\106\041" + -+ "\107\035\110\022\111\077\112\024\001\002\000\160\004" + -+ "\uffa4\005\uffa4\007\uffa4\010\uffa4\011\uffa4\025\uffa4\026\uffa4" + -+ "\027\uffa4\030\uffa4\031\uffa4\032\uffa4\033\uffa4\035\uffa4\036" + -+ "\uffa4\037\uffa4\040\uffa4\041\uffa4\042\uffa4\043\uffa4\044\uffa4" + -+ "\045\uffa4\046\uffa4\047\uffa4\050\uffa4\051\uffa4\052\uffa4\053" + -+ "\uffa4\054\uffa4\055\uffa4\056\uffa4\057\uffa4\060\uffa4\061\uffa4" + -+ "\062\uffa4\063\uffa4\064\uffa4\065\uffa4\066\uffa4\067\uffa4\070" + -+ "\uffa4\071\uffa4\072\uffa4\073\uffa4\074\uffa4\100\uffa4\101\uffa4" + -+ "\102\uffa4\103\uffa4\104\uffa4\105\uffa4\106\uffa4\107\uffa4\110" + -+ "\uffa4\111\uffa4\112\uffa4\001\002\000\156\004\uffce\005\uffce" + -+ "\007\uffce\010\uffce\025\uffce\026\uffce\027\uffce\030\uffce\031" + -+ "\uffce\032\uffce\033\uffce\035\uffce\036\uffce\037\uffce\040\uffce" + -+ "\041\uffce\042\uffce\043\uffce\044\uffce\045\uffce\046\uffce\047" + -+ "\uffce\050\uffce\051\uffce\052\uffce\053\uffce\054\uffce\055\uffce" + -+ "\056\uffce\057\uffce\060\uffce\061\uffce\062\uffce\063\uffce\064" + -+ "\uffce\065\uffce\066\uffce\067\uffce\070\uffce\071\uffce\072\uffce" + -+ "\073\uffce\074\uffce\100\uffce\101\uffce\102\uffce\103\uffce\104" + -+ "\uffce\105\uffce\106\uffce\107\uffce\110\uffce\111\uffce\112\uffce" + -+ "\001\002\000\160\004\uffaf\005\uffaf\007\uffaf\010\uffaf\011" + -+ "\uffaf\025\uffaf\026\uffaf\027\uffaf\030\uffaf\031\uffaf\032\uffaf" + -+ "\033\uffaf\035\uffaf\036\uffaf\037\uffaf\040\uffaf\041\uffaf\042" + -+ "\uffaf\043\uffaf\044\uffaf\045\uffaf\046\uffaf\047\uffaf\050\uffaf" + -+ "\051\uffaf\052\uffaf\053\uffaf\054\uffaf\055\uffaf\056\uffaf\057" + -+ "\uffaf\060\uffaf\061\uffaf\062\uffaf\063\uffaf\064\uffaf\065\uffaf" + -+ "\066\uffaf\067\uffaf\070\uffaf\071\uffaf\072\uffaf\073\uffaf\074" + -+ "\uffaf\100\uffaf\101\uffaf\102\uffaf\103\uffaf\104\uffaf\105\uffaf" + -+ "\106\uffaf\107\uffaf\110\uffaf\111\uffaf\112\uffaf\001\002\000" + -+ "\160\004\uffba\005\uffba\007\uffba\010\uffba\011\uffba\025\uffba" + -+ "\026\uffba\027\uffba\030\uffba\031\uffba\032\uffba\033\uffba\035" + -+ "\uffba\036\uffba\037\uffba\040\uffba\041\uffba\042\uffba\043\uffba" + -+ "\044\uffba\045\uffba\046\uffba\047\uffba\050\uffba\051\uffba\052" + -+ "\uffba\053\uffba\054\uffba\055\uffba\056\uffba\057\uffba\060\uffba" + -+ "\061\uffba\062\uffba\063\uffba\064\uffba\065\uffba\066\uffba\067" + -+ "\uffba\070\uffba\071\uffba\072\uffba\073\uffba\074\uffba\100\uffba" + -+ "\101\uffba\102\uffba\103\uffba\104\uffba\105\uffba\106\uffba\107" + -+ "\uffba\110\uffba\111\uffba\112\uffba\001\002\000\160\004\uffb0" + -+ "\005\uffb0\007\uffb0\010\uffb0\011\uffb0\025\uffb0\026\uffb0\027" + -+ "\uffb0\030\uffb0\031\uffb0\032\uffb0\033\uffb0\035\uffb0\036\uffb0" + -+ "\037\uffb0\040\uffb0\041\uffb0\042\uffb0\043\uffb0\044\uffb0\045" + -+ "\uffb0\046\uffb0\047\uffb0\050\uffb0\051\uffb0\052\uffb0\053\uffb0" + -+ "\054\uffb0\055\uffb0\056\uffb0\057\uffb0\060\uffb0\061\uffb0\062" + -+ "\uffb0\063\uffb0\064\uffb0\065\uffb0\066\uffb0\067\uffb0\070\uffb0" + -+ "\071\uffb0\072\uffb0\073\uffb0\074\uffb0\100\uffb0\101\uffb0\102" + -+ "\uffb0\103\uffb0\104\uffb0\105\uffb0\106\uffb0\107\uffb0\110\uffb0" + -+ "\111\uffb0\112\uffb0\001\002\000\160\004\uffb3\005\uffb3\007" + -+ "\uffb3\010\uffb3\011\uffb3\025\uffb3\026\uffb3\027\uffb3\030\uffb3" + -+ "\031\uffb3\032\uffb3\033\uffb3\035\uffb3\036\uffb3\037\uffb3\040" + -+ "\uffb3\041\uffb3\042\uffb3\043\uffb3\044\uffb3\045\uffb3\046\uffb3" + -+ "\047\uffb3\050\uffb3\051\uffb3\052\uffb3\053\uffb3\054\uffb3\055" + -+ "\uffb3\056\uffb3\057\uffb3\060\uffb3\061\uffb3\062\uffb3\063\uffb3" + -+ "\064\uffb3\065\uffb3\066\uffb3\067\uffb3\070\uffb3\071\uffb3\072" + -+ "\uffb3\073\uffb3\074\uffb3\100\uffb3\101\uffb3\102\uffb3\103\uffb3" + -+ "\104\uffb3\105\uffb3\106\uffb3\107\uffb3\110\uffb3\111\uffb3\112" + -+ "\uffb3\001\002\000\160\004\uff9c\005\uff9c\007\uff9c\010\uff9c" + -+ "\011\uff9c\025\uff9c\026\uff9c\027\uff9c\030\uff9c\031\uff9c\032" + -+ "\uff9c\033\uff9c\035\uff9c\036\uff9c\037\uff9c\040\uff9c\041\uff9c" + -+ "\042\uff9c\043\uff9c\044\uff9c\045\uff9c\046\uff9c\047\uff9c\050" + -+ "\uff9c\051\uff9c\052\uff9c\053\uff9c\054\uff9c\055\uff9c\056\uff9c" + -+ "\057\uff9c\060\uff9c\061\uff9c\062\uff9c\063\uff9c\064\uff9c\065" + -+ "\uff9c\066\uff9c\067\uff9c\070\uff9c\071\uff9c\072\uff9c\073\uff9c" + -+ "\074\uff9c\100\uff9c\101\uff9c\102\uff9c\103\uff9c\104\uff9c\105" + -+ "\uff9c\106\uff9c\107\uff9c\110\uff9c\111\uff9c\112\uff9c\001\002" + -+ "\000\160\004\uffb8\005\uffb8\007\uffb8\010\uffb8\011\uffb8\025" + -+ "\uffb8\026\uffb8\027\uffb8\030\uffb8\031\uffb8\032\uffb8\033\uffb8" + -+ "\035\uffb8\036\uffb8\037\uffb8\040\uffb8\041\uffb8\042\uffb8\043" + -+ "\uffb8\044\uffb8\045\uffb8\046\uffb8\047\uffb8\050\uffb8\051\uffb8" + -+ "\052\uffb8\053\uffb8\054\uffb8\055\uffb8\056\uffb8\057\uffb8\060" + -+ "\uffb8\061\uffb8\062\uffb8\063\uffb8\064\uffb8\065\uffb8\066\uffb8" + -+ "\067\uffb8\070\uffb8\071\uffb8\072\uffb8\073\uffb8\074\uffb8\100" + -+ "\uffb8\101\uffb8\102\uffb8\103\uffb8\104\uffb8\105\uffb8\106\uffb8" + -+ "\107\uffb8\110\uffb8\111\uffb8\112\uffb8\001\002\000\156\004" + -+ "\uffcf\005\uffcf\007\uffcf\010\uffcf\025\uffcf\026\uffcf\027\uffcf" + -+ "\030\uffcf\031\uffcf\032\uffcf\033\uffcf\035\uffcf\036\uffcf\037" + -+ "\uffcf\040\uffcf\041\uffcf\042\uffcf\043\uffcf\044\uffcf\045\uffcf" + -+ "\046\uffcf\047\uffcf\050\uffcf\051\uffcf\052\uffcf\053\uffcf\054" + -+ "\uffcf\055\uffcf\056\uffcf\057\uffcf\060\uffcf\061\uffcf\062\uffcf" + -+ "\063\uffcf\064\uffcf\065\uffcf\066\uffcf\067\uffcf\070\uffcf\071" + -+ "\uffcf\072\uffcf\073\uffcf\074\uffcf\100\uffcf\101\uffcf\102\uffcf" + -+ "\103\uffcf\104\uffcf\105\uffcf\106\uffcf\107\uffcf\110\uffcf\111" + -+ "\uffcf\112\uffcf\001\002\000\160\004\uff9b\005\uff9b\007\uff9b" + -+ "\010\uff9b\011\uff9b\025\uff9b\026\uff9b\027\uff9b\030\uff9b\031" + -+ "\uff9b\032\uff9b\033\uff9b\035\uff9b\036\uff9b\037\uff9b\040\uff9b" + -+ "\041\uff9b\042\uff9b\043\uff9b\044\uff9b\045\uff9b\046\uff9b\047" + -+ "\uff9b\050\uff9b\051\uff9b\052\uff9b\053\uff9b\054\uff9b\055\uff9b" + -+ "\056\uff9b\057\uff9b\060\uff9b\061\uff9b\062\uff9b\063\uff9b\064" + -+ "\uff9b\065\uff9b\066\uff9b\067\uff9b\070\uff9b\071\uff9b\072\uff9b" + -+ "\073\uff9b\074\uff9b\100\uff9b\101\uff9b\102\uff9b\103\uff9b\104" + -+ "\uff9b\105\uff9b\106\uff9b\107\uff9b\110\uff9b\111\uff9b\112\uff9b" + -+ "\001\002\000\160\004\uffac\005\uffac\007\uffac\010\uffac\011" + -+ "\uffac\025\uffac\026\uffac\027\uffac\030\uffac\031\uffac\032\uffac" + -+ "\033\uffac\035\uffac\036\uffac\037\uffac\040\uffac\041\uffac\042" + -+ "\uffac\043\uffac\044\uffac\045\uffac\046\uffac\047\uffac\050\uffac" + -+ "\051\uffac\052\uffac\053\uffac\054\uffac\055\uffac\056\uffac\057" + -+ "\uffac\060\uffac\061\uffac\062\uffac\063\uffac\064\uffac\065\uffac" + -+ "\066\uffac\067\uffac\070\uffac\071\uffac\072\uffac\073\uffac\074" + -+ "\uffac\100\uffac\101\uffac\102\uffac\103\uffac\104\uffac\105\uffac" + -+ "\106\uffac\107\uffac\110\uffac\111\uffac\112\uffac\001\002\000" + -+ "\160\004\uffa2\005\uffa2\007\uffa2\010\uffa2\011\uffa2\025\uffa2" + -+ "\026\uffa2\027\uffa2\030\uffa2\031\uffa2\032\uffa2\033\uffa2\035" + -+ "\uffa2\036\uffa2\037\uffa2\040\uffa2\041\uffa2\042\uffa2\043\uffa2" + -+ "\044\uffa2\045\uffa2\046\uffa2\047\uffa2\050\uffa2\051\uffa2\052" + -+ "\uffa2\053\uffa2\054\uffa2\055\uffa2\056\uffa2\057\uffa2\060\uffa2" + -+ "\061\uffa2\062\uffa2\063\uffa2\064\uffa2\065\uffa2\066\uffa2\067" + -+ "\uffa2\070\uffa2\071\uffa2\072\uffa2\073\uffa2\074\uffa2\100\uffa2" + -+ "\101\uffa2\102\uffa2\103\uffa2\104\uffa2\105\uffa2\106\uffa2\107" + -+ "\uffa2\110\uffa2\111\uffa2\112\uffa2\001\002\000\006\005\105" + -+ "\103\104\001\002\000\132\004\066\010\064\026\056\027" + -+ "\043\030\072\031\060\032\076\033\023\037\061\040\033" + -+ "\041\021\042\074\043\063\044\062\045\073\046\071\047" + -+ "\036\050\050\051\101\052\053\053\052\054\047\055\055" + -+ "\056\054\057\044\060\042\061\067\062\040\063\102\064" + -+ "\032\065\051\066\031\067\034\070\020\071\075\072\100" + -+ "\073\025\074\026\105\070\106\041\107\035\110\022\111" + -+ "\077\112\024\001\002\000\156\004\uffd3\005\uffd3\007\uffd3" + -+ "\010\uffd3\025\uffd3\026\uffd3\027\uffd3\030\uffd3\031\uffd3\032" + -+ "\uffd3\033\uffd3\035\uffd3\036\uffd3\037\uffd3\040\uffd3\041\uffd3" + -+ "\042\uffd3\043\uffd3\044\uffd3\045\uffd3\046\uffd3\047\uffd3\050" + -+ "\uffd3\051\uffd3\052\uffd3\053\uffd3\054\uffd3\055\uffd3\056\uffd3" + -+ "\057\uffd3\060\uffd3\061\uffd3\062\uffd3\063\uffd3\064\uffd3\065" + -+ "\uffd3\066\uffd3\067\uffd3\070\uffd3\071\uffd3\072\uffd3\073\uffd3" + -+ "\074\uffd3\100\uffd3\101\uffd3\102\uffd3\103\uffd3\104\uffd3\105" + -+ "\uffd3\106\uffd3\107\uffd3\110\uffd3\111\uffd3\112\uffd3\001\002" + -+ "\000\146\004\066\005\uffe0\007\uffe0\010\064\025\uffe0\026" + -+ "\056\027\043\030\072\031\060\032\076\033\023\035\uffe0" + -+ "\036\uffe0\037\061\040\033\041\021\042\074\043\063\044" + -+ "\062\045\073\046\071\047\036\050\050\051\101\052\053" + -+ "\053\052\054\047\055\055\056\054\057\044\060\042\061" + -+ "\067\062\040\063\102\064\032\065\051\066\031\067\034" + -+ "\070\020\071\075\072\100\073\025\074\026\103\uffe0\105" + -+ "\070\106\041\107\035\110\022\111\077\112\024\001\002" + -+ "\000\146\004\uffdd\005\uffdd\007\uffdd\010\uffdd\025\uffdd\026" + -+ "\uffdd\027\uffdd\030\uffdd\031\uffdd\032\uffdd\033\uffdd\035\uffdd" + -+ "\036\uffdd\037\uffdd\040\uffdd\041\uffdd\042\uffdd\043\uffdd\044" + -+ "\uffdd\045\uffdd\046\uffdd\047\uffdd\050\uffdd\051\uffdd\052\uffdd" + -+ "\053\uffdd\054\uffdd\055\uffdd\056\uffdd\057\uffdd\060\uffdd\061" + -+ "\uffdd\062\uffdd\063\uffdd\064\uffdd\065\uffdd\066\uffdd\067\uffdd" + -+ "\070\uffdd\071\uffdd\072\uffdd\073\uffdd\074\uffdd\103\uffdd\105" + -+ "\uffdd\106\uffdd\107\uffdd\110\uffdd\111\uffdd\112\uffdd\001\002" + -+ "\000\124\011\uffbd\012\136\026\uffbd\027\uffbd\030\uffbd\031" + -+ "\uffbd\032\uffbd\033\uffbd\037\uffbd\040\uffbd\041\uffbd\042\uffbd" + -+ "\043\uffbd\044\uffbd\045\uffbd\046\uffbd\047\uffbd\050\uffbd\051" + -+ "\uffbd\052\uffbd\053\uffbd\054\uffbd\055\uffbd\056\uffbd\057\uffbd" + -+ "\060\uffbd\061\uffbd\062\uffbd\063\uffbd\064\uffbd\065\uffbd\066" + -+ "\uffbd\067\uffbd\070\uffbd\071\uffbd\072\uffbd\073\uffbd\074\uffbd" + -+ "\110\uffbd\111\uffbd\112\uffbd\001\002\000\122\011\uffbf\026" + -+ "\uffbf\027\uffbf\030\uffbf\031\uffbf\032\uffbf\033\uffbf\037\uffbf" + -+ "\040\uffbf\041\uffbf\042\uffbf\043\uffbf\044\uffbf\045\uffbf\046" + -+ "\uffbf\047\uffbf\050\uffbf\051\uffbf\052\uffbf\053\uffbf\054\uffbf" + -+ "\055\uffbf\056\uffbf\057\uffbf\060\uffbf\061\uffbf\062\uffbf\063" + -+ "\uffbf\064\uffbf\065\uffbf\066\uffbf\067\uffbf\070\uffbf\071\uffbf" + -+ "\072\uffbf\073\uffbf\074\uffbf\110\uffbf\111\uffbf\112\uffbf\001" + -+ "\002\000\122\011\uffc3\026\uffc3\027\uffc3\030\uffc3\031\uffc3" + -+ "\032\uffc3\033\uffc3\037\uffc3\040\uffc3\041\uffc3\042\uffc3\043" + -+ "\uffc3\044\uffc3\045\uffc3\046\uffc3\047\uffc3\050\uffc3\051\uffc3" + -+ "\052\uffc3\053\uffc3\054\uffc3\055\uffc3\056\uffc3\057\uffc3\060" + -+ "\uffc3\061\uffc3\062\uffc3\063\uffc3\064\uffc3\065\uffc3\066\uffc3" + -+ "\067\uffc3\070\uffc3\071\uffc3\072\uffc3\073\uffc3\074\uffc3\110" + -+ "\uffc3\111\uffc3\112\uffc3\001\002\000\120\026\056\027\043" + -+ "\030\072\031\060\032\076\033\023\037\061\040\033\041" + -+ "\021\042\074\043\063\044\062\045\073\046\071\047\036" + -+ "\050\050\051\101\052\053\053\052\054\047\055\055\056" + -+ "\054\057\044\060\042\061\067\062\040\063\102\064\032" + -+ "\065\051\066\031\067\034\070\020\071\075\072\100\073" + -+ "\025\074\026\110\110\111\116\112\111\001\002\000\124" + -+ "\011\127\012\126\026\056\027\043\030\072\031\060\032" + -+ "\076\033\023\037\061\040\033\041\021\042\074\043\063" + -+ "\044\062\045\073\046\071\047\036\050\050\051\101\052" + -+ "\053\053\052\054\047\055\055\056\054\057\044\060\042" + -+ "\061\067\062\040\063\102\064\032\065\051\066\031\067" + -+ "\034\070\020\071\075\072\100\073\025\074\026\110\110" + -+ "\111\116\112\111\001\002\000\156\004\uffcc\005\uffcc\007" + -+ "\uffcc\010\uffcc\025\uffcc\026\uffcc\027\uffcc\030\uffcc\031\uffcc" + -+ "\032\uffcc\033\uffcc\035\uffcc\036\uffcc\037\uffcc\040\uffcc\041" + -+ "\uffcc\042\uffcc\043\uffcc\044\uffcc\045\uffcc\046\uffcc\047\uffcc" + -+ "\050\uffcc\051\uffcc\052\uffcc\053\uffcc\054\uffcc\055\uffcc\056" + -+ "\uffcc\057\uffcc\060\uffcc\061\uffcc\062\uffcc\063\uffcc\064\uffcc" + -+ "\065\uffcc\066\uffcc\067\uffcc\070\uffcc\071\uffcc\072\uffcc\073" + -+ "\uffcc\074\uffcc\100\uffcc\101\uffcc\102\uffcc\103\uffcc\104\uffcc" + -+ "\105\uffcc\106\uffcc\107\uffcc\110\uffcc\111\uffcc\112\uffcc\001" + -+ "\002\000\122\011\uffc1\026\uffc1\027\uffc1\030\uffc1\031\uffc1" + -+ "\032\uffc1\033\uffc1\037\uffc1\040\uffc1\041\uffc1\042\uffc1\043" + -+ "\uffc1\044\uffc1\045\uffc1\046\uffc1\047\uffc1\050\uffc1\051\uffc1" + -+ "\052\uffc1\053\uffc1\054\uffc1\055\uffc1\056\uffc1\057\uffc1\060" + -+ "\uffc1\061\uffc1\062\uffc1\063\uffc1\064\uffc1\065\uffc1\066\uffc1" + -+ "\067\uffc1\070\uffc1\071\uffc1\072\uffc1\073\uffc1\074\uffc1\110" + -+ "\uffc1\111\uffc1\112\uffc1\001\002\000\122\011\uffc5\026\uffc5" + -+ "\027\uffc5\030\uffc5\031\uffc5\032\uffc5\033\uffc5\037\uffc5\040" + -+ "\uffc5\041\uffc5\042\uffc5\043\uffc5\044\uffc5\045\uffc5\046\uffc5" + -+ "\047\uffc5\050\uffc5\051\uffc5\052\uffc5\053\uffc5\054\uffc5\055" + -+ "\uffc5\056\uffc5\057\uffc5\060\uffc5\061\uffc5\062\uffc5\063\uffc5" + -+ "\064\uffc5\065\uffc5\066\uffc5\067\uffc5\070\uffc5\071\uffc5\072" + -+ "\uffc5\073\uffc5\074\uffc5\110\uffc5\111\uffc5\112\uffc5\001\002" + -+ "\000\122\011\123\026\056\027\043\030\072\031\060\032" + -+ "\076\033\023\037\061\040\033\041\021\042\074\043\063" + -+ "\044\062\045\073\046\071\047\036\050\050\051\101\052" + -+ "\053\053\052\054\047\055\055\056\054\057\044\060\042" + -+ "\061\067\062\040\063\102\064\032\065\051\066\031\067" + -+ "\034\070\020\071\075\072\100\073\025\074\026\110\110" + -+ "\111\124\112\121\001\002\000\122\011\uffc0\026\uffc0\027" + -+ "\uffc0\030\uffc0\031\uffc0\032\uffc0\033\uffc0\037\uffc0\040\uffc0" + -+ "\041\uffc0\042\uffc0\043\uffc0\044\uffc0\045\uffc0\046\uffc0\047" + -+ "\uffc0\050\uffc0\051\uffc0\052\uffc0\053\uffc0\054\uffc0\055\uffc0" + -+ "\056\uffc0\057\uffc0\060\uffc0\061\uffc0\062\uffc0\063\uffc0\064" + -+ "\uffc0\065\uffc0\066\uffc0\067\uffc0\070\uffc0\071\uffc0\072\uffc0" + -+ "\073\uffc0\074\uffc0\110\uffc0\111\uffc0\112\uffc0\001\002\000" + -+ "\122\011\uffc4\026\uffc4\027\uffc4\030\uffc4\031\uffc4\032\uffc4" + -+ "\033\uffc4\037\uffc4\040\uffc4\041\uffc4\042\uffc4\043\uffc4\044" + -+ "\uffc4\045\uffc4\046\uffc4\047\uffc4\050\uffc4\051\uffc4\052\uffc4" + -+ "\053\uffc4\054\uffc4\055\uffc4\056\uffc4\057\uffc4\060\uffc4\061" + -+ "\uffc4\062\uffc4\063\uffc4\064\uffc4\065\uffc4\066\uffc4\067\uffc4" + -+ "\070\uffc4\071\uffc4\072\uffc4\073\uffc4\074\uffc4\110\uffc4\111" + -+ "\uffc4\112\uffc4\001\002\000\156\004\uffcb\005\uffcb\007\uffcb" + -+ "\010\uffcb\025\uffcb\026\uffcb\027\uffcb\030\uffcb\031\uffcb\032" + -+ "\uffcb\033\uffcb\035\uffcb\036\uffcb\037\uffcb\040\uffcb\041\uffcb" + -+ "\042\uffcb\043\uffcb\044\uffcb\045\uffcb\046\uffcb\047\uffcb\050" + -+ "\uffcb\051\uffcb\052\uffcb\053\uffcb\054\uffcb\055\uffcb\056\uffcb" + -+ "\057\uffcb\060\uffcb\061\uffcb\062\uffcb\063\uffcb\064\uffcb\065" + -+ "\uffcb\066\uffcb\067\uffcb\070\uffcb\071\uffcb\072\uffcb\073\uffcb" + -+ "\074\uffcb\100\uffcb\101\uffcb\102\uffcb\103\uffcb\104\uffcb\105" + -+ "\uffcb\106\uffcb\107\uffcb\110\uffcb\111\uffcb\112\uffcb\001\002" + -+ "\000\122\011\uffc2\026\uffc2\027\uffc2\030\uffc2\031\uffc2\032" + -+ "\uffc2\033\uffc2\037\uffc2\040\uffc2\041\uffc2\042\uffc2\043\uffc2" + -+ "\044\uffc2\045\uffc2\046\uffc2\047\uffc2\050\uffc2\051\uffc2\052" + -+ "\uffc2\053\uffc2\054\uffc2\055\uffc2\056\uffc2\057\uffc2\060\uffc2" + -+ "\061\uffc2\062\uffc2\063\uffc2\064\uffc2\065\uffc2\066\uffc2\067" + -+ "\uffc2\070\uffc2\071\uffc2\072\uffc2\073\uffc2\074\uffc2\110\uffc2" + -+ "\111\uffc2\112\uffc2\001\002\000\122\011\uffc6\026\uffc6\027" + -+ "\uffc6\030\uffc6\031\uffc6\032\uffc6\033\uffc6\037\uffc6\040\uffc6" + -+ "\041\uffc6\042\uffc6\043\uffc6\044\uffc6\045\uffc6\046\uffc6\047" + -+ "\uffc6\050\uffc6\051\uffc6\052\uffc6\053\uffc6\054\uffc6\055\uffc6" + -+ "\056\uffc6\057\uffc6\060\uffc6\061\uffc6\062\uffc6\063\uffc6\064" + -+ "\uffc6\065\uffc6\066\uffc6\067\uffc6\070\uffc6\071\uffc6\072\uffc6" + -+ "\073\uffc6\074\uffc6\110\uffc6\111\uffc6\112\uffc6\001\002\000" + -+ "\120\026\056\027\043\030\072\031\060\032\076\033\023" + -+ "\037\061\040\033\041\021\042\074\043\063\044\062\045" + -+ "\073\046\071\047\036\050\050\051\101\052\053\053\052" + -+ "\054\047\055\055\056\054\057\044\060\042\061\067\062" + -+ "\040\063\102\064\032\065\051\066\031\067\034\070\020" + -+ "\071\075\072\100\073\025\074\026\110\110\111\116\112" + -+ "\111\001\002\000\156\004\uffca\005\uffca\007\uffca\010\uffca" + -+ "\025\uffca\026\uffca\027\uffca\030\uffca\031\uffca\032\uffca\033" + -+ "\uffca\035\uffca\036\uffca\037\uffca\040\uffca\041\uffca\042\uffca" + -+ "\043\uffca\044\uffca\045\uffca\046\uffca\047\uffca\050\uffca\051" + -+ "\uffca\052\uffca\053\uffca\054\uffca\055\uffca\056\uffca\057\uffca" + -+ "\060\uffca\061\uffca\062\uffca\063\uffca\064\uffca\065\uffca\066" + -+ "\uffca\067\uffca\070\uffca\071\uffca\072\uffca\073\uffca\074\uffca" + -+ "\100\uffca\101\uffca\102\uffca\103\uffca\104\uffca\105\uffca\106" + -+ "\uffca\107\uffca\110\uffca\111\uffca\112\uffca\001\002\000\122" + -+ "\011\131\026\056\027\043\030\072\031\060\032\076\033" + -+ "\023\037\061\040\033\041\021\042\074\043\063\044\062" + -+ "\045\073\046\071\047\036\050\050\051\101\052\053\053" + -+ "\052\054\047\055\055\056\054\057\044\060\042\061\067" + -+ "\062\040\063\102\064\032\065\051\066\031\067\034\070" + -+ "\020\071\075\072\100\073\025\074\026\110\110\111\124" + -+ "\112\121\001\002\000\156\004\uffc9\005\uffc9\007\uffc9\010" + -+ "\uffc9\025\uffc9\026\uffc9\027\uffc9\030\uffc9\031\uffc9\032\uffc9" + -+ "\033\uffc9\035\uffc9\036\uffc9\037\uffc9\040\uffc9\041\uffc9\042" + -+ "\uffc9\043\uffc9\044\uffc9\045\uffc9\046\uffc9\047\uffc9\050\uffc9" + -+ "\051\uffc9\052\uffc9\053\uffc9\054\uffc9\055\uffc9\056\uffc9\057" + -+ "\uffc9\060\uffc9\061\uffc9\062\uffc9\063\uffc9\064\uffc9\065\uffc9" + -+ "\066\uffc9\067\uffc9\070\uffc9\071\uffc9\072\uffc9\073\uffc9\074" + -+ "\uffc9\100\uffc9\101\uffc9\102\uffc9\103\uffc9\104\uffc9\105\uffc9" + -+ "\106\uffc9\107\uffc9\110\uffc9\111\uffc9\112\uffc9\001\002\000" + -+ "\122\011\133\026\056\027\043\030\072\031\060\032\076" + -+ "\033\023\037\061\040\033\041\021\042\074\043\063\044" + -+ "\062\045\073\046\071\047\036\050\050\051\101\052\053" + -+ "\053\052\054\047\055\055\056\054\057\044\060\042\061" + -+ "\067\062\040\063\102\064\032\065\051\066\031\067\034" + -+ "\070\020\071\075\072\100\073\025\074\026\110\110\111" + -+ "\124\112\121\001\002\000\156\004\uffc7\005\uffc7\007\uffc7" + -+ "\010\uffc7\025\uffc7\026\uffc7\027\uffc7\030\uffc7\031\uffc7\032" + -+ "\uffc7\033\uffc7\035\uffc7\036\uffc7\037\uffc7\040\uffc7\041\uffc7" + -+ "\042\uffc7\043\uffc7\044\uffc7\045\uffc7\046\uffc7\047\uffc7\050" + -+ "\uffc7\051\uffc7\052\uffc7\053\uffc7\054\uffc7\055\uffc7\056\uffc7" + -+ "\057\uffc7\060\uffc7\061\uffc7\062\uffc7\063\uffc7\064\uffc7\065" + -+ "\uffc7\066\uffc7\067\uffc7\070\uffc7\071\uffc7\072\uffc7\073\uffc7" + -+ "\074\uffc7\100\uffc7\101\uffc7\102\uffc7\103\uffc7\104\uffc7\105" + -+ "\uffc7\106\uffc7\107\uffc7\110\uffc7\111\uffc7\112\uffc7\001\002" + -+ "\000\122\011\135\026\056\027\043\030\072\031\060\032" + -+ "\076\033\023\037\061\040\033\041\021\042\074\043\063" + -+ "\044\062\045\073\046\071\047\036\050\050\051\101\052" + -+ "\053\053\052\054\047\055\055\056\054\057\044\060\042" + -+ "\061\067\062\040\063\102\064\032\065\051\066\031\067" + -+ "\034\070\020\071\075\072\100\073\025\074\026\110\110" + -+ "\111\124\112\121\001\002\000\156\004\uffc8\005\uffc8\007" + -+ "\uffc8\010\uffc8\025\uffc8\026\uffc8\027\uffc8\030\uffc8\031\uffc8" + -+ "\032\uffc8\033\uffc8\035\uffc8\036\uffc8\037\uffc8\040\uffc8\041" + -+ "\uffc8\042\uffc8\043\uffc8\044\uffc8\045\uffc8\046\uffc8\047\uffc8" + -+ "\050\uffc8\051\uffc8\052\uffc8\053\uffc8\054\uffc8\055\uffc8\056" + -+ "\uffc8\057\uffc8\060\uffc8\061\uffc8\062\uffc8\063\uffc8\064\uffc8" + -+ "\065\uffc8\066\uffc8\067\uffc8\070\uffc8\071\uffc8\072\uffc8\073" + -+ "\uffc8\074\uffc8\100\uffc8\101\uffc8\102\uffc8\103\uffc8\104\uffc8" + -+ "\105\uffc8\106\uffc8\107\uffc8\110\uffc8\111\uffc8\112\uffc8\001" + -+ "\002\000\004\110\137\001\002\000\122\011\uffbe\026\uffbe" + -+ "\027\uffbe\030\uffbe\031\uffbe\032\uffbe\033\uffbe\037\uffbe\040" + -+ "\uffbe\041\uffbe\042\uffbe\043\uffbe\044\uffbe\045\uffbe\046\uffbe" + -+ "\047\uffbe\050\uffbe\051\uffbe\052\uffbe\053\uffbe\054\uffbe\055" + -+ "\uffbe\056\uffbe\057\uffbe\060\uffbe\061\uffbe\062\uffbe\063\uffbe" + -+ "\064\uffbe\065\uffbe\066\uffbe\067\uffbe\070\uffbe\071\uffbe\072" + -+ "\uffbe\073\uffbe\074\uffbe\110\uffbe\111\uffbe\112\uffbe\001\002" + -+ "\000\156\004\uffd8\005\uffd8\007\uffd8\010\uffd8\025\uffd8\026" + -+ "\uffd8\027\uffd8\030\uffd8\031\uffd8\032\uffd8\033\uffd8\035\uffd8" + -+ "\036\uffd8\037\uffd8\040\uffd8\041\uffd8\042\uffd8\043\uffd8\044" + -+ "\uffd8\045\uffd8\046\uffd8\047\uffd8\050\uffd8\051\uffd8\052\uffd8" + -+ "\053\uffd8\054\uffd8\055\uffd8\056\uffd8\057\uffd8\060\uffd8\061" + -+ "\uffd8\062\uffd8\063\uffd8\064\uffd8\065\uffd8\066\uffd8\067\uffd8" + -+ "\070\uffd8\071\uffd8\072\uffd8\073\uffd8\074\uffd8\100\uffd8\101" + -+ "\uffd8\102\uffd8\103\uffd8\104\uffd8\105\uffd8\106\uffd8\107\uffd8" + -+ "\110\uffd8\111\uffd8\112\uffd8\001\002\000\156\004\uffd7\005" + -+ "\uffd7\007\uffd7\010\uffd7\025\uffd7\026\uffd7\027\uffd7\030\uffd7" + -+ "\031\uffd7\032\uffd7\033\uffd7\035\uffd7\036\uffd7\037\uffd7\040" + -+ "\uffd7\041\uffd7\042\uffd7\043\uffd7\044\uffd7\045\uffd7\046\uffd7" + -+ "\047\uffd7\050\uffd7\051\uffd7\052\uffd7\053\uffd7\054\uffd7\055" + -+ "\uffd7\056\uffd7\057\uffd7\060\uffd7\061\uffd7\062\uffd7\063\uffd7" + -+ "\064\uffd7\065\uffd7\066\uffd7\067\uffd7\070\uffd7\071\uffd7\072" + -+ "\uffd7\073\uffd7\074\uffd7\100\uffd7\101\uffd7\102\uffd7\103\uffd7" + -+ "\104\uffd7\105\uffd7\106\uffd7\107\uffd7\110\uffd7\111\uffd7\112" + -+ "\uffd7\001\002\000\006\021\144\100\145\001\002\000\156" + -+ "\004\uffd6\005\uffd6\007\uffd6\010\uffd6\025\uffd6\026\uffd6\027" + -+ "\uffd6\030\uffd6\031\uffd6\032\uffd6\033\uffd6\035\uffd6\036\uffd6" + -+ "\037\uffd6\040\uffd6\041\uffd6\042\uffd6\043\uffd6\044\uffd6\045" + -+ "\uffd6\046\uffd6\047\uffd6\050\uffd6\051\uffd6\052\uffd6\053\uffd6" + -+ "\054\uffd6\055\uffd6\056\uffd6\057\uffd6\060\uffd6\061\uffd6\062" + -+ "\uffd6\063\uffd6\064\uffd6\065\uffd6\066\uffd6\067\uffd6\070\uffd6" + -+ "\071\uffd6\072\uffd6\073\uffd6\074\uffd6\100\uffd6\101\uffd6\102" + -+ "\uffd6\103\uffd6\104\uffd6\105\uffd6\106\uffd6\107\uffd6\110\uffd6" + -+ "\111\uffd6\112\uffd6\001\002\000\156\004\uffd5\005\uffd5\007" + -+ "\uffd5\010\uffd5\025\uffd5\026\uffd5\027\uffd5\030\uffd5\031\uffd5" + -+ "\032\uffd5\033\uffd5\035\uffd5\036\uffd5\037\uffd5\040\uffd5\041" + -+ "\uffd5\042\uffd5\043\uffd5\044\uffd5\045\uffd5\046\uffd5\047\uffd5" + -+ "\050\uffd5\051\uffd5\052\uffd5\053\uffd5\054\uffd5\055\uffd5\056" + -+ "\uffd5\057\uffd5\060\uffd5\061\uffd5\062\uffd5\063\uffd5\064\uffd5" + -+ "\065\uffd5\066\uffd5\067\uffd5\070\uffd5\071\uffd5\072\uffd5\073" + -+ "\uffd5\074\uffd5\100\uffd5\101\uffd5\102\uffd5\103\uffd5\104\uffd5" + -+ "\105\uffd5\106\uffd5\107\uffd5\110\uffd5\111\uffd5\112\uffd5\001" + -+ "\002\000\004\021\146\001\002\000\156\004\uffd4\005\uffd4" + -+ "\007\uffd4\010\uffd4\025\uffd4\026\uffd4\027\uffd4\030\uffd4\031" + -+ "\uffd4\032\uffd4\033\uffd4\035\uffd4\036\uffd4\037\uffd4\040\uffd4" + -+ "\041\uffd4\042\uffd4\043\uffd4\044\uffd4\045\uffd4\046\uffd4\047" + -+ "\uffd4\050\uffd4\051\uffd4\052\uffd4\053\uffd4\054\uffd4\055\uffd4" + -+ "\056\uffd4\057\uffd4\060\uffd4\061\uffd4\062\uffd4\063\uffd4\064" + -+ "\uffd4\065\uffd4\066\uffd4\067\uffd4\070\uffd4\071\uffd4\072\uffd4" + -+ "\073\uffd4\074\uffd4\100\uffd4\101\uffd4\102\uffd4\103\uffd4\104" + -+ "\uffd4\105\uffd4\106\uffd4\107\uffd4\110\uffd4\111\uffd4\112\uffd4" + -+ "\001\002\000\146\004\uffda\005\uffda\007\uffda\010\uffda\025" + -+ "\uffda\026\uffda\027\uffda\030\uffda\031\uffda\032\uffda\033\uffda" + -+ "\035\uffda\036\uffda\037\uffda\040\uffda\041\uffda\042\uffda\043" + -+ "\uffda\044\uffda\045\uffda\046\uffda\047\uffda\050\uffda\051\uffda" + -+ "\052\uffda\053\uffda\054\uffda\055\uffda\056\uffda\057\uffda\060" + -+ "\uffda\061\uffda\062\uffda\063\uffda\064\uffda\065\uffda\066\uffda" + -+ "\067\uffda\070\uffda\071\uffda\072\uffda\073\uffda\074\uffda\103" + -+ "\uffda\105\uffda\106\uffda\107\uffda\110\uffda\111\uffda\112\uffda" + -+ "\001\002\000\146\004\uffd9\005\uffd9\007\uffd9\010\uffd9\025" + -+ "\uffd9\026\uffd9\027\uffd9\030\uffd9\031\uffd9\032\uffd9\033\uffd9" + -+ "\035\uffd9\036\uffd9\037\uffd9\040\uffd9\041\uffd9\042\uffd9\043" + -+ "\uffd9\044\uffd9\045\uffd9\046\uffd9\047\uffd9\050\uffd9\051\uffd9" + -+ "\052\uffd9\053\uffd9\054\uffd9\055\uffd9\056\uffd9\057\uffd9\060" + -+ "\uffd9\061\uffd9\062\uffd9\063\uffd9\064\uffd9\065\uffd9\066\uffd9" + -+ "\067\uffd9\070\uffd9\071\uffd9\072\uffd9\073\uffd9\074\uffd9\103" + -+ "\uffd9\105\uffd9\106\uffd9\107\uffd9\110\uffd9\111\uffd9\112\uffd9" + -+ "\001\002\000\014\013\ufff8\022\ufff8\023\ufff8\024\ufff8\076" + -+ "\ufff8\001\002\000\150\002\uffee\003\uffee\004\uffee\006\uffee" + -+ "\010\uffee\016\uffee\021\uffee\026\uffee\027\uffee\030\uffee\031" + -+ "\uffee\032\uffee\033\uffee\034\uffee\037\uffee\040\uffee\041\uffee" + -+ "\042\uffee\043\uffee\044\uffee\045\uffee\046\uffee\047\uffee\050" + -+ "\uffee\051\uffee\052\uffee\053\uffee\054\uffee\055\uffee\056\uffee" + -+ "\057\uffee\060\uffee\061\uffee\062\uffee\063\uffee\064\uffee\065" + -+ "\uffee\066\uffee\067\uffee\070\uffee\071\uffee\072\uffee\073\uffee" + -+ "\074\uffee\103\uffee\105\uffee\106\uffee\107\uffee\110\uffee\111" + -+ "\uffee\112\uffee\001\002\000\140\004\uffe1\006\200\010\uffe1" + -+ "\026\uffe1\027\uffe1\030\uffe1\031\uffe1\032\uffe1\033\uffe1\034" + -+ "\176\037\uffe1\040\uffe1\041\uffe1\042\uffe1\043\uffe1\044\uffe1" + -+ "\045\uffe1\046\uffe1\047\uffe1\050\uffe1\051\uffe1\052\uffe1\053" + -+ "\uffe1\054\uffe1\055\uffe1\056\uffe1\057\uffe1\060\uffe1\061\uffe1" + -+ "\062\uffe1\063\uffe1\064\uffe1\065\uffe1\066\uffe1\067\uffe1\070" + -+ "\uffe1\071\uffe1\072\uffe1\073\uffe1\074\uffe1\103\uffe1\105\uffe1" + -+ "\106\uffe1\107\uffe1\110\uffe1\111\uffe1\112\uffe1\001\002\000" + -+ "\004\076\162\001\002\000\150\002\ufff3\003\ufff3\004\ufff3" + -+ "\006\ufff3\010\ufff3\016\ufff3\021\ufff3\026\ufff3\027\ufff3\030" + -+ "\ufff3\031\ufff3\032\ufff3\033\ufff3\034\ufff3\037\ufff3\040\ufff3" + -+ "\041\ufff3\042\ufff3\043\ufff3\044\ufff3\045\ufff3\046\ufff3\047" + -+ "\ufff3\050\ufff3\051\ufff3\052\ufff3\053\ufff3\054\ufff3\055\ufff3" + -+ "\056\ufff3\057\ufff3\060\ufff3\061\ufff3\062\ufff3\063\ufff3\064" + -+ "\ufff3\065\ufff3\066\ufff3\067\ufff3\070\ufff3\071\ufff3\072\ufff3" + -+ "\073\ufff3\074\ufff3\103\ufff3\105\ufff3\106\ufff3\107\ufff3\110" + -+ "\ufff3\111\ufff3\112\ufff3\001\002\000\146\002\000\003\152" + -+ "\004\uffe6\006\uffe6\010\uffe6\016\157\026\uffe6\027\uffe6\030" + -+ "\uffe6\031\uffe6\032\uffe6\033\uffe6\034\uffe6\037\uffe6\040\uffe6" + -+ "\041\uffe6\042\uffe6\043\uffe6\044\uffe6\045\uffe6\046\uffe6\047" + -+ "\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6\054\uffe6\055\uffe6" + -+ "\056\uffe6\057\uffe6\060\uffe6\061\uffe6\062\uffe6\063\uffe6\064" + -+ "\uffe6\065\uffe6\066\uffe6\067\uffe6\070\uffe6\071\uffe6\072\uffe6" + -+ "\073\uffe6\074\uffe6\103\uffe6\105\uffe6\106\uffe6\107\uffe6\110" + -+ "\uffe6\111\uffe6\112\uffe6\001\002\000\004\076\162\001\002" + -+ "\000\150\002\ufff6\003\ufff6\004\ufff6\006\ufff6\010\ufff6\016" + -+ "\ufff6\021\ufff6\026\ufff6\027\ufff6\030\ufff6\031\ufff6\032\ufff6" + -+ "\033\ufff6\034\ufff6\037\ufff6\040\ufff6\041\ufff6\042\ufff6\043" + -+ "\ufff6\044\ufff6\045\ufff6\046\ufff6\047\ufff6\050\ufff6\051\ufff6" + -+ "\052\ufff6\053\ufff6\054\ufff6\055\ufff6\056\ufff6\057\ufff6\060" + -+ "\ufff6\061\ufff6\062\ufff6\063\ufff6\064\ufff6\065\ufff6\066\ufff6" + -+ "\067\ufff6\070\ufff6\071\ufff6\072\ufff6\073\ufff6\074\ufff6\103" + -+ "\ufff6\105\ufff6\106\ufff6\107\ufff6\110\ufff6\111\ufff6\112\ufff6" + -+ "\001\002\000\004\017\165\001\002\000\006\015\163\017" + -+ "\uffe4\001\002\000\006\017\uffe3\076\162\001\002\000\004" + -+ "\017\uffe5\001\002\000\142\004\uffe7\006\uffe7\010\uffe7\020" + -+ "\166\026\uffe7\027\uffe7\030\uffe7\031\uffe7\032\uffe7\033\uffe7" + -+ "\034\uffe7\037\uffe7\040\uffe7\041\uffe7\042\uffe7\043\uffe7\044" + -+ "\uffe7\045\uffe7\046\uffe7\047\uffe7\050\uffe7\051\uffe7\052\uffe7" + -+ "\053\uffe7\054\uffe7\055\uffe7\056\uffe7\057\uffe7\060\uffe7\061" + -+ "\uffe7\062\uffe7\063\uffe7\064\uffe7\065\uffe7\066\uffe7\067\uffe7" + -+ "\070\uffe7\071\uffe7\072\uffe7\073\uffe7\074\uffe7\103\uffe7\105" + -+ "\uffe7\106\uffe7\107\uffe7\110\uffe7\111\uffe7\112\uffe7\001\002" + -+ "\000\144\003\152\004\uffe6\006\uffe6\010\uffe6\016\154\026" + -+ "\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6\034\uffe6" + -+ "\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044\uffe6\045" + -+ "\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6" + -+ "\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061\uffe6\062" + -+ "\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6\070\uffe6" + -+ "\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105\uffe6\106" + -+ "\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002\000\146" + -+ "\003\152\004\uffe6\006\uffe6\010\uffe6\016\157\021\170\026" + -+ "\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6\034\uffe6" + -+ "\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044\uffe6\045" + -+ "\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6" + -+ "\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061\uffe6\062" + -+ "\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6\070\uffe6" + -+ "\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105\uffe6\106" + -+ "\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002\000\150" + -+ "\002\ufff5\003\ufff5\004\ufff5\006\ufff5\010\ufff5\016\ufff5\021" + -+ "\ufff5\026\ufff5\027\ufff5\030\ufff5\031\ufff5\032\ufff5\033\ufff5" + -+ "\034\ufff5\037\ufff5\040\ufff5\041\ufff5\042\ufff5\043\ufff5\044" + -+ "\ufff5\045\ufff5\046\ufff5\047\ufff5\050\ufff5\051\ufff5\052\ufff5" + -+ "\053\ufff5\054\ufff5\055\ufff5\056\ufff5\057\ufff5\060\ufff5\061" + -+ "\ufff5\062\ufff5\063\ufff5\064\ufff5\065\ufff5\066\ufff5\067\ufff5" + -+ "\070\ufff5\071\ufff5\072\ufff5\073\ufff5\074\ufff5\103\ufff5\105" + -+ "\ufff5\106\ufff5\107\ufff5\110\ufff5\111\ufff5\112\ufff5\001\002" + -+ "\000\004\017\172\001\002\000\142\004\uffe7\006\uffe7\010" + -+ "\uffe7\020\173\026\uffe7\027\uffe7\030\uffe7\031\uffe7\032\uffe7" + -+ "\033\uffe7\034\uffe7\037\uffe7\040\uffe7\041\uffe7\042\uffe7\043" + -+ "\uffe7\044\uffe7\045\uffe7\046\uffe7\047\uffe7\050\uffe7\051\uffe7" + -+ "\052\uffe7\053\uffe7\054\uffe7\055\uffe7\056\uffe7\057\uffe7\060" + -+ "\uffe7\061\uffe7\062\uffe7\063\uffe7\064\uffe7\065\uffe7\066\uffe7" + -+ "\067\uffe7\070\uffe7\071\uffe7\072\uffe7\073\uffe7\074\uffe7\103" + -+ "\uffe7\105\uffe7\106\uffe7\107\uffe7\110\uffe7\111\uffe7\112\uffe7" + -+ "\001\002\000\144\003\152\004\uffe6\006\uffe6\010\uffe6\016" + -+ "\154\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6" + -+ "\034\uffe6\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044" + -+ "\uffe6\045\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6" + -+ "\053\uffe6\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061" + -+ "\uffe6\062\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6" + -+ "\070\uffe6\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105" + -+ "\uffe6\106\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002" + -+ "\000\146\003\152\004\uffe6\006\uffe6\010\uffe6\016\157\021" + -+ "\175\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6" + -+ "\034\uffe6\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044" + -+ "\uffe6\045\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6" + -+ "\053\uffe6\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061" + -+ "\uffe6\062\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6" + -+ "\070\uffe6\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105" + -+ "\uffe6\106\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002" + -+ "\000\150\002\ufff4\003\ufff4\004\ufff4\006\ufff4\010\ufff4\016" + -+ "\ufff4\021\ufff4\026\ufff4\027\ufff4\030\ufff4\031\ufff4\032\ufff4" + -+ "\033\ufff4\034\ufff4\037\ufff4\040\ufff4\041\ufff4\042\ufff4\043" + -+ "\ufff4\044\ufff4\045\ufff4\046\ufff4\047\ufff4\050\ufff4\051\ufff4" + -+ "\052\ufff4\053\ufff4\054\ufff4\055\ufff4\056\ufff4\057\ufff4\060" + -+ "\ufff4\061\ufff4\062\ufff4\063\ufff4\064\ufff4\065\ufff4\066\ufff4" + -+ "\067\ufff4\070\ufff4\071\ufff4\072\ufff4\073\ufff4\074\ufff4\103" + -+ "\ufff4\105\ufff4\106\ufff4\107\ufff4\110\ufff4\111\ufff4\112\ufff4" + -+ "\001\002\000\004\075\216\001\002\000\134\004\066\010" + -+ "\064\026\056\027\043\030\072\031\060\032\076\033\023" + -+ "\037\061\040\033\041\021\042\074\043\063\044\062\045" + -+ "\073\046\071\047\036\050\050\051\101\052\053\053\052" + -+ "\054\047\055\055\056\054\057\044\060\042\061\067\062" + -+ "\040\063\102\064\032\065\051\066\031\067\034\070\020" + -+ "\071\075\072\100\073\025\074\026\103\037\105\070\106" + -+ "\041\107\035\110\022\111\077\112\024\001\002\000\134" + -+ "\004\uffe2\010\uffe2\026\uffe2\027\uffe2\030\uffe2\031\uffe2\032" + -+ "\uffe2\033\uffe2\037\uffe2\040\uffe2\041\uffe2\042\uffe2\043\uffe2" + -+ "\044\uffe2\045\uffe2\046\uffe2\047\uffe2\050\uffe2\051\uffe2\052" + -+ "\uffe2\053\uffe2\054\uffe2\055\uffe2\056\uffe2\057\uffe2\060\uffe2" + -+ "\061\uffe2\062\uffe2\063\uffe2\064\uffe2\065\uffe2\066\uffe2\067" + -+ "\uffe2\070\uffe2\071\uffe2\072\uffe2\073\uffe2\074\uffe2\103\uffe2" + -+ "\105\uffe2\106\uffe2\107\uffe2\110\uffe2\111\uffe2\112\uffe2\001" + -+ "\002\000\014\007\210\025\205\035\202\036\204\103\104" + -+ "\001\002\000\150\002\uffe8\003\uffe8\004\uffe8\006\uffe8\010" + -+ "\uffe8\016\uffe8\021\uffe8\026\uffe8\027\uffe8\030\uffe8\031\uffe8" + -+ "\032\uffe8\033\uffe8\034\uffe8\037\uffe8\040\uffe8\041\uffe8\042" + -+ "\uffe8\043\uffe8\044\uffe8\045\uffe8\046\uffe8\047\uffe8\050\uffe8" + -+ "\051\uffe8\052\uffe8\053\uffe8\054\uffe8\055\uffe8\056\uffe8\057" + -+ "\uffe8\060\uffe8\061\uffe8\062\uffe8\063\uffe8\064\uffe8\065\uffe8" + -+ "\066\uffe8\067\uffe8\070\uffe8\071\uffe8\072\uffe8\073\uffe8\074" + -+ "\uffe8\103\uffe8\105\uffe8\106\uffe8\107\uffe8\110\uffe8\111\uffe8" + -+ "\112\uffe8\001\002\000\150\002\uffe9\003\uffe9\004\uffe9\006" + -+ "\uffe9\010\uffe9\016\uffe9\021\uffe9\026\uffe9\027\uffe9\030\uffe9" + -+ "\031\uffe9\032\uffe9\033\uffe9\034\uffe9\037\uffe9\040\uffe9\041" + -+ "\uffe9\042\uffe9\043\uffe9\044\uffe9\045\uffe9\046\uffe9\047\uffe9" + -+ "\050\uffe9\051\uffe9\052\uffe9\053\uffe9\054\uffe9\055\uffe9\056" + -+ "\uffe9\057\uffe9\060\uffe9\061\uffe9\062\uffe9\063\uffe9\064\uffe9" + -+ "\065\uffe9\066\uffe9\067\uffe9\070\uffe9\071\uffe9\072\uffe9\073" + -+ "\uffe9\074\uffe9\103\uffe9\105\uffe9\106\uffe9\107\uffe9\110\uffe9" + -+ "\111\uffe9\112\uffe9\001\002\000\134\004\066\010\064\026" + -+ "\056\027\043\030\072\031\060\032\076\033\023\037\061" + -+ "\040\033\041\021\042\074\043\063\044\062\045\073\046" + -+ "\071\047\036\050\050\051\101\052\053\053\052\054\047" + -+ "\055\055\056\054\057\044\060\042\061\067\062\040\063" + -+ "\102\064\032\065\051\066\031\067\034\070\020\071\075" + -+ "\072\100\073\025\074\026\103\037\105\070\106\041\107" + -+ "\035\110\022\111\077\112\024\001\002\000\004\075\213" + -+ "\001\002\000\006\025\205\035\211\001\002\000\150\002" + - "\ufff2\003\ufff2\004\ufff2\006\ufff2\010\ufff2\016\ufff2\021\ufff2" + - "\026\ufff2\027\ufff2\030\ufff2\031\ufff2\032\ufff2\033\ufff2\034" + -- "\ufff2\045\ufff2\047\ufff2\050\ufff2\051\ufff2\052\ufff2\053\ufff2" + -- "\054\ufff2\001\002\000\006\025\uffed\035\uffed\001\002\000" + -- "\054\002\ufff0\003\ufff0\004\ufff0\006\ufff0\010\ufff0\016\ufff0" + -- "\021\ufff0\026\ufff0\027\ufff0\030\ufff0\031\ufff0\032\ufff0\033" + -- "\ufff0\034\ufff0\045\ufff0\047\ufff0\050\ufff0\051\ufff0\052\ufff0" + -- "\053\ufff0\054\ufff0\001\002\000\054\002\ufff1\003\ufff1\004" + -- "\ufff1\006\ufff1\010\ufff1\016\ufff1\021\ufff1\026\ufff1\027\ufff1" + -- "\030\ufff1\031\ufff1\032\ufff1\033\ufff1\034\ufff1\045\ufff1\047" + -- "\ufff1\050\ufff1\051\ufff1\052\ufff1\053\ufff1\054\ufff1\001\002" + -- "\000\054\002\uffea\003\uffea\004\uffea\006\uffea\010\uffea\016" + -- "\uffea\021\uffea\026\uffea\027\uffea\030\uffea\031\uffea\032\uffea" + -- "\033\uffea\034\uffea\045\uffea\047\uffea\050\uffea\051\uffea\052" + -- "\uffea\053\uffea\054\uffea\001\002\000\012\007\157\025\uffec" + -- "\035\uffec\045\106\001\002\000\006\025\uffeb\035\uffeb\001" + -- "\002\000\054\002\uffef\003\uffef\004\uffef\006\uffef\010\uffef" + -- "\016\uffef\021\uffef\026\uffef\027\uffef\030\uffef\031\uffef\032" + -- "\uffef\033\uffef\034\uffef\045\uffef\047\uffef\050\uffef\051\uffef" + -- "\052\uffef\053\uffef\054\uffef\001\002" }); -+ "\ufff2\037\ufff2\040\ufff2\041\ufff2\042\ufff2\043\ufff2\044\ufff2" + -+ "\045\ufff2\046\ufff2\047\ufff2\050\ufff2\051\ufff2\052\ufff2\053" + -+ "\ufff2\054\ufff2\055\ufff2\056\ufff2\057\ufff2\060\ufff2\061\ufff2" + -+ "\062\ufff2\063\ufff2\064\ufff2\065\ufff2\066\ufff2\067\ufff2\070" + -+ "\ufff2\071\ufff2\072\ufff2\073\ufff2\074\ufff2\103\ufff2\105\ufff2" + -+ "\106\ufff2\107\ufff2\110\ufff2\111\ufff2\112\ufff2\001\002\000" + -+ "\006\025\uffed\035\uffed\001\002\000\150\002\ufff0\003\ufff0" + -+ "\004\ufff0\006\ufff0\010\ufff0\016\ufff0\021\ufff0\026\ufff0\027" + -+ "\ufff0\030\ufff0\031\ufff0\032\ufff0\033\ufff0\034\ufff0\037\ufff0" + -+ "\040\ufff0\041\ufff0\042\ufff0\043\ufff0\044\ufff0\045\ufff0\046" + -+ "\ufff0\047\ufff0\050\ufff0\051\ufff0\052\ufff0\053\ufff0\054\ufff0" + -+ "\055\ufff0\056\ufff0\057\ufff0\060\ufff0\061\ufff0\062\ufff0\063" + -+ "\ufff0\064\ufff0\065\ufff0\066\ufff0\067\ufff0\070\ufff0\071\ufff0" + -+ "\072\ufff0\073\ufff0\074\ufff0\103\ufff0\105\ufff0\106\ufff0\107" + -+ "\ufff0\110\ufff0\111\ufff0\112\ufff0\001\002\000\150\002\ufff1" + -+ "\003\ufff1\004\ufff1\006\ufff1\010\ufff1\016\ufff1\021\ufff1\026" + -+ "\ufff1\027\ufff1\030\ufff1\031\ufff1\032\ufff1\033\ufff1\034\ufff1" + -+ "\037\ufff1\040\ufff1\041\ufff1\042\ufff1\043\ufff1\044\ufff1\045" + -+ "\ufff1\046\ufff1\047\ufff1\050\ufff1\051\ufff1\052\ufff1\053\ufff1" + -+ "\054\ufff1\055\ufff1\056\ufff1\057\ufff1\060\ufff1\061\ufff1\062" + -+ "\ufff1\063\ufff1\064\ufff1\065\ufff1\066\ufff1\067\ufff1\070\ufff1" + -+ "\071\ufff1\072\ufff1\073\ufff1\074\ufff1\103\ufff1\105\ufff1\106" + -+ "\ufff1\107\ufff1\110\ufff1\111\ufff1\112\ufff1\001\002\000\150" + -+ "\002\uffea\003\uffea\004\uffea\006\uffea\010\uffea\016\uffea\021" + -+ "\uffea\026\uffea\027\uffea\030\uffea\031\uffea\032\uffea\033\uffea" + -+ "\034\uffea\037\uffea\040\uffea\041\uffea\042\uffea\043\uffea\044" + -+ "\uffea\045\uffea\046\uffea\047\uffea\050\uffea\051\uffea\052\uffea" + -+ "\053\uffea\054\uffea\055\uffea\056\uffea\057\uffea\060\uffea\061" + -+ "\uffea\062\uffea\063\uffea\064\uffea\065\uffea\066\uffea\067\uffea" + -+ "\070\uffea\071\uffea\072\uffea\073\uffea\074\uffea\103\uffea\105" + -+ "\uffea\106\uffea\107\uffea\110\uffea\111\uffea\112\uffea\001\002" + -+ "\000\012\007\215\025\uffec\035\uffec\103\104\001\002\000" + -+ "\006\025\uffeb\035\uffeb\001\002\000\150\002\uffef\003\uffef" + -+ "\004\uffef\006\uffef\010\uffef\016\uffef\021\uffef\026\uffef\027" + -+ "\uffef\030\uffef\031\uffef\032\uffef\033\uffef\034\uffef\037\uffef" + -+ "\040\uffef\041\uffef\042\uffef\043\uffef\044\uffef\045\uffef\046" + -+ "\uffef\047\uffef\050\uffef\051\uffef\052\uffef\053\uffef\054\uffef" + -+ "\055\uffef\056\uffef\057\uffef\060\uffef\061\uffef\062\uffef\063" + -+ "\uffef\064\uffef\065\uffef\066\uffef\067\uffef\070\uffef\071\uffef" + -+ "\072\uffef\073\uffef\074\uffef\103\uffef\105\uffef\106\uffef\107" + -+ "\uffef\110\uffef\111\uffef\112\uffef\001\002" }); - - /** Access to parse-action table. */ - public short[][] action_table() {return _action_table;} -@@ -331,55 +966,64 @@ - /** reduce_goto table. */ - protected static final short[][] _reduce_table = - unpackFromStrings(new String[] { -- "\000\156\000\004\006\004\001\001\000\004\003\007\001" + -+ "\000\214\000\004\005\004\001\001\000\004\002\007\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + -- "\000\004\004\012\001\001\000\002\001\001\000\010\005" + -- "\116\017\114\022\117\001\001\000\002\001\001\000\002" + -- "\001\001\000\002\001\001\000\002\001\001\000\016\007" + -- "\025\010\032\011\037\012\042\013\035\021\026\001\001" + -+ "\000\004\003\012\001\001\000\002\001\001\000\010\004" + -+ "\154\016\152\021\155\001\001\000\002\001\001\000\002" + -+ "\001\001\000\002\001\001\000\002\001\001\000\016\006" + -+ "\026\007\027\010\064\011\044\012\056\020\045\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + -- "\002\001\001\000\012\011\112\012\042\013\035\021\026" + -+ "\002\001\001\000\002\001\001\000\002\001\001\000\002" + -+ "\001\001\000\002\001\001\000\012\010\106\011\044\012" + -+ "\056\020\045\001\001\000\002\001\001\000\002\001\001" + -+ "\000\002\001\001\000\002\001\001\000\012\010\147\011" + -+ "\044\012\056\020\045\001\001\000\002\001\001\000\002" + -+ "\001\001\000\002\001\001\000\012\010\146\011\044\012" + -+ "\056\020\045\001\001\000\002\001\001\000\002\001\001" + -+ "\000\002\001\001\000\002\001\001\000\002\001\001\000" + -+ "\002\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + -- "\000\012\011\110\012\042\013\035\021\026\001\001\000" + -- "\016\007\104\010\032\011\037\012\042\013\035\021\026" + -- "\001\001\000\002\001\001\000\002\001\001\000\012\011" + -- "\103\012\042\013\035\021\026\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + -- "\010\015\045\020\053\021\044\001\001\000\002\001\001" + -- "\000\002\001\001\000\010\015\045\020\070\021\044\001" + -- "\001\000\010\015\045\020\064\021\044\001\001\000\002" + -- "\001\001\000\002\001\001\000\002\001\001\000\006\015" + -- "\060\021\057\001\001\000\002\001\001\000\002\001\001" + -+ "\010\014\116\017\117\020\111\001\001\000\002\001\001" + -+ "\000\016\006\102\007\027\010\064\011\044\012\056\020" + -+ "\045\001\001\000\002\001\001\000\002\001\001\000\002" + -+ "\001\001\000\002\001\001\000\002\001\001\000\002\001" + -+ "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + -- "\002\001\001\000\002\001\001\000\002\001\001\000\006" + -- "\015\060\021\057\001\001\000\002\001\001\000\010\015" + -- "\045\020\072\021\044\001\001\000\002\001\001\000\006" + -- "\015\060\021\057\001\001\000\002\001\001\000\006\015" + -- "\060\021\057\001\001\000\002\001\001\000\002\001\001" + -- "\000\002\001\001\000\002\001\001\000\002\001\001\000" + -+ "\002\001\001\000\014\007\105\010\064\011\044\012\056" + -+ "\020\045\001\001\000\002\001\001\000\012\010\106\011" + -+ "\044\012\056\020\045\001\001\000\002\001\001\000\002" + -+ "\001\001\000\002\001\001\000\002\001\001\000\010\014" + -+ "\116\017\133\020\111\001\001\000\010\014\116\017\127" + -+ "\020\111\001\001\000\002\001\001\000\002\001\001\000" + -+ "\002\001\001\000\006\014\124\020\121\001\001\000\002" + -+ "\001\001\000\002\001\001\000\002\001\001\000\002\001" + -+ "\001\000\002\001\001\000\010\014\116\017\131\020\111" + -+ "\001\001\000\002\001\001\000\006\014\124\020\121\001" + -+ "\001\000\002\001\001\000\006\014\124\020\121\001\001" + -+ "\000\002\001\001\000\006\014\124\020\121\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\002" + -- "\001\001\000\002\001\001\000\014\010\107\011\037\012" + -- "\042\013\035\021\026\001\001\000\002\001\001\000\012" + -- "\011\110\012\042\013\035\021\026\001\001\000\002\001" + -- "\001\000\002\001\001\000\002\001\001\000\002\001\001" + -- "\000\004\023\140\001\001\000\004\016\132\001\001\000" + -- "\002\001\001\000\006\005\121\017\114\001\001\000\004" + -- "\016\122\001\001\000\002\001\001\000\002\001\001\000" + -- "\002\001\001\000\004\016\125\001\001\000\002\001\001" + -- "\000\002\001\001\000\010\005\116\017\114\022\130\001" + -- "\001\000\006\005\121\017\114\001\001\000\002\001\001" + -- "\000\002\001\001\000\002\001\001\000\010\005\116\017" + -- "\114\022\135\001\001\000\006\005\121\017\114\001\001" + -- "\000\002\001\001\000\002\001\001\000\016\007\142\010" + -- "\032\011\037\012\042\013\035\021\026\001\001\000\002" + -- "\001\001\000\010\014\147\024\144\025\150\001\001\000" + -- "\002\001\001\000\002\001\001\000\016\007\155\010\032" + -- "\011\037\012\042\013\035\021\026\001\001\000\002\001" + -- "\001\000\004\024\153\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + -- "" }); -+ "\000\002\001\001\000\002\001\001\000\002\001\001\000" + -+ "\002\001\001\000\004\022\176\001\001\000\004\015\170" + -+ "\001\001\000\002\001\001\000\006\004\157\016\152\001" + -+ "\001\000\004\015\160\001\001\000\002\001\001\000\002" + -+ "\001\001\000\002\001\001\000\004\015\163\001\001\000" + -+ "\002\001\001\000\002\001\001\000\010\004\154\016\152" + -+ "\021\166\001\001\000\006\004\157\016\152\001\001\000" + -+ "\002\001\001\000\002\001\001\000\002\001\001\000\010" + -+ "\004\154\016\152\021\173\001\001\000\006\004\157\016" + -+ "\152\001\001\000\002\001\001\000\002\001\001\000\016" + -+ "\006\200\007\027\010\064\011\044\012\056\020\045\001" + -+ "\001\000\002\001\001\000\010\013\205\023\202\024\206" + -+ "\001\001\000\002\001\001\000\002\001\001\000\016\006" + -+ "\213\007\027\010\064\011\044\012\056\020\045\001\001" + -+ "\000\002\001\001\000\004\023\211\001\001\000\002\001" + -+ "\001\000\002\001\001\000\002\001\001\000\002\001\001" + -+ "\000\002\001\001\000\002\001\001\000\002\001\001\000" + -+ "\002\001\001" }); - - /** Access to reduce_goto table. */ - public short[][] reduce_table() {return _reduce_table;} -@@ -468,7 +1112,7 @@ - - - LexScan scanner; -- CharClasses charClasses = new CharClasses(0xFFFF); -+ CharClasses charClasses = new CharClasses(Options.jlex ? 127 : 0xFFFF); - RegExps regExps = new RegExps(); - Macros macros = new Macros(); - Integer stateNumber; -@@ -518,6 +1162,96 @@ - case sym.LOWERCLASS: - return Character.isLowerCase(c); - -+ case sym.UNICODE_UNASSIGNED: -+ return Character.getType(c) == Character.UNASSIGNED; -+ -+ case sym.UNICODE_UPPERCASE_LETTER: -+ return Character.getType(c) == Character.UPPERCASE_LETTER; -+ -+ case sym.UNICODE_LOWERCASE_LETTER: -+ return Character.getType(c) == Character.LOWERCASE_LETTER; -+ -+ case sym.UNICODE_TITLECASE_LETTER: -+ return Character.getType(c) == Character.TITLECASE_LETTER; -+ -+ case sym.UNICODE_MODIFIER_LETTER: -+ return Character.getType(c) == Character.MODIFIER_LETTER; -+ -+ case sym.UNICODE_OTHER_LETTER: -+ return Character.getType(c) == Character.OTHER_LETTER; -+ -+ case sym.UNICODE_NON_SPACING_MARK: -+ return Character.getType(c) == Character.NON_SPACING_MARK; -+ -+ case sym.UNICODE_ENCLOSING_MARK: -+ return Character.getType(c) == Character.ENCLOSING_MARK; -+ -+ case sym.UNICODE_COMBINING_SPACING_MARK: -+ return Character.getType(c) == Character.COMBINING_SPACING_MARK; -+ -+ case sym.UNICODE_DECIMAL_DIGIT_NUMBER: -+ return Character.getType(c) == Character.DECIMAL_DIGIT_NUMBER; -+ -+ case sym.UNICODE_LETTER_NUMBER: -+ return Character.getType(c) == Character.LETTER_NUMBER; -+ -+ case sym.UNICODE_OTHER_NUMBER: -+ return Character.getType(c) == Character.OTHER_NUMBER; -+ -+ case sym.UNICODE_SPACE_SEPARATOR: -+ return Character.getType(c) == Character.SPACE_SEPARATOR; -+ -+ case sym.UNICODE_LINE_SEPARATOR: -+ return Character.getType(c) == Character.LINE_SEPARATOR; -+ -+ case sym.UNICODE_PARAGRAPH_SEPARATOR: -+ return Character.getType(c) == Character.PARAGRAPH_SEPARATOR; -+ -+ case sym.UNICODE_CONTROL: -+ return Character.getType(c) == Character.CONTROL; -+ -+ case sym.UNICODE_FORMAT: -+ return Character.getType(c) == Character.FORMAT; -+ -+ case sym.UNICODE_PRIVATE_USE: -+ return Character.getType(c) == Character.PRIVATE_USE; -+ -+ case sym.UNICODE_SURROGATE: -+ return Character.getType(c) == Character.SURROGATE; -+ -+ case sym.UNICODE_DASH_PUNCTUATION: -+ return Character.getType(c) == Character.DASH_PUNCTUATION; -+ -+ case sym.UNICODE_START_PUNCTUATION: -+ return Character.getType(c) == Character.START_PUNCTUATION; -+ -+ case sym.UNICODE_END_PUNCTUATION: -+ return Character.getType(c) == Character.END_PUNCTUATION; -+ -+ case sym.UNICODE_CONNECTOR_PUNCTUATION: -+ return Character.getType(c) == Character.CONNECTOR_PUNCTUATION; -+ -+ case sym.UNICODE_OTHER_PUNCTUATION: -+ return Character.getType(c) == Character.OTHER_PUNCTUATION; -+ -+ case sym.UNICODE_MATH_SYMBOL: -+ return Character.getType(c) == Character.MATH_SYMBOL; -+ -+ case sym.UNICODE_CURRENCY_SYMBOL: -+ return Character.getType(c) == Character.CURRENCY_SYMBOL; -+ -+ case sym.UNICODE_MODIFIER_SYMBOL: -+ return Character.getType(c) == Character.MODIFIER_SYMBOL; -+ -+ case sym.UNICODE_OTHER_SYMBOL: -+ return Character.getType(c) == Character.OTHER_SYMBOL; -+ -+ case sym.UNICODE_INITIAL_QUOTE_PUNCTUATION: -+ return Character.getType(c) == Character.INITIAL_QUOTE_PUNCTUATION; -+ -+ case sym.UNICODE_FINAL_QUOTE_PUNCTUATION: -+ return Character.getType(c) == Character.FINAL_QUOTE_PUNCTUATION; -+ - default: return false; - } - } -@@ -637,227 +1371,497 @@ - switch (CUP$LexParse$act_num) - { - /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 104: // preclass ::= UNICODE_FINAL_QUOTE_PUNCTUATION -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_FINAL_QUOTE_PUNCTUATION); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 103: // preclass ::= UNICODE_INITIAL_QUOTE_PUNCTUATION -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_INITIAL_QUOTE_PUNCTUATION); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 102: // preclass ::= UNICODE_OTHER_SYMBOL -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_OTHER_SYMBOL); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 101: // preclass ::= UNICODE_MODIFIER_SYMBOL -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_MODIFIER_SYMBOL); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 100: // preclass ::= UNICODE_CURRENCY_SYMBOL -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_CURRENCY_SYMBOL); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 99: // preclass ::= UNICODE_MATH_SYMBOL -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_MATH_SYMBOL); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 98: // preclass ::= UNICODE_OTHER_PUNCTUATION -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_OTHER_PUNCTUATION); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 97: // preclass ::= UNICODE_CONNECTOR_PUNCTUATION -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_CONNECTOR_PUNCTUATION); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 96: // preclass ::= UNICODE_END_PUNCTUATION -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_END_PUNCTUATION); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 95: // preclass ::= UNICODE_START_PUNCTUATION -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_START_PUNCTUATION); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 94: // preclass ::= UNICODE_DASH_PUNCTUATION -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_DASH_PUNCTUATION); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 93: // preclass ::= UNICODE_SURROGATE -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_SURROGATE); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 92: // preclass ::= UNICODE_PRIVATE_USE -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_PRIVATE_USE); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 91: // preclass ::= UNICODE_FORMAT -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_FORMAT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 90: // preclass ::= UNICODE_CONTROL -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_CONTROL); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 89: // preclass ::= UNICODE_PARAGRAPH_SEPARATOR -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_PARAGRAPH_SEPARATOR); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 88: // preclass ::= UNICODE_LINE_SEPARATOR -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_LINE_SEPARATOR); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 87: // preclass ::= UNICODE_SPACE_SEPARATOR -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_SPACE_SEPARATOR); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 86: // preclass ::= UNICODE_OTHER_NUMBER -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_OTHER_NUMBER); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 85: // preclass ::= UNICODE_LETTER_NUMBER -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_LETTER_NUMBER); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 84: // preclass ::= UNICODE_DECIMAL_DIGIT_NUMBER -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_DECIMAL_DIGIT_NUMBER); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 83: // preclass ::= UNICODE_COMBINING_SPACING_MARK -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_COMBINING_SPACING_MARK); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 82: // preclass ::= UNICODE_ENCLOSING_MARK -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_ENCLOSING_MARK); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 81: // preclass ::= UNICODE_NON_SPACING_MARK -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_NON_SPACING_MARK); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 80: // preclass ::= UNICODE_OTHER_LETTER -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_OTHER_LETTER); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 79: // preclass ::= UNICODE_MODIFIER_LETTER -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_MODIFIER_LETTER); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 78: // preclass ::= UNICODE_TITLECASE_LETTER -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_TITLECASE_LETTER); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 77: // preclass ::= UNICODE_LOWERCASE_LETTER -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_LOWERCASE_LETTER); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 76: // preclass ::= UNICODE_UPPERCASE_LETTER -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_UPPERCASE_LETTER); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ -+ case 75: // preclass ::= UNICODE_UNASSIGNED -+ { -+ Vector RESULT =null; -+ RESULT = makePreClass(sym.UNICODE_UNASSIGNED); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); -+ } -+ return CUP$LexParse$result; -+ -+ /*. . . . . . . . . . . . . . . . . . . .*/ - case 74: // preclass ::= LOWERCLASS - { -- Vector RESULT = null; -+ Vector RESULT =null; - RESULT = makePreClass(sym.LOWERCLASS); -- CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 73: // preclass ::= UPPERCLASS - { -- Vector RESULT = null; -+ Vector RESULT =null; - RESULT = makePreClass(sym.UPPERCLASS); -- CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 72: // preclass ::= DIGITCLASS - { -- Vector RESULT = null; -+ Vector RESULT =null; - RESULT = makePreClass(sym.DIGITCLASS); -- CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 71: // preclass ::= LETTERCLASS - { -- Vector RESULT = null; -+ Vector RESULT =null; - RESULT = makePreClass(sym.LETTERCLASS); -- CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 70: // preclass ::= JLETTERDIGITCLASS - { -- Vector RESULT = null; -+ Vector RESULT =null; - RESULT = makePreClass(sym.JLETTERDIGITCLASS); -- CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 69: // preclass ::= JLETTERCLASS - { -- Vector RESULT = null; -+ Vector RESULT =null; - RESULT = makePreClass(sym.JLETTERCLASS); -- CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 68: // classcontentelem ::= CHAR - { -- Interval RESULT = null; -+ Interval RESULT =null; -- int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Interval(c.charValue(), c.charValue()); -- CUP$LexParse$result = new java_cup.runtime.Symbol(11/*classcontentelem*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",10, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 67: // classcontentelem ::= CHAR DASH CHAR - { -- Interval RESULT = null; -+ Interval RESULT =null; - int c1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int c1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - Character c1 = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; -- int c2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int c2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Character c2 = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int c2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int c2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Character c2 = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Interval(c1.charValue(), c2.charValue()); -- CUP$LexParse$result = new java_cup.runtime.Symbol(11/*classcontentelem*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",10, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 66: // classcontent ::= MACROUSE - { -- Vector RESULT = null; -+ Vector RESULT =null; -- int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 65: // classcontent ::= classcontent MACROUSE - { -- Vector RESULT = null; -+ Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 64: // classcontent ::= STRING - { -- Vector RESULT = null; -+ Vector RESULT =null; -- int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - RESULT = new Vector(); - for (int i = 0; i < s.length(); i++) - RESULT.addElement(new Interval(s.charAt(i),s.charAt(i))); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 63: // classcontent ::= classcontent STRING - { -- Vector RESULT = null; -+ Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - for (int i = 0; i < s.length(); i++) - list.addElement(new Interval(s.charAt(i),s.charAt(i))); - RESULT = list; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 62: // classcontent ::= preclass - { -- Vector RESULT = null; -+ Vector RESULT =null; -- int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = list; -- CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 61: // classcontent ::= classcontent preclass - { -- Vector RESULT = null; -+ Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int plistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int plistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Vector plist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int plistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int plistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Vector plist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - for (Enumeration e = plist.elements(); e.hasMoreElements();) - list.addElement(e.nextElement()); - RESULT = list; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 60: // classcontent ::= classcontentelem - { -- Vector RESULT = null; -+ Vector RESULT =null; -- int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Interval elem = (Interval)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Interval elem = (Interval)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - Vector list = new Vector(); - list.addElement(elem); - RESULT = list; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 59: // classcontent ::= classcontent classcontentelem - { -- Vector RESULT = null; -+ Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Interval elem = (Interval)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Interval elem = (Interval)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - list.addElement(elem); - RESULT = list; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 58: // charclass ::= OPENCLASS HAT DASH classcontent CLOSECLASS - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - list.addElement(new Interval('-','-')); -@@ -868,20 +1872,20 @@ - } - RESULT = new RegExp1(sym.CCLASSNOT,list); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 57: // charclass ::= OPENCLASS DASH classcontent CLOSECLASS - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - list.addElement(new Interval('-','-')); -@@ -892,20 +1896,20 @@ - } - RESULT = new RegExp1(sym.CCLASS,list); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 56: // charclass ::= OPENCLASS HAT classcontent CLOSECLASS - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - charClasses.makeClassNot(list, Options.jlex && scanner.caseless); -@@ -915,17 +1919,17 @@ - } - RESULT = new RegExp1(sym.CCLASSNOT,list); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 55: // charclass ::= OPENCLASS HAT CLOSECLASS - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - Vector list = new Vector(); - list.addElement(new Interval((char)0,CharClasses.maxChar)); -@@ -937,20 +1941,20 @@ - } - RESULT = new RegExp1(sym.CCLASS,list); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 54: // charclass ::= OPENCLASS classcontent CLOSECLASS - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - charClasses.makeClass(list, Options.jlex && scanner.caseless); -@@ -960,28 +1964,28 @@ - } - RESULT = new RegExp1(sym.CCLASS,list); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 53: // charclass ::= OPENCLASS CLOSECLASS - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - - RESULT = new RegExp1(sym.CCLASS,null); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 52: // regexp ::= CHAR - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - if ( scanner.caseless ) { -@@ -997,14 +2001,14 @@ - syntaxError(ErrorMessages.CS2SMALL_CHAR, cleft, cright); - } - -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 51: // regexp ::= POINT - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - - Vector any = new Vector(); - any.addElement(new Interval('\n','\n')); -@@ -1012,17 +2016,17 @@ - charClasses.makeClass('\n', false); - RESULT = new RegExp1(sym.CCLASSNOT, any); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 50: // regexp ::= STRING - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int strleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int strright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- String str = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int strleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int strright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ String str = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - if ( scanner.caseless ) { -@@ -1039,17 +2043,17 @@ - } - - -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 49: // regexp ::= preclass - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - // assumption [correct?]: preclasses are already closed under case -@@ -1060,29 +2064,29 @@ - } - RESULT = new RegExp1(sym.CCLASS, list); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 48: // regexp ::= charclass - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp c = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp c = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = c; -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 47: // regexp ::= MACROUSE - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - if ( !scanner.macroDefinition ) { - if ( ! macros.markUsed(ident) ) -@@ -1091,26 +2095,26 @@ - } - RESULT = new RegExp1(sym.MACROUSE, ident); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 46: // regexp ::= OPENBRACKET series CLOSEBRACKET - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = r; -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 45: // regexp ::= regexp REPEAT REPEAT RBRACE - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value; -@@ -1121,205 +2125,205 @@ - int n2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Integer n2 = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = makeRepeat(r, n1.intValue(), n2.intValue(), n1left, n2right); -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 44: // regexp ::= regexp REPEAT RBRACE - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int nleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int nright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Integer n = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = makeRepeat(r, n.intValue(), n.intValue(), bleft, bright); -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 43: // regexp ::= regexp QUESTION - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = new RegExp1(sym.QUESTION, r); -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 42: // regexp ::= regexp PLUS - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = new RegExp1(sym.PLUS, r); -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 41: // regexp ::= regexp STAR - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = new RegExp1(sym.STAR, r); -- CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 40: // nregexp ::= TILDE nregexp - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new RegExp1(sym.TILDE, r); -- CUP$LexParse$result = new java_cup.runtime.Symbol(7/*nregexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 39: // nregexp ::= BANG nregexp - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new RegExp1(sym.BANG, r); -- CUP$LexParse$result = new java_cup.runtime.Symbol(7/*nregexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 38: // nregexp ::= regexp - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = r; -- CUP$LexParse$result = new java_cup.runtime.Symbol(7/*nregexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 37: // concs ::= nregexp - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = r; -- CUP$LexParse$result = new java_cup.runtime.Symbol(6/*concs*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("concs",5, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 36: // concs ::= concs nregexp - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int r1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int r1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r1 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int r2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int r2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new RegExp2(sym.CONCAT, r1, r2); -- CUP$LexParse$result = new java_cup.runtime.Symbol(6/*concs*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("concs",5, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 35: // series ::= BAR - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - syntaxError(ErrorMessages.REGEXP_EXPECTED, bleft, bright); -- CUP$LexParse$result = new java_cup.runtime.Symbol(5/*series*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 34: // series ::= concs - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = r; -- CUP$LexParse$result = new java_cup.runtime.Symbol(5/*series*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 33: // series ::= series BAR concs - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int r1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int r1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - RegExp r1 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; -- int r2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int r2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new RegExp2(sym.BAR, r1, r2); -- CUP$LexParse$result = new java_cup.runtime.Symbol(5/*series*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 32: // hatOPT ::= - { -- Boolean RESULT = null; -+ Boolean RESULT =null; - RESULT = new Boolean(false); -- CUP$LexParse$result = new java_cup.runtime.Symbol(17/*hatOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("hatOPT",16, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 31: // hatOPT ::= HAT - { -- Boolean RESULT = null; -+ Boolean RESULT =null; - // assumption: there is no upper case for \n - charClasses.makeClass('\n', false); - RESULT = new Boolean(true); -- CUP$LexParse$result = new java_cup.runtime.Symbol(17/*hatOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("hatOPT",16, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 30: // states ::= IDENT COMMA - { -- Vector RESULT = null; -+ Vector RESULT =null; -- int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object c = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object c = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - syntaxError(ErrorMessages.REGEXP_EXPECTED, cleft, cright+1); -- CUP$LexParse$result = new java_cup.runtime.Symbol(12/*states*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 29: // states ::= IDENT - { -- Vector RESULT = null; -+ Vector RESULT =null; -- int idleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int idright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- String id = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int idleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int idright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ String id = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - Vector list = new Vector(); - stateNumber = scanner.states.getNumber( id ); -@@ -1331,20 +2335,20 @@ - } - RESULT = list; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(12/*states*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 28: // states ::= IDENT COMMA states - { -- Vector RESULT = null; -+ Vector RESULT =null; - int idleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int idright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - String id = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; -- int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - stateNumber = scanner.states.getNumber( id ); - if ( stateNumber != null ) -@@ -1355,125 +2359,125 @@ - } - RESULT = list; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(12/*states*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 27: // statesOPT ::= - { -- Vector RESULT = null; -+ Vector RESULT =null; - RESULT = new Vector(); -- CUP$LexParse$result = new java_cup.runtime.Symbol(13/*statesOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("statesOPT",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 26: // statesOPT ::= LESSTHAN states MORETHAN - { -- Vector RESULT = null; -+ Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = list; -- CUP$LexParse$result = new java_cup.runtime.Symbol(13/*statesOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("statesOPT",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 25: // actions ::= NOACTION - { -- Action RESULT = null; -+ Action RESULT =null; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(19/*actions*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("actions",18, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 24: // actions ::= act - { -- Action RESULT = null; -+ Action RESULT =null; -- int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = a; -- CUP$LexParse$result = new java_cup.runtime.Symbol(19/*actions*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("actions",18, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 23: // act ::= REGEXPEND ACTION - { -- Action RESULT = null; -+ Action RESULT =null; -- int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = a; -- CUP$LexParse$result = new java_cup.runtime.Symbol(18/*act*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("act",17, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 22: // lookahead ::= LOOKAHEAD series DOLLAR - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp s = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = new RegExp2(sym.CONCAT, s, makeNL()); -- CUP$LexParse$result = new java_cup.runtime.Symbol(10/*lookahead*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 21: // lookahead ::= LOOKAHEAD series - { -- RegExp RESULT = null; -+ RegExp RESULT =null; -- int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = r; -- CUP$LexParse$result = new java_cup.runtime.Symbol(10/*lookahead*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 20: // lookahead ::= DOLLAR - { -- RegExp RESULT = null; -+ RegExp RESULT =null; - RESULT = makeNL(); -- CUP$LexParse$result = new java_cup.runtime.Symbol(10/*lookahead*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 19: // rule ::= error - { -- Integer RESULT = null; -+ Integer RESULT =null; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(3/*rule*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 18: // rule ::= statesOPT EOFRULE ACTION - { -- Integer RESULT = null; -+ Integer RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; -- int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Integer(regExps.insert(s, a)); -- CUP$LexParse$result = new java_cup.runtime.Symbol(3/*rule*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 17: // rule ::= statesOPT hatOPT series lookahead NOACTION - { -- Integer RESULT = null; -+ Integer RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right; - Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value; -@@ -1486,18 +2490,18 @@ - int lleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int lright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp l = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object a = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object a = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - syntaxError(ErrorMessages.LOOKAHEAD_NEEDS_ACTION, aleft, aright+1); -- CUP$LexParse$result = new java_cup.runtime.Symbol(3/*rule*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 16: // rule ::= statesOPT hatOPT series lookahead act - { -- Integer RESULT = null; -+ Integer RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right; - Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value; -@@ -1510,18 +2514,18 @@ - int lleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int lright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp l = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, l)); -- CUP$LexParse$result = new java_cup.runtime.Symbol(3/*rule*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 15: // rule ::= statesOPT hatOPT series actions - { -- Integer RESULT = null; -+ Integer RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right; - Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value; -@@ -1531,30 +2535,30 @@ - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, null)); -- CUP$LexParse$result = new java_cup.runtime.Symbol(3/*rule*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 14: // rules ::= rule - { -- Vector RESULT = null; -+ Vector RESULT =null; -- int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Vector(); RESULT.addElement(r); -- CUP$LexParse$result = new java_cup.runtime.Symbol(16/*rules*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 13: // rules ::= LESSTHAN states MORETHAN LBRACE rules RBRACE - { -- Vector RESULT = null; -+ Vector RESULT =null; - int statesleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left; - int statesright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right; - Vector states = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value; -@@ -1572,14 +2576,14 @@ - } - RESULT = rlist; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(16/*rules*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-5)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-5)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 12: // rules ::= rules LESSTHAN states MORETHAN LBRACE rules RBRACE - { -- Vector RESULT = null; -+ Vector RESULT =null; - int rlist1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).left; - int rlist1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).right; - Vector rlist1 = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).value; -@@ -1601,41 +2605,41 @@ - } - RESULT = rlist1; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(16/*rules*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 11: // rules ::= rules rule - { -- Vector RESULT = null; -+ Vector RESULT =null; - int rlistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rlistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector rlist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; -- int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - rlist.addElement(r); RESULT = rlist; -- CUP$LexParse$result = new java_cup.runtime.Symbol(16/*rules*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 10: // macro ::= IDENT EQUALS - { -- Object RESULT = null; -+ Object RESULT =null; -- int eleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left; -- int eright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right; -- Object e = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value; -+ int eleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; -+ int eright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; -+ Object e = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - syntaxError(ErrorMessages.REGEXP_EXPECTED, eleft, eright); -- CUP$LexParse$result = new java_cup.runtime.Symbol(2/*macro*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 9: // macro ::= IDENT EQUALS series REGEXPEND - { -- Object RESULT = null; -+ Object RESULT =null; - int nameleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left; - int nameright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right; - String name = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value; -@@ -1643,79 +2647,79 @@ - int definitionright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp definition = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - macros.insert(name, definition); -- CUP$LexParse$result = new java_cup.runtime.Symbol(2/*macro*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 8: // macro ::= UNICODE - { -- Object RESULT = null; -+ Object RESULT =null; - charClasses.setMaxCharCode(0xFFFF); -- CUP$LexParse$result = new java_cup.runtime.Symbol(2/*macro*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 7: // macro ::= FULL - { -- Object RESULT = null; -+ Object RESULT =null; - charClasses.setMaxCharCode(255); -- CUP$LexParse$result = new java_cup.runtime.Symbol(2/*macro*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 6: // macro ::= ASCII - { -- Object RESULT = null; -+ Object RESULT =null; - charClasses.setMaxCharCode(127); -- CUP$LexParse$result = new java_cup.runtime.Symbol(2/*macro*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 5: // macros ::= error - { -- Object RESULT = null; -+ Object RESULT =null; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(1/*macros*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 4: // macros ::= macros macro - { -- Object RESULT = null; -+ Object RESULT =null; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(1/*macros*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 3: // macros ::= - { -- Object RESULT = null; -+ Object RESULT =null; - -- CUP$LexParse$result = new java_cup.runtime.Symbol(1/*macros*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 2: // specification ::= - { -- NFA RESULT = null; -+ NFA RESULT =null; - - fatalError(ErrorMessages.NO_LEX_SPEC); - -- CUP$LexParse$result = new java_cup.runtime.Symbol(4/*specification*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("specification",3, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 1: // specification ::= USERCODE macros DELIMITER rules - { -- NFA RESULT = null; -+ NFA RESULT =null; - - scanner.t.stop(); - -@@ -1762,19 +2766,19 @@ - Out.time(ErrorMessages.NFA_TOOK, t); - - -- CUP$LexParse$result = new java_cup.runtime.Symbol(4/*specification*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("specification",3, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 0: // $START ::= specification EOF - { -- Object RESULT = null; -+ Object RESULT =null; - int start_valleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int start_valright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - NFA start_val = (NFA)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = start_val; -- CUP$LexParse$result = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT); -+ CUP$LexParse$result = parser.getSymbolFactory().newSymbol("$START",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - /* ACCEPT */ - CUP$LexParse$parser.done_parsing(); -Index: jflex/src/JFlex/LexScan.java -=================================================================== ---- jflex/src/JFlex/LexScan.java (revision 433) -+++ jflex/src/JFlex/LexScan.java Tue Dec 01 08:12:15 EST 2009 -@@ -1,4 +1,4 @@ --/* The following code was generated by JFlex 1.4.3 on 5/27/08 8:22 PM */ -+/* The following code was generated by JFlex 1.4.3 on 12/1/09 8:12 AM */ - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * -@@ -77,11 +77,11 @@ - private static final String ZZ_CMAP_PACKED = - "\10\25\1\26\1\10\1\13\2\11\1\12\16\25\4\0\1\10\1\76"+ - "\1\32\1\0\1\103\1\35\1\22\1\33\1\100\1\101\1\30\1\102"+ -- "\1\15\1\106\1\14\1\31\1\7\1\66\2\7\2\3\1\67\1\64"+ -+ "\1\15\1\110\1\14\1\31\1\7\1\66\2\7\2\3\1\67\1\64"+ - "\1\65\1\1\1\105\1\0\1\20\1\71\1\21\1\23\1\0\4\2"+ -- "\1\72\1\74\10\24\1\73\13\24\1\16\1\4\1\17\1\104\1\24"+ -+ "\1\72\1\74\10\24\1\73\13\24\1\16\1\4\1\17\1\104\1\106"+ - "\1\0\1\53\1\57\1\55\1\62\1\46\1\47\1\63\1\42\1\37"+ -- "\1\60\1\70\1\51\1\56\1\40\1\44\1\61\1\24\1\43\1\54"+ -+ "\1\60\1\70\1\51\1\56\1\40\1\44\1\61\1\107\1\43\1\54"+ - "\1\41\1\6\1\52\1\45\1\5\1\50\1\24\1\36\1\75\1\34"+ - "\1\77\6\25\1\27\32\25\2\0\4\24\4\0\1\24\2\0\1\25"+ - "\7\0\1\24\4\0\1\24\5\0\27\24\1\0\37\24\1\0\u013f\24"+ -@@ -196,39 +196,46 @@ - "\1\11\2\117\1\11\1\0\1\71\1\0\1\120\6\0"+ - "\1\121\1\122\1\0\1\37\4\0\1\104\1\0\1\123"+ - "\1\124\2\125\3\0\2\11\1\126\24\11\1\127\12\11"+ -- "\3\0\2\11\1\0\2\120\14\0\2\123\3\0\20\11"+ -+ "\3\0\2\11\1\0\2\120\15\0\2\123\3\0\20\11"+ - "\1\130\3\11\1\131\10\11\1\132\6\11\1\133\1\11"+ -- "\1\134\1\130\1\0\2\11\1\0\1\120\13\0\1\123"+ -+ "\1\134\1\130\1\0\2\11\1\0\1\120\14\0\1\123"+ - "\5\0\11\11\1\0\1\11\1\135\5\11\1\136\1\137"+ -- "\17\11\1\140\1\141\2\11\7\0\2\37\10\0\2\142"+ -+ "\17\11\1\140\1\141\2\11\10\0\2\37\10\0\2\142"+ - "\3\0\11\11\1\143\1\0\11\11\1\144\4\11\1\145"+ -- "\1\0\3\11\1\146\1\147\2\11\6\0\1\150\1\37"+ -+ "\1\0\3\11\1\146\1\147\2\11\7\0\1\150\1\37"+ - "\3\0\1\37\6\0\2\151\4\0\1\141\1\11\1\152"+ - "\1\126\3\11\1\153\2\154\1\143\4\0\11\11\2\155"+ -- "\2\11\1\156\1\11\2\157\1\11\1\160\6\0\1\37"+ -+ "\2\11\1\156\1\11\2\157\1\11\1\160\7\0\1\37"+ - "\6\0\1\37\13\0\1\11\1\161\2\11\1\154\1\162"+ - "\1\154\1\143\3\0\2\11\1\163\2\11\1\164\3\11"+ - "\1\155\1\165\1\155\1\166\1\0\1\11\1\156\1\0"+ -- "\1\167\1\157\2\170\1\157\4\0\1\171\1\172\2\37"+ -+ "\1\167\1\157\2\170\1\157\5\0\1\171\1\172\2\37"+ - "\4\0\2\37\7\0\2\173\1\0\3\11\2\162\2\143"+ - "\1\174\2\175\1\0\1\11\1\0\5\11\2\165\2\0"+ -- "\1\11\1\0\2\170\2\0\1\176\2\0\1\37\2\0"+ -+ "\1\11\1\0\2\170\3\0\1\176\2\0\1\37\2\0"+ - "\2\37\4\0\1\37\2\0\2\37\7\0\2\177\1\11"+ - "\1\162\1\0\1\143\1\0\1\174\1\0\1\175\1\200"+ - "\1\175\2\0\2\11\1\201\1\11\1\202\1\203\2\204"+ - "\1\165\1\0\1\205\3\0\1\205\1\0\1\205\1\156"+ -- "\3\0\1\206\1\0\4\37\3\0\4\37\3\0\2\207"+ -+ "\20\0\1\206\1\0\4\37\3\0\4\37\3\0\2\207"+ - "\1\0\1\177\1\210\1\177\1\211\3\0\2\200\2\0"+ -- "\2\11\1\201\2\212\1\204\1\213\1\204\12\0\3\37"+ -+ "\2\11\1\201\2\212\1\204\1\213\1\204\41\0\3\37"+ - "\5\0\3\37\1\0\2\214\1\0\2\210\2\143\1\174"+ - "\1\200\3\0\2\11\1\212\1\215\1\212\2\213\1\205"+ -- "\2\0\1\216\1\217\4\0\1\37\3\0\1\37\2\220"+ -+ "\33\0\1\216\1\217\4\0\1\37\3\0\1\37\2\220"+ - "\1\210\1\0\1\143\1\163\1\0\1\163\1\11\2\215"+ -- "\1\213\1\0\2\205\1\0\1\205\3\0\1\37\2\0"+ -- "\1\37\2\221\1\215\10\0\1\222\3\205"; -+ "\1\213\1\0\2\205\1\0\1\205\35\0\1\37\2\0"+ -+ "\1\37\2\221\1\215\74\0\1\222\3\205\51\0\1\223"+ -+ "\44\0\1\224\62\0\1\225\14\0\1\226\57\0\1\227"+ -+ "\1\230\7\0\1\231\1\232\1\233\33\0\1\234\17\0"+ -+ "\1\235\2\0\1\236\20\0\1\237\3\0\1\240\1\241"+ -+ "\2\0\1\242\1\243\3\0\1\244\1\0\1\245\1\246"+ -+ "\2\0\1\247\5\0\1\250\1\0\1\251\1\0\1\252"+ -+ "\16\0\1\253\5\0\1\254\2\0\1\255\3\0\1\256"+ -+ "\1\0\1\257\1\0\1\260"; - - private static int [] zzUnpackAction() { -- int [] result = new int[826]; -+ int [] result = new int[1299]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; -@@ -253,113 +260,172 @@ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = -- "\0\0\0\107\0\216\0\325\0\u011c\0\u0163\0\u01aa\0\u01f1"+ -- "\0\u0238\0\u027f\0\u02c6\0\u030d\0\u0354\0\u039b\0\u03e2\0\u0429"+ -- "\0\u0429\0\u0470\0\u04b7\0\u04fe\0\u0545\0\u058c\0\u0470\0\u05d3"+ -- "\0\u061a\0\u0470\0\u0661\0\u06a8\0\u06ef\0\u0736\0\u077d\0\u07c4"+ -- "\0\u080b\0\u0852\0\u0899\0\u08e0\0\u0927\0\u096e\0\u09b5\0\u0470"+ -- "\0\u0470\0\u09fc\0\u0a43\0\u0a8a\0\u0ad1\0\u0470\0\u0b18\0\u0b5f"+ -- "\0\u0470\0\u0470\0\u0ba6\0\u0470\0\u0bed\0\u0c34\0\u0470\0\u0470"+ -- "\0\u0470\0\u0470\0\u0470\0\u0470\0\u0470\0\u0c7b\0\u0cc2\0\u0d09"+ -- "\0\u0d50\0\u0470\0\u0470\0\u0d97\0\u0470\0\u0dde\0\u0e25\0\u0e6c"+ -- "\0\u0470\0\u0eb3\0\u0470\0\u0efa\0\u0efa\0\u0b18\0\u0470\0\u0470"+ -- "\0\u0f41\0\u0470\0\u0f88\0\u0fcf\0\u0fcf\0\u0470\0\u1016\0\u0470"+ -- "\0\u105d\0\u0470\0\u10a4\0\u0470\0\u10eb\0\u1132\0\u1179\0\u11c0"+ -- "\0\u0545\0\u0470\0\u0470\0\u058c\0\u0470\0\u1207\0\u124e\0\u1295"+ -- "\0\u12dc\0\u1323\0\u136a\0\u13b1\0\u13f8\0\u143f\0\u1486\0\u14cd"+ -- "\0\u1514\0\u155b\0\u15a2\0\u15e9\0\u1630\0\u1677\0\u16be\0\u1705"+ -- "\0\u174c\0\u0470\0\u1793\0\u17da\0\u1821\0\u09b5\0\u1868\0\u0470"+ -- "\0\u18af\0\u0470\0\u18f6\0\u193d\0\u1984\0\u19cb\0\u0470\0\u0470"+ -- "\0\u0470\0\u0470\0\u0470\0\u0a8a\0\u0bed\0\u1a12\0\u1a59\0\u0470"+ -- "\0\u1aa0\0\u1ae7\0\u0bed\0\u0c34\0\u0470\0\u1b2e\0\u0cc2\0\u0d09"+ -- "\0\u0d50\0\u1b75\0\u1bbc\0\u1c03\0\u1c4a\0\u1c91\0\u0470\0\u1cd8"+ -- "\0\u1d1f\0\u1d66\0\u1dad\0\u0470\0\u0470\0\u0470\0\u0470\0\u0470"+ -- "\0\u0470\0\u0efa\0\u0b18\0\u1df4\0\u0470\0\u0fcf\0\u1e3b\0\u1e82"+ -- "\0\u1ec9\0\u1f10\0\u1f57\0\u105d\0\u1f9e\0\u0470\0\u1207\0\u0470"+ -- "\0\u1fe5\0\u12dc\0\u0470\0\u202c\0\u2073\0\u20ba\0\u2101\0\u2148"+ -- "\0\u218f\0\u21d6\0\u221d\0\u2264\0\u22ab\0\u22f2\0\u2339\0\u2380"+ -- "\0\u23c7\0\u240e\0\u2455\0\u249c\0\u24e3\0\u252a\0\u2571\0\u25b8"+ -- "\0\u25ff\0\u2646\0\u268d\0\u26d4\0\u271b\0\u2762\0\u27a9\0\u27f0"+ -- "\0\u2837\0\u287e\0\u28c5\0\u290c\0\u2953\0\u299a\0\u29e1\0\u2a28"+ -- "\0\u2a6f\0\u2ab6\0\u0470\0\u2afd\0\u2b44\0\u2b8b\0\u2bd2\0\u2c19"+ -- "\0\u2c60\0\u2ca7\0\u2cee\0\u0470\0\u0470\0\u2d35\0\u2d7c\0\u2dc3"+ -- "\0\u2e0a\0\u2e51\0\u2e98\0\u0470\0\u2edf\0\u2f26\0\u0470\0\u1e3b"+ -- "\0\u0470\0\u2f6d\0\u2fb4\0\u2ffb\0\u3042\0\u3089\0\u30d0\0\u3117"+ -- "\0\u315e\0\u31a5\0\u31ec\0\u3233\0\u327a\0\u32c1\0\u3308\0\u334f"+ -- "\0\u3396\0\u33dd\0\u3424\0\u346b\0\u34b2\0\u34f9\0\u3540\0\u3587"+ -- "\0\u35ce\0\u3615\0\u365c\0\u36a3\0\u36ea\0\u3731\0\u3778\0\u37bf"+ -- "\0\u3806\0\u384d\0\u3894\0\u38db\0\u3922\0\u3969\0\u39b0\0\u39f7"+ -- "\0\u3a3e\0\u3a85\0\u3acc\0\u3b13\0\u0470\0\u3b5a\0\u3ba1\0\u3be8"+ -- "\0\u3c2f\0\u3c76\0\u3cbd\0\u3d04\0\u3d4b\0\u3d92\0\u3dd9\0\u3e20"+ -- "\0\u3e67\0\u3eae\0\u0470\0\u3ef5\0\u3f3c\0\u3f83\0\u3fca\0\u4011"+ -- "\0\u4058\0\u409f\0\u40e6\0\u412d\0\u4174\0\u41bb\0\u4202\0\u4249"+ -- "\0\u4290\0\u42d7\0\u431e\0\u4365\0\u43ac\0\u43f3\0\u443a\0\u124e"+ -- "\0\u4481\0\u44c8\0\u450f\0\u124e\0\u4556\0\u459d\0\u45e4\0\u462b"+ -- "\0\u4672\0\u46b9\0\u4700\0\u4747\0\u124e\0\u478e\0\u47d5\0\u481c"+ -- "\0\u4863\0\u48aa\0\u48f1\0\u124e\0\u4938\0\u0470\0\u0470\0\u497f"+ -- "\0\u49c6\0\u4a0d\0\u4a54\0\u2afd\0\u4a9b\0\u4ae2\0\u4b29\0\u4b70"+ -- "\0\u4bb7\0\u4bfe\0\u4c45\0\u4c8c\0\u4cd3\0\u4d1a\0\u4d61\0\u2edf"+ -- "\0\u4da8\0\u4def\0\u4e36\0\u4e7d\0\u4ec4\0\u4f0b\0\u4f52\0\u4f99"+ -- "\0\u4fe0\0\u5027\0\u506e\0\u50b5\0\u50fc\0\u5143\0\u518a\0\u51d1"+ -- "\0\u124e\0\u5218\0\u525f\0\u52a6\0\u52ed\0\u5334\0\u124e\0\u124e"+ -- "\0\u537b\0\u53c2\0\u5409\0\u5450\0\u5497\0\u54de\0\u5525\0\u556c"+ -- "\0\u55b3\0\u55fa\0\u5641\0\u5688\0\u56cf\0\u5716\0\u575d\0\u124e"+ -- "\0\u0470\0\u57a4\0\u57eb\0\u5832\0\u5879\0\u58c0\0\u5907\0\u594e"+ -- "\0\u5995\0\u59dc\0\u5a23\0\u5a6a\0\u5ab1\0\u5af8\0\u5b3f\0\u5b86"+ -- "\0\u5bcd\0\u5c14\0\u5c5b\0\u5ca2\0\u4def\0\u0470\0\u5ce9\0\u5d30"+ -- "\0\u5d77\0\u5dbe\0\u5e05\0\u5e4c\0\u5e93\0\u5eda\0\u5f21\0\u5f68"+ -- "\0\u5faf\0\u5ff6\0\u603d\0\u6084\0\u60cb\0\u6112\0\u6159\0\u61a0"+ -- "\0\u61e7\0\u622e\0\u6275\0\u62bc\0\u6303\0\u124e\0\u634a\0\u6391"+ -- "\0\u63d8\0\u641f\0\u124e\0\u6466\0\u64ad\0\u64f4\0\u653b\0\u124e"+ -- "\0\u124e\0\u6582\0\u2a28\0\u65c9\0\u6610\0\u6657\0\u669e\0\u66e5"+ -- "\0\u672c\0\u6773\0\u67ba\0\u6801\0\u6848\0\u688f\0\u68d6\0\u691d"+ -- "\0\u6964\0\u69ab\0\u69f2\0\u6a39\0\u6a80\0\u5c5b\0\u0470\0\u6ac7"+ -- "\0\u6b0e\0\u6b55\0\u6b9c\0\u124e\0\u6be3\0\u124e\0\u124e\0\u6c2a"+ -- "\0\u6c71\0\u6cb8\0\u124e\0\u6cff\0\u6d46\0\u6d8d\0\u6dd4\0\u6e1b"+ -- "\0\u6e62\0\u6ea9\0\u6ef0\0\u6f37\0\u6f7e\0\u6fc5\0\u700c\0\u7053"+ -- "\0\u709a\0\u70e1\0\u7128\0\u716f\0\u71b6\0\u71fd\0\u7244\0\u728b"+ -- "\0\u72d2\0\u7319\0\u7360\0\u2953\0\u0470\0\u73a7\0\u73ee\0\u7435"+ -- "\0\u747c\0\u74c3\0\u750a\0\u7551\0\u7598\0\u75df\0\u7626\0\u766d"+ -- "\0\u76b4\0\u76fb\0\u7742\0\u7789\0\u77d0\0\u7817\0\u785e\0\u78a5"+ -- "\0\u78ec\0\u7933\0\u797a\0\u79c1\0\u7a08\0\u7a4f\0\u7a96\0\u7add"+ -- "\0\u7b24\0\u7b6b\0\u7bb2\0\u7bf9\0\u7c40\0\u7c87\0\u7cce\0\u7d15"+ -- "\0\u7d5c\0\u7da3\0\u7dea\0\u7e31\0\u7e78\0\u7ebf\0\u124e\0\u7f06"+ -- "\0\u7f4d\0\u7f94\0\u7fdb\0\u8022\0\u8069\0\u124e\0\u80b0\0\u80f7"+ -- "\0\u813e\0\u8185\0\u124e\0\u81cc\0\u8213\0\u825a\0\u82a1\0\u82e8"+ -- "\0\u832f\0\u8376\0\u83bd\0\u0470\0\u0470\0\u8404\0\u844b\0\u8492"+ -- "\0\u84d9\0\u8520\0\u8567\0\u85ae\0\u85f5\0\u863c\0\u8683\0\u86ca"+ -- "\0\u8711\0\u8758\0\u879f\0\u87e6\0\u7a08\0\u0470\0\u882d\0\u8874"+ -- "\0\u88bb\0\u8902\0\u8949\0\u8990\0\u89d7\0\u8a1e\0\u8a65\0\u8aac"+ -- "\0\u8af3\0\u8b3a\0\u8b81\0\u8bc8\0\u8c0f\0\u8c56\0\u8c9d\0\u8ce4"+ -- "\0\u8d2b\0\u8d72\0\u8db9\0\u8e00\0\u8e47\0\u8e8e\0\u8ed5\0\u8f1c"+ -- "\0\u8f63\0\u8faa\0\u8ff1\0\u0470\0\u9038\0\u907f\0\u90c6\0\u910d"+ -- "\0\u9154\0\u919b\0\u91e2\0\u9229\0\u9270\0\u92b7\0\u92fe\0\u9345"+ -- "\0\u938c\0\u93d3\0\u941a\0\u9461\0\u94a8\0\u94ef\0\u9536\0\u957d"+ -- "\0\u95c4\0\u960b\0\u9652\0\u9699\0\u96e0\0\u9727\0\u976e\0\u97b5"+ -- "\0\u97fc\0\u9843\0\u988a\0\u98d1\0\u9918\0\u995f\0\u99a6\0\u99ed"+ -- "\0\u9a34\0\u9a7b\0\u9ac2\0\u9b09\0\u9b50\0\u124e\0\u124e\0\u9b97"+ -- "\0\u9bde\0\u9c25\0\u9c6c\0\u9cb3\0\u9cfa\0\u9d41\0\u9d88\0\u8e00"+ -- "\0\u9dcf\0\u8e8e\0\u9e16\0\u9e5d\0\u9ea4\0\u9eeb\0\u0470\0\u9f32"+ -- "\0\u9f79\0\u9fc0\0\ua007\0\ua04e\0\ua095\0\ua0dc\0\ua123\0\ua16a"+ -- "\0\ua1b1\0\ua1f8\0\ua23f\0\ua286\0\ua2cd\0\ua314\0\u960b\0\u0470"+ -- "\0\ua35b\0\ua3a2\0\ua3e9\0\ua430\0\ua477\0\ua4be\0\ua505\0\ua54c"+ -- "\0\ua593\0\ua5da\0\ua621\0\ua668\0\ua6af\0\ua6f6\0\ua73d\0\ua784"+ -- "\0\ua7cb\0\ua812\0\ua859\0\ua8a0\0\ua8e7\0\ua92e\0\ua975\0\ua9bc"+ -- "\0\uaa03\0\uaa4a\0\uaa91\0\uaad8\0\uab1f\0\uab66\0\uabad\0\uabf4"+ -- "\0\uac3b\0\uac82\0\uacc9\0\uad10\0\uad57\0\uad9e\0\uade5\0\uae2c"+ -- "\0\uae73\0\uaeba\0\ua314\0\u0470\0\uaf01\0\uaf48\0\uaf8f\0\uafd6"+ -- "\0\ub01d\0\ub064\0\ub0ab\0\ub0f2\0\ub139\0\ub180\0\ub1c7\0\ub20e"+ -- "\0\ub255\0\ub29c\0\ub2e3\0\ub32a\0\ub371\0\ua8e7\0\ub3b8\0\ub3ff"+ -- "\0\u0470\0\u0470\0\ub446\0\ub48d\0\ub4d4\0\ub51b\0\ub562\0\ub5a9"+ -- "\0\ub5f0\0\ub637\0\ub67e\0\uaf01\0\u0470\0\ub6c5\0\ub70c\0\ub753"+ -- "\0\u0470\0\ub79a\0\u124e\0\ub7e1\0\ub828\0\ub86f\0\ub8b6\0\ub8fd"+ -- "\0\ub3b8\0\ub944\0\ub98b\0\ub3ff\0\ub9d2\0\uba19\0\uba60\0\ubaa7"+ -- "\0\ubaee\0\ubb35\0\ubb7c\0\u0470\0\u124e\0\ubbc3\0\ubc0a\0\ubc51"+ -- "\0\ubc98\0\ubcdf\0\ubd26\0\ubd6d\0\ubdb4\0\ubdfb\0\u0470\0\ubdb4"+ -- "\0\ube42\0\ubdfb"; -+ "\0\0\0\111\0\222\0\333\0\u0124\0\u016d\0\u01b6\0\u01ff"+ -+ "\0\u0248\0\u0291\0\u02da\0\u0323\0\u036c\0\u03b5\0\u03fe\0\u0447"+ -+ "\0\u0447\0\u0490\0\u04d9\0\u0522\0\u056b\0\u05b4\0\u0490\0\u05fd"+ -+ "\0\u0646\0\u0490\0\u068f\0\u06d8\0\u0721\0\u076a\0\u07b3\0\u07fc"+ -+ "\0\u0845\0\u088e\0\u08d7\0\u0920\0\u0969\0\u09b2\0\u09fb\0\u0490"+ -+ "\0\u0490\0\u0a44\0\u0a8d\0\u0ad6\0\u0b1f\0\u0490\0\u0b68\0\u0bb1"+ -+ "\0\u0490\0\u0490\0\u0bfa\0\u0490\0\u0c43\0\u0c8c\0\u0490\0\u0490"+ -+ "\0\u0490\0\u0490\0\u0490\0\u0490\0\u0490\0\u0cd5\0\u0d1e\0\u0d67"+ -+ "\0\u0db0\0\u0490\0\u0490\0\u0df9\0\u0490\0\u0e42\0\u0e8b\0\u0ed4"+ -+ "\0\u0490\0\u0f1d\0\u0490\0\u0f66\0\u0f66\0\u0b68\0\u0490\0\u0490"+ -+ "\0\u0faf\0\u0490\0\u0ff8\0\u1041\0\u1041\0\u0490\0\u108a\0\u0490"+ -+ "\0\u10d3\0\u0490\0\u111c\0\u0490\0\u1165\0\u11ae\0\u11f7\0\u1240"+ -+ "\0\u056b\0\u0490\0\u0490\0\u05b4\0\u0490\0\u1289\0\u12d2\0\u131b"+ -+ "\0\u1364\0\u13ad\0\u13f6\0\u143f\0\u1488\0\u14d1\0\u151a\0\u1563"+ -+ "\0\u15ac\0\u15f5\0\u163e\0\u1687\0\u16d0\0\u1719\0\u1762\0\u17ab"+ -+ "\0\u17f4\0\u0490\0\u183d\0\u1886\0\u18cf\0\u09fb\0\u1918\0\u0490"+ -+ "\0\u1961\0\u0490\0\u19aa\0\u19f3\0\u1a3c\0\u1a85\0\u0490\0\u0490"+ -+ "\0\u0490\0\u0490\0\u0490\0\u0ad6\0\u0c43\0\u1ace\0\u1b17\0\u0490"+ -+ "\0\u1b60\0\u1ba9\0\u0c43\0\u0c8c\0\u0490\0\u1bf2\0\u0d1e\0\u0d67"+ -+ "\0\u0db0\0\u1c3b\0\u1c84\0\u1ccd\0\u1d16\0\u1d5f\0\u0490\0\u1da8"+ -+ "\0\u1df1\0\u1e3a\0\u1e83\0\u0490\0\u0490\0\u0490\0\u0490\0\u0490"+ -+ "\0\u0490\0\u0f66\0\u0b68\0\u1ecc\0\u0490\0\u1041\0\u1f15\0\u1f5e"+ -+ "\0\u1fa7\0\u1ff0\0\u2039\0\u10d3\0\u2082\0\u0490\0\u1289\0\u0490"+ -+ "\0\u20cb\0\u1364\0\u0490\0\u2114\0\u215d\0\u21a6\0\u21ef\0\u2238"+ -+ "\0\u2281\0\u22ca\0\u2313\0\u235c\0\u23a5\0\u23ee\0\u2437\0\u2480"+ -+ "\0\u24c9\0\u2512\0\u255b\0\u25a4\0\u25ed\0\u2636\0\u267f\0\u26c8"+ -+ "\0\u2711\0\u275a\0\u27a3\0\u27ec\0\u2835\0\u287e\0\u28c7\0\u2910"+ -+ "\0\u2959\0\u29a2\0\u29eb\0\u2a34\0\u2a7d\0\u2ac6\0\u2b0f\0\u2b58"+ -+ "\0\u2ba1\0\u2bea\0\u0490\0\u2c33\0\u2c7c\0\u2cc5\0\u2d0e\0\u2d57"+ -+ "\0\u2da0\0\u2de9\0\u2e32\0\u0490\0\u0490\0\u2e7b\0\u2ec4\0\u2f0d"+ -+ "\0\u2f56\0\u2f9f\0\u2fe8\0\u0490\0\u3031\0\u307a\0\u0490\0\u1f15"+ -+ "\0\u0490\0\u30c3\0\u310c\0\u3155\0\u319e\0\u31e7\0\u3230\0\u3279"+ -+ "\0\u32c2\0\u330b\0\u3354\0\u339d\0\u33e6\0\u342f\0\u3478\0\u34c1"+ -+ "\0\u350a\0\u3553\0\u359c\0\u35e5\0\u362e\0\u3677\0\u36c0\0\u3709"+ -+ "\0\u3752\0\u379b\0\u37e4\0\u382d\0\u3876\0\u38bf\0\u3908\0\u3951"+ -+ "\0\u399a\0\u39e3\0\u3a2c\0\u3a75\0\u3abe\0\u3b07\0\u3b50\0\u3b99"+ -+ "\0\u3be2\0\u3c2b\0\u3c74\0\u3cbd\0\u0490\0\u3d06\0\u3d4f\0\u3d98"+ -+ "\0\u3de1\0\u3e2a\0\u3e73\0\u3ebc\0\u3f05\0\u3f4e\0\u3f97\0\u3fe0"+ -+ "\0\u4029\0\u4072\0\u40bb\0\u0490\0\u4104\0\u414d\0\u4196\0\u41df"+ -+ "\0\u4228\0\u4271\0\u42ba\0\u4303\0\u434c\0\u4395\0\u43de\0\u4427"+ -+ "\0\u4470\0\u44b9\0\u4502\0\u454b\0\u4594\0\u45dd\0\u4626\0\u466f"+ -+ "\0\u12d2\0\u46b8\0\u4701\0\u474a\0\u12d2\0\u4793\0\u47dc\0\u4825"+ -+ "\0\u486e\0\u48b7\0\u4900\0\u4949\0\u4992\0\u12d2\0\u49db\0\u4a24"+ -+ "\0\u4a6d\0\u4ab6\0\u4aff\0\u4b48\0\u12d2\0\u4b91\0\u0490\0\u0490"+ -+ "\0\u4bda\0\u4c23\0\u4c6c\0\u4cb5\0\u2c33\0\u4cfe\0\u4d47\0\u4d90"+ -+ "\0\u4dd9\0\u4e22\0\u4e6b\0\u4eb4\0\u4efd\0\u4f46\0\u4f8f\0\u4fd8"+ -+ "\0\u5021\0\u3031\0\u506a\0\u50b3\0\u50fc\0\u5145\0\u518e\0\u51d7"+ -+ "\0\u5220\0\u5269\0\u52b2\0\u52fb\0\u5344\0\u538d\0\u53d6\0\u541f"+ -+ "\0\u5468\0\u54b1\0\u12d2\0\u54fa\0\u5543\0\u558c\0\u55d5\0\u561e"+ -+ "\0\u12d2\0\u12d2\0\u5667\0\u56b0\0\u56f9\0\u5742\0\u578b\0\u57d4"+ -+ "\0\u581d\0\u5866\0\u58af\0\u58f8\0\u5941\0\u598a\0\u59d3\0\u5a1c"+ -+ "\0\u5a65\0\u12d2\0\u0490\0\u5aae\0\u5af7\0\u5b40\0\u5b89\0\u5bd2"+ -+ "\0\u5c1b\0\u5c64\0\u5cad\0\u5cf6\0\u5d3f\0\u5d88\0\u5dd1\0\u5e1a"+ -+ "\0\u5e63\0\u5eac\0\u5ef5\0\u5f3e\0\u5f87\0\u5fd0\0\u6019\0\u50b3"+ -+ "\0\u0490\0\u6062\0\u60ab\0\u60f4\0\u613d\0\u6186\0\u61cf\0\u6218"+ -+ "\0\u6261\0\u62aa\0\u62f3\0\u633c\0\u6385\0\u63ce\0\u6417\0\u6460"+ -+ "\0\u64a9\0\u64f2\0\u653b\0\u6584\0\u65cd\0\u6616\0\u665f\0\u66a8"+ -+ "\0\u12d2\0\u66f1\0\u673a\0\u6783\0\u67cc\0\u12d2\0\u6815\0\u685e"+ -+ "\0\u68a7\0\u68f0\0\u12d2\0\u12d2\0\u6939\0\u2b58\0\u6982\0\u69cb"+ -+ "\0\u6a14\0\u6a5d\0\u6aa6\0\u6aef\0\u6b38\0\u6b81\0\u6bca\0\u6c13"+ -+ "\0\u6c5c\0\u6ca5\0\u6cee\0\u6d37\0\u6d80\0\u6dc9\0\u6e12\0\u6e5b"+ -+ "\0\u6ea4\0\u5fd0\0\u0490\0\u6eed\0\u6f36\0\u6f7f\0\u6fc8\0\u12d2"+ -+ "\0\u7011\0\u12d2\0\u12d2\0\u705a\0\u70a3\0\u70ec\0\u12d2\0\u7135"+ -+ "\0\u717e\0\u71c7\0\u7210\0\u7259\0\u72a2\0\u72eb\0\u7334\0\u737d"+ -+ "\0\u73c6\0\u740f\0\u7458\0\u74a1\0\u74ea\0\u7533\0\u757c\0\u75c5"+ -+ "\0\u760e\0\u7657\0\u76a0\0\u76e9\0\u7732\0\u777b\0\u77c4\0\u2a7d"+ -+ "\0\u0490\0\u780d\0\u7856\0\u789f\0\u78e8\0\u7931\0\u797a\0\u79c3"+ -+ "\0\u7a0c\0\u7a55\0\u7a9e\0\u7ae7\0\u7b30\0\u7b79\0\u7bc2\0\u7c0b"+ -+ "\0\u7c54\0\u7c9d\0\u7ce6\0\u7d2f\0\u7d78\0\u7dc1\0\u7e0a\0\u7e53"+ -+ "\0\u7e9c\0\u7ee5\0\u7f2e\0\u7f77\0\u7fc0\0\u8009\0\u8052\0\u809b"+ -+ "\0\u80e4\0\u812d\0\u8176\0\u81bf\0\u8208\0\u8251\0\u829a\0\u82e3"+ -+ "\0\u832c\0\u8375\0\u83be\0\u12d2\0\u8407\0\u8450\0\u8499\0\u84e2"+ -+ "\0\u852b\0\u8574\0\u12d2\0\u85bd\0\u8606\0\u864f\0\u8698\0\u12d2"+ -+ "\0\u86e1\0\u872a\0\u8773\0\u87bc\0\u8805\0\u884e\0\u8897\0\u88e0"+ -+ "\0\u8929\0\u0490\0\u0490\0\u8972\0\u89bb\0\u8a04\0\u8a4d\0\u8a96"+ -+ "\0\u8adf\0\u8b28\0\u8b71\0\u8bba\0\u8c03\0\u8c4c\0\u8c95\0\u8cde"+ -+ "\0\u8d27\0\u8d70\0\u7ee5\0\u0490\0\u8db9\0\u8e02\0\u8e4b\0\u8e94"+ -+ "\0\u8edd\0\u8f26\0\u8f6f\0\u8fb8\0\u9001\0\u904a\0\u9093\0\u90dc"+ -+ "\0\u9125\0\u916e\0\u91b7\0\u9200\0\u9249\0\u9292\0\u92db\0\u9324"+ -+ "\0\u936d\0\u93b6\0\u93ff\0\u9448\0\u9491\0\u94da\0\u9523\0\u956c"+ -+ "\0\u95b5\0\u95fe\0\u0490\0\u9647\0\u9690\0\u96d9\0\u9722\0\u976b"+ -+ "\0\u97b4\0\u97fd\0\u9846\0\u988f\0\u98d8\0\u9921\0\u996a\0\u99b3"+ -+ "\0\u99fc\0\u9a45\0\u9a8e\0\u9ad7\0\u9b20\0\u9b69\0\u9bb2\0\u9bfb"+ -+ "\0\u9c44\0\u9c8d\0\u9cd6\0\u9d1f\0\u9d68\0\u9db1\0\u9dfa\0\u9e43"+ -+ "\0\u9e8c\0\u9ed5\0\u9f1e\0\u9f67\0\u9fb0\0\u9ff9\0\ua042\0\ua08b"+ -+ "\0\ua0d4\0\ua11d\0\ua166\0\ua1af\0\u12d2\0\u12d2\0\ua1f8\0\ua241"+ -+ "\0\ua28a\0\ua2d3\0\ua31c\0\ua365\0\ua3ae\0\ua3f7\0\u93b6\0\ua440"+ -+ "\0\u9448\0\ua489\0\ua4d2\0\ua51b\0\ua564\0\ua5ad\0\ua5f6\0\ua63f"+ -+ "\0\ua688\0\ua6d1\0\ua71a\0\ua763\0\ua7ac\0\ua7f5\0\ua83e\0\ua887"+ -+ "\0\ua8d0\0\ua919\0\u0490\0\ua962\0\ua9ab\0\ua9f4\0\uaa3d\0\uaa86"+ -+ "\0\uaacf\0\uab18\0\uab61\0\uabaa\0\uabf3\0\uac3c\0\uac85\0\uacce"+ -+ "\0\uad17\0\uad60\0\u9c44\0\u0490\0\uada9\0\uadf2\0\uae3b\0\uae84"+ -+ "\0\uaecd\0\uaf16\0\uaf5f\0\uafa8\0\uaff1\0\ub03a\0\ub083\0\ub0cc"+ -+ "\0\ub115\0\ub15e\0\ub1a7\0\ub1f0\0\ub239\0\ub282\0\ub2cb\0\ub314"+ -+ "\0\ub35d\0\ub3a6\0\ub3ef\0\ub438\0\ub481\0\ub4ca\0\ub513\0\ub55c"+ -+ "\0\ub5a5\0\ub5ee\0\ub637\0\ub680\0\ub6c9\0\ub712\0\ub75b\0\ub7a4"+ -+ "\0\ub7ed\0\ub836\0\ub87f\0\ub8c8\0\ub911\0\ub95a\0\ub9a3\0\ub9ec"+ -+ "\0\uba35\0\uba7e\0\ubac7\0\ubb10\0\ubb59\0\ubba2\0\ubbeb\0\ubc34"+ -+ "\0\ubc7d\0\ubcc6\0\ubd0f\0\ubd58\0\ubda1\0\ubdea\0\ube33\0\ube7c"+ -+ "\0\ubec5\0\ubf0e\0\ubf57\0\ubfa0\0\ubfe9\0\uad60\0\u0490\0\uc032"+ -+ "\0\uc07b\0\uc0c4\0\uc10d\0\uc156\0\uc19f\0\uc1e8\0\uc231\0\uc27a"+ -+ "\0\uc2c3\0\uc30c\0\uc355\0\uc39e\0\uc3e7\0\uc430\0\uc479\0\uc4c2"+ -+ "\0\ub35d\0\uc50b\0\uc554\0\uc59d\0\uc5e6\0\uc62f\0\uc678\0\uc6c1"+ -+ "\0\uc70a\0\uc753\0\uc79c\0\uc7e5\0\uc82e\0\uc877\0\uc8c0\0\uc909"+ -+ "\0\uc952\0\uc99b\0\uc9e4\0\uca2d\0\uca76\0\ucabf\0\ucb08\0\ucb51"+ -+ "\0\ucb9a\0\ucbe3\0\ucc2c\0\ucc75\0\u0490\0\u0490\0\uccbe\0\ucd07"+ -+ "\0\ucd50\0\ucd99\0\ucde2\0\uce2b\0\uce74\0\ucebd\0\ucf06\0\uc032"+ -+ "\0\u0490\0\ucf4f\0\ucf98\0\ucfe1\0\u0490\0\ud02a\0\u12d2\0\ud073"+ -+ "\0\ud0bc\0\ud105\0\ud14e\0\ud197\0\uc50b\0\ud1e0\0\ud229\0\uc554"+ -+ "\0\ud272\0\ud2bb\0\ud304\0\ud34d\0\ud396\0\ud3df\0\ud428\0\ud471"+ -+ "\0\ud4ba\0\ud503\0\ud54c\0\ud595\0\ud5de\0\ud627\0\ud670\0\ud6b9"+ -+ "\0\ud702\0\ud74b\0\ud794\0\ud7dd\0\ud826\0\ud86f\0\ud8b8\0\ud901"+ -+ "\0\ud94a\0\ud993\0\ud9dc\0\uda25\0\uda6e\0\udab7\0\udb00\0\udb49"+ -+ "\0\udb92\0\u0490\0\u12d2\0\udbdb\0\udc24\0\udc6d\0\udcb6\0\udcff"+ -+ "\0\udd48\0\udd91\0\uddda\0\ude23\0\ude6c\0\udeb5\0\udefe\0\udf47"+ -+ "\0\udf90\0\udfd9\0\ue022\0\ue06b\0\ue0b4\0\ue0fd\0\ue146\0\ue18f"+ -+ "\0\ue1d8\0\ue221\0\ue26a\0\ue2b3\0\ue2fc\0\ue345\0\ue38e\0\ue3d7"+ -+ "\0\ue420\0\ue469\0\ue4b2\0\ue4fb\0\ue544\0\ue58d\0\ue5d6\0\ue61f"+ -+ "\0\ue668\0\ue6b1\0\ue6fa\0\ue743\0\ue78c\0\ue7d5\0\ue81e\0\ue867"+ -+ "\0\ue8b0\0\ue8f9\0\ue942\0\ue98b\0\ue9d4\0\uea1d\0\uea66\0\ueaaf"+ -+ "\0\ueaf8\0\ueb41\0\ueb8a\0\uebd3\0\uec1c\0\uec65\0\uecae\0\uecf7"+ -+ "\0\u0490\0\ue544\0\ued40\0\ue58d\0\ued89\0\uedd2\0\uee1b\0\uee64"+ -+ "\0\ueead\0\ueef6\0\uef3f\0\uef88\0\uefd1\0\uf01a\0\uf063\0\uf0ac"+ -+ "\0\uf0f5\0\uf13e\0\uf187\0\uf1d0\0\uf219\0\uf262\0\uf2ab\0\uf2f4"+ -+ "\0\uf33d\0\uf386\0\uf3cf\0\uf418\0\uf461\0\uf4aa\0\uf4f3\0\uf53c"+ -+ "\0\uf585\0\uf5ce\0\uf617\0\uf660\0\uf6a9\0\uf6f2\0\uf73b\0\uf784"+ -+ "\0\uf7cd\0\uf816\0\uf85f\0\uf8a8\0\uf8f1\0\u0490\0\uf93a\0\uf983"+ -+ "\0\uf9cc\0\ufa15\0\ufa5e\0\ufaa7\0\ufaf0\0\ufb39\0\ufb82\0\ufbcb"+ -+ "\0\ufc14\0\ufc5d\0\ufca6\0\ufcef\0\ufd38\0\ufd81\0\ufdca\0\ufe13"+ -+ "\0\ufe5c\0\ufea5\0\ufeee\0\uff37\0\uff80\0\uffc9\1\22\1\133"+ -+ "\1\244\1\355\1\u0136\1\u017f\1\u01c8\1\u0211\1\u025a\1\u02a3"+ -+ "\1\u02ec\1\u0335\0\u0490\1\u037e\1\u03c7\1\u0410\1\u0459\1\u04a2"+ -+ "\1\u04eb\1\u0534\1\u057d\1\u05c6\1\u060f\1\u0658\1\u06a1\1\u06ea"+ -+ "\1\u0733\1\u077c\1\u07c5\1\u080e\1\u0857\1\u08a0\1\u08e9\1\u0932"+ -+ "\1\u097b\1\u09c4\1\u0a0d\1\u0a56\1\u0a9f\1\u0ae8\1\u0b31\1\u0b7a"+ -+ "\1\u0bc3\1\u0c0c\1\u0c55\1\u0c9e\1\u0ce7\1\u0d30\1\u0d79\1\u0dc2"+ -+ "\1\u0e0b\1\u0e54\1\u0e9d\1\u0ee6\1\u0f2f\1\u0f78\1\u0fc1\1\u100a"+ -+ "\1\u1053\1\u109c\1\u10e5\1\u112e\1\u1177\0\u0490\1\u11c0\1\u1209"+ -+ "\1\u1252\1\u129b\1\u12e4\1\u132d\1\u1376\1\u13bf\1\u1408\1\u1451"+ -+ "\1\u149a\1\u14e3\0\u0490\1\u152c\1\u1575\1\u15be\1\u1607\1\u1650"+ -+ "\1\u1699\1\u16e2\1\u172b\1\u1774\1\u17bd\1\u1806\1\u184f\1\u1898"+ -+ "\1\u18e1\1\u192a\1\u1973\1\u19bc\1\u1a05\1\u1a4e\1\u1a97\1\u1ae0"+ -+ "\1\u1b29\1\u1b72\1\u1bbb\1\u1c04\1\u1c4d\1\u1c96\1\u1cdf\1\u1d28"+ -+ "\1\u1d71\1\u1dba\1\u1e03\1\u1e4c\1\u1e95\1\u1ede\1\u1f27\1\u1f70"+ -+ "\1\u1fb9\1\u2002\1\u204b\1\u2094\1\u20dd\1\u2126\1\u216f\1\u21b8"+ -+ "\1\u2201\1\u224a\0\u0490\0\u0490\1\u2293\1\u22dc\1\u2325\1\u236e"+ -+ "\1\u23b7\1\u2400\1\u2449\0\u0490\0\u0490\0\u0490\1\u2492\1\u24db"+ -+ "\1\u2524\1\u256d\1\u25b6\1\u25ff\1\u2648\1\u2691\1\u26da\1\u2723"+ -+ "\1\u276c\1\u27b5\1\u27fe\1\u2847\1\u2890\1\u28d9\1\u2922\1\u296b"+ -+ "\1\u29b4\1\u29fd\1\u2a46\1\u2a8f\1\u2ad8\1\u2b21\1\u2b6a\1\u2bb3"+ -+ "\1\u2bfc\0\u0490\1\u2c45\1\u2c8e\1\u2cd7\1\u2d20\1\u2d69\1\u2db2"+ -+ "\1\u2dfb\1\u2e44\1\u2e8d\1\u2ed6\1\u2f1f\1\u2f68\1\u2fb1\1\u2ffa"+ -+ "\1\u3043\0\u0490\1\u308c\1\u30d5\0\u0490\1\u311e\1\u3167\1\u31b0"+ -+ "\1\u31f9\1\u3242\1\u328b\1\u32d4\1\u331d\1\u3366\1\u33af\1\u33f8"+ -+ "\1\u3441\1\u348a\1\u34d3\1\u351c\1\u3565\0\u0490\1\u35ae\1\u35f7"+ -+ "\1\u3640\0\u0490\0\u0490\1\u3689\1\u36d2\0\u0490\0\u0490\1\u371b"+ -+ "\1\u3764\1\u37ad\0\u0490\1\u37f6\0\u0490\0\u0490\1\u383f\1\u3888"+ -+ "\0\u0490\1\u38d1\1\u391a\1\u3963\1\u39ac\1\u39f5\0\u0490\1\u3a3e"+ -+ "\0\u0490\1\u3a87\0\u0490\1\u3ad0\1\u3b19\1\u3b62\1\u3bab\1\u3bf4"+ -+ "\1\u3c3d\1\u3c86\1\u3ccf\1\u3d18\1\u3d61\1\u3daa\1\u3df3\1\u3e3c"+ -+ "\1\u3e85\0\u0490\1\u3ece\1\u3f17\1\u3f60\1\u3fa9\1\u3ff2\0\u0490"+ -+ "\1\u403b\1\u4084\0\u0490\1\u40cd\1\u4116\1\u415f\0\u0490\1\u41a8"+ -+ "\0\u0490\1\u41f1\0\u0490"; - - private static int [] zzUnpackRowMap() { -- int [] result = new int[826]; -+ int [] result = new int[1299]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; -@@ -382,1092 +448,1291 @@ - private static final int [] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = -- "\11\20\2\21\1\22\13\20\1\21\5\20\1\23\51\20"+ -- "\30\24\1\25\1\26\55\24\2\27\1\30\2\27\2\30"+ -+ "\11\20\2\21\1\22\13\20\1\21\5\20\1\23\53\20"+ -+ "\30\24\1\25\1\26\57\24\2\27\1\30\2\27\2\30"+ - "\1\27\1\31\1\32\1\33\1\32\1\27\1\34\6\27"+ - "\1\30\2\27\1\32\7\27\25\30\4\27\1\30\1\27"+ -- "\3\30\6\27\1\30\5\27\1\35\2\27\2\35\1\27"+ -- "\1\36\3\37\10\27\1\35\1\27\1\36\1\37\1\27"+ -- "\1\40\3\27\1\41\1\27\25\35\4\27\1\35\1\42"+ -- "\3\35\6\27\1\35\5\27\1\35\2\27\2\35\1\27"+ -- "\1\43\3\37\10\27\1\35\1\27\1\43\1\37\1\27"+ -- "\1\40\3\27\1\44\1\27\25\35\4\27\1\35\1\42"+ -- "\3\35\6\27\1\35\13\27\4\45\4\27\1\46\5\27"+ -- "\2\45\1\27\1\47\2\27\1\50\52\27\4\51\1\52"+ -- "\3\51\1\53\1\54\1\55\1\54\1\56\1\51\1\57"+ -- "\1\51\1\60\2\51\1\61\2\51\1\53\1\54\1\62"+ -- "\1\63\1\64\3\51\1\65\36\51\1\66\1\67\1\70"+ -- "\1\71\1\72\1\73\1\74\1\75\2\51\31\76\1\77"+ -- "\1\100\1\101\1\102\1\76\1\103\50\76\2\27\1\35"+ -- "\2\27\2\35\1\27\4\104\1\27\1\105\3\27\1\106"+ -- "\2\27\1\35\1\27\2\104\7\27\25\35\4\27\1\35"+ -- "\1\27\3\35\6\27\1\35\3\27\4\107\1\110\4\107"+ -- "\1\111\1\112\1\111\13\107\1\111\2\107\1\113\54\107"+ -+ "\3\30\6\27\1\30\2\27\2\30\3\27\1\35\2\27"+ -+ "\2\35\1\27\1\36\3\37\10\27\1\35\1\27\1\36"+ -+ "\1\37\1\27\1\40\3\27\1\41\1\27\25\35\4\27"+ -+ "\1\35\1\42\3\35\6\27\1\35\2\27\2\35\3\27"+ -+ "\1\35\2\27\2\35\1\27\1\43\3\37\10\27\1\35"+ -+ "\1\27\1\43\1\37\1\27\1\40\3\27\1\44\1\27"+ -+ "\25\35\4\27\1\35\1\42\3\35\6\27\1\35\2\27"+ -+ "\2\35\11\27\4\45\4\27\1\46\5\27\2\45\1\27"+ -+ "\1\47\2\27\1\50\54\27\4\51\1\52\3\51\1\53"+ -+ "\1\54\1\55\1\54\1\56\1\51\1\57\1\51\1\60"+ -+ "\2\51\1\61\2\51\1\53\1\54\1\62\1\63\1\64"+ -+ "\3\51\1\65\36\51\1\66\1\67\1\70\1\71\1\72"+ -+ "\1\73\1\74\1\75\4\51\31\76\1\77\1\100\1\101"+ -+ "\1\102\1\76\1\103\52\76\2\27\1\35\2\27\2\35"+ -+ "\1\27\4\104\1\27\1\105\3\27\1\106\2\27\1\35"+ -+ "\1\27\2\104\7\27\25\35\4\27\1\35\1\27\3\35"+ -+ "\6\27\1\35\2\27\2\35\1\27\4\107\1\110\4\107"+ -+ "\1\111\1\112\1\111\13\107\1\111\2\107\1\113\56\107"+ - "\4\51\1\52\3\51\3\114\1\115\2\51\1\116\1\117"+ - "\6\51\2\114\2\51\1\120\3\51\1\121\45\51\1\122"+ -- "\1\51\1\123\11\124\2\125\1\126\13\124\1\125\5\124"+ -- "\1\127\51\124\10\27\1\36\2\27\1\130\1\27\1\131"+ -- "\10\27\1\36\5\27\1\132\62\27\4\133\12\27\2\133"+ -- "\57\27\2\134\1\135\2\134\2\135\15\134\1\135\12\134"+ -- "\25\135\4\134\1\135\1\134\3\135\6\134\1\135\3\134"+ -- "\11\20\2\21\1\22\13\20\1\21\57\20\107\0\11\20"+ -- "\2\21\1\22\13\20\1\21\5\20\1\136\51\20\30\24"+ -- "\1\137\1\140\105\24\1\141\1\142\105\24\1\143\1\144"+ -- "\55\24\1\0\3\30\1\0\3\30\14\0\4\30\7\0"+ -- "\32\30\1\0\3\30\6\0\1\30\13\0\1\31\4\0"+ -- "\1\34\104\0\1\32\103\0\1\34\77\0\3\35\1\0"+ -- "\3\35\14\0\4\35\7\0\32\35\1\0\3\35\6\0"+ -- "\1\35\13\0\1\36\15\0\1\36\71\0\3\37\13\0"+ -- "\1\37\107\0\1\145\1\146\57\0\1\147\2\0\1\147"+ -- "\1\150\15\0\1\147\11\0\1\151\1\152\1\153\1\154"+ -- "\4\147\1\155\1\156\1\157\1\160\1\147\1\161\1\162"+ -- "\1\163\1\147\1\164\1\147\1\165\1\166\1\147\1\167"+ -- "\1\170\1\171\1\0\1\147\1\0\3\147\6\0\1\147"+ -- "\13\0\1\42\15\0\1\42\70\0\1\43\15\0\1\43"+ -- "\6\0\1\172\53\0\1\147\2\0\1\173\1\150\15\0"+ -+ "\3\51\1\123\11\124\2\125\1\126\13\124\1\125\5\124"+ -+ "\1\127\53\124\10\27\1\36\2\27\1\130\1\27\1\131"+ -+ "\10\27\1\36\5\27\1\132\64\27\4\133\12\27\2\133"+ -+ "\61\27\2\134\1\135\2\134\2\135\15\134\1\135\12\134"+ -+ "\25\135\4\134\1\135\1\134\3\135\6\134\1\135\2\134"+ -+ "\2\135\1\134\11\20\2\21\1\22\13\20\1\21\61\20"+ -+ "\111\0\11\20\2\21\1\22\13\20\1\21\5\20\1\136"+ -+ "\53\20\30\24\1\137\1\140\107\24\1\141\1\142\107\24"+ -+ "\1\143\1\144\57\24\1\0\3\30\1\0\3\30\14\0"+ -+ "\4\30\7\0\32\30\1\0\3\30\6\0\1\30\2\0"+ -+ "\2\30\11\0\1\31\4\0\1\34\106\0\1\32\105\0"+ -+ "\1\34\101\0\3\35\1\0\3\35\14\0\4\35\7\0"+ -+ "\32\35\1\0\3\35\6\0\1\35\2\0\2\35\11\0"+ -+ "\1\36\15\0\1\36\73\0\3\37\13\0\1\37\111\0"+ -+ "\1\145\1\146\61\0\1\147\2\0\1\147\1\150\15\0"+ -+ "\1\147\11\0\1\151\1\152\1\153\1\154\4\147\1\155"+ -+ "\1\156\1\157\1\160\1\147\1\161\1\162\1\163\1\147"+ -+ "\1\164\1\147\1\165\1\166\1\147\1\167\1\170\1\171"+ -+ "\1\0\1\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\11\0\1\42\15\0\1\42\72\0\1\43\15\0\1\43"+ -+ "\6\0\1\172\55\0\1\147\2\0\1\173\1\150\15\0"+ - "\1\147\10\0\1\174\1\151\1\152\1\153\1\154\4\147"+ - "\1\155\1\156\1\157\1\160\1\147\1\161\1\175\1\163"+ - "\1\147\1\164\1\147\1\165\1\166\1\147\1\167\1\170"+ -- "\1\171\1\0\1\147\1\0\3\147\6\0\1\147\13\0"+ -- "\4\45\4\0\1\46\5\0\2\45\1\0\1\176\2\0"+ -- "\1\50\72\0\1\177\116\0\1\200\1\201\55\0\3\202"+ -- "\1\203\1\202\1\204\1\205\1\206\3\202\1\0\24\202"+ -- "\1\207\1\210\1\202\1\211\3\202\1\212\7\202\1\213"+ -- "\4\202\1\203\1\202\1\206\1\203\17\202\10\0\1\53"+ -- "\3\214\1\56\1\0\1\57\4\0\1\61\2\0\1\53"+ -- "\1\214\1\62\1\63\1\64\3\0\1\215\36\0\1\66"+ -- "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\12\0"+ -- "\4\214\1\56\1\0\1\57\4\0\1\61\2\0\2\214"+ -- "\1\62\1\63\1\64\3\0\1\215\36\0\1\66\1\67"+ -- "\1\70\1\71\1\72\1\73\1\74\1\75\12\0\3\214"+ -- "\1\54\1\56\1\0\1\57\4\0\1\61\2\0\2\214"+ -- "\1\62\1\63\1\64\3\0\1\215\36\0\1\66\1\67"+ -- "\1\70\1\71\1\72\1\73\1\74\1\75\107\0\1\216"+ -- "\21\0\1\217\116\0\1\220\1\201\56\0\1\221\1\222"+ -- "\1\221\1\0\2\222\1\221\1\223\13\0\1\222\1\0"+ -- "\1\223\10\0\25\222\4\221\1\222\1\0\3\222\6\0"+ -- "\1\222\13\0\1\224\1\225\1\226\1\225\12\0\1\224"+ -- "\1\225\57\0\31\76\1\227\1\230\1\231\1\0\1\76"+ -- "\1\0\100\76\1\232\1\233\55\76\4\230\1\234\4\230"+ -- "\3\0\13\230\1\0\2\230\1\76\54\230\4\235\1\236"+ -- "\4\235\3\0\13\235\1\0\3\235\1\0\53\235\10\0"+ -- "\4\104\12\0\2\104\67\0\4\106\12\0\2\106\57\0"+ -- "\4\107\1\0\4\107\3\0\13\107\1\0\2\107\1\0"+ -- "\54\107\3\237\1\240\1\237\1\241\1\242\1\243\3\237"+ -- "\1\0\16\237\1\244\5\237\1\245\1\246\1\237\1\247"+ -- "\3\237\1\250\7\237\1\251\4\237\1\240\1\237\1\243"+ -- "\1\240\17\237\13\0\1\111\103\0\4\252\2\0\1\253"+ -- "\7\0\2\252\61\0\1\254\2\0\2\254\15\0\1\254"+ -- "\12\0\25\254\4\0\1\254\1\0\3\254\6\0\1\254"+ -- "\22\0\1\255\67\0\11\256\2\125\1\126\13\256\1\125"+ -- "\70\256\2\125\1\126\13\256\1\125\4\256\1\257\2\256"+ -- "\1\260\6\256\1\261\1\256\1\262\36\256\1\0\1\263"+ -- "\1\0\1\263\3\0\1\263\1\264\15\0\1\264\35\0"+ -- "\4\263\27\0\4\133\12\0\2\133\60\0\3\135\1\0"+ -- "\3\135\1\265\13\0\4\135\7\0\32\135\1\0\3\135"+ -- "\6\0\1\135\3\0\13\136\1\266\73\136\30\24\1\137"+ -- "\1\0\105\24\1\0\1\140\55\24\11\146\2\267\1\270"+ -- "\13\146\1\267\57\146\1\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\271"+ -- "\30\147\1\0\3\147\6\0\1\147\3\0\11\151\2\272"+ -- "\1\273\13\151\1\272\57\151\1\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\1\147\1\274\15\147\1\275\4\147"+ -- "\1\276\5\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\5\147\1\277\24\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -+ "\1\171\1\0\1\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\11\0\4\45\4\0\1\46\5\0\2\45\1\0"+ -+ "\1\176\2\0\1\50\74\0\1\177\120\0\1\200\1\201"+ -+ "\57\0\3\202\1\203\1\202\1\204\1\205\1\206\3\202"+ -+ "\1\0\24\202\1\207\1\210\1\202\1\211\3\202\1\212"+ -+ "\7\202\1\213\4\202\1\203\1\202\1\206\1\203\21\202"+ -+ "\10\0\1\53\3\214\1\56\1\0\1\57\4\0\1\61"+ -+ "\2\0\1\53\1\214\1\62\1\63\1\64\3\0\1\215"+ -+ "\36\0\1\66\1\67\1\70\1\71\1\72\1\73\1\74"+ -+ "\1\75\14\0\4\214\1\56\1\0\1\57\4\0\1\61"+ -+ "\2\0\2\214\1\62\1\63\1\64\3\0\1\215\36\0"+ -+ "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ -+ "\14\0\3\214\1\54\1\56\1\0\1\57\4\0\1\61"+ -+ "\2\0\2\214\1\62\1\63\1\64\3\0\1\215\36\0"+ -+ "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ -+ "\111\0\1\216\23\0\1\217\120\0\1\220\1\201\60\0"+ -+ "\1\221\1\222\1\221\1\0\2\222\1\221\1\223\13\0"+ -+ "\1\222\1\0\1\223\10\0\25\222\4\221\1\222\1\0"+ -+ "\3\222\6\0\1\222\2\0\2\222\11\0\1\224\1\225"+ -+ "\1\226\1\225\12\0\1\224\1\225\61\0\31\76\1\227"+ -+ "\1\230\1\231\1\0\1\76\1\0\102\76\1\232\1\233"+ -+ "\57\76\4\230\1\234\4\230\3\0\13\230\1\0\2\230"+ -+ "\1\76\56\230\4\235\1\236\4\235\3\0\13\235\1\0"+ -+ "\3\235\1\0\55\235\10\0\4\104\12\0\2\104\71\0"+ -+ "\4\106\12\0\2\106\61\0\4\107\1\0\4\107\3\0"+ -+ "\13\107\1\0\2\107\1\0\56\107\3\237\1\240\1\237"+ -+ "\1\241\1\242\1\243\3\237\1\0\16\237\1\244\5\237"+ -+ "\1\245\1\246\1\237\1\247\3\237\1\250\7\237\1\251"+ -+ "\4\237\1\240\1\237\1\243\1\240\21\237\13\0\1\111"+ -+ "\105\0\4\252\2\0\1\253\7\0\2\252\63\0\1\254"+ -+ "\2\0\2\254\15\0\1\254\12\0\25\254\4\0\1\254"+ -+ "\1\0\3\254\6\0\1\254\2\0\2\254\20\0\1\255"+ -+ "\71\0\11\256\2\125\1\126\13\256\1\125\72\256\2\125"+ -+ "\1\126\13\256\1\125\4\256\1\257\2\256\1\260\6\256"+ -+ "\1\261\1\256\1\262\40\256\1\0\1\263\1\0\1\263"+ -+ "\3\0\1\263\1\264\15\0\1\264\35\0\4\263\31\0"+ -+ "\4\133\12\0\2\133\62\0\3\135\1\0\3\135\1\265"+ -+ "\13\0\4\135\7\0\32\135\1\0\3\135\6\0\1\135"+ -+ "\2\0\2\135\1\0\13\136\1\266\75\136\30\24\1\137"+ -+ "\1\0\107\24\1\0\1\140\57\24\11\146\2\267\1\270"+ -+ "\13\146\1\267\61\146\1\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\2\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -+ "\1\147\1\271\30\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\1\0\11\151\2\272\1\273\13\151\1\272\61\151"+ -+ "\1\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -+ "\1\274\15\147\1\275\4\147\1\276\5\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\5\147\1\277\24\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\3\147\1\300\5\147\1\301\2\147"+ -- "\1\302\15\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\1\303\2\147\14\0\4\147\7\0\5\147\1\304"+ -- "\24\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\1\147\1\305\1\147\14\0\4\147\7\0\1\306\31\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\11\147\1\307\20\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\1\310\31\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\20\147\1\311"+ -- "\1\147\1\312\7\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\2\147\1\313"+ -- "\3\147\1\314\7\147\1\315\13\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\1\147\1\316\1\147\14\0"+ -- "\4\147\7\0\2\147\1\317\1\320\1\147\1\321\4\147"+ -- "\1\322\1\147\1\323\15\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\1\147\1\324\1\147\14\0\4\147"+ -+ "\1\302\15\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\1\303\2\147\14\0\4\147\7\0"+ -+ "\5\147\1\304\24\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\2\0\3\147\1\0\1\147\1\305\1\147\14\0"+ -+ "\4\147\7\0\1\306\31\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\11\147\1\307\20\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\1\310\31\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\2\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -+ "\20\147\1\311\1\147\1\312\7\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\2\147\1\313\3\147\1\314\7\147\1\315"+ -+ "\13\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\1\147\1\316\1\147\14\0\4\147\7\0"+ -+ "\2\147\1\317\1\320\1\147\1\321\4\147\1\322\1\147"+ -+ "\1\323\15\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\1\147\1\324\1\147\14\0\4\147"+ - "\7\0\11\147\1\325\20\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\1\147\1\326\1\147\14\0\4\147"+ -- "\7\0\14\147\1\327\15\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -- "\1\330\22\147\1\0\3\147\6\0\1\147\62\0\1\331"+ -- "\106\0\1\332\116\0\1\333\20\0\3\147\1\0\3\147"+ -- "\1\334\13\0\2\147\1\335\1\147\7\0\15\147\1\336"+ -- "\14\147\1\0\3\147\6\0\1\147\3\0\11\174\3\0"+ -- "\13\174\1\0\57\174\1\0\3\147\1\0\3\147\1\337"+ -+ "\2\0\2\147\2\0\3\147\1\0\1\147\1\326\1\147"+ -+ "\14\0\4\147\7\0\14\147\1\327\15\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\7\147\1\330\22\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\60\0\1\331\110\0\1\332"+ -+ "\120\0\1\333\22\0\3\147\1\0\3\147\1\334\13\0"+ -+ "\2\147\1\335\1\147\7\0\15\147\1\336\14\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\1\0\11\174\3\0"+ -+ "\13\174\1\0\61\174\1\0\3\147\1\0\3\147\1\337"+ - "\13\0\2\147\1\340\1\147\7\0\2\147\1\341\3\147"+ - "\1\314\7\147\1\315\13\147\1\0\3\147\6\0\1\147"+ -- "\75\0\1\342\14\0\11\201\3\0\13\201\1\0\57\201"+ -- "\3\0\1\343\3\0\1\343\54\0\1\343\1\0\2\343"+ -- "\20\0\3\344\3\0\1\344\36\0\2\344\3\0\1\344"+ -- "\1\0\1\344\1\0\1\344\2\0\1\344\1\0\4\344"+ -- "\2\0\1\344\1\0\1\344\13\0\3\345\3\0\1\345"+ -- "\36\0\2\345\3\0\1\345\1\0\1\345\1\0\1\345"+ -- "\2\0\1\345\1\0\4\345\2\0\1\345\1\0\1\345"+ -- "\15\0\1\203\3\0\1\203\54\0\1\203\1\0\2\203"+ -- "\25\0\1\346\42\0\1\347\6\0\1\350\1\0\1\351"+ -- "\116\0\1\352\15\0\1\221\1\0\1\221\3\0\1\221"+ -- "\54\0\4\221\20\0\3\222\1\0\3\222\1\353\13\0"+ -- "\4\222\4\0\1\354\2\0\32\222\1\0\3\222\6\0"+ -- "\1\222\16\0\1\355\73\0\30\232\1\356\56\232\11\233"+ -- "\2\357\1\76\13\233\1\357\57\233\11\230\3\0\13\230"+ -- "\1\0\57\230\33\0\1\76\53\0\3\235\1\360\1\361"+ -- "\1\235\1\362\1\363\1\235\3\0\13\235\1\0\34\235"+ -- "\1\360\1\235\1\363\1\360\17\235\3\0\1\364\3\0"+ -- "\1\364\54\0\1\364\1\0\2\364\20\0\3\365\3\0"+ -- "\1\365\36\0\2\365\3\0\1\365\1\0\1\365\1\0"+ -- "\1\365\2\0\1\365\1\0\4\365\2\0\1\365\1\0"+ -- "\1\365\13\0\3\366\3\0\1\366\36\0\2\366\3\0"+ -- "\1\366\1\0\1\366\1\0\1\366\2\0\1\366\1\0"+ -- "\4\366\2\0\1\366\1\0\1\366\15\0\1\240\3\0"+ -- "\1\240\54\0\1\240\1\0\2\240\20\0\3\254\1\0"+ -- "\3\254\14\0\4\254\4\0\1\367\2\0\32\254\1\0"+ -- "\3\254\6\0\1\254\3\0\11\257\2\370\1\371\13\257"+ -- "\1\370\57\257\11\256\2\125\1\126\13\256\1\125\10\256"+ -- "\1\372\57\256\2\125\1\126\13\256\1\125\14\256\1\373"+ -- "\53\256\2\125\1\126\13\256\1\125\20\256\1\374\36\256"+ -- "\1\0\1\263\1\0\1\263\3\0\1\263\54\0\4\263"+ -- "\27\0\1\265\15\0\1\265\61\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\1\375\31\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -+ "\2\0\2\147\73\0\1\342\16\0\11\201\3\0\13\201"+ -+ "\1\0\61\201\3\0\1\343\3\0\1\343\54\0\1\343"+ -+ "\1\0\2\343\22\0\3\344\3\0\1\344\36\0\2\344"+ -+ "\3\0\1\344\1\0\1\344\1\0\1\344\2\0\1\344"+ -+ "\1\0\4\344\2\0\1\344\1\0\1\344\15\0\3\345"+ -+ "\3\0\1\345\36\0\2\345\3\0\1\345\1\0\1\345"+ -+ "\1\0\1\345\2\0\1\345\1\0\4\345\2\0\1\345"+ -+ "\1\0\1\345\17\0\1\203\3\0\1\203\54\0\1\203"+ -+ "\1\0\2\203\27\0\1\346\42\0\1\347\6\0\1\350"+ -+ "\1\0\1\351\120\0\1\352\17\0\1\221\1\0\1\221"+ -+ "\3\0\1\221\54\0\4\221\22\0\3\222\1\0\3\222"+ -+ "\1\353\13\0\4\222\4\0\1\354\2\0\32\222\1\0"+ -+ "\3\222\6\0\1\222\2\0\2\222\14\0\1\355\75\0"+ -+ "\30\232\1\356\60\232\11\233\2\357\1\76\13\233\1\357"+ -+ "\61\233\11\230\3\0\13\230\1\0\61\230\33\0\1\76"+ -+ "\55\0\3\235\1\360\1\361\1\235\1\362\1\363\1\235"+ -+ "\3\0\13\235\1\0\34\235\1\360\1\235\1\363\1\360"+ -+ "\21\235\3\0\1\364\3\0\1\364\54\0\1\364\1\0"+ -+ "\2\364\22\0\3\365\3\0\1\365\36\0\2\365\3\0"+ -+ "\1\365\1\0\1\365\1\0\1\365\2\0\1\365\1\0"+ -+ "\4\365\2\0\1\365\1\0\1\365\15\0\3\366\3\0"+ -+ "\1\366\36\0\2\366\3\0\1\366\1\0\1\366\1\0"+ -+ "\1\366\2\0\1\366\1\0\4\366\2\0\1\366\1\0"+ -+ "\1\366\17\0\1\240\3\0\1\240\54\0\1\240\1\0"+ -+ "\2\240\22\0\3\254\1\0\3\254\14\0\4\254\4\0"+ -+ "\1\367\2\0\32\254\1\0\3\254\6\0\1\254\2\0"+ -+ "\2\254\1\0\11\257\2\370\1\371\13\257\1\370\61\257"+ -+ "\11\256\2\125\1\126\13\256\1\125\10\256\1\372\61\256"+ -+ "\2\125\1\126\13\256\1\125\14\256\1\373\55\256\2\125"+ -+ "\1\126\13\256\1\125\20\256\1\374\40\256\1\0\1\263"+ -+ "\1\0\1\263\3\0\1\263\54\0\4\263\31\0\1\265"+ -+ "\15\0\1\265\63\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\1\375\31\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\2\0\3\147\1\0\3\147\14\0\4\147\7\0"+ - "\1\376\1\147\1\377\13\147\1\u0100\13\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\22\147\1\u0101\7\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -- "\1\u0102\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0103\27\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\22\147\1\u0101\7\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\1\147\1\u0102\30\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\2\147\1\u0103\27\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\4\147\1\u0104\25\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\22\147\1\u0105\7\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\20\147"+ -- "\1\u0106\11\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0107\27\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\22\147\1\u0105\7\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\20\147\1\u0106\11\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\2\147\1\u0107\27\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\10\147\1\u0108\21\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\1\147\1\u0109\10\147\1\u010a\17\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\1\147\1\u010b\30\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -- "\1\u010c\2\147\1\u010d\17\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -- "\1\u010e\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\15\147\1\u010f\14\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\1\u0110\31\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\14\147\1\u0111\15\147\1\0\3\147\6\0\1\147\4\0"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\1\147\1\u0109\10\147\1\u010a\17\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\1\147\1\u010b\30\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\7\147\1\u010c\2\147"+ -+ "\1\u010d\17\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -+ "\1\u010e\30\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ -+ "\1\u010f\14\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\1\u0110"+ -+ "\31\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\14\147\1\u0111"+ -+ "\15\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\1\u0112\31\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\14\147\1\u0113\15\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\22\147\1\u0114\7\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+ -- "\1\u0115\24\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0113\15\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\22\147\1\u0114\7\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\5\147\1\u0115\24\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0116\15\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\12\147\1\u0117\17\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\14\147\1\u0118\15\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ -- "\1\u0119\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\12\147\1\u0117\17\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0118\15\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\15\147\1\u0119\14\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\10\147\1\u011a\21\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\14\147\1\u011b\15\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\20\147\1\u011c\11\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+ -- "\1\u011d\13\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\14\147\1\u011b\15\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\20\147\1\u011c\11\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\16\147\1\u011d\13\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\20\147\1\u011e\11\147"+ -- "\1\0\3\147\6\0\1\147\42\0\1\u011f\106\0\1\u0120"+ -- "\126\0\1\u0121\37\0\1\334\15\0\1\334\61\0\3\147"+ -- "\1\0\3\147\1\334\13\0\2\147\1\335\1\147\7\0"+ -- "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\2\147\1\u0122\27\147\1\0"+ -- "\3\147\6\0\1\147\13\0\1\337\15\0\1\337\61\0"+ -- "\3\147\1\0\3\147\1\337\13\0\2\147\1\340\1\147"+ -- "\7\0\32\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\40\0\1\u011f"+ -+ "\110\0\1\u0120\130\0\1\u0121\41\0\1\334\15\0\1\334"+ -+ "\63\0\3\147\1\0\3\147\1\334\13\0\2\147\1\335"+ -+ "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\2\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -+ "\2\147\1\u0122\27\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\11\0\1\337\15\0\1\337\63\0\3\147\1\0"+ -+ "\3\147\1\337\13\0\2\147\1\340\1\147\7\0\32\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0123\15\147"+ -- "\1\0\3\147\6\0\1\147\76\0\1\u0124\14\0\3\u0125"+ -- "\3\0\1\u0125\36\0\2\u0125\3\0\1\u0125\1\0\1\u0125"+ -- "\1\0\1\u0125\2\0\1\u0125\1\0\4\u0125\2\0\1\u0125"+ -- "\1\0\1\u0125\13\0\3\u0126\3\0\1\u0126\36\0\2\u0126"+ -- "\3\0\1\u0126\1\0\1\u0126\1\0\1\u0126\2\0\1\u0126"+ -- "\1\0\4\u0126\2\0\1\u0126\1\0\1\u0126\73\0\1\u0127"+ -- "\71\0\1\u0128\1\0\1\u0129\111\0\1\u012a\74\0\1\u012b"+ -- "\142\0\1\u012c\23\0\1\353\15\0\1\353\5\0\1\354"+ -- "\52\0\30\232\1\356\1\76\55\232\13\357\1\76\15\357"+ -- "\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\50\357\3\0"+ -- "\1\235\3\0\1\235\23\0\1\76\30\0\1\235\1\0"+ -- "\2\235\23\0\1\u0130\1\0\1\u0131\24\0\1\76\54\0"+ -- "\3\u0132\3\0\1\u0132\23\0\1\76\12\0\2\u0132\3\0"+ -- "\1\u0132\1\0\1\u0132\1\0\1\u0132\2\0\1\u0132\1\0"+ -- "\4\u0132\2\0\1\u0132\1\0\1\u0132\15\0\1\360\3\0"+ -- "\1\360\23\0\1\76\30\0\1\360\1\0\2\360\20\0"+ -- "\3\u0133\3\0\1\u0133\36\0\2\u0133\3\0\1\u0133\1\0"+ -- "\1\u0133\1\0\1\u0133\2\0\1\u0133\1\0\4\u0133\2\0"+ -- "\1\u0133\1\0\1\u0133\13\0\3\u0134\3\0\1\u0134\36\0"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\74\0\1\u0124"+ -+ "\16\0\3\u0125\3\0\1\u0125\36\0\2\u0125\3\0\1\u0125"+ -+ "\1\0\1\u0125\1\0\1\u0125\2\0\1\u0125\1\0\4\u0125"+ -+ "\2\0\1\u0125\1\0\1\u0125\15\0\3\u0126\3\0\1\u0126"+ -+ "\36\0\2\u0126\3\0\1\u0126\1\0\1\u0126\1\0\1\u0126"+ -+ "\2\0\1\u0126\1\0\4\u0126\2\0\1\u0126\1\0\1\u0126"+ -+ "\54\0\1\u0127\20\0\1\u0128\73\0\1\u0129\1\0\1\u012a"+ -+ "\113\0\1\u012b\76\0\1\u012c\144\0\1\u012d\25\0\1\353"+ -+ "\15\0\1\353\5\0\1\354\54\0\30\232\1\356\1\76"+ -+ "\57\232\13\357\1\76\15\357\1\u012e\1\u012f\1\u0130\1\233"+ -+ "\1\357\1\233\52\357\3\0\1\235\3\0\1\235\23\0"+ -+ "\1\76\30\0\1\235\1\0\2\235\25\0\1\u0131\1\0"+ -+ "\1\u0132\24\0\1\76\56\0\3\u0133\3\0\1\u0133\23\0"+ -+ "\1\76\12\0\2\u0133\3\0\1\u0133\1\0\1\u0133\1\0"+ -+ "\1\u0133\2\0\1\u0133\1\0\4\u0133\2\0\1\u0133\1\0"+ -+ "\1\u0133\17\0\1\360\3\0\1\360\23\0\1\76\30\0"+ -+ "\1\360\1\0\2\360\22\0\3\u0134\3\0\1\u0134\36\0"+ - "\2\u0134\3\0\1\u0134\1\0\1\u0134\1\0\1\u0134\2\0"+ -- "\1\u0134\1\0\4\u0134\2\0\1\u0134\1\0\1\u0134\12\0"+ -- "\11\256\2\125\1\126\13\256\1\125\7\256\1\u0135\60\256"+ -- "\2\125\1\126\13\256\1\125\17\256\1\u0136\50\256\2\125"+ -- "\1\126\13\256\1\125\21\256\1\u0137\35\256\1\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\16\147\1\u0138\13\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\2\147\1\u0139\27\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\6\147\1\u013a\1\u013b\22\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\12\147\1\u013c\17\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u013d"+ -- "\17\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\5\147\1\u013e\24\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\1\147\1\u013f"+ -+ "\1\u0134\1\0\4\u0134\2\0\1\u0134\1\0\1\u0134\15\0"+ -+ "\3\u0135\3\0\1\u0135\36\0\2\u0135\3\0\1\u0135\1\0"+ -+ "\1\u0135\1\0\1\u0135\2\0\1\u0135\1\0\4\u0135\2\0"+ -+ "\1\u0135\1\0\1\u0135\14\0\11\256\2\125\1\126\13\256"+ -+ "\1\125\7\256\1\u0136\62\256\2\125\1\126\13\256\1\125"+ -+ "\17\256\1\u0137\52\256\2\125\1\126\13\256\1\125\21\256"+ -+ "\1\u0138\37\256\1\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\16\147\1\u0139\13\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\2\147\1\u013a\27\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\6\147\1\u013b\1\u013c\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\12\147\1\u013d\17\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\12\147\1\u013e\17\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\5\147\1\u013f\24\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\1\147\1\u0140"+ - "\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\5\147\1\u0140\24\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\7\147\1\u0141"+ -- "\22\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\12\147\1\u0142\17\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\7\147\1\u0143\22\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\6\0"+ -- "\1\151\2\147\1\u0144\10\147\1\u0145\2\147\1\u0146\13\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\16\147\1\u0147\13\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\12\147\1\u0148\17\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\14\147"+ -- "\1\u0149\15\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\5\147\1\u014a\24\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\7\147\1\u014b\22\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\7\147\1\u014c\22\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+ -- "\1\u014d\27\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\22\147\1\u014e\7\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\1\147\1\u014f\30\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\2\147\1\u0150\27\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -- "\1\u0151\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\15\147\1\u0152\5\147"+ -- "\1\u0153\6\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\4\147\1\u0154\25\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\4\147\1\u0155\25\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\1\147\1\u0156\1\147"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\5\147\1\u0141\24\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\7\147\1\u0142\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\12\147\1\u0143\17\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\7\147\1\u0144\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\6\0\1\151\2\147\1\u0145\10\147\1\u0146\2\147"+ -+ "\1\u0147\13\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+ -+ "\1\u0148\13\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\12\147"+ -+ "\1\u0149\17\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\14\147"+ -+ "\1\u014a\15\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+ -+ "\1\u014b\24\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -+ "\1\u014c\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -+ "\1\u014d\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+ -+ "\1\u014e\27\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\22\147"+ -+ "\1\u014f\7\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -+ "\1\u0150\30\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+ -+ "\1\u0151\27\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -+ "\1\u0152\30\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ -+ "\1\u0153\5\147\1\u0154\6\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\4\147\1\u0155\25\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\4\147\1\u0156\25\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\1\147\1\u0157\1\147"+ - "\14\0\4\147\7\0\32\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ -- "\1\u0157\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\7\147\1\u0158\22\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\10\147\1\u0159\21\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\16\147\1\u015a\13\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\12\147"+ -- "\1\u015b\17\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\31\147\1\u015c\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\1\147\1\u015d"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\15\147\1\u0158\14\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\7\147\1\u0159\22\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\10\147\1\u015a\21\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\16\147\1\u015b\13\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\12\147\1\u015c\17\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\31\147\1\u015d\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\2\0\3\147\1\0\1\147\1\u015e\1\147\14\0"+ -+ "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\42\0\1\u015f\110\0\1\u0160\106\0\1\u0161\52\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\14\147\1\u0162"+ -+ "\15\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0150"+ -+ "\1\u0163\27\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\75\0\1\u0164\15\0\3\u0165\3\0\1\u0165\36\0\2\u0165"+ -+ "\3\0\1\u0165\1\0\1\u0165\1\0\1\u0165\2\0\1\u0165"+ -+ "\1\0\4\u0165\2\0\1\u0165\1\0\1\u0165\53\0\1\u0166"+ -+ "\132\0\1\u0167\74\0\1\u0168\104\0\1\u0169\115\0\1\u016a"+ -+ "\125\0\1\u016b\121\0\1\u016c\14\0\13\357\1\76\14\357"+ -+ "\1\u016d\1\233\57\357\4\u012f\1\u016e\4\u012f\2\357\1\76"+ -+ "\13\u012f\1\357\2\u012f\1\357\56\u012f\4\u016f\1\u0170\4\u016f"+ -+ "\2\357\1\76\13\u016f\1\357\3\u016f\1\233\55\u016f\4\0"+ -+ "\1\u0131\1\0\1\u0132\103\0\3\u0133\3\0\1\u0133\36\0"+ -+ "\2\u0133\3\0\1\u0133\1\0\1\u0133\1\0\1\u0133\2\0"+ -+ "\1\u0133\1\0\4\u0133\2\0\1\u0133\1\0\1\u0133\15\0"+ -+ "\3\u0171\3\0\1\u0171\36\0\2\u0171\3\0\1\u0171\1\0"+ -+ "\1\u0171\1\0\1\u0171\2\0\1\u0171\1\0\4\u0171\2\0"+ -+ "\1\u0171\1\0\1\u0171\15\0\3\u0172\3\0\1\u0172\36\0"+ -+ "\2\u0172\3\0\1\u0172\1\0\1\u0172\1\0\1\u0172\2\0"+ -+ "\1\u0172\1\0\4\u0172\2\0\1\u0172\1\0\1\u0172\14\0"+ -+ "\11\256\2\125\1\126\13\256\1\125\11\256\1\u0173\60\256"+ -+ "\2\125\1\126\13\256\1\125\4\256\1\u0174\4\256\1\u0175"+ -+ "\10\256\1\u0176\47\256\2\125\1\126\13\256\1\125\16\256"+ -+ "\1\u0177\42\256\1\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\5\147\1\u0178\24\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\6\0\1\151\2\147\1\u0179\27\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\4\147\1\u017a\25\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\24\147\1\u017b\5\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\1\147\1\u017c"+ - "\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+ -- "\1\147\44\0\1\u015e\106\0\1\u015f\104\0\1\u0160\50\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\14\147\1\u0161"+ -- "\15\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\1\147\1\u014f\1\u0162\27\147"+ -- "\1\0\3\147\6\0\1\147\77\0\1\u0163\13\0\3\u0164"+ -- "\3\0\1\u0164\36\0\2\u0164\3\0\1\u0164\1\0\1\u0164"+ -- "\1\0\1\u0164\2\0\1\u0164\1\0\4\u0164\2\0\1\u0164"+ -- "\1\0\1\u0164\73\0\1\u0165\72\0\1\u0166\102\0\1\u0167"+ -- "\113\0\1\u0168\123\0\1\u0169\117\0\1\u016a\12\0\13\357"+ -- "\1\76\14\357\1\u016b\1\233\55\357\4\u012e\1\u016c\4\u012e"+ -- "\2\357\1\76\13\u012e\1\357\2\u012e\1\357\54\u012e\4\u016d"+ -- "\1\u016e\4\u016d\2\357\1\76\13\u016d\1\357\3\u016d\1\233"+ -- "\53\u016d\4\0\1\u0130\1\0\1\u0131\101\0\3\u0132\3\0"+ -- "\1\u0132\36\0\2\u0132\3\0\1\u0132\1\0\1\u0132\1\0"+ -- "\1\u0132\2\0\1\u0132\1\0\4\u0132\2\0\1\u0132\1\0"+ -- "\1\u0132\13\0\3\u016f\3\0\1\u016f\36\0\2\u016f\3\0"+ -- "\1\u016f\1\0\1\u016f\1\0\1\u016f\2\0\1\u016f\1\0"+ -- "\4\u016f\2\0\1\u016f\1\0\1\u016f\13\0\3\u0170\3\0"+ -- "\1\u0170\36\0\2\u0170\3\0\1\u0170\1\0\1\u0170\1\0"+ -- "\1\u0170\2\0\1\u0170\1\0\4\u0170\2\0\1\u0170\1\0"+ -- "\1\u0170\12\0\11\256\2\125\1\126\13\256\1\125\11\256"+ -- "\1\u0171\56\256\2\125\1\126\13\256\1\125\4\256\1\u0172"+ -- "\4\256\1\u0173\10\256\1\u0174\45\256\2\125\1\126\13\256"+ -- "\1\125\16\256\1\u0175\40\256\1\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\5\147\1\u0176\24\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\6\0\1\151\2\147\1\u0177\27\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\4\147\1\u0178\25\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\24\147\1\u0179"+ -- "\5\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\1\147\1\u017a\1\147\14\0\4\147\7\0\32\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\7\147\1\u017b\22\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\4\147\1\u017c\25\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u017d"+ -- "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\6\147\1\u017e\23\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\u017f"+ -- "\13\0\2\147\1\u0180\1\147\7\0\32\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\7\147\1\u0181\22\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -- "\1\u0182\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\3\147\1\u0183\26\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\14\147\1\u0184\15\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\12\147\1\u0185\17\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+ -- "\1\u0186\27\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\12\147\1\u0187\17\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\10\147\1\u0188\21\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\1\u0189\2\147\14\0"+ -- "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u018a"+ -- "\25\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\4\147\1\u018b\25\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\23\147\1\u018c\6\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\16\147\1\u018d\13\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\7\147\1\u018e"+ -- "\22\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\11\147\1\u018f\20\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\7\147\1\u017d\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\4\147\1\u017e\25\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\1\147\1\u017f\30\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\6\147\1\u0180\23\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\1\u0181"+ -+ "\13\0\2\147\1\u0182\1\147\7\0\32\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\7\147\1\u0183\22\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\1\147\1\u0184\30\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\3\147\1\u0185\26\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\14\147\1\u0186\15\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\12\147\1\u0187\17\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\2\147\1\u0188\27\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\12\147\1\u0189\17\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\10\147\1\u018a\21\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\1\u018b"+ -+ "\2\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\4\147\1\u018c\25\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\4\147\1\u018d\25\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\23\147\1\u018e\6\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\16\147\1\u018f\13\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u0190\22\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\14\147\1\u0191\15\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\17\147\1\u0192"+ -- "\12\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\15\147\1\u0193\14\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\12\147\1\u0194\17\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\7\147\1\u0195\22\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\16\147\1\u0196"+ -- "\13\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\1\u0197\31\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\24\147\1\u0198\5\147\1\0\3\147\6\0\1\147"+ -- "\44\0\1\u0199\46\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\2\147\1\u019a\27\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -- "\1\u019b\22\147\1\0\3\147\6\0\1\147\24\0\1\u019c"+ -- "\133\0\1\u019d\106\0\1\u019e\101\0\1\u019f\106\0\1\u01a0"+ -- "\104\0\1\u01a1\70\0\1\u01a2\65\0\11\u016b\2\u01a3\1\u01a4"+ -- "\13\u016b\1\u01a3\1\u01a5\56\u016b\11\u012e\2\357\1\76\13\u012e"+ -- "\1\357\57\u012e\11\233\2\357\1\76\13\233\1\357\3\233"+ -- "\1\357\53\233\3\u016d\1\u01a6\1\u01a7\1\u016d\1\u01a8\1\u01a9"+ -- "\1\u016d\2\357\1\76\13\u016d\1\357\34\u016d\1\u01a6\1\u016d"+ -- "\1\u01a9\1\u01a6\17\u016d\1\0\3\u01aa\3\0\1\u01aa\36\0"+ -- "\2\u01aa\3\0\1\u01aa\1\0\1\u01aa\1\0\1\u01aa\2\0"+ -- "\1\u01aa\1\0\4\u01aa\2\0\1\u01aa\1\0\1\u01aa\12\0"+ -- "\11\256\2\125\1\126\13\256\1\125\4\256\1\u01ab\4\256"+ -- "\1\u01ac\45\256\11\u0172\2\u01ad\1\u01ae\13\u0172\1\u01ad\57\u0172"+ -- "\11\256\2\125\1\126\13\256\1\125\12\256\1\u01af\55\256"+ -- "\2\125\1\126\13\256\1\125\23\256\1\u01b0\40\256\1\u01b1"+ -- "\3\256\2\125\1\126\13\256\1\125\57\256\1\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b2\6\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\3\147\1\u01b3\26\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\14\147\1\u01b4\15\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -- "\1\u01b5\22\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b6\6\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\17\147\1\u01b7\12\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\7\147\1\u01b8\22\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\u01b9"+ -- "\31\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\15\147\1\u01ba\14\147\1\0"+ -- "\3\147\6\0\1\147\5\0\1\u01bb\2\0\2\u01bb\1\0"+ -- "\1\u017f\7\0\1\u01bc\3\0\1\u01bb\1\0\1\u017f\10\0"+ -- "\25\u01bb\4\0\1\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0"+ -- "\1\147\1\u01bb\1\147\1\0\2\u01bb\1\147\1\u017f\7\0"+ -- "\1\u01bc\3\0\1\u01bb\1\147\1\u0180\1\147\7\0\25\u01bb"+ -- "\4\147\1\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01bd\6\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\4\147\1\u01be\25\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\12\147\1\u01bf\17\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+ -- "\1\u01c0\24\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\1\u01c1\31\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\2\147\1\u01c2\27\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\14\147\1\u01c3\15\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\1\u01c4\31\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\14\147\1\u01c5\15\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\3\147\1\u01c6\26\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ -- "\1\u01c7\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\17\147\1\u01c8\12\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\20\147\1\u01c9\11\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\11\147\1\u0191\20\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\7\147\1\u0192\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\14\147\1\u0193\15\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\17\147\1\u0194\12\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\15\147\1\u0195\14\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\12\147\1\u0196\17\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\7\147\1\u0197\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\16\147\1\u0198\13\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\1\u0199\31\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\24\147\1\u019a\5\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\42\0\1\u019b\50\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\2\147\1\u019c\27\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\7\147\1\u019d\22\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\22\0\1\u019e\144\0\1\u019f"+ -+ "\101\0\1\u01a0\110\0\1\u01a1\103\0\1\u01a2\110\0\1\u01a3"+ -+ "\106\0\1\u01a4\72\0\1\u01a5\67\0\11\u016d\2\u01a6\1\u01a7"+ -+ "\13\u016d\1\u01a6\1\u01a8\60\u016d\11\u012f\2\357\1\76\13\u012f"+ -+ "\1\357\61\u012f\11\233\2\357\1\76\13\233\1\357\3\233"+ -+ "\1\357\55\233\3\u016f\1\u01a9\1\u01aa\1\u016f\1\u01ab\1\u01ac"+ -+ "\1\u016f\2\357\1\76\13\u016f\1\357\34\u016f\1\u01a9\1\u016f"+ -+ "\1\u01ac\1\u01a9\21\u016f\1\0\3\u01ad\3\0\1\u01ad\36\0"+ -+ "\2\u01ad\3\0\1\u01ad\1\0\1\u01ad\1\0\1\u01ad\2\0"+ -+ "\1\u01ad\1\0\4\u01ad\2\0\1\u01ad\1\0\1\u01ad\14\0"+ -+ "\11\256\2\125\1\126\13\256\1\125\4\256\1\u01ae\4\256"+ -+ "\1\u01af\47\256\11\u0174\2\u01b0\1\u01b1\13\u0174\1\u01b0\61\u0174"+ -+ "\11\256\2\125\1\126\13\256\1\125\12\256\1\u01b2\57\256"+ -+ "\2\125\1\126\13\256\1\125\23\256\1\u01b3\42\256\1\u01b4"+ -+ "\3\256\2\125\1\126\13\256\1\125\61\256\1\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b5\6\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\3\147\1\u01b6\26\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\14\147\1\u01b7\15\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\7\147\1\u01b8\22\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b9\6\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\17\147\1\u01ba\12\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\7\147\1\u01bb\22\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\14\0\4\147\7\0\1\u01bc\31\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\7\0\15\147\1\u01bd\14\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\3\0\1\u01be\2\0"+ -+ "\2\u01be\1\0\1\u0181\7\0\1\u01bf\3\0\1\u01be\1\0"+ -+ "\1\u0181\10\0\25\u01be\4\0\1\u01be\1\0\3\u01be\6\0"+ -+ "\1\u01be\2\0\2\u01be\2\0\1\147\1\u01be\1\147\1\0"+ -+ "\2\u01be\1\147\1\u0181\7\0\1\u01bf\3\0\1\u01be\1\147"+ -+ "\1\u0182\1\147\7\0\25\u01be\4\147\1\u01be\1\0\3\u01be"+ -+ "\6\0\1\u01be\2\0\2\u01be\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\23\147\1\u01c0\6\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\4\147\1\u01c1\25\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\12\147\1\u01c2\17\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\5\147\1\u01c3\24\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\1\u01c4\31\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\2\147\1\u01c5\27\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\14\147\1\u01c6\15\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\1\u01c7\31\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\14\147\1\u01c8\15\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\3\147\1\u01c9\26\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\4\147\1\u01ca\25\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ -- "\1\u01cb\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\1\u01cc\13\0\2\147\1\u01cd\1\147\7\0"+ -- "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\7\147\1\u01ce\22\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\4\147\1\u01cf\25\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\21\147\1\u01d0\10\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\16\147\1\u01d1"+ -- "\13\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\7\147\1\u01d2\22\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\337"+ -- "\13\0\2\147\1\340\1\147\7\0\15\147\1\u01d3\14\147"+ -- "\1\0\3\147\6\0\1\147\24\0\1\u01d4\130\0\1\u01d5"+ -- "\106\0\1\u01d6\111\0\1\u01d7\101\0\1\u01d8\106\0\1\u01d9"+ -- "\66\0\1\u01da\65\0\13\u01a3\1\u01a4\14\u01a3\1\u01db\1\u01dc"+ -- "\1\u01dd\1\u01de\1\u016b\1\u01a3\1\u016b\50\u01a3\30\u01a4\1\u01df"+ -- "\1\u01e0\1\u01e1\1\u01e2\1\232\1\u01a4\1\232\50\u01a4\11\u016b"+ -- "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\1\357\55\u016b\3\233"+ -- "\1\u016d\3\233\1\u016d\1\233\2\357\1\76\13\233\1\357"+ -- "\3\233\1\357\30\233\1\u016d\1\233\2\u016d\23\233\1\u01e3"+ -- "\1\233\1\u01e4\2\233\2\357\1\76\13\233\1\357\3\233"+ -- "\1\357\54\233\3\u01e5\3\233\1\u01e5\1\233\2\357\1\76"+ -- "\13\233\1\357\3\233\1\357\12\233\2\u01e5\3\233\1\u01e5"+ -- "\1\233\1\u01e5\1\233\1\u01e5\2\233\1\u01e5\1\233\4\u01e5"+ -- "\2\233\1\u01e5\1\233\1\u01e5\15\233\1\u01a6\3\233\1\u01a6"+ -- "\1\233\2\357\1\76\13\233\1\357\3\233\1\357\30\233"+ -- "\1\u01a6\1\233\2\u01a6\17\233\1\0\3\235\3\0\1\235"+ -- "\36\0\2\235\3\0\1\235\1\0\1\235\1\0\1\235"+ -- "\2\0\1\235\1\0\4\235\2\0\1\235\1\0\1\235"+ -- "\12\0\11\u01ab\2\u01e6\1\u01e7\13\u01ab\1\u01e6\57\u01ab\11\256"+ -- "\2\125\1\126\13\256\1\125\12\256\1\u01e8\55\256\2\125"+ -- "\1\126\13\256\1\125\13\256\1\u01e9\54\256\2\125\1\126"+ -- "\13\256\1\125\21\256\1\u01ea\46\256\2\125\1\126\13\256"+ -- "\1\125\11\256\1\u01eb\45\256\1\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\7\147\1\u01ec\22\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\4\147\1\u01ed\25\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\22\147"+ -- "\1\u01ee\7\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\4\147\1\u01ef\25\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\7\147\1\u01f0\22\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\7\147\1\u01f1\22\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+ -- "\1\u01f2\13\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\1\u01f3\2\147\14\0\4\147\7\0\32\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\u01f4"+ -- "\13\0\2\147\1\u01f5\1\147\7\0\32\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\u01bb\1\0\3\u01bb\1\u01f6\3\0"+ -- "\1\u01f7\1\0\1\u01f8\1\0\1\u01f9\3\0\4\u01bb\7\0"+ -- "\32\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0\3\u01fa\1\0"+ -- "\4\u01fa\3\0\2\u01fa\2\0\10\u01fa\7\0\32\u01fa\1\0"+ -- "\3\u01fa\6\0\1\u01fa\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\15\147\1\u01fb\14\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\5\147\1\u01fc\24\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\6\0\1\151\32\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\15\147\1\u01fd\14\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\5\147\1\u01fe\24\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\3\147"+ -- "\1\u01ff\26\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\16\147\1\u0200\13\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\13\147\1\u0201\16\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\12\147\1\u0202\17\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ -- "\1\u0203\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\1\u0204\13\0\2\147\1\u0205\1\147\7\0"+ -- "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\1\147\1\u0206\1\147\14\0\4\147\7\0\32\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\24\147\1\u0207\5\147\1\0\3\147\6\0"+ -- "\1\147\5\0\1\u0208\2\0\2\u0208\1\0\1\u01cc\13\0"+ -- "\1\u0208\1\0\1\u01cc\10\0\25\u0208\4\0\1\u0208\1\0"+ -- "\3\u0208\6\0\1\u0208\4\0\1\147\1\u0208\1\147\1\0"+ -- "\2\u0208\1\147\1\u01cc\13\0\1\u0208\1\147\1\u01cd\1\147"+ -- "\7\0\25\u0208\4\147\1\u0208\1\0\3\u0208\6\0\1\u0208"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ -- "\1\u0209\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\1\u020a\13\0\2\147\1\u020b\1\147\7\0"+ -- "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\1\334\13\0\2\147\1\335\1\147\7\0\15\147"+ -- "\1\u020c\14\147\1\0\3\147\6\0\1\147\13\0\4\u01d4"+ -- "\12\0\2\u01d4\6\0\1\u020d\125\0\1\u020e\106\0\1\u020f"+ -- "\74\0\1\u0210\111\0\1\u0211\145\0\1\u0212\11\0\4\u0213"+ -- "\12\0\2\u0213\57\0\13\u01a3\1\u01a4\14\u01a3\1\u01db\1\u0214"+ -- "\1\u01dd\1\u01de\1\u016b\1\u01a3\1\u016b\63\u01a3\1\u01a4\14\u01a3"+ -- "\1\u0215\1\u016b\55\u01a3\4\u01dd\1\u0216\4\u01dd\2\u01a3\1\u01a4"+ -- "\13\u01dd\1\u01a3\1\u0217\1\u01dd\1\u01a3\54\u01dd\4\u0218\1\u0219"+ -- "\4\u0218\2\u01a3\1\u01a4\13\u0218\1\u01a3\1\u021a\2\u0218\1\u016b"+ -- "\53\u0218\30\u01a4\1\u01df\1\u021b\1\u01e1\1\u01e2\1\232\1\u01a4"+ -- "\1\232\100\u01a4\1\u021c\1\u016b\55\u01a4\4\u01e1\1\u021d\4\u01e1"+ -- "\3\232\13\u01e1\1\232\1\u021e\1\u01e1\1\u01a4\54\u01e1\4\u021f"+ -- "\1\u0220\4\u021f\3\232\13\u021f\1\232\1\u0221\2\u021f\1\232"+ -- "\53\u021f\4\233\1\u01e3\1\233\1\u01e4\2\233\2\357\1\76"+ -- "\13\233\1\357\60\233\3\u01e5\3\233\1\u01e5\1\233\2\357"+ -- "\1\76\13\233\1\357\16\233\2\u01e5\3\233\1\u01e5\1\233"+ -- "\1\u01e5\1\233\1\u01e5\2\233\1\u01e5\1\233\4\u01e5\2\233"+ -- "\1\u01e5\1\233\1\u01e5\13\233\3\u0222\3\233\1\u0222\1\233"+ -- "\2\357\1\76\13\233\1\357\16\233\2\u0222\3\233\1\u0222"+ -- "\1\233\1\u0222\1\233\1\u0222\2\233\1\u0222\1\233\4\u0222"+ -- "\2\233\1\u0222\1\233\1\u0222\12\233\11\256\2\125\1\126"+ -- "\13\256\1\125\13\256\1\u0223\54\256\2\125\1\126\13\256"+ -- "\1\125\14\256\1\u0224\53\256\2\125\1\126\13\256\1\125"+ -- "\4\256\1\u0225\63\256\2\125\1\126\13\256\1\125\12\256"+ -- "\1\u0226\44\256\1\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\5\147\1\u0227\24\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\1\u0228\13\0\2\147\1\u0228"+ -- "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0229"+ -- "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\14\147\1\u022a\15\147\1\0"+ -- "\3\147\6\0\1\147\3\0\2\u022b\1\u022c\2\u022b\2\u022c"+ -- "\1\u022b\1\u01f4\3\0\10\u022b\1\u022c\1\u022b\1\u01f4\1\0"+ -- "\7\u022b\25\u022c\4\u022b\1\u022c\1\u022b\3\u022c\6\u022b\1\u022c"+ -- "\4\u022b\1\u022d\1\u022c\1\u022d\1\u022b\2\u022c\1\u022d\1\u01f4"+ -- "\3\0\10\u022b\1\u022c\1\u022d\1\u01f5\1\147\7\u022b\25\u022c"+ -- "\4\u022d\1\u022c\1\u022b\3\u022c\6\u022b\1\u022c\3\u022b\10\0"+ -- "\1\u01f6\3\0\1\u01f7\1\0\1\u01f8\1\0\1\u01f9\5\0"+ -- "\1\u01f6\62\0\1\u01bb\2\0\2\u01bb\1\0\1\u01f7\13\0"+ -- "\1\u01bb\1\0\1\u01f7\10\0\25\u01bb\4\0\1\u01bb\1\0"+ -- "\3\u01bb\6\0\1\u01bb\13\0\1\u01f8\6\0\1\u022e\6\0"+ -- "\1\u01f8\61\0\3\u022f\1\0\4\u022f\3\0\2\u022f\2\0"+ -- "\10\u022f\7\0\32\u022f\1\0\3\u022f\6\0\1\u022f\4\0"+ -- "\3\u01fa\1\0\4\u01fa\3\0\2\u01fa\2\0\1\u01fa\1\u0230"+ -- "\6\u01fa\7\0\32\u01fa\1\0\3\u01fa\6\0\1\u01fa\4\0"+ -- "\3\147\1\0\3\147\1\u0231\13\0\2\147\1\u0232\1\147"+ -- "\7\0\32\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\6\147\1\u0233\23\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\7\147\1\u0234\22\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\1\147\1\u0235\30\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ -- "\1\u0236\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0237\27\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\14\147\1\u0238\15\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\5\147\1\u0239\24\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+ -- "\1\u023a\24\147\1\0\3\147\6\0\1\147\3\0\2\u023b"+ -- "\1\u023c\2\u023b\2\u023c\1\u023b\1\u0204\3\0\10\u023b\1\u023c"+ -- "\1\u023b\1\u0204\1\0\7\u023b\25\u023c\4\u023b\1\u023c\1\u023b"+ -- "\3\u023c\6\u023b\1\u023c\4\u023b\1\u023d\1\u023c\1\u023d\1\u023b"+ -- "\2\u023c\1\u023d\1\u0204\3\0\10\u023b\1\u023c\1\u023d\1\u0205"+ -- "\1\147\7\u023b\25\u023c\4\u023d\1\u023c\1\u023b\3\u023c\6\u023b"+ -- "\1\u023c\3\u023b\1\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\24\147\1\u023e\5\147\1\0\3\147\6\0\1\147"+ -- "\4\0\3\147\1\0\3\147\1\u023f\13\0\2\147\1\u0240"+ -- "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\u0208\1\0\3\u0208\1\u0241\7\0\1\u0242\3\0\4\u0208"+ -- "\7\0\32\u0208\1\0\3\u0208\6\0\1\u0208\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\15\147\1\u0243\14\147"+ -- "\1\0\3\147\6\0\1\147\3\0\1\u0244\1\u0245\1\u0244"+ -- "\1\u0245\3\u0244\1\u0245\1\u020a\3\0\12\u0244\1\u020a\1\0"+ -- "\34\u0244\4\u0245\20\u0244\1\u0246\1\u0247\1\u0246\1\u0244\2\u0247"+ -- "\1\u0246\1\u020a\3\0\10\u0244\2\u0247\1\u020b\1\147\7\u0244"+ -- "\25\u0247\4\u0246\1\u0247\1\u0244\3\u0247\6\u0244\1\u0247\3\u0244"+ -- "\53\0\1\u0248\106\0\1\u0249\140\0\1\u024a\44\0\1\u024b"+ -- "\62\0\1\u024c\77\0\4\u0213\12\0\2\u0213\6\0\1\u024d"+ -- "\50\0\13\357\1\76\14\357\1\u01a3\1\u012d\1\u024e\1\u024f"+ -- "\53\357\11\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\1\u01a3"+ -- "\55\u016b\11\u01dd\2\u01a3\1\u01a4\13\u01dd\1\u01a3\1\u0217\62\u01dd"+ -- "\1\u0216\4\u01dd\2\u01a3\1\u01a4\13\u01dd\1\u01a3\1\u0217\1\u024e"+ -- "\1\u01a3\54\u01dd\11\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5"+ -- "\2\u016b\1\u01a3\53\u016b\3\u0218\1\u0250\1\u0251\1\u0218\1\u0252"+ -- "\1\u0253\1\u0218\2\u01a3\1\u01a4\13\u0218\1\u01a3\1\u021a\33\u0218"+ -- "\1\u0250\1\u0218\1\u0253\1\u0250\17\u0218\11\u016b\2\u01a3\1\u01a4"+ -- "\13\u016b\1\u01a3\1\u01a5\1\357\1\u016b\1\u01a3\53\u016b\30\76"+ -- "\1\u01a4\1\u012d\1\u0254\1\u0255\53\76\30\232\1\356\1\u01a4"+ -- "\55\232\11\u01e1\3\232\13\u01e1\1\232\1\u021e\62\u01e1\1\u021d"+ -- "\4\u01e1\3\232\13\u01e1\1\232\1\u021e\1\u0254\1\u01a4\54\u01e1"+ -- "\30\232\1\356\2\232\1\u01a4\53\232\3\u021f\1\u0256\1\u0257"+ -- "\1\u021f\1\u0258\1\u0259\1\u021f\3\232\13\u021f\1\232\1\u0221"+ -- "\33\u021f\1\u0256\1\u021f\1\u0259\1\u0256\17\u021f\30\232\1\356"+ -- "\1\76\1\232\1\u01a4\53\232\1\233\3\u025a\3\233\1\u025a"+ -- "\1\233\2\357\1\76\13\233\1\357\16\233\2\u025a\3\233"+ -- "\1\u025a\1\233\1\u025a\1\233\1\u025a\2\233\1\u025a\1\233"+ -- "\4\u025a\2\233\1\u025a\1\233\1\u025a\12\233\11\256\2\125"+ -- "\1\126\13\256\1\125\14\256\1\u025b\53\256\2\125\1\126"+ -- "\13\256\1\125\15\256\1\u025c\41\256\11\u0225\2\u025d\1\u025e"+ -- "\13\u0225\1\u025d\57\u0225\11\256\2\125\1\126\13\256\1\125"+ -- "\13\256\1\u025f\43\256\1\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\6\147\1\u0260\23\147\1\0\3\147\6\0"+ -- "\1\147\3\0\13\u0228\1\0\73\u0228\1\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\2\147\1\u0261\27\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\15\147\1\u0262\14\147\1\0\3\147\6\0"+ -- "\1\147\3\0\11\u022b\3\0\13\u022b\1\0\60\u022b\3\u022c"+ -- "\1\u022b\3\u022c\1\u0263\3\0\2\u01f4\6\u022b\3\u022c\1\u0264"+ -- "\7\u022b\32\u022c\1\u022b\3\u022c\6\u022b\1\u022c\4\u022b\3\u022d"+ -- "\1\u022b\3\u022d\1\u022b\3\0\10\u022b\3\u022d\1\147\7\u022b"+ -- "\32\u022d\1\u022b\3\u022d\6\u022b\1\u022d\3\u022b\10\0\1\u022e"+ -- "\5\0\1\u01f8\7\0\1\u022e\61\0\3\u022f\1\0\4\u022f"+ -- "\3\0\2\u022f\2\0\1\u022f\1\u0265\6\u022f\7\0\32\u022f"+ -- "\1\0\3\u022f\6\0\1\u022f\4\0\1\u01fa\1\u0266\1\u01fa"+ -- "\1\0\2\u0266\1\u01fa\1\u0230\3\0\2\u01fa\2\0\1\u01fa"+ -- "\1\u0230\2\u01fa\1\u0266\1\u01fa\1\u0230\1\u01fa\7\0\25\u0266"+ -- "\4\u01fa\1\u0266\1\0\3\u0266\6\0\1\u0266\5\0\1\u0267"+ -- "\2\0\2\u0267\1\0\1\u0231\13\0\1\u0267\1\0\1\u0231"+ -- "\10\0\25\u0267\4\0\1\u0267\1\0\3\u0267\6\0\1\u0267"+ -- "\4\0\1\147\1\u0267\1\147\1\0\2\u0267\1\147\1\u0231"+ -- "\13\0\1\u0267\1\147\1\u0232\1\147\7\0\25\u0267\4\147"+ -- "\1\u0267\1\0\3\u0267\6\0\1\u0267\4\0\3\147\1\0"+ -- "\3\147\1\u0268\13\0\2\147\1\u0269\1\147\6\0\1\151"+ -- "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\1\u026a\13\0\2\147\1\u026b\1\147\7\0\32\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\1\u026c\13\0\2\147\1\u026d\1\147\7\0\32\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\5\147\1\u026e\24\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\2\147\1\u026f\27\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0270"+ -- "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\4\147\1\u0271\25\147\1\0"+ -- "\3\147\6\0\1\147\3\0\11\u023b\3\0\13\u023b\1\0"+ -- "\60\u023b\3\u023c\1\u023b\3\u023c\1\u0272\3\0\1\u0204\7\u023b"+ -- "\3\u023c\1\u0273\7\u023b\32\u023c\1\u023b\3\u023c\6\u023b\1\u023c"+ -- "\4\u023b\3\u023d\1\u023b\3\u023d\1\u023b\3\0\10\u023b\3\u023d"+ -- "\1\147\7\u023b\32\u023d\1\u023b\3\u023d\6\u023b\1\u023d\3\u023b"+ -- "\2\0\1\u0274\2\0\2\u0274\1\0\1\u023f\7\0\1\u0275"+ -- "\3\0\1\u0274\1\0\1\u023f\10\0\25\u0274\4\0\1\u0274"+ -- "\1\0\3\u0274\6\0\1\u0274\4\0\1\147\1\u0276\1\147"+ -- "\1\0\2\u0276\1\147\1\u023f\7\0\1\u0275\3\0\1\u0276"+ -- "\1\147\1\u0240\1\147\7\0\25\u0276\4\147\1\u0276\1\0"+ -- "\3\u0276\6\0\1\u0276\13\0\1\u0241\7\0\1\u0242\5\0"+ -- "\1\u0241\61\0\3\u0277\1\0\4\u0277\3\0\2\u0277\2\0"+ -- "\10\u0277\7\0\32\u0277\1\0\3\u0277\6\0\1\u0277\3\0"+ -- "\11\u0244\3\0\13\u0244\1\0\60\u0244\1\u0245\1\u0244\1\u0245"+ -- "\3\u0244\1\u0245\1\u0278\3\0\12\u0244\1\u0278\1\0\34\u0244"+ -- "\4\u0245\20\u0244\1\u0246\1\u0247\1\u0246\1\u0244\2\u0247\1\u0246"+ -- "\1\u0278\3\0\10\u0244\2\u0247\1\u0279\1\147\7\u0244\25\u0247"+ -- "\4\u0246\1\u0247\1\u0244\3\u0247\6\u0244\1\u0247\4\u0244\3\u0247"+ -- "\1\u0244\3\u0247\1\u0244\3\0\10\u0244\3\u0247\1\147\7\u0244"+ -- "\32\u0247\1\u0244\3\u0247\6\u0244\1\u0247\3\u0244\54\0\1\u027a"+ -- "\106\0\1\u027b\51\0\1\u027c\151\0\1\u027d\22\0\1\u027e"+ -- "\1\0\4\u024e\1\u027f\4\u024e\2\357\1\76\13\u024e\1\357"+ -- "\1\u024e\1\u0280\1\u024e\1\u0281\1\u012e\1\u024e\1\u012e\50\u024e"+ -- "\4\u0282\1\u0283\4\u0282\2\357\1\76\13\u0282\1\357\1\u0282"+ -- "\1\u012d\1\u0284\1\u012f\1\u016d\1\u0282\1\u016d\50\u0282\3\u016b"+ -- "\1\u0218\3\u016b\1\u0218\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+ -- "\1\u01a5\2\u016b\1\u01a3\30\u016b\1\u0218\1\u016b\2\u0218\23\u016b"+ -- "\1\u0285\1\u016b\1\u0286\2\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+ -- "\1\u01a5\2\u016b\1\u01a3\54\u016b\3\u0287\3\u016b\1\u0287\1\u016b"+ -- "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\2\u016b\1\u01a3\12\u016b"+ -- "\2\u0287\3\u016b\1\u0287\1\u016b\1\u0287\1\u016b\1\u0287\2\u016b"+ -- "\1\u0287\1\u016b\4\u0287\2\u016b\1\u0287\1\u016b\1\u0287\15\u016b"+ -- "\1\u0250\3\u016b\1\u0250\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+ -- "\1\u01a5\2\u016b\1\u01a3\30\u016b\1\u0250\1\u016b\2\u0250\17\u016b"+ -- "\4\u0254\1\u0288\4\u0254\3\76\13\u0254\1\76\1\u0254\1\u0289"+ -- "\1\u0254\1\u028a\1\230\1\u0254\1\230\50\u0254\4\u028b\1\u028c"+ -- "\4\u028b\3\76\13\u028b\1\76\1\u028b\1\227\1\u028d\1\231"+ -- "\1\235\1\u028b\1\235\50\u028b\3\232\1\u021f\3\232\1\u021f"+ -- "\20\232\1\356\2\232\1\u01a4\30\232\1\u021f\1\232\2\u021f"+ -- "\23\232\1\u028e\1\232\1\u028f\21\232\1\356\2\232\1\u01a4"+ -- "\54\232\3\u0290\3\232\1\u0290\20\232\1\356\2\232\1\u01a4"+ -- "\12\232\2\u0290\3\232\1\u0290\1\232\1\u0290\1\232\1\u0290"+ -- "\2\232\1\u0290\1\232\4\u0290\2\232\1\u0290\1\232\1\u0290"+ -- "\15\232\1\u0256\3\232\1\u0256\20\232\1\356\2\232\1\u01a4"+ -- "\30\232\1\u0256\1\232\2\u0256\17\232\1\233\3\u016d\3\233"+ -- "\1\u016d\1\233\2\357\1\76\13\233\1\357\16\233\2\u016d"+ -- "\3\233\1\u016d\1\233\1\u016d\1\233\1\u016d\2\233\1\u016d"+ -- "\1\233\4\u016d\2\233\1\u016d\1\233\1\u016d\12\233\11\256"+ -- "\2\125\1\126\13\256\1\125\15\256\1\u0291\52\256\2\125"+ -- "\1\126\13\256\1\125\4\256\1\u0292\63\256\2\125\1\126"+ -- "\13\256\1\125\14\256\1\u0293\42\256\1\0\3\147\1\0"+ -- "\3\147\1\u0294\13\0\2\147\1\u0295\1\147\6\0\1\151"+ -- "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\15\147\1\u0296\14\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\7\147\1\u0243\22\147\1\0\3\147\6\0"+ -- "\1\147\3\0\10\u022b\1\u0263\3\0\2\u01f4\10\u022b\1\u0263"+ -- "\1\0\57\u022b\1\0\3\u0264\1\0\3\u0264\1\u0297\3\0"+ -- "\2\u0298\6\0\4\u0264\7\0\32\u0264\1\0\3\u0264\6\0"+ -- "\1\u0264\4\0\3\u022f\1\0\3\u022f\1\u0265\3\0\2\u022f"+ -- "\1\u01f8\1\0\1\u022f\1\u0265\4\u022f\1\u0265\1\u022f\7\0"+ -- "\32\u022f\1\0\3\u022f\6\0\1\u022f\4\0\3\u0266\1\0"+ -- "\3\u0266\1\u0299\3\0\1\u0230\1\u01fa\1\u01f8\1\0\1\u029a"+ -- "\1\u0230\2\u01fa\4\u0266\7\0\32\u0266\1\0\3\u0266\6\0"+ -- "\1\u0266\4\0\3\u0267\1\0\3\u0267\1\u029b\3\0\1\u0231"+ -- "\3\0\1\u029c\3\0\4\u0267\7\0\32\u0267\1\0\3\u0267"+ -- "\6\0\1\u0267\3\0\2\u029d\1\u029e\2\u029d\2\u029e\1\u029d"+ -- "\1\u0268\3\0\10\u029d\1\u029e\1\u029d\1\u0268\1\0\7\u029d"+ -- "\25\u029e\4\u029d\1\u029e\1\u029d\3\u029e\6\u029d\1\u029e\4\u029d"+ -- "\1\u029f\1\u029e\1\u029f\1\u029d\2\u029e\1\u029f\1\u0268\3\0"+ -- "\10\u029d\1\u029e\1\u029f\1\u0269\1\147\7\u029d\25\u029e\4\u029f"+ -- "\1\u029e\1\u029d\3\u029e\6\u029d\1\u029e\3\u029d\10\0\1\u026a"+ -- "\15\0\1\u026a\12\0\1\u02a0\5\0\1\u02a1\40\0\3\147"+ -- "\1\0\3\147\1\u026a\13\0\2\147\1\u026b\1\147\7\0"+ -- "\2\147\1\u02a2\5\147\1\u02a3\21\147\1\0\3\147\6\0"+ -- "\1\147\5\0\1\u02a4\2\0\2\u02a4\1\0\1\u026c\13\0"+ -- "\1\u02a4\1\0\1\u026c\10\0\25\u02a4\4\0\1\u02a4\1\0"+ -- "\3\u02a4\6\0\1\u02a4\4\0\1\147\1\u02a4\1\147\1\0"+ -- "\2\u02a4\1\147\1\u026c\13\0\1\u02a4\1\147\1\u026d\1\147"+ -- "\7\0\25\u02a4\4\147\1\u02a4\1\0\3\u02a4\6\0\1\u02a4"+ -- "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\6\147"+ -- "\1\u02a5\23\147\1\0\3\147\6\0\1\147\4\0\3\147"+ -- "\1\0\3\147\14\0\4\147\7\0\7\147\1\u02a6\22\147"+ -- "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ -- "\14\0\4\147\7\0\7\147\1\u02a7\22\147\1\0\3\147"+ -- "\6\0\1\147\4\0\3\147\1\0\3\147\1\u02a8\13\0"+ -- "\2\147\1\u02a9\1\147\7\0\32\147\1\0\3\147\6\0"+ -- "\1\147\3\0\10\u023b\1\u0272\3\0\1\u0204\11\u023b\1\u0272"+ -- "\1\0\57\u023b\1\0\3\u0273\1\0\3\u0273\1\u02aa\3\0"+ -- "\1\u02ab\7\0\4\u0273\7\0\32\u0273\1\0\3\u0273\6\0"+ -- "\1\u0273\4\0\3\u0274\1\0\3\u0274\1\u02ac\3\0\1\u02ad"+ -- "\1\0\1\u02ae\1\0\1\u02af\3\0\2\u0274\1\u02b0\1\u0274"+ -- "\7\0\32\u0274\1\0\3\u0274\6\0\1\u0274\4\0\3\u02b1"+ -- "\1\0\4\u02b1\3\0\2\u02b1\2\0\10\u02b1\7\0\32\u02b1"+ -- "\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0276\1\0\3\u0276"+ -- "\1\u02ac\3\0\1\u02ad\1\0\1\u02ae\1\0\1\u02af\3\0"+ -- "\2\u0276\1\u02b2\1\u0276\7\0\32\u0276\1\0\3\u0276\6\0"+ -- "\1\u0276\4\0\3\u0277\1\0\4\u0277\3\0\2\u0277\2\0"+ -- "\1\u0277\1\u02b3\6\u0277\7\0\32\u0277\1\0\3\u0277\6\0"+ -- "\1\u0277\3\0\10\u0244\1\u0278\3\0\12\u0244\1\u0278\1\0"+ -- "\60\u0244\3\u0247\1\u0244\3\u0247\1\u0278\3\0\10\u0244\2\u0247"+ -- "\1\u0279\1\147\7\u0244\32\u0247\1\u0244\3\u0247\6\u0244\1\u0247"+ -- "\3\u0244\46\0\1\u02b4\106\0\1\u02b5\77\0\1\u02b6\66\0"+ -- "\1\u02b7\67\0\11\u024e\2\357\1\76\13\u024e\1\357\1\u024e"+ -- "\1\u0280\1\u012e\1\u0281\1\u012e\1\u024e\1\u012e\54\u024e\1\u027f"+ -- "\4\u024e\2\357\1\76\13\u024e\1\357\1\u01dd\1\u012e\1\357"+ -- "\54\u024e\4\u0284\1\u02b8\4\u0284\2\357\1\76\13\u0284\1\357"+ -- "\2\u0284\1\u0282\1\u012e\53\u0284\13\357\1\76\15\357\1\u012d"+ -- "\1\u012e\1\u024f\1\233\1\357\1\233\50\357\3\u0282\1\u02b9"+ -- "\1\u02ba\1\u0282\1\u02bb\1\u02bc\1\u0282\2\357\1\76\13\u0282"+ -- "\1\357\1\u0282\1\u012d\1\u0284\1\u02bd\1\u016d\1\u0282\1\u016d"+ -- "\25\u0282\1\u02b9\1\u0282\1\u02bc\1\u02b9\17\u0282\4\u012e\1\u016c"+ -- "\4\u012e\2\357\1\76\13\u012e\1\357\2\u012e\1\357\1\u024e"+ -- "\53\u012e\4\u016b\1\u0285\1\u016b\1\u0286\2\u016b\2\u01a3\1\u01a4"+ -- "\13\u016b\1\u01a3\1\u01a5\57\u016b\3\u0287\3\u016b\1\u0287\1\u016b"+ -- "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b\2\u0287\3\u016b"+ -- "\1\u0287\1\u016b\1\u0287\1\u016b\1\u0287\2\u016b\1\u0287\1\u016b"+ -- "\4\u0287\2\u016b\1\u0287\1\u016b\1\u0287\13\u016b\3\u02be\3\u016b"+ -- "\1\u02be\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b"+ -- "\2\u02be\3\u016b\1\u02be\1\u016b\1\u02be\1\u016b\1\u02be\2\u016b"+ -- "\1\u02be\1\u016b\4\u02be\2\u016b\1\u02be\1\u016b\1\u02be\12\u016b"+ -- "\11\u0254\3\76\13\u0254\1\76\1\u0254\1\u0289\1\230\1\u028a"+ -- "\1\230\1\u0254\1\230\54\u0254\1\u0288\4\u0254\3\76\13\u0254"+ -- "\1\76\1\u01e1\1\u012e\1\76\54\u0254\4\u028d\1\u02bf\4\u028d"+ -- "\3\0\13\u028d\1\0\2\u028d\1\u028b\1\230\53\u028d\31\76"+ -- "\1\227\1\230\1\u0255\1\0\1\76\1\0\50\76\3\u028b"+ -- "\1\u02c0\1\u02c1\1\u028b\1\u02c2\1\u02c3\1\u028b\3\76\13\u028b"+ -- "\1\76\1\u028b\1\227\1\u028d\1\u02c4\1\235\1\u028b\1\235"+ -- "\25\u028b\1\u02c0\1\u028b\1\u02c3\1\u02c0\17\u028b\4\230\1\234"+ -- "\4\230\3\0\13\230\1\0\2\230\1\76\1\u0254\53\230"+ -- "\4\232\1\u028e\1\232\1\u028f\21\232\1\356\57\232\3\u0290"+ -- "\3\232\1\u0290\20\232\1\356\15\232\2\u0290\3\232\1\u0290"+ -- "\1\232\1\u0290\1\232\1\u0290\2\232\1\u0290\1\232\4\u0290"+ -- "\2\232\1\u0290\1\232\1\u0290\13\232\3\u02c5\3\232\1\u02c5"+ -- "\20\232\1\356\15\232\2\u02c5\3\232\1\u02c5\1\232\1\u02c5"+ -- "\1\232\1\u02c5\2\232\1\u02c5\1\232\4\u02c5\2\232\1\u02c5"+ -- "\1\232\1\u02c5\12\232\11\256\2\125\1\126\13\256\1\125"+ -- "\4\256\1\u02c6\52\256\11\u0292\2\u02c7\1\u02c8\13\u0292\1\u02c7"+ -- "\57\u0292\11\256\2\125\1\126\13\256\1\125\15\256\1\u02c9"+ -- "\41\256\2\u02ca\1\u02cb\2\u02ca\2\u02cb\1\u02ca\1\u0294\3\0"+ -- "\10\u02ca\1\u02cb\1\u02ca\1\u0294\1\0\7\u02ca\25\u02cb\4\u02ca"+ -- "\1\u02cb\1\u02ca\3\u02cb\6\u02ca\1\u02cb\4\u02ca\1\u02cc\1\u02cb"+ -- "\1\u02cc\1\u02ca\2\u02cb\1\u02cc\1\u0294\3\0\10\u02ca\1\u02cb"+ -- "\1\u02cc\1\u0295\1\147\7\u02ca\25\u02cb\4\u02cc\1\u02cb\1\u02ca"+ -- "\3\u02cb\6\u02ca\1\u02cb\3\u02ca\1\0\3\147\1\0\3\147"+ -- "\1\u02cd\13\0\2\147\1\u02cd\1\147\7\0\32\147\1\0"+ -- "\3\147\6\0\1\147\13\0\1\u0297\3\0\2\u0298\10\0"+ -- "\1\u0297\62\0\1\u0264\2\0\2\u0264\1\0\1\u0298\13\0"+ -- "\1\u0264\1\0\1\u0298\10\0\25\u0264\4\0\1\u0264\1\0"+ -- "\3\u0264\6\0\1\u0264\4\0\3\u01fa\1\0\3\u01fa\1\u0299"+ -- "\3\0\1\u0230\1\u01fa\1\u01f8\1\0\1\u029a\1\u0230\4\u01fa"+ -- "\1\u0299\1\u01fa\7\0\32\u01fa\1\0\3\u01fa\6\0\1\u01fa"+ -- "\4\0\3\u02ce\1\0\4\u02ce\3\0\2\u02ce\2\0\1\u02ce"+ -- "\1\u02cf\6\u02ce\7\0\32\u02ce\1\0\3\u02ce\6\0\1\u02ce"+ -- "\13\0\1\u029b\3\0\1\u0231\3\0\1\u029c\5\0\1\u029b"+ -- "\61\0\3\u02d0\1\0\4\u02d0\3\0\2\u02d0\2\0\10\u02d0"+ -- "\7\0\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\3\0\11\u029d"+ -- "\3\0\13\u029d\1\0\60\u029d\3\u029e\1\u029d\3\u029e\1\u02d1"+ -- "\3\0\2\u0268\6\u029d\3\u029e\1\u02d2\7\u029d\32\u029e\1\u029d"+ -- "\3\u029e\6\u029d\1\u029e\4\u029d\3\u029f\1\u029d\3\u029f\1\u029d"+ -- "\3\0\10\u029d\3\u029f\1\147\7\u029d\32\u029f\1\u029d\3\u029f"+ -- "\6\u029d\1\u029f\3\u029d\43\0\1\u02d3\116\0\1\u02d4\34\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u02d5"+ -- "\25\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ -- "\3\147\14\0\4\147\7\0\14\147\1\u02d6\15\147\1\0"+ -- "\3\147\6\0\1\147\4\0\3\u02a4\1\0\3\u02a4\1\u02d7"+ -- "\13\0\4\u02a4\7\0\32\u02a4\1\0\3\u02a4\6\0\1\u02a4"+ -- "\4\0\3\147\1\0\3\147\1\u02d8\13\0\2\147\1\u02d9"+ -- "\1\147\6\0\1\151\32\147\1\0\3\147\6\0\1\147"+ -- "\3\0\2\u02da\1\u02db\2\u02da\2\u02db\1\u02da\1\u02a8\3\0"+ -- "\10\u02da\1\u02db\1\u02da\1\u02a8\1\0\7\u02da\25\u02db\4\u02da"+ -- "\1\u02db\1\u02da\3\u02db\6\u02da\1\u02db\4\u02da\1\u02dc\1\u02db"+ -- "\1\u02dc\1\u02da\2\u02db\1\u02dc\1\u02a8\3\0\10\u02da\1\u02db"+ -- "\1\u02dc\1\u02a9\1\147\7\u02da\25\u02db\4\u02dc\1\u02db\1\u02da"+ -- "\3\u02db\6\u02da\1\u02db\3\u02da\10\0\1\u02aa\3\0\1\u02ab"+ -- "\11\0\1\u02aa\62\0\1\u0273\2\0\2\u0273\1\0\1\u02ab"+ -- "\13\0\1\u0273\1\0\1\u02ab\10\0\25\u0273\4\0\1\u0273"+ -- "\1\0\3\u0273\6\0\1\u0273\13\0\1\u02ac\3\0\1\u02ad"+ -- "\1\0\1\u02ae\1\0\1\u02af\5\0\1\u02ac\62\0\1\u0274"+ -- "\2\0\2\u0274\1\0\1\u02ad\13\0\1\u0274\1\0\1\u02ad"+ -- "\10\0\25\u0274\4\0\1\u0274\1\0\3\u0274\6\0\1\u0274"+ -- "\13\0\1\u02ae\6\0\1\u02dd\6\0\1\u02ae\61\0\3\u02de"+ -- "\1\0\4\u02de\3\0\2\u02de\2\0\10\u02de\7\0\32\u02de"+ -- "\1\0\3\u02de\6\0\1\u02de\4\0\3\u02b1\1\0\4\u02b1"+ -- "\3\0\2\u02b1\2\0\1\u02b1\1\u02df\6\u02b1\7\0\32\u02b1"+ -- "\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0277\1\0\3\u0277"+ -- "\1\u02b3\3\0\2\u0277\2\0\1\u0277\1\u02b3\4\u0277\1\u02b3"+ -- "\1\u0277\7\0\32\u0277\1\0\3\u0277\6\0\1\u0277\110\0"+ -- "\1\u02e0\106\0\1\u02e1\64\0\1\u02e2\23\0\3\u0284\1\u02e3"+ -- "\1\u02e4\1\u0284\1\u02e5\1\u02e6\1\u0284\2\357\1\76\13\u0284"+ -- "\1\357\34\u0284\1\u02e3\1\u0284\1\u02e6\1\u02e3\17\u0284\3\357"+ -- "\1\u0282\3\357\1\u0282\3\357\1\76\15\357\1\u012d\1\u012e"+ -- "\1\u024f\1\233\1\357\1\233\25\357\1\u0282\1\357\2\u0282"+ -- "\23\357\1\u02e7\1\357\1\u02e8\4\357\1\76\15\357\1\u012d"+ -- "\1\u012e\1\u024f\1\233\1\357\1\233\51\357\3\u02e9\3\357"+ -- "\1\u02e9\3\357\1\76\15\357\1\u012d\1\u012e\1\u024f\1\233"+ -- "\1\357\1\233\7\357\2\u02e9\3\357\1\u02e9\1\357\1\u02e9"+ -- "\1\357\1\u02e9\2\357\1\u02e9\1\357\4\u02e9\2\357\1\u02e9"+ -- "\1\357\1\u02e9\15\357\1\u02b9\3\357\1\u02b9\3\357\1\76"+ -- "\15\357\1\u012d\1\u012e\1\u024f\1\233\1\357\1\233\25\357"+ -- "\1\u02b9\1\357\2\u02b9\17\357\4\u016d\1\u016e\4\u016d\2\357"+ -- "\1\76\13\u016d\1\357\3\u016d\1\357\53\u016d\1\u016b\3\u02ea"+ -- "\3\u016b\1\u02ea\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5"+ -- "\15\u016b\2\u02ea\3\u016b\1\u02ea\1\u016b\1\u02ea\1\u016b\1\u02ea"+ -- "\2\u016b\1\u02ea\1\u016b\4\u02ea\2\u016b\1\u02ea\1\u016b\1\u02ea"+ -- "\12\u016b\3\u028d\1\u02eb\1\u02ec\1\u028d\1\u02ed\1\u02ee\1\u028d"+ -- "\3\0\13\u028d\1\0\34\u028d\1\u02eb\1\u028d\1\u02ee\1\u02eb"+ -- "\17\u028d\3\76\1\u028b\3\76\1\u028b\21\76\1\227\1\230"+ -- "\1\u0255\1\0\1\76\1\0\25\76\1\u028b\1\76\2\u028b"+ -- "\23\76\1\u02ef\1\76\1\u02f0\22\76\1\227\1\230\1\u0255"+ -- "\1\0\1\76\1\0\51\76\3\u02f1\3\76\1\u02f1\21\76"+ -- "\1\227\1\230\1\u0255\1\0\1\76\1\0\7\76\2\u02f1"+ -- "\3\76\1\u02f1\1\76\1\u02f1\1\76\1\u02f1\2\76\1\u02f1"+ -- "\1\76\4\u02f1\2\76\1\u02f1\1\76\1\u02f1\15\76\1\u02c0"+ -- "\3\76\1\u02c0\21\76\1\227\1\230\1\u0255\1\0\1\76"+ -- "\1\0\25\76\1\u02c0\1\76\2\u02c0\17\76\4\235\1\236"+ -- "\4\235\3\0\13\235\1\0\3\235\1\76\53\235\1\232"+ -- "\3\u02f2\3\232\1\u02f2\20\232\1\356\15\232\2\u02f2\3\232"+ -- "\1\u02f2\1\232\1\u02f2\1\232\1\u02f2\2\232\1\u02f2\1\232"+ -- "\4\u02f2\2\232\1\u02f2\1\232\1\u02f2\12\232\11\u02c6\2\u02f3"+ -- "\1\u02f4\13\u02c6\1\u02f3\57\u02c6\11\256\2\125\1\126\13\256"+ -- "\1\125\4\256\1\u02f5\52\256\11\u02ca\3\0\13\u02ca\1\0"+ -- "\60\u02ca\3\u02cb\1\u02ca\3\u02cb\1\u02f6\3\0\2\u0294\6\u02ca"+ -- "\3\u02cb\1\u02f7\7\u02ca\32\u02cb\1\u02ca\3\u02cb\6\u02ca\1\u02cb"+ -- "\4\u02ca\3\u02cc\1\u02ca\3\u02cc\1\u02ca\3\0\10\u02ca\3\u02cc"+ -- "\1\147\7\u02ca\32\u02cc\1\u02ca\3\u02cc\6\u02ca\1\u02cc\3\u02ca"+ -- "\13\u02cd\1\0\73\u02cd\1\0\3\u02ce\1\0\4\u02ce\3\0"+ -- "\2\u02ce\2\0\1\u02ce\1\u02f8\6\u02ce\7\0\32\u02ce\1\0"+ -- "\3\u02ce\6\0\1\u02ce\4\0\1\u02ce\1\u02f9\1\u02ce\1\0"+ -- "\2\u02f9\1\u02ce\1\u02cf\3\0\2\u02ce\2\0\1\u02ce\1\u02f8"+ -- "\2\u02ce\1\u02f9\1\u02ce\1\u02cf\1\u02ce\7\0\25\u02f9\4\u02ce"+ -- "\1\u02f9\1\0\3\u02f9\6\0\1\u02f9\4\0\3\u02d0\1\0"+ -- "\4\u02d0\3\0\2\u02d0\2\0\1\u02d0\1\u02fa\6\u02d0\7\0"+ -- "\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\3\0\10\u029d\1\u02d1"+ -- "\3\0\2\u0268\10\u029d\1\u02d1\1\0\57\u029d\1\0\3\u02d2"+ -- "\1\0\3\u02d2\1\u02fb\3\0\2\u02fc\6\0\4\u02d2\7\0"+ -- "\32\u02d2\1\0\3\u02d2\6\0\1\u02d2\11\0\1\u02fd\151\0"+ -- "\1\u02fe\36\0\3\147\1\0\1\147\1\u02ff\1\147\14\0"+ -- "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ -- "\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u0300"+ -- "\17\147\1\0\3\147\6\0\1\147\13\0\1\u02d7\15\0"+ -- "\1\u02d7\60\0\2\u0301\1\u0302\2\u0301\2\u0302\1\u0301\1\u02d8"+ -- "\3\0\10\u0301\1\u0302\1\u0301\1\u02d8\1\0\7\u0301\25\u0302"+ -- "\4\u0301\1\u0302\1\u0301\3\u0302\6\u0301\1\u0302\4\u0301\1\u0303"+ -- "\1\u0302\1\u0303\1\u0301\2\u0302\1\u0303\1\u02d8\3\0\10\u0301"+ -- "\1\u0302\1\u0303\1\u02d9\1\147\7\u0301\25\u0302\4\u0303\1\u0302"+ -- "\1\u0301\3\u0302\6\u0301\1\u0302\3\u0301\11\u02da\3\0\13\u02da"+ -- "\1\0\60\u02da\3\u02db\1\u02da\3\u02db\1\u0304\3\0\1\u02a8"+ -- "\7\u02da\3\u02db\1\u0305\7\u02da\32\u02db\1\u02da\3\u02db\6\u02da"+ -- "\1\u02db\4\u02da\3\u02dc\1\u02da\3\u02dc\1\u02da\3\0\10\u02da"+ -- "\3\u02dc\1\147\7\u02da\32\u02dc\1\u02da\3\u02dc\6\u02da\1\u02dc"+ -- "\3\u02da\10\0\1\u0306\5\0\1\u02ae\7\0\1\u0306\61\0"+ -- "\3\u02de\1\0\4\u02de\3\0\2\u02de\2\0\1\u02de\1\u0307"+ -- "\6\u02de\7\0\32\u02de\1\0\3\u02de\6\0\1\u02de\4\0"+ -- "\1\u02b1\1\u0308\1\u02b1\1\0\2\u0308\1\u02b1\1\u02df\3\0"+ -- "\2\u02b1\2\0\1\u02b1\1\u02df\2\u02b1\1\u0308\1\u02b1\1\u02df"+ -- "\1\u02b1\7\0\25\u0308\4\u02b1\1\u0308\1\0\3\u0308\6\0"+ -- "\1\u0308\22\0\1\u0309\106\0\1\u030a\126\0\1\u030b\47\0"+ -- "\3\u012e\1\u0284\1\u016c\2\u012e\1\u0284\1\u012e\2\357\1\76"+ -- "\13\u012e\1\357\2\u012e\1\357\1\u024e\30\u012e\1\u0284\1\u012e"+ -- "\2\u0284\23\u012e\1\u030c\1\u012e\1\u030d\2\u012e\2\357\1\76"+ -- "\13\u012e\1\357\2\u012e\1\357\1\u024e\54\u012e\3\u030e\1\u016c"+ -- "\2\u012e\1\u030e\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+ -- "\1\357\1\u024e\12\u012e\2\u030e\3\u012e\1\u030e\1\u012e\1\u030e"+ -- "\1\u012e\1\u030e\2\u012e\1\u030e\1\u012e\4\u030e\2\u012e\1\u030e"+ -- "\1\u012e\1\u030e\15\u012e\1\u02e3\1\u016c\2\u012e\1\u02e3\1\u012e"+ -- "\2\357\1\76\13\u012e\1\357\2\u012e\1\357\1\u024e\30\u012e"+ -- "\1\u02e3\1\u012e\2\u02e3\17\u012e\4\357\1\u02e7\1\357\1\u02e8"+ -- "\4\357\1\76\15\357\1\u012d\1\u012e\1\u012f\1\233\1\357"+ -- "\1\233\51\357\3\u02e9\3\357\1\u02e9\3\357\1\76\15\357"+ -- "\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\7\357\2\u02e9"+ -- "\3\357\1\u02e9\1\357\1\u02e9\1\357\1\u02e9\2\357\1\u02e9"+ -- "\1\357\4\u02e9\2\357\1\u02e9\1\357\1\u02e9\13\357\3\u030f"+ -- "\3\357\1\u030f\3\357\1\76\15\357\1\u012d\1\u012e\1\u012f"+ -- "\1\233\1\357\1\233\7\357\2\u030f\3\357\1\u030f\1\357"+ -- "\1\u030f\1\357\1\u030f\2\357\1\u030f\1\357\4\u030f\2\357"+ -- "\1\u030f\1\357\1\u030f\12\357\1\u016b\3\u0218\3\u016b\1\u0218"+ -- "\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b\2\u0218"+ -- "\3\u016b\1\u0218\1\u016b\1\u0218\1\u016b\1\u0218\2\u016b\1\u0218"+ -- "\1\u016b\4\u0218\2\u016b\1\u0218\1\u016b\1\u0218\12\u016b\3\230"+ -- "\1\u028d\1\234\2\230\1\u028d\1\230\3\0\13\230\1\0"+ -- "\2\230\1\76\1\u0254\30\230\1\u028d\1\230\2\u028d\23\230"+ -- "\1\u0310\1\230\1\u0311\2\230\3\0\13\230\1\0\2\230"+ -- "\1\76\1\u0254\54\230\3\u0312\1\234\2\230\1\u0312\1\230"+ -- "\3\0\13\230\1\0\2\230\1\76\1\u0254\12\230\2\u0312"+ -- "\3\230\1\u0312\1\230\1\u0312\1\230\1\u0312\2\230\1\u0312"+ -- "\1\230\4\u0312\2\230\1\u0312\1\230\1\u0312\15\230\1\u02eb"+ -- "\1\234\2\230\1\u02eb\1\230\3\0\13\230\1\0\2\230"+ -- "\1\76\1\u0254\30\230\1\u02eb\1\230\2\u02eb\17\230\4\76"+ -- "\1\u02ef\1\76\1\u02f0\22\76\1\227\1\230\1\231\1\0"+ -- "\1\76\1\0\51\76\3\u02f1\3\76\1\u02f1\21\76\1\227"+ -- "\1\230\1\231\1\0\1\76\1\0\7\76\2\u02f1\3\76"+ -- "\1\u02f1\1\76\1\u02f1\1\76\1\u02f1\2\76\1\u02f1\1\76"+ -- "\4\u02f1\2\76\1\u02f1\1\76\1\u02f1\13\76\3\u0313\3\76"+ -- "\1\u0313\21\76\1\227\1\230\1\231\1\0\1\76\1\0"+ -- "\7\76\2\u0313\3\76\1\u0313\1\76\1\u0313\1\76\1\u0313"+ -- "\2\76\1\u0313\1\76\4\u0313\2\76\1\u0313\1\76\1\u0313"+ -- "\12\76\1\232\3\u021f\3\232\1\u021f\20\232\1\356\15\232"+ -- "\2\u021f\3\232\1\u021f\1\232\1\u021f\1\232\1\u021f\2\232"+ -- "\1\u021f\1\232\4\u021f\2\232\1\u021f\1\232\1\u021f\12\232"+ -- "\11\u02f5\2\u0314\1\u0315\13\u02f5\1\u0314\57\u02f5\10\u02ca\1\u02f6"+ -- "\3\0\2\u0294\10\u02ca\1\u02f6\1\0\57\u02ca\1\0\3\u02f7"+ -- "\1\0\3\u02f7\1\u0316\3\0\2\u0317\6\0\4\u02f7\7\0"+ -- "\32\u02f7\1\0\3\u02f7\6\0\1\u02f7\4\0\1\u02ce\1\u02f9"+ -- "\1\u02ce\1\0\2\u02f9\1\u02ce\1\u02f8\3\0\2\u02ce\1\u01f8"+ -- "\1\0\1\u02ce\1\u02f8\2\u02ce\1\u02f9\1\u02ce\1\u02f8\1\u02ce"+ -- "\7\0\25\u02f9\4\u02ce\1\u02f9\1\0\3\u02f9\6\0\1\u02f9"+ -- "\4\0\3\u02f9\1\0\3\u02f9\1\u0318\3\0\1\u02cf\1\u02ce"+ -- "\1\u01f8\1\0\1\u02ce\1\u02f8\2\u02ce\4\u02f9\7\0\32\u02f9"+ -- "\1\0\3\u02f9\6\0\1\u02f9\4\0\3\u02d0\1\0\3\u02d0"+ -- "\1\u02fa\3\0\2\u02d0\2\0\1\u02d0\1\u02fa\4\u02d0\1\u02fa"+ -- "\1\u02d0\7\0\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\13\0"+ -- "\1\u02fb\3\0\2\u02fc\10\0\1\u02fb\62\0\1\u02d2\2\0"+ -- "\2\u02d2\1\0\1\u02fc\13\0\1\u02d2\1\0\1\u02fc\10\0"+ -- "\25\u02d2\4\0\1\u02d2\1\0\3\u02d2\6\0\1\u02d2\51\0"+ -- "\1\u0319\114\0\1\u031a\33\0\3\147\1\0\3\147\14\0"+ -- "\4\147\7\0\7\147\1\u031b\22\147\1\0\3\147\6\0"+ -- "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -- "\15\147\1\u031c\14\147\1\0\3\147\6\0\1\147\3\0"+ -- "\11\u0301\3\0\13\u0301\1\0\60\u0301\3\u0302\1\u0301\3\u0302"+ -- "\1\u031d\3\0\2\u02d8\6\u0301\3\u0302\1\u031e\7\u0301\32\u0302"+ -- "\1\u0301\3\u0302\6\u0301\1\u0302\4\u0301\3\u0303\1\u0301\3\u0303"+ -- "\1\u0301\3\0\10\u0301\3\u0303\1\147\7\u0301\32\u0303\1\u0301"+ -- "\3\u0303\6\u0301\1\u0303\3\u0301\10\u02da\1\u0304\3\0\1\u02a8"+ -- "\11\u02da\1\u0304\1\0\57\u02da\1\0\3\u0305\1\0\3\u0305"+ -- "\1\u031f\3\0\1\u0320\7\0\4\u0305\7\0\32\u0305\1\0"+ -- "\3\u0305\6\0\1\u0305\4\0\3\u02de\1\0\3\u02de\1\u0321"+ -- "\3\0\2\u02de\1\u02ae\1\0\1\u02de\1\u0307\4\u02de\1\u0321"+ -- "\1\u02de\7\0\32\u02de\1\0\3\u02de\6\0\1\u02de\4\0"+ -- "\3\u0308\1\0\3\u0308\1\u0322\3\0\1\u02df\1\u02b1\1\u02ae"+ -- "\1\0\1\u0323\1\u02df\2\u02b1\2\u0308\1\u0324\1\u0308\7\0"+ -- "\32\u0308\1\0\3\u0308\6\0\1\u0308\44\0\1\u0325\45\0"+ -- "\4\u012e\1\u0326\1\u012e\1\u030d\2\u012e\2\357\1\76\13\u012e"+ -- "\1\357\60\u012e\3\u030e\1\u016c\2\u012e\1\u030e\1\u012e\2\357"+ -- "\1\76\13\u012e\1\357\2\u012e\1\357\13\u012e\2\u030e\3\u012e"+ -- "\1\u030e\1\u012e\1\u030e\1\u012e\1\u030e\2\u012e\1\u030e\1\u012e"+ -- "\4\u030e\2\u012e\1\u030e\1\u012e\1\u030e\13\u012e\3\u0327\1\u016c"+ -- "\2\u012e\1\u0327\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+ -- "\1\357\13\u012e\2\u0327\3\u012e\1\u0327\1\u012e\1\u0327\1\u012e"+ -- "\1\u0327\2\u012e\1\u0327\1\u012e\4\u0327\2\u012e\1\u0327\1\u012e"+ -- "\1\u0327\12\u012e\1\357\3\u0328\3\357\1\u0328\3\357\1\76"+ -- "\15\357\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\7\357"+ -- "\2\u0328\3\357\1\u0328\1\357\1\u0328\1\357\1\u0328\2\357"+ -- "\1\u0328\1\357\4\u0328\2\357\1\u0328\1\357\1\u0328\12\357"+ -- "\4\230\1\u0329\1\230\1\u0311\2\230\3\0\13\230\1\0"+ -- "\60\230\3\u0312\1\234\2\230\1\u0312\1\230\3\0\13\230"+ -- "\1\0\2\230\1\76\13\230\2\u0312\3\230\1\u0312\1\230"+ -- "\1\u0312\1\230\1\u0312\2\230\1\u0312\1\230\4\u0312\2\230"+ -- "\1\u0312\1\230\1\u0312\13\230\3\u032a\1\234\2\230\1\u032a"+ -- "\1\230\3\0\13\230\1\0\2\230\1\76\13\230\2\u032a"+ -- "\3\230\1\u032a\1\230\1\u032a\1\230\1\u032a\2\230\1\u032a"+ -- "\1\230\4\u032a\2\230\1\u032a\1\230\1\u032a\12\230\1\76"+ -- "\3\u032b\3\76\1\u032b\21\76\1\227\1\230\1\231\1\0"+ -- "\1\76\1\0\7\76\2\u032b\3\76\1\u032b\1\76\1\u032b"+ -- "\1\76\1\u032b\2\76\1\u032b\1\76\4\u032b\2\76\1\u032b"+ -- "\1\76\1\u032b\12\76\10\0\1\u0316\3\0\2\u0317\10\0"+ -- "\1\u0316\62\0\1\u02f7\2\0\2\u02f7\1\0\1\u0317\13\0"+ -- "\1\u02f7\1\0\1\u0317\10\0\25\u02f7\4\0\1\u02f7\1\0"+ -- "\3\u02f7\6\0\1\u02f7\4\0\3\u02ce\1\0\3\u02ce\1\u0318"+ -- "\3\0\1\u02cf\1\u02ce\1\u01f8\1\0\1\u02ce\1\u02f8\4\u02ce"+ -- "\1\u0318\1\u02ce\7\0\32\u02ce\1\0\3\u02ce\6\0\1\u02ce"+ -- "\51\0\1\u032c\41\0\3\147\1\0\3\147\14\0\4\147"+ -- "\7\0\7\147\1\u032d\22\147\1\0\3\147\6\0\1\147"+ -- "\3\0\10\u0301\1\u031d\3\0\2\u02d8\10\u0301\1\u031d\1\0"+ -- "\57\u0301\1\0\3\u031e\1\0\3\u031e\1\u032e\3\0\2\u032f"+ -- "\6\0\4\u031e\7\0\32\u031e\1\0\3\u031e\6\0\1\u031e"+ -- "\13\0\1\u031f\3\0\1\u0320\11\0\1\u031f\62\0\1\u0305"+ -- "\2\0\2\u0305\1\0\1\u0320\13\0\1\u0305\1\0\1\u0320"+ -- "\10\0\25\u0305\4\0\1\u0305\1\0\3\u0305\6\0\1\u0305"+ -- "\4\0\3\u02b1\1\0\3\u02b1\1\u0322\3\0\1\u02df\1\u02b1"+ -- "\1\u02ae\1\0\1\u0323\1\u02df\4\u02b1\1\u0322\1\u02b1\7\0"+ -- "\32\u02b1\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0330\1\0"+ -- "\4\u0330\3\0\2\u0330\2\0\1\u0330\1\u0331\6\u0330\7\0"+ -- "\32\u0330\1\0\3\u0330\6\0\1\u0330\110\0\1\u0332\1\0"+ -- "\4\u012e\1\u030c\1\u012e\1\u030d\2\u012e\2\357\1\76\13\u012e"+ -- "\1\357\2\u012e\1\357\55\u012e\3\u0333\1\u016c\2\u012e\1\u0333"+ -- "\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e\1\357\13\u012e"+ -- "\2\u0333\3\u012e\1\u0333\1\u012e\1\u0333\1\u012e\1\u0333\2\u012e"+ -- "\1\u0333\1\u012e\4\u0333\2\u012e\1\u0333\1\u012e\1\u0333\12\u012e"+ -- "\1\357\3\u0282\3\357\1\u0282\3\357\1\76\15\357\1\u012d"+ -- "\1\u012e\1\u012f\1\233\1\357\1\233\7\357\2\u0282\3\357"+ -- "\1\u0282\1\357\1\u0282\1\357\1\u0282\2\357\1\u0282\1\357"+ -- "\4\u0282\2\357\1\u0282\1\357\1\u0282\12\357\4\230\1\u0310"+ -- "\1\230\1\u0311\2\230\3\0\13\230\1\0\2\230\1\76"+ -- "\55\230\3\u0334\1\234\2\230\1\u0334\1\230\3\0\13\230"+ -- "\1\0\2\230\1\76\13\230\2\u0334\3\230\1\u0334\1\230"+ -- "\1\u0334\1\230\1\u0334\2\230\1\u0334\1\230\4\u0334\2\230"+ -- "\1\u0334\1\230\1\u0334\12\230\1\76\3\u028b\3\76\1\u028b"+ -- "\21\76\1\227\1\230\1\231\1\0\1\76\1\0\7\76"+ -- "\2\u028b\3\76\1\u028b\1\76\1\u028b\1\76\1\u028b\2\76"+ -- "\1\u028b\1\76\4\u028b\2\76\1\u028b\1\76\1\u028b\12\76"+ -- "\10\0\1\u032e\3\0\2\u032f\10\0\1\u032e\62\0\1\u031e"+ -- "\2\0\2\u031e\1\0\1\u032f\13\0\1\u031e\1\0\1\u032f"+ -- "\10\0\25\u031e\4\0\1\u031e\1\0\3\u031e\6\0\1\u031e"+ -- "\4\0\3\u0330\1\0\4\u0330\3\0\2\u0330\2\0\1\u0330"+ -- "\1\u0335\6\u0330\7\0\32\u0330\1\0\3\u0330\6\0\1\u0330"+ -- "\4\0\1\u0330\1\u0336\1\u0330\1\0\2\u0336\1\u0330\1\u0331"+ -- "\3\0\2\u0330\2\0\1\u0330\1\u0335\2\u0330\1\u0336\1\u0330"+ -- "\1\u0331\1\u0330\7\0\25\u0336\4\u0330\1\u0336\1\0\3\u0336"+ -- "\6\0\1\u0336\22\0\1\u0337\67\0\1\u012e\3\u0284\1\u016c"+ -- "\2\u012e\1\u0284\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+ -- "\1\357\13\u012e\2\u0284\3\u012e\1\u0284\1\u012e\1\u0284\1\u012e"+ -- "\1\u0284\2\u012e\1\u0284\1\u012e\4\u0284\2\u012e\1\u0284\1\u012e"+ -- "\1\u0284\12\u012e\1\230\3\u028d\1\234\2\230\1\u028d\1\230"+ -- "\3\0\13\230\1\0\2\230\1\76\13\230\2\u028d\3\230"+ -- "\1\u028d\1\230\1\u028d\1\230\1\u028d\2\230\1\u028d\1\230"+ -- "\4\u028d\2\230\1\u028d\1\230\1\u028d\12\230\1\0\1\u0330"+ -- "\1\u0336\1\u0330\1\0\2\u0336\1\u0330\1\u0338\3\0\2\u0330"+ -- "\1\u02ae\1\0\1\u0330\1\u0335\2\u0330\1\u0336\1\u0330\1\u0338"+ -- "\1\u0330\7\0\25\u0336\4\u0330\1\u0336\1\0\3\u0336\6\0"+ -- "\1\u0336\4\0\3\u0336\1\0\3\u0336\1\u0339\3\0\1\u0331"+ -- "\1\u0330\1\u02ae\1\0\1\u0330\1\u0335\2\u0330\2\u0336\1\u033a"+ -- "\1\u0336\7\0\32\u0336\1\0\3\u0336\6\0\1\u0336\4\0"+ -- "\3\u0330\1\0\3\u0330\1\u0339\3\0\1\u0331\1\u0330\1\u02ae"+ -- "\1\0\1\u0330\1\u0335\4\u0330\1\u0339\1\u0330\7\0\32\u0330"+ -- "\1\0\3\u0330\6\0\1\u0330\3\0"; -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\17\147\1\u01cb\12\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\20\147\1\u01cc\11\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\4\147\1\u01cd\25\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\1\147\1\u01ce\30\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\1\u01cf\13\0"+ -+ "\2\147\1\u01d0\1\147\7\0\32\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\7\147\1\u01d1\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\4\147\1\u01d2\25\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\21\147\1\u01d3\10\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\16\147\1\u01d4\13\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\7\147\1\u01d5\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\1\337"+ -+ "\13\0\2\147\1\340\1\147\7\0\15\147\1\u01d6\14\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\22\0\1\u01d7"+ -+ "\133\0\1\u01d8\107\0\1\u01d9\110\0\1\u01da\113\0\1\u01db"+ -+ "\103\0\1\u01dc\110\0\1\u01dd\70\0\1\u01de\67\0\13\u01a6"+ -+ "\1\u01a7\14\u01a6\1\u01df\1\u01e0\1\u01e1\1\u01e2\1\u016d\1\u01a6"+ -+ "\1\u016d\52\u01a6\30\u01a7\1\u01e3\1\u01e4\1\u01e5\1\u01e6\1\232"+ -+ "\1\u01a7\1\232\52\u01a7\11\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6"+ -+ "\1\u01a8\1\357\57\u016d\3\233\1\u016f\3\233\1\u016f\1\233"+ -+ "\2\357\1\76\13\233\1\357\3\233\1\357\30\233\1\u016f"+ -+ "\1\233\2\u016f\25\233\1\u01e7\1\233\1\u01e8\2\233\2\357"+ -+ "\1\76\13\233\1\357\3\233\1\357\56\233\3\u01e9\3\233"+ -+ "\1\u01e9\1\233\2\357\1\76\13\233\1\357\3\233\1\357"+ -+ "\12\233\2\u01e9\3\233\1\u01e9\1\233\1\u01e9\1\233\1\u01e9"+ -+ "\2\233\1\u01e9\1\233\4\u01e9\2\233\1\u01e9\1\233\1\u01e9"+ -+ "\17\233\1\u01a9\3\233\1\u01a9\1\233\2\357\1\76\13\233"+ -+ "\1\357\3\233\1\357\30\233\1\u01a9\1\233\2\u01a9\21\233"+ -+ "\1\0\3\235\3\0\1\235\36\0\2\235\3\0\1\235"+ -+ "\1\0\1\235\1\0\1\235\2\0\1\235\1\0\4\235"+ -+ "\2\0\1\235\1\0\1\235\14\0\11\u01ae\2\u01ea\1\u01eb"+ -+ "\13\u01ae\1\u01ea\61\u01ae\11\256\2\125\1\126\13\256\1\125"+ -+ "\12\256\1\u01ec\57\256\2\125\1\126\13\256\1\125\13\256"+ -+ "\1\u01ed\56\256\2\125\1\126\13\256\1\125\21\256\1\u01ee"+ -+ "\50\256\2\125\1\126\13\256\1\125\11\256\1\u01ef\47\256"+ -+ "\1\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -+ "\1\u01f0\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ -+ "\1\u01f1\25\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\22\147"+ -+ "\1\u01f2\7\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ -+ "\1\u01f3\25\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -+ "\1\u01f4\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ -+ "\1\u01f5\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+ -+ "\1\u01f6\13\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\1\u01f7\2\147\14\0\4\147\7\0"+ -+ "\32\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\3\147\1\u01f8\13\0\2\147\1\u01f9\1\147"+ -+ "\7\0\32\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\u01be\1\0\3\u01be\1\u01fa\3\0\1\u01fb\1\0"+ -+ "\1\u01fc\1\0\1\u01fd\3\0\4\u01be\7\0\32\u01be\1\0"+ -+ "\3\u01be\6\0\1\u01be\2\0\2\u01be\2\0\3\u01fe\1\0"+ -+ "\4\u01fe\3\0\2\u01fe\2\0\10\u01fe\7\0\32\u01fe\1\0"+ -+ "\3\u01fe\6\0\1\u01fe\2\0\2\u01fe\2\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\7\0\15\147\1\u01ff\14\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\7\0\5\147\1\u0200\24\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\6\0\1\151\32\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\15\147\1\u0201\14\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\5\147\1\u0202\24\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\3\147\1\u0203\26\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\16\147\1\u0204\13\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\13\147\1\u0205\16\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\12\147\1\u0206\17\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\4\147\1\u0207\25\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\1\u0208\13\0\2\147\1\u0209\1\147\7\0\32\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ -+ "\1\147\1\u020a\1\147\14\0\4\147\7\0\32\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\7\0\24\147\1\u020b\5\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\3\0\1\u020c\2\0"+ -+ "\2\u020c\1\0\1\u01cf\13\0\1\u020c\1\0\1\u01cf\10\0"+ -+ "\25\u020c\4\0\1\u020c\1\0\3\u020c\6\0\1\u020c\2\0"+ -+ "\2\u020c\2\0\1\147\1\u020c\1\147\1\0\2\u020c\1\147"+ -+ "\1\u01cf\13\0\1\u020c\1\147\1\u01d0\1\147\7\0\25\u020c"+ -+ "\4\147\1\u020c\1\0\3\u020c\6\0\1\u020c\2\0\2\u020c"+ -+ "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ -+ "\1\u020d\14\147\1\0\3\147\6\0\1\147\2\0\2\147"+ -+ "\2\0\3\147\1\0\3\147\1\u020e\13\0\2\147\1\u020f"+ -+ "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\2\0\3\147\1\0\3\147\1\334\13\0\2\147"+ -+ "\1\335\1\147\7\0\15\147\1\u0210\14\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\11\0\4\u01d7\12\0\2\u01d7"+ -+ "\6\0\1\u0211\134\0\1\u0212\103\0\1\u0213\110\0\1\u0214"+ -+ "\76\0\1\u0215\113\0\1\u0216\147\0\1\u0217\13\0\4\u0218"+ -+ "\12\0\2\u0218\61\0\13\u01a6\1\u01a7\14\u01a6\1\u01df\1\u0219"+ -+ "\1\u01e1\1\u01e2\1\u016d\1\u01a6\1\u016d\65\u01a6\1\u01a7\14\u01a6"+ -+ "\1\u021a\1\u016d\57\u01a6\4\u01e1\1\u021b\4\u01e1\2\u01a6\1\u01a7"+ -+ "\13\u01e1\1\u01a6\1\u021c\1\u01e1\1\u01a6\56\u01e1\4\u021d\1\u021e"+ -+ "\4\u021d\2\u01a6\1\u01a7\13\u021d\1\u01a6\1\u021f\2\u021d\1\u016d"+ -+ "\55\u021d\30\u01a7\1\u01e3\1\u0220\1\u01e5\1\u01e6\1\232\1\u01a7"+ -+ "\1\232\102\u01a7\1\u0221\1\u016d\57\u01a7\4\u01e5\1\u0222\4\u01e5"+ -+ "\3\232\13\u01e5\1\232\1\u0223\1\u01e5\1\u01a7\56\u01e5\4\u0224"+ -+ "\1\u0225\4\u0224\3\232\13\u0224\1\232\1\u0226\2\u0224\1\232"+ -+ "\55\u0224\4\233\1\u01e7\1\233\1\u01e8\2\233\2\357\1\76"+ -+ "\13\233\1\357\62\233\3\u01e9\3\233\1\u01e9\1\233\2\357"+ -+ "\1\76\13\233\1\357\16\233\2\u01e9\3\233\1\u01e9\1\233"+ -+ "\1\u01e9\1\233\1\u01e9\2\233\1\u01e9\1\233\4\u01e9\2\233"+ -+ "\1\u01e9\1\233\1\u01e9\15\233\3\u0227\3\233\1\u0227\1\233"+ -+ "\2\357\1\76\13\233\1\357\16\233\2\u0227\3\233\1\u0227"+ -+ "\1\233\1\u0227\1\233\1\u0227\2\233\1\u0227\1\233\4\u0227"+ -+ "\2\233\1\u0227\1\233\1\u0227\14\233\11\256\2\125\1\126"+ -+ "\13\256\1\125\13\256\1\u0228\56\256\2\125\1\126\13\256"+ -+ "\1\125\14\256\1\u0229\55\256\2\125\1\126\13\256\1\125"+ -+ "\4\256\1\u022a\65\256\2\125\1\126\13\256\1\125\12\256"+ -+ "\1\u022b\46\256\1\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\5\147\1\u022c\24\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\1\u022d\13\0"+ -+ "\2\147\1\u022d\1\147\7\0\32\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\1\147\1\u022e\30\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\14\147\1\u022f\15\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\1\0\2\u0230\1\u0231\2\u0230\2\u0231"+ -+ "\1\u0230\1\u01f8\3\0\10\u0230\1\u0231\1\u0230\1\u01f8\1\0"+ -+ "\7\u0230\25\u0231\4\u0230\1\u0231\1\u0230\3\u0231\6\u0230\1\u0231"+ -+ "\2\u0230\2\u0231\2\u0230\1\u0232\1\u0231\1\u0232\1\u0230\2\u0231"+ -+ "\1\u0232\1\u01f8\3\0\10\u0230\1\u0231\1\u0232\1\u01f9\1\147"+ -+ "\7\u0230\25\u0231\4\u0232\1\u0231\1\u0230\3\u0231\6\u0230\1\u0231"+ -+ "\2\u0230\2\u0231\1\u0230\10\0\1\u01fa\3\0\1\u01fb\1\0"+ -+ "\1\u01fc\1\0\1\u01fd\5\0\1\u01fa\64\0\1\u01be\2\0"+ -+ "\2\u01be\1\0\1\u01fb\13\0\1\u01be\1\0\1\u01fb\10\0"+ -+ "\25\u01be\4\0\1\u01be\1\0\3\u01be\6\0\1\u01be\2\0"+ -+ "\2\u01be\11\0\1\u01fc\6\0\1\u0233\6\0\1\u01fc\63\0"+ -+ "\3\u0234\1\0\4\u0234\3\0\2\u0234\2\0\10\u0234\7\0"+ -+ "\32\u0234\1\0\3\u0234\6\0\1\u0234\2\0\2\u0234\2\0"+ -+ "\3\u01fe\1\0\4\u01fe\3\0\2\u01fe\2\0\1\u01fe\1\u0235"+ -+ "\6\u01fe\7\0\32\u01fe\1\0\3\u01fe\6\0\1\u01fe\2\0"+ -+ "\2\u01fe\2\0\3\147\1\0\3\147\1\u0236\13\0\2\147"+ -+ "\1\u0237\1\147\7\0\32\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\6\147\1\u0238\23\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\7\147\1\u0239\22\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\1\147\1\u023a\30\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\4\147\1\u023b\25\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\2\147\1\u023c\27\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\14\147\1\u023d\15\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\5\147\1\u023e\24\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\5\147\1\u023f\24\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\1\0\2\u0240\1\u0241\2\u0240\2\u0241\1\u0240"+ -+ "\1\u0208\3\0\10\u0240\1\u0241\1\u0240\1\u0208\1\0\7\u0240"+ -+ "\25\u0241\4\u0240\1\u0241\1\u0240\3\u0241\6\u0240\1\u0241\2\u0240"+ -+ "\2\u0241\2\u0240\1\u0242\1\u0241\1\u0242\1\u0240\2\u0241\1\u0242"+ -+ "\1\u0208\3\0\10\u0240\1\u0241\1\u0242\1\u0209\1\147\7\u0240"+ -+ "\25\u0241\4\u0242\1\u0241\1\u0240\3\u0241\6\u0240\1\u0241\2\u0240"+ -+ "\2\u0241\1\u0240\1\0\3\147\1\0\3\147\14\0\4\147"+ -+ "\7\0\24\147\1\u0243\5\147\1\0\3\147\6\0\1\147"+ -+ "\2\0\2\147\2\0\3\147\1\0\3\147\1\u0244\13\0"+ -+ "\2\147\1\u0245\1\147\7\0\32\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\u020c\1\0\3\u020c\1\u0246"+ -+ "\7\0\1\u0247\3\0\4\u020c\7\0\32\u020c\1\0\3\u020c"+ -+ "\6\0\1\u020c\2\0\2\u020c\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\15\147\1\u0248\14\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\1\0\1\u0249\1\u024a\1\u0249"+ -+ "\1\u024a\3\u0249\1\u024a\1\u020e\3\0\12\u0249\1\u020e\1\0"+ -+ "\34\u0249\4\u024a\22\u0249\1\u024b\1\u024c\1\u024b\1\u0249\2\u024c"+ -+ "\1\u024b\1\u020e\3\0\10\u0249\2\u024c\1\u020f\1\147\7\u0249"+ -+ "\25\u024c\4\u024b\1\u024c\1\u0249\3\u024c\6\u0249\1\u024c\2\u0249"+ -+ "\2\u024c\1\u0249\46\0\1\u024d\115\0\1\u024e\110\0\1\u024f"+ -+ "\142\0\1\u0250\46\0\1\u0251\64\0\1\u0252\101\0\4\u0218"+ -+ "\12\0\2\u0218\6\0\1\u0253\52\0\13\357\1\76\14\357"+ -+ "\1\u01a6\1\u012e\1\u0254\1\u0255\55\357\11\u016d\2\u01a6\1\u01a7"+ -+ "\13\u016d\1\u01a6\1\u01a8\1\u01a6\57\u016d\11\u01e1\2\u01a6\1\u01a7"+ -+ "\13\u01e1\1\u01a6\1\u021c\64\u01e1\1\u021b\4\u01e1\2\u01a6\1\u01a7"+ -+ "\13\u01e1\1\u01a6\1\u021c\1\u0254\1\u01a6\56\u01e1\11\u016d\2\u01a6"+ -+ "\1\u01a7\13\u016d\1\u01a6\1\u01a8\2\u016d\1\u01a6\55\u016d\3\u021d"+ -+ "\1\u0256\1\u0257\1\u021d\1\u0258\1\u0259\1\u021d\2\u01a6\1\u01a7"+ -+ "\13\u021d\1\u01a6\1\u021f\33\u021d\1\u0256\1\u021d\1\u0259\1\u0256"+ -+ "\21\u021d\11\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\1\357"+ -+ "\1\u016d\1\u01a6\55\u016d\30\76\1\u01a7\1\u012e\1\u025a\1\u025b"+ -+ "\55\76\30\232\1\356\1\u01a7\57\232\11\u01e5\3\232\13\u01e5"+ -+ "\1\232\1\u0223\64\u01e5\1\u0222\4\u01e5\3\232\13\u01e5\1\232"+ -+ "\1\u0223\1\u025a\1\u01a7\56\u01e5\30\232\1\356\2\232\1\u01a7"+ -+ "\55\232\3\u0224\1\u025c\1\u025d\1\u0224\1\u025e\1\u025f\1\u0224"+ -+ "\3\232\13\u0224\1\232\1\u0226\33\u0224\1\u025c\1\u0224\1\u025f"+ -+ "\1\u025c\21\u0224\30\232\1\356\1\76\1\232\1\u01a7\55\232"+ -+ "\1\233\3\u0260\3\233\1\u0260\1\233\2\357\1\76\13\233"+ -+ "\1\357\16\233\2\u0260\3\233\1\u0260\1\233\1\u0260\1\233"+ -+ "\1\u0260\2\233\1\u0260\1\233\4\u0260\2\233\1\u0260\1\233"+ -+ "\1\u0260\14\233\11\256\2\125\1\126\13\256\1\125\14\256"+ -+ "\1\u0261\55\256\2\125\1\126\13\256\1\125\15\256\1\u0262"+ -+ "\43\256\11\u022a\2\u0263\1\u0264\13\u022a\1\u0263\61\u022a\11\256"+ -+ "\2\125\1\126\13\256\1\125\13\256\1\u0265\45\256\1\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\6\147\1\u0266"+ -+ "\23\147\1\0\3\147\6\0\1\147\2\0\2\147\1\0"+ -+ "\13\u022d\1\0\75\u022d\1\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\2\147\1\u0267\27\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\15\147\1\u0268\14\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\1\0\11\u0230\3\0\13\u0230\1\0"+ -+ "\62\u0230\3\u0231\1\u0230\3\u0231\1\u0269\3\0\2\u01f8\6\u0230"+ -+ "\3\u0231\1\u026a\7\u0230\32\u0231\1\u0230\3\u0231\6\u0230\1\u0231"+ -+ "\2\u0230\2\u0231\2\u0230\3\u0232\1\u0230\3\u0232\1\u0230\3\0"+ -+ "\10\u0230\3\u0232\1\147\7\u0230\32\u0232\1\u0230\3\u0232\6\u0230"+ -+ "\1\u0232\2\u0230\2\u0232\1\u0230\10\0\1\u0233\5\0\1\u01fc"+ -+ "\7\0\1\u0233\63\0\3\u0234\1\0\4\u0234\3\0\2\u0234"+ -+ "\2\0\1\u0234\1\u026b\6\u0234\7\0\32\u0234\1\0\3\u0234"+ -+ "\6\0\1\u0234\2\0\2\u0234\2\0\1\u01fe\1\u026c\1\u01fe"+ -+ "\1\0\2\u026c\1\u01fe\1\u0235\3\0\2\u01fe\2\0\1\u01fe"+ -+ "\1\u0235\2\u01fe\1\u026c\1\u01fe\1\u0235\1\u01fe\7\0\25\u026c"+ -+ "\4\u01fe\1\u026c\1\0\3\u026c\6\0\1\u026c\2\0\2\u026c"+ -+ "\3\0\1\u026d\2\0\2\u026d\1\0\1\u0236\13\0\1\u026d"+ -+ "\1\0\1\u0236\10\0\25\u026d\4\0\1\u026d\1\0\3\u026d"+ -+ "\6\0\1\u026d\2\0\2\u026d\2\0\1\147\1\u026d\1\147"+ -+ "\1\0\2\u026d\1\147\1\u0236\13\0\1\u026d\1\147\1\u0237"+ -+ "\1\147\7\0\25\u026d\4\147\1\u026d\1\0\3\u026d\6\0"+ -+ "\1\u026d\2\0\2\u026d\2\0\3\147\1\0\3\147\1\u026e"+ -+ "\13\0\2\147\1\u026f\1\147\6\0\1\151\32\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ -+ "\3\147\1\u0270\13\0\2\147\1\u0271\1\147\7\0\32\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ -+ "\1\0\3\147\1\u0272\13\0\2\147\1\u0273\1\147\7\0"+ -+ "\32\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\5\147\1\u0274"+ -+ "\24\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\2\147\1\u0275"+ -+ "\27\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0276"+ -+ "\30\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u0277"+ -+ "\25\147\1\0\3\147\6\0\1\147\2\0\2\147\1\0"+ -+ "\11\u0240\3\0\13\u0240\1\0\62\u0240\3\u0241\1\u0240\3\u0241"+ -+ "\1\u0278\3\0\1\u0208\7\u0240\3\u0241\1\u0279\7\u0240\32\u0241"+ -+ "\1\u0240\3\u0241\6\u0240\1\u0241\2\u0240\2\u0241\2\u0240\3\u0242"+ -+ "\1\u0240\3\u0242\1\u0240\3\0\10\u0240\3\u0242\1\147\7\u0240"+ -+ "\32\u0242\1\u0240\3\u0242\6\u0240\1\u0242\2\u0240\2\u0242\1\u0240"+ -+ "\2\0\1\u027a\2\0\2\u027a\1\0\1\u0244\7\0\1\u027b"+ -+ "\3\0\1\u027a\1\0\1\u0244\10\0\25\u027a\4\0\1\u027a"+ -+ "\1\0\3\u027a\6\0\1\u027a\2\0\2\u027a\2\0\1\147"+ -+ "\1\u027c\1\147\1\0\2\u027c\1\147\1\u0244\7\0\1\u027b"+ -+ "\3\0\1\u027c\1\147\1\u0245\1\147\7\0\25\u027c\4\147"+ -+ "\1\u027c\1\0\3\u027c\6\0\1\u027c\2\0\2\u027c\11\0"+ -+ "\1\u0246\7\0\1\u0247\5\0\1\u0246\63\0\3\u027d\1\0"+ -+ "\4\u027d\3\0\2\u027d\2\0\10\u027d\7\0\32\u027d\1\0"+ -+ "\3\u027d\6\0\1\u027d\2\0\2\u027d\1\0\11\u0249\3\0"+ -+ "\13\u0249\1\0\62\u0249\1\u024a\1\u0249\1\u024a\3\u0249\1\u024a"+ -+ "\1\u027e\3\0\12\u0249\1\u027e\1\0\34\u0249\4\u024a\22\u0249"+ -+ "\1\u024b\1\u024c\1\u024b\1\u0249\2\u024c\1\u024b\1\u027e\3\0"+ -+ "\10\u0249\2\u024c\1\u027f\1\147\7\u0249\25\u024c\4\u024b\1\u024c"+ -+ "\1\u0249\3\u024c\6\u0249\1\u024c\2\u0249\2\u024c\2\u0249\3\u024c"+ -+ "\1\u0249\3\u024c\1\u0249\3\0\10\u0249\3\u024c\1\147\7\u0249"+ -+ "\32\u024c\1\u0249\3\u024c\6\u0249\1\u024c\2\u0249\2\u024c\1\u0249"+ -+ "\106\0\1\u0280\56\0\1\u0281\110\0\1\u0282\53\0\1\u0283"+ -+ "\153\0\1\u0284\22\0\1\u0285\3\0\4\u0254\1\u0286\4\u0254"+ -+ "\2\357\1\76\13\u0254\1\357\1\u0254\1\u0287\1\u0254\1\u0288"+ -+ "\1\u012f\1\u0254\1\u012f\52\u0254\4\u0289\1\u028a\4\u0289\2\357"+ -+ "\1\76\13\u0289\1\357\1\u0289\1\u012e\1\u028b\1\u0130\1\u016f"+ -+ "\1\u0289\1\u016f\52\u0289\3\u016d\1\u021d\3\u016d\1\u021d\1\u016d"+ -+ "\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\2\u016d\1\u01a6\30\u016d"+ -+ "\1\u021d\1\u016d\2\u021d\25\u016d\1\u028c\1\u016d\1\u028d\2\u016d"+ -+ "\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\2\u016d\1\u01a6\56\u016d"+ -+ "\3\u028e\3\u016d\1\u028e\1\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6"+ -+ "\1\u01a8\2\u016d\1\u01a6\12\u016d\2\u028e\3\u016d\1\u028e\1\u016d"+ -+ "\1\u028e\1\u016d\1\u028e\2\u016d\1\u028e\1\u016d\4\u028e\2\u016d"+ -+ "\1\u028e\1\u016d\1\u028e\17\u016d\1\u0256\3\u016d\1\u0256\1\u016d"+ -+ "\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\2\u016d\1\u01a6\30\u016d"+ -+ "\1\u0256\1\u016d\2\u0256\21\u016d\4\u025a\1\u028f\4\u025a\3\76"+ -+ "\13\u025a\1\76\1\u025a\1\u0290\1\u025a\1\u0291\1\230\1\u025a"+ -+ "\1\230\52\u025a\4\u0292\1\u0293\4\u0292\3\76\13\u0292\1\76"+ -+ "\1\u0292\1\227\1\u0294\1\231\1\235\1\u0292\1\235\52\u0292"+ -+ "\3\232\1\u0224\3\232\1\u0224\20\232\1\356\2\232\1\u01a7"+ -+ "\30\232\1\u0224\1\232\2\u0224\25\232\1\u0295\1\232\1\u0296"+ -+ "\21\232\1\356\2\232\1\u01a7\56\232\3\u0297\3\232\1\u0297"+ -+ "\20\232\1\356\2\232\1\u01a7\12\232\2\u0297\3\232\1\u0297"+ -+ "\1\232\1\u0297\1\232\1\u0297\2\232\1\u0297\1\232\4\u0297"+ -+ "\2\232\1\u0297\1\232\1\u0297\17\232\1\u025c\3\232\1\u025c"+ -+ "\20\232\1\356\2\232\1\u01a7\30\232\1\u025c\1\232\2\u025c"+ -+ "\21\232\1\233\3\u016f\3\233\1\u016f\1\233\2\357\1\76"+ -+ "\13\233\1\357\16\233\2\u016f\3\233\1\u016f\1\233\1\u016f"+ -+ "\1\233\1\u016f\2\233\1\u016f\1\233\4\u016f\2\233\1\u016f"+ -+ "\1\233\1\u016f\14\233\11\256\2\125\1\126\13\256\1\125"+ -+ "\15\256\1\u0298\54\256\2\125\1\126\13\256\1\125\4\256"+ -+ "\1\u0299\65\256\2\125\1\126\13\256\1\125\14\256\1\u029a"+ -+ "\44\256\1\0\3\147\1\0\3\147\1\u029b\13\0\2\147"+ -+ "\1\u029c\1\147\6\0\1\151\32\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\15\147\1\u029d\14\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ -+ "\4\147\7\0\7\147\1\u0248\22\147\1\0\3\147\6\0"+ -+ "\1\147\2\0\2\147\1\0\10\u0230\1\u0269\3\0\2\u01f8"+ -+ "\10\u0230\1\u0269\1\0\61\u0230\1\0\3\u026a\1\0\3\u026a"+ -+ "\1\u029e\3\0\2\u029f\6\0\4\u026a\7\0\32\u026a\1\0"+ -+ "\3\u026a\6\0\1\u026a\2\0\2\u026a\2\0\3\u0234\1\0"+ -+ "\3\u0234\1\u026b\3\0\2\u0234\1\u01fc\1\0\1\u0234\1\u026b"+ -+ "\4\u0234\1\u026b\1\u0234\7\0\32\u0234\1\0\3\u0234\6\0"+ -+ "\1\u0234\2\0\2\u0234\2\0\3\u026c\1\0\3\u026c\1\u02a0"+ -+ "\3\0\1\u0235\1\u01fe\1\u01fc\1\0\1\u02a1\1\u0235\2\u01fe"+ -+ "\4\u026c\7\0\32\u026c\1\0\3\u026c\6\0\1\u026c\2\0"+ -+ "\2\u026c\2\0\3\u026d\1\0\3\u026d\1\u02a2\3\0\1\u0236"+ -+ "\3\0\1\u02a3\3\0\4\u026d\7\0\32\u026d\1\0\3\u026d"+ -+ "\6\0\1\u026d\2\0\2\u026d\1\0\2\u02a4\1\u02a5\2\u02a4"+ -+ "\2\u02a5\1\u02a4\1\u026e\3\0\10\u02a4\1\u02a5\1\u02a4\1\u026e"+ -+ "\1\0\7\u02a4\25\u02a5\4\u02a4\1\u02a5\1\u02a4\3\u02a5\6\u02a4"+ -+ "\1\u02a5\2\u02a4\2\u02a5\2\u02a4\1\u02a6\1\u02a5\1\u02a6\1\u02a4"+ -+ "\2\u02a5\1\u02a6\1\u026e\3\0\10\u02a4\1\u02a5\1\u02a6\1\u026f"+ -+ "\1\147\7\u02a4\25\u02a5\4\u02a6\1\u02a5\1\u02a4\3\u02a5\6\u02a4"+ -+ "\1\u02a5\2\u02a4\2\u02a5\1\u02a4\10\0\1\u0270\15\0\1\u0270"+ -+ "\12\0\1\u02a7\5\0\1\u02a8\42\0\3\147\1\0\3\147"+ -+ "\1\u0270\13\0\2\147\1\u0271\1\147\7\0\2\147\1\u02a9"+ -+ "\5\147\1\u02aa\21\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\3\0\1\u02ab\2\0\2\u02ab\1\0\1\u0272\13\0"+ -+ "\1\u02ab\1\0\1\u0272\10\0\25\u02ab\4\0\1\u02ab\1\0"+ -+ "\3\u02ab\6\0\1\u02ab\2\0\2\u02ab\2\0\1\147\1\u02ab"+ -+ "\1\147\1\0\2\u02ab\1\147\1\u0272\13\0\1\u02ab\1\147"+ -+ "\1\u0273\1\147\7\0\25\u02ab\4\147\1\u02ab\1\0\3\u02ab"+ -+ "\6\0\1\u02ab\2\0\2\u02ab\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\6\147\1\u02ac\23\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\7\147\1\u02ad\22\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\14\0\4\147\7\0\7\147\1\u02ae\22\147\1\0\3\147"+ -+ "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ -+ "\1\u02af\13\0\2\147\1\u02b0\1\147\7\0\32\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\1\0\10\u0240\1\u0278"+ -+ "\3\0\1\u0208\11\u0240\1\u0278\1\0\61\u0240\1\0\3\u0279"+ -+ "\1\0\3\u0279\1\u02b1\3\0\1\u02b2\7\0\4\u0279\7\0"+ -+ "\32\u0279\1\0\3\u0279\6\0\1\u0279\2\0\2\u0279\2\0"+ -+ "\3\u027a\1\0\3\u027a\1\u02b3\3\0\1\u02b4\1\0\1\u02b5"+ -+ "\1\0\1\u02b6\3\0\2\u027a\1\u02b7\1\u027a\7\0\32\u027a"+ -+ "\1\0\3\u027a\6\0\1\u027a\2\0\2\u027a\2\0\3\u02b8"+ -+ "\1\0\4\u02b8\3\0\2\u02b8\2\0\10\u02b8\7\0\32\u02b8"+ -+ "\1\0\3\u02b8\6\0\1\u02b8\2\0\2\u02b8\2\0\3\u027c"+ -+ "\1\0\3\u027c\1\u02b3\3\0\1\u02b4\1\0\1\u02b5\1\0"+ -+ "\1\u02b6\3\0\2\u027c\1\u02b9\1\u027c\7\0\32\u027c\1\0"+ -+ "\3\u027c\6\0\1\u027c\2\0\2\u027c\2\0\3\u027d\1\0"+ -+ "\4\u027d\3\0\2\u027d\2\0\1\u027d\1\u02ba\6\u027d\7\0"+ -+ "\32\u027d\1\0\3\u027d\6\0\1\u027d\2\0\2\u027d\1\0"+ -+ "\10\u0249\1\u027e\3\0\12\u0249\1\u027e\1\0\62\u0249\3\u024c"+ -+ "\1\u0249\3\u024c\1\u027e\3\0\10\u0249\2\u024c\1\u027f\1\147"+ -+ "\7\u0249\32\u024c\1\u0249\3\u024c\6\u0249\1\u024c\2\u0249\2\u024c"+ -+ "\1\u0249\6\0\1\u02bb\30\0\1\u02bc\1\u02bd\1\u02be\2\0"+ -+ "\1\u02bf\1\0\1\u02c0\1\u02c1\1\0\1\u02c2\2\0\1\u02c3"+ -+ "\1\u02c4\1\u02c5\2\0\1\u02c6\1\u02c7\74\0\1\u02c8\110\0"+ -+ "\1\u02c9\101\0\1\u02ca\70\0\1\u02cb\71\0\11\u0254\2\357"+ -+ "\1\76\13\u0254\1\357\1\u0254\1\u0287\1\u012f\1\u0288\1\u012f"+ -+ "\1\u0254\1\u012f\56\u0254\1\u0286\4\u0254\2\357\1\76\13\u0254"+ -+ "\1\357\1\u01e1\1\u012f\1\357\56\u0254\4\u028b\1\u02cc\4\u028b"+ -+ "\2\357\1\76\13\u028b\1\357\2\u028b\1\u0289\1\u012f\55\u028b"+ -+ "\13\357\1\76\15\357\1\u012e\1\u012f\1\u0255\1\233\1\357"+ -+ "\1\233\52\357\3\u0289\1\u02cd\1\u02ce\1\u0289\1\u02cf\1\u02d0"+ -+ "\1\u0289\2\357\1\76\13\u0289\1\357\1\u0289\1\u012e\1\u028b"+ -+ "\1\u02d1\1\u016f\1\u0289\1\u016f\25\u0289\1\u02cd\1\u0289\1\u02d0"+ -+ "\1\u02cd\21\u0289\4\u012f\1\u016e\4\u012f\2\357\1\76\13\u012f"+ -+ "\1\357\2\u012f\1\357\1\u0254\55\u012f\4\u016d\1\u028c\1\u016d"+ -+ "\1\u028d\2\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\61\u016d"+ -+ "\3\u028e\3\u016d\1\u028e\1\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6"+ -+ "\1\u01a8\15\u016d\2\u028e\3\u016d\1\u028e\1\u016d\1\u028e\1\u016d"+ -+ "\1\u028e\2\u016d\1\u028e\1\u016d\4\u028e\2\u016d\1\u028e\1\u016d"+ -+ "\1\u028e\15\u016d\3\u02d2\3\u016d\1\u02d2\1\u016d\2\u01a6\1\u01a7"+ -+ "\13\u016d\1\u01a6\1\u01a8\15\u016d\2\u02d2\3\u016d\1\u02d2\1\u016d"+ -+ "\1\u02d2\1\u016d\1\u02d2\2\u016d\1\u02d2\1\u016d\4\u02d2\2\u016d"+ -+ "\1\u02d2\1\u016d\1\u02d2\14\u016d\11\u025a\3\76\13\u025a\1\76"+ -+ "\1\u025a\1\u0290\1\230\1\u0291\1\230\1\u025a\1\230\56\u025a"+ -+ "\1\u028f\4\u025a\3\76\13\u025a\1\76\1\u01e5\1\u012f\1\76"+ -+ "\56\u025a\4\u0294\1\u02d3\4\u0294\3\0\13\u0294\1\0\2\u0294"+ -+ "\1\u0292\1\230\55\u0294\31\76\1\227\1\230\1\u025b\1\0"+ -+ "\1\76\1\0\52\76\3\u0292\1\u02d4\1\u02d5\1\u0292\1\u02d6"+ -+ "\1\u02d7\1\u0292\3\76\13\u0292\1\76\1\u0292\1\227\1\u0294"+ -+ "\1\u02d8\1\235\1\u0292\1\235\25\u0292\1\u02d4\1\u0292\1\u02d7"+ -+ "\1\u02d4\21\u0292\4\230\1\234\4\230\3\0\13\230\1\0"+ -+ "\2\230\1\76\1\u025a\55\230\4\232\1\u0295\1\232\1\u0296"+ -+ "\21\232\1\356\61\232\3\u0297\3\232\1\u0297\20\232\1\356"+ -+ "\15\232\2\u0297\3\232\1\u0297\1\232\1\u0297\1\232\1\u0297"+ -+ "\2\232\1\u0297\1\232\4\u0297\2\232\1\u0297\1\232\1\u0297"+ -+ "\15\232\3\u02d9\3\232\1\u02d9\20\232\1\356\15\232\2\u02d9"+ -+ "\3\232\1\u02d9\1\232\1\u02d9\1\232\1\u02d9\2\232\1\u02d9"+ -+ "\1\232\4\u02d9\2\232\1\u02d9\1\232\1\u02d9\14\232\11\256"+ -+ "\2\125\1\126\13\256\1\125\4\256\1\u02da\54\256\11\u0299"+ -+ "\2\u02db\1\u02dc\13\u0299\1\u02db\61\u0299\11\256\2\125\1\126"+ -+ "\13\256\1\125\15\256\1\u02dd\43\256\2\u02de\1\u02df\2\u02de"+ -+ "\2\u02df\1\u02de\1\u029b\3\0\10\u02de\1\u02df\1\u02de\1\u029b"+ -+ "\1\0\7\u02de\25\u02df\4\u02de\1\u02df\1\u02de\3\u02df\6\u02de"+ -+ "\1\u02df\2\u02de\2\u02df\2\u02de\1\u02e0\1\u02df\1\u02e0\1\u02de"+ -+ "\2\u02df\1\u02e0\1\u029b\3\0\10\u02de\1\u02df\1\u02e0\1\u029c"+ -+ "\1\147\7\u02de\25\u02df\4\u02e0\1\u02df\1\u02de\3\u02df\6\u02de"+ -+ "\1\u02df\2\u02de\2\u02df\1\u02de\1\0\3\147\1\0\3\147"+ -+ "\1\u02e1\13\0\2\147\1\u02e1\1\147\7\0\32\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\11\0\1\u029e\3\0"+ -+ "\2\u029f\10\0\1\u029e\64\0\1\u026a\2\0\2\u026a\1\0"+ -+ "\1\u029f\13\0\1\u026a\1\0\1\u029f\10\0\25\u026a\4\0"+ -+ "\1\u026a\1\0\3\u026a\6\0\1\u026a\2\0\2\u026a\2\0"+ -+ "\3\u01fe\1\0\3\u01fe\1\u02a0\3\0\1\u0235\1\u01fe\1\u01fc"+ -+ "\1\0\1\u02a1\1\u0235\4\u01fe\1\u02a0\1\u01fe\7\0\32\u01fe"+ -+ "\1\0\3\u01fe\6\0\1\u01fe\2\0\2\u01fe\2\0\3\u02e2"+ -+ "\1\0\4\u02e2\3\0\2\u02e2\2\0\1\u02e2\1\u02e3\6\u02e2"+ -+ "\7\0\32\u02e2\1\0\3\u02e2\6\0\1\u02e2\2\0\2\u02e2"+ -+ "\11\0\1\u02a2\3\0\1\u0236\3\0\1\u02a3\5\0\1\u02a2"+ -+ "\63\0\3\u02e4\1\0\4\u02e4\3\0\2\u02e4\2\0\10\u02e4"+ -+ "\7\0\32\u02e4\1\0\3\u02e4\6\0\1\u02e4\2\0\2\u02e4"+ -+ "\1\0\11\u02a4\3\0\13\u02a4\1\0\62\u02a4\3\u02a5\1\u02a4"+ -+ "\3\u02a5\1\u02e5\3\0\2\u026e\6\u02a4\3\u02a5\1\u02e6\7\u02a4"+ -+ "\32\u02a5\1\u02a4\3\u02a5\6\u02a4\1\u02a5\2\u02a4\2\u02a5\2\u02a4"+ -+ "\3\u02a6\1\u02a4\3\u02a6\1\u02a4\3\0\10\u02a4\3\u02a6\1\147"+ -+ "\7\u02a4\32\u02a6\1\u02a4\3\u02a6\6\u02a4\1\u02a6\2\u02a4\2\u02a6"+ -+ "\1\u02a4\43\0\1\u02e7\120\0\1\u02e8\36\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\7\0\4\147\1\u02e9\25\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\7\0\14\147\1\u02ea\15\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\u02ab\1\0"+ -+ "\3\u02ab\1\u02eb\13\0\4\u02ab\7\0\32\u02ab\1\0\3\u02ab"+ -+ "\6\0\1\u02ab\2\0\2\u02ab\2\0\3\147\1\0\3\147"+ -+ "\1\u02ec\13\0\2\147\1\u02ed\1\147\6\0\1\151\32\147"+ -+ "\1\0\3\147\6\0\1\147\2\0\2\147\1\0\2\u02ee"+ -+ "\1\u02ef\2\u02ee\2\u02ef\1\u02ee\1\u02af\3\0\10\u02ee\1\u02ef"+ -+ "\1\u02ee\1\u02af\1\0\7\u02ee\25\u02ef\4\u02ee\1\u02ef\1\u02ee"+ -+ "\3\u02ef\6\u02ee\1\u02ef\2\u02ee\2\u02ef\2\u02ee\1\u02f0\1\u02ef"+ -+ "\1\u02f0\1\u02ee\2\u02ef\1\u02f0\1\u02af\3\0\10\u02ee\1\u02ef"+ -+ "\1\u02f0\1\u02b0\1\147\7\u02ee\25\u02ef\4\u02f0\1\u02ef\1\u02ee"+ -+ "\3\u02ef\6\u02ee\1\u02ef\2\u02ee\2\u02ef\1\u02ee\10\0\1\u02b1"+ -+ "\3\0\1\u02b2\11\0\1\u02b1\64\0\1\u0279\2\0\2\u0279"+ -+ "\1\0\1\u02b2\13\0\1\u0279\1\0\1\u02b2\10\0\25\u0279"+ -+ "\4\0\1\u0279\1\0\3\u0279\6\0\1\u0279\2\0\2\u0279"+ -+ "\11\0\1\u02b3\3\0\1\u02b4\1\0\1\u02b5\1\0\1\u02b6"+ -+ "\5\0\1\u02b3\64\0\1\u027a\2\0\2\u027a\1\0\1\u02b4"+ -+ "\13\0\1\u027a\1\0\1\u02b4\10\0\25\u027a\4\0\1\u027a"+ -+ "\1\0\3\u027a\6\0\1\u027a\2\0\2\u027a\11\0\1\u02b5"+ -+ "\6\0\1\u02f1\6\0\1\u02b5\63\0\3\u02f2\1\0\4\u02f2"+ -+ "\3\0\2\u02f2\2\0\10\u02f2\7\0\32\u02f2\1\0\3\u02f2"+ -+ "\6\0\1\u02f2\2\0\2\u02f2\2\0\3\u02b8\1\0\4\u02b8"+ -+ "\3\0\2\u02b8\2\0\1\u02b8\1\u02f3\6\u02b8\7\0\32\u02b8"+ -+ "\1\0\3\u02b8\6\0\1\u02b8\2\0\2\u02b8\2\0\3\u027d"+ -+ "\1\0\3\u027d\1\u02ba\3\0\2\u027d\2\0\1\u027d\1\u02ba"+ -+ "\4\u027d\1\u02ba\1\u027d\7\0\32\u027d\1\0\3\u027d\6\0"+ -+ "\1\u027d\2\0\2\u027d\41\0\1\u02f4\20\0\1\u02f5\67\0"+ -+ "\1\u02f6\114\0\1\u02f7\103\0\1\u02f8\112\0\1\u02f9\107\0"+ -+ "\1\u02fa\107\0\1\u02fb\4\0\1\u02fc\103\0\1\u02fd\4\0"+ -+ "\1\u02fe\1\0\1\u02ff\50\0\1\u0300\32\0\1\u0301\17\0"+ -+ "\1\u0302\35\0\1\u0303\35\0\1\u0304\110\0\1\u0305\6\0"+ -+ "\1\u0306\100\0\1\u0307\7\0\1\u0308\103\0\1\u0309\4\0"+ -+ "\1\u030a\142\0\1\u030b\110\0\1\u030c\66\0\1\u030d\25\0"+ -+ "\3\u028b\1\u030e\1\u030f\1\u028b\1\u0310\1\u0311\1\u028b\2\357"+ -+ "\1\76\13\u028b\1\357\34\u028b\1\u030e\1\u028b\1\u0311\1\u030e"+ -+ "\21\u028b\3\357\1\u0289\3\357\1\u0289\3\357\1\76\15\357"+ -+ "\1\u012e\1\u012f\1\u0255\1\233\1\357\1\233\25\357\1\u0289"+ -+ "\1\357\2\u0289\25\357\1\u0312\1\357\1\u0313\4\357\1\76"+ -+ "\15\357\1\u012e\1\u012f\1\u0255\1\233\1\357\1\233\53\357"+ -+ "\3\u0314\3\357\1\u0314\3\357\1\76\15\357\1\u012e\1\u012f"+ -+ "\1\u0255\1\233\1\357\1\233\7\357\2\u0314\3\357\1\u0314"+ -+ "\1\357\1\u0314\1\357\1\u0314\2\357\1\u0314\1\357\4\u0314"+ -+ "\2\357\1\u0314\1\357\1\u0314\17\357\1\u02cd\3\357\1\u02cd"+ -+ "\3\357\1\76\15\357\1\u012e\1\u012f\1\u0255\1\233\1\357"+ -+ "\1\233\25\357\1\u02cd\1\357\2\u02cd\21\357\4\u016f\1\u0170"+ -+ "\4\u016f\2\357\1\76\13\u016f\1\357\3\u016f\1\357\55\u016f"+ -+ "\1\u016d\3\u0315\3\u016d\1\u0315\1\u016d\2\u01a6\1\u01a7\13\u016d"+ -+ "\1\u01a6\1\u01a8\15\u016d\2\u0315\3\u016d\1\u0315\1\u016d\1\u0315"+ -+ "\1\u016d\1\u0315\2\u016d\1\u0315\1\u016d\4\u0315\2\u016d\1\u0315"+ -+ "\1\u016d\1\u0315\14\u016d\3\u0294\1\u0316\1\u0317\1\u0294\1\u0318"+ -+ "\1\u0319\1\u0294\3\0\13\u0294\1\0\34\u0294\1\u0316\1\u0294"+ -+ "\1\u0319\1\u0316\21\u0294\3\76\1\u0292\3\76\1\u0292\21\76"+ -+ "\1\227\1\230\1\u025b\1\0\1\76\1\0\25\76\1\u0292"+ -+ "\1\76\2\u0292\25\76\1\u031a\1\76\1\u031b\22\76\1\227"+ -+ "\1\230\1\u025b\1\0\1\76\1\0\53\76\3\u031c\3\76"+ -+ "\1\u031c\21\76\1\227\1\230\1\u025b\1\0\1\76\1\0"+ -+ "\7\76\2\u031c\3\76\1\u031c\1\76\1\u031c\1\76\1\u031c"+ -+ "\2\76\1\u031c\1\76\4\u031c\2\76\1\u031c\1\76\1\u031c"+ -+ "\17\76\1\u02d4\3\76\1\u02d4\21\76\1\227\1\230\1\u025b"+ -+ "\1\0\1\76\1\0\25\76\1\u02d4\1\76\2\u02d4\21\76"+ -+ "\4\235\1\236\4\235\3\0\13\235\1\0\3\235\1\76"+ -+ "\55\235\1\232\3\u031d\3\232\1\u031d\20\232\1\356\15\232"+ -+ "\2\u031d\3\232\1\u031d\1\232\1\u031d\1\232\1\u031d\2\232"+ -+ "\1\u031d\1\232\4\u031d\2\232\1\u031d\1\232\1\u031d\14\232"+ -+ "\11\u02da\2\u031e\1\u031f\13\u02da\1\u031e\61\u02da\11\256\2\125"+ -+ "\1\126\13\256\1\125\4\256\1\u0320\54\256\11\u02de\3\0"+ -+ "\13\u02de\1\0\62\u02de\3\u02df\1\u02de\3\u02df\1\u0321\3\0"+ -+ "\2\u029b\6\u02de\3\u02df\1\u0322\7\u02de\32\u02df\1\u02de\3\u02df"+ -+ "\6\u02de\1\u02df\2\u02de\2\u02df\2\u02de\3\u02e0\1\u02de\3\u02e0"+ -+ "\1\u02de\3\0\10\u02de\3\u02e0\1\147\7\u02de\32\u02e0\1\u02de"+ -+ "\3\u02e0\6\u02de\1\u02e0\2\u02de\2\u02e0\1\u02de\13\u02e1\1\0"+ -+ "\75\u02e1\1\0\3\u02e2\1\0\4\u02e2\3\0\2\u02e2\2\0"+ -+ "\1\u02e2\1\u0323\6\u02e2\7\0\32\u02e2\1\0\3\u02e2\6\0"+ -+ "\1\u02e2\2\0\2\u02e2\2\0\1\u02e2\1\u0324\1\u02e2\1\0"+ -+ "\2\u0324\1\u02e2\1\u02e3\3\0\2\u02e2\2\0\1\u02e2\1\u0323"+ -+ "\2\u02e2\1\u0324\1\u02e2\1\u02e3\1\u02e2\7\0\25\u0324\4\u02e2"+ -+ "\1\u0324\1\0\3\u0324\6\0\1\u0324\2\0\2\u0324\2\0"+ -+ "\3\u02e4\1\0\4\u02e4\3\0\2\u02e4\2\0\1\u02e4\1\u0325"+ -+ "\6\u02e4\7\0\32\u02e4\1\0\3\u02e4\6\0\1\u02e4\2\0"+ -+ "\2\u02e4\1\0\10\u02a4\1\u02e5\3\0\2\u026e\10\u02a4\1\u02e5"+ -+ "\1\0\61\u02a4\1\0\3\u02e6\1\0\3\u02e6\1\u0326\3\0"+ -+ "\2\u0327\6\0\4\u02e6\7\0\32\u02e6\1\0\3\u02e6\6\0"+ -+ "\1\u02e6\2\0\2\u02e6\7\0\1\u0328\153\0\1\u0329\40\0"+ -+ "\3\147\1\0\1\147\1\u032a\1\147\14\0\4\147\7\0"+ -+ "\32\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ -+ "\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u032b"+ -+ "\17\147\1\0\3\147\6\0\1\147\2\0\2\147\11\0"+ -+ "\1\u02eb\15\0\1\u02eb\62\0\2\u032c\1\u032d\2\u032c\2\u032d"+ -+ "\1\u032c\1\u02ec\3\0\10\u032c\1\u032d\1\u032c\1\u02ec\1\0"+ -+ "\7\u032c\25\u032d\4\u032c\1\u032d\1\u032c\3\u032d\6\u032c\1\u032d"+ -+ "\2\u032c\2\u032d\2\u032c\1\u032e\1\u032d\1\u032e\1\u032c\2\u032d"+ -+ "\1\u032e\1\u02ec\3\0\10\u032c\1\u032d\1\u032e\1\u02ed\1\147"+ -+ "\7\u032c\25\u032d\4\u032e\1\u032d\1\u032c\3\u032d\6\u032c\1\u032d"+ -+ "\2\u032c\2\u032d\1\u032c\11\u02ee\3\0\13\u02ee\1\0\62\u02ee"+ -+ "\3\u02ef\1\u02ee\3\u02ef\1\u032f\3\0\1\u02af\7\u02ee\3\u02ef"+ -+ "\1\u0330\7\u02ee\32\u02ef\1\u02ee\3\u02ef\6\u02ee\1\u02ef\2\u02ee"+ -+ "\2\u02ef\2\u02ee\3\u02f0\1\u02ee\3\u02f0\1\u02ee\3\0\10\u02ee"+ -+ "\3\u02f0\1\147\7\u02ee\32\u02f0\1\u02ee\3\u02f0\6\u02ee\1\u02f0"+ -+ "\2\u02ee\2\u02f0\1\u02ee\10\0\1\u0331\5\0\1\u02b5\7\0"+ -+ "\1\u0331\63\0\3\u02f2\1\0\4\u02f2\3\0\2\u02f2\2\0"+ -+ "\1\u02f2\1\u0332\6\u02f2\7\0\32\u02f2\1\0\3\u02f2\6\0"+ -+ "\1\u02f2\2\0\2\u02f2\2\0\1\u02b8\1\u0333\1\u02b8\1\0"+ -+ "\2\u0333\1\u02b8\1\u02f3\3\0\2\u02b8\2\0\1\u02b8\1\u02f3"+ -+ "\2\u02b8\1\u0333\1\u02b8\1\u02f3\1\u02b8\7\0\25\u0333\4\u02b8"+ -+ "\1\u0333\1\0\3\u0333\6\0\1\u0333\2\0\2\u0333\54\0"+ -+ "\1\u0334\116\0\1\u0335\66\0\1\u0336\111\0\1\u0337\111\0"+ -+ "\1\u0338\111\0\1\u0339\123\0\1\u033a\4\0\1\u033b\66\0"+ -+ "\1\u033c\113\0\1\u033d\105\0\1\u033e\115\0\1\u033f\104\0"+ -+ "\1\u0340\112\0\1\u0341\120\0\1\u0342\110\0\1\u0343\100\0"+ -+ "\1\u0344\105\0\1\u0345\15\0\1\u0346\114\0\1\u0347\67\0"+ -+ "\1\u0348\106\0\1\u0349\114\0\1\u034a\122\0\1\u034b\107\0"+ -+ "\1\u034c\53\0\1\u034d\110\0\1\u034e\130\0\1\u034f\51\0"+ -+ "\3\u012f\1\u028b\1\u016e\2\u012f\1\u028b\1\u012f\2\357\1\76"+ -+ "\13\u012f\1\357\2\u012f\1\357\1\u0254\30\u012f\1\u028b\1\u012f"+ -+ "\2\u028b\25\u012f\1\u0350\1\u012f\1\u0351\2\u012f\2\357\1\76"+ -+ "\13\u012f\1\357\2\u012f\1\357\1\u0254\56\u012f\3\u0352\1\u016e"+ -+ "\2\u012f\1\u0352\1\u012f\2\357\1\76\13\u012f\1\357\2\u012f"+ -+ "\1\357\1\u0254\12\u012f\2\u0352\3\u012f\1\u0352\1\u012f\1\u0352"+ -+ "\1\u012f\1\u0352\2\u012f\1\u0352\1\u012f\4\u0352\2\u012f\1\u0352"+ -+ "\1\u012f\1\u0352\17\u012f\1\u030e\1\u016e\2\u012f\1\u030e\1\u012f"+ -+ "\2\357\1\76\13\u012f\1\357\2\u012f\1\357\1\u0254\30\u012f"+ -+ "\1\u030e\1\u012f\2\u030e\21\u012f\4\357\1\u0312\1\357\1\u0313"+ -+ "\4\357\1\76\15\357\1\u012e\1\u012f\1\u0130\1\233\1\357"+ -+ "\1\233\53\357\3\u0314\3\357\1\u0314\3\357\1\76\15\357"+ -+ "\1\u012e\1\u012f\1\u0130\1\233\1\357\1\233\7\357\2\u0314"+ -+ "\3\357\1\u0314\1\357\1\u0314\1\357\1\u0314\2\357\1\u0314"+ -+ "\1\357\4\u0314\2\357\1\u0314\1\357\1\u0314\15\357\3\u0353"+ -+ "\3\357\1\u0353\3\357\1\76\15\357\1\u012e\1\u012f\1\u0130"+ -+ "\1\233\1\357\1\233\7\357\2\u0353\3\357\1\u0353\1\357"+ -+ "\1\u0353\1\357\1\u0353\2\357\1\u0353\1\357\4\u0353\2\357"+ -+ "\1\u0353\1\357\1\u0353\14\357\1\u016d\3\u021d\3\u016d\1\u021d"+ -+ "\1\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\15\u016d\2\u021d"+ -+ "\3\u016d\1\u021d\1\u016d\1\u021d\1\u016d\1\u021d\2\u016d\1\u021d"+ -+ "\1\u016d\4\u021d\2\u016d\1\u021d\1\u016d\1\u021d\14\u016d\3\230"+ -+ "\1\u0294\1\234\2\230\1\u0294\1\230\3\0\13\230\1\0"+ -+ "\2\230\1\76\1\u025a\30\230\1\u0294\1\230\2\u0294\25\230"+ -+ "\1\u0354\1\230\1\u0355\2\230\3\0\13\230\1\0\2\230"+ -+ "\1\76\1\u025a\56\230\3\u0356\1\234\2\230\1\u0356\1\230"+ -+ "\3\0\13\230\1\0\2\230\1\76\1\u025a\12\230\2\u0356"+ -+ "\3\230\1\u0356\1\230\1\u0356\1\230\1\u0356\2\230\1\u0356"+ -+ "\1\230\4\u0356\2\230\1\u0356\1\230\1\u0356\17\230\1\u0316"+ -+ "\1\234\2\230\1\u0316\1\230\3\0\13\230\1\0\2\230"+ -+ "\1\76\1\u025a\30\230\1\u0316\1\230\2\u0316\21\230\4\76"+ -+ "\1\u031a\1\76\1\u031b\22\76\1\227\1\230\1\231\1\0"+ -+ "\1\76\1\0\53\76\3\u031c\3\76\1\u031c\21\76\1\227"+ -+ "\1\230\1\231\1\0\1\76\1\0\7\76\2\u031c\3\76"+ -+ "\1\u031c\1\76\1\u031c\1\76\1\u031c\2\76\1\u031c\1\76"+ -+ "\4\u031c\2\76\1\u031c\1\76\1\u031c\15\76\3\u0357\3\76"+ -+ "\1\u0357\21\76\1\227\1\230\1\231\1\0\1\76\1\0"+ -+ "\7\76\2\u0357\3\76\1\u0357\1\76\1\u0357\1\76\1\u0357"+ -+ "\2\76\1\u0357\1\76\4\u0357\2\76\1\u0357\1\76\1\u0357"+ -+ "\14\76\1\232\3\u0224\3\232\1\u0224\20\232\1\356\15\232"+ -+ "\2\u0224\3\232\1\u0224\1\232\1\u0224\1\232\1\u0224\2\232"+ -+ "\1\u0224\1\232\4\u0224\2\232\1\u0224\1\232\1\u0224\14\232"+ -+ "\11\u0320\2\u0358\1\u0359\13\u0320\1\u0358\61\u0320\10\u02de\1\u0321"+ -+ "\3\0\2\u029b\10\u02de\1\u0321\1\0\61\u02de\1\0\3\u0322"+ -+ "\1\0\3\u0322\1\u035a\3\0\2\u035b\6\0\4\u0322\7\0"+ -+ "\32\u0322\1\0\3\u0322\6\0\1\u0322\2\0\2\u0322\2\0"+ -+ "\1\u02e2\1\u0324\1\u02e2\1\0\2\u0324\1\u02e2\1\u0323\3\0"+ -+ "\2\u02e2\1\u01fc\1\0\1\u02e2\1\u0323\2\u02e2\1\u0324\1\u02e2"+ -+ "\1\u0323\1\u02e2\7\0\25\u0324\4\u02e2\1\u0324\1\0\3\u0324"+ -+ "\6\0\1\u0324\2\0\2\u0324\2\0\3\u0324\1\0\3\u0324"+ -+ "\1\u035c\3\0\1\u02e3\1\u02e2\1\u01fc\1\0\1\u02e2\1\u0323"+ -+ "\2\u02e2\4\u0324\7\0\32\u0324\1\0\3\u0324\6\0\1\u0324"+ -+ "\2\0\2\u0324\2\0\3\u02e4\1\0\3\u02e4\1\u0325\3\0"+ -+ "\2\u02e4\2\0\1\u02e4\1\u0325\4\u02e4\1\u0325\1\u02e4\7\0"+ -+ "\32\u02e4\1\0\3\u02e4\6\0\1\u02e4\2\0\2\u02e4\11\0"+ -+ "\1\u0326\3\0\2\u0327\10\0\1\u0326\64\0\1\u02e6\2\0"+ -+ "\2\u02e6\1\0\1\u0327\13\0\1\u02e6\1\0\1\u0327\10\0"+ -+ "\25\u02e6\4\0\1\u02e6\1\0\3\u02e6\6\0\1\u02e6\2\0"+ -+ "\2\u02e6\47\0\1\u035d\116\0\1\u035e\35\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\7\0\7\147\1\u035f\22\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ -+ "\3\147\14\0\4\147\7\0\15\147\1\u0360\14\147\1\0"+ -+ "\3\147\6\0\1\147\2\0\2\147\1\0\11\u032c\3\0"+ -+ "\13\u032c\1\0\62\u032c\3\u032d\1\u032c\3\u032d\1\u0361\3\0"+ -+ "\2\u02ec\6\u032c\3\u032d\1\u0362\7\u032c\32\u032d\1\u032c\3\u032d"+ -+ "\6\u032c\1\u032d\2\u032c\2\u032d\2\u032c\3\u032e\1\u032c\3\u032e"+ -+ "\1\u032c\3\0\10\u032c\3\u032e\1\147\7\u032c\32\u032e\1\u032c"+ -+ "\3\u032e\6\u032c\1\u032e\2\u032c\2\u032e\1\u032c\10\u02ee\1\u032f"+ -+ "\3\0\1\u02af\11\u02ee\1\u032f\1\0\61\u02ee\1\0\3\u0330"+ -+ "\1\0\3\u0330\1\u0363\3\0\1\u0364\7\0\4\u0330\7\0"+ -+ "\32\u0330\1\0\3\u0330\6\0\1\u0330\2\0\2\u0330\2\0"+ -+ "\3\u02f2\1\0\3\u02f2\1\u0365\3\0\2\u02f2\1\u02b5\1\0"+ -+ "\1\u02f2\1\u0332\4\u02f2\1\u0365\1\u02f2\7\0\32\u02f2\1\0"+ -+ "\3\u02f2\6\0\1\u02f2\2\0\2\u02f2\2\0\3\u0333\1\0"+ -+ "\3\u0333\1\u0366\3\0\1\u02f3\1\u02b8\1\u02b5\1\0\1\u0367"+ -+ "\1\u02f3\2\u02b8\2\u0333\1\u0368\1\u0333\7\0\32\u0333\1\0"+ -+ "\3\u0333\6\0\1\u0333\2\0\2\u0333\55\0\1\u0369\102\0"+ -+ "\1\u036a\103\0\1\u036b\155\0\1\u036c\53\0\1\u036d\105\0"+ -+ "\1\u036e\113\0\1\u036f\145\0\1\u0370\55\0\1\u0371\113\0"+ -+ "\1\u0372\100\0\1\u0373\110\0\1\u0374\103\0\1\u0375\112\0"+ -+ "\1\u0376\110\0\1\u0377\122\0\1\u0378\76\0\1\u0379\105\0"+ -+ "\1\u037a\1\u037b\126\0\1\u037c\70\0\1\u037d\113\0\1\u037e"+ -+ "\120\0\1\u037f\111\0\1\u0380\74\0\1\u0381\113\0\1\u0382"+ -+ "\107\0\1\u0383\47\0\4\u012f\1\u0384\1\u012f\1\u0351\2\u012f"+ -+ "\2\357\1\76\13\u012f\1\357\62\u012f\3\u0352\1\u016e\2\u012f"+ -+ "\1\u0352\1\u012f\2\357\1\76\13\u012f\1\357\2\u012f\1\357"+ -+ "\13\u012f\2\u0352\3\u012f\1\u0352\1\u012f\1\u0352\1\u012f\1\u0352"+ -+ "\2\u012f\1\u0352\1\u012f\4\u0352\2\u012f\1\u0352\1\u012f\1\u0352"+ -+ "\15\u012f\3\u0385\1\u016e\2\u012f\1\u0385\1\u012f\2\357\1\76"+ -+ "\13\u012f\1\357\2\u012f\1\357\13\u012f\2\u0385\3\u012f\1\u0385"+ -+ "\1\u012f\1\u0385\1\u012f\1\u0385\2\u012f\1\u0385\1\u012f\4\u0385"+ -+ "\2\u012f\1\u0385\1\u012f\1\u0385\14\u012f\1\357\3\u0386\3\357"+ -+ "\1\u0386\3\357\1\76\15\357\1\u012e\1\u012f\1\u0130\1\233"+ -+ "\1\357\1\233\7\357\2\u0386\3\357\1\u0386\1\357\1\u0386"+ -+ "\1\357\1\u0386\2\357\1\u0386\1\357\4\u0386\2\357\1\u0386"+ -+ "\1\357\1\u0386\14\357\4\230\1\u0387\1\230\1\u0355\2\230"+ -+ "\3\0\13\230\1\0\62\230\3\u0356\1\234\2\230\1\u0356"+ -+ "\1\230\3\0\13\230\1\0\2\230\1\76\13\230\2\u0356"+ -+ "\3\230\1\u0356\1\230\1\u0356\1\230\1\u0356\2\230\1\u0356"+ -+ "\1\230\4\u0356\2\230\1\u0356\1\230\1\u0356\15\230\3\u0388"+ -+ "\1\234\2\230\1\u0388\1\230\3\0\13\230\1\0\2\230"+ -+ "\1\76\13\230\2\u0388\3\230\1\u0388\1\230\1\u0388\1\230"+ -+ "\1\u0388\2\230\1\u0388\1\230\4\u0388\2\230\1\u0388\1\230"+ -+ "\1\u0388\14\230\1\76\3\u0389\3\76\1\u0389\21\76\1\227"+ -+ "\1\230\1\231\1\0\1\76\1\0\7\76\2\u0389\3\76"+ -+ "\1\u0389\1\76\1\u0389\1\76\1\u0389\2\76\1\u0389\1\76"+ -+ "\4\u0389\2\76\1\u0389\1\76\1\u0389\14\76\10\0\1\u035a"+ -+ "\3\0\2\u035b\10\0\1\u035a\64\0\1\u0322\2\0\2\u0322"+ -+ "\1\0\1\u035b\13\0\1\u0322\1\0\1\u035b\10\0\25\u0322"+ -+ "\4\0\1\u0322\1\0\3\u0322\6\0\1\u0322\2\0\2\u0322"+ -+ "\2\0\3\u02e2\1\0\3\u02e2\1\u035c\3\0\1\u02e3\1\u02e2"+ -+ "\1\u01fc\1\0\1\u02e2\1\u0323\4\u02e2\1\u035c\1\u02e2\7\0"+ -+ "\32\u02e2\1\0\3\u02e2\6\0\1\u02e2\2\0\2\u02e2\47\0"+ -+ "\1\u038a\43\0\3\147\1\0\3\147\14\0\4\147\7\0"+ -+ "\7\147\1\u038b\22\147\1\0\3\147\6\0\1\147\2\0"+ -+ "\2\147\1\0\10\u032c\1\u0361\3\0\2\u02ec\10\u032c\1\u0361"+ -+ "\1\0\61\u032c\1\0\3\u0362\1\0\3\u0362\1\u038c\3\0"+ -+ "\2\u038d\6\0\4\u0362\7\0\32\u0362\1\0\3\u0362\6\0"+ -+ "\1\u0362\2\0\2\u0362\11\0\1\u0363\3\0\1\u0364\11\0"+ -+ "\1\u0363\64\0\1\u0330\2\0\2\u0330\1\0\1\u0364\13\0"+ -+ "\1\u0330\1\0\1\u0364\10\0\25\u0330\4\0\1\u0330\1\0"+ -+ "\3\u0330\6\0\1\u0330\2\0\2\u0330\2\0\3\u02b8\1\0"+ -+ "\3\u02b8\1\u0366\3\0\1\u02f3\1\u02b8\1\u02b5\1\0\1\u0367"+ -+ "\1\u02f3\4\u02b8\1\u0366\1\u02b8\7\0\32\u02b8\1\0\3\u02b8"+ -+ "\6\0\1\u02b8\2\0\2\u02b8\2\0\3\u038e\1\0\4\u038e"+ -+ "\3\0\2\u038e\2\0\1\u038e\1\u038f\6\u038e\7\0\32\u038e"+ -+ "\1\0\3\u038e\6\0\1\u038e\2\0\2\u038e\55\0\1\u0390"+ -+ "\77\0\1\u0391\104\0\1\u0392\125\0\1\u0393\102\0\1\u0394"+ -+ "\105\0\1\u0395\111\0\1\u0396\125\0\1\u0397\100\0\1\u0398"+ -+ "\112\0\1\u0399\143\0\1\u039a\45\0\1\u039b\113\0\1\u039c"+ -+ "\106\0\1\u039d\105\0\1\u039e\115\0\1\u039f\110\0\1\u03a0"+ -+ "\110\0\1\u03a1\105\0\1\u03a2\104\0\1\u03a3\120\0\1\u03a4"+ -+ "\147\0\1\u03a5\55\0\1\u03a6\120\0\1\u03a7\103\0\1\u03a8"+ -+ "\140\0\1\u03a9\107\0\1\u03aa\3\0\4\u012f\1\u0350\1\u012f"+ -+ "\1\u0351\2\u012f\2\357\1\76\13\u012f\1\357\2\u012f\1\357"+ -+ "\57\u012f\3\u03ab\1\u016e\2\u012f\1\u03ab\1\u012f\2\357\1\76"+ -+ "\13\u012f\1\357\2\u012f\1\357\13\u012f\2\u03ab\3\u012f\1\u03ab"+ -+ "\1\u012f\1\u03ab\1\u012f\1\u03ab\2\u012f\1\u03ab\1\u012f\4\u03ab"+ -+ "\2\u012f\1\u03ab\1\u012f\1\u03ab\14\u012f\1\357\3\u0289\3\357"+ -+ "\1\u0289\3\357\1\76\15\357\1\u012e\1\u012f\1\u0130\1\233"+ -+ "\1\357\1\233\7\357\2\u0289\3\357\1\u0289\1\357\1\u0289"+ -+ "\1\357\1\u0289\2\357\1\u0289\1\357\4\u0289\2\357\1\u0289"+ -+ "\1\357\1\u0289\14\357\4\230\1\u0354\1\230\1\u0355\2\230"+ -+ "\3\0\13\230\1\0\2\230\1\76\57\230\3\u03ac\1\234"+ -+ "\2\230\1\u03ac\1\230\3\0\13\230\1\0\2\230\1\76"+ -+ "\13\230\2\u03ac\3\230\1\u03ac\1\230\1\u03ac\1\230\1\u03ac"+ -+ "\2\230\1\u03ac\1\230\4\u03ac\2\230\1\u03ac\1\230\1\u03ac"+ -+ "\14\230\1\76\3\u0292\3\76\1\u0292\21\76\1\227\1\230"+ -+ "\1\231\1\0\1\76\1\0\7\76\2\u0292\3\76\1\u0292"+ -+ "\1\76\1\u0292\1\76\1\u0292\2\76\1\u0292\1\76\4\u0292"+ -+ "\2\76\1\u0292\1\76\1\u0292\14\76\10\0\1\u038c\3\0"+ -+ "\2\u038d\10\0\1\u038c\64\0\1\u0362\2\0\2\u0362\1\0"+ -+ "\1\u038d\13\0\1\u0362\1\0\1\u038d\10\0\25\u0362\4\0"+ -+ "\1\u0362\1\0\3\u0362\6\0\1\u0362\2\0\2\u0362\2\0"+ -+ "\3\u038e\1\0\4\u038e\3\0\2\u038e\2\0\1\u038e\1\u03ad"+ -+ "\6\u038e\7\0\32\u038e\1\0\3\u038e\6\0\1\u038e\2\0"+ -+ "\2\u038e\2\0\1\u038e\1\u03ae\1\u038e\1\0\2\u03ae\1\u038e"+ -+ "\1\u038f\3\0\2\u038e\2\0\1\u038e\1\u03ad\2\u038e\1\u03ae"+ -+ "\1\u038e\1\u038f\1\u038e\7\0\25\u03ae\4\u038e\1\u03ae\1\0"+ -+ "\3\u03ae\6\0\1\u03ae\2\0\2\u03ae\40\0\1\u03af\126\0"+ -+ "\1\u03b0\106\0\1\u03b1\116\0\1\u03b2\104\0\1\u03b3\141\0"+ -+ "\1\u03b4\56\0\1\u03b5\42\0\1\u03b6\210\0\1\u03b7\43\0"+ -+ "\1\u03b8\123\0\1\u03b9\111\0\1\u03ba\76\0\1\u03bb\130\0"+ -+ "\1\u03bc\133\0\1\u03bd\110\0\1\u03be\42\0\1\u03bf\125\0"+ -+ "\1\u03c0\77\0\1\u03c1\104\0\1\u03c2\107\0\1\u03c3\125\0"+ -+ "\1\u03c4\75\0\1\u03c5\112\0\1\u03c6\120\0\1\u03c7\116\0"+ -+ "\1\u03c8\46\0\1\u03c9\71\0\1\u012f\3\u028b\1\u016e\2\u012f"+ -+ "\1\u028b\1\u012f\2\357\1\76\13\u012f\1\357\2\u012f\1\357"+ -+ "\13\u012f\2\u028b\3\u012f\1\u028b\1\u012f\1\u028b\1\u012f\1\u028b"+ -+ "\2\u012f\1\u028b\1\u012f\4\u028b\2\u012f\1\u028b\1\u012f\1\u028b"+ -+ "\14\u012f\1\230\3\u0294\1\234\2\230\1\u0294\1\230\3\0"+ -+ "\13\230\1\0\2\230\1\76\13\230\2\u0294\3\230\1\u0294"+ -+ "\1\230\1\u0294\1\230\1\u0294\2\230\1\u0294\1\230\4\u0294"+ -+ "\2\230\1\u0294\1\230\1\u0294\14\230\1\0\1\u038e\1\u03ae"+ -+ "\1\u038e\1\0\2\u03ae\1\u038e\1\u03ca\3\0\2\u038e\1\u02b5"+ -+ "\1\0\1\u038e\1\u03ad\2\u038e\1\u03ae\1\u038e\1\u03ca\1\u038e"+ -+ "\7\0\25\u03ae\4\u038e\1\u03ae\1\0\3\u03ae\6\0\1\u03ae"+ -+ "\2\0\2\u03ae\2\0\3\u03ae\1\0\3\u03ae\1\u03cb\3\0"+ -+ "\1\u038f\1\u038e\1\u02b5\1\0\1\u038e\1\u03ad\2\u038e\2\u03ae"+ -+ "\1\u03cc\1\u03ae\7\0\32\u03ae\1\0\3\u03ae\6\0\1\u03ae"+ -+ "\2\0\2\u03ae\64\0\1\u03cd\100\0\1\u03ce\106\0\1\u03cf"+ -+ "\112\0\1\u03d0\110\0\1\u03d1\75\0\1\u03d2\10\0\1\u03d3"+ -+ "\2\0\1\u03d4\4\0\1\u03d5\66\0\1\u03d6\111\0\1\u03d7"+ -+ "\157\0\1\u03d8\106\0\1\u03d9\51\0\1\u03da\115\0\1\u03db"+ -+ "\143\0\1\u03dc\55\0\1\u03dd\116\0\1\u03de\103\0\1\u03df"+ -+ "\111\0\1\u03e0\74\0\1\u03e1\120\0\1\u03e2\76\0\1\u03e3"+ -+ "\117\0\1\u03e4\112\0\1\u03e5\106\0\1\u03e6\115\0\1\u03e7"+ -+ "\106\0\1\u03e8\45\0\1\u03e9\103\0\3\u038e\1\0\3\u038e"+ -+ "\1\u03cb\3\0\1\u038f\1\u038e\1\u02b5\1\0\1\u038e\1\u03ad"+ -+ "\4\u038e\1\u03cb\1\u038e\7\0\32\u038e\1\0\3\u038e\6\0"+ -+ "\1\u038e\2\0\2\u038e\41\0\1\u03ea\124\0\1\u03eb\142\0"+ -+ "\1\u03ec\57\0\1\u03ed\107\0\1\u03ee\42\0\1\u03ef\150\0"+ -+ "\1\u03f0\112\0\1\u03f1\46\0\1\u03f2\142\0\1\u03f3\125\0"+ -+ "\1\u03f4\41\0\1\u03f5\121\0\1\u03f6\152\0\1\u03f7\103\0"+ -+ "\1\u03f8\74\0\1\u03f9\111\0\1\u03fa\55\0\1\u03fb\150\0"+ -+ "\1\u03fc\112\0\1\u03fd\104\0\1\u03fe\151\0\1\u03ff\43\0"+ -+ "\1\u0400\113\0\1\u0401\123\0\1\u0402\140\0\1\u0403\63\0"+ -+ "\1\u0404\135\0\1\u0405\42\0\1\u0406\116\0\1\u0407\110\0"+ -+ "\1\u0408\151\0\1\u0409\40\0\1\u040a\117\0\1\u040b\120\0"+ -+ "\1\u040c\73\0\1\u040d\125\0\1\u040e\72\0\1\u040f\133\0"+ -+ "\1\u0410\66\0\1\u0411\113\0\1\u0412\117\0\1\u0413\103\0"+ -+ "\1\u0414\50\0\1\u0415\150\0\1\u0416\102\0\1\u0417\131\0"+ -+ "\1\u0418\135\0\1\u0419\45\0\1\u041a\64\0\1\u041b\154\0"+ -+ "\1\u041c\133\0\1\u041d\61\0\1\u041e\37\0\1\u041f\144\0"+ -+ "\1\u0420\130\0\1\u0421\103\0\1\u0422\115\0\1\u0423\134\0"+ -+ "\1\u0424\10\0\1\u0425\142\0\1\u0426\156\0\1\u0427\61\0"+ -+ "\1\u0428\72\0\1\u0429\126\0\1\u042a\106\0\1\u042b\141\0"+ -+ "\1\u042c\10\0\1\u042d\143\0\1\u042e\112\0\1\u042f\153\0"+ -+ "\1\u0430\60\0\1\u0431\137\0\1\u0432\60\0\1\u0433\106\0"+ -+ "\1\u0434\111\0\1\u0435\142\0\1\u0436\110\0\1\u0437\53\0"+ -+ "\1\u0438\2\0\1\u0439\100\0\1\u043a\120\0\1\u043b\142\0"+ -+ "\1\u043c\41\0\1\u043d\112\0\1\u043e\154\0\1\u043f\54\0"+ -+ "\1\u0440\103\0\1\u0441\127\0\1\u0442\76\0\1\u0443\105\0"+ -+ "\1\u0444\110\0\1\u0445\106\0\1\u0446\105\0\1\u0447\125\0"+ -+ "\1\u0448\105\0\1\u0449\103\0\1\u044a\115\0\1\u044b\106\0"+ -+ "\1\u044c\116\0\1\u044d\50\0\1\u044e\132\0\1\u044f\112\0"+ -+ "\1\u0450\115\0\1\u0451\121\0\1\u0452\103\0\1\u0453\102\0"+ -+ "\1\u0454\112\0\1\u0455\111\0\1\u0456\105\0\1\u0457\116\0"+ -+ "\1\u0458\117\0\1\u0459\33\0\1\u045a\121\0\1\u045b\137\0"+ -+ "\1\u045c\103\0\1\u045d\155\0\1\u045e\50\0\1\u045f\105\0"+ -+ "\1\u0460\110\0\1\u0461\116\0\1\u0462\45\0\1\u0463\155\0"+ -+ "\1\u0464\76\0\1\u0465\155\0\1\u0466\43\0\1\u0467\115\0"+ -+ "\1\u0468\110\0\1\u0469\50\0\1\u046a\155\0\1\u046b\113\0"+ -+ "\1\u046c\40\0\1\u046d\163\0\1\u046e\70\0\1\u046f\125\0"+ -+ "\1\u0470\137\0\1\u0471\110\0\1\u0472\51\0\1\u0473\101\0"+ -+ "\1\u0474\124\0\1\u0475\76\0\1\u0476\115\0\1\u0477\120\0"+ -+ "\1\u0478\73\0\1\u0479\154\0\1\u047a\110\0\1\u047b\110\0"+ -+ "\1\u047c\56\0\1\u047d\100\0\1\u047e\104\0\1\u047f\132\0"+ -+ "\1\u0480\73\0\1\u0481\105\0\1\u0482\112\0\1\u0483\120\0"+ -+ "\1\u0484\76\0\1\u0485\126\0\1\u0486\71\0\1\u0487\123\0"+ -+ "\1\u0488\76\0\1\u0489\126\0\1\u048a\50\0\1\u048b\110\0"+ -+ "\1\u048c\152\0\1\u048d\70\0\1\u048e\110\0\1\u048f\110\0"+ -+ "\1\u0490\155\0\1\u0491\55\0\1\u0492\76\0\1\u0493\66\0"+ -+ "\1\u0494\110\0\1\u0495\110\0\1\u0496\132\0\1\u0497\137\0"+ -+ "\1\u0498\64\0\1\u0499\52\0\1\u049a\145\0\1\u049b\106\0"+ -+ "\1\u049c\154\0\1\u049d\44\0\1\u049e\113\0\1\u049f\110\0"+ -+ "\1\u04a0\121\0\1\u04a1\110\0\1\u04a2\101\0\1\u04a3\106\0"+ -+ "\1\u04a4\117\0\1\u04a5\143\0\1\u04a6\41\0\1\u04a7\117\0"+ -+ "\1\u04a8\123\0\1\u04a9\72\0\1\u04aa\113\0\1\u04ab\101\0"+ -+ "\1\u04ac\156\0\1\u04ad\43\0\1\u04ae\110\0\1\u04af\155\0"+ -+ "\1\u04b0\51\0\1\u04b1\61\0\1\u04b2\130\0\1\u04b3\114\0"+ -+ "\1\u04b4\116\0\1\u04b5\100\0\1\u04b6\106\0\1\u04b7\114\0"+ -+ "\1\u04b8\116\0\1\u04b9\102\0\1\u04ba\105\0\1\u04bb\114\0"+ -+ "\1\u04bc\107\0\1\u04bd\53\0\1\u04be\172\0\1\u04bf\63\0"+ -+ "\1\u04c0\111\0\1\u04c1\63\0\1\u04c2\176\0\1\u04c3\60\0"+ -+ "\1\u04c4\52\0\1\u04c5\134\0\1\u04c6\111\0\1\u04c7\151\0"+ -+ "\1\u04c8\110\0\1\u04c9\11\0\1\u04ca\142\0\1\u04cb\155\0"+ -+ "\1\u04cc\110\0\1\u04cd\56\0\1\u04ce\43\0\1\u04cf\142\0"+ -+ "\1\u04d0\155\0\1\u04d1\43\0\1\u04d2\155\0\1\u04d3\110\0"+ -+ "\1\u04d4\43\0\1\u04d5\67\0\1\u04d6\132\0\1\u04d7\154\0"+ -+ "\1\u04d8\43\0\1\u04d9\67\0\1\u04da\110\0\1\u04db\144\0"+ -+ "\1\u04dc\120\0\1\u04dd\44\0\1\u04de\110\0\1\u04df\132\0"+ -+ "\1\u04e0\125\0\1\u04e1\137\0\1\u04e2\22\0\1\u04e3\146\0"+ -+ "\1\u04e4\52\0\1\u04e5\110\0\1\u04e6\176\0\1\u04e7\11\0"+ -+ "\1\u04e8\121\0\1\u04e9\176\0\1\u04ea\44\0\1\u04eb\155\0"+ -+ "\1\u04ec\46\0\1\u04ed\123\0\1\u04ee\50\0\1\u04ef\132\0"+ -+ "\1\u04f0\66\0\1\u04f1\144\0\1\u04f2\54\0\1\u04f3\130\0"+ -+ "\1\u04f4\127\0\1\u04f5\75\0\1\u04f6\113\0\1\u04f7\50\0"+ -+ "\1\u04f8\143\0\1\u04f9\113\0\1\u04fa\117\0\1\u04fb\142\0"+ -+ "\1\u04fc\46\0\1\u04fd\120\0\1\u04fe\74\0\1\u04ff\111\0"+ -+ "\1\u0500\113\0\1\u0501\64\0\1\u0502\176\0\1\u0503\44\0"+ -+ "\1\u0504\113\0\1\u0505\151\0\1\u0506\73\0\1\u0507\37\0"+ -+ "\1\u0508\130\0\1\u0509\111\0\1\u050a\67\0\1\u050b\176\0"+ -+ "\1\u050c\47\0\1\u050d\151\0\1\u050e\22\0\1\u050f\131\0"+ -+ "\1\u0510\67\0\1\u0511\176\0\1\u0512\22\0\1\u0513\71\0"; - - private static int [] zzUnpackTrans() { -- int [] result = new int[48777]; -+ int [] result = new int[82490]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; -@@ -1518,28 +1783,34 @@ - "\3\0\6\1\1\0\1\11\1\0\1\1\6\0\2\11"+ - "\1\0\1\1\4\0\1\11\1\0\1\1\1\11\1\1"+ - "\1\11\3\0\42\1\3\0\2\1\1\0\1\11\1\1"+ -- "\14\0\1\11\1\1\3\0\46\1\2\11\1\0\2\1"+ -- "\1\0\1\1\13\0\1\1\5\0\11\1\1\0\31\1"+ -- "\1\11\2\1\7\0\2\1\10\0\1\1\1\11\3\0"+ -- "\12\1\1\0\17\1\1\0\7\1\6\0\2\1\3\0"+ -+ "\15\0\1\11\1\1\3\0\46\1\2\11\1\0\2\1"+ -+ "\1\0\1\1\14\0\1\1\5\0\11\1\1\0\31\1"+ -+ "\1\11\2\1\10\0\2\1\10\0\1\1\1\11\3\0"+ -+ "\12\1\1\0\17\1\1\0\7\1\7\0\2\1\3\0"+ - "\1\1\6\0\1\1\1\11\4\0\13\1\4\0\22\1"+ -- "\1\11\6\0\1\1\6\0\1\1\13\0\10\1\3\0"+ -- "\15\1\1\0\2\1\1\0\5\1\4\0\2\11\2\1"+ -+ "\1\11\7\0\1\1\6\0\1\1\13\0\10\1\3\0"+ -+ "\15\1\1\0\2\1\1\0\5\1\5\0\2\11\2\1"+ - "\4\0\2\1\7\0\1\1\1\11\1\0\12\1\1\0"+ -- "\1\1\1\0\7\1\2\0\1\1\1\0\2\1\2\0"+ -+ "\1\1\1\0\7\1\2\0\1\1\1\0\2\1\3\0"+ - "\1\11\2\0\1\1\2\0\2\1\4\0\1\1\2\0"+ - "\2\1\7\0\4\1\1\0\1\1\1\0\1\1\1\0"+ - "\3\1\2\0\11\1\1\0\1\1\3\0\1\1\1\0"+ -- "\2\1\3\0\1\11\1\0\4\1\3\0\4\1\3\0"+ -+ "\2\1\20\0\1\11\1\0\4\1\3\0\4\1\3\0"+ - "\1\1\1\11\1\0\4\1\3\0\2\1\2\0\10\1"+ -- "\12\0\3\1\5\0\3\1\1\0\1\1\1\11\1\0"+ -- "\6\1\3\0\10\1\2\0\2\11\4\0\1\1\3\0"+ -+ "\41\0\3\1\5\0\3\1\1\0\1\1\1\11\1\0"+ -+ "\6\1\3\0\10\1\33\0\2\11\4\0\1\1\3\0"+ - "\2\1\1\11\1\1\1\0\1\1\1\11\1\0\5\1"+ -- "\1\0\2\1\1\0\1\1\3\0\1\1\2\0\1\1"+ -- "\1\11\2\1\10\0\1\11\3\1"; -+ "\1\0\2\1\1\0\1\1\35\0\1\1\2\0\1\1"+ -+ "\1\11\2\1\74\0\1\11\3\1\51\0\1\11\44\0"+ -+ "\1\11\62\0\1\11\14\0\1\11\57\0\2\11\7\0"+ -+ "\3\11\33\0\1\11\17\0\1\11\2\0\1\11\20\0"+ -+ "\1\11\3\0\2\11\2\0\2\11\3\0\1\11\1\0"+ -+ "\2\11\2\0\1\11\5\0\1\11\1\0\1\11\1\0"+ -+ "\1\11\16\0\1\11\5\0\1\11\2\0\1\11\3\0"+ -+ "\1\11\1\0\1\11\1\0\1\11"; - - private static int [] zzUnpackAttribute() { -- int [] result = new int[826]; -+ int [] result = new int[1299]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; -@@ -1603,6 +1874,8 @@ - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - -+ /** denotes if the user-EOF-code has already been executed */ -+ private boolean zzEOFDone; - - /** the stack of open (nested) input streams to read from */ - private java.util.Stack zzStreams = new java.util.Stack(); -@@ -1621,6 +1894,7 @@ - int yycolumn; - char [] zzBuffer; - boolean zzAtEOF; -+ boolean zzEOFDone; - - /** sets all values stored in this class */ - ZzFlexStreamInfo(java.io.Reader zzReader, int zzEndRead, int zzStartRead, -@@ -1633,14 +1907,12 @@ - this.zzMarkedPos = zzMarkedPos; - this.zzBuffer = zzBuffer; - this.zzAtEOF = zzAtEOF; -+ this.zzEOFDone = zzEOFDone; - this.yyline = yyline; - this.yycolumn = yycolumn; - } - } - -- /** denotes if the user-EOF-code has already been executed */ -- private boolean zzEOFDone; -- - /* user code: */ - int balance = 0; - int commentbalance = 0; -@@ -1924,6 +2196,7 @@ - zzCurrentPos = s.zzCurrentPos; - zzMarkedPos = s.zzMarkedPos ; - zzAtEOF = s.zzAtEOF; -+ zzEOFDone = s.zzEOFDone; - yyline = s.yyline; - yycolumn = s.yycolumn; - } -@@ -1955,6 +2228,7 @@ - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; -+ zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; -@@ -2229,11 +2503,19 @@ - case 118: - { cupDebug = true; - } -- case 147: break; -+ case 177: break; -+ case 175: -+ { return symbol(UNICODE_FINAL_QUOTE_PUNCTUATION); -+ } -+ case 178: break; -+ case 168: -+ { return symbol(UNICODE_DASH_PUNCTUATION); -+ } -+ case 179: break; - case 122: - { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE); - } -- case 148: break; -+ case 180: break; - case 113: - { File f = new File(yytext().substring(9).trim()); - if ( !f.canRead() ) -@@ -2251,146 +2533,166 @@ - throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); - } - } -- case 149: break; -+ case 181: break; - case 88: - { return symbol(FULL); - } -- case 150: break; -+ case 182: break; -+ case 158: -+ { return symbol(UNICODE_LINE_SEPARATOR); -+ } -+ case 183: break; - case 92: - { return symbol(ASCII); - } -- case 151: break; -+ case 184: break; - case 21: - { string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT); - } -- case 152: break; -+ case 185: break; - case 142: - { return symbol(UPPERCLASS); - } -- case 153: break; -+ case 186: break; - case 34: - { return symbol(COMMA); - } -- case 154: break; -+ case 187: break; - case 61: - { return symbol(CHAR,new Character('\f')); - } -- case 155: break; -+ case 188: break; - case 111: - { throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline); - } -- case 156: break; -+ case 189: break; -+ case 153: -+ { return symbol(UNICODE_OTHER_NUMBER); -+ } -+ case 190: break; - case 104: - { throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION); - } -- case 157: break; -+ case 191: break; - case 143: - { return symbol(LOWERCLASS); - } -- case 158: break; -+ case 192: break; -+ case 176: -+ { return symbol(UNICODE_INITIAL_QUOTE_PUNCTUATION); -+ } -+ case 193: break; - case 72: - { string.append('\r'); - } -- case 159: break; -+ case 194: break; - case 43: - { return symbol(HAT); - } -- case 160: break; -+ case 195: break; - case 48: - { yybegin(MACROS); ctorArgs.add(yytext().trim()); - } -- case 161: break; -+ case 196: break; - case 1: - { return symbol(EOF); - } -- case 162: break; -+ case 197: break; - case 59: - { return symbol(CHAR,new Character('\t')); - } -- case 163: break; -+ case 198: break; - case 145: - { eofclose = false; - } -- case 164: break; -+ case 199: break; - case 103: - { isPublic = true; - } -- case 165: break; -+ case 200: break; -+ case 164: -+ { return symbol(UNICODE_UPPERCASE_LETTER); -+ } -+ case 201: break; - case 112: - { actionText.setLength(0); yybegin(JAVA_CODE); - Symbol s = symbol_countUpdate(EOFRULE, null); - action_line = s.left+1; - return s; - } -- case 166: break; -+ case 202: break; - case 40: - { balance++; return symbol(OPENCLASS); - } -- case 167: break; -+ case 203: break; -+ case 147: -+ { return symbol(UNICODE_FORMAT); -+ } -+ case 204: break; - case 11: - { yybegin(REGEXP); - } -- case 168: break; -+ case 205: break; - case 12: - { yybegin(STATES); return symbol_countUpdate(LESSTHAN, null); - } -- case 169: break; -+ case 206: break; - case 68: - { string.append( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8)); - } -- case 170: break; -+ case 207: break; - case 62: - { return symbol(CHAR,new Character('\b')); - } -- case 171: break; -+ case 208: break; - case 39: - { throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn); - } -- case 172: break; -+ case 209: break; - case 5: - { states.insert(yytext(),inclusive_states); - } -- case 173: break; -+ case 210: break; - case 70: - { string.append('\n'); - } -- case 174: break; -+ case 211: break; - case 10: - { yybegin(REGEXP); return symbol(EQUALS); - } -- case 175: break; -+ case 212: break; - case 146: - { return symbol(JLETTERDIGITCLASS); - } -- case 176: break; -+ case 213: break; - case 19: - { return symbol(STAR); - } -- case 177: break; -+ case 214: break; - case 42: - { string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT); - } -- case 178: break; -+ case 215: break; - case 116: - { isAbstract = true; - } -- case 179: break; -+ case 216: break; - case 75: - { yypushback(1); yycolumn--; return symbol(CHAR, new Character(yytext().charAt(0))); - } -- case 180: break; -+ case 217: break; - case 114: - { lexThrow = concExc(lexThrow,yytext().substring(8).trim()); - } -- case 181: break; -+ case 218: break; - case 109: - { throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline); - } -- case 182: break; -+ case 219: break; - case 93: - { packed = false; useRowMap = true; - } -- case 183: break; -+ case 220: break; - case 87: - { cupCompatible = true; - isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner"); -@@ -2402,250 +2704,298 @@ - eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);"; - if (!Options.jlex) eofclose = true; - } -- case 184: break; -+ case 221: break; -+ case 171: -+ { return symbol(UNICODE_PARAGRAPH_SEPARATOR); -+ } -+ case 222: break; - case 30: - { bolUsed = true; return symbol(HAT); - } -- case 185: break; -+ case 223: break; - case 4: - { throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn); - } -- case 186: break; -+ case 224: break; - case 35: - { yybegin(REGEXP); return symbol(MORETHAN); - } -- case 187: break; -+ case 225: break; - case 100: - { packed = false; useRowMap = false; - } -- case 188: break; -+ case 226: break; - case 119: - { caseless = true; - } -- case 189: break; -+ case 227: break; - case 38: - { yybegin(nextState); return symbol(STRING, string.toString()); - } -- case 190: break; -+ case 228: break; - case 76: - { return symbol(REPEAT, new Integer(yytext().substring(1).trim())); - } -- case 191: break; -+ case 229: break; - case 13: - { return symbol_countUpdate(RBRACE, null); - } -- case 192: break; -+ case 230: break; - case 139: - { scanErrorException = yytext().substring(11).trim(); - } -- case 193: break; -+ case 231: break; - case 141: - { lexThrow = concExc(lexThrow,yytext().substring(12).trim()); - } -- case 194: break; -+ case 232: break; - case 84: - { return symbol(MACROUSE, yytext().substring(1,yytext().length()-1)); - } -- case 195: break; -+ case 233: break; - case 2: - { /* ignore */ - } -- case 196: break; -+ case 234: break; -+ case 150: -+ { return symbol(UNICODE_UNASSIGNED); -+ } -+ case 235: break; -+ case 156: -+ { return symbol(UNICODE_LETTER_NUMBER); -+ } -+ case 236: break; - case 127: - { throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline); - } -- case 197: break; -+ case 237: break; - case 47: - { throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn); - } -- case 198: break; -+ case 238: break; -+ case 161: -+ { return symbol(UNICODE_CURRENCY_SYMBOL); -+ } -+ case 239: break; - case 108: - { throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline); - } -- case 199: break; -+ case 240: break; - case 31: - { actionText.append(yytext()); - } -- case 200: break; -+ case 241: break; - case 83: - { string.append( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16)); - } -- case 201: break; -+ case 242: break; -+ case 174: -+ { return symbol(UNICODE_COMBINING_SPACING_MARK); -+ } -+ case 243: break; - case 107: - { notUnix = true; - } -- case 202: break; -+ case 244: break; - case 89: - { lineCount = true; - } -- case 203: break; -+ case 245: break; - case 136: - { initThrow = concExc(initThrow,yytext().substring(11).trim()); - } -- case 204: break; -+ case 246: break; - case 131: - { standalone = true; isInteger = true; - } -- case 205: break; -+ case 247: break; - case 52: - { nextState = MACROS; yybegin(COMMENT); - } -- case 206: break; -+ case 248: break; - case 25: - { return symbol(TILDE); - } -- case 207: break; -+ case 249: break; - case 37: - { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); - } -- case 208: break; -+ case 250: break; - case 110: - { className = yytext().substring(7).trim(); - } -- case 209: break; -+ case 251: break; - case 9: - { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); - } -- case 210: break; -+ case 252: break; -+ case 162: -+ { return symbol(UNICODE_MODIFIER_LETTER); -+ } -+ case 253: break; - case 55: - { nextState = REGEXPSTART; yybegin(COMMENT); - } -- case 211: break; -+ case 254: break; -+ case 173: -+ { return symbol(UNICODE_CONNECTOR_PUNCTUATION); -+ } -+ case 255: break; - case 16: - { return symbol(POINT); - } -- case 212: break; -+ case 256: break; - case 73: - { string.append('\f'); - } -- case 213: break; -+ case 257: break; - case 65: - { yybegin(REPEATEXP); return symbol(REPEAT, new Integer(yytext().trim().substring(1).trim())); - } -- case 214: break; -+ case 258: break; - case 80: - { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16))); - } -- case 215: break; -+ case 259: break; - case 140: - { initThrow = concExc(initThrow,string); yybegin(MACROS); - } -- case 216: break; -+ case 260: break; - case 135: - { eofThrow = concExc(eofThrow,string); yybegin(MACROS); - } -- case 217: break; -+ case 261: break; - case 71: - { string.append('\t'); - } -- case 218: break; -+ case 262: break; - case 67: - { string.append(yytext().charAt(1)); - } -- case 219: break; -+ case 263: break; - case 7: - { yybegin(MACROS); - } -- case 220: break; -+ case 264: break; - case 98: - { eofCode = conc(eofCode,string); yybegin(MACROS); - } -- case 221: break; -+ case 265: break; - case 56: - { return symbol(CHAR, new Character(yytext().charAt(1))); - } -- case 222: break; -+ case 266: break; -+ case 154: -+ { return symbol(UNICODE_OTHER_LETTER); -+ } -+ case 267: break; - case 28: - { return symbol(PLUS); - } -- case 223: break; -+ case 268: break; - case 101: - { columnCount = true; - } -- case 224: break; -+ case 269: break; - case 124: - { isExtending = yytext().substring(9).trim(); - } -- case 225: break; -+ case 270: break; - case 123: - { eofVal = string.toString(); yybegin(MACROS); - } -- case 226: break; -+ case 271: break; - case 36: - { string.append(yytext()); - } -- case 227: break; -+ case 272: break; - case 97: - { return symbol(UNICODE); - } -- case 228: break; -+ case 273: break; -+ case 152: -+ { return symbol(UNICODE_PRIVATE_USE); -+ } -+ case 274: break; -+ case 163: -+ { return symbol(UNICODE_MODIFIER_SYMBOL); -+ } -+ case 275: break; - case 74: - { string.append('\b'); - } -- case 229: break; -+ case 276: break; - case 24: - { return symbol(BANG); - } -- case 230: break; -+ case 277: break; - case 132: - { throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline); - } -- case 231: break; -+ case 278: break; - case 91: - { packed = true; useRowMap = true; - } -- case 232: break; -+ case 279: break; - case 26: - { return symbol(OPENBRACKET); - } -- case 233: break; -+ case 280: break; -+ case 155: -+ { return symbol(UNICODE_OTHER_SYMBOL); -+ } -+ case 281: break; - case 60: - { return symbol(CHAR,new Character('\r')); - } -- case 234: break; -+ case 282: break; - case 94: - { isFinal = true; - } -- case 235: break; -+ case 283: break; - case 27: - { return symbol(CLOSEBRACKET); - } -- case 236: break; -+ case 284: break; - case 86: - { isInteger = true; - } -- case 237: break; -+ case 285: break; -+ case 166: -+ { return symbol(UNICODE_TITLECASE_LETTER); -+ } -+ case 286: break; - case 20: - { return symbol(LOOKAHEAD); - } -- case 238: break; -+ case 287: break; - case 51: - { commentbalance++; - } -- case 239: break; -+ case 288: break; - case 49: - { t.start(); - yybegin(MACROS); - macroDefinition = true; - return symbol(USERCODE,userCode); - } -- case 240: break; -+ case 289: break; - case 44: - { return symbol(DASH); - } -- case 241: break; -+ case 290: break; - case 138: - { throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline); - } -- case 242: break; -+ case 291: break; - case 96: - { debugOption = true; - } -- case 243: break; -+ case 292: break; - case 64: - { nextState = REGEXP; yybegin(COMMENT); - } -- case 244: break; -+ case 293: break; - case 32: - { if (balance > 0) { - balance--; -@@ -2658,135 +3008,171 @@ - return symbol(ACTION, a); - } - } -- case 245: break; -+ case 294: break; -+ case 157: -+ { return symbol(UNICODE_ENCLOSING_MARK); -+ } -+ case 295: break; - case 29: - { return symbol(DOLLAR); - } -- case 246: break; -+ case 296: break; -+ case 169: -+ { return symbol(UNICODE_OTHER_PUNCTUATION); -+ } -+ case 297: break; - case 17: - { yybegin(CHARCLASS); return symbol(OPENCLASS); - } -- case 247: break; -+ case 298: break; - case 105: - { initCode = conc(initCode,string); yybegin(MACROS); - } -- case 248: break; -+ case 299: break; - case 69: - { string.append('\"'); - } -- case 249: break; -+ case 300: break; - case 137: - { isImplementing = concExc(isImplementing, yytext().substring(12).trim()); - } -- case 250: break; -+ case 301: break; - case 126: - { return symbol(LETTERCLASS); - } -- case 251: break; -+ case 302: break; -+ case 151: -+ { return symbol(UNICODE_MATH_SYMBOL); -+ } -+ case 303: break; - case 102: - { isInteger = true; - if (eofVal == null) - eofVal = "return 0;"; - eofclose = true; - } -- case 252: break; -+ case 304: break; - case 41: - { if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS); - } -- case 253: break; -+ case 305: break; - case 77: - { string.setLength(0); yybegin(COPY); - } -- case 254: break; -+ case 306: break; - case 8: - { return symbol(IDENT, yytext()); - } -- case 255: break; -+ case 307: break; - case 121: - { return symbol(DIGITCLASS); - } -- case 256: break; -+ case 308: break; - case 144: - { lexThrow = concExc(lexThrow,string); yybegin(MACROS); - } -- case 257: break; -+ case 309: break; - case 53: - { Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1); - } -- case 258: break; -+ case 310: break; - case 23: - { return symbol(BAR); - } -- case 259: break; -+ case 311: break; -+ case 148: -+ { return symbol(UNICODE_CONTROL); -+ } -+ case 312: break; - case 45: - { throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn); - } -- case 260: break; -+ case 313: break; - case 117: - { cupSymbol = yytext().substring(8).trim(); - if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline); - } -- case 261: break; -+ case 314: break; - case 58: - { return symbol(CHAR,new Character('\n')); - } -- case 262: break; -+ case 315: break; - case 95: - { isYYEOF = true; - } -- case 263: break; -+ case 316: break; - case 14: - { return symbol(CHAR, new Character(yytext().charAt(0))); - } -- case 264: break; -+ case 317: break; - case 99: - { tokenType = yytext().substring(6).trim(); - } -- case 265: break; -+ case 318: break; -+ case 160: -+ { return symbol(UNICODE_SPACE_SEPARATOR); -+ } -+ case 319: break; - case 33: - { balance++; actionText.append('{'); - } -- case 266: break; -+ case 320: break; - case 128: - { eofThrow = concExc(eofThrow,yytext().substring(10).trim()); - } -- case 267: break; -+ case 321: break; - case 63: - { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND); - } -- case 268: break; -+ case 322: break; - case 81: - { return symbol_countUpdate(MACROUSE, makeMacroIdent()); - } -- case 269: break; -+ case 323: break; -+ case 170: -+ { return symbol(UNICODE_START_PUNCTUATION); -+ } -+ case 324: break; -+ case 149: -+ { return symbol(UNICODE_SURROGATE); -+ } -+ case 325: break; - case 15: - { if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND); - } -- case 270: break; -+ case 326: break; - case 125: - { throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline); - } -- case 271: break; -+ case 327: break; -+ case 167: -+ { return symbol(UNICODE_LOWERCASE_LETTER); -+ } -+ case 328: break; - case 90: - { charCount = true; - } -- case 272: break; -+ case 329: break; -+ case 165: -+ { return symbol(UNICODE_NON_SPACING_MARK); -+ } -+ case 330: break; - case 130: - { visibility = "private"; Skeleton.makePrivate(); - } -- case 273: break; -+ case 331: break; - case 134: - { return symbol(JLETTERCLASS); - } -- case 274: break; -+ case 332: break; - case 22: - { yybegin(REGEXPSTART); return symbol(LBRACE); - } -- case 275: break; -+ case 333: break; - case 115: - { eofclose = true; - } -- case 276: break; -+ case 334: break; - case 66: - // lookahead expression with fixed lookahead length - yypushback(1); -@@ -2799,7 +3185,7 @@ - return symbol(NOACTION); - } - } -- case 277: break; -+ case 335: break; - case 82: - // lookahead expression with fixed lookahead length - yypushback(2); -@@ -2812,66 +3198,74 @@ - return symbol(NOACTION); - } - } -- case 278: break; -+ case 336: break; - case 46: - { yybegin(REGEXP); return symbol(RBRACE); - } -- case 279: break; -+ case 337: break; - case 78: - { inclusive_states = false; yybegin(STATELIST); - } -- case 280: break; -+ case 338: break; - case 120: - { bufferSize = Integer.parseInt(yytext().substring(8).trim()); - } -- case 281: break; -+ case 339: break; - case 106: - { isIntWrap = true; - } -- case 282: break; -+ case 340: break; - case 133: - { yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim()); - } -- case 283: break; -+ case 341: break; - case 3: - { userCode.append(yytext()); - } -- case 284: break; -+ case 342: break; -+ case 159: -+ { return symbol(UNICODE_END_PUNCTUATION); -+ } -+ case 343: break; - case 54: - { macroDefinition = false; yybegin(REGEXPSTART); return symbol(DELIMITER); - } -- case 285: break; -+ case 344: break; - case 129: - { functionName = yytext().substring(10).trim(); - } -- case 286: break; -+ case 345: break; - case 85: - { classCode = conc(classCode,string); yybegin(MACROS); - } -- case 287: break; -+ case 346: break; - case 18: - { return symbol(QUESTION); - } -- case 288: break; -+ case 347: break; - case 50: - { if (commentbalance > 0) - commentbalance--; - else - yybegin(nextState); - } -- case 289: break; -+ case 348: break; - case 79: - { inclusive_states = true; yybegin(STATELIST); - } -- case 290: break; -+ case 349: break; - case 57: - { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8))); - } -- case 291: break; -+ case 350: break; -+ case 172: -+ { return symbol(UNICODE_DECIMAL_DIGIT_NUMBER); -+ } -+ case 351: break; - case 6: - { - } -- case 292: break; -+ case 352: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; -@@ -2880,7 +3274,7 @@ - case STRING_CONTENT: { - throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); - } -- case 827: break; -+ case 1300: break; - case MACROS: { - if ( yymoreStreams() ) { - file = (File) files.pop(); -@@ -2889,35 +3283,35 @@ - else - throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); - } -- case 828: break; -+ case 1301: break; - case STATELIST: { - throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); - } -- case 829: break; -+ case 1302: break; - case CHARCLASS: { - throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); - } -- case 830: break; -+ case 1303: break; - case JAVA_CODE: { - throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1); - } -- case 831: break; -+ case 1304: break; - case REPEATEXP: { - throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); - } -- case 832: break; -+ case 1305: break; - case COMMENT: { - throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT); - } -- case 833: break; -+ case 1306: break; - case STATES: { - throw new ScannerException(file,ErrorMessages.EOF_IN_STATES); - } -- case 834: break; -+ case 1307: break; - case COPY: { - throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); - } -- case 835: break; -+ case 1308: break; - default: - { - if ( yymoreStreams() ) { -Index: jflex/src/JFlex/LexScan.flex -=================================================================== ---- jflex/src/JFlex/LexScan.flex (revision 433) -+++ jflex/src/JFlex/LexScan.flex Tue Dec 01 08:06:38 EST 2009 -@@ -463,6 +463,36 @@ - {WSPNL}*"[:digit:]" { return symbol(DIGITCLASS); } - {WSPNL}*"[:uppercase:]" { return symbol(UPPERCLASS); } - {WSPNL}*"[:lowercase:]" { return symbol(LOWERCLASS); } -+ {WSPNL}*"[:unicode_unassigned:]" { return symbol(UNICODE_UNASSIGNED); } -+ {WSPNL}*"[:unicode_uppercase_letter:]" { return symbol(UNICODE_UPPERCASE_LETTER); } -+ {WSPNL}*"[:unicode_lowercase_letter:]" { return symbol(UNICODE_LOWERCASE_LETTER); } -+ {WSPNL}*"[:unicode_titlecase_letter:]" { return symbol(UNICODE_TITLECASE_LETTER); } -+ {WSPNL}*"[:unicode_modifier_letter:]" { return symbol(UNICODE_MODIFIER_LETTER); } -+ {WSPNL}*"[:unicode_other_letter:]" { return symbol(UNICODE_OTHER_LETTER); } -+ {WSPNL}*"[:unicode_non_spacing_mark:]" { return symbol(UNICODE_NON_SPACING_MARK); } -+ {WSPNL}*"[:unicode_enclosing_mark:]" { return symbol(UNICODE_ENCLOSING_MARK); } -+ {WSPNL}*"[:unicode_combining_spacing_mark:]" { return symbol(UNICODE_COMBINING_SPACING_MARK); } -+ {WSPNL}*"[:unicode_decimal_digit_number:]" { return symbol(UNICODE_DECIMAL_DIGIT_NUMBER); } -+ {WSPNL}*"[:unicode_letter_number:]" { return symbol(UNICODE_LETTER_NUMBER); } -+ {WSPNL}*"[:unicode_other_number:]" { return symbol(UNICODE_OTHER_NUMBER); } -+ {WSPNL}*"[:unicode_space_separator:]" { return symbol(UNICODE_SPACE_SEPARATOR); } -+ {WSPNL}*"[:unicode_line_separator:]" { return symbol(UNICODE_LINE_SEPARATOR); } -+ {WSPNL}*"[:unicode_paragraph_separator:]" { return symbol(UNICODE_PARAGRAPH_SEPARATOR); } -+ {WSPNL}*"[:unicode_control:]" { return symbol(UNICODE_CONTROL); } -+ {WSPNL}*"[:unicode_format:]" { return symbol(UNICODE_FORMAT); } -+ {WSPNL}*"[:unicode_private_use:]" { return symbol(UNICODE_PRIVATE_USE); } -+ {WSPNL}*"[:unicode_surrogate:]" { return symbol(UNICODE_SURROGATE); } -+ {WSPNL}*"[:unicode_dash_punctuation:]" { return symbol(UNICODE_DASH_PUNCTUATION); } -+ {WSPNL}*"[:unicode_start_punctuation:]" { return symbol(UNICODE_START_PUNCTUATION); } -+ {WSPNL}*"[:unicode_end_punctuation:]" { return symbol(UNICODE_END_PUNCTUATION); } -+ {WSPNL}*"[:unicode_connector_punctuation:]" { return symbol(UNICODE_CONNECTOR_PUNCTUATION); } -+ {WSPNL}*"[:unicode_other_punctuation:]" { return symbol(UNICODE_OTHER_PUNCTUATION); } -+ {WSPNL}*"[:unicode_math_symbol:]" { return symbol(UNICODE_MATH_SYMBOL); } -+ {WSPNL}*"[:unicode_currency_symbol:]" { return symbol(UNICODE_CURRENCY_SYMBOL); } -+ {WSPNL}*"[:unicode_modifier_symbol:]" { return symbol(UNICODE_MODIFIER_SYMBOL); } -+ {WSPNL}*"[:unicode_other_symbol:]" { return symbol(UNICODE_OTHER_SYMBOL); } -+ {WSPNL}*"[:unicode_initial_quote_punctuation:]" { return symbol(UNICODE_INITIAL_QUOTE_PUNCTUATION); } -+ {WSPNL}*"[:unicode_final_quote_punctuation:]" { return symbol(UNICODE_FINAL_QUOTE_PUNCTUATION); } - } - - . { return symbol(CHAR, new Character(yytext().charAt(0))); } -Index: jflex/src/JFlex/LexParse.cup -=================================================================== ---- jflex/src/JFlex/LexParse.cup (revision 433) -+++ jflex/src/JFlex/LexParse.cup Tue Dec 01 08:13:35 EST 2009 -@@ -77,6 +77,96 @@ - case sym.LOWERCLASS: - return Character.isLowerCase(c); - -+ case sym.UNICODE_UNASSIGNED: -+ return Character.getType(c) == Character.UNASSIGNED; -+ -+ case sym.UNICODE_UPPERCASE_LETTER: -+ return Character.getType(c) == Character.UPPERCASE_LETTER; -+ -+ case sym.UNICODE_LOWERCASE_LETTER: -+ return Character.getType(c) == Character.LOWERCASE_LETTER; -+ -+ case sym.UNICODE_TITLECASE_LETTER: -+ return Character.getType(c) == Character.TITLECASE_LETTER; -+ -+ case sym.UNICODE_MODIFIER_LETTER: -+ return Character.getType(c) == Character.MODIFIER_LETTER; -+ -+ case sym.UNICODE_OTHER_LETTER: -+ return Character.getType(c) == Character.OTHER_LETTER; -+ -+ case sym.UNICODE_NON_SPACING_MARK: -+ return Character.getType(c) == Character.NON_SPACING_MARK; -+ -+ case sym.UNICODE_ENCLOSING_MARK: -+ return Character.getType(c) == Character.ENCLOSING_MARK; -+ -+ case sym.UNICODE_COMBINING_SPACING_MARK: -+ return Character.getType(c) == Character.COMBINING_SPACING_MARK; -+ -+ case sym.UNICODE_DECIMAL_DIGIT_NUMBER: -+ return Character.getType(c) == Character.DECIMAL_DIGIT_NUMBER; -+ -+ case sym.UNICODE_LETTER_NUMBER: -+ return Character.getType(c) == Character.LETTER_NUMBER; -+ -+ case sym.UNICODE_OTHER_NUMBER: -+ return Character.getType(c) == Character.OTHER_NUMBER; -+ -+ case sym.UNICODE_SPACE_SEPARATOR: -+ return Character.getType(c) == Character.SPACE_SEPARATOR; -+ -+ case sym.UNICODE_LINE_SEPARATOR: -+ return Character.getType(c) == Character.LINE_SEPARATOR; -+ -+ case sym.UNICODE_PARAGRAPH_SEPARATOR: -+ return Character.getType(c) == Character.PARAGRAPH_SEPARATOR; -+ -+ case sym.UNICODE_CONTROL: -+ return Character.getType(c) == Character.CONTROL; -+ -+ case sym.UNICODE_FORMAT: -+ return Character.getType(c) == Character.FORMAT; -+ -+ case sym.UNICODE_PRIVATE_USE: -+ return Character.getType(c) == Character.PRIVATE_USE; -+ -+ case sym.UNICODE_SURROGATE: -+ return Character.getType(c) == Character.SURROGATE; -+ -+ case sym.UNICODE_DASH_PUNCTUATION: -+ return Character.getType(c) == Character.DASH_PUNCTUATION; -+ -+ case sym.UNICODE_START_PUNCTUATION: -+ return Character.getType(c) == Character.START_PUNCTUATION; -+ -+ case sym.UNICODE_END_PUNCTUATION: -+ return Character.getType(c) == Character.END_PUNCTUATION; -+ -+ case sym.UNICODE_CONNECTOR_PUNCTUATION: -+ return Character.getType(c) == Character.CONNECTOR_PUNCTUATION; -+ -+ case sym.UNICODE_OTHER_PUNCTUATION: -+ return Character.getType(c) == Character.OTHER_PUNCTUATION; -+ -+ case sym.UNICODE_MATH_SYMBOL: -+ return Character.getType(c) == Character.MATH_SYMBOL; -+ -+ case sym.UNICODE_CURRENCY_SYMBOL: -+ return Character.getType(c) == Character.CURRENCY_SYMBOL; -+ -+ case sym.UNICODE_MODIFIER_SYMBOL: -+ return Character.getType(c) == Character.MODIFIER_SYMBOL; -+ -+ case sym.UNICODE_OTHER_SYMBOL: -+ return Character.getType(c) == Character.OTHER_SYMBOL; -+ -+ case sym.UNICODE_INITIAL_QUOTE_PUNCTUATION: -+ return Character.getType(c) == Character.INITIAL_QUOTE_PUNCTUATION; -+ -+ case sym.UNICODE_FINAL_QUOTE_PUNCTUATION: -+ return Character.getType(c) == Character.FINAL_QUOTE_PUNCTUATION; -+ - default: return false; - } - } -@@ -222,8 +312,17 @@ - MORETHAN, LBRACE, RBRACE, ASCII, FULL, UNICODE, REGEXPEND; - - terminal JLETTERCLASS, JLETTERDIGITCLASS, LETTERCLASS, DIGITCLASS, -- UPPERCLASS, LOWERCLASS, EOFRULE, NOACTION, LOOKAHEAD; -+ UPPERCLASS, LOWERCLASS, EOFRULE, NOACTION, LOOKAHEAD, -- -+ -+ UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER, UNICODE_TITLECASE_LETTER, -+ UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK, UNICODE_ENCLOSING_MARK, -+ UNICODE_COMBINING_SPACING_MARK, UNICODE_DECIMAL_DIGIT_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_OTHER_NUMBER, -+ UNICODE_SPACE_SEPARATOR, UNICODE_LINE_SEPARATOR, UNICODE_PARAGRAPH_SEPARATOR, UNICODE_CONTROL, UNICODE_FORMAT, -+ UNICODE_PRIVATE_USE, UNICODE_SURROGATE, UNICODE_DASH_PUNCTUATION, UNICODE_START_PUNCTUATION, -+ UNICODE_END_PUNCTUATION, UNICODE_CONNECTOR_PUNCTUATION, UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL, -+ UNICODE_CURRENCY_SYMBOL, UNICODE_MODIFIER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_INITIAL_QUOTE_PUNCTUATION, -+ UNICODE_FINAL_QUOTE_PUNCTUATION; -+ - terminal Action ACTION; - terminal String IDENT, USERCODE; - terminal Integer REPEAT; -@@ -645,4 +744,64 @@ - {: RESULT = makePreClass(sym.UPPERCLASS); :} - | LOWERCLASS - {: RESULT = makePreClass(sym.LOWERCLASS); :} -+ | UNICODE_UNASSIGNED -+ {: RESULT = makePreClass(sym.UNICODE_UNASSIGNED); :} -+ | UNICODE_UPPERCASE_LETTER -+ {: RESULT = makePreClass(sym.UNICODE_UPPERCASE_LETTER); :} -+ | UNICODE_LOWERCASE_LETTER -+ {: RESULT = makePreClass(sym.UNICODE_LOWERCASE_LETTER); :} -+ | UNICODE_TITLECASE_LETTER -+ {: RESULT = makePreClass(sym.UNICODE_TITLECASE_LETTER); :} -+ | UNICODE_MODIFIER_LETTER -+ {: RESULT = makePreClass(sym.UNICODE_MODIFIER_LETTER); :} -+ | UNICODE_OTHER_LETTER -+ {: RESULT = makePreClass(sym.UNICODE_OTHER_LETTER); :} -+ | UNICODE_NON_SPACING_MARK -+ {: RESULT = makePreClass(sym.UNICODE_NON_SPACING_MARK); :} -+ | UNICODE_ENCLOSING_MARK -+ {: RESULT = makePreClass(sym.UNICODE_ENCLOSING_MARK); :} -+ | UNICODE_COMBINING_SPACING_MARK -+ {: RESULT = makePreClass(sym.UNICODE_COMBINING_SPACING_MARK); :} -+ | UNICODE_DECIMAL_DIGIT_NUMBER -+ {: RESULT = makePreClass(sym.UNICODE_DECIMAL_DIGIT_NUMBER); :} -+ | UNICODE_LETTER_NUMBER -+ {: RESULT = makePreClass(sym.UNICODE_LETTER_NUMBER); :} -+ | UNICODE_OTHER_NUMBER -+ {: RESULT = makePreClass(sym.UNICODE_OTHER_NUMBER); :} -+ | UNICODE_SPACE_SEPARATOR -+ {: RESULT = makePreClass(sym.UNICODE_SPACE_SEPARATOR); :} -+ | UNICODE_LINE_SEPARATOR -+ {: RESULT = makePreClass(sym.UNICODE_LINE_SEPARATOR); :} -+ | UNICODE_PARAGRAPH_SEPARATOR -+ {: RESULT = makePreClass(sym.UNICODE_PARAGRAPH_SEPARATOR); :} -+ | UNICODE_CONTROL -+ {: RESULT = makePreClass(sym.UNICODE_CONTROL); :} -+ | UNICODE_FORMAT -+ {: RESULT = makePreClass(sym.UNICODE_FORMAT); :} -+ | UNICODE_PRIVATE_USE -+ {: RESULT = makePreClass(sym.UNICODE_PRIVATE_USE); :} -+ | UNICODE_SURROGATE -+ {: RESULT = makePreClass(sym.UNICODE_SURROGATE); :} -+ | UNICODE_DASH_PUNCTUATION -+ {: RESULT = makePreClass(sym.UNICODE_DASH_PUNCTUATION); :} -+ | UNICODE_START_PUNCTUATION -+ {: RESULT = makePreClass(sym.UNICODE_START_PUNCTUATION); :} -+ | UNICODE_END_PUNCTUATION -+ {: RESULT = makePreClass(sym.UNICODE_END_PUNCTUATION); :} -+ | UNICODE_CONNECTOR_PUNCTUATION -+ {: RESULT = makePreClass(sym.UNICODE_CONNECTOR_PUNCTUATION); :} -+ | UNICODE_OTHER_PUNCTUATION -+ {: RESULT = makePreClass(sym.UNICODE_OTHER_PUNCTUATION); :} -+ | UNICODE_MATH_SYMBOL -+ {: RESULT = makePreClass(sym.UNICODE_MATH_SYMBOL); :} -+ | UNICODE_CURRENCY_SYMBOL -+ {: RESULT = makePreClass(sym.UNICODE_CURRENCY_SYMBOL); :} -+ | UNICODE_MODIFIER_SYMBOL -+ {: RESULT = makePreClass(sym.UNICODE_MODIFIER_SYMBOL); :} -+ | UNICODE_OTHER_SYMBOL -+ {: RESULT = makePreClass(sym.UNICODE_OTHER_SYMBOL); :} -+ | UNICODE_INITIAL_QUOTE_PUNCTUATION -+ {: RESULT = makePreClass(sym.UNICODE_INITIAL_QUOTE_PUNCTUATION); :} -+ | UNICODE_FINAL_QUOTE_PUNCTUATION -+ {: RESULT = makePreClass(sym.UNICODE_FINAL_QUOTE_PUNCTUATION); :} - ; -Index: jflex/src/JFlex/sym.java -=================================================================== ---- jflex/src/JFlex/sym.java (revision 370) -+++ jflex/src/JFlex/sym.java Tue Dec 01 08:13:39 EST 2009 -@@ -1,7 +1,7 @@ - - //---------------------------------------------------- --// The following code was generated by CUP v0.10k --// Tue May 27 20:22:19 EST 2008 -+// The following code was generated by CUP v0.11a beta 20060608 -+// Tue Dec 01 08:13:38 EST 2009 - //---------------------------------------------------- - - package JFlex; -@@ -10,52 +10,82 @@ - public interface sym { - /* terminals */ - public static final int DELIMITER = 9; -- public static final int EOFRULE = 26; -- public static final int STRING_I = 46; -- public static final int CHAR = 40; -- public static final int CONCAT = 45; -- public static final int MACROUSE = 42; -- public static final int LOWERCLASS = 25; -- public static final int EQUALS = 10; -- public static final int CCLASSNOT = 44; -- public static final int REPEAT = 32; -- public static final int TILDE = 39; -- public static final int CHAR_I = 47; -- public static final int STAR = 33; -- public static final int BAR = 35; -+ public static final int UNICODE_SPACE_SEPARATOR = 41; -+ public static final int UNICODE_OTHER_LETTER = 34; -+ public static final int USERCODE = 61; -+ public static final int UNICODE_ENCLOSING_MARK = 36; -+ public static final int REGEXPEND = 19; -+ public static final int CCLASSNOT = 74; -+ public static final int UNICODE = 18; -+ public static final int UNICODE_CURRENCY_SYMBOL = 54; -+ public static final int UNICODE_LETTER_NUMBER = 39; -+ public static final int UNICODE_START_PUNCTUATION = 49; -+ public static final int UNICODE_OTHER_SYMBOL = 56; -+ public static final int UNICODE_COMBINING_SPACING_MARK = 37; -+ public static final int UNICODE_FINAL_QUOTE_PUNCTUATION = 58; -+ public static final int UNICODE_UNASSIGNED = 29; -+ public static final int COMMA = 11; -+ public static final int RBRACE = 15; -+ public static final int UNICODE_UPPERCASE_LETTER = 30; -+ public static final int UNICODE_INITIAL_QUOTE_PUNCTUATION = 57; -+ public static final int LBRACE = 14; -+ public static final int UNICODE_SURROGATE = 47; -+ public static final int ACTION = 59; -+ public static final int CHAR_I = 77; -+ public static final int UNICODE_DECIMAL_DIGIT_NUMBER = 38; -+ public static final int CLOSECLASS = 7; -+ public static final int TILDE = 69; -+ public static final int UNICODE_NON_SPACING_MARK = 35; -+ public static final int DOLLAR = 5; -+ public static final int UNICODE_END_PUNCTUATION = 50; - public static final int FULL = 17; -- public static final int LOOKAHEAD = 28; - public static final int LESSTHAN = 12; -- public static final int BANG = 38; -- public static final int COMMA = 11; -+ public static final int UNICODE_DASH_PUNCTUATION = 48; -+ public static final int CLOSEBRACKET = 3; -+ public static final int PLUS = 64; -+ public static final int QUESTION = 66; -+ public static final int CHAR = 70; -+ public static final int NOACTION = 27; -+ public static final int STAR = 63; -+ public static final int UNICODE_CONNECTOR_PUNCTUATION = 51; -+ public static final int CONCAT = 75; -+ public static final int ASCII = 16; -+ public static final int MORETHAN = 13; -+ public static final int OPENCLASS = 6; -+ public static final int POINT = 67; - public static final int JLETTERDIGITCLASS = 21; -- public static final int PLUS = 34; -- public static final int USERCODE = 31; -+ public static final int EOFRULE = 26; - public static final int EOF = 0; -- public static final int error = 1; -- public static final int DASH = 8; -- public static final int CLOSEBRACKET = 3; -- public static final int HAT = 4; -+ public static final int UNICODE_MODIFIER_LETTER = 33; -+ public static final int BANG = 68; -+ public static final int UPPERCLASS = 24; - public static final int JLETTERCLASS = 20; -- public static final int IDENT = 30; -- public static final int ACTION = 29; -- public static final int CLOSECLASS = 7; -- public static final int DIGITCLASS = 23; -- public static final int LBRACE = 14; -- public static final int REGEXPEND = 19; -- public static final int OPENCLASS = 6; -+ public static final int REPEAT = 62; -+ public static final int LOOKAHEAD = 28; -+ public static final int UNICODE_OTHER_NUMBER = 40; -+ public static final int UNICODE_PRIVATE_USE = 46; -+ public static final int UNICODE_MATH_SYMBOL = 53; - public static final int OPENBRACKET = 2; -- public static final int POINT = 37; -+ public static final int HAT = 4; -+ public static final int IDENT = 60; -+ public static final int error = 1; -+ public static final int UNICODE_PARAGRAPH_SEPARATOR = 43; -+ public static final int LOWERCLASS = 25; -+ public static final int STRING_I = 76; -+ public static final int UNICODE_MODIFIER_SYMBOL = 55; -+ public static final int UNICODE_CONTROL = 44; -+ public static final int UNICODE_OTHER_PUNCTUATION = 52; -+ public static final int DIGITCLASS = 23; -+ public static final int UNICODE_FORMAT = 45; -+ public static final int UNICODE_TITLECASE_LETTER = 32; -+ public static final int DASH = 8; -+ public static final int MACROUSE = 72; -+ public static final int STRING = 71; -+ public static final int CCLASS = 73; -+ public static final int UNICODE_LOWERCASE_LETTER = 31; - public static final int LETTERCLASS = 22; -- public static final int MORETHAN = 13; -- public static final int DOLLAR = 5; -- public static final int RBRACE = 15; -- public static final int STRING = 41; -- public static final int QUESTION = 36; -- public static final int UPPERCLASS = 24; -- public static final int NOACTION = 27; -- public static final int CCLASS = 43; -- public static final int ASCII = 16; -- public static final int UNICODE = 18; -+ public static final int BAR = 65; -+ public static final int UNICODE_LINE_SEPARATOR = 42; -+ public static final int EQUALS = 10; - } - -Index: tex/manual.tex -=================================================================== ---- tex/manual.tex (revision 431) -+++ tex/manual.tex Tue Dec 01 08:11:42 EST 2009 -@@ -1318,7 +1318,37 @@ - | '[:letter:]' - | '[:digit:]' - | '[:uppercase:]' -- | '[:lowercase:]' -+ | '[:lowercase:]' -+ | '[:unicode_unassigned:]' -+ | '[:unicode_uppercase_letter:]' -+ | '[:unicode_lowercase_letter:]' -+ | '[:unicode_titlecase_letter:]' -+ | '[:unicode_modifier_letter:]' -+ | '[:unicode_other_letter:]' -+ | '[:unicode_non_spacing_mark:]' -+ | '[:unicode_enclosing_mark:]' -+ | '[:unicode_combining_spacing_mark:]' -+ | '[:unicode_decimal_digit_number:]' -+ | '[:unicode_letter_number:]' -+ | '[:unicode_other_number:]' -+ | '[:unicode_space_separator:]' -+ | '[:unicode_line_separator:]' -+ | '[:unicode_paragraph_separator:]' -+ | '[:unicode_control:]' -+ | '[:unicode_format:]' -+ | '[:unicode_private_use:]' -+ | '[:unicode_surrogate:]' -+ | '[:unicode_dash_punctuation:]' -+ | '[:unicode_start_punctuation:]' -+ | '[:unicode_end_punctuation:]' -+ | '[:unicode_connector_punctuation:]' -+ | '[:unicode_other_punctuation:]' -+ | '[:unicode_math_symbol:]' -+ | '[:unicode_currency_symbol:]' -+ | '[:unicode_modifier_symbol:]' -+ | '[:unicode_other_symbol:]' -+ | '[:unicode_initial_quote_punctuation:]' -+ | '[:unicode_final_quote_punctuation:]' - | '.' - \end{verbatim} - %$ -@@ -1467,6 +1497,7 @@ - [:digit:] isDigit() - [:uppercase:] isUpperCase() - [:lowercase:] isLowerCase() -+[:unicode_math_symbol:] getType() == Character.MATH_SYMBOL - \end{verbatim} - - They are especially useful when working with the unicode character set. diff --git a/tools/lexer/jflex-1.4/lib/JFlex.jar b/tools/lexer/jflex-1.4/lib/JFlex.jar deleted file mode 100644 index e83294a7b6f0..000000000000 Binary files a/tools/lexer/jflex-1.4/lib/JFlex.jar and /dev/null differ diff --git a/tools/lexer/jflex-1.4/lib/jflex-mode.el b/tools/lexer/jflex-1.4/lib/jflex-mode.el deleted file mode 100644 index 2af59477d38b..000000000000 --- a/tools/lexer/jflex-1.4/lib/jflex-mode.el +++ /dev/null @@ -1,114 +0,0 @@ -; -*- Mode: Emacs-Lisp; -*- - -;;; jflex-mode - -;;; author: Gerwin Klein -;;; $Revision$, $Date$ - -(require 'derived) -(require 'font-lock) - -(define-derived-mode jflex-mode java-mode "JFlex" - "Major mode for editing JFlex files" - - ;; set the indentation - (setq c-basic-offset 2) - - (c-set-offset 'knr-argdecl-intro 0) - (c-set-offset 'topmost-intro-cont 0) - - ;; remove auto and hungry anything - (c-toggle-auto-hungry-state -1) - (c-toggle-auto-state -1) - (c-toggle-hungry-state -1) - - (use-local-map jflex-mode-map) - - ;; get rid of that damn electric-brace - (define-key jflex-mode-map "{" 'self-insert-command) - (define-key jflex-mode-map "}" 'self-insert-command) - - (define-key jflex-mode-map [tab] 'jflex-indent-command) - - ) - -(defalias 'jflex-indent-command 'c-indent-command) - -(defconst jflex-font-lock-keywords - (append - '( - ("^%%" . font-lock-reference-face) - "^%{" - "^%init{" - "^%initthrow{" - "^%eof{" - "^%eofthrow{" - "^%yylexthrow{" - "^%eofval{" - "^%}" - "^%init}" - "^%initthrow}" - "^%eof}" - "^%eofthrow}" - "^%yylexthrow}" - "^%eofval}" - "^%standalone" - "^%scanerror" - "^%switch" - "^%states" ; fixme: state identifiers - "^%state" - "^%s" - "^%xstates" - "^%xstate" - "^%x" - "^%char" - "^%line" - "^%column" - "^%byaccj" - "^%cupsym" - "^%cupdebug" - "^%cup" - "^%eofclose" - "^%class" - "^%function" - "^%type" - "^%integer" - "^%intwrap" - "^%int" - "^%yyeof" - "^%notunix" - "^%7bit" - "^%full" - "^%8bit" - "^%unicode" - "^%16bit" - "^%caseless" - "^%ignorecase" - "^%implements" - "^%extends" - "^%public" - "^%apiprivate" - "^%final" - "^%abstract" - "^%debug" - "^%table" - "^%pack" - "^%include" - "^%buffer" - "^%initthrow" - "^%eofthrow" - "^%yylexthrow" - "^%throws" - ("%[%{}0-9a-zA-Z]+" . font-lock-warning-face) ; errors - ("{[ \t]*[a-zA-Z][0-9a-zA-Z_]+[ \t]*}" . font-lock-variable-name-face) ; macro uses - "<>" ; special <> symbol - ("<[ \t]*[a-zA-Z][0-9a-zA-Z_]+[ \t]*\\(,[ \t]*[a-zA-Z][0-9a-zA-Z_]+[ \t]*\\)*>" . font-lock-type-face) ; lex state list - ) - java-font-lock-keywords-2) - "JFlex keywords for font-lock mode") - -(put 'jflex-mode 'font-lock-defaults - '(jflex-font-lock-keywords - nil nil ((?_ . "w")) beginning-of-defun)) - -(provide 'jflex-mode) diff --git a/tools/lexer/jflex-1.4/lib/jflex.vim b/tools/lexer/jflex-1.4/lib/jflex.vim deleted file mode 100644 index c612ea0ec744..000000000000 --- a/tools/lexer/jflex-1.4/lib/jflex.vim +++ /dev/null @@ -1,149 +0,0 @@ -" Vim syntax file -" Language: JFlex -" Maintainer: Gerwin Klein -" Last Change: $Revision$, $Date$ - -" Thanks to Michael Brailsford for help and suggestions - -" Quit when a syntax file was already loaded {{{ -if exists("b:current_syntax") - finish -endif -"}}} - -" Include java syntax {{{ -if version >= 600 - runtime! syntax/java.vim - unlet b:current_syntax -else - so $VIMRUNTIME/syntax/java.vim -endif -"}}} - -syn cluster jflexOptions contains=jflexOption,jflexCodeInclude,jflexComment,jflexMacroIdent,jflexMacroRegExp,jflexOptionError -syn cluster jflexRules contains=jflexRule,jflexComment,jflexActionCode,jflexRuleStates,jflexRegExp - -" java code section -syn region jflexStart start="/\*\|//\|import\|package\|class"me=s end="^%%"me=e-2 contains=@javaTop nextgroup=jflexOptionReg - -" %% -" options -syn region jflexOptionReg matchgroup=jflexSectionSep start="^%%" end="^%%"me=e-2 contains=@jflexOptions nextgroup=jflexRulesReg - -syn match jflexOptionError "%\i*" contained - -syn match jflexOption "^\(%s\|%x\)" contained -syn match jflexOption "^%state" contained -syn match jflexOption "^%states" contained -syn match jflexOption "^%xstate" contained -syn match jflexOption "^%xstates" contained -syn match jflexOption "^%char" contained -syn match jflexOption "^%line" contained -syn match jflexOption "^%column" contained -syn match jflexOption "^%byaccj" contained -syn match jflexOption "^%cup" contained -syn match jflexOption "^%cupsym" contained -syn match jflexOption "^%cupdebug" contained -syn match jflexOption "^%eofclose" contained -syn match jflexOption "^%class" contained -syn match jflexOption "^%function" contained -syn match jflexOption "^%type" contained -syn match jflexOption "^%integer" contained -syn match jflexOption "^%int" contained -syn match jflexOption "^%intwrap" contained -syn match jflexOption "^%yyeof" contained -syn match jflexOption "^%notunix" contained -syn match jflexOption "^%7bit" contained -syn match jflexOption "^%8bit" contained -syn match jflexOption "^%full" contained -syn match jflexOption "^%16bit" contained -syn match jflexOption "^%unicode" contained -syn match jflexOption "^%caseless" contained -syn match jflexOption "^%ignorecase" contained -syn match jflexOption "^%implements" contained -syn match jflexOption "^%extends" contained -syn match jflexOption "^%public" contained -syn match jflexOption "^%apiprivate" contained -syn match jflexOption "^%final" contained -syn match jflexOption "^%abstract" contained -syn match jflexOption "^%debug" contained -syn match jflexOption "^%standalone" contained -syn match jflexOption "^%switch" contained -syn match jflexOption "^%table" contained -syn match jflexOption "^%pack" contained -syn match jflexOption "^%include" contained -syn match jflexOption "^%buffer" contained -syn match jflexOption "^%initthrow" contained -syn match jflexOption "^%eofthrow" contained -syn match jflexOption "^%yylexthrow" contained -syn match jflexOption "^%throws" contained -syn match jflexOption "^%scannerror" contained - -syn match jflexMacroIdent "\I\i*\s*="me=e-1 contained nextgroup=jflexMacroRegExp - -syn region jflexMacroRegExp matchgroup=jflexOperator start="=" end="^\(%\|\I\|\i\|/\)"me=e-1 contains=NONE contained - -syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%{" end="^%}" contains=@javaTop contained -syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%init{" end="^%init}" contains=@javaTop contained -syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%initthrow{" end="^%initthrow}" contains=@javaTop contained -syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%eof{" end="^%eof}" contains=@javaTop contained -syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%eofthrow{" end="^%eofthrow}" contains=@javaTop contained -syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%yylexthrow{" end="^%yylexthrow}" contains=@javaTop contained -syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%eofval{" end="^%eofval}" contains=@javaTop contained - -" rules (end pattern shouldn't occur, if it does anyway we just stay in jflexRulesReg) -syn region jflexRulesReg matchgroup=jflexSectionSep start="^%%" end="^%%"me=e-2 contains=@jflexRules - -" at first everything but strings is a regexp -syn match jflexRegExp "\([^\" \t]\|\\\"\)\+" contained - -" take out comments -syn match jflexComment "//.*" contained -syn region jflexComment start="/\*" end="\*/" contained contains=jflexComment - -" lex states -syn match jflexRuleStates "<\s*\I\i*\(\s*,\s*\I\i*\)*\s*>" contained skipnl skipwhite nextgroup=jflexStateGroup - -" action code (only after states braces and macro use) -syn region jflexActionCode matchgroup=Delimiter start="{" end="}" contained contains=@javaTop,jflexJavaBraces - -" macro use -syn match jflexRegExp "{\s*\I\i*\s*}" contained - -" state braces (only active after ) -syn region jflexStateGroup matchgroup=jflexRuleStates start="{$" start="{\s" end="}" contained contains=@jflexRules - -" string -syn region jflexRegExp matchgroup=String start=+"+ skip=+\\\\\|\\"+ end=+"+ contained - -" not to be confused with a state -syn match jflexRegExp "<>" contained - -" escape sequence -syn match jflexRegExp "\\." contained - - -" keep braces in actions balanced -syn region jflexJavaBraces start="{" end="}" contained contains=@javaTop,jflexJavaBraces - - -" syncing -syn sync clear -syn sync minlines=10 -syn sync match jflexSync grouphere jflexOptionReg "^%[a-z]" -syn sync match jflexSync grouphere jflexRulesReg "^<" - - -" highlighting -hi link jflexOption Special -hi link jflexMacroIdent Ident -hi link jflexMacroRegExp Macro -hi link jflexOptionError Error -hi link jflexComment Comment -hi link jflexOperator Operator -hi link jflexRuleStates Special -hi link jflexRegExp Function -hi jflexSectionSep guifg=yellow ctermfg=yellow guibg=blue ctermbg=blue gui=bold cterm=bold -hi link jflexCodeIncludeMark jflexSectionSep - -let b:current_syntax="jflex" diff --git a/tools/lexer/jflex-1.4/src/JFlex/Action.java b/tools/lexer/jflex-1.4/src/JFlex/Action.java deleted file mode 100644 index b84d6b9fced7..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Action.java +++ /dev/null @@ -1,261 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * Encapsulates an action in the specification. - * - * It stores the Java code as String together with a priority (line number in the specification). - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class Action { - - /** A normal action */ - public final static int NORMAL = 0; - /** Action of a lookahead expression r1/r2 with fixed length r1 */ - public final static int FIXED_BASE = 1; - /** Action of a lookahead expression r1/r2 with fixed length r2 */ - public final static int FIXED_LOOK = 2; - /** Action of a lookahead expression r1/r2 with a finite choice of - * fixed lengths in r2 */ - public final static int FINITE_CHOICE = 3; - /** Action of a general lookahead expression */ - public final static int GENERAL_LOOK = 4; - /** Action of the 2nd forward pass for lookahead */ - public final static int FORWARD_ACTION = 5; - /** Action of the backward pass for lookahead */ - public final static int BACKWARD_ACTION = 6; - - /** - * The Java code this Action represents - */ - String content; - - /** - * The priority (i.e. line number in the specification) of this Action. - */ - int priority; - - /** - * Which kind of action this is. - * (normal, a/b with fixed length a, fixed length b, etc) - */ - private int kind = NORMAL; - - /** The length of the lookahead (if fixed) */ - private int len; - - /** The entry state of the corresponding forward DFA (if general lookahead) */ - private int entryState; - - /** - * Creates a new Action object with specified content and line number. - * - * @param content java code - * @param priority line number - */ - public Action(String content, int priority) { - this.content = content.trim(); - this.priority = priority; - } - - /** - * Creates a new Action object of the specified kind. Only - * accepts FORWARD_ACTION or BACKWARD_ACTION. - * - * @param kind the kind of action - * - * @see #FORWARD_ACTION - * @see #BACKWARD_ACTION - */ - public Action(int kind) { - if (kind != FORWARD_ACTION && kind != BACKWARD_ACTION) - throw new GeneratorException(); - this.content = ""; - this.priority = Integer.MAX_VALUE; - this.kind = kind; - } - - /** - * Compares the priority value of this Action with the specified action. - * - * @param other the other Action to compare this Action with. - * - * @return this Action if it has higher priority - the specified one, if not. - */ - public Action getHigherPriority(Action other) { - if (other == null) return this; - - // the smaller the number the higher the priority - if (other.priority > this.priority) - return this; - else - return other; - } - - - /** - * Returns the String representation of this object. - * - * @return string representation of the action - */ - public String toString() { - return "Action (priority "+priority+", lookahead "+kind+") :" + - Out.NL+content; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - - /** - * Returns true iff the parameter is an - * Action with the same content as this one. - * - * @param a the object to compare this Action with - * @return true if the action strings are equal - */ - public boolean isEquiv(Action a) { - return this == a || - (this.content.equals(a.content) && - this.kind == a.kind && - this.len == a.len && - this.entryState == a.entryState); - } - - - /** - * Calculate hash value. - * - * @return a hash value for this Action - */ - public int hashCode() { - return content.hashCode(); - } - - - /** - * Test for equality to another object. - * - * This action equals another object if the other - * object is an equivalent action. - * - * @param o the other object. - * - * @see Action#isEquiv(Action) - */ - public boolean equals(Object o) { - if (o instanceof Action) - return isEquiv((Action) o); - else - return false; - } - - /** - * Return true iff this is action belongs to a general lookahead rule. - * - * @return true if this actions belongs to a general lookahead rule. - */ - public boolean isGenLookAction() { - return kind == GENERAL_LOOK; - } - - /** - * Return true if code for this is action should be emitted, false - * if it is a BACK/FORWARD lookahead action. - * - * @return true if code should be emitted for this action. - */ - public boolean isEmittable() { - return kind != BACKWARD_ACTION && kind != FORWARD_ACTION; - } - - /** - * Return kind of lookahead. - */ - public int lookAhead() { - return kind; - } - - /** - * Sets the lookahead kind and data for this action - * - * @param kind which kind of lookahead it is - * @param data the length for fixed length look aheads. - * - */ - public void setLookAction(int kind, int data) { - this.kind = kind; - this.len = data; - } - - /** - * The length of the lookahead or base if this is a fixed length - * lookahead action. - */ - public int getLookLength() { - return len; - } - - /** - * Return the corresponding entry state for the forward DFA (if this - * is a general lookahead expression) - * - * @return the forward DFA entry state (+1 is the backward DFA) - */ - public int getEntryState() { - return entryState; - } - - /** - * Set the corresponding entry state for the forward DFA of this action - * (if this is a general lookahead expression) - * - * @param the entry state for the forward DFA of this action - */ - public void setEntryState(int entryState) { - this.entryState = entryState; - } - - public Action copyChoice(int length) { - Action a = new Action(this.content, this.priority); - a.setLookAction(FINITE_CHOICE, length); - return a; - } - - /** - * String representation of the lookahead kind of this action. - * - * @return the string representation - */ - public String lookString() { - switch (kind) { - case NORMAL: return ""; - case BACKWARD_ACTION: return "LOOK_BACK"; - case FIXED_BASE: return "FIXED_BASE"; - case FIXED_LOOK: return "FIXED_LOOK"; - case FINITE_CHOICE: return "FINITE_CHOICE"; - case FORWARD_ACTION: return "LOOK_FORWARD"; - case GENERAL_LOOK: return "LOOK_ACTION"; - default: return "unknown lookahead type"; - } - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/CharClassException.java b/tools/lexer/jflex-1.4/src/JFlex/CharClassException.java deleted file mode 100644 index 2c2a19b67ea0..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/CharClassException.java +++ /dev/null @@ -1,49 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - - -/** - * This Exception is used in class CharClasses. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class CharClassException extends RuntimeException { - - /** - * Creates a new CharClassException without message - */ - public CharClassException() { - } - - - /** - * Creates a new CharClassException with the specified message - * - * @param message the error description presented to the user. - */ - public CharClassException(String message) { - super(message); - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/CharClassInterval.java b/tools/lexer/jflex-1.4/src/JFlex/CharClassInterval.java deleted file mode 100644 index 2fe6c803715d..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/CharClassInterval.java +++ /dev/null @@ -1,73 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -/** - * Stores an interval of characters together with the character class - * - * A character belongs to an interval, if its Unicode value is greater than or equal - * to the Unicode value of start and smaller than or euqal to the Unicode - * value of end. - * - * All characters of the interval must belong to the same character class. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class CharClassInterval { - - /** - * The first character of the interval - */ - int start; - - /** - * The last character of the interval - */ - int end; - - /** - * The code of the class all characters of this interval belong to. - */ - int charClass; - - - /** - * Creates a new CharClassInterval from start to end - * that belongs to character class charClass. - * - * @param start The first character of the interval - * @param end The last character of the interval - * @param charClass The code of the class all characters of this interval belong to. - */ - public CharClassInterval(int start, int end, int charClass) { - this.start = start; - this.end = end; - this.charClass = charClass; - } - - /** - * returns string representation of this class interval - */ - public String toString() { - return "["+start+"-"+end+"="+charClass+"]"; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/CharClasses.java b/tools/lexer/jflex-1.4/src/JFlex/CharClasses.java deleted file mode 100644 index fcda11bfe804..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/CharClasses.java +++ /dev/null @@ -1,388 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.util.*; - - -/** - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class CharClasses { - - /** debug flag (for char classes only) */ - private static final boolean DEBUG = false; - - /** the largest character that can be used in char classes */ - public static final char maxChar = '\uFFFF'; - - /** the char classes */ - private Vector /* of IntCharSet */ classes; - - /** the largest character actually used in a specification */ - private char maxCharUsed; - - /** - * Constructs a new CharClass object that provides space for - * classes of characters from 0 to maxCharCode. - * - * Initially all characters are in class 0. - * - * @param maxCharCode the last character code to be - * considered. (127 for 7bit Lexers, - * 255 for 8bit Lexers and 0xFFFF - * for Unicode Lexers). - */ - public CharClasses(int maxCharCode) { - if (maxCharCode < 0 || maxCharCode > 0xFFFF) - throw new IllegalArgumentException(); - - maxCharUsed = (char) maxCharCode; - - classes = new Vector(); - classes.addElement(new IntCharSet(new Interval((char) 0, maxChar))); - } - - - /** - * Returns the greatest Unicode value of the current input character set. - */ - public char getMaxCharCode() { - return maxCharUsed; - } - - - /** - * Sets the largest Unicode value of the current input character set. - * - * @param charCode the largest character code, used for the scanner - * (i.e. %7bit, %8bit, %16bit etc.) - */ - public void setMaxCharCode(int charCode) { - if (charCode < 0 || charCode > 0xFFFF) - throw new IllegalArgumentException(); - - maxCharUsed = (char) charCode; - } - - - /** - * Returns the current number of character classes. - */ - public int getNumClasses() { - return classes.size(); - } - - - - /** - * Updates the current partition, so that the specified set of characters - * gets a new character class. - * - * Characters that are elements of set are not in the same - * equivalence class with characters that are not elements of set. - * - * @param set the set of characters to distinguish from the rest - * @param caseless if true upper/lower/title case are considered equivalent - */ - public void makeClass(IntCharSet set, boolean caseless) { - if (caseless) set = set.getCaseless(); - - if ( DEBUG ) { - Out.dump("makeClass("+set+")"); - dump(); - } - - int oldSize = classes.size(); - for (int i = 0; i < oldSize; i++) { - IntCharSet x = (IntCharSet) classes.elementAt(i); - - if (x.equals(set)) return; - - IntCharSet and = x.and(set); - - if ( and.containsElements() ) { - if ( x.equals(and) ) { - set.sub(and); - continue; - } - else if ( set.equals(and) ) { - x.sub(and); - classes.addElement(and); - if (DEBUG) { - Out.dump("makeClass(..) finished"); - dump(); - } - return; - } - - set.sub(and); - x.sub(and); - classes.addElement(and); - } - } - - if (DEBUG) { - Out.dump("makeClass(..) finished"); - dump(); - } - } - - - /** - * Returns the code of the character class the specified character belongs to. - */ - public int getClassCode(char letter) { - int i = -1; - while (true) { - IntCharSet x = (IntCharSet) classes.elementAt(++i); - if ( x.contains(letter) ) return i; - } - } - - /** - * Dump charclasses to the dump output stream - */ - public void dump() { - Out.dump(toString()); - } - - - /** - * Return a string representation of one char class - * - * @param theClass the index of the class to - */ - public String toString(int theClass) { - return classes.elementAt(theClass).toString(); - } - - - /** - * Return a string representation of the char classes - * stored in this class. - * - * Enumerates the classes by index. - */ - public String toString() { - StringBuffer result = new StringBuffer("CharClasses:"); - - result.append(Out.NL); - - for (int i = 0; i < classes.size(); i++) - result.append("class "+i+":"+Out.NL+classes.elementAt(i)+Out.NL); - - return result.toString(); - } - - - /** - * Creates a new character class for the single character singleChar. - * - * @param caseless if true upper/lower/title case are considered equivalent - */ - public void makeClass(char singleChar, boolean caseless) { - makeClass(new IntCharSet(singleChar), caseless); - } - - - /** - * Creates a new character class for each character of the specified String. - * - * @param caseless if true upper/lower/title case are considered equivalent - */ - public void makeClass(String str, boolean caseless) { - for (int i = 0; i < str.length(); i++) makeClass(str.charAt(i), caseless); - } - - - /** - * Updates the current partition, so that the specified set of characters - * gets a new character class. - * - * Characters that are elements of the set v are not in the same - * equivalence class with characters that are not elements of the set v. - * - * @param v a Vector of Interval objects. - * This Vector represents a set of characters. The set of characters is - * the union of all intervals in the Vector. - * - * @param caseless if true upper/lower/title case are considered equivalent - */ - public void makeClass(Vector /* Interval */ v, boolean caseless) { - makeClass(new IntCharSet(v), caseless); - } - - - /** - * Updates the current partition, so that the set of all characters not contained in the specified - * set of characters gets a new character class. - * - * Characters that are elements of the set v are not in the same - * equivalence class with characters that are not elements of the set v. - * - * This method is equivalent to makeClass(v) - * - * @param v a Vector of Interval objects. - * This Vector represents a set of characters. The set of characters is - * the union of all intervals in the Vector. - * - * @param caseless if true upper/lower/title case are considered equivalent - */ - public void makeClassNot(Vector v, boolean caseless) { - makeClass(new IntCharSet(v), caseless); - } - - - /** - * Returns an array that contains the character class codes of all characters - * in the specified set of input characters. - */ - private int [] getClassCodes(IntCharSet set, boolean negate) { - - if (DEBUG) { - Out.dump("getting class codes for "+set); - if (negate) - Out.dump("[negated]"); - } - - int size = classes.size(); - - // [fixme: optimize] - int temp [] = new int [size]; - int length = 0; - - for (int i = 0; i < size; i++) { - IntCharSet x = (IntCharSet) classes.elementAt(i); - if ( negate ) { - if ( !set.and(x).containsElements() ) { - temp[length++] = i; - if (DEBUG) Out.dump("code "+i); - } - } - else { - if ( set.and(x).containsElements() ) { - temp[length++] = i; - if (DEBUG) Out.dump("code "+i); - } - } - } - - int result [] = new int [length]; - System.arraycopy(temp, 0, result, 0, length); - - return result; - } - - - /** - * Returns an array that contains the character class codes of all characters - * in the specified set of input characters. - * - * @param intervallVec a Vector of Intervals, the set of characters to get - * the class codes for - * - * @return an array with the class codes for intervallVec - */ - public int [] getClassCodes(Vector /* Interval */ intervallVec) { - return getClassCodes(new IntCharSet(intervallVec), false); - } - - - /** - * Returns an array that contains the character class codes of all characters - * that are not in the specified set of input characters. - * - * @param intervallVec a Vector of Intervals, the complement of the - * set of characters to get the class codes for - * - * @return an array with the class codes for the complement of intervallVec - */ - public int [] getNotClassCodes(Vector /* Interval */ intervallVec) { - return getClassCodes(new IntCharSet(intervallVec), true); - } - - - /** - * Check consistency of the stored classes [debug]. - * - * all classes must be disjoint, checks if all characters - * have a class assigned. - */ - public void check() { - for (int i = 0; i < classes.size(); i++) - for (int j = i+1; j < classes.size(); j++) { - IntCharSet x = (IntCharSet) classes.elementAt(i); - IntCharSet y = (IntCharSet) classes.elementAt(j); - if ( x.and(y).containsElements() ) { - System.out.println("Error: non disjoint char classes "+i+" and "+j); - System.out.println("class "+i+": "+x); - System.out.println("class "+j+": "+y); - } - } - - // check if each character has a classcode - // (= if getClassCode terminates) - for (char c = 0; c < maxChar; c++) { - getClassCode(c); - if (c % 100 == 0) System.out.print("."); - } - - getClassCode(maxChar); - } - - - /** - * Returns an array of all CharClassIntervalls in this - * char class collection. - * - * The array is ordered by char code, i.e. - * result[i+1].start = result[i].end+1 - * - * Each CharClassInterval contains the number of the - * char class it belongs to. - */ - public CharClassInterval [] getIntervals() { - int i, c; - int size = classes.size(); - int numIntervalls = 0; - - for (i = 0; i < size; i++) - numIntervalls+= ((IntCharSet) classes.elementAt(i)).numIntervalls(); - - CharClassInterval [] result = new CharClassInterval[numIntervalls]; - - i = 0; - c = 0; - while (i < numIntervalls) { - int code = getClassCode((char) c); - IntCharSet set = (IntCharSet) classes.elementAt(code); - Interval iv = set.getNext(); - - result[i++] = new CharClassInterval(iv.start, iv.end, code); - c = iv.end+1; - } - - return result; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/CharSet.java b/tools/lexer/jflex-1.4/src/JFlex/CharSet.java deleted file mode 100644 index f79102fe016e..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/CharSet.java +++ /dev/null @@ -1,112 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public final class CharSet { - - final static int BITS = 6; // the number of bits to shift (2^6 = 64) - final static int MOD = (1<> BITS)+1]; - add(character); - } - - - public void add(int character) { - resize(character); - - if ( (bits[character >> BITS] & (1L << (character & MOD))) == 0) numElements++; - - bits[character >> BITS] |= (1L << (character & MOD)); - } - - - private int nbits2size (int nbits) { - return ((nbits >> BITS) + 1); - } - - - private void resize(int nbits) { - int needed = nbits2size(nbits); - - if (needed < bits.length) return; - - long newbits[] = new long[Math.max(bits.length*2,needed)]; - System.arraycopy(bits, 0, newbits, 0, bits.length); - - bits = newbits; - } - - - public boolean isElement(int character) { - int index = character >> BITS; - if (index >= bits.length) return false; - return (bits[index] & (1L << (character & MOD))) != 0; - } - - - public CharSetEnumerator characters() { - return new CharSetEnumerator(this); - } - - - public boolean containsElements() { - return numElements > 0; - } - - public int size() { - return numElements; - } - - public String toString() { - CharSetEnumerator set = characters(); - - StringBuffer result = new StringBuffer("{"); - - if ( set.hasMoreElements() ) result.append(""+set.nextElement()); - - while ( set.hasMoreElements() ) { - int i = set.nextElement(); - result.append( ", "+i); - } - - result.append("}"); - - return result.toString(); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/CharSetEnumerator.java b/tools/lexer/jflex-1.4/src/JFlex/CharSetEnumerator.java deleted file mode 100644 index af5fab6624af..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/CharSetEnumerator.java +++ /dev/null @@ -1,88 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * Enumerator for the elements of a CharSet. - * - * Does not implement java.util.Enumeration, but supports the same protocol. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class CharSetEnumerator { - - private int index; - private int offset; - private long mask = 1; - - private CharSet set; - - public CharSetEnumerator(CharSet characters) { - set = characters; - - while (index < set.bits.length && set.bits[index] == 0) - index++; - - if (index >= set.bits.length) return; - - while (offset <= CharSet.MOD && ((set.bits[index] & mask) == 0)) { - mask<<= 1; - offset++; - } - } - - private void advance() { - do { - offset++; - mask<<= 1; - } while (offset <= CharSet.MOD && ((set.bits[index] & mask) == 0)); - - if (offset > CharSet.MOD) { - do - index++; - while (index < set.bits.length && set.bits[index] == 0); - - if (index >= set.bits.length) return; - - offset = 0; - mask = 1; - - while (offset <= CharSet.MOD && ((set.bits[index] & mask) == 0)) { - mask<<= 1; - offset++; - } - } - } - - public boolean hasMoreElements() { - return index < set.bits.length; - } - - public int nextElement() { - int x = (index << CharSet.BITS) + offset; - advance(); - return x; - } - -} - diff --git a/tools/lexer/jflex-1.4/src/JFlex/CountEmitter.java b/tools/lexer/jflex-1.4/src/JFlex/CountEmitter.java deleted file mode 100644 index f4ac80507b10..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/CountEmitter.java +++ /dev/null @@ -1,115 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * jflex 1.4 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -/** - * An emitter for an array encoded as count/value pairs in a string. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class CountEmitter extends PackEmitter { - /** number of entries in expanded array */ - private int numEntries; - - /** translate all values by this amount */ - private int translate = 0; - - - /** - * Create a count/value emitter for a specific field. - * - * @param name name of the generated array - */ - protected CountEmitter(String name) { - super(name); - } - - /** - * Emits count/value unpacking code for the generated array. - * - * @see JFlex.PackEmitter#emitUnPack() - */ - public void emitUnpack() { - // close last string chunk: - println("\";"); - - nl(); - println(" private static int [] zzUnpack"+name+"() {"); - println(" int [] result = new int["+numEntries+"];"); - println(" int offset = 0;"); - - for (int i = 0; i < chunks; i++) { - println(" offset = zzUnpack"+name+"("+constName()+"_PACKED_"+i+", offset, result);"); - } - - println(" return result;"); - println(" }"); - nl(); - - println(" private static int zzUnpack"+name+"(String packed, int offset, int [] result) {"); - println(" int i = 0; /* index in packed string */"); - println(" int j = offset; /* index in unpacked array */"); - println(" int l = packed.length();"); - println(" while (i < l) {"); - println(" int count = packed.charAt(i++);"); - println(" int value = packed.charAt(i++);"); - if (translate == 1) { - println(" value--;"); - } - else if (translate != 0) { - println(" value-= "+translate); - } - println(" do result[j++] = value; while (--count > 0);"); - println(" }"); - println(" return j;"); - println(" }"); - } - - /** - * Translate all values by given amount. - * - * Use to move value interval from [0, 0xFFFF] to something different. - * - * @param i amount the value will be translated by. - * Example: i = 1 allows values in [-1, 0xFFFE]. - */ - public void setValTranslation(int i) { - this.translate = i; - } - - /** - * Emit one count/value pair. - * - * Automatically translates value by the translate value. - * - * @param count - * @param value - * - * @see CountEmitter#setValTranslation(int) - */ - public void emit(int count, int value) { - numEntries+= count; - breaks(); - emitUC(count); - emitUC(value+translate); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/DFA.java b/tools/lexer/jflex-1.4/src/JFlex/DFA.java deleted file mode 100644 index 5ebd55947bf5..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/DFA.java +++ /dev/null @@ -1,929 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -import java.io.*; -import java.util.*; - - -/** - * DFA representation in JFlex. - * Contains minimization algorithm. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class DFA { - - /** - * The initial number of states - */ - private static final int STATES = 500; - - /** - * The code for "no target state" in the transition table. - */ - public static final int NO_TARGET = -1; - - /** - * table[current_state][character] is the next state for current_state - * with input character, NO_TARGET if there is no transition for - * this input in current_state - */ - int [][] table; - - - /** - * isFinal[state] == true <=> the state state is - * a final state. - */ - boolean [] isFinal; - - - /** - * action[state] is the action that is to be carried out in - * state state, null if there is no action. - */ - Action [] action; - - /** - * entryState[i] is the start-state of lexical state i or - * lookahead DFA i - */ - int entryState []; - - /** - * The number of states in this DFA - */ - int numStates; - - /** - * The current maximum number of input characters - */ - int numInput; - - /** - * The number of lexical states (2*numLexStates <= entryState.length) - */ - int numLexStates; - - /** - * all actions that are used in this DFA - */ - Hashtable usedActions = new Hashtable(); - - /** True iff this DFA contains general lookahead */ - boolean lookaheadUsed; - - public DFA(int numEntryStates, int numInp, int numLexStates) { - numInput = numInp; - - int statesNeeded = Math.max(numEntryStates, STATES); - - table = new int [statesNeeded] [numInput]; - action = new Action [statesNeeded]; - isFinal = new boolean [statesNeeded]; - entryState = new int [numEntryStates]; - numStates = 0; - - this.numLexStates = numLexStates; - - for (int i = 0; i < statesNeeded; i++) { - for (char j = 0; j < numInput; j++) - table [i][j] = NO_TARGET; - } - } - - - public void setEntryState(int eState, int trueState) { - entryState[eState] = trueState; - } - - private void ensureStateCapacity(int newNumStates) { - int oldLength = isFinal.length; - - if ( newNumStates < oldLength ) return; - - int newLength = oldLength*2; - while ( newLength <= newNumStates ) newLength*= 2; - - boolean [] newFinal = new boolean [newLength]; - boolean [] newPushback = new boolean [newLength]; - Action [] newAction = new Action [newLength]; - int [] [] newTable = new int [newLength] [numInput]; - - System.arraycopy(isFinal,0,newFinal,0,numStates); - System.arraycopy(action,0,newAction,0,numStates); - System.arraycopy(table,0,newTable,0,oldLength); - - int i,j; - - for (i = oldLength; i < newLength; i++) { - for (j = 0; j < numInput; j++) { - newTable[i][j] = NO_TARGET; - } - } - - isFinal = newFinal; - action = newAction; - table = newTable; - } - - - public void setAction(int state, Action stateAction) { - action[state] = stateAction; - if (stateAction != null) { - usedActions.put(stateAction,stateAction); - lookaheadUsed |= stateAction.isGenLookAction(); - } - } - - public void setFinal(int state, boolean isFinalState) { - isFinal[state] = isFinalState; - } - - public void addTransition(int start, char input, int dest) { - int max = Math.max(start,dest)+1; - ensureStateCapacity(max); - if (max > numStates) numStates = max; - - // Out.debug("Adding DFA transition ("+start+", "+(int)input+", "+dest+")"); - - table[start][input] = dest; - } - - - public String toString() { - StringBuffer result = new StringBuffer(); - - for (int i=0; i < numStates; i++) { - result.append("State "); - if ( isFinal[i] ) { - result.append("[FINAL"); - String l = action[i].lookString(); - if (!l.equals("")) { - result.append(", "); - result.append(l); - } - result.append("] "); - } - result.append(i+":"+Out.NL); - - for (char j=0; j < numInput; j++) { - if ( table[i][j] >= 0 ) - result.append(" with "+(int)j+" in "+table[i][j]+Out.NL); - } - } - - return result.toString(); - } - - - public void writeDot(File file) { - try { - PrintWriter writer = new PrintWriter(new FileWriter(file)); - writer.println(dotFormat()); - writer.close(); - } - catch (IOException e) { - Out.error(ErrorMessages.FILE_WRITE, file); - throw new GeneratorException(); - } - } - - - public String dotFormat() { - StringBuffer result = new StringBuffer(); - - result.append("digraph DFA {"+Out.NL); - result.append("rankdir = LR"+Out.NL); - - for (int i=0; i < numStates; i++) { - if ( isFinal[i] ) { - result.append(i); - result.append(" [shape = doublecircle]"); - result.append(Out.NL); - } - } - - for (int i=0; i < numStates; i++) { - for (int input = 0; input < numInput; input++) { - if ( table[i][input] >= 0 ) { - result.append(i+" -> "+table[i][input]); - result.append(" [label=\"["+input+"]\"]"+Out.NL); - // result.append(" [label=\"["+classes.toString(input)+"]\"]\n"); - } - } - } - - result.append("}"+Out.NL); - - return result.toString(); - } - - - /** - * Check that all actions can actually be matched in this DFA. - */ - public void checkActions(LexScan scanner, LexParse parser) { - EOFActions eofActions = parser.getEOFActions(); - Enumeration l = scanner.actions.elements(); - - while (l.hasMoreElements()) { - Action a = (Action) l.nextElement(); - if ( !a.equals(usedActions.get(a)) && !eofActions.isEOFAction(a) ) { - Out.warning(scanner.file, ErrorMessages.NEVER_MATCH, a.priority-1, -1); - } - } - } - - - /** - * Implementation of Hopcroft's O(n log n) minimization algorithm, follows - * description by D. Gries. - * - * Time: O(n log n) - * Space: O(c n), size < 4*(5*c*n + 13*n + 3*c) byte - */ - public void minimize() { - Out.print(numStates+" states before minimization, "); - - if (numStates == 0) { - Out.error(ErrorMessages.ZERO_STATES); - throw new GeneratorException(); - } - - if (Options.no_minimize) { - Out.println("minimization skipped."); - return; - } - - // the algorithm needs the DFA to be total, so we add an error state 0, - // and translate the rest of the states by +1 - final int n = numStates+1; - - // block information: - // [0..n-1] stores which block a state belongs to, - // [n..2*n-1] stores how many elements each block has - int [] block = new int[2*n]; - - // implements a doubly linked list of states (these are the actual blocks) - int [] b_forward = new int[2*n]; - int [] b_backward = new int[2*n]; - - // the last of the blocks currently in use (in [n..2*n-1]) - // (end of list marker, points to the last used block) - int lastBlock = n; // at first we start with one empty block - final int b0 = n; // the first block - - // the circular doubly linked list L of pairs (B_i, c) - // (B_i, c) in L iff l_forward[(B_i-n)*numInput+c] > 0 // numeric value of block 0 = n! - int [] l_forward = new int[n*numInput+1]; - int [] l_backward = new int[n*numInput+1]; - int anchorL = n*numInput; // list anchor - - // inverse of the transition table - // if t = inv_delta[s][c] then { inv_delta_set[t], inv_delta_set[t+1], .. inv_delta_set[k] } - // is the set of states, with inv_delta_set[k] = -1 and inv_delta_set[j] >= 0 for t <= j < k - int [] [] inv_delta = new int[n][numInput]; - int [] inv_delta_set = new int [2*n*numInput]; - - // twin stores two things: - // twin[0]..twin[numSplit-1] is the list of blocks that have been split - // twin[B_i] is the twin of block B_i - int [] twin = new int[2*n]; - int numSplit; - - // SD[B_i] is the the number of states s in B_i with delta(s,a) in B_j - // if SD[B_i] == block[B_i], there is no need to split - int [] SD = new int[2*n]; // [only SD[n..2*n-1] is used] - - - // for fixed (B_j,a), the D[0]..D[numD-1] are the inv_delta(B_j,a) - int [] D = new int[n]; - int numD; - - - // initialize inverse of transition table - int lastDelta = 0; - int [] inv_lists = new int[n]; // holds a set of lists of states - int [] inv_list_last = new int[n]; // the last element - for (int c = 0; c < numInput; c++) { - // clear "head" and "last element" pointers - for (int s = 0; s < n; s++) { - inv_list_last[s] = -1; - inv_delta[s][c] = -1; - } - - // the error state has a transition for each character into itself - inv_delta[0][c] = 0; - inv_list_last[0] = 0; - - // accumulate states of inverse delta into lists (inv_delta serves as head of list) - for (int s = 1; s < n; s++) { - int t = table[s-1][c]+1; - - if (inv_list_last[t] == -1) { // if there are no elements in the list yet - inv_delta[t][c] = s; // mark t as first and last element - inv_list_last[t] = s; - } - else { - inv_lists[inv_list_last[t]] = s; // link t into chain - inv_list_last[t] = s; // and mark as last element - } - } - - // now move them to inv_delta_set in sequential order, - // and update inv_delta accordingly - for (int s = 0; s < n; s++) { - int i = inv_delta[s][c]; inv_delta[s][c] = lastDelta; - int j = inv_list_last[s]; - boolean go_on = (i != -1); - while (go_on) { - go_on = (i != j); - inv_delta_set[lastDelta++] = i; - i = inv_lists[i]; - } - inv_delta_set[lastDelta++] = -1; - } - } // of initialize inv_delta - - // printInvDelta(inv_delta, inv_delta_set); - - // initialize blocks - - // make b0 = {0} where 0 = the additional error state - b_forward[b0] = 0; - b_backward[b0] = 0; - b_forward[0] = b0; - b_backward[0] = b0; - block[0] = b0; - block[b0] = 1; - - for (int s = 1; s < n; s++) { - // System.out.println("Checking state ["+(s-1)+"]"); - // search the blocks if it fits in somewhere - // (fit in = same pushback behavior, same finalness, same lookahead behavior, same action) - int b = b0+1; // no state can be equivalent to the error state - boolean found = false; - while (!found && b <= lastBlock) { - // get some state out of the current block - int t = b_forward[b]; - // System.out.println(" picking state ["+(t-1)+"]"); - - // check, if s could be equivalent with t - if (isFinal[s-1]) { - found = isFinal[t-1] && action[s-1].isEquiv(action[t-1]); - } - else { - found = !isFinal[t-1]; - } - - if (found) { // found -> add state s to block b - // System.out.println("Found! Adding to block "+(b-b0)); - // update block information - block[s] = b; - block[b]++; - - // chain in the new element - int last = b_backward[b]; - b_forward[last] = s; - b_forward[s] = b; - b_backward[b] = s; - b_backward[s] = last; - } - - b++; - } - - if (!found) { // fits in nowhere -> create new block - // System.out.println("not found, lastBlock = "+lastBlock); - - // update block information - block[s] = b; - block[b]++; - - // chain in the new element - b_forward[b] = s; - b_forward[s] = b; - b_backward[b] = s; - b_backward[s] = b; - - lastBlock++; - } - } // of initialize blocks - - // printBlocks(block,b_forward,b_backward,lastBlock); - - // initialize worklist L - // first, find the largest block B_max, then, all other (B_i,c) go into the list - int B_max = b0; - int B_i; - for (B_i = b0+1; B_i <= lastBlock; B_i++) - if (block[B_max] < block[B_i]) B_max = B_i; - - // L = empty - l_forward[anchorL] = anchorL; - l_backward[anchorL] = anchorL; - - // set up the first list element - if (B_max == b0) B_i = b0+1; else B_i = b0; // there must be at least two blocks - - int index = (B_i-b0)*numInput; // (B_i, 0) - while (index < (B_i+1-b0)*numInput) { - int last = l_backward[anchorL]; - l_forward[last] = index; - l_forward[index] = anchorL; - l_backward[index] = last; - l_backward[anchorL] = index; - index++; - } - - // now do the rest of L - while (B_i <= lastBlock) { - if (B_i != B_max) { - index = (B_i-b0)*numInput; - while (index < (B_i+1-b0)*numInput) { - int last = l_backward[anchorL]; - l_forward[last] = index; - l_forward[index] = anchorL; - l_backward[index] = last; - l_backward[anchorL] = index; - index++; - } - } - B_i++; - } - // end of setup L - - // start of "real" algorithm - // int step = 0; - // System.out.println("max_steps = "+(n*numInput)); - // while L not empty - while (l_forward[anchorL] != anchorL) { - // System.out.println("step : "+(step++)); - // printL(l_forward, l_backward, anchorL); - - // pick and delete (B_j, a) in L: - - // pick - int B_j_a = l_forward[anchorL]; - // delete - l_forward[anchorL] = l_forward[B_j_a]; - l_backward[l_forward[anchorL]] = anchorL; - l_forward[B_j_a] = 0; - // take B_j_a = (B_j-b0)*numInput+c apart into (B_j, a) - int B_j = b0 + B_j_a / numInput; - int a = B_j_a % numInput; - - // printL(l_forward, l_backward, anchorL); - - // System.out.println("picked ("+B_j+","+a+")"); - // printL(l_forward, l_backward, anchorL); - - // determine splittings of all blocks wrt (B_j, a) - // i.e. D = inv_delta(B_j,a) - numD = 0; - int s = b_forward[B_j]; - while (s != B_j) { - // System.out.println("splitting wrt. state "+s); - int t = inv_delta[s][a]; - // System.out.println("inv_delta chunk "+t); - while (inv_delta_set[t] != -1) { - // System.out.println("D+= state "+inv_delta_set[t]); - D[numD++] = inv_delta_set[t++]; - } - s = b_forward[s]; - } - - // clear the twin list - numSplit = 0; - - // System.out.println("splitting blocks according to D"); - - // clear SD and twins (only those B_i that occur in D) - for (int indexD = 0; indexD < numD; indexD++) { // for each s in D - s = D[indexD]; - B_i = block[s]; - SD[B_i] = -1; - twin[B_i] = 0; - } - - // count how many states of each B_i occurring in D go with a into B_j - // Actually we only check, if *all* t in B_i go with a into B_j. - // In this case SD[B_i] == block[B_i] will hold. - for (int indexD = 0; indexD < numD; indexD++) { // for each s in D - s = D[indexD]; - B_i = block[s]; - - // only count, if we haven't checked this block already - if (SD[B_i] < 0) { - SD[B_i] = 0; - int t = b_forward[B_i]; - while (t != B_i && (t != 0 || block[0] == B_j) && - (t == 0 || block[table[t-1][a]+1] == B_j)) { - SD[B_i]++; - t = b_forward[t]; - } - } - } - - // split each block according to D - for (int indexD = 0; indexD < numD; indexD++) { // for each s in D - s = D[indexD]; - B_i = block[s]; - - // System.out.println("checking if block "+(B_i-b0)+" must be split because of state "+s); - - if (SD[B_i] != block[B_i]) { - // System.out.println("state "+(s-1)+" must be moved"); - int B_k = twin[B_i]; - if (B_k == 0) { - // no twin for B_i yet -> generate new block B_k, make it B_i's twin - B_k = ++lastBlock; - // System.out.println("creating block "+(B_k-n)); - // printBlocks(block,b_forward,b_backward,lastBlock-1); - b_forward[B_k] = B_k; - b_backward[B_k] = B_k; - - twin[B_i] = B_k; - - // mark B_i as split - twin[numSplit++] = B_i; - } - // move s from B_i to B_k - - // remove s from B_i - b_forward[b_backward[s]] = b_forward[s]; - b_backward[b_forward[s]] = b_backward[s]; - - // add s to B_k - int last = b_backward[B_k]; - b_forward[last] = s; - b_forward[s] = B_k; - b_backward[s] = last; - b_backward[B_k] = s; - - block[s] = B_k; - block[B_k]++; - block[B_i]--; - - SD[B_i]--; // there is now one state less in B_i that goes with a into B_j - // printBlocks(block, b_forward, b_backward, lastBlock); - // System.out.println("finished move"); - } - } // of block splitting - - // printBlocks(block, b_forward, b_backward, lastBlock); - - // System.out.println("updating L"); - - // update L - for (int indexTwin = 0; indexTwin < numSplit; indexTwin++) { - B_i = twin[indexTwin]; - int B_k = twin[B_i]; - for (int c = 0; c < numInput; c++) { - int B_i_c = (B_i-b0)*numInput+c; - int B_k_c = (B_k-b0)*numInput+c; - if (l_forward[B_i_c] > 0) { - // (B_i,c) already in L --> put (B_k,c) in L - int last = l_backward[anchorL]; - l_backward[anchorL] = B_k_c; - l_forward[last] = B_k_c; - l_backward[B_k_c] = last; - l_forward[B_k_c] = anchorL; - } - else { - // put the smaller block in L - if (block[B_i] <= block[B_k]) { - int last = l_backward[anchorL]; - l_backward[anchorL] = B_i_c; - l_forward[last] = B_i_c; - l_backward[B_i_c] = last; - l_forward[B_i_c] = anchorL; - } - else { - int last = l_backward[anchorL]; - l_backward[anchorL] = B_k_c; - l_forward[last] = B_k_c; - l_backward[B_k_c] = last; - l_forward[B_k_c] = anchorL; - } - } - } - } - } - - // System.out.println("Result"); - // printBlocks(block,b_forward,b_backward,lastBlock); - - /* - System.out.println("Old minimization:"); - boolean [] [] equiv = old_minimize(); - - boolean error = false; - for (int i = 1; i < equiv.length; i++) { - for (int j = 0; j < equiv[i].length; j++) { - if (equiv[i][j] != (block[i+1] == block[j+1])) { - System.out.println("error: equiv["+i+"]["+j+"] = "+equiv[i][j]+ - ", block["+i+"] = "+block[i+1]+", block["+j+"] = "+block[j]); - error = true; - } - } - } - - if (error) System.exit(1); - System.out.println("check"); - */ - - // transform the transition table - - // trans[i] is the state j that will replace state i, i.e. - // states i and j are equivalent - int trans [] = new int [numStates]; - - // kill[i] is true iff state i is redundant and can be removed - boolean kill [] = new boolean [numStates]; - - // move[i] is the amount line i has to be moved in the transition table - // (because states j < i have been removed) - int move [] = new int [numStates]; - - // fill arrays trans[] and kill[] (in O(n)) - for (int b = b0+1; b <= lastBlock; b++) { // b0 contains the error state - // get the state with smallest value in current block - int s = b_forward[b]; - int min_s = s; // there are no empty blocks! - for (; s != b; s = b_forward[s]) - if (min_s > s) min_s = s; - // now fill trans[] and kill[] for this block - // (and translate states back to partial DFA) - min_s--; - for (s = b_forward[b]-1; s != b-1; s = b_forward[s+1]-1) { - trans[s] = min_s; - kill[s] = s != min_s; - } - } - - // fill array move[] (in O(n)) - int amount = 0; - for (int i = 0; i < numStates; i++) { - if ( kill[i] ) - amount++; - else - move[i] = amount; - } - - int i,j; - // j is the index in the new transition table - // the transition table is transformed in place (in O(c n)) - for (i = 0, j = 0; i < numStates; i++) { - - // we only copy lines that have not been removed - if ( !kill[i] ) { - - // translate the target states - for (int c = 0; c < numInput; c++) { - if ( table[i][c] >= 0 ) { - table[j][c] = trans[ table[i][c] ]; - table[j][c]-= move[ table[j][c] ]; - } - else { - table[j][c] = table[i][c]; - } - } - - isFinal[j] = isFinal[i]; - action[j] = action[i]; - - j++; - } - } - - numStates = j; - - // translate lexical states - for (i = 0; i < entryState.length; i++) { - entryState[i] = trans[ entryState[i] ]; - entryState[i]-= move[ entryState[i] ]; - } - - Out.println(numStates+" states in minimized DFA"); - } - - public String toString(int [] a) { - String r = "{"; - int i; - for (i = 0; i < a.length-1; i++) r += a[i]+","; - return r+a[i]+"}"; - } - - public void printBlocks(int [] b, int [] b_f, int [] b_b, int last) { - Out.dump("block : "+toString(b)); - Out.dump("b_forward : "+toString(b_f)); - Out.dump("b_backward: "+toString(b_b)); - Out.dump("lastBlock : "+last); - final int n = numStates+1; - for (int i = n; i <= last; i ++) { - Out.dump("Block "+(i-n)+" (size "+b[i]+"):"); - String line = "{"; - int s = b_f[i]; - while (s != i) { - line = line+(s-1); - int t = s; - s = b_f[s]; - if (s != i) { - line = line+","; - if (b[s] != i) Out.dump("consistency error for state "+(s-1)+" (block "+b[s]+")"); - } - if (b_b[s] != t) Out.dump("consistency error for b_back in state "+(s-1)+" (back = "+b_b[s]+", should be = "+t+")"); - } - Out.dump(line+"}"); - } - } - - public void printL(int [] l_f, int [] l_b, int anchor) { - String l = "L = {"; - int bc = l_f[anchor]; - while (bc != anchor) { - int b = bc / numInput; - int c = bc % numInput; - l+= "("+b+","+c+")"; - int old_bc = bc; - bc = l_f[bc]; - if (bc != anchor) l+= ","; - if (l_b[bc] != old_bc) Out.dump("consistency error for ("+b+","+c+")"); - } - Out.dump(l+"}"); - } - - - /** - * Much simpler, but slower and less memory efficient minimization algorithm. - * - * @return the equivalence relation on states. - */ - public boolean [] [] old_minimize() { - - int i,j; - char c; - - Out.print(numStates+" states before minimization, "); - - if (numStates == 0) { - Out.error(ErrorMessages.ZERO_STATES); - throw new GeneratorException(); - } - - if (Options.no_minimize) { - Out.println("minimization skipped."); - return null; - } - - // equiv[i][j] == true <=> state i and state j are equivalent - boolean [] [] equiv = new boolean [numStates] []; - - // list[i][j] contains all pairs of states that have to be marked "not equivalent" - // if states i and j are recognized to be not equivalent - StatePairList [] [] list = new StatePairList [numStates] []; - - // construct a triangular matrix equiv[i][j] with j < i - // and mark pairs (final state, not final state) as not equivalent - for (i = 1; i < numStates; i++) { - list[i] = new StatePairList[i]; - equiv[i] = new boolean [i]; - for (j = 0; j < i; j++) { - // i and j are equivalent, iff : - // i and j are both final and their actions are equivalent and have same pushback behaviour or - // i and j are both not final - - if ( isFinal[i] && isFinal[j] ) - equiv[i][j] = action[i].isEquiv(action[j]); - else - equiv[i][j] = !isFinal[j] && !isFinal[i]; - } - } - - - for (i = 1; i < numStates; i++) { - - Out.debug("Testing state "+i); - - for (j = 0; j < i; j++) { - - if ( equiv[i][j] ) { - - for (c = 0; c < numInput; c++) { - - if (equiv[i][j]) { - - int p = table[i][c]; - int q = table[j][c]; - if (p < q) { - int t = p; - p = q; - q = t; - } - if ( p >= 0 || q >= 0 ) { - // Out.debug("Testing input '"+c+"' for ("+i+","+j+")"); - // Out.debug("Target states are ("+p+","+q+")"); - if ( p!=q && (p == -1 || q == -1 || !equiv[p][q]) ) { - equiv[i][j] = false; - if (list[i][j] != null) list[i][j].markAll(list,equiv); - } - // printTable(equiv); - } // if (p >= 0) .. - } // if (equiv[i][j] - } // for (char c = 0; c < numInput .. - - // if i and j are still marked equivalent.. - - if ( equiv[i][j] ) { - - // Out.debug("("+i+","+j+") are still marked equivalent"); - - for (c = 0; c < numInput; c++) { - - int p = table[i][c]; - int q = table[j][c]; - if (p < q) { - int t = p; - p = q; - q = t; - } - - if (p != q && p >= 0 && q >= 0) { - if ( list[p][q] == null ) { - list[p][q] = new StatePairList(); - } - list[p][q].addPair(i,j); - } - } - } - else { - // Out.debug("("+i+","+j+") are not equivalent"); - } - - } // of first if (equiv[i][j]) - } // of for j - } // of for i - // } - - // printTable(equiv); - - return equiv; - } - - - public void printInvDelta(int [] [] inv_delta, int [] inv_delta_set) { - Out.dump("Inverse of transition table: "); - for (int s = 0; s < numStates+1; s++) { - Out.dump("State ["+(s-1)+"]"); - for (int c = 0; c < numInput; c++) { - String line = "With <"+c+"> in {"; - int t = inv_delta[s][c]; - while (inv_delta_set[t] != -1) { - line += inv_delta_set[t++]-1; - if (inv_delta_set[t] != -1) line += ","; - } - if (inv_delta_set[inv_delta[s][c]] != -1) - Out.dump(line+"}"); - } - } - } - - public void printTable(boolean [] [] equiv) { - - Out.dump("Equivalence table is : "); - for (int i = 1; i < numStates; i++) { - String line = i+" :"; - for (int j = 0; j < i; j++) { - if (equiv[i][j]) - line+= " E"; - else - line+= " x"; - } - Out.dump(line); - } - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/EOFActions.java b/tools/lexer/jflex-1.4/src/JFlex/EOFActions.java deleted file mode 100644 index 08d20acacdd5..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/EOFActions.java +++ /dev/null @@ -1,94 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.util.*; - - -/** - * A simple table to store EOF actions for each lexical state. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class EOFActions { - - /** maps lexical states to actions */ - private Hashtable /* Integer -> Action */ actions = new Hashtable(); - private Action defaultAction; - private int numLexStates; - - public void setNumLexStates(int num) { - numLexStates = num; - } - - public void add(Vector stateList, Action action) { - - if (stateList != null && stateList.size() > 0) { - Enumeration states = stateList.elements(); - - while (states.hasMoreElements()) - add( (Integer) states.nextElement(), action ); - } - else { - defaultAction = action.getHigherPriority(defaultAction); - - for (int i = 0; i < numLexStates; i++) { - Integer state = new Integer(i); - if ( actions.get(state) != null ) { - Action oldAction = (Action) actions.get(state); - actions.put(state, oldAction.getHigherPriority(action)); - } - } - } - } - - public void add(Integer state, Action action) { - if ( actions.get(state) == null ) - actions.put(state, action); - else { - Action oldAction = (Action) actions.get(state); - actions.put(state, oldAction.getHigherPriority(action)); - } - } - - public boolean isEOFAction(Object a) { - if (a == defaultAction) return true; - - Enumeration e = actions.elements(); - while ( e.hasMoreElements() ) - if (a == e.nextElement()) return true; - - return false; - } - - public Action getAction(int state) { - return (Action) actions.get(new Integer(state)); - } - - public Action getDefault() { - return defaultAction; - } - - public int numActions() { - return actions.size(); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Emitter.java b/tools/lexer/jflex-1.4/src/JFlex/Emitter.java deleted file mode 100644 index c1904253367b..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Emitter.java +++ /dev/null @@ -1,1671 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.io.*; -import java.util.*; -import java.text.*; - -/** - * This class manages the actual code generation, putting - * the scanner together, filling in skeleton sections etc. - * - * Table compression, String packing etc. is also done here. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class Emitter { - - // bit masks for state attributes - static final private int FINAL = 1; - static final private int NOLOOK = 8; - - static final private String date = (new SimpleDateFormat()).format(new Date()); - - private File inputFile; - - private PrintWriter out; - private Skeleton skel; - private LexScan scanner; - private LexParse parser; - private DFA dfa; - - // for switch statement: - // table[i][j] is the set of input characters that leads from state i to state j - private CharSet table[][]; - - private boolean isTransition[]; - - // noTarget[i] is the set of input characters that have no target state in state i - private CharSet noTarget[]; - - // for row killing: - private int numRows; - private int [] rowMap; - private boolean [] rowKilled; - - // for col killing: - private int numCols; - private int [] colMap; - private boolean [] colKilled; - - - /** maps actions to their switch label */ - private Hashtable actionTable = new Hashtable(); - - private CharClassInterval [] intervals; - - private String visibility = "public"; - - public Emitter(File inputFile, LexParse parser, DFA dfa) throws IOException { - - String name = getBaseName(parser.scanner.className) + ".java"; - - File outputFile = normalize(name, inputFile); - - Out.println("Writing code to \""+outputFile+"\""); - - this.out = new PrintWriter(new BufferedWriter(new FileWriter(outputFile))); - this.parser = parser; - this.scanner = parser.scanner; - this.visibility = scanner.visibility; - this.inputFile = inputFile; - this.dfa = dfa; - this.skel = new Skeleton(out); - } - - /** - * Computes base name of the class name. Needs to take into account generics. - * - * @see LexScan#className - * @return the - */ - public static String getBaseName(String className) { - int gen = className.indexOf('<'); - if (gen < 0) { - return className; - } - else { - return className.substring(0, gen); - } - } - - - /** - * Constructs a file in Options.getDir() or in the same directory as - * another file. Makes a backup if the file already exists. - * - * @param name the name (without path) of the file - * @param path the path where to construct the file - * @param input fall back location if path = null - * (expected to be a file in the directory to write to) - */ - public static File normalize(String name, File input) { - File outputFile; - - if ( Options.getDir() == null ) - if ( input == null || input.getParent() == null ) - outputFile = new File(name); - else - outputFile = new File(input.getParent(), name); - else - outputFile = new File(Options.getDir(), name); - - if ( outputFile.exists() && !Options.no_backup ) { - File backup = new File( outputFile.toString()+"~" ); - - if ( backup.exists() ) backup.delete(); - - if ( outputFile.renameTo( backup ) ) - Out.println("Old file \""+outputFile+"\" saved as \""+backup+"\""); - else - Out.println("Couldn't save old file \""+outputFile+"\", overwriting!"); - } - - return outputFile; - } - - private void println() { - out.println(); - } - - private void println(String line) { - out.println(line); - } - - private void println(int i) { - out.println(i); - } - - private void print(String line) { - out.print(line); - } - - private void print(int i) { - out.print(i); - } - - private void print(int i, int tab) { - int exp; - - if (i < 0) - exp = 1; - else - exp = 10; - - while (tab-- > 1) { - if (Math.abs(i) < exp) print(" "); - exp*= 10; - } - - print(i); - } - - private boolean hasGenLookAhead() { - return dfa.lookaheadUsed; - } - - private void emitLookBuffer() { - if (!hasGenLookAhead()) return; - - println(" /** For the backwards DFA of general lookahead statements */"); - println(" private boolean [] zzFin = new boolean [ZZ_BUFFERSIZE+1];"); - println(); - } - - private void emitScanError() { - print(" private void zzScanError(int errorCode)"); - - if (scanner.scanErrorException != null) - print(" throws "+scanner.scanErrorException); - - println(" {"); - - skel.emitNext(); - - if (scanner.scanErrorException == null) - println(" throw new Error(message);"); - else - println(" throw new "+scanner.scanErrorException+"(message);"); - - skel.emitNext(); - - print(" "+visibility+" void yypushback(int number) "); - - if (scanner.scanErrorException == null) - println(" {"); - else - println(" throws "+scanner.scanErrorException+" {"); - } - - private void emitMain() { - if ( !(scanner.standalone || scanner.debugOption || scanner.cupDebug) ) return; - - if ( scanner.cupDebug ) { - println(" /**"); - println(" * Converts an int token code into the name of the"); - println(" * token by reflection on the cup symbol class/interface "+scanner.cupSymbol); - println(" *"); - println(" * This code was contributed by Karl Meissner "); - println(" */"); - println(" private String getTokenName(int token) {"); - println(" try {"); - println(" java.lang.reflect.Field [] classFields = " + scanner.cupSymbol + ".class.getFields();"); - println(" for (int i = 0; i < classFields.length; i++) {"); - println(" if (classFields[i].getInt(null) == token) {"); - println(" return classFields[i].getName();"); - println(" }"); - println(" }"); - println(" } catch (Exception e) {"); - println(" e.printStackTrace(System.err);"); - println(" }"); - println(""); - println(" return \"UNKNOWN TOKEN\";"); - println(" }"); - println(""); - println(" /**"); - println(" * Same as "+scanner.functionName+" but also prints the token to standard out"); - println(" * for debugging."); - println(" *"); - println(" * This code was contributed by Karl Meissner "); - println(" */"); - - print(" "+visibility+" "); - if ( scanner.tokenType == null ) { - if ( scanner.isInteger ) - print( "int" ); - else - if ( scanner.isIntWrap ) - print( "Integer" ); - else - print( "Yytoken" ); - } - else - print( scanner.tokenType ); - - print(" debug_"); - - print(scanner.functionName); - - print("() throws java.io.IOException"); - - if ( scanner.lexThrow != null ) { - print(", "); - print(scanner.lexThrow); - } - - if ( scanner.scanErrorException != null ) { - print(", "); - print(scanner.scanErrorException); - } - - println(" {"); - - println(" java_cup.runtime.Symbol s = "+scanner.functionName+"();"); - print(" System.out.println( "); - if (scanner.lineCount) print("\"line:\" + (yyline+1) + "); - if (scanner.columnCount) print("\" col:\" + (yycolumn+1) + "); - println("\" --\"+ yytext() + \"--\" + getTokenName(s.sym) + \"--\");"); - println(" return s;"); - println(" }"); - println(""); - } - - if ( scanner.standalone ) { - println(" /**"); - println(" * Runs the scanner on input files."); - println(" *"); - println(" * This is a standalone scanner, it will print any unmatched"); - println(" * text to System.out unchanged."); - println(" *"); - println(" * @param argv the command line, contains the filenames to run"); - println(" * the scanner on."); - println(" */"); - } - else { - println(" /**"); - println(" * Runs the scanner on input files."); - println(" *"); - println(" * This main method is the debugging routine for the scanner."); - println(" * It prints debugging information about each returned token to"); - println(" * System.out until the end of file is reached, or an error occured."); - println(" *"); - println(" * @param argv the command line, contains the filenames to run"); - println(" * the scanner on."); - println(" */"); - } - - String className = getBaseName(scanner.className); - - println(" public static void main(String argv[]) {"); - println(" if (argv.length == 0) {"); - println(" System.out.println(\"Usage : java "+className+" \");"); - println(" }"); - println(" else {"); - println(" for (int i = 0; i < argv.length; i++) {"); - println(" "+className+" scanner = null;"); - println(" try {"); - println(" scanner = new "+className+"( new java.io.FileReader(argv[i]) );"); - - if ( scanner.standalone ) { - println(" while ( !scanner.zzAtEOF ) scanner."+scanner.functionName+"();"); - } - else if (scanner.cupDebug ) { - println(" while ( !scanner.zzAtEOF ) scanner.debug_"+scanner.functionName+"();"); - } - else { - println(" do {"); - println(" System.out.println(scanner."+scanner.functionName+"());"); - println(" } while (!scanner.zzAtEOF);"); - println(""); - } - - println(" }"); - println(" catch (java.io.FileNotFoundException e) {"); - println(" System.out.println(\"File not found : \\\"\"+argv[i]+\"\\\"\");"); - println(" }"); - println(" catch (java.io.IOException e) {"); - println(" System.out.println(\"IO error scanning file \\\"\"+argv[i]+\"\\\"\");"); - println(" System.out.println(e);"); - println(" }"); - println(" catch (Exception e) {"); - println(" System.out.println(\"Unexpected exception:\");"); - println(" e.printStackTrace();"); - println(" }"); - println(" }"); - println(" }"); - println(" }"); - println(""); - } - - private String zzBufferLAccess(String idx) { - if (Options.sliceAndCharAt) { - return "(zzBufferArrayL != null ? zzBufferArrayL[" + idx + "] : zzBufferL.charAt("+idx+"))"; - } - if (Options.char_at) { - return "zzBufferL.charAt("+idx+")"; - } - return "zzBufferL[" + idx + "]"; - } - - private String zzBufferLLength() { - if (Options.sliceAndCharAt) { - return "(zzBufferArrayL != null ? zzBufferArrayL.length : zzBufferL.length())"; - } - if (Options.char_at) { - return "zzBufferL.length()"; - } - return "zzBufferL.length"; - } - - private void emitNoMatch() { - println(" zzScanError(ZZ_NO_MATCH);"); - } - - private void emitNextInput() { - println(" if (zzCurrentPosL < zzEndReadL)"); - println(" zzInput = " + zzBufferLAccess("zzCurrentPosL++") + ";"); - println(" else if (zzAtEOF) {"); - println(" zzInput = YYEOF;"); - println(" break zzForAction;"); - println(" }"); - println(" else {"); - println(" // store back cached positions"); - println(" zzCurrentPos = zzCurrentPosL;"); - println(" zzMarkedPos = zzMarkedPosL;"); - println(" boolean eof = zzRefill();"); - println(" // get translated positions and possibly new buffer"); - println(" zzCurrentPosL = zzCurrentPos;"); - println(" zzMarkedPosL = zzMarkedPos;"); - println(" zzBufferL = zzBuffer;"); - println(" zzEndReadL = zzEndRead;"); - println(" if (eof) {"); - println(" zzInput = YYEOF;"); - println(" break zzForAction;"); - println(" }"); - println(" else {"); - println(" zzInput = " + zzBufferLAccess("zzCurrentPosL++") + ";"); - println(" }"); - println(" }"); - } - - private void emitHeader() { - println("/* The following code was generated by JFlex "+Main.version+" on "+date+" */"); - println(""); - } - - private void emitUserCode() { - if ( scanner.userCode.length() > 0 ) - println(scanner.userCode.toString()); - } - - private void emitClassName() { - if (!endsWithJavadoc(scanner.userCode)) { - String path = inputFile.toString(); - // slashify path (avoid backslash u sequence = unicode escape) - if (File.separatorChar != '/') { - path = path.replace(File.separatorChar, '/'); - } - - println("/**"); - println(" * This class is a scanner generated by "); - println(" * JFlex "+Main.version); - println(" * on "+date+" from the specification file"); - println(" * "+path+""); - println(" */"); - } - - if ( scanner.isPublic ) print("public "); - - if ( scanner.isAbstract) print("abstract "); - - if ( scanner.isFinal ) print("final "); - - print("class "); - print(scanner.className); - - if ( scanner.isExtending != null ) { - print(" extends "); - print(scanner.isExtending); - } - - if ( scanner.isImplementing != null ) { - print(" implements "); - print(scanner.isImplementing); - } - - println(" {"); - } - - /** - * Try to find out if user code ends with a javadoc comment - * - * @param buffer the user code - * @return true if it ends with a javadoc comment - */ - public static boolean endsWithJavadoc(StringBuffer usercode) { - String s = usercode.toString().trim(); - - if (!s.endsWith("*/")) return false; - - // find beginning of javadoc comment - int i = s.lastIndexOf("/**"); - if (i < 0) return false; - - // javadoc comment shouldn't contain a comment end - return s.substring(i,s.length()-2).indexOf("*/") < 0; - } - - - private void emitLexicalStates() { - Enumeration stateNames = scanner.states.names(); - - while ( stateNames.hasMoreElements() ) { - String name = (String) stateNames.nextElement(); - - int num = scanner.states.getNumber(name).intValue(); - - println(" "+visibility+" static final int "+name+" = "+2*num+";"); - } - - // can't quite get rid of the indirection, even for non-bol lex states: - // their DFA states might be the same, but their EOF actions might be different - // (see bug #1540228) - println(""); - println(" /**"); - println(" * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l"); - println(" * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l"); - println(" * at the beginning of a line"); - println(" * l is of the form l = 2*k, k a non negative integer"); - println(" */"); - println(" private static final int ZZ_LEXSTATE[] = { "); - - int i, j = 0; - print(" "); - - for (i = 0; i < 2*dfa.numLexStates-1; i++) { - print( dfa.entryState[i], 2 ); - - print(", "); - - if (++j >= 16) { - println(); - print(" "); - j = 0; - } - } - - println( dfa.entryState[i] ); - println(" };"); - } - - private void emitDynamicInit() { - int count = 0; - int value = dfa.table[0][0]; - - println(" /** "); - println(" * The transition table of the DFA"); - println(" */"); - - CountEmitter e = new CountEmitter("Trans"); - e.setValTranslation(+1); // allow vals in [-1, 0xFFFE] - e.emitInit(); - - for (int i = 0; i < dfa.numStates; i++) { - if ( !rowKilled[i] ) { - for (int c = 0; c < dfa.numInput; c++) { - if ( !colKilled[c] ) { - if (dfa.table[i][c] == value) { - count++; - } - else { - e.emit(count, value); - - count = 1; - value = dfa.table[i][c]; - } - } - } - } - } - - e.emit(count, value); - e.emitUnpack(); - - println(e.toString()); - } - - - private void emitCharMapInitFunction() { - - CharClasses cl = parser.getCharClasses(); - - if ( cl.getMaxCharCode() < 256 ) return; - - println(""); - println(" /** "); - println(" * Unpacks the compressed character translation table."); - println(" *"); - println(" * @param packed the packed character translation table"); - println(" * @return the unpacked character translation table"); - println(" */"); - println(" private static char [] zzUnpackCMap(String packed) {"); - println(" char [] map = new char[0x10000];"); - println(" int i = 0; /* index in packed string */"); - println(" int j = 0; /* index in unpacked array */"); - println(" while (i < "+2*intervals.length+") {"); - println(" int count = packed.charAt(i++);"); - println(" char value = packed.charAt(i++);"); - println(" do map[j++] = value; while (--count > 0);"); - println(" }"); - println(" return map;"); - println(" }"); - } - - private void emitZZTrans() { - - int i,c; - int n = 0; - - println(" /** "); - println(" * The transition table of the DFA"); - println(" */"); - println(" private static final int ZZ_TRANS [] = {"); - - print(" "); - for (i = 0; i < dfa.numStates; i++) { - - if ( !rowKilled[i] ) { - for (c = 0; c < dfa.numInput; c++) { - if ( !colKilled[c] ) { - if (n >= 10) { - println(); - print(" "); - n = 0; - } - print( dfa.table[i][c] ); - if (i != dfa.numStates-1 || c != dfa.numInput-1) - print( ", "); - n++; - } - } - } - } - - println(); - println(" };"); - } - - private void emitCharMapArrayUnPacked() { - - CharClasses cl = parser.getCharClasses(); - - println(""); - println(" /** "); - println(" * Translates characters to character classes"); - println(" */"); - println(" private static final char [] ZZ_CMAP = {"); - - int n = 0; // numbers of entries in current line - print(" "); - - int max = cl.getMaxCharCode(); - - // not very efficient, but good enough for <= 255 characters - for (char c = 0; c <= max; c++) { - print(colMap[cl.getClassCode(c)],2); - - if (c < max) { - print(", "); - if ( ++n >= 16 ) { - println(); - print(" "); - n = 0; - } - } - } - - println(); - println(" };"); - println(); - } - - private void emitCharMapArray() { - CharClasses cl = parser.getCharClasses(); - - if ( cl.getMaxCharCode() < 256 ) { - emitCharMapArrayUnPacked(); - return; - } - - // ignores cl.getMaxCharCode(), emits all intervals instead - - intervals = cl.getIntervals(); - - println(""); - println(" /** "); - println(" * Translates characters to character classes"); - println(" */"); - println(" private static final String ZZ_CMAP_PACKED = "); - - int n = 0; // numbers of entries in current line - print(" \""); - - int i = 0; - int count, value; - while ( i < intervals.length ) { - count = intervals[i].end-intervals[i].start+1; - value = colMap[intervals[i].charClass]; - - // count could be >= 0x10000 - while (count > 0xFFFF) { - printUC(0xFFFF); - printUC(value); - count -= 0xFFFF; - n++; - } - - printUC(count); - printUC(value); - - if (i < intervals.length-1) { - if ( ++n >= 10 ) { - println("\"+"); - print(" \""); - n = 0; - } - } - - i++; - } - - println("\";"); - println(); - - println(" /** "); - println(" * Translates characters to character classes"); - println(" */"); - println(" private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);"); - println(); - } - - - /** - * Print number as octal/unicode escaped string character. - * - * @param c the value to print - * @prec 0 <= c <= 0xFFFF - */ - private void printUC(int c) { - if (c > 255) { - out.print("\\u"); - if (c < 0x1000) out.print("0"); - out.print(Integer.toHexString(c)); - } - else { - out.print("\\"); - out.print(Integer.toOctalString(c)); - } - } - - - private void emitRowMapArray() { - println(""); - println(" /** "); - println(" * Translates a state to a row index in the transition table"); - println(" */"); - - HiLowEmitter e = new HiLowEmitter("RowMap"); - e.emitInit(); - for (int i = 0; i < dfa.numStates; i++) { - e.emit(rowMap[i]*numCols); - } - e.emitUnpack(); - println(e.toString()); - } - - - private void emitAttributes() { - println(" /**"); - println(" * ZZ_ATTRIBUTE[aState] contains the attributes of state aState"); - println(" */"); - - CountEmitter e = new CountEmitter("Attribute"); - e.emitInit(); - - int count = 1; - int value = 0; - if ( dfa.isFinal[0] ) value = FINAL; - if ( !isTransition[0] ) value|= NOLOOK; - - for (int i = 1; i < dfa.numStates; i++) { - int attribute = 0; - if ( dfa.isFinal[i] ) attribute = FINAL; - if ( !isTransition[i] ) attribute|= NOLOOK; - - if (value == attribute) { - count++; - } - else { - e.emit(count, value); - count = 1; - value = attribute; - } - } - - e.emit(count, value); - e.emitUnpack(); - - println(e.toString()); - } - - - private void emitClassCode() { - if ( scanner.eofCode != null ) { - println(" /** denotes if the user-EOF-code has already been executed */"); - println(" private boolean zzEOFDone;"); - println(""); - } - - if ( scanner.classCode != null ) { - println(" /* user code: */"); - println(scanner.classCode); - } - } - - private void emitConstructorDecl() { - emitConstructorDecl(true); - - if ((scanner.standalone || scanner.debugOption) && - scanner.ctorArgs.size() > 0) { - Out.warning(ErrorMessages.get(ErrorMessages.CTOR_DEBUG)); - println(); - emitConstructorDecl(false); - } - } - - private void emitConstructorDecl(boolean printCtorArgs) { - println(" /**"); - println(" * Creates a new scanner"); - if (scanner.emitInputStreamCtor) { - println(" * There is also a java.io.InputStream version of this constructor."); - } - println(" *"); - println(" * @param in the java.io.Reader to read input from."); - println(" */"); - String warn = - "// WARNING: this is a default constructor for " + - "debug/standalone only. Has no custom parameters or init code."; - - if (!printCtorArgs) println(warn); - - print(" "); - - if ( scanner.isPublic ) print("public "); - print( getBaseName(scanner.className) ); - print("(java.io.Reader in"); - if (printCtorArgs) emitCtorArgs(); - print(")"); - - if ( scanner.initThrow != null && printCtorArgs) { - print(" throws "); - print( scanner.initThrow ); - } - - println(" {"); - - if ( scanner.initCode != null && printCtorArgs) { - print(" "); - print( scanner.initCode ); - } - - println(" this.zzReader = in;"); - - println(" }"); - println(); - - - if (scanner.emitInputStreamCtor) { - println(" /**"); - println(" * Creates a new scanner."); - println(" * There is also java.io.Reader version of this constructor."); - println(" *"); - println(" * @param in the java.io.Inputstream to read input from."); - println(" */"); - if (!printCtorArgs) println(warn); - - print(" "); - if (scanner.isPublic) print("public "); - print(getBaseName(scanner.className)); - print("(java.io.InputStream in"); - if (printCtorArgs) emitCtorArgs(); - print(")"); - - if (scanner.initThrow != null && printCtorArgs) { - print(" throws "); - print(scanner.initThrow); - } - - println(" {"); - - print(" this(new java.io.InputStreamReader(in)"); - if (printCtorArgs) { - for (int i = 0; i < scanner.ctorArgs.size(); i++) { - print(", " + scanner.ctorArgs.elementAt(i)); - } - } - println(");"); - - println(" }"); - } - } - - private void emitCtorArgs() { - for (int i = 0; i < scanner.ctorArgs.size(); i++) { - print(", "+scanner.ctorTypes.elementAt(i)); - print(" "+scanner.ctorArgs.elementAt(i)); - } - } - - private void emitDoEOF() { - if ( scanner.eofCode == null ) return; - - println(" /**"); - println(" * Contains user EOF-code, which will be executed exactly once,"); - println(" * when the end of file is reached"); - println(" */"); - - print(" private void zzDoEOF()"); - - if ( scanner.eofThrow != null ) { - print(" throws "); - print(scanner.eofThrow); - } - - println(" {"); - - println(" if (!zzEOFDone) {"); - println(" zzEOFDone = true;"); - println(" "+scanner.eofCode ); - println(" }"); - println(" }"); - println(""); - println(""); - } - - private void emitLexFunctHeader() { - - if (scanner.cupCompatible) { - // force public, because we have to implement java_cup.runtime.Symbol - print(" public "); - } - else { - print(" "+visibility+" "); - } - - if ( scanner.tokenType == null ) { - if ( scanner.isInteger ) - print( "int" ); - else - if ( scanner.isIntWrap ) - print( "Integer" ); - else - print( "Yytoken" ); - } - else - print( scanner.tokenType ); - - print(" "); - - print(scanner.functionName); - - print("() throws java.io.IOException"); - - if ( scanner.lexThrow != null ) { - print(", "); - print(scanner.lexThrow); - } - - if ( scanner.scanErrorException != null ) { - print(", "); - print(scanner.scanErrorException); - } - - println(" {"); - - skel.emitNext(); - - if ( scanner.useRowMap ) { - println(" int [] zzTransL = ZZ_TRANS;"); - println(" int [] zzRowMapL = ZZ_ROWMAP;"); - println(" int [] zzAttrL = ZZ_ATTRIBUTE;"); - - } - - skel.emitNext(); - - if ( scanner.charCount ) { - println(" yychar+= zzMarkedPosL-zzStartRead;"); - println(""); - } - - if ( scanner.lineCount || scanner.columnCount ) { - println(" boolean zzR = false;"); - println(" for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL;"); - println(" zzCurrentPosL++) {"); - println(" switch (" + zzBufferLAccess("zzCurrentPosL") + ") {"); - println(" case '\\u000B':"); - println(" case '\\u000C':"); - println(" case '\\u0085':"); - println(" case '\\u2028':"); - println(" case '\\u2029':"); - if ( scanner.lineCount ) - println(" yyline++;"); - if ( scanner.columnCount ) - println(" yycolumn = 0;"); - println(" zzR = false;"); - println(" break;"); - println(" case '\\r':"); - if ( scanner.lineCount ) - println(" yyline++;"); - if ( scanner.columnCount ) - println(" yycolumn = 0;"); - println(" zzR = true;"); - println(" break;"); - println(" case '\\n':"); - println(" if (zzR)"); - println(" zzR = false;"); - println(" else {"); - if ( scanner.lineCount ) - println(" yyline++;"); - if ( scanner.columnCount ) - println(" yycolumn = 0;"); - println(" }"); - println(" break;"); - println(" default:"); - println(" zzR = false;"); - if ( scanner.columnCount ) - println(" yycolumn++;"); - println(" }"); - println(" }"); - println(); - - if ( scanner.lineCount ) { - println(" if (zzR) {"); - println(" // peek one character ahead if it is \\n (if we have counted one line too much)"); - println(" boolean zzPeek;"); - println(" if (zzMarkedPosL < zzEndReadL)"); - println(" zzPeek = " + zzBufferLAccess("zzMarkedPosL") + " == '\\n';"); - println(" else if (zzAtEOF)"); - println(" zzPeek = false;"); - println(" else {"); - println(" boolean eof = zzRefill();"); - println(" zzEndReadL = zzEndRead;"); - println(" zzMarkedPosL = zzMarkedPos;"); - println(" zzBufferL = zzBuffer;"); - println(" if (eof) "); - println(" zzPeek = false;"); - println(" else "); - println(" zzPeek = " + zzBufferLAccess("zzMarkedPosL") + " == '\\n';"); - println(" }"); - println(" if (zzPeek) yyline--;"); - println(" }"); - } - } - - if ( scanner.bolUsed ) { - // zzMarkedPos > zzStartRead <=> last match was not empty - // if match was empty, last value of zzAtBOL can be used - // zzStartRead is always >= 0 - println(" if (zzMarkedPosL > zzStartRead) {"); - println(" switch (" + zzBufferLAccess("zzMarkedPosL-1") + ") {"); - println(" case '\\n':"); - println(" case '\\u000B':"); - println(" case '\\u000C':"); - println(" case '\\u0085':"); - println(" case '\\u2028':"); - println(" case '\\u2029':"); - println(" zzAtBOL = true;"); - println(" break;"); - println(" case '\\r': "); - println(" if (zzMarkedPosL < zzEndReadL)"); - println(" zzAtBOL = " + zzBufferLAccess("zzMarkedPosL") + " != '\\n';"); - println(" else if (zzAtEOF)"); - println(" zzAtBOL = false;"); - println(" else {"); - println(" boolean eof = zzRefill();"); - println(" zzMarkedPosL = zzMarkedPos;"); - println(" zzEndReadL = zzEndRead;"); - println(" zzBufferL = zzBuffer;"); - println(" if (eof) "); - println(" zzAtBOL = false;"); - println(" else "); - println(" zzAtBOL = " + zzBufferLAccess("zzMarkedPosL") + " != '\\n';"); - println(" }"); - println(" break;"); - println(" default:"); - println(" zzAtBOL = false;"); - println(" }"); - println(" }"); - } - - skel.emitNext(); - - if (scanner.bolUsed) { - println(" if (zzAtBOL)"); - println(" zzState = ZZ_LEXSTATE[zzLexicalState+1];"); - println(" else"); - println(" zzState = ZZ_LEXSTATE[zzLexicalState];"); - println(); - } - else { - println(" zzState = ZZ_LEXSTATE[zzLexicalState];"); - println(); - } - - skel.emitNext(); - } - - - private void emitGetRowMapNext() { - println(" int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];"); - println(" if (zzNext == "+DFA.NO_TARGET+") break zzForAction;"); - println(" zzState = zzNext;"); - println(); - - println(" int zzAttributes = zzAttrL[zzState];"); - - println(" if ( (zzAttributes & "+FINAL+") == "+FINAL+" ) {"); - - skel.emitNext(); - - println(" if ( (zzAttributes & "+NOLOOK+") == "+NOLOOK+" ) break zzForAction;"); - - skel.emitNext(); - } - - private void emitTransitionTable() { - transformTransitionTable(); - - println(" zzInput = zzCMapL[zzInput];"); - println(); - - println(" boolean zzIsFinal = false;"); - println(" boolean zzNoLookAhead = false;"); - println(); - - println(" zzForNext: { switch (zzState) {"); - - for (int state = 0; state < dfa.numStates; state++) - if (isTransition[state]) emitState(state); - - println(" default:"); - println(" // if this is ever reached, there is a serious bug in JFlex"); - println(" zzScanError(ZZ_UNKNOWN_ERROR);"); - println(" break;"); - println(" } }"); - println(); - - println(" if ( zzIsFinal ) {"); - - skel.emitNext(); - - println(" if ( zzNoLookAhead ) break zzForAction;"); - - skel.emitNext(); - } - - - /** - * Escapes all " ' \ tabs and newlines - */ - private String escapify(String s) { - StringBuffer result = new StringBuffer(s.length()*2); - - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - switch (c) { - case '\'': result.append("\\\'"); break; - case '\"': result.append("\\\""); break; - case '\\': result.append("\\\\"); break; - case '\t': result.append("\\t"); break; - case '\r': if (i+1 == s.length() || s.charAt(i+1) != '\n') result.append("\"+ZZ_NL+\""); - break; - case '\n': result.append("\"+ZZ_NL+\""); break; - default: result.append(c); - } - } - - return result.toString(); - } - - public void emitActionTable() { - int lastAction = 1; - int count = 0; - int value = 0; - - println(" /** "); - println(" * Translates DFA states to action switch labels."); - println(" */"); - CountEmitter e = new CountEmitter("Action"); - e.emitInit(); - - for (int i = 0; i < dfa.numStates; i++) { - int newVal = 0; - if ( dfa.isFinal[i] ) { - Action action = dfa.action[i]; - if (action.isEmittable()) { - Integer stored = (Integer) actionTable.get(action); - if ( stored == null ) { - stored = new Integer(lastAction++); - actionTable.put(action, stored); - } - newVal = stored.intValue(); - } - } - - if (value == newVal) { - count++; - } - else { - if (count > 0) e.emit(count,value); - count = 1; - value = newVal; - } - } - - if (count > 0) e.emit(count,value); - - e.emitUnpack(); - println(e.toString()); - } - - private void emitActions() { - println(" switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {"); - - int i = actionTable.size()+1; - Enumeration actions = actionTable.keys(); - while ( actions.hasMoreElements() ) { - Action action = (Action) actions.nextElement(); - int label = ((Integer) actionTable.get(action)).intValue(); - - println(" case "+label+": "); - - if (action.lookAhead() == Action.FIXED_BASE) { - println(" // lookahead expression with fixed base length"); - println(" zzMarkedPos = zzStartRead + "+action.getLookLength()+";"); - } - - if (action.lookAhead() == Action.FIXED_LOOK || - action.lookAhead() == Action.FINITE_CHOICE) { - println(" // lookahead expression with fixed lookahead length"); - println(" yypushback("+action.getLookLength()+");"); - } - - if (action.lookAhead() == Action.GENERAL_LOOK) { - println(" // general lookahead, find correct zzMarkedPos"); - println(" { int zzFState = "+dfa.entryState[action.getEntryState()]+";"); - println(" int zzFPos = zzStartRead;"); - println(" if (zzFin.length <= " + zzBufferLLength() + ") { zzFin = new boolean[" + zzBufferLLength() + "+1]; }"); - println(" boolean zzFinL[] = zzFin;"); - println(" while (zzFState != -1 && zzFPos < zzMarkedPos) {"); - println(" zzFinL[zzFPos] = ((zzAttrL[zzFState] & 1) == 1);"); - println(" zzInput = " + zzBufferLAccess("zzFPos++") + ";"); - println(" zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMapL[zzInput] ];"); - println(" }"); - println(" if (zzFState != -1) { zzFinL[zzFPos++] = ((zzAttrL[zzFState] & 1) == 1); } "); - println(" while (zzFPos <= zzMarkedPos) {"); - println(" zzFinL[zzFPos++] = false;"); - println(" }"); - println(); - println(" zzFState = "+dfa.entryState[action.getEntryState()+1]+";"); - println(" zzFPos = zzMarkedPos;"); - println(" while (!zzFinL[zzFPos] || (zzAttrL[zzFState] & 1) != 1) {"); - println(" zzInput = " + zzBufferLAccess("--zzFPos") + ";"); - println(" zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMapL[zzInput] ];"); - println(" };"); - println(" zzMarkedPos = zzFPos;"); - println(" }"); - } - - if ( scanner.debugOption ) { - print(" System.out.println("); - if ( scanner.lineCount ) - print("\"line: \"+(yyline+1)+\" \"+"); - if ( scanner.columnCount ) - print("\"col: \"+(yycolumn+1)+\" \"+"); - println("\"match: --\"+yytext()+\"--\");"); - print(" System.out.println(\"action ["+action.priority+"] { "); - print(escapify(action.content)); - println(" }\");"); - } - - println(" { "+action.content); - println(" }"); - println(" case "+(i++)+": break;"); - } - } - - private void emitEOFVal() { - EOFActions eofActions = parser.getEOFActions(); - - if ( scanner.eofCode != null ) - println(" zzDoEOF();"); - - if ( eofActions.numActions() > 0 ) { - println(" switch (zzLexicalState) {"); - - Enumeration stateNames = scanner.states.names(); - - // record lex states already emitted: - Hashtable used = new Hashtable(); - - // pick a start value for break case labels. - // must be larger than any value of a lex state: - int last = dfa.numStates; - - while ( stateNames.hasMoreElements() ) { - String name = (String) stateNames.nextElement(); - int num = scanner.states.getNumber(name).intValue(); - Action action = eofActions.getAction(num); - - if (action != null) { - println(" case "+name+": {"); - if ( scanner.debugOption ) { - print(" System.out.println("); - if ( scanner.lineCount ) - print("\"line: \"+(yyline+1)+\" \"+"); - if ( scanner.columnCount ) - print("\"col: \"+(yycolumn+1)+\" \"+"); - println("\"match: <>\");"); - print(" System.out.println(\"action ["+action.priority+"] { "); - print(escapify(action.content)); - println(" }\");"); - } - println(" "+action.content); - println(" }"); - println(" case "+(++last)+": break;"); - } - } - - println(" default:"); - } - - Action defaultAction = eofActions.getDefault(); - - if (defaultAction != null) { - println(" {"); - if ( scanner.debugOption ) { - print(" System.out.println("); - if ( scanner.lineCount ) - print("\"line: \"+(yyline+1)+\" \"+"); - if ( scanner.columnCount ) - print("\"col: \"+(yycolumn+1)+\" \"+"); - println("\"match: <>\");"); - print(" System.out.println(\"action ["+defaultAction.priority+"] { "); - print(escapify(defaultAction.content)); - println(" }\");"); - } - println(" " + defaultAction.content); - println(" }"); - } - else if ( scanner.eofVal != null ) - println(" { " + scanner.eofVal + " }"); - else if ( scanner.isInteger ) { - if ( scanner.tokenType != null ) { - Out.error(ErrorMessages.INT_AND_TYPE); - throw new GeneratorException(); - } - println(" return YYEOF;"); - } - else - println(" return null;"); - - if (eofActions.numActions() > 0) - println(" }"); - } - - private void emitState(int state) { - - println(" case "+state+":"); - println(" switch (zzInput) {"); - - int defaultTransition = getDefaultTransition(state); - - for (int next = 0; next < dfa.numStates; next++) { - - if ( next != defaultTransition && table[state][next] != null ) { - emitTransition(state, next); - } - } - - if ( defaultTransition != DFA.NO_TARGET && noTarget[state] != null ) { - emitTransition(state, DFA.NO_TARGET); - } - - emitDefaultTransition(state, defaultTransition); - - println(" }"); - println(""); - } - - private void emitTransition(int state, int nextState) { - - CharSetEnumerator chars; - - if (nextState != DFA.NO_TARGET) - chars = table[state][nextState].characters(); - else - chars = noTarget[state].characters(); - - print(" case "); - print(chars.nextElement()); - print(": "); - - while ( chars.hasMoreElements() ) { - println(); - print(" case "); - print(chars.nextElement()); - print(": "); - } - - if ( nextState != DFA.NO_TARGET ) { - if ( dfa.isFinal[nextState] ) - print("zzIsFinal = true; "); - - if ( !isTransition[nextState] ) - print("zzNoLookAhead = true; "); - - if ( nextState == state ) - println("break zzForNext;"); - else - println("zzState = "+nextState+"; break zzForNext;"); - } - else - println("break zzForAction;"); - } - - private void emitDefaultTransition(int state, int nextState) { - print(" default: "); - - if ( nextState != DFA.NO_TARGET ) { - if ( dfa.isFinal[nextState] ) - print("zzIsFinal = true; "); - - if ( !isTransition[nextState] ) - print("zzNoLookAhead = true; "); - - if ( nextState == state ) - println("break zzForNext;"); - else - println("zzState = "+nextState+"; break zzForNext;"); - } - else - println( "break zzForAction;" ); - } - - private int getDefaultTransition(int state) { - int max = 0; - - for (int i = 0; i < dfa.numStates; i++) { - if ( table[state][max] == null ) - max = i; - else - if ( table[state][i] != null && table[state][max].size() < table[state][i].size() ) - max = i; - } - - if ( table[state][max] == null ) return DFA.NO_TARGET; - if ( noTarget[state] == null ) return max; - - if ( table[state][max].size() < noTarget[state].size() ) - max = DFA.NO_TARGET; - - return max; - } - - // for switch statement: - private void transformTransitionTable() { - - int numInput = parser.getCharClasses().getNumClasses()+1; - - int i; - char j; - - table = new CharSet[dfa.numStates][dfa.numStates]; - noTarget = new CharSet[dfa.numStates]; - - for (i = 0; i < dfa.numStates; i++) - for (j = 0; j < dfa.numInput; j++) { - - int nextState = dfa.table[i][j]; - - if ( nextState == DFA.NO_TARGET ) { - if ( noTarget[i] == null ) - noTarget[i] = new CharSet(numInput, colMap[j]); - else - noTarget[i].add(colMap[j]); - } - else { - if ( table[i][nextState] == null ) - table[i][nextState] = new CharSet(numInput, colMap[j]); - else - table[i][nextState].add(colMap[j]); - } - } - } - - private void findActionStates() { - isTransition = new boolean [dfa.numStates]; - - for (int i = 0; i < dfa.numStates; i++) { - char j = 0; - while ( !isTransition[i] && j < dfa.numInput ) - isTransition[i] = dfa.table[i][j++] != DFA.NO_TARGET; - } - } - - - private void reduceColumns() { - colMap = new int [dfa.numInput]; - colKilled = new boolean [dfa.numInput]; - - int i,j,k; - int translate = 0; - boolean equal; - - numCols = dfa.numInput; - - for (i = 0; i < dfa.numInput; i++) { - - colMap[i] = i-translate; - - for (j = 0; j < i; j++) { - - // test for equality: - k = -1; - equal = true; - while (equal && ++k < dfa.numStates) - equal = dfa.table[k][i] == dfa.table[k][j]; - - if (equal) { - translate++; - colMap[i] = colMap[j]; - colKilled[i] = true; - numCols--; - break; - } // if - } // for j - } // for i - } - - private void reduceRows() { - rowMap = new int [dfa.numStates]; - rowKilled = new boolean [dfa.numStates]; - - int i,j,k; - int translate = 0; - boolean equal; - - numRows = dfa.numStates; - - // i is the state to add to the new table - for (i = 0; i < dfa.numStates; i++) { - - rowMap[i] = i-translate; - - // check if state i can be removed (i.e. already - // exists in entries 0..i-1) - for (j = 0; j < i; j++) { - - // test for equality: - k = -1; - equal = true; - while (equal && ++k < dfa.numInput) - equal = dfa.table[i][k] == dfa.table[j][k]; - - if (equal) { - translate++; - rowMap[i] = rowMap[j]; - rowKilled[i] = true; - numRows--; - break; - } // if - } // for j - } // for i - - } - - - /** - * Set up EOF code section according to scanner.eofcode - */ - private void setupEOFCode() { - if (scanner.eofclose) { - scanner.eofCode = LexScan.conc(scanner.eofCode, " yyclose();"); - scanner.eofThrow = LexScan.concExc(scanner.eofThrow, "java.io.IOException"); - } - } - - - /** - * Main Emitter method. - */ - public void emit() { - - setupEOFCode(); - - if (scanner.functionName == null) - scanner.functionName = "yylex"; - - reduceColumns(); - findActionStates(); - - emitHeader(); - emitUserCode(); - emitClassName(); - - skel.emitNext(); - - println(" private static final int ZZ_BUFFERSIZE = "+scanner.bufferSize+";"); - - if (scanner.debugOption) { - println(" private static final String ZZ_NL = System.getProperty(\"line.separator\");"); - } - - skel.emitNext(); - - emitLexicalStates(); - - emitCharMapArray(); - - emitActionTable(); - - if (scanner.useRowMap) { - reduceRows(); - - emitRowMapArray(); - - if (scanner.packed) - emitDynamicInit(); - else - emitZZTrans(); - } - - skel.emitNext(); - - if (scanner.useRowMap) - emitAttributes(); - - skel.emitNext(); - - emitLookBuffer(); - - emitClassCode(); - - skel.emitNext(); - - emitConstructorDecl(); - - emitCharMapInitFunction(); - - skel.emitNext(); - - emitScanError(); - - skel.emitNext(); - - emitDoEOF(); - - skel.emitNext(); - - emitLexFunctHeader(); - - emitNextInput(); - - if (scanner.useRowMap) - emitGetRowMapNext(); - else - emitTransitionTable(); - - skel.emitNext(); - - emitActions(); - - skel.emitNext(); - - emitEOFVal(); - - skel.emitNext(); - - emitNoMatch(); - - skel.emitNext(); - - emitMain(); - - skel.emitNext(); - - out.close(); - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/ErrorMessages.java b/tools/lexer/jflex-1.4/src/JFlex/ErrorMessages.java deleted file mode 100644 index 2e5a85c16a37..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/ErrorMessages.java +++ /dev/null @@ -1,149 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software); you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY); without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program); if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.text.MessageFormat; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - - -/** - * Central class for all kinds of JFlex messages. - * - * [Is not yet used exclusively, but should] - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class ErrorMessages { - private String key; - - /* not final static, because initializing here seems too early - * for OS/2 JDK 1.1.8. See bug 1065521. - */ - private static ResourceBundle resourceBundle = null; - - private ErrorMessages(String key) { - this.key = key; - } - - public static String get(ErrorMessages msg) { - if (resourceBundle == null) { - resourceBundle = ResourceBundle.getBundle("JFlex.Messages"); - } - try { - return resourceBundle.getString(msg.key); - } catch (MissingResourceException e) { - return '!' + msg.key + '!'; - } - } - - public static String get(ErrorMessages msg, String data) { - Object [] args = { data }; - return MessageFormat.format(get(msg),args); - } - - public static String get(ErrorMessages msg, String data1, String data2) { - Object [] args = { data1, data2 }; - return MessageFormat.format(get(msg),args); - } - - public static String get(ErrorMessages msg, int data) { - Object [] args = { new Integer(data) }; - return MessageFormat.format(get(msg),args); - } - - // typesafe enumeration (generated, do not edit) - public static ErrorMessages UNTERMINATED_STR = new ErrorMessages("UNTERMINATED_STR"); - public static ErrorMessages EOF_WO_ACTION = new ErrorMessages("EOF_WO_ACTION"); - public static ErrorMessages EOF_SINGLERULE = new ErrorMessages("EOF_SINGLERULE"); - public static ErrorMessages UNKNOWN_OPTION = new ErrorMessages("UNKNOWN_OPTION"); - public static ErrorMessages UNEXPECTED_CHAR = new ErrorMessages("UNEXPECTED_CHAR"); - public static ErrorMessages UNEXPECTED_NL = new ErrorMessages("UNEXPECTED_NL"); - public static ErrorMessages LEXSTATE_UNDECL = new ErrorMessages("LEXSTATE_UNDECL"); - public static ErrorMessages STATE_IDENT_EXP = new ErrorMessages("STATE_IDENT_EXP"); - public static ErrorMessages REPEAT_ZERO = new ErrorMessages("REPEAT_ZERO"); - public static ErrorMessages REPEAT_GREATER = new ErrorMessages("REPEAT_GREATER"); - public static ErrorMessages REGEXP_EXPECTED = new ErrorMessages("REGEXP_EXPECTED"); - public static ErrorMessages MACRO_UNDECL = new ErrorMessages("MACRO_UNDECL"); - public static ErrorMessages CHARSET_2_SMALL = new ErrorMessages("CHARSET_2_SMALL"); - public static ErrorMessages CS2SMALL_STRING = new ErrorMessages("CS2SMALL_STRING"); - public static ErrorMessages CS2SMALL_CHAR = new ErrorMessages("CS2SMALL_CHAR"); - public static ErrorMessages CHARCLASS_MACRO = new ErrorMessages("CHARCLASS_MACRO"); - public static ErrorMessages UNKNOWN_SYNTAX = new ErrorMessages("UNKNOWN_SYNTAX"); - public static ErrorMessages SYNTAX_ERROR = new ErrorMessages("SYNTAX_ERROR"); - public static ErrorMessages NOT_AT_BOL = new ErrorMessages("NOT_AT_BOL"); - public static ErrorMessages NO_MATCHING_BR = new ErrorMessages("NO_MATCHING_BR"); - public static ErrorMessages EOF_IN_ACTION = new ErrorMessages("EOF_IN_ACTION"); - public static ErrorMessages EOF_IN_COMMENT = new ErrorMessages("EOF_IN_COMMENT"); - public static ErrorMessages EOF_IN_STRING = new ErrorMessages("EOF_IN_STRING"); - public static ErrorMessages EOF_IN_MACROS = new ErrorMessages("EOF_IN_MACROS"); - public static ErrorMessages EOF_IN_STATES = new ErrorMessages("EOF_IN_STATES"); - public static ErrorMessages EOF_IN_REGEXP = new ErrorMessages("EOF_IN_REGEXP"); - public static ErrorMessages UNEXPECTED_EOF = new ErrorMessages("UNEXPECTED_EOF"); - public static ErrorMessages NO_LEX_SPEC = new ErrorMessages("NO_LEX_SPEC"); - public static ErrorMessages NO_LAST_ACTION = new ErrorMessages("NO_LAST_ACTION"); - public static ErrorMessages NO_DIRECTORY = new ErrorMessages("NO_DIRECTORY"); - public static ErrorMessages NO_SKEL_FILE = new ErrorMessages("NO_SKEL_FILE"); - public static ErrorMessages WRONG_SKELETON = new ErrorMessages("WRONG_SKELETON"); - public static ErrorMessages OUT_OF_MEMORY = new ErrorMessages("OUT_OF_MEMORY"); - public static ErrorMessages QUIL_INITTHROW = new ErrorMessages("QUIL_INITTHROW"); - public static ErrorMessages QUIL_EOFTHROW = new ErrorMessages("QUIL_EOFTHROW"); - public static ErrorMessages QUIL_YYLEXTHROW = new ErrorMessages("QUIL_YYLEXTHROW"); - public static ErrorMessages ZERO_STATES = new ErrorMessages("ZERO_STATES"); - public static ErrorMessages NO_BUFFER_SIZE = new ErrorMessages("NO_BUFFER_SIZE"); - public static ErrorMessages NOT_READABLE = new ErrorMessages("NOT_READABLE"); - public static ErrorMessages FILE_CYCLE = new ErrorMessages("FILE_CYCLE"); - public static ErrorMessages FILE_WRITE = new ErrorMessages("FILE_WRITE"); - public static ErrorMessages QUIL_SCANERROR = new ErrorMessages("QUIL_SCANERROR"); - public static ErrorMessages NEVER_MATCH = new ErrorMessages("NEVER_MATCH"); - public static ErrorMessages QUIL_THROW = new ErrorMessages("QUIL_THROW"); - public static ErrorMessages EOL_IN_CHARCLASS = new ErrorMessages("EOL_IN_CHARCLASS"); - public static ErrorMessages QUIL_CUPSYM = new ErrorMessages("QUIL_CUPSYM"); - public static ErrorMessages CUPSYM_AFTER_CUP = new ErrorMessages("CUPSYM_AFTER_CUP"); - public static ErrorMessages ALREADY_RUNNING = new ErrorMessages("ALREADY_RUNNING"); - public static ErrorMessages CANNOT_READ_SKEL = new ErrorMessages("CANNOT_READ_SKEL"); - public static ErrorMessages READING_SKEL = new ErrorMessages("READING_SKEL"); - public static ErrorMessages SKEL_IO_ERROR = new ErrorMessages("SKEL_IO_ERROR"); - public static ErrorMessages SKEL_IO_ERROR_DEFAULT = new ErrorMessages("SKEL_IO_ERROR_DEFAULT"); - public static ErrorMessages READING = new ErrorMessages("READING"); - public static ErrorMessages CANNOT_OPEN = new ErrorMessages("CANNOT_OPEN"); - public static ErrorMessages NFA_IS = new ErrorMessages("NFA_IS"); - public static ErrorMessages NFA_STATES = new ErrorMessages("NFA_STATES"); - public static ErrorMessages DFA_TOOK = new ErrorMessages("DFA_TOOK"); - public static ErrorMessages DFA_IS = new ErrorMessages("DFA_IS"); - public static ErrorMessages MIN_TOOK = new ErrorMessages("MIN_TOOK"); - public static ErrorMessages MIN_DFA_IS = new ErrorMessages("MIN_DFA_IS"); - public static ErrorMessages WRITE_TOOK = new ErrorMessages("WRITE_TOOK"); - public static ErrorMessages TOTAL_TIME = new ErrorMessages("TOTAL_TIME"); - public static ErrorMessages IO_ERROR = new ErrorMessages("IO_ERROR"); - public static ErrorMessages THIS_IS_JFLEX = new ErrorMessages("THIS_IS_JFLEX"); - public static ErrorMessages UNKNOWN_COMMANDLINE = new ErrorMessages("UNKNOWN_COMMANDLINE"); - public static ErrorMessages MACRO_CYCLE = new ErrorMessages("MACRO_CYCLE"); - public static ErrorMessages MACRO_DEF_MISSING = new ErrorMessages("MACRO_DEF_MISSING"); - public static ErrorMessages PARSING_TOOK = new ErrorMessages("PARSING_TOOK"); - public static ErrorMessages NFA_TOOK = new ErrorMessages("NFA_TOOK"); - public static ErrorMessages LOOKAHEAD_NEEDS_ACTION = new ErrorMessages("LOOKAHEAD_NEEDS_ACTION"); - public static ErrorMessages EMPTY_MATCH = new ErrorMessages("EMPTY_MATCH"); - public static ErrorMessages CTOR_ARG = new ErrorMessages("CTOR_ARG"); - public static ErrorMessages CTOR_DEBUG = new ErrorMessages("CTOR_DEBUG"); - public static ErrorMessages INT_AND_TYPE = new ErrorMessages("INT_AND_TYPE"); -} \ No newline at end of file diff --git a/tools/lexer/jflex-1.4/src/JFlex/GeneratorException.java b/tools/lexer/jflex-1.4/src/JFlex/GeneratorException.java deleted file mode 100644 index c98392ef6d42..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/GeneratorException.java +++ /dev/null @@ -1,36 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * Thrown when code generation has to be aborted. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class GeneratorException extends RuntimeException { - - public GeneratorException() { - super("Generation aborted"); - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/HiLowEmitter.java b/tools/lexer/jflex-1.4/src/JFlex/HiLowEmitter.java deleted file mode 100644 index 9af8c517334b..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/HiLowEmitter.java +++ /dev/null @@ -1,88 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * jflex * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -/** - * HiLowEmitter - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class HiLowEmitter extends PackEmitter { - - /** number of entries in expanded array */ - private int numEntries; - - /** - * Create new emitter for values in [0, 0xFFFFFFFF] using hi/low encoding. - * - * @param name the name of the generated array - */ - public HiLowEmitter(String name) { - super(name); - } - - /** - * Emits hi/low pair unpacking code for the generated array. - * - * @see JFlex.PackEmitter#emitUnPack() - */ - public void emitUnpack() { - // close last string chunk: - println("\";"); - nl(); - println(" private static int [] zzUnpack"+name+"() {"); - println(" int [] result = new int["+numEntries+"];"); - println(" int offset = 0;"); - - for (int i = 0; i < chunks; i++) { - println(" offset = zzUnpack"+name+"("+constName()+"_PACKED_"+i+", offset, result);"); - } - - println(" return result;"); - println(" }"); - - nl(); - println(" private static int zzUnpack"+name+"(String packed, int offset, int [] result) {"); - println(" int i = 0; /* index in packed string */"); - println(" int j = offset; /* index in unpacked array */"); - println(" int l = packed.length();"); - println(" while (i < l) {"); - println(" int high = packed.charAt(i++) << 16;"); - println(" result[j++] = high | packed.charAt(i++);"); - println(" }"); - println(" return j;"); - println(" }"); - } - - /** - * Emit one value using two characters. - * - * @param val the value to emit - * @prec 0 <= val <= 0xFFFFFFFF - */ - public void emit(int val) { - numEntries+= 1; - breaks(); - emitUC(val >> 16); - emitUC(val & 0xFFFF); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/IntCharSet.java b/tools/lexer/jflex-1.4/src/JFlex/IntCharSet.java deleted file mode 100644 index 8f4a13ddef91..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/IntCharSet.java +++ /dev/null @@ -1,411 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.util.*; - - -/** - * CharSet implemented with intervalls - * - * [fixme: optimizations possible] - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public final class IntCharSet { - - private final static boolean DEBUG = false; - - /* invariant: all intervals are disjoint, ordered */ - private Vector intervalls; - private int pos; - - public IntCharSet() { - this.intervalls = new Vector(); - } - - public IntCharSet(char c) { - this(new Interval(c,c)); - } - - public IntCharSet(Interval intervall) { - this(); - intervalls.addElement(intervall); - } - - public IntCharSet(Vector /* Interval */ chars) { - int size = chars.size(); - - this.intervalls = new Vector(size); - - for (int i = 0; i < size; i++) - add( (Interval) chars.elementAt(i) ); - } - - - - - /** - * returns the index of the intervall that contains - * the character c, -1 if there is no such intevall - * - * @prec: true - * @post: -1 <= return < intervalls.size() && - * (return > -1 --> intervalls[return].contains(c)) - * - * @param c the character - * @return the index of the enclosing interval, -1 if no such interval - */ - private int indexOf(char c) { - int start = 0; - int end = intervalls.size()-1; - - while (start <= end) { - int check = (start+end) / 2; - Interval i = (Interval) intervalls.elementAt(check); - - if (start == end) - return i.contains(c) ? start : -1; - - if (c < i.start) { - end = check-1; - continue; - } - - if (c > i.end) { - start = check+1; - continue; - } - - return check; - } - - return -1; - } - - public IntCharSet add(IntCharSet set) { - for (int i = 0; i < set.intervalls.size(); i++) - add( (Interval) set.intervalls.elementAt(i) ); - return this; - } - - public void add(Interval intervall) { - - int size = intervalls.size(); - - for (int i = 0; i < size; i++) { - Interval elem = (Interval) intervalls.elementAt(i); - - if ( elem.end+1 < intervall.start ) continue; - - if ( elem.contains(intervall) ) return; - - if ( elem.start > intervall.end+1 ) { - intervalls.insertElementAt(new Interval(intervall), i); - return; - } - - if (intervall.start < elem.start) - elem.start = intervall.start; - - if (intervall.end <= elem.end) - return; - - elem.end = intervall.end; - - i++; - // delete all x with x.contains( intervall.end ) - while (i < size) { - Interval x = (Interval) intervalls.elementAt(i); - if (x.start > elem.end+1) return; - - elem.end = x.end; - intervalls.removeElementAt(i); - size--; - } - return; - } - - intervalls.addElement(new Interval(intervall)); - } - - public void add(char c) { - int size = intervalls.size(); - - for (int i = 0; i < size; i++) { - Interval elem = (Interval) intervalls.elementAt(i); - if (elem.end+1 < c) continue; - - if (elem.contains(c)) return; // already there, nothing to do - - // assert(elem.end+1 >= c && (elem.start > c || elem.end < c)); - - if (elem.start > c+1) { - intervalls.insertElementAt(new Interval(c,c), i); - return; - } - - // assert(elem.end+1 >= c && elem.start <= c+1 && (elem.start > c || elem.end < c)); - - if (c+1 == elem.start) { - elem.start = c; - return; - } - - // assert(elem.end+1 == c); - elem.end = c; - - // merge with next interval if it contains c - if (i+1 >= size) return; - Interval x = (Interval) intervalls.elementAt(i+1); - if (x.start <= c+1) { - elem.end = x.end; - intervalls.removeElementAt(i+1); - } - return; - } - - // end reached but nothing found -> append at end - intervalls.addElement(new Interval(c,c)); - } - - - public boolean contains(char singleChar) { - return indexOf(singleChar) >= 0; - } - - - /** - * o instanceof Interval - */ - public boolean equals(Object o) { - IntCharSet set = (IntCharSet) o; - if ( intervalls.size() != set.intervalls.size() ) return false; - - for (int i = 0; i < intervalls.size(); i++) { - if ( !intervalls.elementAt(i).equals( set.intervalls.elementAt(i)) ) - return false; - } - - return true; - } - - private char min(char a, char b) { - return a <= b ? a : b; - } - - private char max(char a, char b) { - return a >= b ? a : b; - } - - /* intersection */ - public IntCharSet and(IntCharSet set) { - if (DEBUG) { - Out.dump("intersection"); - Out.dump("this : "+this); - Out.dump("other : "+set); - } - - IntCharSet result = new IntCharSet(); - - int i = 0; // index in this.intervalls - int j = 0; // index in set.intervalls - - int size = intervalls.size(); - int setSize = set.intervalls.size(); - - while (i < size && j < setSize) { - Interval x = (Interval) this.intervalls.elementAt(i); - Interval y = (Interval) set.intervalls.elementAt(j); - - if (x.end < y.start) { - i++; - continue; - } - - if (y.end < x.start) { - j++; - continue; - } - - result.intervalls.addElement( - new Interval( - max(x.start, y.start), - min(x.end, y.end) - ) - ); - - if (x.end >= y.end) j++; - if (y.end >= x.end) i++; - } - - if (DEBUG) { - Out.dump("result: "+result); - } - - return result; - } - - /* complement */ - /* prec: this.contains(set), set != null */ - public void sub(IntCharSet set) { - if (DEBUG) { - Out.dump("complement"); - Out.dump("this : "+this); - Out.dump("other : "+set); - } - - int i = 0; // index in this.intervalls - int j = 0; // index in set.intervalls - - int setSize = set.intervalls.size(); - - while (i < intervalls.size() && j < setSize) { - Interval x = (Interval) this.intervalls.elementAt(i); - Interval y = (Interval) set.intervalls.elementAt(j); - - if (DEBUG) { - Out.dump("this : "+this); - Out.dump("this ["+i+"] : "+x); - Out.dump("other ["+j+"] : "+y); - } - - if (x.end < y.start) { - i++; - continue; - } - - if (y.end < x.start) { - j++; - continue; - } - - // x.end >= y.start && y.end >= x.start -> - // x.end <= y.end && x.start >= y.start (prec) - - if ( x.start == y.start && x.end == y.end ) { - intervalls.removeElementAt(i); - j++; - continue; - } - - // x.end <= y.end && x.start >= y.start && - // (x.end < y.end || x.start > y.start) -> - // x.start < x.end - - if ( x.start == y.start ) { - x.start = (char) (y.end+1); - j++; - continue; - } - - if ( x.end == y.end ) { - x.end = (char) (y.start-1); - i++; - j++; - continue; - } - - intervalls.insertElementAt(new Interval(x.start, (char) (y.start-1)), i); - x.start = (char) (y.end+1); - - i++; - j++; - } - - if (DEBUG) { - Out.dump("result: "+this); - } - } - - public boolean containsElements() { - return intervalls.size() > 0; - } - - public int numIntervalls() { - return intervalls.size(); - } - - // beware: depends on caller protocol, single user only - public Interval getNext() { - if (pos == intervalls.size()) pos = 0; - return (Interval) intervalls.elementAt(pos++); - } - - /** - * Create a caseless version of this charset. - *

- * The caseless version contains all characters of this char set, - * and additionally all lower/upper/title case variants of the - * characters in this set. - * - * @return a caseless copy of this set - */ - public IntCharSet getCaseless() { - IntCharSet n = copy(); - - int size = intervalls.size(); - for (int i=0; i < size; i++) { - Interval elem = (Interval) intervalls.elementAt(i); - for (char c = elem.start; c <= elem.end; c++) { - n.add(Character.toLowerCase(c)); - n.add(Character.toUpperCase(c)); - n.add(Character.toTitleCase(c)); - } - } - - return n; - } - - - /** - * Make a string representation of this char set. - * - * @return a string representing this char set. - */ - public String toString() { - StringBuffer result = new StringBuffer("{ "); - - for (int i = 0; i < intervalls.size(); i++) - result.append( intervalls.elementAt(i) ); - - result.append(" }"); - - return result.toString(); - } - - - /** - * Return a (deep) copy of this char set - * - * @return the copy - */ - public IntCharSet copy() { - IntCharSet result = new IntCharSet(); - int size = intervalls.size(); - for (int i=0; i < size; i++) { - Interval iv = ((Interval) intervalls.elementAt(i)).copy(); - result.intervalls.addElement(iv); - } - return result; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/IntPair.java b/tools/lexer/jflex-1.4/src/JFlex/IntPair.java deleted file mode 100644 index 877bd10ce315..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/IntPair.java +++ /dev/null @@ -1,57 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * Simple pair of integers. - * - * Used in NFA to represent a partial NFA by its start and end state. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final class IntPair { - - int start; - int end; - - IntPair(int start, int end) { - this.start = start; - this.end = end; - } - - public int hashCode() { - return end + (start << 8); - } - - public boolean equals(Object o) { - if ( o instanceof IntPair ) { - IntPair p = (IntPair) o; - return start == p.start && end == p.end; - } - return false; - } - - public String toString() { - return "("+start+","+end+")"; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Interval.java b/tools/lexer/jflex-1.4/src/JFlex/Interval.java deleted file mode 100644 index 7f52a77576d3..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Interval.java +++ /dev/null @@ -1,163 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * An intervall of characters with basic operations. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public final class Interval { - - /* start and end of the intervall */ - public char start, end; - - - /** - * Constuct a new intervall from start to end. - * - * @param start first character the intervall should contain - * @param end last character the intervall should contain - */ - public Interval(char start, char end) { - this.start = start; - this.end = end; - } - - - /** - * Copy constructor - */ - public Interval(Interval other) { - this.start = other.start; - this.end = other.end; - } - - - /** - * Return true iff point is contained in this intervall. - * - * @param point the character to check - */ - public boolean contains(char point) { - return start <= point && end >= point; - } - - - /** - * Return true iff this intervall completely contains the - * other one. - * - * @param other the other intervall - */ - public boolean contains(Interval other) { - return this.start <= other.start && this.end >= other.end; - } - - - /** - * Return true if o is an intervall - * with the same borders. - * - * @param o the object to check equality with - */ - public boolean equals(Object o) { - if ( o == this ) return true; - if ( !(o instanceof Interval) ) return false; - - Interval other = (Interval) o; - return other.start == this.start && other.end == this.end; - } - - - /** - * Set a new last character - * - * @param end the new last character of this intervall - */ - public void setEnd(char end) { - this.end = end; - } - - - /** - * Set a new first character - * - * @param start the new first character of this intervall - */ - public void setStart(char start) { - this.start = start; - } - - - /** - * Check wether a character is printable. - * - * @param c the character to check - */ - private static boolean isPrintable(char c) { - // fixme: should make unicode test here - return c > 31 && c < 127; - } - - - /** - * Get a String representation of this intervall. - * - * @return a string "[start-end]" or - * "[start]" (if there is only one character in - * the intervall) where start and - * end are either a number (the character code) - * or something of the from 'a'. - */ - public String toString() { - StringBuffer result = new StringBuffer("["); - - if ( isPrintable(start) ) - result.append("'"+start+"'"); - else - result.append( (int) start ); - - if (start != end) { - result.append("-"); - - if ( isPrintable(end) ) - result.append("'"+end+"'"); - else - result.append( (int) end ); - } - - result.append("]"); - return result.toString(); - } - - - /** - * Make a copy of this interval. - * - * @return the copy - */ - public Interval copy() { - return new Interval(start,end); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/LexParse.cup b/tools/lexer/jflex-1.4/src/JFlex/LexParse.cup deleted file mode 100644 index c67258adc3b5..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/LexParse.cup +++ /dev/null @@ -1,807 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.util.*; - -/* customizing code */ - -action code {: - - LexScan scanner; - CharClasses charClasses = new CharClasses(Options.jlex ? 127 : 0xFFFF); - RegExps regExps = new RegExps(); - Macros macros = new Macros(); - Integer stateNumber; - Timer t = new Timer(); - EOFActions eofActions = new EOFActions(); - - void fatalError(ErrorMessages message, int line, int col) { - syntaxError(message, line, col); - throw new GeneratorException(); - } - - void fatalError(ErrorMessages message) { - fatalError(message, scanner.currentLine(), -1); - throw new GeneratorException(); - } - - void syntaxError(ErrorMessages message) { - Out.error(scanner.file, message, scanner.currentLine(), -1); - } - - void syntaxError(ErrorMessages message, int line) { - Out.error(scanner.file, message, line, -1); - } - - void syntaxError(ErrorMessages message, int line, int col) { - Out.error(scanner.file, message, line, col); - } - - - private boolean check(int type, char c) { - switch (type) { - case sym.JLETTERCLASS: - return Character.isJavaIdentifierStart(c); - - case sym.JLETTERDIGITCLASS: - return Character.isJavaIdentifierPart(c); - - case sym.LETTERCLASS: - return Character.isLetter(c); - - case sym.DIGITCLASS: - return Character.isDigit(c); - - case sym.UPPERCLASS: - return Character.isUpperCase(c); - - case sym.LOWERCLASS: - return Character.isLowerCase(c); - - case sym.UNICODE_UNASSIGNED: - return Character.getType(c) == Character.UNASSIGNED; - - case sym.UNICODE_UPPERCASE_LETTER: - return Character.getType(c) == Character.UPPERCASE_LETTER; - - case sym.UNICODE_LOWERCASE_LETTER: - return Character.getType(c) == Character.LOWERCASE_LETTER; - - case sym.UNICODE_TITLECASE_LETTER: - return Character.getType(c) == Character.TITLECASE_LETTER; - - case sym.UNICODE_MODIFIER_LETTER: - return Character.getType(c) == Character.MODIFIER_LETTER; - - case sym.UNICODE_OTHER_LETTER: - return Character.getType(c) == Character.OTHER_LETTER; - - case sym.UNICODE_NON_SPACING_MARK: - return Character.getType(c) == Character.NON_SPACING_MARK; - - case sym.UNICODE_ENCLOSING_MARK: - return Character.getType(c) == Character.ENCLOSING_MARK; - - case sym.UNICODE_COMBINING_SPACING_MARK: - return Character.getType(c) == Character.COMBINING_SPACING_MARK; - - case sym.UNICODE_DECIMAL_DIGIT_NUMBER: - return Character.getType(c) == Character.DECIMAL_DIGIT_NUMBER; - - case sym.UNICODE_LETTER_NUMBER: - return Character.getType(c) == Character.LETTER_NUMBER; - - case sym.UNICODE_OTHER_NUMBER: - return Character.getType(c) == Character.OTHER_NUMBER; - - case sym.UNICODE_SPACE_SEPARATOR: - return Character.getType(c) == Character.SPACE_SEPARATOR; - - case sym.UNICODE_LINE_SEPARATOR: - return Character.getType(c) == Character.LINE_SEPARATOR; - - case sym.UNICODE_PARAGRAPH_SEPARATOR: - return Character.getType(c) == Character.PARAGRAPH_SEPARATOR; - - case sym.UNICODE_CONTROL: - return Character.getType(c) == Character.CONTROL; - - case sym.UNICODE_FORMAT: - return Character.getType(c) == Character.FORMAT; - - case sym.UNICODE_PRIVATE_USE: - return Character.getType(c) == Character.PRIVATE_USE; - - case sym.UNICODE_SURROGATE: - return Character.getType(c) == Character.SURROGATE; - - case sym.UNICODE_DASH_PUNCTUATION: - return Character.getType(c) == Character.DASH_PUNCTUATION; - - case sym.UNICODE_START_PUNCTUATION: - return Character.getType(c) == Character.START_PUNCTUATION; - - case sym.UNICODE_END_PUNCTUATION: - return Character.getType(c) == Character.END_PUNCTUATION; - - case sym.UNICODE_CONNECTOR_PUNCTUATION: - return Character.getType(c) == Character.CONNECTOR_PUNCTUATION; - - case sym.UNICODE_OTHER_PUNCTUATION: - return Character.getType(c) == Character.OTHER_PUNCTUATION; - - case sym.UNICODE_MATH_SYMBOL: - return Character.getType(c) == Character.MATH_SYMBOL; - - case sym.UNICODE_CURRENCY_SYMBOL: - return Character.getType(c) == Character.CURRENCY_SYMBOL; - - case sym.UNICODE_MODIFIER_SYMBOL: - return Character.getType(c) == Character.MODIFIER_SYMBOL; - - case sym.UNICODE_OTHER_SYMBOL: - return Character.getType(c) == Character.OTHER_SYMBOL; - - case sym.UNICODE_INITIAL_QUOTE_PUNCTUATION: - return Character.getType(c) == Character.INITIAL_QUOTE_PUNCTUATION; - - case sym.UNICODE_FINAL_QUOTE_PUNCTUATION: - return Character.getType(c) == Character.FINAL_QUOTE_PUNCTUATION; - - default: return false; - } - } - - private Vector makePreClass(int type) { - - Vector result = new Vector(); - - char c = 0; - char start = 0; - char last = charClasses.getMaxCharCode(); - - boolean prev, current; - - prev = check(type,'\u0000'); - - for (c = 1; c < last; c++) { - - current = check(type,c); - - if (!prev && current) start = c; - if (prev && !current) { - result.addElement(new Interval(start, (char)(c-1))); - } - - prev = current; - } - - // the last iteration is moved out of the loop to - // avoid an endless loop if last == maxCharCode and - // last+1 == 0 - current = check(type,c); - - if (!prev && current) result.addElement(new Interval(c,c)); - if (prev && current) result.addElement(new Interval(start, c)); - if (prev && !current) result.addElement(new Interval(start, (char)(c-1))); - - return result; - } - - private RegExp makeRepeat(RegExp r, int n1, int n2, int line, int col) { - - if (n1 <= 0 && n2 <= 0) { - syntaxError(ErrorMessages.REPEAT_ZERO, line, col); - return null; - } - - if (n1 > n2) { - syntaxError(ErrorMessages.REPEAT_GREATER, line, col); - return null; - } - - int i; - RegExp result; - - if (n1 > 0) { - result = r; - n1--; n2--; // we need one concatenation less than the number of expressions to match - } - else { - result = new RegExp1(sym.QUESTION,r); - n2--; - } - - for (i = 0; i < n1; i++) - result = new RegExp2(sym.CONCAT, result, r); - - n2-= n1; - for (i = 0; i < n2; i++) - result = new RegExp2(sym.CONCAT, result, new RegExp1(sym.QUESTION,r)); - - return result; - } - - private RegExp makeNL() { - Vector list = new Vector(); - list.addElement(new Interval('\n','\r')); - list.addElement(new Interval('\u0085','\u0085')); - list.addElement(new Interval('\u2028','\u2029')); - - // assumption: line feeds are caseless - charClasses.makeClass(list, false); - charClasses.makeClass('\n', false); - charClasses.makeClass('\r', false); - - RegExp1 c = new RegExp1(sym.CCLASS, list); - Character n = new Character('\n'); - Character r = new Character('\r'); - - return new RegExp2(sym.BAR, - c, - new RegExp2(sym.CONCAT, - new RegExp1(sym.CHAR, r), - new RegExp1(sym.CHAR, n))); - } - -:}; - -parser code {: - public LexScan scanner; - - public LexParse(LexScan scanner) { - super(scanner); - this.scanner = scanner; - } - - public CharClasses getCharClasses() { - return action_obj.charClasses; - } - - public EOFActions getEOFActions() { - return action_obj.eofActions; - } - - public void report_error(String message, Object info) { - if ( info instanceof java_cup.runtime.Symbol ) { - java_cup.runtime.Symbol s = (java_cup.runtime.Symbol) info; - - if (s.sym == sym.EOF) - Out.error(ErrorMessages.UNEXPECTED_EOF); - else - Out.error(scanner.file, ErrorMessages.SYNTAX_ERROR, s.left, s.right); - } - else - Out.error(ErrorMessages.UNKNOWN_SYNTAX); - } - - public void report_fatal_error(String message, Object info) { - // report_error(message, info); - throw new GeneratorException(); - } - -:}; - -init with {: - action_obj.scanner = this.scanner; -:}; - -/* token declarations */ - -terminal OPENBRACKET, CLOSEBRACKET, HAT, DOLLAR, OPENCLASS, - CLOSECLASS, DASH, DELIMITER, EQUALS, COMMA, LESSTHAN, - MORETHAN, LBRACE, RBRACE, ASCII, FULL, UNICODE, REGEXPEND; - -terminal JLETTERCLASS, JLETTERDIGITCLASS, LETTERCLASS, DIGITCLASS, - UPPERCLASS, LOWERCLASS, EOFRULE, NOACTION, LOOKAHEAD, - - UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER, UNICODE_TITLECASE_LETTER, - UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK, UNICODE_ENCLOSING_MARK, - UNICODE_COMBINING_SPACING_MARK, UNICODE_DECIMAL_DIGIT_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_OTHER_NUMBER, - UNICODE_SPACE_SEPARATOR, UNICODE_LINE_SEPARATOR, UNICODE_PARAGRAPH_SEPARATOR, UNICODE_CONTROL, UNICODE_FORMAT, - UNICODE_PRIVATE_USE, UNICODE_SURROGATE, UNICODE_DASH_PUNCTUATION, UNICODE_START_PUNCTUATION, - UNICODE_END_PUNCTUATION, UNICODE_CONNECTOR_PUNCTUATION, UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL, - UNICODE_CURRENCY_SYMBOL, UNICODE_MODIFIER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_INITIAL_QUOTE_PUNCTUATION, - UNICODE_FINAL_QUOTE_PUNCTUATION; - -terminal Action ACTION; -terminal String IDENT, USERCODE; -terminal Integer REPEAT; - -/* tokens used in RegExp parse tree */ -terminal STAR, PLUS, BAR, QUESTION, POINT, BANG, TILDE; - -terminal Character CHAR; -terminal String STRING, MACROUSE; - -/* symbols *only* used in the parse tree (not in the grammar) */ -terminal CCLASS, CCLASSNOT, CONCAT; -terminal STRING_I, CHAR_I; /* case insensitive strings/chars */ - - -non terminal macros, macro; -non terminal Integer rule; -non terminal NFA specification; -non terminal RegExp series, concs, nregexp, regexp, charclass, lookahead; -non terminal Interval classcontentelem; -non terminal Vector states, statesOPT, classcontent, preclass, rules; -non terminal Boolean hatOPT; -non terminal Action act, actions; - - -/* grammar specification */ -start with specification; - -specification ::= USERCODE - /* delimiter is checked in lexer */ - macros - DELIMITER - rules - {: - scanner.t.stop(); - - Out.checkErrors(); - - Out.time(ErrorMessages.PARSING_TOOK, t); - - macros.expand(); - Enumeration unused = macros.unused(); - while ( unused.hasMoreElements() ) { - Out.warning("Macro \""+unused.nextElement()+"\" has been declared but never used."); - } - - SemCheck.check(regExps, macros, scanner.file); - - regExps.checkActions(); - regExps.checkLookAheads(); - - Out.checkErrors(); - - if (Options.dump) charClasses.dump(); - - Out.print("Constructing NFA : "); - - t.start(); - int num = regExps.getNum(); - - RESULT = new NFA(charClasses.getNumClasses(), - scanner, regExps, macros, charClasses); - - eofActions.setNumLexStates(scanner.states.number()); - - for (int i = 0; i < num; i++) { - if (regExps.isEOF(i)) - eofActions.add( regExps.getStates(i), regExps.getAction(i) ); - else - RESULT.addRegExp(i); - } - - if (scanner.standalone) RESULT.addStandaloneRule(); - t.stop(); - - Out.time(""); - Out.time(ErrorMessages.NFA_TOOK, t); - - :} - | /* emtpy spec. error */ - {: - fatalError(ErrorMessages.NO_LEX_SPEC); - :} - ; - -macros ::= /* empty, most switches & state declarations are parsed in lexer */ - | macros macro - | error; - -macro ::= ASCII - {: charClasses.setMaxCharCode(127); :} - | FULL - {: charClasses.setMaxCharCode(255); :} - | UNICODE - {: charClasses.setMaxCharCode(0xFFFF); :} - | IDENT:name EQUALS series:definition REGEXPEND - {: macros.insert(name, definition); :} - | IDENT EQUALS:e - {: syntaxError(ErrorMessages.REGEXP_EXPECTED, eleft, eright); :} - ; - - -rules ::= rules:rlist rule:r - {: rlist.addElement(r); RESULT = rlist; :} - | rules:rlist1 LESSTHAN states:states MORETHAN LBRACE rules:rlist2 RBRACE - {: - Enumeration rs = rlist2.elements(); - while ( rs.hasMoreElements() ) { - Integer elem = (Integer) rs.nextElement(); - // might be null for error case of "rule" - if (elem != null) { - regExps.addStates( elem.intValue(), states ); - } - rlist1.addElement( elem ); - } - RESULT = rlist1; - :} - | LESSTHAN states:states MORETHAN LBRACE rules:rlist RBRACE - {: - Enumeration rs = rlist.elements(); - while ( rs.hasMoreElements() ) { - Integer elem = (Integer) rs.nextElement(); - // might be null for error case of "rule" - if (elem != null) { - regExps.addStates( elem.intValue(), states ); - } - } - RESULT = rlist; - :} - | rule:r - {: RESULT = new Vector(); RESULT.addElement(r); :} - ; - -rule ::= statesOPT:s hatOPT:bol series:r actions:a - {: RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, null)); :} - | statesOPT:s hatOPT:bol series:r lookahead:l act:a - {: RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, l)); :} - | statesOPT:s hatOPT:bol series:r lookahead:l NOACTION:a - {: syntaxError(ErrorMessages.LOOKAHEAD_NEEDS_ACTION, aleft, aright+1); :} - | statesOPT:s EOFRULE ACTION:a - {: RESULT = new Integer(regExps.insert(s, a)); :} - | error - ; - -lookahead ::= DOLLAR - {: RESULT = makeNL(); :} - | LOOKAHEAD series:r - {: RESULT = r; :} - | LOOKAHEAD series:s DOLLAR - {: RESULT = new RegExp2(sym.CONCAT, s, makeNL()); :} - ; - -act ::= REGEXPEND ACTION:a - {: RESULT = a; :} - ; - -actions ::= act:a - {: RESULT = a; :} - | NOACTION - ; - - -statesOPT ::= LESSTHAN states:list MORETHAN - {: RESULT = list; :} - | /* empty */ - {: RESULT = new Vector(); :} - ; - -states ::= IDENT:id COMMA states:list - {: - stateNumber = scanner.states.getNumber( id ); - if ( stateNumber != null ) - list.addElement( stateNumber ); - else { - throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL, - idleft, idright); - } - RESULT = list; - :} - | IDENT:id - {: - Vector list = new Vector(); - stateNumber = scanner.states.getNumber( id ); - if ( stateNumber != null ) - list.addElement( stateNumber ); - else { - throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL, - idleft, idright); - } - RESULT = list; - :} - | IDENT COMMA:c - {: syntaxError(ErrorMessages.REGEXP_EXPECTED, cleft, cright+1); :} - ; - -hatOPT ::= HAT - {: // assumption: there is no upper case for \n - charClasses.makeClass('\n', false); - RESULT = new Boolean(true); :} - | /* empty */ - {: RESULT = new Boolean(false); :} - ; - -series ::= series:r1 BAR concs:r2 - {: RESULT = new RegExp2(sym.BAR, r1, r2); :} - | concs:r - {: RESULT = r; :} - | BAR:b - {: syntaxError(ErrorMessages.REGEXP_EXPECTED, bleft, bright); :} - ; - -concs ::= concs:r1 nregexp:r2 - {: RESULT = new RegExp2(sym.CONCAT, r1, r2); :} - | nregexp:r - {: RESULT = r; :} - ; - -nregexp ::= regexp:r - {: RESULT = r; :} - | BANG nregexp:r - {: RESULT = new RegExp1(sym.BANG, r); :} - | TILDE nregexp:r - {: RESULT = new RegExp1(sym.TILDE, r); :} - ; - -regexp ::= regexp:r STAR - {: RESULT = new RegExp1(sym.STAR, r); :} - | regexp:r PLUS - {: RESULT = new RegExp1(sym.PLUS, r); :} - | regexp:r QUESTION - {: RESULT = new RegExp1(sym.QUESTION, r); :} - | regexp:r REPEAT:n RBRACE:b - {: RESULT = makeRepeat(r, n.intValue(), n.intValue(), bleft, bright); :} - | regexp:r REPEAT:n1 REPEAT:n2 RBRACE - {: RESULT = makeRepeat(r, n1.intValue(), n2.intValue(), n1left, n2right); :} - | OPENBRACKET series:r CLOSEBRACKET - {: RESULT = r; :} - | MACROUSE:ident - {: - if ( !scanner.macroDefinition ) { - if ( ! macros.markUsed(ident) ) - throw new ScannerException(scanner.file, ErrorMessages.MACRO_UNDECL, - identleft, identright); - } - RESULT = new RegExp1(sym.MACROUSE, ident); - :} - | charclass:c - {: RESULT = c; :} - | preclass:list - {: - try { - // assumption [correct?]: preclasses are already closed under case - charClasses.makeClass(list, false); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, listleft); - } - RESULT = new RegExp1(sym.CCLASS, list); - :} - | STRING:str - {: - try { - if ( scanner.caseless ) { - charClasses.makeClass(str, true); - RESULT = new RegExp1(sym.STRING_I, str); - } - else { - charClasses.makeClass(str, false); - RESULT = new RegExp1(sym.STRING, str); - } - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CS2SMALL_STRING, strleft, strright); - } - - :} - | POINT - {: - Vector any = new Vector(); - any.addElement(new Interval('\n','\n')); - // assumption: there is no upper case for \n - charClasses.makeClass('\n', false); - RESULT = new RegExp1(sym.CCLASSNOT, any); - :} - | CHAR:c - {: - try { - if ( scanner.caseless ) { - charClasses.makeClass(c.charValue(), true); - RESULT = new RegExp1(sym.CHAR_I, c); - } - else { - charClasses.makeClass(c.charValue(), false); - RESULT = new RegExp1(sym.CHAR, c); - } - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CS2SMALL_CHAR, cleft, cright); - } - :} - ; - -charclass ::= OPENCLASS CLOSECLASS - {: - RESULT = new RegExp1(sym.CCLASS,null); - :} - | OPENCLASS classcontent:list CLOSECLASS:close - {: - try { - charClasses.makeClass(list, Options.jlex && scanner.caseless); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASS,list); - :} - | OPENCLASS HAT CLOSECLASS:close - {: - Vector list = new Vector(); - list.addElement(new Interval((char)0,CharClasses.maxChar)); - try { - charClasses.makeClass(list, false); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASS,list); - :} - | OPENCLASS HAT classcontent:list CLOSECLASS:close - {: - try { - charClasses.makeClassNot(list, Options.jlex && scanner.caseless); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASSNOT,list); - :} - | OPENCLASS DASH classcontent:list CLOSECLASS:close - {: - try { - list.addElement(new Interval('-','-')); - charClasses.makeClass(list, Options.jlex && scanner.caseless); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASS,list); - :} - | OPENCLASS HAT DASH classcontent:list CLOSECLASS:close - {: - try { - list.addElement(new Interval('-','-')); - charClasses.makeClassNot(list, Options.jlex && scanner.caseless); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASSNOT,list); - :} - ; - -classcontent ::= classcontent:list classcontentelem:elem - {: - list.addElement(elem); - RESULT = list; - :} - | classcontentelem:elem - {: - Vector list = new Vector(); - list.addElement(elem); - RESULT = list; - :} - | classcontent:list preclass:plist - {: - for (Enumeration e = plist.elements(); e.hasMoreElements();) - list.addElement(e.nextElement()); - RESULT = list; - :} - | preclass:list - {: RESULT = list; :} - | classcontent:list STRING:s - {: - for (int i = 0; i < s.length(); i++) - list.addElement(new Interval(s.charAt(i),s.charAt(i))); - RESULT = list; - :} - | STRING:s - {: - RESULT = new Vector(); - for (int i = 0; i < s.length(); i++) - RESULT.addElement(new Interval(s.charAt(i),s.charAt(i))); - :} - | classcontent:list MACROUSE:ident - {: - syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright); - :} - | MACROUSE:ident - {: - syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright); - :} - ; - -classcontentelem ::= CHAR:c1 DASH CHAR:c2 - {: RESULT = new Interval(c1.charValue(), c2.charValue()); :} - | CHAR:c - {: RESULT = new Interval(c.charValue(), c.charValue()); :} - ; - -preclass ::= JLETTERCLASS - {: RESULT = makePreClass(sym.JLETTERCLASS); :} - | JLETTERDIGITCLASS - {: RESULT = makePreClass(sym.JLETTERDIGITCLASS); :} - | LETTERCLASS - {: RESULT = makePreClass(sym.LETTERCLASS); :} - | DIGITCLASS - {: RESULT = makePreClass(sym.DIGITCLASS); :} - | UPPERCLASS - {: RESULT = makePreClass(sym.UPPERCLASS); :} - | LOWERCLASS - {: RESULT = makePreClass(sym.LOWERCLASS); :} - | UNICODE_UNASSIGNED - {: RESULT = makePreClass(sym.UNICODE_UNASSIGNED); :} - | UNICODE_UPPERCASE_LETTER - {: RESULT = makePreClass(sym.UNICODE_UPPERCASE_LETTER); :} - | UNICODE_LOWERCASE_LETTER - {: RESULT = makePreClass(sym.UNICODE_LOWERCASE_LETTER); :} - | UNICODE_TITLECASE_LETTER - {: RESULT = makePreClass(sym.UNICODE_TITLECASE_LETTER); :} - | UNICODE_MODIFIER_LETTER - {: RESULT = makePreClass(sym.UNICODE_MODIFIER_LETTER); :} - | UNICODE_OTHER_LETTER - {: RESULT = makePreClass(sym.UNICODE_OTHER_LETTER); :} - | UNICODE_NON_SPACING_MARK - {: RESULT = makePreClass(sym.UNICODE_NON_SPACING_MARK); :} - | UNICODE_ENCLOSING_MARK - {: RESULT = makePreClass(sym.UNICODE_ENCLOSING_MARK); :} - | UNICODE_COMBINING_SPACING_MARK - {: RESULT = makePreClass(sym.UNICODE_COMBINING_SPACING_MARK); :} - | UNICODE_DECIMAL_DIGIT_NUMBER - {: RESULT = makePreClass(sym.UNICODE_DECIMAL_DIGIT_NUMBER); :} - | UNICODE_LETTER_NUMBER - {: RESULT = makePreClass(sym.UNICODE_LETTER_NUMBER); :} - | UNICODE_OTHER_NUMBER - {: RESULT = makePreClass(sym.UNICODE_OTHER_NUMBER); :} - | UNICODE_SPACE_SEPARATOR - {: RESULT = makePreClass(sym.UNICODE_SPACE_SEPARATOR); :} - | UNICODE_LINE_SEPARATOR - {: RESULT = makePreClass(sym.UNICODE_LINE_SEPARATOR); :} - | UNICODE_PARAGRAPH_SEPARATOR - {: RESULT = makePreClass(sym.UNICODE_PARAGRAPH_SEPARATOR); :} - | UNICODE_CONTROL - {: RESULT = makePreClass(sym.UNICODE_CONTROL); :} - | UNICODE_FORMAT - {: RESULT = makePreClass(sym.UNICODE_FORMAT); :} - | UNICODE_PRIVATE_USE - {: RESULT = makePreClass(sym.UNICODE_PRIVATE_USE); :} - | UNICODE_SURROGATE - {: RESULT = makePreClass(sym.UNICODE_SURROGATE); :} - | UNICODE_DASH_PUNCTUATION - {: RESULT = makePreClass(sym.UNICODE_DASH_PUNCTUATION); :} - | UNICODE_START_PUNCTUATION - {: RESULT = makePreClass(sym.UNICODE_START_PUNCTUATION); :} - | UNICODE_END_PUNCTUATION - {: RESULT = makePreClass(sym.UNICODE_END_PUNCTUATION); :} - | UNICODE_CONNECTOR_PUNCTUATION - {: RESULT = makePreClass(sym.UNICODE_CONNECTOR_PUNCTUATION); :} - | UNICODE_OTHER_PUNCTUATION - {: RESULT = makePreClass(sym.UNICODE_OTHER_PUNCTUATION); :} - | UNICODE_MATH_SYMBOL - {: RESULT = makePreClass(sym.UNICODE_MATH_SYMBOL); :} - | UNICODE_CURRENCY_SYMBOL - {: RESULT = makePreClass(sym.UNICODE_CURRENCY_SYMBOL); :} - | UNICODE_MODIFIER_SYMBOL - {: RESULT = makePreClass(sym.UNICODE_MODIFIER_SYMBOL); :} - | UNICODE_OTHER_SYMBOL - {: RESULT = makePreClass(sym.UNICODE_OTHER_SYMBOL); :} - | UNICODE_INITIAL_QUOTE_PUNCTUATION - {: RESULT = makePreClass(sym.UNICODE_INITIAL_QUOTE_PUNCTUATION); :} - | UNICODE_FINAL_QUOTE_PUNCTUATION - {: RESULT = makePreClass(sym.UNICODE_FINAL_QUOTE_PUNCTUATION); :} - ; diff --git a/tools/lexer/jflex-1.4/src/JFlex/LexParse.java b/tools/lexer/jflex-1.4/src/JFlex/LexParse.java deleted file mode 100644 index e11c63203c91..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/LexParse.java +++ /dev/null @@ -1,2795 +0,0 @@ - -//---------------------------------------------------- -// The following code was generated by CUP v0.11a beta 20060608 -// Mon Dec 03 16:12:49 MSK 2012 -//---------------------------------------------------- - -package JFlex; - -import java.util.*; - -/** CUP v0.11a beta 20060608 generated parser. - * @version Mon Dec 03 16:12:49 MSK 2012 - */ -public class LexParse extends java_cup.runtime.lr_parser { - - /** Default constructor. */ - public LexParse() {super();} - - /** Constructor which sets the default scanner. */ - public LexParse(java_cup.runtime.Scanner s) {super(s);} - - /** Constructor which sets the default scanner. */ - public LexParse(java_cup.runtime.Scanner s, java_cup.runtime.SymbolFactory sf) {super(s,sf);} - - /** Production table. */ - protected static final short _production_table[][] = - unpackFromStrings(new String[] { - "\000\151\000\002\002\004\000\002\005\006\000\002\005" + - "\002\000\002\002\002\000\002\002\004\000\002\002\003" + - "\000\002\003\003\000\002\003\003\000\002\003\003\000" + - "\002\003\006\000\002\003\004\000\002\021\004\000\002" + - "\021\011\000\002\021\010\000\002\021\003\000\002\004" + - "\006\000\002\004\007\000\002\004\007\000\002\004\005" + - "\000\002\004\003\000\002\013\003\000\002\013\004\000" + - "\002\013\005\000\002\023\004\000\002\024\003\000\002" + - "\024\003\000\002\016\005\000\002\016\002\000\002\015" + - "\005\000\002\015\003\000\002\015\004\000\002\022\003" + - "\000\002\022\002\000\002\006\005\000\002\006\003\000" + - "\002\006\003\000\002\007\004\000\002\007\003\000\002" + - "\010\003\000\002\010\004\000\002\010\004\000\002\011" + - "\004\000\002\011\004\000\002\011\004\000\002\011\005" + - "\000\002\011\006\000\002\011\005\000\002\011\003\000" + - "\002\011\003\000\002\011\003\000\002\011\003\000\002" + - "\011\003\000\002\011\003\000\002\012\004\000\002\012" + - "\005\000\002\012\005\000\002\012\006\000\002\012\006" + - "\000\002\012\007\000\002\017\004\000\002\017\003\000" + - "\002\017\004\000\002\017\003\000\002\017\004\000\002" + - "\017\003\000\002\017\004\000\002\017\003\000\002\014" + - "\005\000\002\014\003\000\002\020\003\000\002\020\003" + - "\000\002\020\003\000\002\020\003\000\002\020\003\000" + - "\002\020\003\000\002\020\003\000\002\020\003\000\002" + - "\020\003\000\002\020\003\000\002\020\003\000\002\020" + - "\003\000\002\020\003\000\002\020\003\000\002\020\003" + - "\000\002\020\003\000\002\020\003\000\002\020\003\000" + - "\002\020\003\000\002\020\003\000\002\020\003\000\002" + - "\020\003\000\002\020\003\000\002\020\003\000\002\020" + - "\003\000\002\020\003\000\002\020\003\000\002\020\003" + - "\000\002\020\003\000\002\020\003\000\002\020\003\000" + - "\002\020\003\000\002\020\003\000\002\020\003\000\002" + - "\020\003\000\002\020\003" }); - - /** Access to production table. */ - public short[][] production_table() {return _production_table;} - - /** Parse-action table. */ - protected static final short[][] _action_table = - unpackFromStrings(new String[] { - "\000\214\000\006\002\uffff\077\004\001\002\000\016\003" + - "\007\013\ufffe\022\ufffe\023\ufffe\024\ufffe\076\ufffe\001\002" + - "\000\004\002\006\001\002\000\004\002\001\001\002\000" + - "\014\013\ufffc\022\ufffc\023\ufffc\024\ufffc\076\ufffc\001\002" + - "\000\014\013\012\022\011\023\016\024\015\076\014\001" + - "\002\000\014\013\ufffb\022\ufffb\023\ufffb\024\ufffb\076\ufffb" + - "\001\002\000\144\003\152\004\uffe6\006\uffe6\010\uffe6\016" + - "\154\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6" + - "\034\uffe6\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044" + - "\uffe6\045\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6" + - "\053\uffe6\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061" + - "\uffe6\062\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6" + - "\070\uffe6\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105" + - "\uffe6\106\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002" + - "\000\014\013\ufffd\022\ufffd\023\ufffd\024\ufffd\076\ufffd\001" + - "\002\000\004\014\017\001\002\000\014\013\ufff9\022\ufff9" + - "\023\ufff9\024\ufff9\076\ufff9\001\002\000\014\013\ufffa\022" + - "\ufffa\023\ufffa\024\ufffa\076\ufffa\001\002\000\146\004\066" + - "\010\064\013\ufff7\022\ufff7\023\ufff7\024\ufff7\026\056\027" + - "\043\030\072\031\060\032\076\033\023\037\061\040\033" + - "\041\021\042\074\043\063\044\062\045\073\046\071\047" + - "\036\050\050\051\101\052\053\053\052\054\047\055\055" + - "\056\054\057\044\060\042\061\067\062\040\063\102\064" + - "\032\065\051\066\031\067\034\070\020\071\075\072\100" + - "\073\025\074\026\076\ufff7\103\037\105\070\106\041\107" + - "\035\110\022\111\077\112\024\001\002\000\160\004\uff9d" + - "\005\uff9d\007\uff9d\010\uff9d\011\uff9d\025\uff9d\026\uff9d\027" + - "\uff9d\030\uff9d\031\uff9d\032\uff9d\033\uff9d\035\uff9d\036\uff9d" + - "\037\uff9d\040\uff9d\041\uff9d\042\uff9d\043\uff9d\044\uff9d\045" + - "\uff9d\046\uff9d\047\uff9d\050\uff9d\051\uff9d\052\uff9d\053\uff9d" + - "\054\uff9d\055\uff9d\056\uff9d\057\uff9d\060\uff9d\061\uff9d\062" + - "\uff9d\063\uff9d\064\uff9d\065\uff9d\066\uff9d\067\uff9d\070\uff9d" + - "\071\uff9d\072\uff9d\073\uff9d\074\uff9d\100\uff9d\101\uff9d\102" + - "\uff9d\103\uff9d\104\uff9d\105\uff9d\106\uff9d\107\uff9d\110\uff9d" + - "\111\uff9d\112\uff9d\001\002\000\160\004\uffb4\005\uffb4\007" + - "\uffb4\010\uffb4\011\uffb4\025\uffb4\026\uffb4\027\uffb4\030\uffb4" + - "\031\uffb4\032\uffb4\033\uffb4\035\uffb4\036\uffb4\037\uffb4\040" + - "\uffb4\041\uffb4\042\uffb4\043\uffb4\044\uffb4\045\uffb4\046\uffb4" + - "\047\uffb4\050\uffb4\051\uffb4\052\uffb4\053\uffb4\054\uffb4\055" + - "\uffb4\056\uffb4\057\uffb4\060\uffb4\061\uffb4\062\uffb4\063\uffb4" + - "\064\uffb4\065\uffb4\066\uffb4\067\uffb4\070\uffb4\071\uffb4\072" + - "\uffb4\073\uffb4\074\uffb4\100\uffb4\101\uffb4\102\uffb4\103\uffb4" + - "\104\uffb4\105\uffb4\106\uffb4\107\uffb4\110\uffb4\111\uffb4\112" + - "\uffb4\001\002\000\156\004\uffcd\005\uffcd\007\uffcd\010\uffcd" + - "\025\uffcd\026\uffcd\027\uffcd\030\uffcd\031\uffcd\032\uffcd\033" + - "\uffcd\035\uffcd\036\uffcd\037\uffcd\040\uffcd\041\uffcd\042\uffcd" + - "\043\uffcd\044\uffcd\045\uffcd\046\uffcd\047\uffcd\050\uffcd\051" + - "\uffcd\052\uffcd\053\uffcd\054\uffcd\055\uffcd\056\uffcd\057\uffcd" + - "\060\uffcd\061\uffcd\062\uffcd\063\uffcd\064\uffcd\065\uffcd\066" + - "\uffcd\067\uffcd\070\uffcd\071\uffcd\072\uffcd\073\uffcd\074\uffcd" + - "\100\uffcd\101\uffcd\102\uffcd\103\uffcd\104\uffcd\105\uffcd\106" + - "\uffcd\107\uffcd\110\uffcd\111\uffcd\112\uffcd\001\002\000\160" + - "\004\uffb7\005\uffb7\007\uffb7\010\uffb7\011\uffb7\025\uffb7\026" + - "\uffb7\027\uffb7\030\uffb7\031\uffb7\032\uffb7\033\uffb7\035\uffb7" + - "\036\uffb7\037\uffb7\040\uffb7\041\uffb7\042\uffb7\043\uffb7\044" + - "\uffb7\045\uffb7\046\uffb7\047\uffb7\050\uffb7\051\uffb7\052\uffb7" + - "\053\uffb7\054\uffb7\055\uffb7\056\uffb7\057\uffb7\060\uffb7\061" + - "\uffb7\062\uffb7\063\uffb7\064\uffb7\065\uffb7\066\uffb7\067\uffb7" + - "\070\uffb7\071\uffb7\072\uffb7\073\uffb7\074\uffb7\100\uffb7\101" + - "\uffb7\102\uffb7\103\uffb7\104\uffb7\105\uffb7\106\uffb7\107\uffb7" + - "\110\uffb7\111\uffb7\112\uffb7\001\002\000\156\004\uffd2\005" + - "\uffd2\007\uffd2\010\uffd2\025\uffd2\026\uffd2\027\uffd2\030\uffd2" + - "\031\uffd2\032\uffd2\033\uffd2\035\uffd2\036\uffd2\037\uffd2\040" + - "\uffd2\041\uffd2\042\uffd2\043\uffd2\044\uffd2\045\uffd2\046\uffd2" + - "\047\uffd2\050\uffd2\051\uffd2\052\uffd2\053\uffd2\054\uffd2\055" + - "\uffd2\056\uffd2\057\uffd2\060\uffd2\061\uffd2\062\uffd2\063\uffd2" + - "\064\uffd2\065\uffd2\066\uffd2\067\uffd2\070\uffd2\071\uffd2\072" + - "\uffd2\073\uffd2\074\uffd2\100\uffd2\101\uffd2\102\uffd2\103\uffd2" + - "\104\uffd2\105\uffd2\106\uffd2\107\uffd2\110\uffd2\111\uffd2\112" + - "\uffd2\001\002\000\160\004\uff9a\005\uff9a\007\uff9a\010\uff9a" + - "\011\uff9a\025\uff9a\026\uff9a\027\uff9a\030\uff9a\031\uff9a\032" + - "\uff9a\033\uff9a\035\uff9a\036\uff9a\037\uff9a\040\uff9a\041\uff9a" + - "\042\uff9a\043\uff9a\044\uff9a\045\uff9a\046\uff9a\047\uff9a\050" + - "\uff9a\051\uff9a\052\uff9a\053\uff9a\054\uff9a\055\uff9a\056\uff9a" + - "\057\uff9a\060\uff9a\061\uff9a\062\uff9a\063\uff9a\064\uff9a\065" + - "\uff9a\066\uff9a\067\uff9a\070\uff9a\071\uff9a\072\uff9a\073\uff9a" + - "\074\uff9a\100\uff9a\101\uff9a\102\uff9a\103\uff9a\104\uff9a\105" + - "\uff9a\106\uff9a\107\uff9a\110\uff9a\111\uff9a\112\uff9a\001\002" + - "\000\160\004\uff99\005\uff99\007\uff99\010\uff99\011\uff99\025" + - "\uff99\026\uff99\027\uff99\030\uff99\031\uff99\032\uff99\033\uff99" + - "\035\uff99\036\uff99\037\uff99\040\uff99\041\uff99\042\uff99\043" + - "\uff99\044\uff99\045\uff99\046\uff99\047\uff99\050\uff99\051\uff99" + - "\052\uff99\053\uff99\054\uff99\055\uff99\056\uff99\057\uff99\060" + - "\uff99\061\uff99\062\uff99\063\uff99\064\uff99\065\uff99\066\uff99" + - "\067\uff99\070\uff99\071\uff99\072\uff99\073\uff99\074\uff99\100" + - "\uff99\101\uff99\102\uff99\103\uff99\104\uff99\105\uff99\106\uff99" + - "\107\uff99\110\uff99\111\uff99\112\uff99\001\002\000\006\025" + - "\151\103\104\001\002\000\146\004\066\005\uffdf\007\uffdf" + - "\010\064\025\uffdf\026\056\027\043\030\072\031\060\032" + - "\076\033\023\035\uffdf\036\uffdf\037\061\040\033\041\021" + - "\042\074\043\063\044\062\045\073\046\071\047\036\050" + - "\050\051\101\052\053\053\052\054\047\055\055\056\054" + - "\057\044\060\042\061\067\062\040\063\102\064\032\065" + - "\051\066\031\067\034\070\020\071\075\072\100\073\025" + - "\074\026\103\uffdf\105\070\106\041\107\035\110\022\111" + - "\077\112\024\001\002\000\160\004\uff9f\005\uff9f\007\uff9f" + - "\010\uff9f\011\uff9f\025\uff9f\026\uff9f\027\uff9f\030\uff9f\031" + - "\uff9f\032\uff9f\033\uff9f\035\uff9f\036\uff9f\037\uff9f\040\uff9f" + - "\041\uff9f\042\uff9f\043\uff9f\044\uff9f\045\uff9f\046\uff9f\047" + - "\uff9f\050\uff9f\051\uff9f\052\uff9f\053\uff9f\054\uff9f\055\uff9f" + - "\056\uff9f\057\uff9f\060\uff9f\061\uff9f\062\uff9f\063\uff9f\064" + - "\uff9f\065\uff9f\066\uff9f\067\uff9f\070\uff9f\071\uff9f\072\uff9f" + - "\073\uff9f\074\uff9f\100\uff9f\101\uff9f\102\uff9f\103\uff9f\104" + - "\uff9f\105\uff9f\106\uff9f\107\uff9f\110\uff9f\111\uff9f\112\uff9f" + - "\001\002\000\160\004\uffa1\005\uffa1\007\uffa1\010\uffa1\011" + - "\uffa1\025\uffa1\026\uffa1\027\uffa1\030\uffa1\031\uffa1\032\uffa1" + - "\033\uffa1\035\uffa1\036\uffa1\037\uffa1\040\uffa1\041\uffa1\042" + - "\uffa1\043\uffa1\044\uffa1\045\uffa1\046\uffa1\047\uffa1\050\uffa1" + - "\051\uffa1\052\uffa1\053\uffa1\054\uffa1\055\uffa1\056\uffa1\057" + - "\uffa1\060\uffa1\061\uffa1\062\uffa1\063\uffa1\064\uffa1\065\uffa1" + - "\066\uffa1\067\uffa1\070\uffa1\071\uffa1\072\uffa1\073\uffa1\074" + - "\uffa1\100\uffa1\101\uffa1\102\uffa1\103\uffa1\104\uffa1\105\uffa1" + - "\106\uffa1\107\uffa1\110\uffa1\111\uffa1\112\uffa1\001\002\000" + - "\160\004\uffb5\005\uffb5\007\uffb5\010\uffb5\011\uffb5\025\uffb5" + - "\026\uffb5\027\uffb5\030\uffb5\031\uffb5\032\uffb5\033\uffb5\035" + - "\uffb5\036\uffb5\037\uffb5\040\uffb5\041\uffb5\042\uffb5\043\uffb5" + - "\044\uffb5\045\uffb5\046\uffb5\047\uffb5\050\uffb5\051\uffb5\052" + - "\uffb5\053\uffb5\054\uffb5\055\uffb5\056\uffb5\057\uffb5\060\uffb5" + - "\061\uffb5\062\uffb5\063\uffb5\064\uffb5\065\uffb5\066\uffb5\067" + - "\uffb5\070\uffb5\071\uffb5\072\uffb5\073\uffb5\074\uffb5\100\uffb5" + - "\101\uffb5\102\uffb5\103\uffb5\104\uffb5\105\uffb5\106\uffb5\107" + - "\uffb5\110\uffb5\111\uffb5\112\uffb5\001\002\000\160\004\uff9e" + - "\005\uff9e\007\uff9e\010\uff9e\011\uff9e\025\uff9e\026\uff9e\027" + - "\uff9e\030\uff9e\031\uff9e\032\uff9e\033\uff9e\035\uff9e\036\uff9e" + - "\037\uff9e\040\uff9e\041\uff9e\042\uff9e\043\uff9e\044\uff9e\045" + - "\uff9e\046\uff9e\047\uff9e\050\uff9e\051\uff9e\052\uff9e\053\uff9e" + - "\054\uff9e\055\uff9e\056\uff9e\057\uff9e\060\uff9e\061\uff9e\062" + - "\uff9e\063\uff9e\064\uff9e\065\uff9e\066\uff9e\067\uff9e\070\uff9e" + - "\071\uff9e\072\uff9e\073\uff9e\074\uff9e\100\uff9e\101\uff9e\102" + - "\uff9e\103\uff9e\104\uff9e\105\uff9e\106\uff9e\107\uff9e\110\uff9e" + - "\111\uff9e\112\uff9e\001\002\000\132\004\066\010\064\026" + - "\056\027\043\030\072\031\060\032\076\033\023\037\061" + - "\040\033\041\021\042\074\043\063\044\062\045\073\046" + - "\071\047\036\050\050\051\101\052\053\053\052\054\047" + - "\055\055\056\054\057\044\060\042\061\067\062\040\063" + - "\102\064\032\065\051\066\031\067\034\070\020\071\075" + - "\072\100\073\025\074\026\105\070\106\041\107\035\110" + - "\022\111\077\112\024\001\002\000\160\004\uffae\005\uffae" + - "\007\uffae\010\uffae\011\uffae\025\uffae\026\uffae\027\uffae\030" + - "\uffae\031\uffae\032\uffae\033\uffae\035\uffae\036\uffae\037\uffae" + - "\040\uffae\041\uffae\042\uffae\043\uffae\044\uffae\045\uffae\046" + - "\uffae\047\uffae\050\uffae\051\uffae\052\uffae\053\uffae\054\uffae" + - "\055\uffae\056\uffae\057\uffae\060\uffae\061\uffae\062\uffae\063" + - "\uffae\064\uffae\065\uffae\066\uffae\067\uffae\070\uffae\071\uffae" + - "\072\uffae\073\uffae\074\uffae\100\uffae\101\uffae\102\uffae\103" + - "\uffae\104\uffae\105\uffae\106\uffae\107\uffae\110\uffae\111\uffae" + - "\112\uffae\001\002\000\016\005\uffde\007\uffde\025\uffde\035" + - "\uffde\036\uffde\103\uffde\001\002\000\160\004\uffa3\005\uffa3" + - "\007\uffa3\010\uffa3\011\uffa3\025\uffa3\026\uffa3\027\uffa3\030" + - "\uffa3\031\uffa3\032\uffa3\033\uffa3\035\uffa3\036\uffa3\037\uffa3" + - "\040\uffa3\041\uffa3\042\uffa3\043\uffa3\044\uffa3\045\uffa3\046" + - "\uffa3\047\uffa3\050\uffa3\051\uffa3\052\uffa3\053\uffa3\054\uffa3" + - "\055\uffa3\056\uffa3\057\uffa3\060\uffa3\061\uffa3\062\uffa3\063" + - "\uffa3\064\uffa3\065\uffa3\066\uffa3\067\uffa3\070\uffa3\071\uffa3" + - "\072\uffa3\073\uffa3\074\uffa3\100\uffa3\101\uffa3\102\uffa3\103" + - "\uffa3\104\uffa3\105\uffa3\106\uffa3\107\uffa3\110\uffa3\111\uffa3" + - "\112\uffa3\001\002\000\132\004\066\010\064\026\056\027" + - "\043\030\072\031\060\032\076\033\023\037\061\040\033" + - "\041\021\042\074\043\063\044\062\045\073\046\071\047" + - "\036\050\050\051\101\052\053\053\052\054\047\055\055" + - "\056\054\057\044\060\042\061\067\062\040\063\102\064" + - "\032\065\051\066\031\067\034\070\020\071\075\072\100" + - "\073\025\074\026\105\070\106\041\107\035\110\022\111" + - "\077\112\024\001\002\000\160\004\uffa5\005\uffa5\007\uffa5" + - "\010\uffa5\011\uffa5\025\uffa5\026\uffa5\027\uffa5\030\uffa5\031" + - "\uffa5\032\uffa5\033\uffa5\035\uffa5\036\uffa5\037\uffa5\040\uffa5" + - "\041\uffa5\042\uffa5\043\uffa5\044\uffa5\045\uffa5\046\uffa5\047" + - "\uffa5\050\uffa5\051\uffa5\052\uffa5\053\uffa5\054\uffa5\055\uffa5" + - "\056\uffa5\057\uffa5\060\uffa5\061\uffa5\062\uffa5\063\uffa5\064" + - "\uffa5\065\uffa5\066\uffa5\067\uffa5\070\uffa5\071\uffa5\072\uffa5" + - "\073\uffa5\074\uffa5\100\uffa5\101\uffa5\102\uffa5\103\uffa5\104" + - "\uffa5\105\uffa5\106\uffa5\107\uffa5\110\uffa5\111\uffa5\112\uffa5" + - "\001\002\000\160\004\uffbb\005\uffbb\007\uffbb\010\uffbb\011" + - "\uffbb\025\uffbb\026\uffbb\027\uffbb\030\uffbb\031\uffbb\032\uffbb" + - "\033\uffbb\035\uffbb\036\uffbb\037\uffbb\040\uffbb\041\uffbb\042" + - "\uffbb\043\uffbb\044\uffbb\045\uffbb\046\uffbb\047\uffbb\050\uffbb" + - "\051\uffbb\052\uffbb\053\uffbb\054\uffbb\055\uffbb\056\uffbb\057" + - "\uffbb\060\uffbb\061\uffbb\062\uffbb\063\uffbb\064\uffbb\065\uffbb" + - "\066\uffbb\067\uffbb\070\uffbb\071\uffbb\072\uffbb\073\uffbb\074" + - "\uffbb\100\uffbb\101\uffbb\102\uffbb\103\uffbb\104\uffbb\105\uffbb" + - "\106\uffbb\107\uffbb\110\uffbb\111\uffbb\112\uffbb\001\002\000" + - "\160\004\uffa6\005\uffa6\007\uffa6\010\uffa6\011\uffa6\025\uffa6" + - "\026\uffa6\027\uffa6\030\uffa6\031\uffa6\032\uffa6\033\uffa6\035" + - "\uffa6\036\uffa6\037\uffa6\040\uffa6\041\uffa6\042\uffa6\043\uffa6" + - "\044\uffa6\045\uffa6\046\uffa6\047\uffa6\050\uffa6\051\uffa6\052" + - "\uffa6\053\uffa6\054\uffa6\055\uffa6\056\uffa6\057\uffa6\060\uffa6" + - "\061\uffa6\062\uffa6\063\uffa6\064\uffa6\065\uffa6\066\uffa6\067" + - "\uffa6\070\uffa6\071\uffa6\072\uffa6\073\uffa6\074\uffa6\100\uffa6" + - "\101\uffa6\102\uffa6\103\uffa6\104\uffa6\105\uffa6\106\uffa6\107" + - "\uffa6\110\uffa6\111\uffa6\112\uffa6\001\002\000\156\004\uffdb" + - "\005\uffdb\007\uffdb\010\uffdb\025\uffdb\026\uffdb\027\uffdb\030" + - "\uffdb\031\uffdb\032\uffdb\033\uffdb\035\uffdb\036\uffdb\037\uffdb" + - "\040\uffdb\041\uffdb\042\uffdb\043\uffdb\044\uffdb\045\uffdb\046" + - "\uffdb\047\uffdb\050\uffdb\051\uffdb\052\uffdb\053\uffdb\054\uffdb" + - "\055\uffdb\056\uffdb\057\uffdb\060\uffdb\061\uffdb\062\uffdb\063" + - "\uffdb\064\uffdb\065\uffdb\066\uffdb\067\uffdb\070\uffdb\071\uffdb" + - "\072\uffdb\073\uffdb\074\uffdb\100\142\101\140\102\141\103" + - "\uffdb\104\143\105\uffdb\106\uffdb\107\uffdb\110\uffdb\111\uffdb" + - "\112\uffdb\001\002\000\156\004\uffd0\005\uffd0\007\uffd0\010" + - "\uffd0\025\uffd0\026\uffd0\027\uffd0\030\uffd0\031\uffd0\032\uffd0" + - "\033\uffd0\035\uffd0\036\uffd0\037\uffd0\040\uffd0\041\uffd0\042" + - "\uffd0\043\uffd0\044\uffd0\045\uffd0\046\uffd0\047\uffd0\050\uffd0" + - "\051\uffd0\052\uffd0\053\uffd0\054\uffd0\055\uffd0\056\uffd0\057" + - "\uffd0\060\uffd0\061\uffd0\062\uffd0\063\uffd0\064\uffd0\065\uffd0" + - "\066\uffd0\067\uffd0\070\uffd0\071\uffd0\072\uffd0\073\uffd0\074" + - "\uffd0\100\uffd0\101\uffd0\102\uffd0\103\uffd0\104\uffd0\105\uffd0" + - "\106\uffd0\107\uffd0\110\uffd0\111\uffd0\112\uffd0\001\002\000" + - "\160\004\uffa9\005\uffa9\007\uffa9\010\uffa9\011\uffa9\025\uffa9" + - "\026\uffa9\027\uffa9\030\uffa9\031\uffa9\032\uffa9\033\uffa9\035" + - "\uffa9\036\uffa9\037\uffa9\040\uffa9\041\uffa9\042\uffa9\043\uffa9" + - "\044\uffa9\045\uffa9\046\uffa9\047\uffa9\050\uffa9\051\uffa9\052" + - "\uffa9\053\uffa9\054\uffa9\055\uffa9\056\uffa9\057\uffa9\060\uffa9" + - "\061\uffa9\062\uffa9\063\uffa9\064\uffa9\065\uffa9\066\uffa9\067" + - "\uffa9\070\uffa9\071\uffa9\072\uffa9\073\uffa9\074\uffa9\100\uffa9" + - "\101\uffa9\102\uffa9\103\uffa9\104\uffa9\105\uffa9\106\uffa9\107" + - "\uffa9\110\uffa9\111\uffa9\112\uffa9\001\002\000\160\004\uffad" + - "\005\uffad\007\uffad\010\uffad\011\uffad\025\uffad\026\uffad\027" + - "\uffad\030\uffad\031\uffad\032\uffad\033\uffad\035\uffad\036\uffad" + - "\037\uffad\040\uffad\041\uffad\042\uffad\043\uffad\044\uffad\045" + - "\uffad\046\uffad\047\uffad\050\uffad\051\uffad\052\uffad\053\uffad" + - "\054\uffad\055\uffad\056\uffad\057\uffad\060\uffad\061\uffad\062" + - "\uffad\063\uffad\064\uffad\065\uffad\066\uffad\067\uffad\070\uffad" + - "\071\uffad\072\uffad\073\uffad\074\uffad\100\uffad\101\uffad\102" + - "\uffad\103\uffad\104\uffad\105\uffad\106\uffad\107\uffad\110\uffad" + - "\111\uffad\112\uffad\001\002\000\160\004\uffa0\005\uffa0\007" + - "\uffa0\010\uffa0\011\uffa0\025\uffa0\026\uffa0\027\uffa0\030\uffa0" + - "\031\uffa0\032\uffa0\033\uffa0\035\uffa0\036\uffa0\037\uffa0\040" + - "\uffa0\041\uffa0\042\uffa0\043\uffa0\044\uffa0\045\uffa0\046\uffa0" + - "\047\uffa0\050\uffa0\051\uffa0\052\uffa0\053\uffa0\054\uffa0\055" + - "\uffa0\056\uffa0\057\uffa0\060\uffa0\061\uffa0\062\uffa0\063\uffa0" + - "\064\uffa0\065\uffa0\066\uffa0\067\uffa0\070\uffa0\071\uffa0\072" + - "\uffa0\073\uffa0\074\uffa0\100\uffa0\101\uffa0\102\uffa0\103\uffa0" + - "\104\uffa0\105\uffa0\106\uffa0\107\uffa0\110\uffa0\111\uffa0\112" + - "\uffa0\001\002\000\160\004\uffaa\005\uffaa\007\uffaa\010\uffaa" + - "\011\uffaa\025\uffaa\026\uffaa\027\uffaa\030\uffaa\031\uffaa\032" + - "\uffaa\033\uffaa\035\uffaa\036\uffaa\037\uffaa\040\uffaa\041\uffaa" + - "\042\uffaa\043\uffaa\044\uffaa\045\uffaa\046\uffaa\047\uffaa\050" + - "\uffaa\051\uffaa\052\uffaa\053\uffaa\054\uffaa\055\uffaa\056\uffaa" + - "\057\uffaa\060\uffaa\061\uffaa\062\uffaa\063\uffaa\064\uffaa\065" + - "\uffaa\066\uffaa\067\uffaa\070\uffaa\071\uffaa\072\uffaa\073\uffaa" + - "\074\uffaa\100\uffaa\101\uffaa\102\uffaa\103\uffaa\104\uffaa\105" + - "\uffaa\106\uffaa\107\uffaa\110\uffaa\111\uffaa\112\uffaa\001\002" + - "\000\160\004\uffab\005\uffab\007\uffab\010\uffab\011\uffab\025" + - "\uffab\026\uffab\027\uffab\030\uffab\031\uffab\032\uffab\033\uffab" + - "\035\uffab\036\uffab\037\uffab\040\uffab\041\uffab\042\uffab\043" + - "\uffab\044\uffab\045\uffab\046\uffab\047\uffab\050\uffab\051\uffab" + - "\052\uffab\053\uffab\054\uffab\055\uffab\056\uffab\057\uffab\060" + - "\uffab\061\uffab\062\uffab\063\uffab\064\uffab\065\uffab\066\uffab" + - "\067\uffab\070\uffab\071\uffab\072\uffab\073\uffab\074\uffab\100" + - "\uffab\101\uffab\102\uffab\103\uffab\104\uffab\105\uffab\106\uffab" + - "\107\uffab\110\uffab\111\uffab\112\uffab\001\002\000\160\004" + - "\uffa7\005\uffa7\007\uffa7\010\uffa7\011\uffa7\025\uffa7\026\uffa7" + - "\027\uffa7\030\uffa7\031\uffa7\032\uffa7\033\uffa7\035\uffa7\036" + - "\uffa7\037\uffa7\040\uffa7\041\uffa7\042\uffa7\043\uffa7\044\uffa7" + - "\045\uffa7\046\uffa7\047\uffa7\050\uffa7\051\uffa7\052\uffa7\053" + - "\uffa7\054\uffa7\055\uffa7\056\uffa7\057\uffa7\060\uffa7\061\uffa7" + - "\062\uffa7\063\uffa7\064\uffa7\065\uffa7\066\uffa7\067\uffa7\070" + - "\uffa7\071\uffa7\072\uffa7\073\uffa7\074\uffa7\100\uffa7\101\uffa7" + - "\102\uffa7\103\uffa7\104\uffa7\105\uffa7\106\uffa7\107\uffa7\110" + - "\uffa7\111\uffa7\112\uffa7\001\002\000\160\004\uffa8\005\uffa8" + - "\007\uffa8\010\uffa8\011\uffa8\025\uffa8\026\uffa8\027\uffa8\030" + - "\uffa8\031\uffa8\032\uffa8\033\uffa8\035\uffa8\036\uffa8\037\uffa8" + - "\040\uffa8\041\uffa8\042\uffa8\043\uffa8\044\uffa8\045\uffa8\046" + - "\uffa8\047\uffa8\050\uffa8\051\uffa8\052\uffa8\053\uffa8\054\uffa8" + - "\055\uffa8\056\uffa8\057\uffa8\060\uffa8\061\uffa8\062\uffa8\063" + - "\uffa8\064\uffa8\065\uffa8\066\uffa8\067\uffa8\070\uffa8\071\uffa8" + - "\072\uffa8\073\uffa8\074\uffa8\100\uffa8\101\uffa8\102\uffa8\103" + - "\uffa8\104\uffa8\105\uffa8\106\uffa8\107\uffa8\110\uffa8\111\uffa8" + - "\112\uffa8\001\002\000\160\004\uffbc\005\uffbc\007\uffbc\010" + - "\uffbc\011\uffbc\025\uffbc\026\uffbc\027\uffbc\030\uffbc\031\uffbc" + - "\032\uffbc\033\uffbc\035\uffbc\036\uffbc\037\uffbc\040\uffbc\041" + - "\uffbc\042\uffbc\043\uffbc\044\uffbc\045\uffbc\046\uffbc\047\uffbc" + - "\050\uffbc\051\uffbc\052\uffbc\053\uffbc\054\uffbc\055\uffbc\056" + - "\uffbc\057\uffbc\060\uffbc\061\uffbc\062\uffbc\063\uffbc\064\uffbc" + - "\065\uffbc\066\uffbc\067\uffbc\070\uffbc\071\uffbc\072\uffbc\073" + - "\uffbc\074\uffbc\100\uffbc\101\uffbc\102\uffbc\103\uffbc\104\uffbc" + - "\105\uffbc\106\uffbc\107\uffbc\110\uffbc\111\uffbc\112\uffbc\001" + - "\002\000\156\004\uffd1\005\uffd1\007\uffd1\010\uffd1\025\uffd1" + - "\026\uffd1\027\uffd1\030\uffd1\031\uffd1\032\uffd1\033\uffd1\035" + - "\uffd1\036\uffd1\037\uffd1\040\uffd1\041\uffd1\042\uffd1\043\uffd1" + - "\044\uffd1\045\uffd1\046\uffd1\047\uffd1\050\uffd1\051\uffd1\052" + - "\uffd1\053\uffd1\054\uffd1\055\uffd1\056\uffd1\057\uffd1\060\uffd1" + - "\061\uffd1\062\uffd1\063\uffd1\064\uffd1\065\uffd1\066\uffd1\067" + - "\uffd1\070\uffd1\071\uffd1\072\uffd1\073\uffd1\074\uffd1\100\uffd1" + - "\101\uffd1\102\uffd1\103\uffd1\104\uffd1\105\uffd1\106\uffd1\107" + - "\uffd1\110\uffd1\111\uffd1\112\uffd1\001\002\000\160\004\uffb9" + - "\005\uffb9\007\uffb9\010\uffb9\011\uffb9\025\uffb9\026\uffb9\027" + - "\uffb9\030\uffb9\031\uffb9\032\uffb9\033\uffb9\035\uffb9\036\uffb9" + - "\037\uffb9\040\uffb9\041\uffb9\042\uffb9\043\uffb9\044\uffb9\045" + - "\uffb9\046\uffb9\047\uffb9\050\uffb9\051\uffb9\052\uffb9\053\uffb9" + - "\054\uffb9\055\uffb9\056\uffb9\057\uffb9\060\uffb9\061\uffb9\062" + - "\uffb9\063\uffb9\064\uffb9\065\uffb9\066\uffb9\067\uffb9\070\uffb9" + - "\071\uffb9\072\uffb9\073\uffb9\074\uffb9\100\uffb9\101\uffb9\102" + - "\uffb9\103\uffb9\104\uffb9\105\uffb9\106\uffb9\107\uffb9\110\uffb9" + - "\111\uffb9\112\uffb9\001\002\000\160\004\uffb6\005\uffb6\007" + - "\uffb6\010\uffb6\011\uffb6\025\uffb6\026\uffb6\027\uffb6\030\uffb6" + - "\031\uffb6\032\uffb6\033\uffb6\035\uffb6\036\uffb6\037\uffb6\040" + - "\uffb6\041\uffb6\042\uffb6\043\uffb6\044\uffb6\045\uffb6\046\uffb6" + - "\047\uffb6\050\uffb6\051\uffb6\052\uffb6\053\uffb6\054\uffb6\055" + - "\uffb6\056\uffb6\057\uffb6\060\uffb6\061\uffb6\062\uffb6\063\uffb6" + - "\064\uffb6\065\uffb6\066\uffb6\067\uffb6\070\uffb6\071\uffb6\072" + - "\uffb6\073\uffb6\074\uffb6\100\uffb6\101\uffb6\102\uffb6\103\uffb6" + - "\104\uffb6\105\uffb6\106\uffb6\107\uffb6\110\uffb6\111\uffb6\112" + - "\uffb6\001\002\000\160\004\uffb1\005\uffb1\007\uffb1\010\uffb1" + - "\011\uffb1\025\uffb1\026\uffb1\027\uffb1\030\uffb1\031\uffb1\032" + - "\uffb1\033\uffb1\035\uffb1\036\uffb1\037\uffb1\040\uffb1\041\uffb1" + - "\042\uffb1\043\uffb1\044\uffb1\045\uffb1\046\uffb1\047\uffb1\050" + - "\uffb1\051\uffb1\052\uffb1\053\uffb1\054\uffb1\055\uffb1\056\uffb1" + - "\057\uffb1\060\uffb1\061\uffb1\062\uffb1\063\uffb1\064\uffb1\065" + - "\uffb1\066\uffb1\067\uffb1\070\uffb1\071\uffb1\072\uffb1\073\uffb1" + - "\074\uffb1\100\uffb1\101\uffb1\102\uffb1\103\uffb1\104\uffb1\105" + - "\uffb1\106\uffb1\107\uffb1\110\uffb1\111\uffb1\112\uffb1\001\002" + - "\000\160\004\uffb2\005\uffb2\007\uffb2\010\uffb2\011\uffb2\025" + - "\uffb2\026\uffb2\027\uffb2\030\uffb2\031\uffb2\032\uffb2\033\uffb2" + - "\035\uffb2\036\uffb2\037\uffb2\040\uffb2\041\uffb2\042\uffb2\043" + - "\uffb2\044\uffb2\045\uffb2\046\uffb2\047\uffb2\050\uffb2\051\uffb2" + - "\052\uffb2\053\uffb2\054\uffb2\055\uffb2\056\uffb2\057\uffb2\060" + - "\uffb2\061\uffb2\062\uffb2\063\uffb2\064\uffb2\065\uffb2\066\uffb2" + - "\067\uffb2\070\uffb2\071\uffb2\072\uffb2\073\uffb2\074\uffb2\100" + - "\uffb2\101\uffb2\102\uffb2\103\uffb2\104\uffb2\105\uffb2\106\uffb2" + - "\107\uffb2\110\uffb2\111\uffb2\112\uffb2\001\002\000\126\006" + - "\114\011\115\012\113\026\056\027\043\030\072\031\060" + - "\032\076\033\023\037\061\040\033\041\021\042\074\043" + - "\063\044\062\045\073\046\071\047\036\050\050\051\101" + - "\052\053\053\052\054\047\055\055\056\054\057\044\060" + - "\042\061\067\062\040\063\102\064\032\065\051\066\031" + - "\067\034\070\020\071\075\072\100\073\025\074\026\110" + - "\110\111\116\112\111\001\002\000\146\004\uffdc\005\uffdc" + - "\007\uffdc\010\uffdc\025\uffdc\026\uffdc\027\uffdc\030\uffdc\031" + - "\uffdc\032\uffdc\033\uffdc\035\uffdc\036\uffdc\037\uffdc\040\uffdc" + - "\041\uffdc\042\uffdc\043\uffdc\044\uffdc\045\uffdc\046\uffdc\047" + - "\uffdc\050\uffdc\051\uffdc\052\uffdc\053\uffdc\054\uffdc\055\uffdc" + - "\056\uffdc\057\uffdc\060\uffdc\061\uffdc\062\uffdc\063\uffdc\064" + - "\uffdc\065\uffdc\066\uffdc\067\uffdc\070\uffdc\071\uffdc\072\uffdc" + - "\073\uffdc\074\uffdc\103\uffdc\105\uffdc\106\uffdc\107\uffdc\110" + - "\uffdc\111\uffdc\112\uffdc\001\002\000\134\004\066\010\064" + - "\026\056\027\043\030\072\031\060\032\076\033\023\037" + - "\061\040\033\041\021\042\074\043\063\044\062\045\073" + - "\046\071\047\036\050\050\051\101\052\053\053\052\054" + - "\047\055\055\056\054\057\044\060\042\061\067\062\040" + - "\063\102\064\032\065\051\066\031\067\034\070\020\071" + - "\075\072\100\073\025\074\026\103\037\105\070\106\041" + - "\107\035\110\022\111\077\112\024\001\002\000\160\004" + - "\uffa4\005\uffa4\007\uffa4\010\uffa4\011\uffa4\025\uffa4\026\uffa4" + - "\027\uffa4\030\uffa4\031\uffa4\032\uffa4\033\uffa4\035\uffa4\036" + - "\uffa4\037\uffa4\040\uffa4\041\uffa4\042\uffa4\043\uffa4\044\uffa4" + - "\045\uffa4\046\uffa4\047\uffa4\050\uffa4\051\uffa4\052\uffa4\053" + - "\uffa4\054\uffa4\055\uffa4\056\uffa4\057\uffa4\060\uffa4\061\uffa4" + - "\062\uffa4\063\uffa4\064\uffa4\065\uffa4\066\uffa4\067\uffa4\070" + - "\uffa4\071\uffa4\072\uffa4\073\uffa4\074\uffa4\100\uffa4\101\uffa4" + - "\102\uffa4\103\uffa4\104\uffa4\105\uffa4\106\uffa4\107\uffa4\110" + - "\uffa4\111\uffa4\112\uffa4\001\002\000\156\004\uffce\005\uffce" + - "\007\uffce\010\uffce\025\uffce\026\uffce\027\uffce\030\uffce\031" + - "\uffce\032\uffce\033\uffce\035\uffce\036\uffce\037\uffce\040\uffce" + - "\041\uffce\042\uffce\043\uffce\044\uffce\045\uffce\046\uffce\047" + - "\uffce\050\uffce\051\uffce\052\uffce\053\uffce\054\uffce\055\uffce" + - "\056\uffce\057\uffce\060\uffce\061\uffce\062\uffce\063\uffce\064" + - "\uffce\065\uffce\066\uffce\067\uffce\070\uffce\071\uffce\072\uffce" + - "\073\uffce\074\uffce\100\uffce\101\uffce\102\uffce\103\uffce\104" + - "\uffce\105\uffce\106\uffce\107\uffce\110\uffce\111\uffce\112\uffce" + - "\001\002\000\160\004\uffaf\005\uffaf\007\uffaf\010\uffaf\011" + - "\uffaf\025\uffaf\026\uffaf\027\uffaf\030\uffaf\031\uffaf\032\uffaf" + - "\033\uffaf\035\uffaf\036\uffaf\037\uffaf\040\uffaf\041\uffaf\042" + - "\uffaf\043\uffaf\044\uffaf\045\uffaf\046\uffaf\047\uffaf\050\uffaf" + - "\051\uffaf\052\uffaf\053\uffaf\054\uffaf\055\uffaf\056\uffaf\057" + - "\uffaf\060\uffaf\061\uffaf\062\uffaf\063\uffaf\064\uffaf\065\uffaf" + - "\066\uffaf\067\uffaf\070\uffaf\071\uffaf\072\uffaf\073\uffaf\074" + - "\uffaf\100\uffaf\101\uffaf\102\uffaf\103\uffaf\104\uffaf\105\uffaf" + - "\106\uffaf\107\uffaf\110\uffaf\111\uffaf\112\uffaf\001\002\000" + - "\160\004\uffba\005\uffba\007\uffba\010\uffba\011\uffba\025\uffba" + - "\026\uffba\027\uffba\030\uffba\031\uffba\032\uffba\033\uffba\035" + - "\uffba\036\uffba\037\uffba\040\uffba\041\uffba\042\uffba\043\uffba" + - "\044\uffba\045\uffba\046\uffba\047\uffba\050\uffba\051\uffba\052" + - "\uffba\053\uffba\054\uffba\055\uffba\056\uffba\057\uffba\060\uffba" + - "\061\uffba\062\uffba\063\uffba\064\uffba\065\uffba\066\uffba\067" + - "\uffba\070\uffba\071\uffba\072\uffba\073\uffba\074\uffba\100\uffba" + - "\101\uffba\102\uffba\103\uffba\104\uffba\105\uffba\106\uffba\107" + - "\uffba\110\uffba\111\uffba\112\uffba\001\002\000\160\004\uffb0" + - "\005\uffb0\007\uffb0\010\uffb0\011\uffb0\025\uffb0\026\uffb0\027" + - "\uffb0\030\uffb0\031\uffb0\032\uffb0\033\uffb0\035\uffb0\036\uffb0" + - "\037\uffb0\040\uffb0\041\uffb0\042\uffb0\043\uffb0\044\uffb0\045" + - "\uffb0\046\uffb0\047\uffb0\050\uffb0\051\uffb0\052\uffb0\053\uffb0" + - "\054\uffb0\055\uffb0\056\uffb0\057\uffb0\060\uffb0\061\uffb0\062" + - "\uffb0\063\uffb0\064\uffb0\065\uffb0\066\uffb0\067\uffb0\070\uffb0" + - "\071\uffb0\072\uffb0\073\uffb0\074\uffb0\100\uffb0\101\uffb0\102" + - "\uffb0\103\uffb0\104\uffb0\105\uffb0\106\uffb0\107\uffb0\110\uffb0" + - "\111\uffb0\112\uffb0\001\002\000\160\004\uffb3\005\uffb3\007" + - "\uffb3\010\uffb3\011\uffb3\025\uffb3\026\uffb3\027\uffb3\030\uffb3" + - "\031\uffb3\032\uffb3\033\uffb3\035\uffb3\036\uffb3\037\uffb3\040" + - "\uffb3\041\uffb3\042\uffb3\043\uffb3\044\uffb3\045\uffb3\046\uffb3" + - "\047\uffb3\050\uffb3\051\uffb3\052\uffb3\053\uffb3\054\uffb3\055" + - "\uffb3\056\uffb3\057\uffb3\060\uffb3\061\uffb3\062\uffb3\063\uffb3" + - "\064\uffb3\065\uffb3\066\uffb3\067\uffb3\070\uffb3\071\uffb3\072" + - "\uffb3\073\uffb3\074\uffb3\100\uffb3\101\uffb3\102\uffb3\103\uffb3" + - "\104\uffb3\105\uffb3\106\uffb3\107\uffb3\110\uffb3\111\uffb3\112" + - "\uffb3\001\002\000\160\004\uff9c\005\uff9c\007\uff9c\010\uff9c" + - "\011\uff9c\025\uff9c\026\uff9c\027\uff9c\030\uff9c\031\uff9c\032" + - "\uff9c\033\uff9c\035\uff9c\036\uff9c\037\uff9c\040\uff9c\041\uff9c" + - "\042\uff9c\043\uff9c\044\uff9c\045\uff9c\046\uff9c\047\uff9c\050" + - "\uff9c\051\uff9c\052\uff9c\053\uff9c\054\uff9c\055\uff9c\056\uff9c" + - "\057\uff9c\060\uff9c\061\uff9c\062\uff9c\063\uff9c\064\uff9c\065" + - "\uff9c\066\uff9c\067\uff9c\070\uff9c\071\uff9c\072\uff9c\073\uff9c" + - "\074\uff9c\100\uff9c\101\uff9c\102\uff9c\103\uff9c\104\uff9c\105" + - "\uff9c\106\uff9c\107\uff9c\110\uff9c\111\uff9c\112\uff9c\001\002" + - "\000\160\004\uffb8\005\uffb8\007\uffb8\010\uffb8\011\uffb8\025" + - "\uffb8\026\uffb8\027\uffb8\030\uffb8\031\uffb8\032\uffb8\033\uffb8" + - "\035\uffb8\036\uffb8\037\uffb8\040\uffb8\041\uffb8\042\uffb8\043" + - "\uffb8\044\uffb8\045\uffb8\046\uffb8\047\uffb8\050\uffb8\051\uffb8" + - "\052\uffb8\053\uffb8\054\uffb8\055\uffb8\056\uffb8\057\uffb8\060" + - "\uffb8\061\uffb8\062\uffb8\063\uffb8\064\uffb8\065\uffb8\066\uffb8" + - "\067\uffb8\070\uffb8\071\uffb8\072\uffb8\073\uffb8\074\uffb8\100" + - "\uffb8\101\uffb8\102\uffb8\103\uffb8\104\uffb8\105\uffb8\106\uffb8" + - "\107\uffb8\110\uffb8\111\uffb8\112\uffb8\001\002\000\156\004" + - "\uffcf\005\uffcf\007\uffcf\010\uffcf\025\uffcf\026\uffcf\027\uffcf" + - "\030\uffcf\031\uffcf\032\uffcf\033\uffcf\035\uffcf\036\uffcf\037" + - "\uffcf\040\uffcf\041\uffcf\042\uffcf\043\uffcf\044\uffcf\045\uffcf" + - "\046\uffcf\047\uffcf\050\uffcf\051\uffcf\052\uffcf\053\uffcf\054" + - "\uffcf\055\uffcf\056\uffcf\057\uffcf\060\uffcf\061\uffcf\062\uffcf" + - "\063\uffcf\064\uffcf\065\uffcf\066\uffcf\067\uffcf\070\uffcf\071" + - "\uffcf\072\uffcf\073\uffcf\074\uffcf\100\uffcf\101\uffcf\102\uffcf" + - "\103\uffcf\104\uffcf\105\uffcf\106\uffcf\107\uffcf\110\uffcf\111" + - "\uffcf\112\uffcf\001\002\000\160\004\uff9b\005\uff9b\007\uff9b" + - "\010\uff9b\011\uff9b\025\uff9b\026\uff9b\027\uff9b\030\uff9b\031" + - "\uff9b\032\uff9b\033\uff9b\035\uff9b\036\uff9b\037\uff9b\040\uff9b" + - "\041\uff9b\042\uff9b\043\uff9b\044\uff9b\045\uff9b\046\uff9b\047" + - "\uff9b\050\uff9b\051\uff9b\052\uff9b\053\uff9b\054\uff9b\055\uff9b" + - "\056\uff9b\057\uff9b\060\uff9b\061\uff9b\062\uff9b\063\uff9b\064" + - "\uff9b\065\uff9b\066\uff9b\067\uff9b\070\uff9b\071\uff9b\072\uff9b" + - "\073\uff9b\074\uff9b\100\uff9b\101\uff9b\102\uff9b\103\uff9b\104" + - "\uff9b\105\uff9b\106\uff9b\107\uff9b\110\uff9b\111\uff9b\112\uff9b" + - "\001\002\000\160\004\uffac\005\uffac\007\uffac\010\uffac\011" + - "\uffac\025\uffac\026\uffac\027\uffac\030\uffac\031\uffac\032\uffac" + - "\033\uffac\035\uffac\036\uffac\037\uffac\040\uffac\041\uffac\042" + - "\uffac\043\uffac\044\uffac\045\uffac\046\uffac\047\uffac\050\uffac" + - "\051\uffac\052\uffac\053\uffac\054\uffac\055\uffac\056\uffac\057" + - "\uffac\060\uffac\061\uffac\062\uffac\063\uffac\064\uffac\065\uffac" + - "\066\uffac\067\uffac\070\uffac\071\uffac\072\uffac\073\uffac\074" + - "\uffac\100\uffac\101\uffac\102\uffac\103\uffac\104\uffac\105\uffac" + - "\106\uffac\107\uffac\110\uffac\111\uffac\112\uffac\001\002\000" + - "\160\004\uffa2\005\uffa2\007\uffa2\010\uffa2\011\uffa2\025\uffa2" + - "\026\uffa2\027\uffa2\030\uffa2\031\uffa2\032\uffa2\033\uffa2\035" + - "\uffa2\036\uffa2\037\uffa2\040\uffa2\041\uffa2\042\uffa2\043\uffa2" + - "\044\uffa2\045\uffa2\046\uffa2\047\uffa2\050\uffa2\051\uffa2\052" + - "\uffa2\053\uffa2\054\uffa2\055\uffa2\056\uffa2\057\uffa2\060\uffa2" + - "\061\uffa2\062\uffa2\063\uffa2\064\uffa2\065\uffa2\066\uffa2\067" + - "\uffa2\070\uffa2\071\uffa2\072\uffa2\073\uffa2\074\uffa2\100\uffa2" + - "\101\uffa2\102\uffa2\103\uffa2\104\uffa2\105\uffa2\106\uffa2\107" + - "\uffa2\110\uffa2\111\uffa2\112\uffa2\001\002\000\006\005\105" + - "\103\104\001\002\000\132\004\066\010\064\026\056\027" + - "\043\030\072\031\060\032\076\033\023\037\061\040\033" + - "\041\021\042\074\043\063\044\062\045\073\046\071\047" + - "\036\050\050\051\101\052\053\053\052\054\047\055\055" + - "\056\054\057\044\060\042\061\067\062\040\063\102\064" + - "\032\065\051\066\031\067\034\070\020\071\075\072\100" + - "\073\025\074\026\105\070\106\041\107\035\110\022\111" + - "\077\112\024\001\002\000\156\004\uffd3\005\uffd3\007\uffd3" + - "\010\uffd3\025\uffd3\026\uffd3\027\uffd3\030\uffd3\031\uffd3\032" + - "\uffd3\033\uffd3\035\uffd3\036\uffd3\037\uffd3\040\uffd3\041\uffd3" + - "\042\uffd3\043\uffd3\044\uffd3\045\uffd3\046\uffd3\047\uffd3\050" + - "\uffd3\051\uffd3\052\uffd3\053\uffd3\054\uffd3\055\uffd3\056\uffd3" + - "\057\uffd3\060\uffd3\061\uffd3\062\uffd3\063\uffd3\064\uffd3\065" + - "\uffd3\066\uffd3\067\uffd3\070\uffd3\071\uffd3\072\uffd3\073\uffd3" + - "\074\uffd3\100\uffd3\101\uffd3\102\uffd3\103\uffd3\104\uffd3\105" + - "\uffd3\106\uffd3\107\uffd3\110\uffd3\111\uffd3\112\uffd3\001\002" + - "\000\146\004\066\005\uffe0\007\uffe0\010\064\025\uffe0\026" + - "\056\027\043\030\072\031\060\032\076\033\023\035\uffe0" + - "\036\uffe0\037\061\040\033\041\021\042\074\043\063\044" + - "\062\045\073\046\071\047\036\050\050\051\101\052\053" + - "\053\052\054\047\055\055\056\054\057\044\060\042\061" + - "\067\062\040\063\102\064\032\065\051\066\031\067\034" + - "\070\020\071\075\072\100\073\025\074\026\103\uffe0\105" + - "\070\106\041\107\035\110\022\111\077\112\024\001\002" + - "\000\146\004\uffdd\005\uffdd\007\uffdd\010\uffdd\025\uffdd\026" + - "\uffdd\027\uffdd\030\uffdd\031\uffdd\032\uffdd\033\uffdd\035\uffdd" + - "\036\uffdd\037\uffdd\040\uffdd\041\uffdd\042\uffdd\043\uffdd\044" + - "\uffdd\045\uffdd\046\uffdd\047\uffdd\050\uffdd\051\uffdd\052\uffdd" + - "\053\uffdd\054\uffdd\055\uffdd\056\uffdd\057\uffdd\060\uffdd\061" + - "\uffdd\062\uffdd\063\uffdd\064\uffdd\065\uffdd\066\uffdd\067\uffdd" + - "\070\uffdd\071\uffdd\072\uffdd\073\uffdd\074\uffdd\103\uffdd\105" + - "\uffdd\106\uffdd\107\uffdd\110\uffdd\111\uffdd\112\uffdd\001\002" + - "\000\124\011\uffbd\012\136\026\uffbd\027\uffbd\030\uffbd\031" + - "\uffbd\032\uffbd\033\uffbd\037\uffbd\040\uffbd\041\uffbd\042\uffbd" + - "\043\uffbd\044\uffbd\045\uffbd\046\uffbd\047\uffbd\050\uffbd\051" + - "\uffbd\052\uffbd\053\uffbd\054\uffbd\055\uffbd\056\uffbd\057\uffbd" + - "\060\uffbd\061\uffbd\062\uffbd\063\uffbd\064\uffbd\065\uffbd\066" + - "\uffbd\067\uffbd\070\uffbd\071\uffbd\072\uffbd\073\uffbd\074\uffbd" + - "\110\uffbd\111\uffbd\112\uffbd\001\002\000\122\011\uffbf\026" + - "\uffbf\027\uffbf\030\uffbf\031\uffbf\032\uffbf\033\uffbf\037\uffbf" + - "\040\uffbf\041\uffbf\042\uffbf\043\uffbf\044\uffbf\045\uffbf\046" + - "\uffbf\047\uffbf\050\uffbf\051\uffbf\052\uffbf\053\uffbf\054\uffbf" + - "\055\uffbf\056\uffbf\057\uffbf\060\uffbf\061\uffbf\062\uffbf\063" + - "\uffbf\064\uffbf\065\uffbf\066\uffbf\067\uffbf\070\uffbf\071\uffbf" + - "\072\uffbf\073\uffbf\074\uffbf\110\uffbf\111\uffbf\112\uffbf\001" + - "\002\000\122\011\uffc3\026\uffc3\027\uffc3\030\uffc3\031\uffc3" + - "\032\uffc3\033\uffc3\037\uffc3\040\uffc3\041\uffc3\042\uffc3\043" + - "\uffc3\044\uffc3\045\uffc3\046\uffc3\047\uffc3\050\uffc3\051\uffc3" + - "\052\uffc3\053\uffc3\054\uffc3\055\uffc3\056\uffc3\057\uffc3\060" + - "\uffc3\061\uffc3\062\uffc3\063\uffc3\064\uffc3\065\uffc3\066\uffc3" + - "\067\uffc3\070\uffc3\071\uffc3\072\uffc3\073\uffc3\074\uffc3\110" + - "\uffc3\111\uffc3\112\uffc3\001\002\000\120\026\056\027\043" + - "\030\072\031\060\032\076\033\023\037\061\040\033\041" + - "\021\042\074\043\063\044\062\045\073\046\071\047\036" + - "\050\050\051\101\052\053\053\052\054\047\055\055\056" + - "\054\057\044\060\042\061\067\062\040\063\102\064\032" + - "\065\051\066\031\067\034\070\020\071\075\072\100\073" + - "\025\074\026\110\110\111\116\112\111\001\002\000\124" + - "\011\127\012\126\026\056\027\043\030\072\031\060\032" + - "\076\033\023\037\061\040\033\041\021\042\074\043\063" + - "\044\062\045\073\046\071\047\036\050\050\051\101\052" + - "\053\053\052\054\047\055\055\056\054\057\044\060\042" + - "\061\067\062\040\063\102\064\032\065\051\066\031\067" + - "\034\070\020\071\075\072\100\073\025\074\026\110\110" + - "\111\116\112\111\001\002\000\156\004\uffcc\005\uffcc\007" + - "\uffcc\010\uffcc\025\uffcc\026\uffcc\027\uffcc\030\uffcc\031\uffcc" + - "\032\uffcc\033\uffcc\035\uffcc\036\uffcc\037\uffcc\040\uffcc\041" + - "\uffcc\042\uffcc\043\uffcc\044\uffcc\045\uffcc\046\uffcc\047\uffcc" + - "\050\uffcc\051\uffcc\052\uffcc\053\uffcc\054\uffcc\055\uffcc\056" + - "\uffcc\057\uffcc\060\uffcc\061\uffcc\062\uffcc\063\uffcc\064\uffcc" + - "\065\uffcc\066\uffcc\067\uffcc\070\uffcc\071\uffcc\072\uffcc\073" + - "\uffcc\074\uffcc\100\uffcc\101\uffcc\102\uffcc\103\uffcc\104\uffcc" + - "\105\uffcc\106\uffcc\107\uffcc\110\uffcc\111\uffcc\112\uffcc\001" + - "\002\000\122\011\uffc1\026\uffc1\027\uffc1\030\uffc1\031\uffc1" + - "\032\uffc1\033\uffc1\037\uffc1\040\uffc1\041\uffc1\042\uffc1\043" + - "\uffc1\044\uffc1\045\uffc1\046\uffc1\047\uffc1\050\uffc1\051\uffc1" + - "\052\uffc1\053\uffc1\054\uffc1\055\uffc1\056\uffc1\057\uffc1\060" + - "\uffc1\061\uffc1\062\uffc1\063\uffc1\064\uffc1\065\uffc1\066\uffc1" + - "\067\uffc1\070\uffc1\071\uffc1\072\uffc1\073\uffc1\074\uffc1\110" + - "\uffc1\111\uffc1\112\uffc1\001\002\000\122\011\uffc5\026\uffc5" + - "\027\uffc5\030\uffc5\031\uffc5\032\uffc5\033\uffc5\037\uffc5\040" + - "\uffc5\041\uffc5\042\uffc5\043\uffc5\044\uffc5\045\uffc5\046\uffc5" + - "\047\uffc5\050\uffc5\051\uffc5\052\uffc5\053\uffc5\054\uffc5\055" + - "\uffc5\056\uffc5\057\uffc5\060\uffc5\061\uffc5\062\uffc5\063\uffc5" + - "\064\uffc5\065\uffc5\066\uffc5\067\uffc5\070\uffc5\071\uffc5\072" + - "\uffc5\073\uffc5\074\uffc5\110\uffc5\111\uffc5\112\uffc5\001\002" + - "\000\122\011\123\026\056\027\043\030\072\031\060\032" + - "\076\033\023\037\061\040\033\041\021\042\074\043\063" + - "\044\062\045\073\046\071\047\036\050\050\051\101\052" + - "\053\053\052\054\047\055\055\056\054\057\044\060\042" + - "\061\067\062\040\063\102\064\032\065\051\066\031\067" + - "\034\070\020\071\075\072\100\073\025\074\026\110\110" + - "\111\124\112\121\001\002\000\122\011\uffc0\026\uffc0\027" + - "\uffc0\030\uffc0\031\uffc0\032\uffc0\033\uffc0\037\uffc0\040\uffc0" + - "\041\uffc0\042\uffc0\043\uffc0\044\uffc0\045\uffc0\046\uffc0\047" + - "\uffc0\050\uffc0\051\uffc0\052\uffc0\053\uffc0\054\uffc0\055\uffc0" + - "\056\uffc0\057\uffc0\060\uffc0\061\uffc0\062\uffc0\063\uffc0\064" + - "\uffc0\065\uffc0\066\uffc0\067\uffc0\070\uffc0\071\uffc0\072\uffc0" + - "\073\uffc0\074\uffc0\110\uffc0\111\uffc0\112\uffc0\001\002\000" + - "\122\011\uffc4\026\uffc4\027\uffc4\030\uffc4\031\uffc4\032\uffc4" + - "\033\uffc4\037\uffc4\040\uffc4\041\uffc4\042\uffc4\043\uffc4\044" + - "\uffc4\045\uffc4\046\uffc4\047\uffc4\050\uffc4\051\uffc4\052\uffc4" + - "\053\uffc4\054\uffc4\055\uffc4\056\uffc4\057\uffc4\060\uffc4\061" + - "\uffc4\062\uffc4\063\uffc4\064\uffc4\065\uffc4\066\uffc4\067\uffc4" + - "\070\uffc4\071\uffc4\072\uffc4\073\uffc4\074\uffc4\110\uffc4\111" + - "\uffc4\112\uffc4\001\002\000\156\004\uffcb\005\uffcb\007\uffcb" + - "\010\uffcb\025\uffcb\026\uffcb\027\uffcb\030\uffcb\031\uffcb\032" + - "\uffcb\033\uffcb\035\uffcb\036\uffcb\037\uffcb\040\uffcb\041\uffcb" + - "\042\uffcb\043\uffcb\044\uffcb\045\uffcb\046\uffcb\047\uffcb\050" + - "\uffcb\051\uffcb\052\uffcb\053\uffcb\054\uffcb\055\uffcb\056\uffcb" + - "\057\uffcb\060\uffcb\061\uffcb\062\uffcb\063\uffcb\064\uffcb\065" + - "\uffcb\066\uffcb\067\uffcb\070\uffcb\071\uffcb\072\uffcb\073\uffcb" + - "\074\uffcb\100\uffcb\101\uffcb\102\uffcb\103\uffcb\104\uffcb\105" + - "\uffcb\106\uffcb\107\uffcb\110\uffcb\111\uffcb\112\uffcb\001\002" + - "\000\122\011\uffc2\026\uffc2\027\uffc2\030\uffc2\031\uffc2\032" + - "\uffc2\033\uffc2\037\uffc2\040\uffc2\041\uffc2\042\uffc2\043\uffc2" + - "\044\uffc2\045\uffc2\046\uffc2\047\uffc2\050\uffc2\051\uffc2\052" + - "\uffc2\053\uffc2\054\uffc2\055\uffc2\056\uffc2\057\uffc2\060\uffc2" + - "\061\uffc2\062\uffc2\063\uffc2\064\uffc2\065\uffc2\066\uffc2\067" + - "\uffc2\070\uffc2\071\uffc2\072\uffc2\073\uffc2\074\uffc2\110\uffc2" + - "\111\uffc2\112\uffc2\001\002\000\122\011\uffc6\026\uffc6\027" + - "\uffc6\030\uffc6\031\uffc6\032\uffc6\033\uffc6\037\uffc6\040\uffc6" + - "\041\uffc6\042\uffc6\043\uffc6\044\uffc6\045\uffc6\046\uffc6\047" + - "\uffc6\050\uffc6\051\uffc6\052\uffc6\053\uffc6\054\uffc6\055\uffc6" + - "\056\uffc6\057\uffc6\060\uffc6\061\uffc6\062\uffc6\063\uffc6\064" + - "\uffc6\065\uffc6\066\uffc6\067\uffc6\070\uffc6\071\uffc6\072\uffc6" + - "\073\uffc6\074\uffc6\110\uffc6\111\uffc6\112\uffc6\001\002\000" + - "\120\026\056\027\043\030\072\031\060\032\076\033\023" + - "\037\061\040\033\041\021\042\074\043\063\044\062\045" + - "\073\046\071\047\036\050\050\051\101\052\053\053\052" + - "\054\047\055\055\056\054\057\044\060\042\061\067\062" + - "\040\063\102\064\032\065\051\066\031\067\034\070\020" + - "\071\075\072\100\073\025\074\026\110\110\111\116\112" + - "\111\001\002\000\156\004\uffca\005\uffca\007\uffca\010\uffca" + - "\025\uffca\026\uffca\027\uffca\030\uffca\031\uffca\032\uffca\033" + - "\uffca\035\uffca\036\uffca\037\uffca\040\uffca\041\uffca\042\uffca" + - "\043\uffca\044\uffca\045\uffca\046\uffca\047\uffca\050\uffca\051" + - "\uffca\052\uffca\053\uffca\054\uffca\055\uffca\056\uffca\057\uffca" + - "\060\uffca\061\uffca\062\uffca\063\uffca\064\uffca\065\uffca\066" + - "\uffca\067\uffca\070\uffca\071\uffca\072\uffca\073\uffca\074\uffca" + - "\100\uffca\101\uffca\102\uffca\103\uffca\104\uffca\105\uffca\106" + - "\uffca\107\uffca\110\uffca\111\uffca\112\uffca\001\002\000\122" + - "\011\131\026\056\027\043\030\072\031\060\032\076\033" + - "\023\037\061\040\033\041\021\042\074\043\063\044\062" + - "\045\073\046\071\047\036\050\050\051\101\052\053\053" + - "\052\054\047\055\055\056\054\057\044\060\042\061\067" + - "\062\040\063\102\064\032\065\051\066\031\067\034\070" + - "\020\071\075\072\100\073\025\074\026\110\110\111\124" + - "\112\121\001\002\000\156\004\uffc9\005\uffc9\007\uffc9\010" + - "\uffc9\025\uffc9\026\uffc9\027\uffc9\030\uffc9\031\uffc9\032\uffc9" + - "\033\uffc9\035\uffc9\036\uffc9\037\uffc9\040\uffc9\041\uffc9\042" + - "\uffc9\043\uffc9\044\uffc9\045\uffc9\046\uffc9\047\uffc9\050\uffc9" + - "\051\uffc9\052\uffc9\053\uffc9\054\uffc9\055\uffc9\056\uffc9\057" + - "\uffc9\060\uffc9\061\uffc9\062\uffc9\063\uffc9\064\uffc9\065\uffc9" + - "\066\uffc9\067\uffc9\070\uffc9\071\uffc9\072\uffc9\073\uffc9\074" + - "\uffc9\100\uffc9\101\uffc9\102\uffc9\103\uffc9\104\uffc9\105\uffc9" + - "\106\uffc9\107\uffc9\110\uffc9\111\uffc9\112\uffc9\001\002\000" + - "\122\011\133\026\056\027\043\030\072\031\060\032\076" + - "\033\023\037\061\040\033\041\021\042\074\043\063\044" + - "\062\045\073\046\071\047\036\050\050\051\101\052\053" + - "\053\052\054\047\055\055\056\054\057\044\060\042\061" + - "\067\062\040\063\102\064\032\065\051\066\031\067\034" + - "\070\020\071\075\072\100\073\025\074\026\110\110\111" + - "\124\112\121\001\002\000\156\004\uffc7\005\uffc7\007\uffc7" + - "\010\uffc7\025\uffc7\026\uffc7\027\uffc7\030\uffc7\031\uffc7\032" + - "\uffc7\033\uffc7\035\uffc7\036\uffc7\037\uffc7\040\uffc7\041\uffc7" + - "\042\uffc7\043\uffc7\044\uffc7\045\uffc7\046\uffc7\047\uffc7\050" + - "\uffc7\051\uffc7\052\uffc7\053\uffc7\054\uffc7\055\uffc7\056\uffc7" + - "\057\uffc7\060\uffc7\061\uffc7\062\uffc7\063\uffc7\064\uffc7\065" + - "\uffc7\066\uffc7\067\uffc7\070\uffc7\071\uffc7\072\uffc7\073\uffc7" + - "\074\uffc7\100\uffc7\101\uffc7\102\uffc7\103\uffc7\104\uffc7\105" + - "\uffc7\106\uffc7\107\uffc7\110\uffc7\111\uffc7\112\uffc7\001\002" + - "\000\122\011\135\026\056\027\043\030\072\031\060\032" + - "\076\033\023\037\061\040\033\041\021\042\074\043\063" + - "\044\062\045\073\046\071\047\036\050\050\051\101\052" + - "\053\053\052\054\047\055\055\056\054\057\044\060\042" + - "\061\067\062\040\063\102\064\032\065\051\066\031\067" + - "\034\070\020\071\075\072\100\073\025\074\026\110\110" + - "\111\124\112\121\001\002\000\156\004\uffc8\005\uffc8\007" + - "\uffc8\010\uffc8\025\uffc8\026\uffc8\027\uffc8\030\uffc8\031\uffc8" + - "\032\uffc8\033\uffc8\035\uffc8\036\uffc8\037\uffc8\040\uffc8\041" + - "\uffc8\042\uffc8\043\uffc8\044\uffc8\045\uffc8\046\uffc8\047\uffc8" + - "\050\uffc8\051\uffc8\052\uffc8\053\uffc8\054\uffc8\055\uffc8\056" + - "\uffc8\057\uffc8\060\uffc8\061\uffc8\062\uffc8\063\uffc8\064\uffc8" + - "\065\uffc8\066\uffc8\067\uffc8\070\uffc8\071\uffc8\072\uffc8\073" + - "\uffc8\074\uffc8\100\uffc8\101\uffc8\102\uffc8\103\uffc8\104\uffc8" + - "\105\uffc8\106\uffc8\107\uffc8\110\uffc8\111\uffc8\112\uffc8\001" + - "\002\000\004\110\137\001\002\000\122\011\uffbe\026\uffbe" + - "\027\uffbe\030\uffbe\031\uffbe\032\uffbe\033\uffbe\037\uffbe\040" + - "\uffbe\041\uffbe\042\uffbe\043\uffbe\044\uffbe\045\uffbe\046\uffbe" + - "\047\uffbe\050\uffbe\051\uffbe\052\uffbe\053\uffbe\054\uffbe\055" + - "\uffbe\056\uffbe\057\uffbe\060\uffbe\061\uffbe\062\uffbe\063\uffbe" + - "\064\uffbe\065\uffbe\066\uffbe\067\uffbe\070\uffbe\071\uffbe\072" + - "\uffbe\073\uffbe\074\uffbe\110\uffbe\111\uffbe\112\uffbe\001\002" + - "\000\156\004\uffd8\005\uffd8\007\uffd8\010\uffd8\025\uffd8\026" + - "\uffd8\027\uffd8\030\uffd8\031\uffd8\032\uffd8\033\uffd8\035\uffd8" + - "\036\uffd8\037\uffd8\040\uffd8\041\uffd8\042\uffd8\043\uffd8\044" + - "\uffd8\045\uffd8\046\uffd8\047\uffd8\050\uffd8\051\uffd8\052\uffd8" + - "\053\uffd8\054\uffd8\055\uffd8\056\uffd8\057\uffd8\060\uffd8\061" + - "\uffd8\062\uffd8\063\uffd8\064\uffd8\065\uffd8\066\uffd8\067\uffd8" + - "\070\uffd8\071\uffd8\072\uffd8\073\uffd8\074\uffd8\100\uffd8\101" + - "\uffd8\102\uffd8\103\uffd8\104\uffd8\105\uffd8\106\uffd8\107\uffd8" + - "\110\uffd8\111\uffd8\112\uffd8\001\002\000\156\004\uffd7\005" + - "\uffd7\007\uffd7\010\uffd7\025\uffd7\026\uffd7\027\uffd7\030\uffd7" + - "\031\uffd7\032\uffd7\033\uffd7\035\uffd7\036\uffd7\037\uffd7\040" + - "\uffd7\041\uffd7\042\uffd7\043\uffd7\044\uffd7\045\uffd7\046\uffd7" + - "\047\uffd7\050\uffd7\051\uffd7\052\uffd7\053\uffd7\054\uffd7\055" + - "\uffd7\056\uffd7\057\uffd7\060\uffd7\061\uffd7\062\uffd7\063\uffd7" + - "\064\uffd7\065\uffd7\066\uffd7\067\uffd7\070\uffd7\071\uffd7\072" + - "\uffd7\073\uffd7\074\uffd7\100\uffd7\101\uffd7\102\uffd7\103\uffd7" + - "\104\uffd7\105\uffd7\106\uffd7\107\uffd7\110\uffd7\111\uffd7\112" + - "\uffd7\001\002\000\006\021\144\100\145\001\002\000\156" + - "\004\uffd6\005\uffd6\007\uffd6\010\uffd6\025\uffd6\026\uffd6\027" + - "\uffd6\030\uffd6\031\uffd6\032\uffd6\033\uffd6\035\uffd6\036\uffd6" + - "\037\uffd6\040\uffd6\041\uffd6\042\uffd6\043\uffd6\044\uffd6\045" + - "\uffd6\046\uffd6\047\uffd6\050\uffd6\051\uffd6\052\uffd6\053\uffd6" + - "\054\uffd6\055\uffd6\056\uffd6\057\uffd6\060\uffd6\061\uffd6\062" + - "\uffd6\063\uffd6\064\uffd6\065\uffd6\066\uffd6\067\uffd6\070\uffd6" + - "\071\uffd6\072\uffd6\073\uffd6\074\uffd6\100\uffd6\101\uffd6\102" + - "\uffd6\103\uffd6\104\uffd6\105\uffd6\106\uffd6\107\uffd6\110\uffd6" + - "\111\uffd6\112\uffd6\001\002\000\156\004\uffd5\005\uffd5\007" + - "\uffd5\010\uffd5\025\uffd5\026\uffd5\027\uffd5\030\uffd5\031\uffd5" + - "\032\uffd5\033\uffd5\035\uffd5\036\uffd5\037\uffd5\040\uffd5\041" + - "\uffd5\042\uffd5\043\uffd5\044\uffd5\045\uffd5\046\uffd5\047\uffd5" + - "\050\uffd5\051\uffd5\052\uffd5\053\uffd5\054\uffd5\055\uffd5\056" + - "\uffd5\057\uffd5\060\uffd5\061\uffd5\062\uffd5\063\uffd5\064\uffd5" + - "\065\uffd5\066\uffd5\067\uffd5\070\uffd5\071\uffd5\072\uffd5\073" + - "\uffd5\074\uffd5\100\uffd5\101\uffd5\102\uffd5\103\uffd5\104\uffd5" + - "\105\uffd5\106\uffd5\107\uffd5\110\uffd5\111\uffd5\112\uffd5\001" + - "\002\000\004\021\146\001\002\000\156\004\uffd4\005\uffd4" + - "\007\uffd4\010\uffd4\025\uffd4\026\uffd4\027\uffd4\030\uffd4\031" + - "\uffd4\032\uffd4\033\uffd4\035\uffd4\036\uffd4\037\uffd4\040\uffd4" + - "\041\uffd4\042\uffd4\043\uffd4\044\uffd4\045\uffd4\046\uffd4\047" + - "\uffd4\050\uffd4\051\uffd4\052\uffd4\053\uffd4\054\uffd4\055\uffd4" + - "\056\uffd4\057\uffd4\060\uffd4\061\uffd4\062\uffd4\063\uffd4\064" + - "\uffd4\065\uffd4\066\uffd4\067\uffd4\070\uffd4\071\uffd4\072\uffd4" + - "\073\uffd4\074\uffd4\100\uffd4\101\uffd4\102\uffd4\103\uffd4\104" + - "\uffd4\105\uffd4\106\uffd4\107\uffd4\110\uffd4\111\uffd4\112\uffd4" + - "\001\002\000\146\004\uffda\005\uffda\007\uffda\010\uffda\025" + - "\uffda\026\uffda\027\uffda\030\uffda\031\uffda\032\uffda\033\uffda" + - "\035\uffda\036\uffda\037\uffda\040\uffda\041\uffda\042\uffda\043" + - "\uffda\044\uffda\045\uffda\046\uffda\047\uffda\050\uffda\051\uffda" + - "\052\uffda\053\uffda\054\uffda\055\uffda\056\uffda\057\uffda\060" + - "\uffda\061\uffda\062\uffda\063\uffda\064\uffda\065\uffda\066\uffda" + - "\067\uffda\070\uffda\071\uffda\072\uffda\073\uffda\074\uffda\103" + - "\uffda\105\uffda\106\uffda\107\uffda\110\uffda\111\uffda\112\uffda" + - "\001\002\000\146\004\uffd9\005\uffd9\007\uffd9\010\uffd9\025" + - "\uffd9\026\uffd9\027\uffd9\030\uffd9\031\uffd9\032\uffd9\033\uffd9" + - "\035\uffd9\036\uffd9\037\uffd9\040\uffd9\041\uffd9\042\uffd9\043" + - "\uffd9\044\uffd9\045\uffd9\046\uffd9\047\uffd9\050\uffd9\051\uffd9" + - "\052\uffd9\053\uffd9\054\uffd9\055\uffd9\056\uffd9\057\uffd9\060" + - "\uffd9\061\uffd9\062\uffd9\063\uffd9\064\uffd9\065\uffd9\066\uffd9" + - "\067\uffd9\070\uffd9\071\uffd9\072\uffd9\073\uffd9\074\uffd9\103" + - "\uffd9\105\uffd9\106\uffd9\107\uffd9\110\uffd9\111\uffd9\112\uffd9" + - "\001\002\000\014\013\ufff8\022\ufff8\023\ufff8\024\ufff8\076" + - "\ufff8\001\002\000\150\002\uffee\003\uffee\004\uffee\006\uffee" + - "\010\uffee\016\uffee\021\uffee\026\uffee\027\uffee\030\uffee\031" + - "\uffee\032\uffee\033\uffee\034\uffee\037\uffee\040\uffee\041\uffee" + - "\042\uffee\043\uffee\044\uffee\045\uffee\046\uffee\047\uffee\050" + - "\uffee\051\uffee\052\uffee\053\uffee\054\uffee\055\uffee\056\uffee" + - "\057\uffee\060\uffee\061\uffee\062\uffee\063\uffee\064\uffee\065" + - "\uffee\066\uffee\067\uffee\070\uffee\071\uffee\072\uffee\073\uffee" + - "\074\uffee\103\uffee\105\uffee\106\uffee\107\uffee\110\uffee\111" + - "\uffee\112\uffee\001\002\000\140\004\uffe1\006\200\010\uffe1" + - "\026\uffe1\027\uffe1\030\uffe1\031\uffe1\032\uffe1\033\uffe1\034" + - "\176\037\uffe1\040\uffe1\041\uffe1\042\uffe1\043\uffe1\044\uffe1" + - "\045\uffe1\046\uffe1\047\uffe1\050\uffe1\051\uffe1\052\uffe1\053" + - "\uffe1\054\uffe1\055\uffe1\056\uffe1\057\uffe1\060\uffe1\061\uffe1" + - "\062\uffe1\063\uffe1\064\uffe1\065\uffe1\066\uffe1\067\uffe1\070" + - "\uffe1\071\uffe1\072\uffe1\073\uffe1\074\uffe1\103\uffe1\105\uffe1" + - "\106\uffe1\107\uffe1\110\uffe1\111\uffe1\112\uffe1\001\002\000" + - "\004\076\162\001\002\000\150\002\ufff3\003\ufff3\004\ufff3" + - "\006\ufff3\010\ufff3\016\ufff3\021\ufff3\026\ufff3\027\ufff3\030" + - "\ufff3\031\ufff3\032\ufff3\033\ufff3\034\ufff3\037\ufff3\040\ufff3" + - "\041\ufff3\042\ufff3\043\ufff3\044\ufff3\045\ufff3\046\ufff3\047" + - "\ufff3\050\ufff3\051\ufff3\052\ufff3\053\ufff3\054\ufff3\055\ufff3" + - "\056\ufff3\057\ufff3\060\ufff3\061\ufff3\062\ufff3\063\ufff3\064" + - "\ufff3\065\ufff3\066\ufff3\067\ufff3\070\ufff3\071\ufff3\072\ufff3" + - "\073\ufff3\074\ufff3\103\ufff3\105\ufff3\106\ufff3\107\ufff3\110" + - "\ufff3\111\ufff3\112\ufff3\001\002\000\146\002\000\003\152" + - "\004\uffe6\006\uffe6\010\uffe6\016\157\026\uffe6\027\uffe6\030" + - "\uffe6\031\uffe6\032\uffe6\033\uffe6\034\uffe6\037\uffe6\040\uffe6" + - "\041\uffe6\042\uffe6\043\uffe6\044\uffe6\045\uffe6\046\uffe6\047" + - "\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6\054\uffe6\055\uffe6" + - "\056\uffe6\057\uffe6\060\uffe6\061\uffe6\062\uffe6\063\uffe6\064" + - "\uffe6\065\uffe6\066\uffe6\067\uffe6\070\uffe6\071\uffe6\072\uffe6" + - "\073\uffe6\074\uffe6\103\uffe6\105\uffe6\106\uffe6\107\uffe6\110" + - "\uffe6\111\uffe6\112\uffe6\001\002\000\004\076\162\001\002" + - "\000\150\002\ufff6\003\ufff6\004\ufff6\006\ufff6\010\ufff6\016" + - "\ufff6\021\ufff6\026\ufff6\027\ufff6\030\ufff6\031\ufff6\032\ufff6" + - "\033\ufff6\034\ufff6\037\ufff6\040\ufff6\041\ufff6\042\ufff6\043" + - "\ufff6\044\ufff6\045\ufff6\046\ufff6\047\ufff6\050\ufff6\051\ufff6" + - "\052\ufff6\053\ufff6\054\ufff6\055\ufff6\056\ufff6\057\ufff6\060" + - "\ufff6\061\ufff6\062\ufff6\063\ufff6\064\ufff6\065\ufff6\066\ufff6" + - "\067\ufff6\070\ufff6\071\ufff6\072\ufff6\073\ufff6\074\ufff6\103" + - "\ufff6\105\ufff6\106\ufff6\107\ufff6\110\ufff6\111\ufff6\112\ufff6" + - "\001\002\000\004\017\165\001\002\000\006\015\163\017" + - "\uffe4\001\002\000\006\017\uffe3\076\162\001\002\000\004" + - "\017\uffe5\001\002\000\142\004\uffe7\006\uffe7\010\uffe7\020" + - "\166\026\uffe7\027\uffe7\030\uffe7\031\uffe7\032\uffe7\033\uffe7" + - "\034\uffe7\037\uffe7\040\uffe7\041\uffe7\042\uffe7\043\uffe7\044" + - "\uffe7\045\uffe7\046\uffe7\047\uffe7\050\uffe7\051\uffe7\052\uffe7" + - "\053\uffe7\054\uffe7\055\uffe7\056\uffe7\057\uffe7\060\uffe7\061" + - "\uffe7\062\uffe7\063\uffe7\064\uffe7\065\uffe7\066\uffe7\067\uffe7" + - "\070\uffe7\071\uffe7\072\uffe7\073\uffe7\074\uffe7\103\uffe7\105" + - "\uffe7\106\uffe7\107\uffe7\110\uffe7\111\uffe7\112\uffe7\001\002" + - "\000\144\003\152\004\uffe6\006\uffe6\010\uffe6\016\154\026" + - "\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6\034\uffe6" + - "\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044\uffe6\045" + - "\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6" + - "\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061\uffe6\062" + - "\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6\070\uffe6" + - "\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105\uffe6\106" + - "\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002\000\146" + - "\003\152\004\uffe6\006\uffe6\010\uffe6\016\157\021\170\026" + - "\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6\034\uffe6" + - "\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044\uffe6\045" + - "\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6\053\uffe6" + - "\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061\uffe6\062" + - "\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6\070\uffe6" + - "\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105\uffe6\106" + - "\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002\000\150" + - "\002\ufff5\003\ufff5\004\ufff5\006\ufff5\010\ufff5\016\ufff5\021" + - "\ufff5\026\ufff5\027\ufff5\030\ufff5\031\ufff5\032\ufff5\033\ufff5" + - "\034\ufff5\037\ufff5\040\ufff5\041\ufff5\042\ufff5\043\ufff5\044" + - "\ufff5\045\ufff5\046\ufff5\047\ufff5\050\ufff5\051\ufff5\052\ufff5" + - "\053\ufff5\054\ufff5\055\ufff5\056\ufff5\057\ufff5\060\ufff5\061" + - "\ufff5\062\ufff5\063\ufff5\064\ufff5\065\ufff5\066\ufff5\067\ufff5" + - "\070\ufff5\071\ufff5\072\ufff5\073\ufff5\074\ufff5\103\ufff5\105" + - "\ufff5\106\ufff5\107\ufff5\110\ufff5\111\ufff5\112\ufff5\001\002" + - "\000\004\017\172\001\002\000\142\004\uffe7\006\uffe7\010" + - "\uffe7\020\173\026\uffe7\027\uffe7\030\uffe7\031\uffe7\032\uffe7" + - "\033\uffe7\034\uffe7\037\uffe7\040\uffe7\041\uffe7\042\uffe7\043" + - "\uffe7\044\uffe7\045\uffe7\046\uffe7\047\uffe7\050\uffe7\051\uffe7" + - "\052\uffe7\053\uffe7\054\uffe7\055\uffe7\056\uffe7\057\uffe7\060" + - "\uffe7\061\uffe7\062\uffe7\063\uffe7\064\uffe7\065\uffe7\066\uffe7" + - "\067\uffe7\070\uffe7\071\uffe7\072\uffe7\073\uffe7\074\uffe7\103" + - "\uffe7\105\uffe7\106\uffe7\107\uffe7\110\uffe7\111\uffe7\112\uffe7" + - "\001\002\000\144\003\152\004\uffe6\006\uffe6\010\uffe6\016" + - "\154\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6" + - "\034\uffe6\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044" + - "\uffe6\045\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6" + - "\053\uffe6\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061" + - "\uffe6\062\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6" + - "\070\uffe6\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105" + - "\uffe6\106\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002" + - "\000\146\003\152\004\uffe6\006\uffe6\010\uffe6\016\157\021" + - "\175\026\uffe6\027\uffe6\030\uffe6\031\uffe6\032\uffe6\033\uffe6" + - "\034\uffe6\037\uffe6\040\uffe6\041\uffe6\042\uffe6\043\uffe6\044" + - "\uffe6\045\uffe6\046\uffe6\047\uffe6\050\uffe6\051\uffe6\052\uffe6" + - "\053\uffe6\054\uffe6\055\uffe6\056\uffe6\057\uffe6\060\uffe6\061" + - "\uffe6\062\uffe6\063\uffe6\064\uffe6\065\uffe6\066\uffe6\067\uffe6" + - "\070\uffe6\071\uffe6\072\uffe6\073\uffe6\074\uffe6\103\uffe6\105" + - "\uffe6\106\uffe6\107\uffe6\110\uffe6\111\uffe6\112\uffe6\001\002" + - "\000\150\002\ufff4\003\ufff4\004\ufff4\006\ufff4\010\ufff4\016" + - "\ufff4\021\ufff4\026\ufff4\027\ufff4\030\ufff4\031\ufff4\032\ufff4" + - "\033\ufff4\034\ufff4\037\ufff4\040\ufff4\041\ufff4\042\ufff4\043" + - "\ufff4\044\ufff4\045\ufff4\046\ufff4\047\ufff4\050\ufff4\051\ufff4" + - "\052\ufff4\053\ufff4\054\ufff4\055\ufff4\056\ufff4\057\ufff4\060" + - "\ufff4\061\ufff4\062\ufff4\063\ufff4\064\ufff4\065\ufff4\066\ufff4" + - "\067\ufff4\070\ufff4\071\ufff4\072\ufff4\073\ufff4\074\ufff4\103" + - "\ufff4\105\ufff4\106\ufff4\107\ufff4\110\ufff4\111\ufff4\112\ufff4" + - "\001\002\000\004\075\216\001\002\000\134\004\066\010" + - "\064\026\056\027\043\030\072\031\060\032\076\033\023" + - "\037\061\040\033\041\021\042\074\043\063\044\062\045" + - "\073\046\071\047\036\050\050\051\101\052\053\053\052" + - "\054\047\055\055\056\054\057\044\060\042\061\067\062" + - "\040\063\102\064\032\065\051\066\031\067\034\070\020" + - "\071\075\072\100\073\025\074\026\103\037\105\070\106" + - "\041\107\035\110\022\111\077\112\024\001\002\000\134" + - "\004\uffe2\010\uffe2\026\uffe2\027\uffe2\030\uffe2\031\uffe2\032" + - "\uffe2\033\uffe2\037\uffe2\040\uffe2\041\uffe2\042\uffe2\043\uffe2" + - "\044\uffe2\045\uffe2\046\uffe2\047\uffe2\050\uffe2\051\uffe2\052" + - "\uffe2\053\uffe2\054\uffe2\055\uffe2\056\uffe2\057\uffe2\060\uffe2" + - "\061\uffe2\062\uffe2\063\uffe2\064\uffe2\065\uffe2\066\uffe2\067" + - "\uffe2\070\uffe2\071\uffe2\072\uffe2\073\uffe2\074\uffe2\103\uffe2" + - "\105\uffe2\106\uffe2\107\uffe2\110\uffe2\111\uffe2\112\uffe2\001" + - "\002\000\014\007\210\025\205\035\202\036\204\103\104" + - "\001\002\000\150\002\uffe8\003\uffe8\004\uffe8\006\uffe8\010" + - "\uffe8\016\uffe8\021\uffe8\026\uffe8\027\uffe8\030\uffe8\031\uffe8" + - "\032\uffe8\033\uffe8\034\uffe8\037\uffe8\040\uffe8\041\uffe8\042" + - "\uffe8\043\uffe8\044\uffe8\045\uffe8\046\uffe8\047\uffe8\050\uffe8" + - "\051\uffe8\052\uffe8\053\uffe8\054\uffe8\055\uffe8\056\uffe8\057" + - "\uffe8\060\uffe8\061\uffe8\062\uffe8\063\uffe8\064\uffe8\065\uffe8" + - "\066\uffe8\067\uffe8\070\uffe8\071\uffe8\072\uffe8\073\uffe8\074" + - "\uffe8\103\uffe8\105\uffe8\106\uffe8\107\uffe8\110\uffe8\111\uffe8" + - "\112\uffe8\001\002\000\150\002\uffe9\003\uffe9\004\uffe9\006" + - "\uffe9\010\uffe9\016\uffe9\021\uffe9\026\uffe9\027\uffe9\030\uffe9" + - "\031\uffe9\032\uffe9\033\uffe9\034\uffe9\037\uffe9\040\uffe9\041" + - "\uffe9\042\uffe9\043\uffe9\044\uffe9\045\uffe9\046\uffe9\047\uffe9" + - "\050\uffe9\051\uffe9\052\uffe9\053\uffe9\054\uffe9\055\uffe9\056" + - "\uffe9\057\uffe9\060\uffe9\061\uffe9\062\uffe9\063\uffe9\064\uffe9" + - "\065\uffe9\066\uffe9\067\uffe9\070\uffe9\071\uffe9\072\uffe9\073" + - "\uffe9\074\uffe9\103\uffe9\105\uffe9\106\uffe9\107\uffe9\110\uffe9" + - "\111\uffe9\112\uffe9\001\002\000\134\004\066\010\064\026" + - "\056\027\043\030\072\031\060\032\076\033\023\037\061" + - "\040\033\041\021\042\074\043\063\044\062\045\073\046" + - "\071\047\036\050\050\051\101\052\053\053\052\054\047" + - "\055\055\056\054\057\044\060\042\061\067\062\040\063" + - "\102\064\032\065\051\066\031\067\034\070\020\071\075" + - "\072\100\073\025\074\026\103\037\105\070\106\041\107" + - "\035\110\022\111\077\112\024\001\002\000\004\075\213" + - "\001\002\000\006\025\205\035\211\001\002\000\150\002" + - "\ufff2\003\ufff2\004\ufff2\006\ufff2\010\ufff2\016\ufff2\021\ufff2" + - "\026\ufff2\027\ufff2\030\ufff2\031\ufff2\032\ufff2\033\ufff2\034" + - "\ufff2\037\ufff2\040\ufff2\041\ufff2\042\ufff2\043\ufff2\044\ufff2" + - "\045\ufff2\046\ufff2\047\ufff2\050\ufff2\051\ufff2\052\ufff2\053" + - "\ufff2\054\ufff2\055\ufff2\056\ufff2\057\ufff2\060\ufff2\061\ufff2" + - "\062\ufff2\063\ufff2\064\ufff2\065\ufff2\066\ufff2\067\ufff2\070" + - "\ufff2\071\ufff2\072\ufff2\073\ufff2\074\ufff2\103\ufff2\105\ufff2" + - "\106\ufff2\107\ufff2\110\ufff2\111\ufff2\112\ufff2\001\002\000" + - "\006\025\uffed\035\uffed\001\002\000\150\002\ufff0\003\ufff0" + - "\004\ufff0\006\ufff0\010\ufff0\016\ufff0\021\ufff0\026\ufff0\027" + - "\ufff0\030\ufff0\031\ufff0\032\ufff0\033\ufff0\034\ufff0\037\ufff0" + - "\040\ufff0\041\ufff0\042\ufff0\043\ufff0\044\ufff0\045\ufff0\046" + - "\ufff0\047\ufff0\050\ufff0\051\ufff0\052\ufff0\053\ufff0\054\ufff0" + - "\055\ufff0\056\ufff0\057\ufff0\060\ufff0\061\ufff0\062\ufff0\063" + - "\ufff0\064\ufff0\065\ufff0\066\ufff0\067\ufff0\070\ufff0\071\ufff0" + - "\072\ufff0\073\ufff0\074\ufff0\103\ufff0\105\ufff0\106\ufff0\107" + - "\ufff0\110\ufff0\111\ufff0\112\ufff0\001\002\000\150\002\ufff1" + - "\003\ufff1\004\ufff1\006\ufff1\010\ufff1\016\ufff1\021\ufff1\026" + - "\ufff1\027\ufff1\030\ufff1\031\ufff1\032\ufff1\033\ufff1\034\ufff1" + - "\037\ufff1\040\ufff1\041\ufff1\042\ufff1\043\ufff1\044\ufff1\045" + - "\ufff1\046\ufff1\047\ufff1\050\ufff1\051\ufff1\052\ufff1\053\ufff1" + - "\054\ufff1\055\ufff1\056\ufff1\057\ufff1\060\ufff1\061\ufff1\062" + - "\ufff1\063\ufff1\064\ufff1\065\ufff1\066\ufff1\067\ufff1\070\ufff1" + - "\071\ufff1\072\ufff1\073\ufff1\074\ufff1\103\ufff1\105\ufff1\106" + - "\ufff1\107\ufff1\110\ufff1\111\ufff1\112\ufff1\001\002\000\150" + - "\002\uffea\003\uffea\004\uffea\006\uffea\010\uffea\016\uffea\021" + - "\uffea\026\uffea\027\uffea\030\uffea\031\uffea\032\uffea\033\uffea" + - "\034\uffea\037\uffea\040\uffea\041\uffea\042\uffea\043\uffea\044" + - "\uffea\045\uffea\046\uffea\047\uffea\050\uffea\051\uffea\052\uffea" + - "\053\uffea\054\uffea\055\uffea\056\uffea\057\uffea\060\uffea\061" + - "\uffea\062\uffea\063\uffea\064\uffea\065\uffea\066\uffea\067\uffea" + - "\070\uffea\071\uffea\072\uffea\073\uffea\074\uffea\103\uffea\105" + - "\uffea\106\uffea\107\uffea\110\uffea\111\uffea\112\uffea\001\002" + - "\000\012\007\215\025\uffec\035\uffec\103\104\001\002\000" + - "\006\025\uffeb\035\uffeb\001\002\000\150\002\uffef\003\uffef" + - "\004\uffef\006\uffef\010\uffef\016\uffef\021\uffef\026\uffef\027" + - "\uffef\030\uffef\031\uffef\032\uffef\033\uffef\034\uffef\037\uffef" + - "\040\uffef\041\uffef\042\uffef\043\uffef\044\uffef\045\uffef\046" + - "\uffef\047\uffef\050\uffef\051\uffef\052\uffef\053\uffef\054\uffef" + - "\055\uffef\056\uffef\057\uffef\060\uffef\061\uffef\062\uffef\063" + - "\uffef\064\uffef\065\uffef\066\uffef\067\uffef\070\uffef\071\uffef" + - "\072\uffef\073\uffef\074\uffef\103\uffef\105\uffef\106\uffef\107" + - "\uffef\110\uffef\111\uffef\112\uffef\001\002" }); - - /** Access to parse-action table. */ - public short[][] action_table() {return _action_table;} - - /** reduce_goto table. */ - protected static final short[][] _reduce_table = - unpackFromStrings(new String[] { - "\000\214\000\004\005\004\001\001\000\004\002\007\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\004\003\012\001\001\000\002\001\001\000\010\004" + - "\154\016\152\021\155\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\016\006" + - "\026\007\027\010\064\011\044\012\056\020\045\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\012\010\106\011\044\012" + - "\056\020\045\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\012\010\147\011" + - "\044\012\056\020\045\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\012\010\146\011\044\012" + - "\056\020\045\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\010\014\116\017\117\020\111\001\001\000\002\001\001" + - "\000\016\006\102\007\027\010\064\011\044\012\056\020" + - "\045\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\014\007\105\010\064\011\044\012\056" + - "\020\045\001\001\000\002\001\001\000\012\010\106\011" + - "\044\012\056\020\045\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\010\014" + - "\116\017\133\020\111\001\001\000\010\014\116\017\127" + - "\020\111\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\006\014\124\020\121\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\010\014\116\017\131\020\111" + - "\001\001\000\002\001\001\000\006\014\124\020\121\001" + - "\001\000\002\001\001\000\006\014\124\020\121\001\001" + - "\000\002\001\001\000\006\014\124\020\121\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\004\022\176\001\001\000\004\015\170" + - "\001\001\000\002\001\001\000\006\004\157\016\152\001" + - "\001\000\004\015\160\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\004\015\163\001\001\000" + - "\002\001\001\000\002\001\001\000\010\004\154\016\152" + - "\021\166\001\001\000\006\004\157\016\152\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\010" + - "\004\154\016\152\021\173\001\001\000\006\004\157\016" + - "\152\001\001\000\002\001\001\000\002\001\001\000\016" + - "\006\200\007\027\010\064\011\044\012\056\020\045\001" + - "\001\000\002\001\001\000\010\013\205\023\202\024\206" + - "\001\001\000\002\001\001\000\002\001\001\000\016\006" + - "\213\007\027\010\064\011\044\012\056\020\045\001\001" + - "\000\002\001\001\000\004\023\211\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001" }); - - /** Access to reduce_goto table. */ - public short[][] reduce_table() {return _reduce_table;} - - /** Instance of action encapsulation class. */ - protected CUP$LexParse$actions action_obj; - - /** Action encapsulation object initializer. */ - protected void init_actions() - { - action_obj = new CUP$LexParse$actions(this); - } - - /** Invoke a user supplied parse action. */ - public java_cup.runtime.Symbol do_action( - int act_num, - java_cup.runtime.lr_parser parser, - java.util.Stack stack, - int top) - throws java.lang.Exception - { - /* call code in generated class */ - return action_obj.CUP$LexParse$do_action(act_num, parser, stack, top); - } - - /** Indicates start state. */ - public int start_state() {return 0;} - /** Indicates start production. */ - public int start_production() {return 0;} - - /** EOF Symbol index. */ - public int EOF_sym() {return 0;} - - /** error Symbol index. */ - public int error_sym() {return 1;} - - - /** User initialization code. */ - public void user_init() throws java.lang.Exception - { - - action_obj.scanner = this.scanner; - - } - - - public LexScan scanner; - - public LexParse(LexScan scanner) { - super(scanner); - this.scanner = scanner; - } - - public CharClasses getCharClasses() { - return action_obj.charClasses; - } - - public EOFActions getEOFActions() { - return action_obj.eofActions; - } - - public void report_error(String message, Object info) { - if ( info instanceof java_cup.runtime.Symbol ) { - java_cup.runtime.Symbol s = (java_cup.runtime.Symbol) info; - - if (s.sym == sym.EOF) - Out.error(ErrorMessages.UNEXPECTED_EOF); - else - Out.error(scanner.file, ErrorMessages.SYNTAX_ERROR, s.left, s.right); - } - else - Out.error(ErrorMessages.UNKNOWN_SYNTAX); - } - - public void report_fatal_error(String message, Object info) { - // report_error(message, info); - throw new GeneratorException(); - } - - -} - -/** Cup generated class to encapsulate user supplied action code.*/ -class CUP$LexParse$actions { - - - - LexScan scanner; - CharClasses charClasses = new CharClasses(Options.jlex ? 127 : 0xFFFF); - RegExps regExps = new RegExps(); - Macros macros = new Macros(); - Integer stateNumber; - Timer t = new Timer(); - EOFActions eofActions = new EOFActions(); - - void fatalError(ErrorMessages message, int line, int col) { - syntaxError(message, line, col); - throw new GeneratorException(); - } - - void fatalError(ErrorMessages message) { - fatalError(message, scanner.currentLine(), -1); - throw new GeneratorException(); - } - - void syntaxError(ErrorMessages message) { - Out.error(scanner.file, message, scanner.currentLine(), -1); - } - - void syntaxError(ErrorMessages message, int line) { - Out.error(scanner.file, message, line, -1); - } - - void syntaxError(ErrorMessages message, int line, int col) { - Out.error(scanner.file, message, line, col); - } - - - private boolean check(int type, char c) { - switch (type) { - case sym.JLETTERCLASS: - return Character.isJavaIdentifierStart(c); - - case sym.JLETTERDIGITCLASS: - return Character.isJavaIdentifierPart(c); - - case sym.LETTERCLASS: - return Character.isLetter(c); - - case sym.DIGITCLASS: - return Character.isDigit(c); - - case sym.UPPERCLASS: - return Character.isUpperCase(c); - - case sym.LOWERCLASS: - return Character.isLowerCase(c); - - case sym.UNICODE_UNASSIGNED: - return Character.getType(c) == Character.UNASSIGNED; - - case sym.UNICODE_UPPERCASE_LETTER: - return Character.getType(c) == Character.UPPERCASE_LETTER; - - case sym.UNICODE_LOWERCASE_LETTER: - return Character.getType(c) == Character.LOWERCASE_LETTER; - - case sym.UNICODE_TITLECASE_LETTER: - return Character.getType(c) == Character.TITLECASE_LETTER; - - case sym.UNICODE_MODIFIER_LETTER: - return Character.getType(c) == Character.MODIFIER_LETTER; - - case sym.UNICODE_OTHER_LETTER: - return Character.getType(c) == Character.OTHER_LETTER; - - case sym.UNICODE_NON_SPACING_MARK: - return Character.getType(c) == Character.NON_SPACING_MARK; - - case sym.UNICODE_ENCLOSING_MARK: - return Character.getType(c) == Character.ENCLOSING_MARK; - - case sym.UNICODE_COMBINING_SPACING_MARK: - return Character.getType(c) == Character.COMBINING_SPACING_MARK; - - case sym.UNICODE_DECIMAL_DIGIT_NUMBER: - return Character.getType(c) == Character.DECIMAL_DIGIT_NUMBER; - - case sym.UNICODE_LETTER_NUMBER: - return Character.getType(c) == Character.LETTER_NUMBER; - - case sym.UNICODE_OTHER_NUMBER: - return Character.getType(c) == Character.OTHER_NUMBER; - - case sym.UNICODE_SPACE_SEPARATOR: - return Character.getType(c) == Character.SPACE_SEPARATOR; - - case sym.UNICODE_LINE_SEPARATOR: - return Character.getType(c) == Character.LINE_SEPARATOR; - - case sym.UNICODE_PARAGRAPH_SEPARATOR: - return Character.getType(c) == Character.PARAGRAPH_SEPARATOR; - - case sym.UNICODE_CONTROL: - return Character.getType(c) == Character.CONTROL; - - case sym.UNICODE_FORMAT: - return Character.getType(c) == Character.FORMAT; - - case sym.UNICODE_PRIVATE_USE: - return Character.getType(c) == Character.PRIVATE_USE; - - case sym.UNICODE_SURROGATE: - return Character.getType(c) == Character.SURROGATE; - - case sym.UNICODE_DASH_PUNCTUATION: - return Character.getType(c) == Character.DASH_PUNCTUATION; - - case sym.UNICODE_START_PUNCTUATION: - return Character.getType(c) == Character.START_PUNCTUATION; - - case sym.UNICODE_END_PUNCTUATION: - return Character.getType(c) == Character.END_PUNCTUATION; - - case sym.UNICODE_CONNECTOR_PUNCTUATION: - return Character.getType(c) == Character.CONNECTOR_PUNCTUATION; - - case sym.UNICODE_OTHER_PUNCTUATION: - return Character.getType(c) == Character.OTHER_PUNCTUATION; - - case sym.UNICODE_MATH_SYMBOL: - return Character.getType(c) == Character.MATH_SYMBOL; - - case sym.UNICODE_CURRENCY_SYMBOL: - return Character.getType(c) == Character.CURRENCY_SYMBOL; - - case sym.UNICODE_MODIFIER_SYMBOL: - return Character.getType(c) == Character.MODIFIER_SYMBOL; - - case sym.UNICODE_OTHER_SYMBOL: - return Character.getType(c) == Character.OTHER_SYMBOL; - - case sym.UNICODE_INITIAL_QUOTE_PUNCTUATION: - return Character.getType(c) == Character.INITIAL_QUOTE_PUNCTUATION; - - case sym.UNICODE_FINAL_QUOTE_PUNCTUATION: - return Character.getType(c) == Character.FINAL_QUOTE_PUNCTUATION; - - default: return false; - } - } - - private Vector makePreClass(int type) { - - Vector result = new Vector(); - - char c = 0; - char start = 0; - char last = charClasses.getMaxCharCode(); - - boolean prev, current; - - prev = check(type,'\u0000'); - - for (c = 1; c < last; c++) { - - current = check(type,c); - - if (!prev && current) start = c; - if (prev && !current) { - result.addElement(new Interval(start, (char)(c-1))); - } - - prev = current; - } - - // the last iteration is moved out of the loop to - // avoid an endless loop if last == maxCharCode and - // last+1 == 0 - current = check(type,c); - - if (!prev && current) result.addElement(new Interval(c,c)); - if (prev && current) result.addElement(new Interval(start, c)); - if (prev && !current) result.addElement(new Interval(start, (char)(c-1))); - - return result; - } - - private RegExp makeRepeat(RegExp r, int n1, int n2, int line, int col) { - - if (n1 <= 0 && n2 <= 0) { - syntaxError(ErrorMessages.REPEAT_ZERO, line, col); - return null; - } - - if (n1 > n2) { - syntaxError(ErrorMessages.REPEAT_GREATER, line, col); - return null; - } - - int i; - RegExp result; - - if (n1 > 0) { - result = r; - n1--; n2--; // we need one concatenation less than the number of expressions to match - } - else { - result = new RegExp1(sym.QUESTION,r); - n2--; - } - - for (i = 0; i < n1; i++) - result = new RegExp2(sym.CONCAT, result, r); - - n2-= n1; - for (i = 0; i < n2; i++) - result = new RegExp2(sym.CONCAT, result, new RegExp1(sym.QUESTION,r)); - - return result; - } - - private RegExp makeNL() { - Vector list = new Vector(); - list.addElement(new Interval('\n','\r')); - list.addElement(new Interval('\u0085','\u0085')); - list.addElement(new Interval('\u2028','\u2029')); - - // assumption: line feeds are caseless - charClasses.makeClass(list, false); - charClasses.makeClass('\n', false); - charClasses.makeClass('\r', false); - - RegExp1 c = new RegExp1(sym.CCLASS, list); - Character n = new Character('\n'); - Character r = new Character('\r'); - - return new RegExp2(sym.BAR, - c, - new RegExp2(sym.CONCAT, - new RegExp1(sym.CHAR, r), - new RegExp1(sym.CHAR, n))); - } - - - private final LexParse parser; - - /** Constructor */ - CUP$LexParse$actions(LexParse parser) { - this.parser = parser; - } - - /** Method with the actual generated action code. */ - public final java_cup.runtime.Symbol CUP$LexParse$do_action( - int CUP$LexParse$act_num, - java_cup.runtime.lr_parser CUP$LexParse$parser, - java.util.Stack CUP$LexParse$stack, - int CUP$LexParse$top) - throws java.lang.Exception - { - /* Symbol object for return from actions */ - java_cup.runtime.Symbol CUP$LexParse$result; - - /* select the action based on the action number */ - switch (CUP$LexParse$act_num) - { - /*. . . . . . . . . . . . . . . . . . . .*/ - case 104: // preclass ::= UNICODE_FINAL_QUOTE_PUNCTUATION - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_FINAL_QUOTE_PUNCTUATION); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 103: // preclass ::= UNICODE_INITIAL_QUOTE_PUNCTUATION - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_INITIAL_QUOTE_PUNCTUATION); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 102: // preclass ::= UNICODE_OTHER_SYMBOL - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_OTHER_SYMBOL); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 101: // preclass ::= UNICODE_MODIFIER_SYMBOL - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_MODIFIER_SYMBOL); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 100: // preclass ::= UNICODE_CURRENCY_SYMBOL - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_CURRENCY_SYMBOL); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 99: // preclass ::= UNICODE_MATH_SYMBOL - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_MATH_SYMBOL); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 98: // preclass ::= UNICODE_OTHER_PUNCTUATION - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_OTHER_PUNCTUATION); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 97: // preclass ::= UNICODE_CONNECTOR_PUNCTUATION - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_CONNECTOR_PUNCTUATION); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 96: // preclass ::= UNICODE_END_PUNCTUATION - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_END_PUNCTUATION); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 95: // preclass ::= UNICODE_START_PUNCTUATION - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_START_PUNCTUATION); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 94: // preclass ::= UNICODE_DASH_PUNCTUATION - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_DASH_PUNCTUATION); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 93: // preclass ::= UNICODE_SURROGATE - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_SURROGATE); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 92: // preclass ::= UNICODE_PRIVATE_USE - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_PRIVATE_USE); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 91: // preclass ::= UNICODE_FORMAT - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_FORMAT); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 90: // preclass ::= UNICODE_CONTROL - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_CONTROL); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 89: // preclass ::= UNICODE_PARAGRAPH_SEPARATOR - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_PARAGRAPH_SEPARATOR); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 88: // preclass ::= UNICODE_LINE_SEPARATOR - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_LINE_SEPARATOR); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 87: // preclass ::= UNICODE_SPACE_SEPARATOR - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_SPACE_SEPARATOR); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 86: // preclass ::= UNICODE_OTHER_NUMBER - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_OTHER_NUMBER); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 85: // preclass ::= UNICODE_LETTER_NUMBER - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_LETTER_NUMBER); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 84: // preclass ::= UNICODE_DECIMAL_DIGIT_NUMBER - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_DECIMAL_DIGIT_NUMBER); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 83: // preclass ::= UNICODE_COMBINING_SPACING_MARK - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_COMBINING_SPACING_MARK); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 82: // preclass ::= UNICODE_ENCLOSING_MARK - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_ENCLOSING_MARK); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 81: // preclass ::= UNICODE_NON_SPACING_MARK - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_NON_SPACING_MARK); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 80: // preclass ::= UNICODE_OTHER_LETTER - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_OTHER_LETTER); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 79: // preclass ::= UNICODE_MODIFIER_LETTER - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_MODIFIER_LETTER); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 78: // preclass ::= UNICODE_TITLECASE_LETTER - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_TITLECASE_LETTER); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 77: // preclass ::= UNICODE_LOWERCASE_LETTER - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_LOWERCASE_LETTER); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 76: // preclass ::= UNICODE_UPPERCASE_LETTER - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_UPPERCASE_LETTER); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 75: // preclass ::= UNICODE_UNASSIGNED - { - Vector RESULT =null; - RESULT = makePreClass(sym.UNICODE_UNASSIGNED); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 74: // preclass ::= LOWERCLASS - { - Vector RESULT =null; - RESULT = makePreClass(sym.LOWERCLASS); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 73: // preclass ::= UPPERCLASS - { - Vector RESULT =null; - RESULT = makePreClass(sym.UPPERCLASS); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 72: // preclass ::= DIGITCLASS - { - Vector RESULT =null; - RESULT = makePreClass(sym.DIGITCLASS); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 71: // preclass ::= LETTERCLASS - { - Vector RESULT =null; - RESULT = makePreClass(sym.LETTERCLASS); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 70: // preclass ::= JLETTERDIGITCLASS - { - Vector RESULT =null; - RESULT = makePreClass(sym.JLETTERDIGITCLASS); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 69: // preclass ::= JLETTERCLASS - { - Vector RESULT =null; - RESULT = makePreClass(sym.JLETTERCLASS); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 68: // classcontentelem ::= CHAR - { - Interval RESULT =null; - int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Interval(c.charValue(), c.charValue()); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",10, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 67: // classcontentelem ::= CHAR DASH CHAR - { - Interval RESULT =null; - int c1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int c1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - Character c1 = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int c2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int c2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Character c2 = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Interval(c1.charValue(), c2.charValue()); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",10, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 66: // classcontent ::= MACROUSE - { - Vector RESULT =null; - int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 65: // classcontent ::= classcontent MACROUSE - { - Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 64: // classcontent ::= STRING - { - Vector RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - RESULT = new Vector(); - for (int i = 0; i < s.length(); i++) - RESULT.addElement(new Interval(s.charAt(i),s.charAt(i))); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 63: // classcontent ::= classcontent STRING - { - Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - for (int i = 0; i < s.length(); i++) - list.addElement(new Interval(s.charAt(i),s.charAt(i))); - RESULT = list; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 62: // classcontent ::= preclass - { - Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = list; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 61: // classcontent ::= classcontent preclass - { - Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int plistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int plistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Vector plist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - for (Enumeration e = plist.elements(); e.hasMoreElements();) - list.addElement(e.nextElement()); - RESULT = list; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 60: // classcontent ::= classcontentelem - { - Vector RESULT =null; - int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Interval elem = (Interval)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - Vector list = new Vector(); - list.addElement(elem); - RESULT = list; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 59: // classcontent ::= classcontent classcontentelem - { - Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Interval elem = (Interval)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - list.addElement(elem); - RESULT = list; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 58: // charclass ::= OPENCLASS HAT DASH classcontent CLOSECLASS - { - RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - list.addElement(new Interval('-','-')); - charClasses.makeClassNot(list, Options.jlex && scanner.caseless); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASSNOT,list); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 57: // charclass ::= OPENCLASS DASH classcontent CLOSECLASS - { - RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - list.addElement(new Interval('-','-')); - charClasses.makeClass(list, Options.jlex && scanner.caseless); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASS,list); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 56: // charclass ::= OPENCLASS HAT classcontent CLOSECLASS - { - RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - charClasses.makeClassNot(list, Options.jlex && scanner.caseless); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASSNOT,list); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 55: // charclass ::= OPENCLASS HAT CLOSECLASS - { - RegExp RESULT =null; - int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - Vector list = new Vector(); - list.addElement(new Interval((char)0,CharClasses.maxChar)); - try { - charClasses.makeClass(list, false); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASS,list); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 54: // charclass ::= OPENCLASS classcontent CLOSECLASS - { - RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - charClasses.makeClass(list, Options.jlex && scanner.caseless); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright); - } - RESULT = new RegExp1(sym.CCLASS,list); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 53: // charclass ::= OPENCLASS CLOSECLASS - { - RegExp RESULT =null; - - RESULT = new RegExp1(sym.CCLASS,null); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 52: // regexp ::= CHAR - { - RegExp RESULT =null; - int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - if ( scanner.caseless ) { - charClasses.makeClass(c.charValue(), true); - RESULT = new RegExp1(sym.CHAR_I, c); - } - else { - charClasses.makeClass(c.charValue(), false); - RESULT = new RegExp1(sym.CHAR, c); - } - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CS2SMALL_CHAR, cleft, cright); - } - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 51: // regexp ::= POINT - { - RegExp RESULT =null; - - Vector any = new Vector(); - any.addElement(new Interval('\n','\n')); - // assumption: there is no upper case for \n - charClasses.makeClass('\n', false); - RESULT = new RegExp1(sym.CCLASSNOT, any); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 50: // regexp ::= STRING - { - RegExp RESULT =null; - int strleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int strright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - String str = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - if ( scanner.caseless ) { - charClasses.makeClass(str, true); - RESULT = new RegExp1(sym.STRING_I, str); - } - else { - charClasses.makeClass(str, false); - RESULT = new RegExp1(sym.STRING, str); - } - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CS2SMALL_STRING, strleft, strright); - } - - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 49: // regexp ::= preclass - { - RegExp RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - try { - // assumption [correct?]: preclasses are already closed under case - charClasses.makeClass(list, false); - } - catch (CharClassException e) { - syntaxError(ErrorMessages.CHARSET_2_SMALL, listleft); - } - RESULT = new RegExp1(sym.CCLASS, list); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 48: // regexp ::= charclass - { - RegExp RESULT =null; - int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp c = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = c; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 47: // regexp ::= MACROUSE - { - RegExp RESULT =null; - int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - if ( !scanner.macroDefinition ) { - if ( ! macros.markUsed(ident) ) - throw new ScannerException(scanner.file, ErrorMessages.MACRO_UNDECL, - identleft, identright); - } - RESULT = new RegExp1(sym.MACROUSE, ident); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 46: // regexp ::= OPENBRACKET series CLOSEBRACKET - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = r; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 45: // regexp ::= regexp REPEAT REPEAT RBRACE - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value; - int n1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int n1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - Integer n1 = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int n2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int n2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Integer n2 = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = makeRepeat(r, n1.intValue(), n2.intValue(), n1left, n2right); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 44: // regexp ::= regexp REPEAT RBRACE - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int nleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int nright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Integer n = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = makeRepeat(r, n.intValue(), n.intValue(), bleft, bright); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 43: // regexp ::= regexp QUESTION - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = new RegExp1(sym.QUESTION, r); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 42: // regexp ::= regexp PLUS - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = new RegExp1(sym.PLUS, r); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 41: // regexp ::= regexp STAR - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = new RegExp1(sym.STAR, r); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 40: // nregexp ::= TILDE nregexp - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new RegExp1(sym.TILDE, r); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 39: // nregexp ::= BANG nregexp - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new RegExp1(sym.BANG, r); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 38: // nregexp ::= regexp - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = r; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 37: // concs ::= nregexp - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = r; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("concs",5, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 36: // concs ::= concs nregexp - { - RegExp RESULT =null; - int r1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int r1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r1 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int r2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new RegExp2(sym.CONCAT, r1, r2); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("concs",5, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 35: // series ::= BAR - { - RegExp RESULT =null; - int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - syntaxError(ErrorMessages.REGEXP_EXPECTED, bleft, bright); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 34: // series ::= concs - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = r; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 33: // series ::= series BAR concs - { - RegExp RESULT =null; - int r1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int r1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - RegExp r1 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int r2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new RegExp2(sym.BAR, r1, r2); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 32: // hatOPT ::= - { - Boolean RESULT =null; - RESULT = new Boolean(false); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("hatOPT",16, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 31: // hatOPT ::= HAT - { - Boolean RESULT =null; - // assumption: there is no upper case for \n - charClasses.makeClass('\n', false); - RESULT = new Boolean(true); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("hatOPT",16, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 30: // states ::= IDENT COMMA - { - Vector RESULT =null; - int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object c = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - syntaxError(ErrorMessages.REGEXP_EXPECTED, cleft, cright+1); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 29: // states ::= IDENT - { - Vector RESULT =null; - int idleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int idright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - String id = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - Vector list = new Vector(); - stateNumber = scanner.states.getNumber( id ); - if ( stateNumber != null ) - list.addElement( stateNumber ); - else { - throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL, - idleft, idright); - } - RESULT = list; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 28: // states ::= IDENT COMMA states - { - Vector RESULT =null; - int idleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int idright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - String id = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - - stateNumber = scanner.states.getNumber( id ); - if ( stateNumber != null ) - list.addElement( stateNumber ); - else { - throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL, - idleft, idright); - } - RESULT = list; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 27: // statesOPT ::= - { - Vector RESULT =null; - RESULT = new Vector(); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("statesOPT",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 26: // statesOPT ::= LESSTHAN states MORETHAN - { - Vector RESULT =null; - int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = list; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("statesOPT",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 25: // actions ::= NOACTION - { - Action RESULT =null; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("actions",18, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 24: // actions ::= act - { - Action RESULT =null; - int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = a; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("actions",18, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 23: // act ::= REGEXPEND ACTION - { - Action RESULT =null; - int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = a; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("act",17, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 22: // lookahead ::= LOOKAHEAD series DOLLAR - { - RegExp RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp s = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = new RegExp2(sym.CONCAT, s, makeNL()); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 21: // lookahead ::= LOOKAHEAD series - { - RegExp RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = r; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 20: // lookahead ::= DOLLAR - { - RegExp RESULT =null; - RESULT = makeNL(); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 19: // rule ::= error - { - Integer RESULT =null; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 18: // rule ::= statesOPT EOFRULE ACTION - { - Integer RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Integer(regExps.insert(s, a)); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 17: // rule ::= statesOPT hatOPT series lookahead NOACTION - { - Integer RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right; - Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value; - int bolleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left; - int bolright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right; - Boolean bol = (Boolean)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int lleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int lright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp l = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object a = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - syntaxError(ErrorMessages.LOOKAHEAD_NEEDS_ACTION, aleft, aright+1); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 16: // rule ::= statesOPT hatOPT series lookahead act - { - Integer RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right; - Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value; - int bolleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left; - int bolright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right; - Boolean bol = (Boolean)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int lleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int lright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp l = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, l)); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 15: // rule ::= statesOPT hatOPT series actions - { - Integer RESULT =null; - int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left; - int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right; - Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value; - int bolleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left; - int bolright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right; - Boolean bol = (Boolean)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, null)); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 14: // rules ::= rule - { - Vector RESULT =null; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - RESULT = new Vector(); RESULT.addElement(r); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 13: // rules ::= LESSTHAN states MORETHAN LBRACE rules RBRACE - { - Vector RESULT =null; - int statesleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left; - int statesright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right; - Vector states = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value; - int rlistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rlistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector rlist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - - Enumeration rs = rlist.elements(); - while ( rs.hasMoreElements() ) { - Integer elem = (Integer) rs.nextElement(); - // might be null for error case of "rule" - if (elem != null) { - regExps.addStates( elem.intValue(), states ); - } - } - RESULT = rlist; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-5)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 12: // rules ::= rules LESSTHAN states MORETHAN LBRACE rules RBRACE - { - Vector RESULT =null; - int rlist1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).left; - int rlist1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).right; - Vector rlist1 = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).value; - int statesleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left; - int statesright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right; - Vector states = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value; - int rlist2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rlist2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector rlist2 = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - - Enumeration rs = rlist2.elements(); - while ( rs.hasMoreElements() ) { - Integer elem = (Integer) rs.nextElement(); - // might be null for error case of "rule" - if (elem != null) { - regExps.addStates( elem.intValue(), states ); - } - rlist1.addElement( elem ); - } - RESULT = rlist1; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 11: // rules ::= rules rule - { - Vector RESULT =null; - int rlistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int rlistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - Vector rlist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - rlist.addElement(r); RESULT = rlist; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 10: // macro ::= IDENT EQUALS - { - Object RESULT =null; - int eleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left; - int eright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right; - Object e = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value; - syntaxError(ErrorMessages.REGEXP_EXPECTED, eleft, eright); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 9: // macro ::= IDENT EQUALS series REGEXPEND - { - Object RESULT =null; - int nameleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left; - int nameright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right; - String name = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value; - int definitionleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int definitionright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - RegExp definition = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - macros.insert(name, definition); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 8: // macro ::= UNICODE - { - Object RESULT =null; - charClasses.setMaxCharCode(0xFFFF); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 7: // macro ::= FULL - { - Object RESULT =null; - charClasses.setMaxCharCode(255); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 6: // macro ::= ASCII - { - Object RESULT =null; - charClasses.setMaxCharCode(127); - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 5: // macros ::= error - { - Object RESULT =null; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 4: // macros ::= macros macro - { - Object RESULT =null; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 3: // macros ::= - { - Object RESULT =null; - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 2: // specification ::= - { - NFA RESULT =null; - - fatalError(ErrorMessages.NO_LEX_SPEC); - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("specification",3, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 1: // specification ::= USERCODE macros DELIMITER rules - { - NFA RESULT =null; - - scanner.t.stop(); - - Out.checkErrors(); - - Out.time(ErrorMessages.PARSING_TOOK, t); - - macros.expand(); - Enumeration unused = macros.unused(); - while ( unused.hasMoreElements() ) { - Out.warning("Macro \""+unused.nextElement()+"\" has been declared but never used."); - } - - SemCheck.check(regExps, macros, scanner.file); - - regExps.checkActions(); - regExps.checkLookAheads(); - - Out.checkErrors(); - - if (Options.dump) charClasses.dump(); - - Out.print("Constructing NFA : "); - - t.start(); - int num = regExps.getNum(); - - RESULT = new NFA(charClasses.getNumClasses(), - scanner, regExps, macros, charClasses); - - eofActions.setNumLexStates(scanner.states.number()); - - for (int i = 0; i < num; i++) { - if (regExps.isEOF(i)) - eofActions.add( regExps.getStates(i), regExps.getAction(i) ); - else - RESULT.addRegExp(i); - } - - if (scanner.standalone) RESULT.addStandaloneRule(); - t.stop(); - - Out.time(""); - Out.time(ErrorMessages.NFA_TOOK, t); - - - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("specification",3, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - return CUP$LexParse$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 0: // $START ::= specification EOF - { - Object RESULT =null; - int start_valleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left; - int start_valright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right; - NFA start_val = (NFA)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value; - RESULT = start_val; - CUP$LexParse$result = parser.getSymbolFactory().newSymbol("$START",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT); - } - /* ACCEPT */ - CUP$LexParse$parser.done_parsing(); - return CUP$LexParse$result; - - /* . . . . . .*/ - default: - throw new Exception( - "Invalid action number found in internal parse table"); - - } - } -} - diff --git a/tools/lexer/jflex-1.4/src/JFlex/LexScan.flex b/tools/lexer/jflex-1.4/src/JFlex/LexScan.flex deleted file mode 100644 index d8f0e6e251d8..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/LexScan.flex +++ /dev/null @@ -1,613 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java_cup.runtime.Symbol; -import java.util.Vector; -import java.io.*; -import java.util.Stack; - -/** - * The lexer of JFlex. - * - * Generated by JFlex. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -%% - -%final -%public -%class LexScan -%implements sym, java_cup.runtime.Scanner -%function next_token - -%type Symbol -%unicode - -%column -%line - -%eofclose - -%state COMMENT, STATELIST, MACROS, REGEXPSTART -%state REGEXP, JAVA_CODE, STATES, STRING_CONTENT -%state CHARCLASS, COPY, REPEATEXP, EATWSPNL -%state CTOR_ARG - -%cupdebug - -%{ - int balance = 0; - int commentbalance = 0; - int action_line = 0; - int bufferSize = 16384; - - File file; - Stack files = new Stack(); - - StringBuffer userCode = new StringBuffer(); - - String classCode; - String initCode; - String initThrow; - String eofCode; - String eofThrow; - String lexThrow; - String eofVal; - String scanErrorException; - String cupSymbol = "sym"; - - StringBuffer actionText = new StringBuffer(); - StringBuffer string = new StringBuffer(); - - boolean charCount; - boolean lineCount; - boolean columnCount; - boolean cupCompatible; - boolean cupDebug; - boolean isInteger; - boolean isIntWrap; - boolean isYYEOF; - boolean notUnix; - boolean isPublic; - boolean isFinal; - boolean isAbstract; - boolean bolUsed; - boolean standalone; - boolean debugOption; - boolean useRowMap = Options.gen_method == Options.PACK || Options.gen_method == Options.TABLE; - boolean packed = Options.gen_method == Options.PACK; - boolean caseless; - boolean inclusive_states; - boolean eofclose; - boolean emitInputStreamCtor = Options.emitInputStreamCtor; - - String isImplementing; - String isExtending; - String className = "Yylex"; - String functionName; - String tokenType; - String visibility = "public"; - - Vector /* String */ ctorArgs = new Vector(); - Vector /* String */ ctorTypes = new Vector(); - - LexicalStates states = new LexicalStates(); - - Vector actions = new Vector(); - - private int nextState; - - boolean macroDefinition; - - Timer t = new Timer(); - - public int currentLine() { - return yyline; - } - - public void setFile(File file) { - this.file = file; - } - - private Symbol symbol(int type, Object value) { - return new Symbol(type, yyline, yycolumn, value); - } - - private Symbol symbol(int type) { - return new Symbol(type, yyline, yycolumn); - } - - // updates line and column count to the beginning of the first - // non whitespace character in yytext, but leaves yyline+yycolumn - // untouched - private Symbol symbol_countUpdate(int type, Object value) { - int lc = yyline; - int cc = yycolumn; - String text = yytext(); - - for (int i=0; i < text.length(); i++) { - char c = text.charAt(i); - - if (c != '\n' && c != '\r' && c != ' ' && c != '\t' ) - return new Symbol(type, lc, cc, value); - - if (c == '\n') { - lc++; - cc = 0; - } - else - cc++; - } - - return new Symbol(type, yyline, yycolumn, value); - } - - private String makeMacroIdent() { - String matched = yytext().trim(); - return matched.substring(1, matched.length()-1).trim(); - } - - public static String conc(Object a, Object b) { - if (a == null && b == null) return null; - if (a == null) return b.toString(); - if (b == null) return a.toString(); - - return a.toString()+b.toString(); - } - - public static String concExc(Object a, Object b) { - if (a == null && b == null) return null; - if (a == null) return b.toString(); - if (b == null) return a.toString(); - - return a.toString()+", "+b.toString(); - } -%} - -%init{ - states.insert("YYINITIAL", true); -%init} - - -Digit = [0-9] -HexDigit = [0-9a-fA-F] -OctDigit = [0-7] - -Number = {Digit}+ -HexNumber = \\ x {HexDigit} {2} -Unicode = \\ u {HexDigit} {1, 4} -OctNumber = \\ [0-3]? {OctDigit} {1, 2} - -// see http://www.unicode.org/unicode/reports/tr18/ -WSP = [ \t\b] -WSPNL = [\u2028\u2029\u000A\u000B\u000C\u000D\u0085\t\b\ ] -NL = [\u2028\u2029\u000A\u000B\u000C\u000D\u0085] | \u000D\u000A -NNL = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085] - -Ident = {IdentStart} {IdentPart}* -QualIdent = {Ident} ( {WSP}* "." {WSP}* {Ident} )* -QUIL = {QualIdent} ( {WSP}* "," {WSP}* {QualIdent} )* -Array = "[" {WSP}* "]" -ParamPart = {IdentStart}|{IdentPart}|"<"|">"|","|{WSP}|"&"|"?"|"." -GenParam = "<" {ParamPart}+ ">" -ClassT = {Ident} ({WSP}* {GenParam})? -QClassT = {QualIdent} ({WSP}* {GenParam})? -ArrType = ({GenParam} {WSP}*)? {QClassT} ({WSP}* {Array})* - -IdentStart = [:jletter:] -IdentPart = [:jletterdigit:] - -JFlexCommentChar = [^*/]|"/"+[^*/]|"*"+[^*/] -JFlexComment = {JFlexCommentChar}* - -/* Java comments */ -JavaComment = {TraditionalComment}|{EndOfLineComment} -TraditionalComment = "/*"{CommentContent}\*+"/" -EndOfLineComment = "//".*{NL} - -CommentContent = ([^*]|\*+[^*/])* - -StringCharacter = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\"\\] - -CharLiteral = \'([^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\'\\]|{EscapeSequence})\' -StringLiteral = \"({StringCharacter}|{EscapeSequence})*\" - -EscapeSequence = \\[^\u2028\u2029\u000A\u000B\u000C\u000D\u0085]|\\+u{HexDigit}{4}|\\[0-3]?{OctDigit}{1,2} - -/* \\(b|t|n|f|r|\"|\'|\\|[0-3]?{OctDigit}{1,2}|u{HexDigit}{4}) */ - -JavaRest = [^\{\}\"\'/]|"/"[^*/] -JavaCode = ({JavaRest}|{StringLiteral}|{CharLiteral}|{JavaComment})+ - -%% - - { - "%%".*{NL}? { - t.start(); - yybegin(MACROS); - macroDefinition = true; - return symbol(USERCODE,userCode); - } - .*{NL} { userCode.append(yytext()); } - .* { return symbol(EOF); } -} - - ("%{"|"%init{"|"%initthrow{"|"%eof{"|"%eofthrow{"|"%yylexthrow{"|"%eofval{").*{NL} - { string.setLength(0); yybegin(COPY); } - { - "%}".*{NL} { classCode = conc(classCode,string); yybegin(MACROS); } - "%init}".*{NL} { initCode = conc(initCode,string); yybegin(MACROS); } - "%initthrow}".*{NL} { initThrow = concExc(initThrow,string); yybegin(MACROS); } - "%eof}".*{NL} { eofCode = conc(eofCode,string); yybegin(MACROS); } - "%eofthrow}".*{NL} { eofThrow = concExc(eofThrow,string); yybegin(MACROS); } - "%yylexthrow}".*{NL} { lexThrow = concExc(lexThrow,string); yybegin(MACROS); } - "%eofval}".*{NL} { eofVal = string.toString(); yybegin(MACROS); } - - .*{NL} { string.append(yytext()); } - - <> { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } -} - - - ^"%s" ("tate" "s"?)? {WSP}+ { inclusive_states = true; yybegin(STATELIST); } - ^"%x" ("state" "s"?)? {WSP}+ { inclusive_states = false; yybegin(STATELIST); } - { - {Ident} { states.insert(yytext(),inclusive_states); } - ([\ \t]*","[\ \t]*)|([\ \t]+) { } - {NL} { yybegin(MACROS); } - <> { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } -} - - { - "%char" { charCount = true; } - "%line" { lineCount = true; } - "%column" { columnCount = true; } - "%byaccj" { isInteger = true; - if (eofVal == null) - eofVal = "return 0;"; - eofclose = true; - } - "%cup" { cupCompatible = true; - isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner"); - if (functionName == null) - functionName = "next_token"; - if (tokenType == null) - tokenType = "java_cup.runtime.Symbol"; - if (eofVal == null) - eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);"; - if (!Options.jlex) eofclose = true; - } - "%cupsym"{WSP}+{QualIdent} {WSP}* { cupSymbol = yytext().substring(8).trim(); - if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline); } - "%cupsym"{WSP}+{NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline); } - "%cupdebug" { cupDebug = true; } - "%eofclose"({WSP}+"true")? { eofclose = true; } - "%eofclose"({WSP}+"false") { eofclose = false; } - "%class"{WSP}+{ClassT} {WSP}* { className = yytext().substring(7).trim(); } - "%ctorarg"{WSP}+{ArrType}{WSP}+ { yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim()); } - "%function"{WSP}+{Ident} {WSP}* { functionName = yytext().substring(10).trim(); } - "%type"{WSP}+{ArrType} {WSP}* { tokenType = yytext().substring(6).trim(); } - "%integer"|"%int" { isInteger = true; } - "%intwrap" { isIntWrap = true; } - "%yyeof" { isYYEOF = true; } - "%notunix" { notUnix = true; } - "%7bit" { return symbol(ASCII); } - "%full"|"%8bit" { return symbol(FULL); } - "%unicode"|"%16bit" { return symbol(UNICODE); } - "%caseless"|"%ignorecase" { caseless = true; } - "%implements"{WSP}+.* { isImplementing = concExc(isImplementing, yytext().substring(12).trim()); } - "%extends"{WSP}+{QClassT}{WSP}* { isExtending = yytext().substring(9).trim(); } - "%public" { isPublic = true; } - "%apiprivate" { visibility = "private"; Skeleton.makePrivate(); } - "%final" { isFinal = true; } - "%abstract" { isAbstract = true; } - "%debug" { debugOption = true; } - "%standalone" { standalone = true; isInteger = true; } - "%switch" { packed = false; useRowMap = false; } - "%table" { packed = false; useRowMap = true; } - "%pack" { packed = true; useRowMap = true; } - "%include" {WSP}+ .* { File f = new File(yytext().substring(9).trim()); - if ( !f.canRead() ) - throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); - // check for cycle - if (files.search(f) > 0) - throw new ScannerException(file,ErrorMessages.FILE_CYCLE, yyline); - try { - yypushStream( new FileReader(f) ); - files.push(file); - file = f; - Out.println("Including \""+file+"\""); - } - catch (FileNotFoundException e) { - throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); - } - } - "%buffer" {WSP}+ {Number} {WSP}* { bufferSize = Integer.parseInt(yytext().substring(8).trim()); } - "%buffer" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline); } - "%initthrow" {WSP}+ {QUIL} {WSP}* { initThrow = concExc(initThrow,yytext().substring(11).trim()); } - "%initthrow" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline); } - "%eofthrow" {WSP}+ {QUIL} {WSP}* { eofThrow = concExc(eofThrow,yytext().substring(10).trim()); } - "%eofthrow" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline); } - "%yylexthrow"{WSP}+ {QUIL} {WSP}* { lexThrow = concExc(lexThrow,yytext().substring(12).trim()); } - "%throws" {WSP}+ {QUIL} {WSP}* { lexThrow = concExc(lexThrow,yytext().substring(8).trim()); } - "%yylexthrow"{WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline); } - "%throws" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline); } - "%scanerror" {WSP}+ {QualIdent} {WSP}* { scanErrorException = yytext().substring(11).trim(); } - "%scanerror" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline); } - - {Ident} { return symbol(IDENT, yytext()); } - "="{WSP}* { yybegin(REGEXP); return symbol(EQUALS); } - - "/*" { nextState = MACROS; yybegin(COMMENT); } - - {EndOfLineComment} { } - - /* no {NL} at the end of this expression, because - needs at least one {WSPNL} to start a regular expression! */ - ^"%%" {NNL}* { macroDefinition = false; yybegin(REGEXPSTART); return symbol(DELIMITER); } - "%"{Ident} { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } - "%" { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } - ^{WSP}+"%" { Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1); } - - {WSP}+ { } - {NL}+ { } - <> { if ( yymoreStreams() ) { - file = (File) files.pop(); - yypopStream(); - } - else - throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); - } -} - - { - {Ident} {WSP}* { yybegin(MACROS); ctorArgs.add(yytext().trim()); } - [^] { throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn); } -} - - { - {WSPNL}* "/*" { nextState = REGEXPSTART; yybegin(COMMENT); } - {WSPNL}+ { yybegin(REGEXP); } - {WSPNL}* "<" { yybegin(STATES); return symbol_countUpdate(LESSTHAN, null); } - {WSPNL}* "}" { return symbol_countUpdate(RBRACE, null); } - {WSPNL}* "//" {NNL}* { } - {WSPNL}* "<>" {WSPNL}* "{" - { actionText.setLength(0); yybegin(JAVA_CODE); - Symbol s = symbol_countUpdate(EOFRULE, null); - action_line = s.left+1; - return s; - } -} - - { - {Ident} { return symbol(IDENT, yytext()); } - "," { return symbol(COMMA); } - {WSPNL}+ { } - - // "{" will be caught in REGEXP - ">"{WSPNL}* { yybegin(REGEXP); return symbol(MORETHAN); } - - <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STATES); } -} - - - { - "<>" {WSPNL}+ "{" { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE); } - "<>" { throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION); } - - {WSPNL}*"|"{WSP}*$ { if (macroDefinition) { - yybegin(EATWSPNL); - return symbol(BAR); - } - else { - yybegin(REGEXPSTART); - return symbol(NOACTION); - } - } - - // stategroup - "{" { yybegin(REGEXPSTART); return symbol(LBRACE); } - - {WSPNL}*"|" { return symbol(BAR); } - - {WSPNL}*\" { string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT); } - {WSPNL}*"!" { return symbol(BANG); } - {WSPNL}*"~" { return symbol(TILDE); } - {WSPNL}*"(" { return symbol(OPENBRACKET); } - {WSPNL}*")" { return symbol(CLOSEBRACKET); } - {WSPNL}*"*" { return symbol(STAR); } - {WSPNL}*"+" { return symbol(PLUS); } - {WSPNL}*"?" { return symbol(QUESTION); } - {WSPNL}*"$" { return symbol(DOLLAR); } - {WSPNL}*"^" { bolUsed = true; return symbol(HAT); } - {WSPNL}*"." { return symbol(POINT); } - {WSPNL}*"[" { yybegin(CHARCLASS); return symbol(OPENCLASS); } - {WSPNL}*"/" { return symbol(LOOKAHEAD); } - - {WSPNL}* "{" {WSP}* {Ident} {WSP}* "}" { return symbol_countUpdate(MACROUSE, makeMacroIdent()); } - {WSPNL}* "{" {WSP}* {Number} { yybegin(REPEATEXP); return symbol(REPEAT, new Integer(yytext().trim().substring(1).trim())); } - - {WSPNL}+ "{" { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND); } - {NL} { if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND); } - - {WSPNL}*"/*" { nextState = REGEXP; yybegin(COMMENT); } - - {WSPNL}*"//"{NNL}* { } - - {WSP}+ { } - - { - {WSPNL}*"[:jletter:]" { return symbol(JLETTERCLASS); } - {WSPNL}*"[:jletterdigit:]" { return symbol(JLETTERDIGITCLASS); } - {WSPNL}*"[:letter:]" { return symbol(LETTERCLASS); } - {WSPNL}*"[:digit:]" { return symbol(DIGITCLASS); } - {WSPNL}*"[:uppercase:]" { return symbol(UPPERCLASS); } - {WSPNL}*"[:lowercase:]" { return symbol(LOWERCLASS); } - {WSPNL}*"[:unicode_unassigned:]" { return symbol(UNICODE_UNASSIGNED); } - {WSPNL}*"[:unicode_uppercase_letter:]" { return symbol(UNICODE_UPPERCASE_LETTER); } - {WSPNL}*"[:unicode_lowercase_letter:]" { return symbol(UNICODE_LOWERCASE_LETTER); } - {WSPNL}*"[:unicode_titlecase_letter:]" { return symbol(UNICODE_TITLECASE_LETTER); } - {WSPNL}*"[:unicode_modifier_letter:]" { return symbol(UNICODE_MODIFIER_LETTER); } - {WSPNL}*"[:unicode_other_letter:]" { return symbol(UNICODE_OTHER_LETTER); } - {WSPNL}*"[:unicode_non_spacing_mark:]" { return symbol(UNICODE_NON_SPACING_MARK); } - {WSPNL}*"[:unicode_enclosing_mark:]" { return symbol(UNICODE_ENCLOSING_MARK); } - {WSPNL}*"[:unicode_combining_spacing_mark:]" { return symbol(UNICODE_COMBINING_SPACING_MARK); } - {WSPNL}*"[:unicode_decimal_digit_number:]" { return symbol(UNICODE_DECIMAL_DIGIT_NUMBER); } - {WSPNL}*"[:unicode_letter_number:]" { return symbol(UNICODE_LETTER_NUMBER); } - {WSPNL}*"[:unicode_other_number:]" { return symbol(UNICODE_OTHER_NUMBER); } - {WSPNL}*"[:unicode_space_separator:]" { return symbol(UNICODE_SPACE_SEPARATOR); } - {WSPNL}*"[:unicode_line_separator:]" { return symbol(UNICODE_LINE_SEPARATOR); } - {WSPNL}*"[:unicode_paragraph_separator:]" { return symbol(UNICODE_PARAGRAPH_SEPARATOR); } - {WSPNL}*"[:unicode_control:]" { return symbol(UNICODE_CONTROL); } - {WSPNL}*"[:unicode_format:]" { return symbol(UNICODE_FORMAT); } - {WSPNL}*"[:unicode_private_use:]" { return symbol(UNICODE_PRIVATE_USE); } - {WSPNL}*"[:unicode_surrogate:]" { return symbol(UNICODE_SURROGATE); } - {WSPNL}*"[:unicode_dash_punctuation:]" { return symbol(UNICODE_DASH_PUNCTUATION); } - {WSPNL}*"[:unicode_start_punctuation:]" { return symbol(UNICODE_START_PUNCTUATION); } - {WSPNL}*"[:unicode_end_punctuation:]" { return symbol(UNICODE_END_PUNCTUATION); } - {WSPNL}*"[:unicode_connector_punctuation:]" { return symbol(UNICODE_CONNECTOR_PUNCTUATION); } - {WSPNL}*"[:unicode_other_punctuation:]" { return symbol(UNICODE_OTHER_PUNCTUATION); } - {WSPNL}*"[:unicode_math_symbol:]" { return symbol(UNICODE_MATH_SYMBOL); } - {WSPNL}*"[:unicode_currency_symbol:]" { return symbol(UNICODE_CURRENCY_SYMBOL); } - {WSPNL}*"[:unicode_modifier_symbol:]" { return symbol(UNICODE_MODIFIER_SYMBOL); } - {WSPNL}*"[:unicode_other_symbol:]" { return symbol(UNICODE_OTHER_SYMBOL); } - {WSPNL}*"[:unicode_initial_quote_punctuation:]" { return symbol(UNICODE_INITIAL_QUOTE_PUNCTUATION); } - {WSPNL}*"[:unicode_final_quote_punctuation:]" { return symbol(UNICODE_FINAL_QUOTE_PUNCTUATION); } - } - - . { return symbol(CHAR, new Character(yytext().charAt(0))); } -} - - {WSPNL}+ { yybegin(REGEXP); } - - - { - "}" { yybegin(REGEXP); return symbol(RBRACE); } - "," {WSP}* {Number} { return symbol(REPEAT, new Integer(yytext().substring(1).trim())); } - {WSP}+ { } - - <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } -} - - { - "{"{Ident}"}" { return symbol(MACROUSE, yytext().substring(1,yytext().length()-1)); } - "[" { balance++; return symbol(OPENCLASS); } - "]" { if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS); } - "^" { return symbol(HAT); } - "-" { return symbol(DASH); } - - // this is a hack to keep JLex compatibilty with char class - // expressions like [+-] - "-]" { yypushback(1); yycolumn--; return symbol(CHAR, new Character(yytext().charAt(0))); } - - \" { string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT); } - - . { return symbol(CHAR, new Character(yytext().charAt(0))); } - - \n { throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn); } - - <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } -} - - { - \" { yybegin(nextState); return symbol(STRING, string.toString()); } - \\\" { string.append('\"'); } - [^\"\\\u2028\u2029\u000A\u000B\u000C\u000D\u0085]+ { string.append(yytext()); } - - {NL} { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); } - - {HexNumber} { string.append( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16)); } - {Unicode} { string.append( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16)); } - {OctNumber} { string.append( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8)); } - - \\b { string.append('\b'); } - \\n { string.append('\n'); } - \\t { string.append('\t'); } - \\f { string.append('\f'); } - \\r { string.append('\r'); } - - \\. { string.append(yytext().charAt(1)); } - - <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); } -} - - - { - {HexNumber} { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16))); } - {Unicode} { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16))); } - {OctNumber} { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8))); } - - \\b { return symbol(CHAR,new Character('\b')); } - \\n { return symbol(CHAR,new Character('\n')); } - \\t { return symbol(CHAR,new Character('\t')); } - \\f { return symbol(CHAR,new Character('\f')); } - \\r { return symbol(CHAR,new Character('\r')); } - - \\. { return symbol(CHAR, new Character(yytext().charAt(1))); } -} - - - { - "{" { balance++; actionText.append('{'); } - "}" { if (balance > 0) { - balance--; - actionText.append('}'); - } - else { - yybegin(REGEXPSTART); - Action a = new Action(actionText.toString(), action_line); - actions.addElement(a); - return symbol(ACTION, a); - } - } - - {JavaCode} { actionText.append(yytext()); } - - <> { throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1); } -} - - { - - "/"+ "*" { commentbalance++; } - "*"+ "/" { if (commentbalance > 0) - commentbalance--; - else - yybegin(nextState); - } - - {JFlexComment} { /* ignore */ } - - <> { throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT); } -} - - -. { throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn); } -\n { throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn); } - -<> { if ( yymoreStreams() ) { - file = (File) files.pop(); - yypopStream(); - } - else - return symbol(EOF); } diff --git a/tools/lexer/jflex-1.4/src/JFlex/LexScan.java b/tools/lexer/jflex-1.4/src/JFlex/LexScan.java deleted file mode 100644 index 92f7ce38550c..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/LexScan.java +++ /dev/null @@ -1,3404 +0,0 @@ -/* The following code was generated by JFlex 1.4.3 on 12/1/09 8:12 AM */ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java_cup.runtime.Symbol; -import java.util.Vector; -import java.io.*; -import java.util.Stack; - -/** - * The lexer of JFlex. - * - * Generated by JFlex. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ - -public final class LexScan implements sym, java_cup.runtime.Scanner { - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; - - /** lexical states */ - public static final int STRING_CONTENT = 16; - public static final int REGEXPSTART = 8; - public static final int MACROS = 6; - public static final int STATELIST = 4; - public static final int CTOR_ARG = 26; - public static final int EATWSPNL = 24; - public static final int CHARCLASS = 18; - public static final int JAVA_CODE = 12; - public static final int REGEXP = 10; - public static final int YYINITIAL = 0; - public static final int REPEATEXP = 22; - public static final int COMMENT = 2; - public static final int STATES = 14; - public static final int COPY = 20; - - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14 - }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\10\25\1\26\1\10\1\13\2\11\1\12\16\25\4\0\1\10\1\76"+ - "\1\32\1\0\1\103\1\35\1\22\1\33\1\100\1\101\1\30\1\102"+ - "\1\15\1\110\1\14\1\31\1\7\1\66\2\7\2\3\1\67\1\64"+ - "\1\65\1\1\1\105\1\0\1\20\1\71\1\21\1\23\1\0\4\2"+ - "\1\72\1\74\10\24\1\73\13\24\1\16\1\4\1\17\1\104\1\106"+ - "\1\0\1\53\1\57\1\55\1\62\1\46\1\47\1\63\1\42\1\37"+ - "\1\60\1\70\1\51\1\56\1\40\1\44\1\61\1\107\1\43\1\54"+ - "\1\41\1\6\1\52\1\45\1\5\1\50\1\24\1\36\1\75\1\34"+ - "\1\77\6\25\1\27\32\25\2\0\4\24\4\0\1\24\2\0\1\25"+ - "\7\0\1\24\4\0\1\24\5\0\27\24\1\0\37\24\1\0\u013f\24"+ - "\31\0\162\24\4\0\14\24\16\0\5\24\11\0\1\24\21\0\130\25"+ - "\5\0\23\25\12\0\1\24\13\0\1\24\1\0\3\24\1\0\1\24"+ - "\1\0\24\24\1\0\54\24\1\0\46\24\1\0\5\24\4\0\202\24"+ - "\1\0\4\25\3\0\105\24\1\0\46\24\2\0\2\24\6\0\20\24"+ - "\41\0\46\24\2\0\1\24\7\0\47\24\11\0\21\25\1\0\27\25"+ - "\1\0\3\25\1\0\1\25\1\0\2\25\1\0\1\25\13\0\33\24"+ - "\5\0\3\24\15\0\4\25\14\0\6\25\13\0\32\24\5\0\13\24"+ - "\16\25\7\0\12\25\4\0\2\24\1\25\143\24\1\0\1\24\10\25"+ - "\1\0\6\25\2\24\2\25\1\0\4\25\2\24\12\25\3\24\2\0"+ - "\1\24\17\0\1\25\1\24\1\25\36\24\33\25\2\0\3\24\60\0"+ - "\46\24\13\25\1\24\u014f\0\3\25\66\24\2\0\1\25\1\24\20\25"+ - "\2\0\1\24\4\25\3\0\12\24\2\25\2\0\12\25\21\0\3\25"+ - "\1\0\10\24\2\0\2\24\2\0\26\24\1\0\7\24\1\0\1\24"+ - "\3\0\4\24\2\0\1\25\1\24\7\25\2\0\2\25\2\0\3\25"+ - "\11\0\1\25\4\0\2\24\1\0\3\24\2\25\2\0\12\25\4\24"+ - "\15\0\3\25\1\0\6\24\4\0\2\24\2\0\26\24\1\0\7\24"+ - "\1\0\2\24\1\0\2\24\1\0\2\24\2\0\1\25\1\0\5\25"+ - "\4\0\2\25\2\0\3\25\13\0\4\24\1\0\1\24\7\0\14\25"+ - "\3\24\14\0\3\25\1\0\11\24\1\0\3\24\1\0\26\24\1\0"+ - "\7\24\1\0\2\24\1\0\5\24\2\0\1\25\1\24\10\25\1\0"+ - "\3\25\1\0\3\25\2\0\1\24\17\0\2\24\2\25\2\0\12\25"+ - "\1\0\1\24\17\0\3\25\1\0\10\24\2\0\2\24\2\0\26\24"+ - "\1\0\7\24\1\0\2\24\1\0\5\24\2\0\1\25\1\24\6\25"+ - "\3\0\2\25\2\0\3\25\10\0\2\25\4\0\2\24\1\0\3\24"+ - "\4\0\12\25\1\0\1\24\20\0\1\25\1\24\1\0\6\24\3\0"+ - "\3\24\1\0\4\24\3\0\2\24\1\0\1\24\1\0\2\24\3\0"+ - "\2\24\3\0\3\24\3\0\10\24\1\0\3\24\4\0\5\25\3\0"+ - "\3\25\1\0\4\25\11\0\1\25\17\0\11\25\11\0\1\24\7\0"+ - "\3\25\1\0\10\24\1\0\3\24\1\0\27\24\1\0\12\24\1\0"+ - "\5\24\4\0\7\25\1\0\3\25\1\0\4\25\7\0\2\25\11\0"+ - "\2\24\4\0\12\25\22\0\2\25\1\0\10\24\1\0\3\24\1\0"+ - "\27\24\1\0\12\24\1\0\5\24\2\0\1\25\1\24\7\25\1\0"+ - "\3\25\1\0\4\25\7\0\2\25\7\0\1\24\1\0\2\24\4\0"+ - "\12\25\22\0\2\25\1\0\10\24\1\0\3\24\1\0\27\24\1\0"+ - "\20\24\4\0\6\25\2\0\3\25\1\0\4\25\11\0\1\25\10\0"+ - "\2\24\4\0\12\25\22\0\2\25\1\0\22\24\3\0\30\24\1\0"+ - "\11\24\1\0\1\24\2\0\7\24\3\0\1\25\4\0\6\25\1\0"+ - "\1\25\1\0\10\25\22\0\2\25\15\0\60\24\1\25\2\24\7\25"+ - "\4\0\10\24\10\25\1\0\12\25\47\0\2\24\1\0\1\24\2\0"+ - "\2\24\1\0\1\24\2\0\1\24\6\0\4\24\1\0\7\24\1\0"+ - "\3\24\1\0\1\24\1\0\1\24\2\0\2\24\1\0\4\24\1\25"+ - "\2\24\6\25\1\0\2\25\1\24\2\0\5\24\1\0\1\24\1\0"+ - "\6\25\2\0\12\25\2\0\2\24\42\0\1\24\27\0\2\25\6\0"+ - "\12\25\13\0\1\25\1\0\1\25\1\0\1\25\4\0\2\25\10\24"+ - "\1\0\42\24\6\0\24\25\1\0\2\25\4\24\4\0\10\25\1\0"+ - "\44\25\11\0\1\25\71\0\42\24\1\0\5\24\1\0\2\24\1\0"+ - "\7\25\3\0\4\25\6\0\12\25\6\0\6\24\4\25\106\0\46\24"+ - "\12\0\51\24\7\0\132\24\5\0\104\24\5\0\122\24\6\0\7\24"+ - "\1\0\77\24\1\0\1\24\1\0\4\24\2\0\7\24\1\0\1\24"+ - "\1\0\4\24\2\0\47\24\1\0\1\24\1\0\4\24\2\0\37\24"+ - "\1\0\1\24\1\0\4\24\2\0\7\24\1\0\1\24\1\0\4\24"+ - "\2\0\7\24\1\0\7\24\1\0\27\24\1\0\37\24\1\0\1\24"+ - "\1\0\4\24\2\0\7\24\1\0\47\24\1\0\23\24\16\0\11\25"+ - "\56\0\125\24\14\0\u026c\24\2\0\10\24\12\0\32\24\5\0\113\24"+ - "\3\0\3\24\17\0\15\24\1\0\4\24\3\25\13\0\22\24\3\25"+ - "\13\0\22\24\2\25\14\0\15\24\1\0\3\24\1\0\2\25\14\0"+ - "\64\24\40\25\3\0\1\24\3\0\2\24\1\25\2\0\12\25\41\0"+ - "\3\25\2\0\12\25\6\0\130\24\10\0\51\24\1\25\126\0\35\24"+ - "\3\0\14\25\4\0\14\25\12\0\12\25\36\24\2\0\5\24\u038b\0"+ - "\154\24\224\0\234\24\4\0\132\24\6\0\26\24\2\0\6\24\2\0"+ - "\46\24\2\0\6\24\2\0\10\24\1\0\1\24\1\0\1\24\1\0"+ - "\1\24\1\0\37\24\2\0\65\24\1\0\7\24\1\0\1\24\3\0"+ - "\3\24\1\0\7\24\3\0\4\24\2\0\6\24\4\0\15\24\5\0"+ - "\3\24\1\0\7\24\17\0\4\25\30\0\2\11\5\25\20\0\2\24"+ - "\23\0\1\24\13\0\4\25\6\0\6\25\1\0\1\24\15\0\1\24"+ - "\40\0\22\24\36\0\15\25\4\0\1\25\3\0\6\25\27\0\1\24"+ - "\4\0\1\24\2\0\12\24\1\0\1\24\3\0\5\24\6\0\1\24"+ - "\1\0\1\24\1\0\1\24\1\0\4\24\1\0\3\24\1\0\7\24"+ - "\3\0\3\24\5\0\5\24\26\0\44\24\u0e81\0\3\24\31\0\11\24"+ - "\6\25\1\0\5\24\2\0\5\24\4\0\126\24\2\0\2\25\2\0"+ - "\3\24\1\0\137\24\5\0\50\24\4\0\136\24\21\0\30\24\70\0"+ - "\20\24\u0200\0\u19b6\24\112\0\u51a6\24\132\0\u048d\24\u0773\0\u2ba4\24\u215c\0"+ - "\u012e\24\2\0\73\24\225\0\7\24\14\0\5\24\5\0\1\24\1\25"+ - "\12\24\1\0\15\24\1\0\5\24\1\0\1\24\1\0\2\24\1\0"+ - "\2\24\1\0\154\24\41\0\u016b\24\22\0\100\24\2\0\66\24\50\0"+ - "\15\24\3\0\20\25\20\0\4\25\17\0\2\24\30\0\3\24\31\0"+ - "\1\24\6\0\5\24\1\0\207\24\2\0\1\25\4\0\1\24\13\0"+ - "\12\25\7\0\32\24\4\0\1\24\1\0\32\24\12\0\132\24\3\0"+ - "\6\24\2\0\6\24\2\0\6\24\2\0\3\24\3\0\2\24\3\0"+ - "\2\24\22\0\3\25\4\0"; - - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\1\1\1\2\15\0\1\1\2\3\1\1\1\2\3\4"+ - "\1\5\1\6\2\7\1\6\1\10\2\6\1\4\1\11"+ - "\1\12\1\6\1\11\1\13\1\14\1\4\1\15\2\16"+ - "\1\6\2\17\1\20\1\21\1\16\1\22\1\23\1\24"+ - "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ - "\1\35\1\36\1\37\3\4\1\40\1\41\1\6\1\42"+ - "\1\43\1\44\1\4\2\45\1\46\1\16\1\47\1\50"+ - "\1\51\1\52\1\16\1\53\1\54\1\4\2\44\1\4"+ - "\1\55\1\4\1\56\1\13\1\57\1\60\1\61\3\0"+ - "\1\62\1\63\1\0\1\64\1\0\2\11\1\0\15\11"+ - "\3\0\1\65\1\11\1\66\1\11\2\0\1\67\1\6"+ - "\1\70\1\71\2\70\1\71\1\72\1\73\1\74\1\75"+ - "\1\76\1\0\1\77\2\0\1\100\1\101\3\0\2\102"+ - "\10\0\1\103\1\104\2\103\1\104\1\105\1\106\1\107"+ - "\1\110\1\111\1\112\3\0\1\113\5\0\1\114\1\0"+ - "\1\60\1\61\2\6\1\11\2\115\35\11\3\0\2\116"+ - "\1\11\2\117\1\11\1\0\1\71\1\0\1\120\6\0"+ - "\1\121\1\122\1\0\1\37\4\0\1\104\1\0\1\123"+ - "\1\124\2\125\3\0\2\11\1\126\24\11\1\127\12\11"+ - "\3\0\2\11\1\0\2\120\15\0\2\123\3\0\20\11"+ - "\1\130\3\11\1\131\10\11\1\132\6\11\1\133\1\11"+ - "\1\134\1\130\1\0\2\11\1\0\1\120\14\0\1\123"+ - "\5\0\11\11\1\0\1\11\1\135\5\11\1\136\1\137"+ - "\17\11\1\140\1\141\2\11\10\0\2\37\10\0\2\142"+ - "\3\0\11\11\1\143\1\0\11\11\1\144\4\11\1\145"+ - "\1\0\3\11\1\146\1\147\2\11\7\0\1\150\1\37"+ - "\3\0\1\37\6\0\2\151\4\0\1\141\1\11\1\152"+ - "\1\126\3\11\1\153\2\154\1\143\4\0\11\11\2\155"+ - "\2\11\1\156\1\11\2\157\1\11\1\160\7\0\1\37"+ - "\6\0\1\37\13\0\1\11\1\161\2\11\1\154\1\162"+ - "\1\154\1\143\3\0\2\11\1\163\2\11\1\164\3\11"+ - "\1\155\1\165\1\155\1\166\1\0\1\11\1\156\1\0"+ - "\1\167\1\157\2\170\1\157\5\0\1\171\1\172\2\37"+ - "\4\0\2\37\7\0\2\173\1\0\3\11\2\162\2\143"+ - "\1\174\2\175\1\0\1\11\1\0\5\11\2\165\2\0"+ - "\1\11\1\0\2\170\3\0\1\176\2\0\1\37\2\0"+ - "\2\37\4\0\1\37\2\0\2\37\7\0\2\177\1\11"+ - "\1\162\1\0\1\143\1\0\1\174\1\0\1\175\1\200"+ - "\1\175\2\0\2\11\1\201\1\11\1\202\1\203\2\204"+ - "\1\165\1\0\1\205\3\0\1\205\1\0\1\205\1\156"+ - "\20\0\1\206\1\0\4\37\3\0\4\37\3\0\2\207"+ - "\1\0\1\177\1\210\1\177\1\211\3\0\2\200\2\0"+ - "\2\11\1\201\2\212\1\204\1\213\1\204\41\0\3\37"+ - "\5\0\3\37\1\0\2\214\1\0\2\210\2\143\1\174"+ - "\1\200\3\0\2\11\1\212\1\215\1\212\2\213\1\205"+ - "\33\0\1\216\1\217\4\0\1\37\3\0\1\37\2\220"+ - "\1\210\1\0\1\143\1\163\1\0\1\163\1\11\2\215"+ - "\1\213\1\0\2\205\1\0\1\205\35\0\1\37\2\0"+ - "\1\37\2\221\1\215\74\0\1\222\3\205\51\0\1\223"+ - "\44\0\1\224\62\0\1\225\14\0\1\226\57\0\1\227"+ - "\1\230\7\0\1\231\1\232\1\233\33\0\1\234\17\0"+ - "\1\235\2\0\1\236\20\0\1\237\3\0\1\240\1\241"+ - "\2\0\1\242\1\243\3\0\1\244\1\0\1\245\1\246"+ - "\2\0\1\247\5\0\1\250\1\0\1\251\1\0\1\252"+ - "\16\0\1\253\5\0\1\254\2\0\1\255\3\0\1\256"+ - "\1\0\1\257\1\0\1\260"; - - private static int [] zzUnpackAction() { - int [] result = new int[1299]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); - } - return j; - } - - - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\111\0\222\0\333\0\u0124\0\u016d\0\u01b6\0\u01ff"+ - "\0\u0248\0\u0291\0\u02da\0\u0323\0\u036c\0\u03b5\0\u03fe\0\u0447"+ - "\0\u0447\0\u0490\0\u04d9\0\u0522\0\u056b\0\u05b4\0\u0490\0\u05fd"+ - "\0\u0646\0\u0490\0\u068f\0\u06d8\0\u0721\0\u076a\0\u07b3\0\u07fc"+ - "\0\u0845\0\u088e\0\u08d7\0\u0920\0\u0969\0\u09b2\0\u09fb\0\u0490"+ - "\0\u0490\0\u0a44\0\u0a8d\0\u0ad6\0\u0b1f\0\u0490\0\u0b68\0\u0bb1"+ - "\0\u0490\0\u0490\0\u0bfa\0\u0490\0\u0c43\0\u0c8c\0\u0490\0\u0490"+ - "\0\u0490\0\u0490\0\u0490\0\u0490\0\u0490\0\u0cd5\0\u0d1e\0\u0d67"+ - "\0\u0db0\0\u0490\0\u0490\0\u0df9\0\u0490\0\u0e42\0\u0e8b\0\u0ed4"+ - "\0\u0490\0\u0f1d\0\u0490\0\u0f66\0\u0f66\0\u0b68\0\u0490\0\u0490"+ - "\0\u0faf\0\u0490\0\u0ff8\0\u1041\0\u1041\0\u0490\0\u108a\0\u0490"+ - "\0\u10d3\0\u0490\0\u111c\0\u0490\0\u1165\0\u11ae\0\u11f7\0\u1240"+ - "\0\u056b\0\u0490\0\u0490\0\u05b4\0\u0490\0\u1289\0\u12d2\0\u131b"+ - "\0\u1364\0\u13ad\0\u13f6\0\u143f\0\u1488\0\u14d1\0\u151a\0\u1563"+ - "\0\u15ac\0\u15f5\0\u163e\0\u1687\0\u16d0\0\u1719\0\u1762\0\u17ab"+ - "\0\u17f4\0\u0490\0\u183d\0\u1886\0\u18cf\0\u09fb\0\u1918\0\u0490"+ - "\0\u1961\0\u0490\0\u19aa\0\u19f3\0\u1a3c\0\u1a85\0\u0490\0\u0490"+ - "\0\u0490\0\u0490\0\u0490\0\u0ad6\0\u0c43\0\u1ace\0\u1b17\0\u0490"+ - "\0\u1b60\0\u1ba9\0\u0c43\0\u0c8c\0\u0490\0\u1bf2\0\u0d1e\0\u0d67"+ - "\0\u0db0\0\u1c3b\0\u1c84\0\u1ccd\0\u1d16\0\u1d5f\0\u0490\0\u1da8"+ - "\0\u1df1\0\u1e3a\0\u1e83\0\u0490\0\u0490\0\u0490\0\u0490\0\u0490"+ - "\0\u0490\0\u0f66\0\u0b68\0\u1ecc\0\u0490\0\u1041\0\u1f15\0\u1f5e"+ - "\0\u1fa7\0\u1ff0\0\u2039\0\u10d3\0\u2082\0\u0490\0\u1289\0\u0490"+ - "\0\u20cb\0\u1364\0\u0490\0\u2114\0\u215d\0\u21a6\0\u21ef\0\u2238"+ - "\0\u2281\0\u22ca\0\u2313\0\u235c\0\u23a5\0\u23ee\0\u2437\0\u2480"+ - "\0\u24c9\0\u2512\0\u255b\0\u25a4\0\u25ed\0\u2636\0\u267f\0\u26c8"+ - "\0\u2711\0\u275a\0\u27a3\0\u27ec\0\u2835\0\u287e\0\u28c7\0\u2910"+ - "\0\u2959\0\u29a2\0\u29eb\0\u2a34\0\u2a7d\0\u2ac6\0\u2b0f\0\u2b58"+ - "\0\u2ba1\0\u2bea\0\u0490\0\u2c33\0\u2c7c\0\u2cc5\0\u2d0e\0\u2d57"+ - "\0\u2da0\0\u2de9\0\u2e32\0\u0490\0\u0490\0\u2e7b\0\u2ec4\0\u2f0d"+ - "\0\u2f56\0\u2f9f\0\u2fe8\0\u0490\0\u3031\0\u307a\0\u0490\0\u1f15"+ - "\0\u0490\0\u30c3\0\u310c\0\u3155\0\u319e\0\u31e7\0\u3230\0\u3279"+ - "\0\u32c2\0\u330b\0\u3354\0\u339d\0\u33e6\0\u342f\0\u3478\0\u34c1"+ - "\0\u350a\0\u3553\0\u359c\0\u35e5\0\u362e\0\u3677\0\u36c0\0\u3709"+ - "\0\u3752\0\u379b\0\u37e4\0\u382d\0\u3876\0\u38bf\0\u3908\0\u3951"+ - "\0\u399a\0\u39e3\0\u3a2c\0\u3a75\0\u3abe\0\u3b07\0\u3b50\0\u3b99"+ - "\0\u3be2\0\u3c2b\0\u3c74\0\u3cbd\0\u0490\0\u3d06\0\u3d4f\0\u3d98"+ - "\0\u3de1\0\u3e2a\0\u3e73\0\u3ebc\0\u3f05\0\u3f4e\0\u3f97\0\u3fe0"+ - "\0\u4029\0\u4072\0\u40bb\0\u0490\0\u4104\0\u414d\0\u4196\0\u41df"+ - "\0\u4228\0\u4271\0\u42ba\0\u4303\0\u434c\0\u4395\0\u43de\0\u4427"+ - "\0\u4470\0\u44b9\0\u4502\0\u454b\0\u4594\0\u45dd\0\u4626\0\u466f"+ - "\0\u12d2\0\u46b8\0\u4701\0\u474a\0\u12d2\0\u4793\0\u47dc\0\u4825"+ - "\0\u486e\0\u48b7\0\u4900\0\u4949\0\u4992\0\u12d2\0\u49db\0\u4a24"+ - "\0\u4a6d\0\u4ab6\0\u4aff\0\u4b48\0\u12d2\0\u4b91\0\u0490\0\u0490"+ - "\0\u4bda\0\u4c23\0\u4c6c\0\u4cb5\0\u2c33\0\u4cfe\0\u4d47\0\u4d90"+ - "\0\u4dd9\0\u4e22\0\u4e6b\0\u4eb4\0\u4efd\0\u4f46\0\u4f8f\0\u4fd8"+ - "\0\u5021\0\u3031\0\u506a\0\u50b3\0\u50fc\0\u5145\0\u518e\0\u51d7"+ - "\0\u5220\0\u5269\0\u52b2\0\u52fb\0\u5344\0\u538d\0\u53d6\0\u541f"+ - "\0\u5468\0\u54b1\0\u12d2\0\u54fa\0\u5543\0\u558c\0\u55d5\0\u561e"+ - "\0\u12d2\0\u12d2\0\u5667\0\u56b0\0\u56f9\0\u5742\0\u578b\0\u57d4"+ - "\0\u581d\0\u5866\0\u58af\0\u58f8\0\u5941\0\u598a\0\u59d3\0\u5a1c"+ - "\0\u5a65\0\u12d2\0\u0490\0\u5aae\0\u5af7\0\u5b40\0\u5b89\0\u5bd2"+ - "\0\u5c1b\0\u5c64\0\u5cad\0\u5cf6\0\u5d3f\0\u5d88\0\u5dd1\0\u5e1a"+ - "\0\u5e63\0\u5eac\0\u5ef5\0\u5f3e\0\u5f87\0\u5fd0\0\u6019\0\u50b3"+ - "\0\u0490\0\u6062\0\u60ab\0\u60f4\0\u613d\0\u6186\0\u61cf\0\u6218"+ - "\0\u6261\0\u62aa\0\u62f3\0\u633c\0\u6385\0\u63ce\0\u6417\0\u6460"+ - "\0\u64a9\0\u64f2\0\u653b\0\u6584\0\u65cd\0\u6616\0\u665f\0\u66a8"+ - "\0\u12d2\0\u66f1\0\u673a\0\u6783\0\u67cc\0\u12d2\0\u6815\0\u685e"+ - "\0\u68a7\0\u68f0\0\u12d2\0\u12d2\0\u6939\0\u2b58\0\u6982\0\u69cb"+ - "\0\u6a14\0\u6a5d\0\u6aa6\0\u6aef\0\u6b38\0\u6b81\0\u6bca\0\u6c13"+ - "\0\u6c5c\0\u6ca5\0\u6cee\0\u6d37\0\u6d80\0\u6dc9\0\u6e12\0\u6e5b"+ - "\0\u6ea4\0\u5fd0\0\u0490\0\u6eed\0\u6f36\0\u6f7f\0\u6fc8\0\u12d2"+ - "\0\u7011\0\u12d2\0\u12d2\0\u705a\0\u70a3\0\u70ec\0\u12d2\0\u7135"+ - "\0\u717e\0\u71c7\0\u7210\0\u7259\0\u72a2\0\u72eb\0\u7334\0\u737d"+ - "\0\u73c6\0\u740f\0\u7458\0\u74a1\0\u74ea\0\u7533\0\u757c\0\u75c5"+ - "\0\u760e\0\u7657\0\u76a0\0\u76e9\0\u7732\0\u777b\0\u77c4\0\u2a7d"+ - "\0\u0490\0\u780d\0\u7856\0\u789f\0\u78e8\0\u7931\0\u797a\0\u79c3"+ - "\0\u7a0c\0\u7a55\0\u7a9e\0\u7ae7\0\u7b30\0\u7b79\0\u7bc2\0\u7c0b"+ - "\0\u7c54\0\u7c9d\0\u7ce6\0\u7d2f\0\u7d78\0\u7dc1\0\u7e0a\0\u7e53"+ - "\0\u7e9c\0\u7ee5\0\u7f2e\0\u7f77\0\u7fc0\0\u8009\0\u8052\0\u809b"+ - "\0\u80e4\0\u812d\0\u8176\0\u81bf\0\u8208\0\u8251\0\u829a\0\u82e3"+ - "\0\u832c\0\u8375\0\u83be\0\u12d2\0\u8407\0\u8450\0\u8499\0\u84e2"+ - "\0\u852b\0\u8574\0\u12d2\0\u85bd\0\u8606\0\u864f\0\u8698\0\u12d2"+ - "\0\u86e1\0\u872a\0\u8773\0\u87bc\0\u8805\0\u884e\0\u8897\0\u88e0"+ - "\0\u8929\0\u0490\0\u0490\0\u8972\0\u89bb\0\u8a04\0\u8a4d\0\u8a96"+ - "\0\u8adf\0\u8b28\0\u8b71\0\u8bba\0\u8c03\0\u8c4c\0\u8c95\0\u8cde"+ - "\0\u8d27\0\u8d70\0\u7ee5\0\u0490\0\u8db9\0\u8e02\0\u8e4b\0\u8e94"+ - "\0\u8edd\0\u8f26\0\u8f6f\0\u8fb8\0\u9001\0\u904a\0\u9093\0\u90dc"+ - "\0\u9125\0\u916e\0\u91b7\0\u9200\0\u9249\0\u9292\0\u92db\0\u9324"+ - "\0\u936d\0\u93b6\0\u93ff\0\u9448\0\u9491\0\u94da\0\u9523\0\u956c"+ - "\0\u95b5\0\u95fe\0\u0490\0\u9647\0\u9690\0\u96d9\0\u9722\0\u976b"+ - "\0\u97b4\0\u97fd\0\u9846\0\u988f\0\u98d8\0\u9921\0\u996a\0\u99b3"+ - "\0\u99fc\0\u9a45\0\u9a8e\0\u9ad7\0\u9b20\0\u9b69\0\u9bb2\0\u9bfb"+ - "\0\u9c44\0\u9c8d\0\u9cd6\0\u9d1f\0\u9d68\0\u9db1\0\u9dfa\0\u9e43"+ - "\0\u9e8c\0\u9ed5\0\u9f1e\0\u9f67\0\u9fb0\0\u9ff9\0\ua042\0\ua08b"+ - "\0\ua0d4\0\ua11d\0\ua166\0\ua1af\0\u12d2\0\u12d2\0\ua1f8\0\ua241"+ - "\0\ua28a\0\ua2d3\0\ua31c\0\ua365\0\ua3ae\0\ua3f7\0\u93b6\0\ua440"+ - "\0\u9448\0\ua489\0\ua4d2\0\ua51b\0\ua564\0\ua5ad\0\ua5f6\0\ua63f"+ - "\0\ua688\0\ua6d1\0\ua71a\0\ua763\0\ua7ac\0\ua7f5\0\ua83e\0\ua887"+ - "\0\ua8d0\0\ua919\0\u0490\0\ua962\0\ua9ab\0\ua9f4\0\uaa3d\0\uaa86"+ - "\0\uaacf\0\uab18\0\uab61\0\uabaa\0\uabf3\0\uac3c\0\uac85\0\uacce"+ - "\0\uad17\0\uad60\0\u9c44\0\u0490\0\uada9\0\uadf2\0\uae3b\0\uae84"+ - "\0\uaecd\0\uaf16\0\uaf5f\0\uafa8\0\uaff1\0\ub03a\0\ub083\0\ub0cc"+ - "\0\ub115\0\ub15e\0\ub1a7\0\ub1f0\0\ub239\0\ub282\0\ub2cb\0\ub314"+ - "\0\ub35d\0\ub3a6\0\ub3ef\0\ub438\0\ub481\0\ub4ca\0\ub513\0\ub55c"+ - "\0\ub5a5\0\ub5ee\0\ub637\0\ub680\0\ub6c9\0\ub712\0\ub75b\0\ub7a4"+ - "\0\ub7ed\0\ub836\0\ub87f\0\ub8c8\0\ub911\0\ub95a\0\ub9a3\0\ub9ec"+ - "\0\uba35\0\uba7e\0\ubac7\0\ubb10\0\ubb59\0\ubba2\0\ubbeb\0\ubc34"+ - "\0\ubc7d\0\ubcc6\0\ubd0f\0\ubd58\0\ubda1\0\ubdea\0\ube33\0\ube7c"+ - "\0\ubec5\0\ubf0e\0\ubf57\0\ubfa0\0\ubfe9\0\uad60\0\u0490\0\uc032"+ - "\0\uc07b\0\uc0c4\0\uc10d\0\uc156\0\uc19f\0\uc1e8\0\uc231\0\uc27a"+ - "\0\uc2c3\0\uc30c\0\uc355\0\uc39e\0\uc3e7\0\uc430\0\uc479\0\uc4c2"+ - "\0\ub35d\0\uc50b\0\uc554\0\uc59d\0\uc5e6\0\uc62f\0\uc678\0\uc6c1"+ - "\0\uc70a\0\uc753\0\uc79c\0\uc7e5\0\uc82e\0\uc877\0\uc8c0\0\uc909"+ - "\0\uc952\0\uc99b\0\uc9e4\0\uca2d\0\uca76\0\ucabf\0\ucb08\0\ucb51"+ - "\0\ucb9a\0\ucbe3\0\ucc2c\0\ucc75\0\u0490\0\u0490\0\uccbe\0\ucd07"+ - "\0\ucd50\0\ucd99\0\ucde2\0\uce2b\0\uce74\0\ucebd\0\ucf06\0\uc032"+ - "\0\u0490\0\ucf4f\0\ucf98\0\ucfe1\0\u0490\0\ud02a\0\u12d2\0\ud073"+ - "\0\ud0bc\0\ud105\0\ud14e\0\ud197\0\uc50b\0\ud1e0\0\ud229\0\uc554"+ - "\0\ud272\0\ud2bb\0\ud304\0\ud34d\0\ud396\0\ud3df\0\ud428\0\ud471"+ - "\0\ud4ba\0\ud503\0\ud54c\0\ud595\0\ud5de\0\ud627\0\ud670\0\ud6b9"+ - "\0\ud702\0\ud74b\0\ud794\0\ud7dd\0\ud826\0\ud86f\0\ud8b8\0\ud901"+ - "\0\ud94a\0\ud993\0\ud9dc\0\uda25\0\uda6e\0\udab7\0\udb00\0\udb49"+ - "\0\udb92\0\u0490\0\u12d2\0\udbdb\0\udc24\0\udc6d\0\udcb6\0\udcff"+ - "\0\udd48\0\udd91\0\uddda\0\ude23\0\ude6c\0\udeb5\0\udefe\0\udf47"+ - "\0\udf90\0\udfd9\0\ue022\0\ue06b\0\ue0b4\0\ue0fd\0\ue146\0\ue18f"+ - "\0\ue1d8\0\ue221\0\ue26a\0\ue2b3\0\ue2fc\0\ue345\0\ue38e\0\ue3d7"+ - "\0\ue420\0\ue469\0\ue4b2\0\ue4fb\0\ue544\0\ue58d\0\ue5d6\0\ue61f"+ - "\0\ue668\0\ue6b1\0\ue6fa\0\ue743\0\ue78c\0\ue7d5\0\ue81e\0\ue867"+ - "\0\ue8b0\0\ue8f9\0\ue942\0\ue98b\0\ue9d4\0\uea1d\0\uea66\0\ueaaf"+ - "\0\ueaf8\0\ueb41\0\ueb8a\0\uebd3\0\uec1c\0\uec65\0\uecae\0\uecf7"+ - "\0\u0490\0\ue544\0\ued40\0\ue58d\0\ued89\0\uedd2\0\uee1b\0\uee64"+ - "\0\ueead\0\ueef6\0\uef3f\0\uef88\0\uefd1\0\uf01a\0\uf063\0\uf0ac"+ - "\0\uf0f5\0\uf13e\0\uf187\0\uf1d0\0\uf219\0\uf262\0\uf2ab\0\uf2f4"+ - "\0\uf33d\0\uf386\0\uf3cf\0\uf418\0\uf461\0\uf4aa\0\uf4f3\0\uf53c"+ - "\0\uf585\0\uf5ce\0\uf617\0\uf660\0\uf6a9\0\uf6f2\0\uf73b\0\uf784"+ - "\0\uf7cd\0\uf816\0\uf85f\0\uf8a8\0\uf8f1\0\u0490\0\uf93a\0\uf983"+ - "\0\uf9cc\0\ufa15\0\ufa5e\0\ufaa7\0\ufaf0\0\ufb39\0\ufb82\0\ufbcb"+ - "\0\ufc14\0\ufc5d\0\ufca6\0\ufcef\0\ufd38\0\ufd81\0\ufdca\0\ufe13"+ - "\0\ufe5c\0\ufea5\0\ufeee\0\uff37\0\uff80\0\uffc9\1\22\1\133"+ - "\1\244\1\355\1\u0136\1\u017f\1\u01c8\1\u0211\1\u025a\1\u02a3"+ - "\1\u02ec\1\u0335\0\u0490\1\u037e\1\u03c7\1\u0410\1\u0459\1\u04a2"+ - "\1\u04eb\1\u0534\1\u057d\1\u05c6\1\u060f\1\u0658\1\u06a1\1\u06ea"+ - "\1\u0733\1\u077c\1\u07c5\1\u080e\1\u0857\1\u08a0\1\u08e9\1\u0932"+ - "\1\u097b\1\u09c4\1\u0a0d\1\u0a56\1\u0a9f\1\u0ae8\1\u0b31\1\u0b7a"+ - "\1\u0bc3\1\u0c0c\1\u0c55\1\u0c9e\1\u0ce7\1\u0d30\1\u0d79\1\u0dc2"+ - "\1\u0e0b\1\u0e54\1\u0e9d\1\u0ee6\1\u0f2f\1\u0f78\1\u0fc1\1\u100a"+ - "\1\u1053\1\u109c\1\u10e5\1\u112e\1\u1177\0\u0490\1\u11c0\1\u1209"+ - "\1\u1252\1\u129b\1\u12e4\1\u132d\1\u1376\1\u13bf\1\u1408\1\u1451"+ - "\1\u149a\1\u14e3\0\u0490\1\u152c\1\u1575\1\u15be\1\u1607\1\u1650"+ - "\1\u1699\1\u16e2\1\u172b\1\u1774\1\u17bd\1\u1806\1\u184f\1\u1898"+ - "\1\u18e1\1\u192a\1\u1973\1\u19bc\1\u1a05\1\u1a4e\1\u1a97\1\u1ae0"+ - "\1\u1b29\1\u1b72\1\u1bbb\1\u1c04\1\u1c4d\1\u1c96\1\u1cdf\1\u1d28"+ - "\1\u1d71\1\u1dba\1\u1e03\1\u1e4c\1\u1e95\1\u1ede\1\u1f27\1\u1f70"+ - "\1\u1fb9\1\u2002\1\u204b\1\u2094\1\u20dd\1\u2126\1\u216f\1\u21b8"+ - "\1\u2201\1\u224a\0\u0490\0\u0490\1\u2293\1\u22dc\1\u2325\1\u236e"+ - "\1\u23b7\1\u2400\1\u2449\0\u0490\0\u0490\0\u0490\1\u2492\1\u24db"+ - "\1\u2524\1\u256d\1\u25b6\1\u25ff\1\u2648\1\u2691\1\u26da\1\u2723"+ - "\1\u276c\1\u27b5\1\u27fe\1\u2847\1\u2890\1\u28d9\1\u2922\1\u296b"+ - "\1\u29b4\1\u29fd\1\u2a46\1\u2a8f\1\u2ad8\1\u2b21\1\u2b6a\1\u2bb3"+ - "\1\u2bfc\0\u0490\1\u2c45\1\u2c8e\1\u2cd7\1\u2d20\1\u2d69\1\u2db2"+ - "\1\u2dfb\1\u2e44\1\u2e8d\1\u2ed6\1\u2f1f\1\u2f68\1\u2fb1\1\u2ffa"+ - "\1\u3043\0\u0490\1\u308c\1\u30d5\0\u0490\1\u311e\1\u3167\1\u31b0"+ - "\1\u31f9\1\u3242\1\u328b\1\u32d4\1\u331d\1\u3366\1\u33af\1\u33f8"+ - "\1\u3441\1\u348a\1\u34d3\1\u351c\1\u3565\0\u0490\1\u35ae\1\u35f7"+ - "\1\u3640\0\u0490\0\u0490\1\u3689\1\u36d2\0\u0490\0\u0490\1\u371b"+ - "\1\u3764\1\u37ad\0\u0490\1\u37f6\0\u0490\0\u0490\1\u383f\1\u3888"+ - "\0\u0490\1\u38d1\1\u391a\1\u3963\1\u39ac\1\u39f5\0\u0490\1\u3a3e"+ - "\0\u0490\1\u3a87\0\u0490\1\u3ad0\1\u3b19\1\u3b62\1\u3bab\1\u3bf4"+ - "\1\u3c3d\1\u3c86\1\u3ccf\1\u3d18\1\u3d61\1\u3daa\1\u3df3\1\u3e3c"+ - "\1\u3e85\0\u0490\1\u3ece\1\u3f17\1\u3f60\1\u3fa9\1\u3ff2\0\u0490"+ - "\1\u403b\1\u4084\0\u0490\1\u40cd\1\u4116\1\u415f\0\u0490\1\u41a8"+ - "\0\u0490\1\u41f1\0\u0490"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[1299]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\11\20\2\21\1\22\13\20\1\21\5\20\1\23\53\20"+ - "\30\24\1\25\1\26\57\24\2\27\1\30\2\27\2\30"+ - "\1\27\1\31\1\32\1\33\1\32\1\27\1\34\6\27"+ - "\1\30\2\27\1\32\7\27\25\30\4\27\1\30\1\27"+ - "\3\30\6\27\1\30\2\27\2\30\3\27\1\35\2\27"+ - "\2\35\1\27\1\36\3\37\10\27\1\35\1\27\1\36"+ - "\1\37\1\27\1\40\3\27\1\41\1\27\25\35\4\27"+ - "\1\35\1\42\3\35\6\27\1\35\2\27\2\35\3\27"+ - "\1\35\2\27\2\35\1\27\1\43\3\37\10\27\1\35"+ - "\1\27\1\43\1\37\1\27\1\40\3\27\1\44\1\27"+ - "\25\35\4\27\1\35\1\42\3\35\6\27\1\35\2\27"+ - "\2\35\11\27\4\45\4\27\1\46\5\27\2\45\1\27"+ - "\1\47\2\27\1\50\54\27\4\51\1\52\3\51\1\53"+ - "\1\54\1\55\1\54\1\56\1\51\1\57\1\51\1\60"+ - "\2\51\1\61\2\51\1\53\1\54\1\62\1\63\1\64"+ - "\3\51\1\65\36\51\1\66\1\67\1\70\1\71\1\72"+ - "\1\73\1\74\1\75\4\51\31\76\1\77\1\100\1\101"+ - "\1\102\1\76\1\103\52\76\2\27\1\35\2\27\2\35"+ - "\1\27\4\104\1\27\1\105\3\27\1\106\2\27\1\35"+ - "\1\27\2\104\7\27\25\35\4\27\1\35\1\27\3\35"+ - "\6\27\1\35\2\27\2\35\1\27\4\107\1\110\4\107"+ - "\1\111\1\112\1\111\13\107\1\111\2\107\1\113\56\107"+ - "\4\51\1\52\3\51\3\114\1\115\2\51\1\116\1\117"+ - "\6\51\2\114\2\51\1\120\3\51\1\121\45\51\1\122"+ - "\3\51\1\123\11\124\2\125\1\126\13\124\1\125\5\124"+ - "\1\127\53\124\10\27\1\36\2\27\1\130\1\27\1\131"+ - "\10\27\1\36\5\27\1\132\64\27\4\133\12\27\2\133"+ - "\61\27\2\134\1\135\2\134\2\135\15\134\1\135\12\134"+ - "\25\135\4\134\1\135\1\134\3\135\6\134\1\135\2\134"+ - "\2\135\1\134\11\20\2\21\1\22\13\20\1\21\61\20"+ - "\111\0\11\20\2\21\1\22\13\20\1\21\5\20\1\136"+ - "\53\20\30\24\1\137\1\140\107\24\1\141\1\142\107\24"+ - "\1\143\1\144\57\24\1\0\3\30\1\0\3\30\14\0"+ - "\4\30\7\0\32\30\1\0\3\30\6\0\1\30\2\0"+ - "\2\30\11\0\1\31\4\0\1\34\106\0\1\32\105\0"+ - "\1\34\101\0\3\35\1\0\3\35\14\0\4\35\7\0"+ - "\32\35\1\0\3\35\6\0\1\35\2\0\2\35\11\0"+ - "\1\36\15\0\1\36\73\0\3\37\13\0\1\37\111\0"+ - "\1\145\1\146\61\0\1\147\2\0\1\147\1\150\15\0"+ - "\1\147\11\0\1\151\1\152\1\153\1\154\4\147\1\155"+ - "\1\156\1\157\1\160\1\147\1\161\1\162\1\163\1\147"+ - "\1\164\1\147\1\165\1\166\1\147\1\167\1\170\1\171"+ - "\1\0\1\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\11\0\1\42\15\0\1\42\72\0\1\43\15\0\1\43"+ - "\6\0\1\172\55\0\1\147\2\0\1\173\1\150\15\0"+ - "\1\147\10\0\1\174\1\151\1\152\1\153\1\154\4\147"+ - "\1\155\1\156\1\157\1\160\1\147\1\161\1\175\1\163"+ - "\1\147\1\164\1\147\1\165\1\166\1\147\1\167\1\170"+ - "\1\171\1\0\1\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\11\0\4\45\4\0\1\46\5\0\2\45\1\0"+ - "\1\176\2\0\1\50\74\0\1\177\120\0\1\200\1\201"+ - "\57\0\3\202\1\203\1\202\1\204\1\205\1\206\3\202"+ - "\1\0\24\202\1\207\1\210\1\202\1\211\3\202\1\212"+ - "\7\202\1\213\4\202\1\203\1\202\1\206\1\203\21\202"+ - "\10\0\1\53\3\214\1\56\1\0\1\57\4\0\1\61"+ - "\2\0\1\53\1\214\1\62\1\63\1\64\3\0\1\215"+ - "\36\0\1\66\1\67\1\70\1\71\1\72\1\73\1\74"+ - "\1\75\14\0\4\214\1\56\1\0\1\57\4\0\1\61"+ - "\2\0\2\214\1\62\1\63\1\64\3\0\1\215\36\0"+ - "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ - "\14\0\3\214\1\54\1\56\1\0\1\57\4\0\1\61"+ - "\2\0\2\214\1\62\1\63\1\64\3\0\1\215\36\0"+ - "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ - "\111\0\1\216\23\0\1\217\120\0\1\220\1\201\60\0"+ - "\1\221\1\222\1\221\1\0\2\222\1\221\1\223\13\0"+ - "\1\222\1\0\1\223\10\0\25\222\4\221\1\222\1\0"+ - "\3\222\6\0\1\222\2\0\2\222\11\0\1\224\1\225"+ - "\1\226\1\225\12\0\1\224\1\225\61\0\31\76\1\227"+ - "\1\230\1\231\1\0\1\76\1\0\102\76\1\232\1\233"+ - "\57\76\4\230\1\234\4\230\3\0\13\230\1\0\2\230"+ - "\1\76\56\230\4\235\1\236\4\235\3\0\13\235\1\0"+ - "\3\235\1\0\55\235\10\0\4\104\12\0\2\104\71\0"+ - "\4\106\12\0\2\106\61\0\4\107\1\0\4\107\3\0"+ - "\13\107\1\0\2\107\1\0\56\107\3\237\1\240\1\237"+ - "\1\241\1\242\1\243\3\237\1\0\16\237\1\244\5\237"+ - "\1\245\1\246\1\237\1\247\3\237\1\250\7\237\1\251"+ - "\4\237\1\240\1\237\1\243\1\240\21\237\13\0\1\111"+ - "\105\0\4\252\2\0\1\253\7\0\2\252\63\0\1\254"+ - "\2\0\2\254\15\0\1\254\12\0\25\254\4\0\1\254"+ - "\1\0\3\254\6\0\1\254\2\0\2\254\20\0\1\255"+ - "\71\0\11\256\2\125\1\126\13\256\1\125\72\256\2\125"+ - "\1\126\13\256\1\125\4\256\1\257\2\256\1\260\6\256"+ - "\1\261\1\256\1\262\40\256\1\0\1\263\1\0\1\263"+ - "\3\0\1\263\1\264\15\0\1\264\35\0\4\263\31\0"+ - "\4\133\12\0\2\133\62\0\3\135\1\0\3\135\1\265"+ - "\13\0\4\135\7\0\32\135\1\0\3\135\6\0\1\135"+ - "\2\0\2\135\1\0\13\136\1\266\75\136\30\24\1\137"+ - "\1\0\107\24\1\0\1\140\57\24\11\146\2\267\1\270"+ - "\13\146\1\267\61\146\1\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\2\0\3\147\1\0\3\147\14\0\4\147\7\0"+ - "\1\147\1\271\30\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\1\0\11\151\2\272\1\273\13\151\1\272\61\151"+ - "\1\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ - "\1\274\15\147\1\275\4\147\1\276\5\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\5\147\1\277\24\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\3\147\1\300\5\147\1\301\2\147"+ - "\1\302\15\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\1\303\2\147\14\0\4\147\7\0"+ - "\5\147\1\304\24\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\2\0\3\147\1\0\1\147\1\305\1\147\14\0"+ - "\4\147\7\0\1\306\31\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\11\147\1\307\20\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\1\310\31\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\2\0\3\147\1\0\3\147\14\0\4\147\7\0"+ - "\20\147\1\311\1\147\1\312\7\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\2\147\1\313\3\147\1\314\7\147\1\315"+ - "\13\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\1\147\1\316\1\147\14\0\4\147\7\0"+ - "\2\147\1\317\1\320\1\147\1\321\4\147\1\322\1\147"+ - "\1\323\15\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\1\147\1\324\1\147\14\0\4\147"+ - "\7\0\11\147\1\325\20\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\1\147\1\326\1\147"+ - "\14\0\4\147\7\0\14\147\1\327\15\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\7\147\1\330\22\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\60\0\1\331\110\0\1\332"+ - "\120\0\1\333\22\0\3\147\1\0\3\147\1\334\13\0"+ - "\2\147\1\335\1\147\7\0\15\147\1\336\14\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\1\0\11\174\3\0"+ - "\13\174\1\0\61\174\1\0\3\147\1\0\3\147\1\337"+ - "\13\0\2\147\1\340\1\147\7\0\2\147\1\341\3\147"+ - "\1\314\7\147\1\315\13\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\73\0\1\342\16\0\11\201\3\0\13\201"+ - "\1\0\61\201\3\0\1\343\3\0\1\343\54\0\1\343"+ - "\1\0\2\343\22\0\3\344\3\0\1\344\36\0\2\344"+ - "\3\0\1\344\1\0\1\344\1\0\1\344\2\0\1\344"+ - "\1\0\4\344\2\0\1\344\1\0\1\344\15\0\3\345"+ - "\3\0\1\345\36\0\2\345\3\0\1\345\1\0\1\345"+ - "\1\0\1\345\2\0\1\345\1\0\4\345\2\0\1\345"+ - "\1\0\1\345\17\0\1\203\3\0\1\203\54\0\1\203"+ - "\1\0\2\203\27\0\1\346\42\0\1\347\6\0\1\350"+ - "\1\0\1\351\120\0\1\352\17\0\1\221\1\0\1\221"+ - "\3\0\1\221\54\0\4\221\22\0\3\222\1\0\3\222"+ - "\1\353\13\0\4\222\4\0\1\354\2\0\32\222\1\0"+ - "\3\222\6\0\1\222\2\0\2\222\14\0\1\355\75\0"+ - "\30\232\1\356\60\232\11\233\2\357\1\76\13\233\1\357"+ - "\61\233\11\230\3\0\13\230\1\0\61\230\33\0\1\76"+ - "\55\0\3\235\1\360\1\361\1\235\1\362\1\363\1\235"+ - "\3\0\13\235\1\0\34\235\1\360\1\235\1\363\1\360"+ - "\21\235\3\0\1\364\3\0\1\364\54\0\1\364\1\0"+ - "\2\364\22\0\3\365\3\0\1\365\36\0\2\365\3\0"+ - "\1\365\1\0\1\365\1\0\1\365\2\0\1\365\1\0"+ - "\4\365\2\0\1\365\1\0\1\365\15\0\3\366\3\0"+ - "\1\366\36\0\2\366\3\0\1\366\1\0\1\366\1\0"+ - "\1\366\2\0\1\366\1\0\4\366\2\0\1\366\1\0"+ - "\1\366\17\0\1\240\3\0\1\240\54\0\1\240\1\0"+ - "\2\240\22\0\3\254\1\0\3\254\14\0\4\254\4\0"+ - "\1\367\2\0\32\254\1\0\3\254\6\0\1\254\2\0"+ - "\2\254\1\0\11\257\2\370\1\371\13\257\1\370\61\257"+ - "\11\256\2\125\1\126\13\256\1\125\10\256\1\372\61\256"+ - "\2\125\1\126\13\256\1\125\14\256\1\373\55\256\2\125"+ - "\1\126\13\256\1\125\20\256\1\374\40\256\1\0\1\263"+ - "\1\0\1\263\3\0\1\263\54\0\4\263\31\0\1\265"+ - "\15\0\1\265\63\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\1\375\31\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\2\0\3\147\1\0\3\147\14\0\4\147\7\0"+ - "\1\376\1\147\1\377\13\147\1\u0100\13\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\22\147\1\u0101\7\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\1\147\1\u0102\30\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\2\147\1\u0103\27\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\4\147\1\u0104\25\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\22\147\1\u0105\7\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\20\147\1\u0106\11\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\2\147\1\u0107\27\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\10\147\1\u0108\21\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\1\147\1\u0109\10\147\1\u010a\17\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\1\147\1\u010b\30\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\7\147\1\u010c\2\147"+ - "\1\u010d\17\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ - "\1\u010e\30\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ - "\1\u010f\14\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\1\u0110"+ - "\31\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\14\147\1\u0111"+ - "\15\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\1\u0112\31\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0113\15\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\22\147\1\u0114\7\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\5\147\1\u0115\24\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0116\15\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\12\147\1\u0117\17\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0118\15\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\15\147\1\u0119\14\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\10\147\1\u011a\21\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\14\147\1\u011b\15\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\20\147\1\u011c\11\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\16\147\1\u011d\13\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\20\147\1\u011e\11\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\40\0\1\u011f"+ - "\110\0\1\u0120\130\0\1\u0121\41\0\1\334\15\0\1\334"+ - "\63\0\3\147\1\0\3\147\1\334\13\0\2\147\1\335"+ - "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\2\0\3\147\1\0\3\147\14\0\4\147\7\0"+ - "\2\147\1\u0122\27\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\11\0\1\337\15\0\1\337\63\0\3\147\1\0"+ - "\3\147\1\337\13\0\2\147\1\340\1\147\7\0\32\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0123\15\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\74\0\1\u0124"+ - "\16\0\3\u0125\3\0\1\u0125\36\0\2\u0125\3\0\1\u0125"+ - "\1\0\1\u0125\1\0\1\u0125\2\0\1\u0125\1\0\4\u0125"+ - "\2\0\1\u0125\1\0\1\u0125\15\0\3\u0126\3\0\1\u0126"+ - "\36\0\2\u0126\3\0\1\u0126\1\0\1\u0126\1\0\1\u0126"+ - "\2\0\1\u0126\1\0\4\u0126\2\0\1\u0126\1\0\1\u0126"+ - "\54\0\1\u0127\20\0\1\u0128\73\0\1\u0129\1\0\1\u012a"+ - "\113\0\1\u012b\76\0\1\u012c\144\0\1\u012d\25\0\1\353"+ - "\15\0\1\353\5\0\1\354\54\0\30\232\1\356\1\76"+ - "\57\232\13\357\1\76\15\357\1\u012e\1\u012f\1\u0130\1\233"+ - "\1\357\1\233\52\357\3\0\1\235\3\0\1\235\23\0"+ - "\1\76\30\0\1\235\1\0\2\235\25\0\1\u0131\1\0"+ - "\1\u0132\24\0\1\76\56\0\3\u0133\3\0\1\u0133\23\0"+ - "\1\76\12\0\2\u0133\3\0\1\u0133\1\0\1\u0133\1\0"+ - "\1\u0133\2\0\1\u0133\1\0\4\u0133\2\0\1\u0133\1\0"+ - "\1\u0133\17\0\1\360\3\0\1\360\23\0\1\76\30\0"+ - "\1\360\1\0\2\360\22\0\3\u0134\3\0\1\u0134\36\0"+ - "\2\u0134\3\0\1\u0134\1\0\1\u0134\1\0\1\u0134\2\0"+ - "\1\u0134\1\0\4\u0134\2\0\1\u0134\1\0\1\u0134\15\0"+ - "\3\u0135\3\0\1\u0135\36\0\2\u0135\3\0\1\u0135\1\0"+ - "\1\u0135\1\0\1\u0135\2\0\1\u0135\1\0\4\u0135\2\0"+ - "\1\u0135\1\0\1\u0135\14\0\11\256\2\125\1\126\13\256"+ - "\1\125\7\256\1\u0136\62\256\2\125\1\126\13\256\1\125"+ - "\17\256\1\u0137\52\256\2\125\1\126\13\256\1\125\21\256"+ - "\1\u0138\37\256\1\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\16\147\1\u0139\13\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\2\147\1\u013a\27\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\6\147\1\u013b\1\u013c\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\12\147\1\u013d\17\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\12\147\1\u013e\17\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\5\147\1\u013f\24\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\1\147\1\u0140"+ - "\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\5\147\1\u0141\24\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u0142\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\12\147\1\u0143\17\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u0144\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\6\0\1\151\2\147\1\u0145\10\147\1\u0146\2\147"+ - "\1\u0147\13\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+ - "\1\u0148\13\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\12\147"+ - "\1\u0149\17\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\14\147"+ - "\1\u014a\15\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+ - "\1\u014b\24\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ - "\1\u014c\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ - "\1\u014d\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+ - "\1\u014e\27\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\22\147"+ - "\1\u014f\7\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ - "\1\u0150\30\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+ - "\1\u0151\27\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ - "\1\u0152\30\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ - "\1\u0153\5\147\1\u0154\6\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\4\147\1\u0155\25\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\4\147\1\u0156\25\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\1\147\1\u0157\1\147"+ - "\14\0\4\147\7\0\32\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\15\147\1\u0158\14\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\7\147\1\u0159\22\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\10\147\1\u015a\21\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\16\147\1\u015b\13\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\12\147\1\u015c\17\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\31\147\1\u015d\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\2\0\3\147\1\0\1\147\1\u015e\1\147\14\0"+ - "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\42\0\1\u015f\110\0\1\u0160\106\0\1\u0161\52\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\14\147\1\u0162"+ - "\15\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0150"+ - "\1\u0163\27\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\75\0\1\u0164\15\0\3\u0165\3\0\1\u0165\36\0\2\u0165"+ - "\3\0\1\u0165\1\0\1\u0165\1\0\1\u0165\2\0\1\u0165"+ - "\1\0\4\u0165\2\0\1\u0165\1\0\1\u0165\53\0\1\u0166"+ - "\132\0\1\u0167\74\0\1\u0168\104\0\1\u0169\115\0\1\u016a"+ - "\125\0\1\u016b\121\0\1\u016c\14\0\13\357\1\76\14\357"+ - "\1\u016d\1\233\57\357\4\u012f\1\u016e\4\u012f\2\357\1\76"+ - "\13\u012f\1\357\2\u012f\1\357\56\u012f\4\u016f\1\u0170\4\u016f"+ - "\2\357\1\76\13\u016f\1\357\3\u016f\1\233\55\u016f\4\0"+ - "\1\u0131\1\0\1\u0132\103\0\3\u0133\3\0\1\u0133\36\0"+ - "\2\u0133\3\0\1\u0133\1\0\1\u0133\1\0\1\u0133\2\0"+ - "\1\u0133\1\0\4\u0133\2\0\1\u0133\1\0\1\u0133\15\0"+ - "\3\u0171\3\0\1\u0171\36\0\2\u0171\3\0\1\u0171\1\0"+ - "\1\u0171\1\0\1\u0171\2\0\1\u0171\1\0\4\u0171\2\0"+ - "\1\u0171\1\0\1\u0171\15\0\3\u0172\3\0\1\u0172\36\0"+ - "\2\u0172\3\0\1\u0172\1\0\1\u0172\1\0\1\u0172\2\0"+ - "\1\u0172\1\0\4\u0172\2\0\1\u0172\1\0\1\u0172\14\0"+ - "\11\256\2\125\1\126\13\256\1\125\11\256\1\u0173\60\256"+ - "\2\125\1\126\13\256\1\125\4\256\1\u0174\4\256\1\u0175"+ - "\10\256\1\u0176\47\256\2\125\1\126\13\256\1\125\16\256"+ - "\1\u0177\42\256\1\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\5\147\1\u0178\24\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\6\0\1\151\2\147\1\u0179\27\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\4\147\1\u017a\25\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\24\147\1\u017b\5\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\1\147\1\u017c"+ - "\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u017d\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\4\147\1\u017e\25\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\1\147\1\u017f\30\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\6\147\1\u0180\23\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\1\u0181"+ - "\13\0\2\147\1\u0182\1\147\7\0\32\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\7\147\1\u0183\22\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\1\147\1\u0184\30\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\3\147\1\u0185\26\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\14\147\1\u0186\15\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\12\147\1\u0187\17\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\2\147\1\u0188\27\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\12\147\1\u0189\17\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\10\147\1\u018a\21\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\1\u018b"+ - "\2\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\4\147\1\u018c\25\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\4\147\1\u018d\25\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\23\147\1\u018e\6\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\16\147\1\u018f\13\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u0190\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\11\147\1\u0191\20\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u0192\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\14\147\1\u0193\15\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\17\147\1\u0194\12\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\15\147\1\u0195\14\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\12\147\1\u0196\17\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u0197\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\16\147\1\u0198\13\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\1\u0199\31\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\24\147\1\u019a\5\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\42\0\1\u019b\50\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\2\147\1\u019c\27\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\7\147\1\u019d\22\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\22\0\1\u019e\144\0\1\u019f"+ - "\101\0\1\u01a0\110\0\1\u01a1\103\0\1\u01a2\110\0\1\u01a3"+ - "\106\0\1\u01a4\72\0\1\u01a5\67\0\11\u016d\2\u01a6\1\u01a7"+ - "\13\u016d\1\u01a6\1\u01a8\60\u016d\11\u012f\2\357\1\76\13\u012f"+ - "\1\357\61\u012f\11\233\2\357\1\76\13\233\1\357\3\233"+ - "\1\357\55\233\3\u016f\1\u01a9\1\u01aa\1\u016f\1\u01ab\1\u01ac"+ - "\1\u016f\2\357\1\76\13\u016f\1\357\34\u016f\1\u01a9\1\u016f"+ - "\1\u01ac\1\u01a9\21\u016f\1\0\3\u01ad\3\0\1\u01ad\36\0"+ - "\2\u01ad\3\0\1\u01ad\1\0\1\u01ad\1\0\1\u01ad\2\0"+ - "\1\u01ad\1\0\4\u01ad\2\0\1\u01ad\1\0\1\u01ad\14\0"+ - "\11\256\2\125\1\126\13\256\1\125\4\256\1\u01ae\4\256"+ - "\1\u01af\47\256\11\u0174\2\u01b0\1\u01b1\13\u0174\1\u01b0\61\u0174"+ - "\11\256\2\125\1\126\13\256\1\125\12\256\1\u01b2\57\256"+ - "\2\125\1\126\13\256\1\125\23\256\1\u01b3\42\256\1\u01b4"+ - "\3\256\2\125\1\126\13\256\1\125\61\256\1\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b5\6\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\3\147\1\u01b6\26\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\14\147\1\u01b7\15\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\7\147\1\u01b8\22\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b9\6\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\17\147\1\u01ba\12\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\7\147\1\u01bb\22\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\14\0\4\147\7\0\1\u01bc\31\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ - "\3\147\14\0\4\147\7\0\15\147\1\u01bd\14\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\3\0\1\u01be\2\0"+ - "\2\u01be\1\0\1\u0181\7\0\1\u01bf\3\0\1\u01be\1\0"+ - "\1\u0181\10\0\25\u01be\4\0\1\u01be\1\0\3\u01be\6\0"+ - "\1\u01be\2\0\2\u01be\2\0\1\147\1\u01be\1\147\1\0"+ - "\2\u01be\1\147\1\u0181\7\0\1\u01bf\3\0\1\u01be\1\147"+ - "\1\u0182\1\147\7\0\25\u01be\4\147\1\u01be\1\0\3\u01be"+ - "\6\0\1\u01be\2\0\2\u01be\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\23\147\1\u01c0\6\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\4\147\1\u01c1\25\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\12\147\1\u01c2\17\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\5\147\1\u01c3\24\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\1\u01c4\31\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\2\147\1\u01c5\27\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\14\147\1\u01c6\15\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\1\u01c7\31\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\14\147\1\u01c8\15\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\3\147\1\u01c9\26\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\4\147\1\u01ca\25\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\17\147\1\u01cb\12\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\20\147\1\u01cc\11\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\4\147\1\u01cd\25\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\1\147\1\u01ce\30\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\1\u01cf\13\0"+ - "\2\147\1\u01d0\1\147\7\0\32\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u01d1\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\4\147\1\u01d2\25\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\21\147\1\u01d3\10\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\16\147\1\u01d4\13\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u01d5\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\1\337"+ - "\13\0\2\147\1\340\1\147\7\0\15\147\1\u01d6\14\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\22\0\1\u01d7"+ - "\133\0\1\u01d8\107\0\1\u01d9\110\0\1\u01da\113\0\1\u01db"+ - "\103\0\1\u01dc\110\0\1\u01dd\70\0\1\u01de\67\0\13\u01a6"+ - "\1\u01a7\14\u01a6\1\u01df\1\u01e0\1\u01e1\1\u01e2\1\u016d\1\u01a6"+ - "\1\u016d\52\u01a6\30\u01a7\1\u01e3\1\u01e4\1\u01e5\1\u01e6\1\232"+ - "\1\u01a7\1\232\52\u01a7\11\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6"+ - "\1\u01a8\1\357\57\u016d\3\233\1\u016f\3\233\1\u016f\1\233"+ - "\2\357\1\76\13\233\1\357\3\233\1\357\30\233\1\u016f"+ - "\1\233\2\u016f\25\233\1\u01e7\1\233\1\u01e8\2\233\2\357"+ - "\1\76\13\233\1\357\3\233\1\357\56\233\3\u01e9\3\233"+ - "\1\u01e9\1\233\2\357\1\76\13\233\1\357\3\233\1\357"+ - "\12\233\2\u01e9\3\233\1\u01e9\1\233\1\u01e9\1\233\1\u01e9"+ - "\2\233\1\u01e9\1\233\4\u01e9\2\233\1\u01e9\1\233\1\u01e9"+ - "\17\233\1\u01a9\3\233\1\u01a9\1\233\2\357\1\76\13\233"+ - "\1\357\3\233\1\357\30\233\1\u01a9\1\233\2\u01a9\21\233"+ - "\1\0\3\235\3\0\1\235\36\0\2\235\3\0\1\235"+ - "\1\0\1\235\1\0\1\235\2\0\1\235\1\0\4\235"+ - "\2\0\1\235\1\0\1\235\14\0\11\u01ae\2\u01ea\1\u01eb"+ - "\13\u01ae\1\u01ea\61\u01ae\11\256\2\125\1\126\13\256\1\125"+ - "\12\256\1\u01ec\57\256\2\125\1\126\13\256\1\125\13\256"+ - "\1\u01ed\56\256\2\125\1\126\13\256\1\125\21\256\1\u01ee"+ - "\50\256\2\125\1\126\13\256\1\125\11\256\1\u01ef\47\256"+ - "\1\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ - "\1\u01f0\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ - "\1\u01f1\25\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\22\147"+ - "\1\u01f2\7\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ - "\1\u01f3\25\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ - "\1\u01f4\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ - "\1\u01f5\22\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+ - "\1\u01f6\13\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\1\u01f7\2\147\14\0\4\147\7\0"+ - "\32\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\1\u01f8\13\0\2\147\1\u01f9\1\147"+ - "\7\0\32\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\u01be\1\0\3\u01be\1\u01fa\3\0\1\u01fb\1\0"+ - "\1\u01fc\1\0\1\u01fd\3\0\4\u01be\7\0\32\u01be\1\0"+ - "\3\u01be\6\0\1\u01be\2\0\2\u01be\2\0\3\u01fe\1\0"+ - "\4\u01fe\3\0\2\u01fe\2\0\10\u01fe\7\0\32\u01fe\1\0"+ - "\3\u01fe\6\0\1\u01fe\2\0\2\u01fe\2\0\3\147\1\0"+ - "\3\147\14\0\4\147\7\0\15\147\1\u01ff\14\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ - "\3\147\14\0\4\147\7\0\5\147\1\u0200\24\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ - "\3\147\14\0\4\147\6\0\1\151\32\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\15\147\1\u0201\14\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\5\147\1\u0202\24\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\3\147\1\u0203\26\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\16\147\1\u0204\13\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\13\147\1\u0205\16\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\12\147\1\u0206\17\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\4\147\1\u0207\25\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\1\u0208\13\0\2\147\1\u0209\1\147\7\0\32\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ - "\1\147\1\u020a\1\147\14\0\4\147\7\0\32\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ - "\3\147\14\0\4\147\7\0\24\147\1\u020b\5\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\3\0\1\u020c\2\0"+ - "\2\u020c\1\0\1\u01cf\13\0\1\u020c\1\0\1\u01cf\10\0"+ - "\25\u020c\4\0\1\u020c\1\0\3\u020c\6\0\1\u020c\2\0"+ - "\2\u020c\2\0\1\147\1\u020c\1\147\1\0\2\u020c\1\147"+ - "\1\u01cf\13\0\1\u020c\1\147\1\u01d0\1\147\7\0\25\u020c"+ - "\4\147\1\u020c\1\0\3\u020c\6\0\1\u020c\2\0\2\u020c"+ - "\2\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ - "\1\u020d\14\147\1\0\3\147\6\0\1\147\2\0\2\147"+ - "\2\0\3\147\1\0\3\147\1\u020e\13\0\2\147\1\u020f"+ - "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\2\0\3\147\1\0\3\147\1\334\13\0\2\147"+ - "\1\335\1\147\7\0\15\147\1\u0210\14\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\11\0\4\u01d7\12\0\2\u01d7"+ - "\6\0\1\u0211\134\0\1\u0212\103\0\1\u0213\110\0\1\u0214"+ - "\76\0\1\u0215\113\0\1\u0216\147\0\1\u0217\13\0\4\u0218"+ - "\12\0\2\u0218\61\0\13\u01a6\1\u01a7\14\u01a6\1\u01df\1\u0219"+ - "\1\u01e1\1\u01e2\1\u016d\1\u01a6\1\u016d\65\u01a6\1\u01a7\14\u01a6"+ - "\1\u021a\1\u016d\57\u01a6\4\u01e1\1\u021b\4\u01e1\2\u01a6\1\u01a7"+ - "\13\u01e1\1\u01a6\1\u021c\1\u01e1\1\u01a6\56\u01e1\4\u021d\1\u021e"+ - "\4\u021d\2\u01a6\1\u01a7\13\u021d\1\u01a6\1\u021f\2\u021d\1\u016d"+ - "\55\u021d\30\u01a7\1\u01e3\1\u0220\1\u01e5\1\u01e6\1\232\1\u01a7"+ - "\1\232\102\u01a7\1\u0221\1\u016d\57\u01a7\4\u01e5\1\u0222\4\u01e5"+ - "\3\232\13\u01e5\1\232\1\u0223\1\u01e5\1\u01a7\56\u01e5\4\u0224"+ - "\1\u0225\4\u0224\3\232\13\u0224\1\232\1\u0226\2\u0224\1\232"+ - "\55\u0224\4\233\1\u01e7\1\233\1\u01e8\2\233\2\357\1\76"+ - "\13\233\1\357\62\233\3\u01e9\3\233\1\u01e9\1\233\2\357"+ - "\1\76\13\233\1\357\16\233\2\u01e9\3\233\1\u01e9\1\233"+ - "\1\u01e9\1\233\1\u01e9\2\233\1\u01e9\1\233\4\u01e9\2\233"+ - "\1\u01e9\1\233\1\u01e9\15\233\3\u0227\3\233\1\u0227\1\233"+ - "\2\357\1\76\13\233\1\357\16\233\2\u0227\3\233\1\u0227"+ - "\1\233\1\u0227\1\233\1\u0227\2\233\1\u0227\1\233\4\u0227"+ - "\2\233\1\u0227\1\233\1\u0227\14\233\11\256\2\125\1\126"+ - "\13\256\1\125\13\256\1\u0228\56\256\2\125\1\126\13\256"+ - "\1\125\14\256\1\u0229\55\256\2\125\1\126\13\256\1\125"+ - "\4\256\1\u022a\65\256\2\125\1\126\13\256\1\125\12\256"+ - "\1\u022b\46\256\1\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\5\147\1\u022c\24\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\1\u022d\13\0"+ - "\2\147\1\u022d\1\147\7\0\32\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\1\147\1\u022e\30\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\14\147\1\u022f\15\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\1\0\2\u0230\1\u0231\2\u0230\2\u0231"+ - "\1\u0230\1\u01f8\3\0\10\u0230\1\u0231\1\u0230\1\u01f8\1\0"+ - "\7\u0230\25\u0231\4\u0230\1\u0231\1\u0230\3\u0231\6\u0230\1\u0231"+ - "\2\u0230\2\u0231\2\u0230\1\u0232\1\u0231\1\u0232\1\u0230\2\u0231"+ - "\1\u0232\1\u01f8\3\0\10\u0230\1\u0231\1\u0232\1\u01f9\1\147"+ - "\7\u0230\25\u0231\4\u0232\1\u0231\1\u0230\3\u0231\6\u0230\1\u0231"+ - "\2\u0230\2\u0231\1\u0230\10\0\1\u01fa\3\0\1\u01fb\1\0"+ - "\1\u01fc\1\0\1\u01fd\5\0\1\u01fa\64\0\1\u01be\2\0"+ - "\2\u01be\1\0\1\u01fb\13\0\1\u01be\1\0\1\u01fb\10\0"+ - "\25\u01be\4\0\1\u01be\1\0\3\u01be\6\0\1\u01be\2\0"+ - "\2\u01be\11\0\1\u01fc\6\0\1\u0233\6\0\1\u01fc\63\0"+ - "\3\u0234\1\0\4\u0234\3\0\2\u0234\2\0\10\u0234\7\0"+ - "\32\u0234\1\0\3\u0234\6\0\1\u0234\2\0\2\u0234\2\0"+ - "\3\u01fe\1\0\4\u01fe\3\0\2\u01fe\2\0\1\u01fe\1\u0235"+ - "\6\u01fe\7\0\32\u01fe\1\0\3\u01fe\6\0\1\u01fe\2\0"+ - "\2\u01fe\2\0\3\147\1\0\3\147\1\u0236\13\0\2\147"+ - "\1\u0237\1\147\7\0\32\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\6\147\1\u0238\23\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\7\147\1\u0239\22\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\1\147\1\u023a\30\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\4\147\1\u023b\25\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\2\147\1\u023c\27\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\14\147\1\u023d\15\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\5\147\1\u023e\24\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\5\147\1\u023f\24\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\1\0\2\u0240\1\u0241\2\u0240\2\u0241\1\u0240"+ - "\1\u0208\3\0\10\u0240\1\u0241\1\u0240\1\u0208\1\0\7\u0240"+ - "\25\u0241\4\u0240\1\u0241\1\u0240\3\u0241\6\u0240\1\u0241\2\u0240"+ - "\2\u0241\2\u0240\1\u0242\1\u0241\1\u0242\1\u0240\2\u0241\1\u0242"+ - "\1\u0208\3\0\10\u0240\1\u0241\1\u0242\1\u0209\1\147\7\u0240"+ - "\25\u0241\4\u0242\1\u0241\1\u0240\3\u0241\6\u0240\1\u0241\2\u0240"+ - "\2\u0241\1\u0240\1\0\3\147\1\0\3\147\14\0\4\147"+ - "\7\0\24\147\1\u0243\5\147\1\0\3\147\6\0\1\147"+ - "\2\0\2\147\2\0\3\147\1\0\3\147\1\u0244\13\0"+ - "\2\147\1\u0245\1\147\7\0\32\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\u020c\1\0\3\u020c\1\u0246"+ - "\7\0\1\u0247\3\0\4\u020c\7\0\32\u020c\1\0\3\u020c"+ - "\6\0\1\u020c\2\0\2\u020c\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\15\147\1\u0248\14\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\1\0\1\u0249\1\u024a\1\u0249"+ - "\1\u024a\3\u0249\1\u024a\1\u020e\3\0\12\u0249\1\u020e\1\0"+ - "\34\u0249\4\u024a\22\u0249\1\u024b\1\u024c\1\u024b\1\u0249\2\u024c"+ - "\1\u024b\1\u020e\3\0\10\u0249\2\u024c\1\u020f\1\147\7\u0249"+ - "\25\u024c\4\u024b\1\u024c\1\u0249\3\u024c\6\u0249\1\u024c\2\u0249"+ - "\2\u024c\1\u0249\46\0\1\u024d\115\0\1\u024e\110\0\1\u024f"+ - "\142\0\1\u0250\46\0\1\u0251\64\0\1\u0252\101\0\4\u0218"+ - "\12\0\2\u0218\6\0\1\u0253\52\0\13\357\1\76\14\357"+ - "\1\u01a6\1\u012e\1\u0254\1\u0255\55\357\11\u016d\2\u01a6\1\u01a7"+ - "\13\u016d\1\u01a6\1\u01a8\1\u01a6\57\u016d\11\u01e1\2\u01a6\1\u01a7"+ - "\13\u01e1\1\u01a6\1\u021c\64\u01e1\1\u021b\4\u01e1\2\u01a6\1\u01a7"+ - "\13\u01e1\1\u01a6\1\u021c\1\u0254\1\u01a6\56\u01e1\11\u016d\2\u01a6"+ - "\1\u01a7\13\u016d\1\u01a6\1\u01a8\2\u016d\1\u01a6\55\u016d\3\u021d"+ - "\1\u0256\1\u0257\1\u021d\1\u0258\1\u0259\1\u021d\2\u01a6\1\u01a7"+ - "\13\u021d\1\u01a6\1\u021f\33\u021d\1\u0256\1\u021d\1\u0259\1\u0256"+ - "\21\u021d\11\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\1\357"+ - "\1\u016d\1\u01a6\55\u016d\30\76\1\u01a7\1\u012e\1\u025a\1\u025b"+ - "\55\76\30\232\1\356\1\u01a7\57\232\11\u01e5\3\232\13\u01e5"+ - "\1\232\1\u0223\64\u01e5\1\u0222\4\u01e5\3\232\13\u01e5\1\232"+ - "\1\u0223\1\u025a\1\u01a7\56\u01e5\30\232\1\356\2\232\1\u01a7"+ - "\55\232\3\u0224\1\u025c\1\u025d\1\u0224\1\u025e\1\u025f\1\u0224"+ - "\3\232\13\u0224\1\232\1\u0226\33\u0224\1\u025c\1\u0224\1\u025f"+ - "\1\u025c\21\u0224\30\232\1\356\1\76\1\232\1\u01a7\55\232"+ - "\1\233\3\u0260\3\233\1\u0260\1\233\2\357\1\76\13\233"+ - "\1\357\16\233\2\u0260\3\233\1\u0260\1\233\1\u0260\1\233"+ - "\1\u0260\2\233\1\u0260\1\233\4\u0260\2\233\1\u0260\1\233"+ - "\1\u0260\14\233\11\256\2\125\1\126\13\256\1\125\14\256"+ - "\1\u0261\55\256\2\125\1\126\13\256\1\125\15\256\1\u0262"+ - "\43\256\11\u022a\2\u0263\1\u0264\13\u022a\1\u0263\61\u022a\11\256"+ - "\2\125\1\126\13\256\1\125\13\256\1\u0265\45\256\1\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\6\147\1\u0266"+ - "\23\147\1\0\3\147\6\0\1\147\2\0\2\147\1\0"+ - "\13\u022d\1\0\75\u022d\1\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\2\147\1\u0267\27\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\15\147\1\u0268\14\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\1\0\11\u0230\3\0\13\u0230\1\0"+ - "\62\u0230\3\u0231\1\u0230\3\u0231\1\u0269\3\0\2\u01f8\6\u0230"+ - "\3\u0231\1\u026a\7\u0230\32\u0231\1\u0230\3\u0231\6\u0230\1\u0231"+ - "\2\u0230\2\u0231\2\u0230\3\u0232\1\u0230\3\u0232\1\u0230\3\0"+ - "\10\u0230\3\u0232\1\147\7\u0230\32\u0232\1\u0230\3\u0232\6\u0230"+ - "\1\u0232\2\u0230\2\u0232\1\u0230\10\0\1\u0233\5\0\1\u01fc"+ - "\7\0\1\u0233\63\0\3\u0234\1\0\4\u0234\3\0\2\u0234"+ - "\2\0\1\u0234\1\u026b\6\u0234\7\0\32\u0234\1\0\3\u0234"+ - "\6\0\1\u0234\2\0\2\u0234\2\0\1\u01fe\1\u026c\1\u01fe"+ - "\1\0\2\u026c\1\u01fe\1\u0235\3\0\2\u01fe\2\0\1\u01fe"+ - "\1\u0235\2\u01fe\1\u026c\1\u01fe\1\u0235\1\u01fe\7\0\25\u026c"+ - "\4\u01fe\1\u026c\1\0\3\u026c\6\0\1\u026c\2\0\2\u026c"+ - "\3\0\1\u026d\2\0\2\u026d\1\0\1\u0236\13\0\1\u026d"+ - "\1\0\1\u0236\10\0\25\u026d\4\0\1\u026d\1\0\3\u026d"+ - "\6\0\1\u026d\2\0\2\u026d\2\0\1\147\1\u026d\1\147"+ - "\1\0\2\u026d\1\147\1\u0236\13\0\1\u026d\1\147\1\u0237"+ - "\1\147\7\0\25\u026d\4\147\1\u026d\1\0\3\u026d\6\0"+ - "\1\u026d\2\0\2\u026d\2\0\3\147\1\0\3\147\1\u026e"+ - "\13\0\2\147\1\u026f\1\147\6\0\1\151\32\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ - "\3\147\1\u0270\13\0\2\147\1\u0271\1\147\7\0\32\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\2\0\3\147"+ - "\1\0\3\147\1\u0272\13\0\2\147\1\u0273\1\147\7\0"+ - "\32\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\5\147\1\u0274"+ - "\24\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\2\147\1\u0275"+ - "\27\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0276"+ - "\30\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u0277"+ - "\25\147\1\0\3\147\6\0\1\147\2\0\2\147\1\0"+ - "\11\u0240\3\0\13\u0240\1\0\62\u0240\3\u0241\1\u0240\3\u0241"+ - "\1\u0278\3\0\1\u0208\7\u0240\3\u0241\1\u0279\7\u0240\32\u0241"+ - "\1\u0240\3\u0241\6\u0240\1\u0241\2\u0240\2\u0241\2\u0240\3\u0242"+ - "\1\u0240\3\u0242\1\u0240\3\0\10\u0240\3\u0242\1\147\7\u0240"+ - "\32\u0242\1\u0240\3\u0242\6\u0240\1\u0242\2\u0240\2\u0242\1\u0240"+ - "\2\0\1\u027a\2\0\2\u027a\1\0\1\u0244\7\0\1\u027b"+ - "\3\0\1\u027a\1\0\1\u0244\10\0\25\u027a\4\0\1\u027a"+ - "\1\0\3\u027a\6\0\1\u027a\2\0\2\u027a\2\0\1\147"+ - "\1\u027c\1\147\1\0\2\u027c\1\147\1\u0244\7\0\1\u027b"+ - "\3\0\1\u027c\1\147\1\u0245\1\147\7\0\25\u027c\4\147"+ - "\1\u027c\1\0\3\u027c\6\0\1\u027c\2\0\2\u027c\11\0"+ - "\1\u0246\7\0\1\u0247\5\0\1\u0246\63\0\3\u027d\1\0"+ - "\4\u027d\3\0\2\u027d\2\0\10\u027d\7\0\32\u027d\1\0"+ - "\3\u027d\6\0\1\u027d\2\0\2\u027d\1\0\11\u0249\3\0"+ - "\13\u0249\1\0\62\u0249\1\u024a\1\u0249\1\u024a\3\u0249\1\u024a"+ - "\1\u027e\3\0\12\u0249\1\u027e\1\0\34\u0249\4\u024a\22\u0249"+ - "\1\u024b\1\u024c\1\u024b\1\u0249\2\u024c\1\u024b\1\u027e\3\0"+ - "\10\u0249\2\u024c\1\u027f\1\147\7\u0249\25\u024c\4\u024b\1\u024c"+ - "\1\u0249\3\u024c\6\u0249\1\u024c\2\u0249\2\u024c\2\u0249\3\u024c"+ - "\1\u0249\3\u024c\1\u0249\3\0\10\u0249\3\u024c\1\147\7\u0249"+ - "\32\u024c\1\u0249\3\u024c\6\u0249\1\u024c\2\u0249\2\u024c\1\u0249"+ - "\106\0\1\u0280\56\0\1\u0281\110\0\1\u0282\53\0\1\u0283"+ - "\153\0\1\u0284\22\0\1\u0285\3\0\4\u0254\1\u0286\4\u0254"+ - "\2\357\1\76\13\u0254\1\357\1\u0254\1\u0287\1\u0254\1\u0288"+ - "\1\u012f\1\u0254\1\u012f\52\u0254\4\u0289\1\u028a\4\u0289\2\357"+ - "\1\76\13\u0289\1\357\1\u0289\1\u012e\1\u028b\1\u0130\1\u016f"+ - "\1\u0289\1\u016f\52\u0289\3\u016d\1\u021d\3\u016d\1\u021d\1\u016d"+ - "\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\2\u016d\1\u01a6\30\u016d"+ - "\1\u021d\1\u016d\2\u021d\25\u016d\1\u028c\1\u016d\1\u028d\2\u016d"+ - "\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\2\u016d\1\u01a6\56\u016d"+ - "\3\u028e\3\u016d\1\u028e\1\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6"+ - "\1\u01a8\2\u016d\1\u01a6\12\u016d\2\u028e\3\u016d\1\u028e\1\u016d"+ - "\1\u028e\1\u016d\1\u028e\2\u016d\1\u028e\1\u016d\4\u028e\2\u016d"+ - "\1\u028e\1\u016d\1\u028e\17\u016d\1\u0256\3\u016d\1\u0256\1\u016d"+ - "\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\2\u016d\1\u01a6\30\u016d"+ - "\1\u0256\1\u016d\2\u0256\21\u016d\4\u025a\1\u028f\4\u025a\3\76"+ - "\13\u025a\1\76\1\u025a\1\u0290\1\u025a\1\u0291\1\230\1\u025a"+ - "\1\230\52\u025a\4\u0292\1\u0293\4\u0292\3\76\13\u0292\1\76"+ - "\1\u0292\1\227\1\u0294\1\231\1\235\1\u0292\1\235\52\u0292"+ - "\3\232\1\u0224\3\232\1\u0224\20\232\1\356\2\232\1\u01a7"+ - "\30\232\1\u0224\1\232\2\u0224\25\232\1\u0295\1\232\1\u0296"+ - "\21\232\1\356\2\232\1\u01a7\56\232\3\u0297\3\232\1\u0297"+ - "\20\232\1\356\2\232\1\u01a7\12\232\2\u0297\3\232\1\u0297"+ - "\1\232\1\u0297\1\232\1\u0297\2\232\1\u0297\1\232\4\u0297"+ - "\2\232\1\u0297\1\232\1\u0297\17\232\1\u025c\3\232\1\u025c"+ - "\20\232\1\356\2\232\1\u01a7\30\232\1\u025c\1\232\2\u025c"+ - "\21\232\1\233\3\u016f\3\233\1\u016f\1\233\2\357\1\76"+ - "\13\233\1\357\16\233\2\u016f\3\233\1\u016f\1\233\1\u016f"+ - "\1\233\1\u016f\2\233\1\u016f\1\233\4\u016f\2\233\1\u016f"+ - "\1\233\1\u016f\14\233\11\256\2\125\1\126\13\256\1\125"+ - "\15\256\1\u0298\54\256\2\125\1\126\13\256\1\125\4\256"+ - "\1\u0299\65\256\2\125\1\126\13\256\1\125\14\256\1\u029a"+ - "\44\256\1\0\3\147\1\0\3\147\1\u029b\13\0\2\147"+ - "\1\u029c\1\147\6\0\1\151\32\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\15\147\1\u029d\14\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\2\0\3\147\1\0\3\147\14\0"+ - "\4\147\7\0\7\147\1\u0248\22\147\1\0\3\147\6\0"+ - "\1\147\2\0\2\147\1\0\10\u0230\1\u0269\3\0\2\u01f8"+ - "\10\u0230\1\u0269\1\0\61\u0230\1\0\3\u026a\1\0\3\u026a"+ - "\1\u029e\3\0\2\u029f\6\0\4\u026a\7\0\32\u026a\1\0"+ - "\3\u026a\6\0\1\u026a\2\0\2\u026a\2\0\3\u0234\1\0"+ - "\3\u0234\1\u026b\3\0\2\u0234\1\u01fc\1\0\1\u0234\1\u026b"+ - "\4\u0234\1\u026b\1\u0234\7\0\32\u0234\1\0\3\u0234\6\0"+ - "\1\u0234\2\0\2\u0234\2\0\3\u026c\1\0\3\u026c\1\u02a0"+ - "\3\0\1\u0235\1\u01fe\1\u01fc\1\0\1\u02a1\1\u0235\2\u01fe"+ - "\4\u026c\7\0\32\u026c\1\0\3\u026c\6\0\1\u026c\2\0"+ - "\2\u026c\2\0\3\u026d\1\0\3\u026d\1\u02a2\3\0\1\u0236"+ - "\3\0\1\u02a3\3\0\4\u026d\7\0\32\u026d\1\0\3\u026d"+ - "\6\0\1\u026d\2\0\2\u026d\1\0\2\u02a4\1\u02a5\2\u02a4"+ - "\2\u02a5\1\u02a4\1\u026e\3\0\10\u02a4\1\u02a5\1\u02a4\1\u026e"+ - "\1\0\7\u02a4\25\u02a5\4\u02a4\1\u02a5\1\u02a4\3\u02a5\6\u02a4"+ - "\1\u02a5\2\u02a4\2\u02a5\2\u02a4\1\u02a6\1\u02a5\1\u02a6\1\u02a4"+ - "\2\u02a5\1\u02a6\1\u026e\3\0\10\u02a4\1\u02a5\1\u02a6\1\u026f"+ - "\1\147\7\u02a4\25\u02a5\4\u02a6\1\u02a5\1\u02a4\3\u02a5\6\u02a4"+ - "\1\u02a5\2\u02a4\2\u02a5\1\u02a4\10\0\1\u0270\15\0\1\u0270"+ - "\12\0\1\u02a7\5\0\1\u02a8\42\0\3\147\1\0\3\147"+ - "\1\u0270\13\0\2\147\1\u0271\1\147\7\0\2\147\1\u02a9"+ - "\5\147\1\u02aa\21\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\3\0\1\u02ab\2\0\2\u02ab\1\0\1\u0272\13\0"+ - "\1\u02ab\1\0\1\u0272\10\0\25\u02ab\4\0\1\u02ab\1\0"+ - "\3\u02ab\6\0\1\u02ab\2\0\2\u02ab\2\0\1\147\1\u02ab"+ - "\1\147\1\0\2\u02ab\1\147\1\u0272\13\0\1\u02ab\1\147"+ - "\1\u0273\1\147\7\0\25\u02ab\4\147\1\u02ab\1\0\3\u02ab"+ - "\6\0\1\u02ab\2\0\2\u02ab\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\6\147\1\u02ac\23\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\7\147\1\u02ad\22\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\14\0\4\147\7\0\7\147\1\u02ae\22\147\1\0\3\147"+ - "\6\0\1\147\2\0\2\147\2\0\3\147\1\0\3\147"+ - "\1\u02af\13\0\2\147\1\u02b0\1\147\7\0\32\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\1\0\10\u0240\1\u0278"+ - "\3\0\1\u0208\11\u0240\1\u0278\1\0\61\u0240\1\0\3\u0279"+ - "\1\0\3\u0279\1\u02b1\3\0\1\u02b2\7\0\4\u0279\7\0"+ - "\32\u0279\1\0\3\u0279\6\0\1\u0279\2\0\2\u0279\2\0"+ - "\3\u027a\1\0\3\u027a\1\u02b3\3\0\1\u02b4\1\0\1\u02b5"+ - "\1\0\1\u02b6\3\0\2\u027a\1\u02b7\1\u027a\7\0\32\u027a"+ - "\1\0\3\u027a\6\0\1\u027a\2\0\2\u027a\2\0\3\u02b8"+ - "\1\0\4\u02b8\3\0\2\u02b8\2\0\10\u02b8\7\0\32\u02b8"+ - "\1\0\3\u02b8\6\0\1\u02b8\2\0\2\u02b8\2\0\3\u027c"+ - "\1\0\3\u027c\1\u02b3\3\0\1\u02b4\1\0\1\u02b5\1\0"+ - "\1\u02b6\3\0\2\u027c\1\u02b9\1\u027c\7\0\32\u027c\1\0"+ - "\3\u027c\6\0\1\u027c\2\0\2\u027c\2\0\3\u027d\1\0"+ - "\4\u027d\3\0\2\u027d\2\0\1\u027d\1\u02ba\6\u027d\7\0"+ - "\32\u027d\1\0\3\u027d\6\0\1\u027d\2\0\2\u027d\1\0"+ - "\10\u0249\1\u027e\3\0\12\u0249\1\u027e\1\0\62\u0249\3\u024c"+ - "\1\u0249\3\u024c\1\u027e\3\0\10\u0249\2\u024c\1\u027f\1\147"+ - "\7\u0249\32\u024c\1\u0249\3\u024c\6\u0249\1\u024c\2\u0249\2\u024c"+ - "\1\u0249\6\0\1\u02bb\30\0\1\u02bc\1\u02bd\1\u02be\2\0"+ - "\1\u02bf\1\0\1\u02c0\1\u02c1\1\0\1\u02c2\2\0\1\u02c3"+ - "\1\u02c4\1\u02c5\2\0\1\u02c6\1\u02c7\74\0\1\u02c8\110\0"+ - "\1\u02c9\101\0\1\u02ca\70\0\1\u02cb\71\0\11\u0254\2\357"+ - "\1\76\13\u0254\1\357\1\u0254\1\u0287\1\u012f\1\u0288\1\u012f"+ - "\1\u0254\1\u012f\56\u0254\1\u0286\4\u0254\2\357\1\76\13\u0254"+ - "\1\357\1\u01e1\1\u012f\1\357\56\u0254\4\u028b\1\u02cc\4\u028b"+ - "\2\357\1\76\13\u028b\1\357\2\u028b\1\u0289\1\u012f\55\u028b"+ - "\13\357\1\76\15\357\1\u012e\1\u012f\1\u0255\1\233\1\357"+ - "\1\233\52\357\3\u0289\1\u02cd\1\u02ce\1\u0289\1\u02cf\1\u02d0"+ - "\1\u0289\2\357\1\76\13\u0289\1\357\1\u0289\1\u012e\1\u028b"+ - "\1\u02d1\1\u016f\1\u0289\1\u016f\25\u0289\1\u02cd\1\u0289\1\u02d0"+ - "\1\u02cd\21\u0289\4\u012f\1\u016e\4\u012f\2\357\1\76\13\u012f"+ - "\1\357\2\u012f\1\357\1\u0254\55\u012f\4\u016d\1\u028c\1\u016d"+ - "\1\u028d\2\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\61\u016d"+ - "\3\u028e\3\u016d\1\u028e\1\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6"+ - "\1\u01a8\15\u016d\2\u028e\3\u016d\1\u028e\1\u016d\1\u028e\1\u016d"+ - "\1\u028e\2\u016d\1\u028e\1\u016d\4\u028e\2\u016d\1\u028e\1\u016d"+ - "\1\u028e\15\u016d\3\u02d2\3\u016d\1\u02d2\1\u016d\2\u01a6\1\u01a7"+ - "\13\u016d\1\u01a6\1\u01a8\15\u016d\2\u02d2\3\u016d\1\u02d2\1\u016d"+ - "\1\u02d2\1\u016d\1\u02d2\2\u016d\1\u02d2\1\u016d\4\u02d2\2\u016d"+ - "\1\u02d2\1\u016d\1\u02d2\14\u016d\11\u025a\3\76\13\u025a\1\76"+ - "\1\u025a\1\u0290\1\230\1\u0291\1\230\1\u025a\1\230\56\u025a"+ - "\1\u028f\4\u025a\3\76\13\u025a\1\76\1\u01e5\1\u012f\1\76"+ - "\56\u025a\4\u0294\1\u02d3\4\u0294\3\0\13\u0294\1\0\2\u0294"+ - "\1\u0292\1\230\55\u0294\31\76\1\227\1\230\1\u025b\1\0"+ - "\1\76\1\0\52\76\3\u0292\1\u02d4\1\u02d5\1\u0292\1\u02d6"+ - "\1\u02d7\1\u0292\3\76\13\u0292\1\76\1\u0292\1\227\1\u0294"+ - "\1\u02d8\1\235\1\u0292\1\235\25\u0292\1\u02d4\1\u0292\1\u02d7"+ - "\1\u02d4\21\u0292\4\230\1\234\4\230\3\0\13\230\1\0"+ - "\2\230\1\76\1\u025a\55\230\4\232\1\u0295\1\232\1\u0296"+ - "\21\232\1\356\61\232\3\u0297\3\232\1\u0297\20\232\1\356"+ - "\15\232\2\u0297\3\232\1\u0297\1\232\1\u0297\1\232\1\u0297"+ - "\2\232\1\u0297\1\232\4\u0297\2\232\1\u0297\1\232\1\u0297"+ - "\15\232\3\u02d9\3\232\1\u02d9\20\232\1\356\15\232\2\u02d9"+ - "\3\232\1\u02d9\1\232\1\u02d9\1\232\1\u02d9\2\232\1\u02d9"+ - "\1\232\4\u02d9\2\232\1\u02d9\1\232\1\u02d9\14\232\11\256"+ - "\2\125\1\126\13\256\1\125\4\256\1\u02da\54\256\11\u0299"+ - "\2\u02db\1\u02dc\13\u0299\1\u02db\61\u0299\11\256\2\125\1\126"+ - "\13\256\1\125\15\256\1\u02dd\43\256\2\u02de\1\u02df\2\u02de"+ - "\2\u02df\1\u02de\1\u029b\3\0\10\u02de\1\u02df\1\u02de\1\u029b"+ - "\1\0\7\u02de\25\u02df\4\u02de\1\u02df\1\u02de\3\u02df\6\u02de"+ - "\1\u02df\2\u02de\2\u02df\2\u02de\1\u02e0\1\u02df\1\u02e0\1\u02de"+ - "\2\u02df\1\u02e0\1\u029b\3\0\10\u02de\1\u02df\1\u02e0\1\u029c"+ - "\1\147\7\u02de\25\u02df\4\u02e0\1\u02df\1\u02de\3\u02df\6\u02de"+ - "\1\u02df\2\u02de\2\u02df\1\u02de\1\0\3\147\1\0\3\147"+ - "\1\u02e1\13\0\2\147\1\u02e1\1\147\7\0\32\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\11\0\1\u029e\3\0"+ - "\2\u029f\10\0\1\u029e\64\0\1\u026a\2\0\2\u026a\1\0"+ - "\1\u029f\13\0\1\u026a\1\0\1\u029f\10\0\25\u026a\4\0"+ - "\1\u026a\1\0\3\u026a\6\0\1\u026a\2\0\2\u026a\2\0"+ - "\3\u01fe\1\0\3\u01fe\1\u02a0\3\0\1\u0235\1\u01fe\1\u01fc"+ - "\1\0\1\u02a1\1\u0235\4\u01fe\1\u02a0\1\u01fe\7\0\32\u01fe"+ - "\1\0\3\u01fe\6\0\1\u01fe\2\0\2\u01fe\2\0\3\u02e2"+ - "\1\0\4\u02e2\3\0\2\u02e2\2\0\1\u02e2\1\u02e3\6\u02e2"+ - "\7\0\32\u02e2\1\0\3\u02e2\6\0\1\u02e2\2\0\2\u02e2"+ - "\11\0\1\u02a2\3\0\1\u0236\3\0\1\u02a3\5\0\1\u02a2"+ - "\63\0\3\u02e4\1\0\4\u02e4\3\0\2\u02e4\2\0\10\u02e4"+ - "\7\0\32\u02e4\1\0\3\u02e4\6\0\1\u02e4\2\0\2\u02e4"+ - "\1\0\11\u02a4\3\0\13\u02a4\1\0\62\u02a4\3\u02a5\1\u02a4"+ - "\3\u02a5\1\u02e5\3\0\2\u026e\6\u02a4\3\u02a5\1\u02e6\7\u02a4"+ - "\32\u02a5\1\u02a4\3\u02a5\6\u02a4\1\u02a5\2\u02a4\2\u02a5\2\u02a4"+ - "\3\u02a6\1\u02a4\3\u02a6\1\u02a4\3\0\10\u02a4\3\u02a6\1\147"+ - "\7\u02a4\32\u02a6\1\u02a4\3\u02a6\6\u02a4\1\u02a6\2\u02a4\2\u02a6"+ - "\1\u02a4\43\0\1\u02e7\120\0\1\u02e8\36\0\3\147\1\0"+ - "\3\147\14\0\4\147\7\0\4\147\1\u02e9\25\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ - "\3\147\14\0\4\147\7\0\14\147\1\u02ea\15\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\u02ab\1\0"+ - "\3\u02ab\1\u02eb\13\0\4\u02ab\7\0\32\u02ab\1\0\3\u02ab"+ - "\6\0\1\u02ab\2\0\2\u02ab\2\0\3\147\1\0\3\147"+ - "\1\u02ec\13\0\2\147\1\u02ed\1\147\6\0\1\151\32\147"+ - "\1\0\3\147\6\0\1\147\2\0\2\147\1\0\2\u02ee"+ - "\1\u02ef\2\u02ee\2\u02ef\1\u02ee\1\u02af\3\0\10\u02ee\1\u02ef"+ - "\1\u02ee\1\u02af\1\0\7\u02ee\25\u02ef\4\u02ee\1\u02ef\1\u02ee"+ - "\3\u02ef\6\u02ee\1\u02ef\2\u02ee\2\u02ef\2\u02ee\1\u02f0\1\u02ef"+ - "\1\u02f0\1\u02ee\2\u02ef\1\u02f0\1\u02af\3\0\10\u02ee\1\u02ef"+ - "\1\u02f0\1\u02b0\1\147\7\u02ee\25\u02ef\4\u02f0\1\u02ef\1\u02ee"+ - "\3\u02ef\6\u02ee\1\u02ef\2\u02ee\2\u02ef\1\u02ee\10\0\1\u02b1"+ - "\3\0\1\u02b2\11\0\1\u02b1\64\0\1\u0279\2\0\2\u0279"+ - "\1\0\1\u02b2\13\0\1\u0279\1\0\1\u02b2\10\0\25\u0279"+ - "\4\0\1\u0279\1\0\3\u0279\6\0\1\u0279\2\0\2\u0279"+ - "\11\0\1\u02b3\3\0\1\u02b4\1\0\1\u02b5\1\0\1\u02b6"+ - "\5\0\1\u02b3\64\0\1\u027a\2\0\2\u027a\1\0\1\u02b4"+ - "\13\0\1\u027a\1\0\1\u02b4\10\0\25\u027a\4\0\1\u027a"+ - "\1\0\3\u027a\6\0\1\u027a\2\0\2\u027a\11\0\1\u02b5"+ - "\6\0\1\u02f1\6\0\1\u02b5\63\0\3\u02f2\1\0\4\u02f2"+ - "\3\0\2\u02f2\2\0\10\u02f2\7\0\32\u02f2\1\0\3\u02f2"+ - "\6\0\1\u02f2\2\0\2\u02f2\2\0\3\u02b8\1\0\4\u02b8"+ - "\3\0\2\u02b8\2\0\1\u02b8\1\u02f3\6\u02b8\7\0\32\u02b8"+ - "\1\0\3\u02b8\6\0\1\u02b8\2\0\2\u02b8\2\0\3\u027d"+ - "\1\0\3\u027d\1\u02ba\3\0\2\u027d\2\0\1\u027d\1\u02ba"+ - "\4\u027d\1\u02ba\1\u027d\7\0\32\u027d\1\0\3\u027d\6\0"+ - "\1\u027d\2\0\2\u027d\41\0\1\u02f4\20\0\1\u02f5\67\0"+ - "\1\u02f6\114\0\1\u02f7\103\0\1\u02f8\112\0\1\u02f9\107\0"+ - "\1\u02fa\107\0\1\u02fb\4\0\1\u02fc\103\0\1\u02fd\4\0"+ - "\1\u02fe\1\0\1\u02ff\50\0\1\u0300\32\0\1\u0301\17\0"+ - "\1\u0302\35\0\1\u0303\35\0\1\u0304\110\0\1\u0305\6\0"+ - "\1\u0306\100\0\1\u0307\7\0\1\u0308\103\0\1\u0309\4\0"+ - "\1\u030a\142\0\1\u030b\110\0\1\u030c\66\0\1\u030d\25\0"+ - "\3\u028b\1\u030e\1\u030f\1\u028b\1\u0310\1\u0311\1\u028b\2\357"+ - "\1\76\13\u028b\1\357\34\u028b\1\u030e\1\u028b\1\u0311\1\u030e"+ - "\21\u028b\3\357\1\u0289\3\357\1\u0289\3\357\1\76\15\357"+ - "\1\u012e\1\u012f\1\u0255\1\233\1\357\1\233\25\357\1\u0289"+ - "\1\357\2\u0289\25\357\1\u0312\1\357\1\u0313\4\357\1\76"+ - "\15\357\1\u012e\1\u012f\1\u0255\1\233\1\357\1\233\53\357"+ - "\3\u0314\3\357\1\u0314\3\357\1\76\15\357\1\u012e\1\u012f"+ - "\1\u0255\1\233\1\357\1\233\7\357\2\u0314\3\357\1\u0314"+ - "\1\357\1\u0314\1\357\1\u0314\2\357\1\u0314\1\357\4\u0314"+ - "\2\357\1\u0314\1\357\1\u0314\17\357\1\u02cd\3\357\1\u02cd"+ - "\3\357\1\76\15\357\1\u012e\1\u012f\1\u0255\1\233\1\357"+ - "\1\233\25\357\1\u02cd\1\357\2\u02cd\21\357\4\u016f\1\u0170"+ - "\4\u016f\2\357\1\76\13\u016f\1\357\3\u016f\1\357\55\u016f"+ - "\1\u016d\3\u0315\3\u016d\1\u0315\1\u016d\2\u01a6\1\u01a7\13\u016d"+ - "\1\u01a6\1\u01a8\15\u016d\2\u0315\3\u016d\1\u0315\1\u016d\1\u0315"+ - "\1\u016d\1\u0315\2\u016d\1\u0315\1\u016d\4\u0315\2\u016d\1\u0315"+ - "\1\u016d\1\u0315\14\u016d\3\u0294\1\u0316\1\u0317\1\u0294\1\u0318"+ - "\1\u0319\1\u0294\3\0\13\u0294\1\0\34\u0294\1\u0316\1\u0294"+ - "\1\u0319\1\u0316\21\u0294\3\76\1\u0292\3\76\1\u0292\21\76"+ - "\1\227\1\230\1\u025b\1\0\1\76\1\0\25\76\1\u0292"+ - "\1\76\2\u0292\25\76\1\u031a\1\76\1\u031b\22\76\1\227"+ - "\1\230\1\u025b\1\0\1\76\1\0\53\76\3\u031c\3\76"+ - "\1\u031c\21\76\1\227\1\230\1\u025b\1\0\1\76\1\0"+ - "\7\76\2\u031c\3\76\1\u031c\1\76\1\u031c\1\76\1\u031c"+ - "\2\76\1\u031c\1\76\4\u031c\2\76\1\u031c\1\76\1\u031c"+ - "\17\76\1\u02d4\3\76\1\u02d4\21\76\1\227\1\230\1\u025b"+ - "\1\0\1\76\1\0\25\76\1\u02d4\1\76\2\u02d4\21\76"+ - "\4\235\1\236\4\235\3\0\13\235\1\0\3\235\1\76"+ - "\55\235\1\232\3\u031d\3\232\1\u031d\20\232\1\356\15\232"+ - "\2\u031d\3\232\1\u031d\1\232\1\u031d\1\232\1\u031d\2\232"+ - "\1\u031d\1\232\4\u031d\2\232\1\u031d\1\232\1\u031d\14\232"+ - "\11\u02da\2\u031e\1\u031f\13\u02da\1\u031e\61\u02da\11\256\2\125"+ - "\1\126\13\256\1\125\4\256\1\u0320\54\256\11\u02de\3\0"+ - "\13\u02de\1\0\62\u02de\3\u02df\1\u02de\3\u02df\1\u0321\3\0"+ - "\2\u029b\6\u02de\3\u02df\1\u0322\7\u02de\32\u02df\1\u02de\3\u02df"+ - "\6\u02de\1\u02df\2\u02de\2\u02df\2\u02de\3\u02e0\1\u02de\3\u02e0"+ - "\1\u02de\3\0\10\u02de\3\u02e0\1\147\7\u02de\32\u02e0\1\u02de"+ - "\3\u02e0\6\u02de\1\u02e0\2\u02de\2\u02e0\1\u02de\13\u02e1\1\0"+ - "\75\u02e1\1\0\3\u02e2\1\0\4\u02e2\3\0\2\u02e2\2\0"+ - "\1\u02e2\1\u0323\6\u02e2\7\0\32\u02e2\1\0\3\u02e2\6\0"+ - "\1\u02e2\2\0\2\u02e2\2\0\1\u02e2\1\u0324\1\u02e2\1\0"+ - "\2\u0324\1\u02e2\1\u02e3\3\0\2\u02e2\2\0\1\u02e2\1\u0323"+ - "\2\u02e2\1\u0324\1\u02e2\1\u02e3\1\u02e2\7\0\25\u0324\4\u02e2"+ - "\1\u0324\1\0\3\u0324\6\0\1\u0324\2\0\2\u0324\2\0"+ - "\3\u02e4\1\0\4\u02e4\3\0\2\u02e4\2\0\1\u02e4\1\u0325"+ - "\6\u02e4\7\0\32\u02e4\1\0\3\u02e4\6\0\1\u02e4\2\0"+ - "\2\u02e4\1\0\10\u02a4\1\u02e5\3\0\2\u026e\10\u02a4\1\u02e5"+ - "\1\0\61\u02a4\1\0\3\u02e6\1\0\3\u02e6\1\u0326\3\0"+ - "\2\u0327\6\0\4\u02e6\7\0\32\u02e6\1\0\3\u02e6\6\0"+ - "\1\u02e6\2\0\2\u02e6\7\0\1\u0328\153\0\1\u0329\40\0"+ - "\3\147\1\0\1\147\1\u032a\1\147\14\0\4\147\7\0"+ - "\32\147\1\0\3\147\6\0\1\147\2\0\2\147\2\0"+ - "\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u032b"+ - "\17\147\1\0\3\147\6\0\1\147\2\0\2\147\11\0"+ - "\1\u02eb\15\0\1\u02eb\62\0\2\u032c\1\u032d\2\u032c\2\u032d"+ - "\1\u032c\1\u02ec\3\0\10\u032c\1\u032d\1\u032c\1\u02ec\1\0"+ - "\7\u032c\25\u032d\4\u032c\1\u032d\1\u032c\3\u032d\6\u032c\1\u032d"+ - "\2\u032c\2\u032d\2\u032c\1\u032e\1\u032d\1\u032e\1\u032c\2\u032d"+ - "\1\u032e\1\u02ec\3\0\10\u032c\1\u032d\1\u032e\1\u02ed\1\147"+ - "\7\u032c\25\u032d\4\u032e\1\u032d\1\u032c\3\u032d\6\u032c\1\u032d"+ - "\2\u032c\2\u032d\1\u032c\11\u02ee\3\0\13\u02ee\1\0\62\u02ee"+ - "\3\u02ef\1\u02ee\3\u02ef\1\u032f\3\0\1\u02af\7\u02ee\3\u02ef"+ - "\1\u0330\7\u02ee\32\u02ef\1\u02ee\3\u02ef\6\u02ee\1\u02ef\2\u02ee"+ - "\2\u02ef\2\u02ee\3\u02f0\1\u02ee\3\u02f0\1\u02ee\3\0\10\u02ee"+ - "\3\u02f0\1\147\7\u02ee\32\u02f0\1\u02ee\3\u02f0\6\u02ee\1\u02f0"+ - "\2\u02ee\2\u02f0\1\u02ee\10\0\1\u0331\5\0\1\u02b5\7\0"+ - "\1\u0331\63\0\3\u02f2\1\0\4\u02f2\3\0\2\u02f2\2\0"+ - "\1\u02f2\1\u0332\6\u02f2\7\0\32\u02f2\1\0\3\u02f2\6\0"+ - "\1\u02f2\2\0\2\u02f2\2\0\1\u02b8\1\u0333\1\u02b8\1\0"+ - "\2\u0333\1\u02b8\1\u02f3\3\0\2\u02b8\2\0\1\u02b8\1\u02f3"+ - "\2\u02b8\1\u0333\1\u02b8\1\u02f3\1\u02b8\7\0\25\u0333\4\u02b8"+ - "\1\u0333\1\0\3\u0333\6\0\1\u0333\2\0\2\u0333\54\0"+ - "\1\u0334\116\0\1\u0335\66\0\1\u0336\111\0\1\u0337\111\0"+ - "\1\u0338\111\0\1\u0339\123\0\1\u033a\4\0\1\u033b\66\0"+ - "\1\u033c\113\0\1\u033d\105\0\1\u033e\115\0\1\u033f\104\0"+ - "\1\u0340\112\0\1\u0341\120\0\1\u0342\110\0\1\u0343\100\0"+ - "\1\u0344\105\0\1\u0345\15\0\1\u0346\114\0\1\u0347\67\0"+ - "\1\u0348\106\0\1\u0349\114\0\1\u034a\122\0\1\u034b\107\0"+ - "\1\u034c\53\0\1\u034d\110\0\1\u034e\130\0\1\u034f\51\0"+ - "\3\u012f\1\u028b\1\u016e\2\u012f\1\u028b\1\u012f\2\357\1\76"+ - "\13\u012f\1\357\2\u012f\1\357\1\u0254\30\u012f\1\u028b\1\u012f"+ - "\2\u028b\25\u012f\1\u0350\1\u012f\1\u0351\2\u012f\2\357\1\76"+ - "\13\u012f\1\357\2\u012f\1\357\1\u0254\56\u012f\3\u0352\1\u016e"+ - "\2\u012f\1\u0352\1\u012f\2\357\1\76\13\u012f\1\357\2\u012f"+ - "\1\357\1\u0254\12\u012f\2\u0352\3\u012f\1\u0352\1\u012f\1\u0352"+ - "\1\u012f\1\u0352\2\u012f\1\u0352\1\u012f\4\u0352\2\u012f\1\u0352"+ - "\1\u012f\1\u0352\17\u012f\1\u030e\1\u016e\2\u012f\1\u030e\1\u012f"+ - "\2\357\1\76\13\u012f\1\357\2\u012f\1\357\1\u0254\30\u012f"+ - "\1\u030e\1\u012f\2\u030e\21\u012f\4\357\1\u0312\1\357\1\u0313"+ - "\4\357\1\76\15\357\1\u012e\1\u012f\1\u0130\1\233\1\357"+ - "\1\233\53\357\3\u0314\3\357\1\u0314\3\357\1\76\15\357"+ - "\1\u012e\1\u012f\1\u0130\1\233\1\357\1\233\7\357\2\u0314"+ - "\3\357\1\u0314\1\357\1\u0314\1\357\1\u0314\2\357\1\u0314"+ - "\1\357\4\u0314\2\357\1\u0314\1\357\1\u0314\15\357\3\u0353"+ - "\3\357\1\u0353\3\357\1\76\15\357\1\u012e\1\u012f\1\u0130"+ - "\1\233\1\357\1\233\7\357\2\u0353\3\357\1\u0353\1\357"+ - "\1\u0353\1\357\1\u0353\2\357\1\u0353\1\357\4\u0353\2\357"+ - "\1\u0353\1\357\1\u0353\14\357\1\u016d\3\u021d\3\u016d\1\u021d"+ - "\1\u016d\2\u01a6\1\u01a7\13\u016d\1\u01a6\1\u01a8\15\u016d\2\u021d"+ - "\3\u016d\1\u021d\1\u016d\1\u021d\1\u016d\1\u021d\2\u016d\1\u021d"+ - "\1\u016d\4\u021d\2\u016d\1\u021d\1\u016d\1\u021d\14\u016d\3\230"+ - "\1\u0294\1\234\2\230\1\u0294\1\230\3\0\13\230\1\0"+ - "\2\230\1\76\1\u025a\30\230\1\u0294\1\230\2\u0294\25\230"+ - "\1\u0354\1\230\1\u0355\2\230\3\0\13\230\1\0\2\230"+ - "\1\76\1\u025a\56\230\3\u0356\1\234\2\230\1\u0356\1\230"+ - "\3\0\13\230\1\0\2\230\1\76\1\u025a\12\230\2\u0356"+ - "\3\230\1\u0356\1\230\1\u0356\1\230\1\u0356\2\230\1\u0356"+ - "\1\230\4\u0356\2\230\1\u0356\1\230\1\u0356\17\230\1\u0316"+ - "\1\234\2\230\1\u0316\1\230\3\0\13\230\1\0\2\230"+ - "\1\76\1\u025a\30\230\1\u0316\1\230\2\u0316\21\230\4\76"+ - "\1\u031a\1\76\1\u031b\22\76\1\227\1\230\1\231\1\0"+ - "\1\76\1\0\53\76\3\u031c\3\76\1\u031c\21\76\1\227"+ - "\1\230\1\231\1\0\1\76\1\0\7\76\2\u031c\3\76"+ - "\1\u031c\1\76\1\u031c\1\76\1\u031c\2\76\1\u031c\1\76"+ - "\4\u031c\2\76\1\u031c\1\76\1\u031c\15\76\3\u0357\3\76"+ - "\1\u0357\21\76\1\227\1\230\1\231\1\0\1\76\1\0"+ - "\7\76\2\u0357\3\76\1\u0357\1\76\1\u0357\1\76\1\u0357"+ - "\2\76\1\u0357\1\76\4\u0357\2\76\1\u0357\1\76\1\u0357"+ - "\14\76\1\232\3\u0224\3\232\1\u0224\20\232\1\356\15\232"+ - "\2\u0224\3\232\1\u0224\1\232\1\u0224\1\232\1\u0224\2\232"+ - "\1\u0224\1\232\4\u0224\2\232\1\u0224\1\232\1\u0224\14\232"+ - "\11\u0320\2\u0358\1\u0359\13\u0320\1\u0358\61\u0320\10\u02de\1\u0321"+ - "\3\0\2\u029b\10\u02de\1\u0321\1\0\61\u02de\1\0\3\u0322"+ - "\1\0\3\u0322\1\u035a\3\0\2\u035b\6\0\4\u0322\7\0"+ - "\32\u0322\1\0\3\u0322\6\0\1\u0322\2\0\2\u0322\2\0"+ - "\1\u02e2\1\u0324\1\u02e2\1\0\2\u0324\1\u02e2\1\u0323\3\0"+ - "\2\u02e2\1\u01fc\1\0\1\u02e2\1\u0323\2\u02e2\1\u0324\1\u02e2"+ - "\1\u0323\1\u02e2\7\0\25\u0324\4\u02e2\1\u0324\1\0\3\u0324"+ - "\6\0\1\u0324\2\0\2\u0324\2\0\3\u0324\1\0\3\u0324"+ - "\1\u035c\3\0\1\u02e3\1\u02e2\1\u01fc\1\0\1\u02e2\1\u0323"+ - "\2\u02e2\4\u0324\7\0\32\u0324\1\0\3\u0324\6\0\1\u0324"+ - "\2\0\2\u0324\2\0\3\u02e4\1\0\3\u02e4\1\u0325\3\0"+ - "\2\u02e4\2\0\1\u02e4\1\u0325\4\u02e4\1\u0325\1\u02e4\7\0"+ - "\32\u02e4\1\0\3\u02e4\6\0\1\u02e4\2\0\2\u02e4\11\0"+ - "\1\u0326\3\0\2\u0327\10\0\1\u0326\64\0\1\u02e6\2\0"+ - "\2\u02e6\1\0\1\u0327\13\0\1\u02e6\1\0\1\u0327\10\0"+ - "\25\u02e6\4\0\1\u02e6\1\0\3\u02e6\6\0\1\u02e6\2\0"+ - "\2\u02e6\47\0\1\u035d\116\0\1\u035e\35\0\3\147\1\0"+ - "\3\147\14\0\4\147\7\0\7\147\1\u035f\22\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\2\0\3\147\1\0"+ - "\3\147\14\0\4\147\7\0\15\147\1\u0360\14\147\1\0"+ - "\3\147\6\0\1\147\2\0\2\147\1\0\11\u032c\3\0"+ - "\13\u032c\1\0\62\u032c\3\u032d\1\u032c\3\u032d\1\u0361\3\0"+ - "\2\u02ec\6\u032c\3\u032d\1\u0362\7\u032c\32\u032d\1\u032c\3\u032d"+ - "\6\u032c\1\u032d\2\u032c\2\u032d\2\u032c\3\u032e\1\u032c\3\u032e"+ - "\1\u032c\3\0\10\u032c\3\u032e\1\147\7\u032c\32\u032e\1\u032c"+ - "\3\u032e\6\u032c\1\u032e\2\u032c\2\u032e\1\u032c\10\u02ee\1\u032f"+ - "\3\0\1\u02af\11\u02ee\1\u032f\1\0\61\u02ee\1\0\3\u0330"+ - "\1\0\3\u0330\1\u0363\3\0\1\u0364\7\0\4\u0330\7\0"+ - "\32\u0330\1\0\3\u0330\6\0\1\u0330\2\0\2\u0330\2\0"+ - "\3\u02f2\1\0\3\u02f2\1\u0365\3\0\2\u02f2\1\u02b5\1\0"+ - "\1\u02f2\1\u0332\4\u02f2\1\u0365\1\u02f2\7\0\32\u02f2\1\0"+ - "\3\u02f2\6\0\1\u02f2\2\0\2\u02f2\2\0\3\u0333\1\0"+ - "\3\u0333\1\u0366\3\0\1\u02f3\1\u02b8\1\u02b5\1\0\1\u0367"+ - "\1\u02f3\2\u02b8\2\u0333\1\u0368\1\u0333\7\0\32\u0333\1\0"+ - "\3\u0333\6\0\1\u0333\2\0\2\u0333\55\0\1\u0369\102\0"+ - "\1\u036a\103\0\1\u036b\155\0\1\u036c\53\0\1\u036d\105\0"+ - "\1\u036e\113\0\1\u036f\145\0\1\u0370\55\0\1\u0371\113\0"+ - "\1\u0372\100\0\1\u0373\110\0\1\u0374\103\0\1\u0375\112\0"+ - "\1\u0376\110\0\1\u0377\122\0\1\u0378\76\0\1\u0379\105\0"+ - "\1\u037a\1\u037b\126\0\1\u037c\70\0\1\u037d\113\0\1\u037e"+ - "\120\0\1\u037f\111\0\1\u0380\74\0\1\u0381\113\0\1\u0382"+ - "\107\0\1\u0383\47\0\4\u012f\1\u0384\1\u012f\1\u0351\2\u012f"+ - "\2\357\1\76\13\u012f\1\357\62\u012f\3\u0352\1\u016e\2\u012f"+ - "\1\u0352\1\u012f\2\357\1\76\13\u012f\1\357\2\u012f\1\357"+ - "\13\u012f\2\u0352\3\u012f\1\u0352\1\u012f\1\u0352\1\u012f\1\u0352"+ - "\2\u012f\1\u0352\1\u012f\4\u0352\2\u012f\1\u0352\1\u012f\1\u0352"+ - "\15\u012f\3\u0385\1\u016e\2\u012f\1\u0385\1\u012f\2\357\1\76"+ - "\13\u012f\1\357\2\u012f\1\357\13\u012f\2\u0385\3\u012f\1\u0385"+ - "\1\u012f\1\u0385\1\u012f\1\u0385\2\u012f\1\u0385\1\u012f\4\u0385"+ - "\2\u012f\1\u0385\1\u012f\1\u0385\14\u012f\1\357\3\u0386\3\357"+ - "\1\u0386\3\357\1\76\15\357\1\u012e\1\u012f\1\u0130\1\233"+ - "\1\357\1\233\7\357\2\u0386\3\357\1\u0386\1\357\1\u0386"+ - "\1\357\1\u0386\2\357\1\u0386\1\357\4\u0386\2\357\1\u0386"+ - "\1\357\1\u0386\14\357\4\230\1\u0387\1\230\1\u0355\2\230"+ - "\3\0\13\230\1\0\62\230\3\u0356\1\234\2\230\1\u0356"+ - "\1\230\3\0\13\230\1\0\2\230\1\76\13\230\2\u0356"+ - "\3\230\1\u0356\1\230\1\u0356\1\230\1\u0356\2\230\1\u0356"+ - "\1\230\4\u0356\2\230\1\u0356\1\230\1\u0356\15\230\3\u0388"+ - "\1\234\2\230\1\u0388\1\230\3\0\13\230\1\0\2\230"+ - "\1\76\13\230\2\u0388\3\230\1\u0388\1\230\1\u0388\1\230"+ - "\1\u0388\2\230\1\u0388\1\230\4\u0388\2\230\1\u0388\1\230"+ - "\1\u0388\14\230\1\76\3\u0389\3\76\1\u0389\21\76\1\227"+ - "\1\230\1\231\1\0\1\76\1\0\7\76\2\u0389\3\76"+ - "\1\u0389\1\76\1\u0389\1\76\1\u0389\2\76\1\u0389\1\76"+ - "\4\u0389\2\76\1\u0389\1\76\1\u0389\14\76\10\0\1\u035a"+ - "\3\0\2\u035b\10\0\1\u035a\64\0\1\u0322\2\0\2\u0322"+ - "\1\0\1\u035b\13\0\1\u0322\1\0\1\u035b\10\0\25\u0322"+ - "\4\0\1\u0322\1\0\3\u0322\6\0\1\u0322\2\0\2\u0322"+ - "\2\0\3\u02e2\1\0\3\u02e2\1\u035c\3\0\1\u02e3\1\u02e2"+ - "\1\u01fc\1\0\1\u02e2\1\u0323\4\u02e2\1\u035c\1\u02e2\7\0"+ - "\32\u02e2\1\0\3\u02e2\6\0\1\u02e2\2\0\2\u02e2\47\0"+ - "\1\u038a\43\0\3\147\1\0\3\147\14\0\4\147\7\0"+ - "\7\147\1\u038b\22\147\1\0\3\147\6\0\1\147\2\0"+ - "\2\147\1\0\10\u032c\1\u0361\3\0\2\u02ec\10\u032c\1\u0361"+ - "\1\0\61\u032c\1\0\3\u0362\1\0\3\u0362\1\u038c\3\0"+ - "\2\u038d\6\0\4\u0362\7\0\32\u0362\1\0\3\u0362\6\0"+ - "\1\u0362\2\0\2\u0362\11\0\1\u0363\3\0\1\u0364\11\0"+ - "\1\u0363\64\0\1\u0330\2\0\2\u0330\1\0\1\u0364\13\0"+ - "\1\u0330\1\0\1\u0364\10\0\25\u0330\4\0\1\u0330\1\0"+ - "\3\u0330\6\0\1\u0330\2\0\2\u0330\2\0\3\u02b8\1\0"+ - "\3\u02b8\1\u0366\3\0\1\u02f3\1\u02b8\1\u02b5\1\0\1\u0367"+ - "\1\u02f3\4\u02b8\1\u0366\1\u02b8\7\0\32\u02b8\1\0\3\u02b8"+ - "\6\0\1\u02b8\2\0\2\u02b8\2\0\3\u038e\1\0\4\u038e"+ - "\3\0\2\u038e\2\0\1\u038e\1\u038f\6\u038e\7\0\32\u038e"+ - "\1\0\3\u038e\6\0\1\u038e\2\0\2\u038e\55\0\1\u0390"+ - "\77\0\1\u0391\104\0\1\u0392\125\0\1\u0393\102\0\1\u0394"+ - "\105\0\1\u0395\111\0\1\u0396\125\0\1\u0397\100\0\1\u0398"+ - "\112\0\1\u0399\143\0\1\u039a\45\0\1\u039b\113\0\1\u039c"+ - "\106\0\1\u039d\105\0\1\u039e\115\0\1\u039f\110\0\1\u03a0"+ - "\110\0\1\u03a1\105\0\1\u03a2\104\0\1\u03a3\120\0\1\u03a4"+ - "\147\0\1\u03a5\55\0\1\u03a6\120\0\1\u03a7\103\0\1\u03a8"+ - "\140\0\1\u03a9\107\0\1\u03aa\3\0\4\u012f\1\u0350\1\u012f"+ - "\1\u0351\2\u012f\2\357\1\76\13\u012f\1\357\2\u012f\1\357"+ - "\57\u012f\3\u03ab\1\u016e\2\u012f\1\u03ab\1\u012f\2\357\1\76"+ - "\13\u012f\1\357\2\u012f\1\357\13\u012f\2\u03ab\3\u012f\1\u03ab"+ - "\1\u012f\1\u03ab\1\u012f\1\u03ab\2\u012f\1\u03ab\1\u012f\4\u03ab"+ - "\2\u012f\1\u03ab\1\u012f\1\u03ab\14\u012f\1\357\3\u0289\3\357"+ - "\1\u0289\3\357\1\76\15\357\1\u012e\1\u012f\1\u0130\1\233"+ - "\1\357\1\233\7\357\2\u0289\3\357\1\u0289\1\357\1\u0289"+ - "\1\357\1\u0289\2\357\1\u0289\1\357\4\u0289\2\357\1\u0289"+ - "\1\357\1\u0289\14\357\4\230\1\u0354\1\230\1\u0355\2\230"+ - "\3\0\13\230\1\0\2\230\1\76\57\230\3\u03ac\1\234"+ - "\2\230\1\u03ac\1\230\3\0\13\230\1\0\2\230\1\76"+ - "\13\230\2\u03ac\3\230\1\u03ac\1\230\1\u03ac\1\230\1\u03ac"+ - "\2\230\1\u03ac\1\230\4\u03ac\2\230\1\u03ac\1\230\1\u03ac"+ - "\14\230\1\76\3\u0292\3\76\1\u0292\21\76\1\227\1\230"+ - "\1\231\1\0\1\76\1\0\7\76\2\u0292\3\76\1\u0292"+ - "\1\76\1\u0292\1\76\1\u0292\2\76\1\u0292\1\76\4\u0292"+ - "\2\76\1\u0292\1\76\1\u0292\14\76\10\0\1\u038c\3\0"+ - "\2\u038d\10\0\1\u038c\64\0\1\u0362\2\0\2\u0362\1\0"+ - "\1\u038d\13\0\1\u0362\1\0\1\u038d\10\0\25\u0362\4\0"+ - "\1\u0362\1\0\3\u0362\6\0\1\u0362\2\0\2\u0362\2\0"+ - "\3\u038e\1\0\4\u038e\3\0\2\u038e\2\0\1\u038e\1\u03ad"+ - "\6\u038e\7\0\32\u038e\1\0\3\u038e\6\0\1\u038e\2\0"+ - "\2\u038e\2\0\1\u038e\1\u03ae\1\u038e\1\0\2\u03ae\1\u038e"+ - "\1\u038f\3\0\2\u038e\2\0\1\u038e\1\u03ad\2\u038e\1\u03ae"+ - "\1\u038e\1\u038f\1\u038e\7\0\25\u03ae\4\u038e\1\u03ae\1\0"+ - "\3\u03ae\6\0\1\u03ae\2\0\2\u03ae\40\0\1\u03af\126\0"+ - "\1\u03b0\106\0\1\u03b1\116\0\1\u03b2\104\0\1\u03b3\141\0"+ - "\1\u03b4\56\0\1\u03b5\42\0\1\u03b6\210\0\1\u03b7\43\0"+ - "\1\u03b8\123\0\1\u03b9\111\0\1\u03ba\76\0\1\u03bb\130\0"+ - "\1\u03bc\133\0\1\u03bd\110\0\1\u03be\42\0\1\u03bf\125\0"+ - "\1\u03c0\77\0\1\u03c1\104\0\1\u03c2\107\0\1\u03c3\125\0"+ - "\1\u03c4\75\0\1\u03c5\112\0\1\u03c6\120\0\1\u03c7\116\0"+ - "\1\u03c8\46\0\1\u03c9\71\0\1\u012f\3\u028b\1\u016e\2\u012f"+ - "\1\u028b\1\u012f\2\357\1\76\13\u012f\1\357\2\u012f\1\357"+ - "\13\u012f\2\u028b\3\u012f\1\u028b\1\u012f\1\u028b\1\u012f\1\u028b"+ - "\2\u012f\1\u028b\1\u012f\4\u028b\2\u012f\1\u028b\1\u012f\1\u028b"+ - "\14\u012f\1\230\3\u0294\1\234\2\230\1\u0294\1\230\3\0"+ - "\13\230\1\0\2\230\1\76\13\230\2\u0294\3\230\1\u0294"+ - "\1\230\1\u0294\1\230\1\u0294\2\230\1\u0294\1\230\4\u0294"+ - "\2\230\1\u0294\1\230\1\u0294\14\230\1\0\1\u038e\1\u03ae"+ - "\1\u038e\1\0\2\u03ae\1\u038e\1\u03ca\3\0\2\u038e\1\u02b5"+ - "\1\0\1\u038e\1\u03ad\2\u038e\1\u03ae\1\u038e\1\u03ca\1\u038e"+ - "\7\0\25\u03ae\4\u038e\1\u03ae\1\0\3\u03ae\6\0\1\u03ae"+ - "\2\0\2\u03ae\2\0\3\u03ae\1\0\3\u03ae\1\u03cb\3\0"+ - "\1\u038f\1\u038e\1\u02b5\1\0\1\u038e\1\u03ad\2\u038e\2\u03ae"+ - "\1\u03cc\1\u03ae\7\0\32\u03ae\1\0\3\u03ae\6\0\1\u03ae"+ - "\2\0\2\u03ae\64\0\1\u03cd\100\0\1\u03ce\106\0\1\u03cf"+ - "\112\0\1\u03d0\110\0\1\u03d1\75\0\1\u03d2\10\0\1\u03d3"+ - "\2\0\1\u03d4\4\0\1\u03d5\66\0\1\u03d6\111\0\1\u03d7"+ - "\157\0\1\u03d8\106\0\1\u03d9\51\0\1\u03da\115\0\1\u03db"+ - "\143\0\1\u03dc\55\0\1\u03dd\116\0\1\u03de\103\0\1\u03df"+ - "\111\0\1\u03e0\74\0\1\u03e1\120\0\1\u03e2\76\0\1\u03e3"+ - "\117\0\1\u03e4\112\0\1\u03e5\106\0\1\u03e6\115\0\1\u03e7"+ - "\106\0\1\u03e8\45\0\1\u03e9\103\0\3\u038e\1\0\3\u038e"+ - "\1\u03cb\3\0\1\u038f\1\u038e\1\u02b5\1\0\1\u038e\1\u03ad"+ - "\4\u038e\1\u03cb\1\u038e\7\0\32\u038e\1\0\3\u038e\6\0"+ - "\1\u038e\2\0\2\u038e\41\0\1\u03ea\124\0\1\u03eb\142\0"+ - "\1\u03ec\57\0\1\u03ed\107\0\1\u03ee\42\0\1\u03ef\150\0"+ - "\1\u03f0\112\0\1\u03f1\46\0\1\u03f2\142\0\1\u03f3\125\0"+ - "\1\u03f4\41\0\1\u03f5\121\0\1\u03f6\152\0\1\u03f7\103\0"+ - "\1\u03f8\74\0\1\u03f9\111\0\1\u03fa\55\0\1\u03fb\150\0"+ - "\1\u03fc\112\0\1\u03fd\104\0\1\u03fe\151\0\1\u03ff\43\0"+ - "\1\u0400\113\0\1\u0401\123\0\1\u0402\140\0\1\u0403\63\0"+ - "\1\u0404\135\0\1\u0405\42\0\1\u0406\116\0\1\u0407\110\0"+ - "\1\u0408\151\0\1\u0409\40\0\1\u040a\117\0\1\u040b\120\0"+ - "\1\u040c\73\0\1\u040d\125\0\1\u040e\72\0\1\u040f\133\0"+ - "\1\u0410\66\0\1\u0411\113\0\1\u0412\117\0\1\u0413\103\0"+ - "\1\u0414\50\0\1\u0415\150\0\1\u0416\102\0\1\u0417\131\0"+ - "\1\u0418\135\0\1\u0419\45\0\1\u041a\64\0\1\u041b\154\0"+ - "\1\u041c\133\0\1\u041d\61\0\1\u041e\37\0\1\u041f\144\0"+ - "\1\u0420\130\0\1\u0421\103\0\1\u0422\115\0\1\u0423\134\0"+ - "\1\u0424\10\0\1\u0425\142\0\1\u0426\156\0\1\u0427\61\0"+ - "\1\u0428\72\0\1\u0429\126\0\1\u042a\106\0\1\u042b\141\0"+ - "\1\u042c\10\0\1\u042d\143\0\1\u042e\112\0\1\u042f\153\0"+ - "\1\u0430\60\0\1\u0431\137\0\1\u0432\60\0\1\u0433\106\0"+ - "\1\u0434\111\0\1\u0435\142\0\1\u0436\110\0\1\u0437\53\0"+ - "\1\u0438\2\0\1\u0439\100\0\1\u043a\120\0\1\u043b\142\0"+ - "\1\u043c\41\0\1\u043d\112\0\1\u043e\154\0\1\u043f\54\0"+ - "\1\u0440\103\0\1\u0441\127\0\1\u0442\76\0\1\u0443\105\0"+ - "\1\u0444\110\0\1\u0445\106\0\1\u0446\105\0\1\u0447\125\0"+ - "\1\u0448\105\0\1\u0449\103\0\1\u044a\115\0\1\u044b\106\0"+ - "\1\u044c\116\0\1\u044d\50\0\1\u044e\132\0\1\u044f\112\0"+ - "\1\u0450\115\0\1\u0451\121\0\1\u0452\103\0\1\u0453\102\0"+ - "\1\u0454\112\0\1\u0455\111\0\1\u0456\105\0\1\u0457\116\0"+ - "\1\u0458\117\0\1\u0459\33\0\1\u045a\121\0\1\u045b\137\0"+ - "\1\u045c\103\0\1\u045d\155\0\1\u045e\50\0\1\u045f\105\0"+ - "\1\u0460\110\0\1\u0461\116\0\1\u0462\45\0\1\u0463\155\0"+ - "\1\u0464\76\0\1\u0465\155\0\1\u0466\43\0\1\u0467\115\0"+ - "\1\u0468\110\0\1\u0469\50\0\1\u046a\155\0\1\u046b\113\0"+ - "\1\u046c\40\0\1\u046d\163\0\1\u046e\70\0\1\u046f\125\0"+ - "\1\u0470\137\0\1\u0471\110\0\1\u0472\51\0\1\u0473\101\0"+ - "\1\u0474\124\0\1\u0475\76\0\1\u0476\115\0\1\u0477\120\0"+ - "\1\u0478\73\0\1\u0479\154\0\1\u047a\110\0\1\u047b\110\0"+ - "\1\u047c\56\0\1\u047d\100\0\1\u047e\104\0\1\u047f\132\0"+ - "\1\u0480\73\0\1\u0481\105\0\1\u0482\112\0\1\u0483\120\0"+ - "\1\u0484\76\0\1\u0485\126\0\1\u0486\71\0\1\u0487\123\0"+ - "\1\u0488\76\0\1\u0489\126\0\1\u048a\50\0\1\u048b\110\0"+ - "\1\u048c\152\0\1\u048d\70\0\1\u048e\110\0\1\u048f\110\0"+ - "\1\u0490\155\0\1\u0491\55\0\1\u0492\76\0\1\u0493\66\0"+ - "\1\u0494\110\0\1\u0495\110\0\1\u0496\132\0\1\u0497\137\0"+ - "\1\u0498\64\0\1\u0499\52\0\1\u049a\145\0\1\u049b\106\0"+ - "\1\u049c\154\0\1\u049d\44\0\1\u049e\113\0\1\u049f\110\0"+ - "\1\u04a0\121\0\1\u04a1\110\0\1\u04a2\101\0\1\u04a3\106\0"+ - "\1\u04a4\117\0\1\u04a5\143\0\1\u04a6\41\0\1\u04a7\117\0"+ - "\1\u04a8\123\0\1\u04a9\72\0\1\u04aa\113\0\1\u04ab\101\0"+ - "\1\u04ac\156\0\1\u04ad\43\0\1\u04ae\110\0\1\u04af\155\0"+ - "\1\u04b0\51\0\1\u04b1\61\0\1\u04b2\130\0\1\u04b3\114\0"+ - "\1\u04b4\116\0\1\u04b5\100\0\1\u04b6\106\0\1\u04b7\114\0"+ - "\1\u04b8\116\0\1\u04b9\102\0\1\u04ba\105\0\1\u04bb\114\0"+ - "\1\u04bc\107\0\1\u04bd\53\0\1\u04be\172\0\1\u04bf\63\0"+ - "\1\u04c0\111\0\1\u04c1\63\0\1\u04c2\176\0\1\u04c3\60\0"+ - "\1\u04c4\52\0\1\u04c5\134\0\1\u04c6\111\0\1\u04c7\151\0"+ - "\1\u04c8\110\0\1\u04c9\11\0\1\u04ca\142\0\1\u04cb\155\0"+ - "\1\u04cc\110\0\1\u04cd\56\0\1\u04ce\43\0\1\u04cf\142\0"+ - "\1\u04d0\155\0\1\u04d1\43\0\1\u04d2\155\0\1\u04d3\110\0"+ - "\1\u04d4\43\0\1\u04d5\67\0\1\u04d6\132\0\1\u04d7\154\0"+ - "\1\u04d8\43\0\1\u04d9\67\0\1\u04da\110\0\1\u04db\144\0"+ - "\1\u04dc\120\0\1\u04dd\44\0\1\u04de\110\0\1\u04df\132\0"+ - "\1\u04e0\125\0\1\u04e1\137\0\1\u04e2\22\0\1\u04e3\146\0"+ - "\1\u04e4\52\0\1\u04e5\110\0\1\u04e6\176\0\1\u04e7\11\0"+ - "\1\u04e8\121\0\1\u04e9\176\0\1\u04ea\44\0\1\u04eb\155\0"+ - "\1\u04ec\46\0\1\u04ed\123\0\1\u04ee\50\0\1\u04ef\132\0"+ - "\1\u04f0\66\0\1\u04f1\144\0\1\u04f2\54\0\1\u04f3\130\0"+ - "\1\u04f4\127\0\1\u04f5\75\0\1\u04f6\113\0\1\u04f7\50\0"+ - "\1\u04f8\143\0\1\u04f9\113\0\1\u04fa\117\0\1\u04fb\142\0"+ - "\1\u04fc\46\0\1\u04fd\120\0\1\u04fe\74\0\1\u04ff\111\0"+ - "\1\u0500\113\0\1\u0501\64\0\1\u0502\176\0\1\u0503\44\0"+ - "\1\u0504\113\0\1\u0505\151\0\1\u0506\73\0\1\u0507\37\0"+ - "\1\u0508\130\0\1\u0509\111\0\1\u050a\67\0\1\u050b\176\0"+ - "\1\u050c\47\0\1\u050d\151\0\1\u050e\22\0\1\u050f\131\0"+ - "\1\u0510\67\0\1\u0511\176\0\1\u0512\22\0\1\u0513\71\0"; - - private static int [] zzUnpackTrans() { - int [] result = new int[82490]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); - } - return j; - } - - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\2\1\15\0\2\1\1\11\4\1\1\11\2\1\1\11"+ - "\15\1\2\11\4\1\1\11\2\1\2\11\1\1\1\11"+ - "\2\1\7\11\4\1\2\11\1\1\1\11\3\1\1\11"+ - "\1\1\1\11\3\1\2\11\1\1\1\11\3\1\1\11"+ - "\1\1\1\11\1\1\1\11\1\1\1\11\2\1\3\0"+ - "\2\11\1\0\1\11\1\0\2\1\1\0\15\1\3\0"+ - "\1\11\3\1\2\0\1\11\1\1\1\11\4\1\5\11"+ - "\1\0\1\1\2\0\1\11\1\1\3\0\1\11\1\1"+ - "\10\0\1\11\4\1\6\11\3\0\1\11\5\0\1\1"+ - "\1\0\1\1\1\11\1\1\1\11\2\1\1\11\35\1"+ - "\3\0\6\1\1\0\1\11\1\0\1\1\6\0\2\11"+ - "\1\0\1\1\4\0\1\11\1\0\1\1\1\11\1\1"+ - "\1\11\3\0\42\1\3\0\2\1\1\0\1\11\1\1"+ - "\15\0\1\11\1\1\3\0\46\1\2\11\1\0\2\1"+ - "\1\0\1\1\14\0\1\1\5\0\11\1\1\0\31\1"+ - "\1\11\2\1\10\0\2\1\10\0\1\1\1\11\3\0"+ - "\12\1\1\0\17\1\1\0\7\1\7\0\2\1\3\0"+ - "\1\1\6\0\1\1\1\11\4\0\13\1\4\0\22\1"+ - "\1\11\7\0\1\1\6\0\1\1\13\0\10\1\3\0"+ - "\15\1\1\0\2\1\1\0\5\1\5\0\2\11\2\1"+ - "\4\0\2\1\7\0\1\1\1\11\1\0\12\1\1\0"+ - "\1\1\1\0\7\1\2\0\1\1\1\0\2\1\3\0"+ - "\1\11\2\0\1\1\2\0\2\1\4\0\1\1\2\0"+ - "\2\1\7\0\4\1\1\0\1\1\1\0\1\1\1\0"+ - "\3\1\2\0\11\1\1\0\1\1\3\0\1\1\1\0"+ - "\2\1\20\0\1\11\1\0\4\1\3\0\4\1\3\0"+ - "\1\1\1\11\1\0\4\1\3\0\2\1\2\0\10\1"+ - "\41\0\3\1\5\0\3\1\1\0\1\1\1\11\1\0"+ - "\6\1\3\0\10\1\33\0\2\11\4\0\1\1\3\0"+ - "\2\1\1\11\1\1\1\0\1\1\1\11\1\0\5\1"+ - "\1\0\2\1\1\0\1\1\35\0\1\1\2\0\1\1"+ - "\1\11\2\1\74\0\1\11\3\1\51\0\1\11\44\0"+ - "\1\11\62\0\1\11\14\0\1\11\57\0\2\11\7\0"+ - "\3\11\33\0\1\11\17\0\1\11\2\0\1\11\20\0"+ - "\1\11\3\0\2\11\2\0\2\11\3\0\1\11\1\0"+ - "\2\11\2\0\1\11\5\0\1\11\1\0\1\11\1\0"+ - "\1\11\16\0\1\11\5\0\1\11\2\0\1\11\3\0"+ - "\1\11\1\0\1\11\1\0\1\11"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[1299]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; - - /** number of newlines encountered up to the start of the matched text */ - private int yyline; - - /** the number of characters up to the start of the matched text */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; - - /** the stack of open (nested) input streams to read from */ - private java.util.Stack zzStreams = new java.util.Stack(); - - /** - * inner class used to store info for nested - * input streams - */ - private static final class ZzFlexStreamInfo { - java.io.Reader zzReader; - int zzEndRead; - int zzStartRead; - int zzCurrentPos; - int zzMarkedPos; - int yyline; - int yycolumn; - char [] zzBuffer; - boolean zzAtEOF; - boolean zzEOFDone; - - /** sets all values stored in this class */ - ZzFlexStreamInfo(java.io.Reader zzReader, int zzEndRead, int zzStartRead, - int zzCurrentPos, int zzMarkedPos, - char [] zzBuffer, boolean zzAtEOF, int yyline, int yycolumn) { - this.zzReader = zzReader; - this.zzEndRead = zzEndRead; - this.zzStartRead = zzStartRead; - this.zzCurrentPos = zzCurrentPos; - this.zzMarkedPos = zzMarkedPos; - this.zzBuffer = zzBuffer; - this.zzAtEOF = zzAtEOF; - this.zzEOFDone = zzEOFDone; - this.yyline = yyline; - this.yycolumn = yycolumn; - } - } - - /* user code: */ - int balance = 0; - int commentbalance = 0; - int action_line = 0; - int bufferSize = 16384; - - File file; - Stack files = new Stack(); - - StringBuffer userCode = new StringBuffer(); - - String classCode; - String initCode; - String initThrow; - String eofCode; - String eofThrow; - String lexThrow; - String eofVal; - String scanErrorException; - String cupSymbol = "sym"; - - StringBuffer actionText = new StringBuffer(); - StringBuffer string = new StringBuffer(); - - boolean charCount; - boolean lineCount; - boolean columnCount; - boolean cupCompatible; - boolean cupDebug; - boolean isInteger; - boolean isIntWrap; - boolean isYYEOF; - boolean notUnix; - boolean isPublic; - boolean isFinal; - boolean isAbstract; - boolean bolUsed; - boolean standalone; - boolean debugOption; - boolean useRowMap = Options.gen_method == Options.PACK || Options.gen_method == Options.TABLE; - boolean packed = Options.gen_method == Options.PACK; - boolean caseless; - boolean inclusive_states; - boolean eofclose; - boolean emitInputStreamCtor = Options.emitInputStreamCtor; - - String isImplementing; - String isExtending; - String className = "Yylex"; - String functionName; - String tokenType; - String visibility = "public"; - - Vector /* String */ ctorArgs = new Vector(); - Vector /* String */ ctorTypes = new Vector(); - - LexicalStates states = new LexicalStates(); - - Vector actions = new Vector(); - - private int nextState; - - boolean macroDefinition; - - Timer t = new Timer(); - - public int currentLine() { - return yyline; - } - - public void setFile(File file) { - this.file = file; - } - - private Symbol symbol(int type, Object value) { - return new Symbol(type, yyline, yycolumn, value); - } - - private Symbol symbol(int type) { - return new Symbol(type, yyline, yycolumn); - } - - // updates line and column count to the beginning of the first - // non whitespace character in yytext, but leaves yyline+yycolumn - // untouched - private Symbol symbol_countUpdate(int type, Object value) { - int lc = yyline; - int cc = yycolumn; - String text = yytext(); - - for (int i=0; i < text.length(); i++) { - char c = text.charAt(i); - - if (c != '\n' && c != '\r' && c != ' ' && c != '\t' ) - return new Symbol(type, lc, cc, value); - - if (c == '\n') { - lc++; - cc = 0; - } - else - cc++; - } - - return new Symbol(type, yyline, yycolumn, value); - } - - private String makeMacroIdent() { - String matched = yytext().trim(); - return matched.substring(1, matched.length()-1).trim(); - } - - public static String conc(Object a, Object b) { - if (a == null && b == null) return null; - if (a == null) return b.toString(); - if (b == null) return a.toString(); - - return a.toString()+b.toString(); - } - - public static String concExc(Object a, Object b) { - if (a == null && b == null) return null; - if (a == null) return b.toString(); - if (b == null) return a.toString(); - - return a.toString()+", "+b.toString(); - } - - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ - public LexScan(java.io.Reader in) { - states.insert("YYINITIAL", true); - this.zzReader = in; - } - - /** - * Creates a new scanner. - * There is also java.io.Reader version of this constructor. - * - * @param in the java.io.Inputstream to read input from. - */ - public LexScan(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 1788) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; - } - - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); - - if (numRead > 0) { - zzEndRead+= numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0) - return true; - } - - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - - /** - * Stores the current input stream on a stack, and - * reads from a new stream. Lexical state, line, - * char, and column counting remain untouched. - * - * The current input stream can be restored with - * yypopstream (usually in an <> action). - * - * @param reader the new input stream to read from - * - * @see #yypopStream() - */ - public final void yypushStream(java.io.Reader reader) { - zzStreams.push( - new ZzFlexStreamInfo(zzReader, zzEndRead, zzStartRead, zzCurrentPos, - zzMarkedPos, zzBuffer, zzAtEOF, - yyline, yycolumn) - ); - zzAtEOF = false; - zzBuffer = new char[ZZ_BUFFERSIZE]; - zzReader = reader; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yycolumn = 0; - } - - - /** - * Closes the current input stream and continues to - * read from the one on top of the stream stack. - * - * @throws java.util.EmptyStackException - * if there is no further stream to read from. - * - * @throws java.io.IOException - * if there was an error in closing the stream. - * - * @see #yypushStream(java.io.Reader) - */ - public final void yypopStream() throws java.io.IOException { - zzReader.close(); - ZzFlexStreamInfo s = (ZzFlexStreamInfo) zzStreams.pop(); - zzBuffer = s.zzBuffer; - zzReader = s.zzReader; - zzEndRead = s.zzEndRead; - zzStartRead = s.zzStartRead; - zzCurrentPos = s.zzCurrentPos; - zzMarkedPos = s.zzMarkedPos ; - zzAtEOF = s.zzAtEOF; - zzEOFDone = s.zzEOFDone; - yyline = s.yyline; - yycolumn = s.yycolumn; - } - - - /** - * Returns true iff there are still streams left - * to read from on the stream stack. - */ - public final boolean yymoreStreams() { - return !zzStreams.isEmpty(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * @param reader the new input stream - * - * @see #yypushStream(java.io.Reader) - * @see #yypopStream() - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - - /** - * Contains user EOF-code, which will be executed exactly once, - * when the end of file is reached - */ - private void zzDoEOF() throws java.io.IOException { - if (!zzEOFDone) { - zzEOFDone = true; - yyclose(); - } - } - - - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public Symbol next_token() throws java.io.IOException { - int zzInput; - int zzAction; - - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; - - while (true) { - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL = zzMarkedPos; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - - boolean zzR = false; - for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL; - zzCurrentPosL++) { - switch (zzBufferL[zzCurrentPosL]) { - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - yyline++; - yycolumn = 0; - zzR = false; - break; - case '\r': - yyline++; - yycolumn = 0; - zzR = true; - break; - case '\n': - if (zzR) - zzR = false; - else { - yyline++; - yycolumn = 0; - } - break; - default: - zzR = false; - yycolumn++; - } - } - - if (zzR) { - // peek one character ahead if it is \n (if we have counted one line too much) - boolean zzPeek; - if (zzMarkedPosL < zzEndReadL) - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - else if (zzAtEOF) - zzPeek = false; - else { - boolean eof = zzRefill(); - zzEndReadL = zzEndRead; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - if (eof) - zzPeek = false; - else - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - } - if (zzPeek) yyline--; - } - if (zzMarkedPosL > zzStartRead) { - switch (zzBufferL[zzMarkedPosL-1]) { - case '\n': - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - zzAtBOL = true; - break; - case '\r': - if (zzMarkedPosL < zzEndReadL) - zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; - else if (zzAtEOF) - zzAtBOL = false; - else { - boolean eof = zzRefill(); - zzMarkedPosL = zzMarkedPos; - zzEndReadL = zzEndRead; - zzBufferL = zzBuffer; - if (eof) - zzAtBOL = false; - else - zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; - } - break; - default: - zzAtBOL = false; - } - } - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - if (zzAtBOL) - zzState = ZZ_LEXSTATE[zzLexicalState+1]; - else - zzState = ZZ_LEXSTATE[zzLexicalState]; - - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 118: - { cupDebug = true; - } - case 177: break; - case 175: - { return symbol(UNICODE_FINAL_QUOTE_PUNCTUATION); - } - case 178: break; - case 168: - { return symbol(UNICODE_DASH_PUNCTUATION); - } - case 179: break; - case 122: - { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE); - } - case 180: break; - case 113: - { File f = new File(yytext().substring(9).trim()); - if ( !f.canRead() ) - throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); - // check for cycle - if (files.search(f) > 0) - throw new ScannerException(file,ErrorMessages.FILE_CYCLE, yyline); - try { - yypushStream( new FileReader(f) ); - files.push(file); - file = f; - Out.println("Including \""+file+"\""); - } - catch (FileNotFoundException e) { - throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); - } - } - case 181: break; - case 88: - { return symbol(FULL); - } - case 182: break; - case 158: - { return symbol(UNICODE_LINE_SEPARATOR); - } - case 183: break; - case 92: - { return symbol(ASCII); - } - case 184: break; - case 21: - { string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT); - } - case 185: break; - case 142: - { return symbol(UPPERCLASS); - } - case 186: break; - case 34: - { return symbol(COMMA); - } - case 187: break; - case 61: - { return symbol(CHAR,new Character('\f')); - } - case 188: break; - case 111: - { throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline); - } - case 189: break; - case 153: - { return symbol(UNICODE_OTHER_NUMBER); - } - case 190: break; - case 104: - { throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION); - } - case 191: break; - case 143: - { return symbol(LOWERCLASS); - } - case 192: break; - case 176: - { return symbol(UNICODE_INITIAL_QUOTE_PUNCTUATION); - } - case 193: break; - case 72: - { string.append('\r'); - } - case 194: break; - case 43: - { return symbol(HAT); - } - case 195: break; - case 48: - { yybegin(MACROS); ctorArgs.add(yytext().trim()); - } - case 196: break; - case 1: - { return symbol(EOF); - } - case 197: break; - case 59: - { return symbol(CHAR,new Character('\t')); - } - case 198: break; - case 145: - { eofclose = false; - } - case 199: break; - case 103: - { isPublic = true; - } - case 200: break; - case 164: - { return symbol(UNICODE_UPPERCASE_LETTER); - } - case 201: break; - case 112: - { actionText.setLength(0); yybegin(JAVA_CODE); - Symbol s = symbol_countUpdate(EOFRULE, null); - action_line = s.left+1; - return s; - } - case 202: break; - case 40: - { balance++; return symbol(OPENCLASS); - } - case 203: break; - case 147: - { return symbol(UNICODE_FORMAT); - } - case 204: break; - case 11: - { yybegin(REGEXP); - } - case 205: break; - case 12: - { yybegin(STATES); return symbol_countUpdate(LESSTHAN, null); - } - case 206: break; - case 68: - { string.append( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8)); - } - case 207: break; - case 62: - { return symbol(CHAR,new Character('\b')); - } - case 208: break; - case 39: - { throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn); - } - case 209: break; - case 5: - { states.insert(yytext(),inclusive_states); - } - case 210: break; - case 70: - { string.append('\n'); - } - case 211: break; - case 10: - { yybegin(REGEXP); return symbol(EQUALS); - } - case 212: break; - case 146: - { return symbol(JLETTERDIGITCLASS); - } - case 213: break; - case 19: - { return symbol(STAR); - } - case 214: break; - case 42: - { string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT); - } - case 215: break; - case 116: - { isAbstract = true; - } - case 216: break; - case 75: - { yypushback(1); yycolumn--; return symbol(CHAR, new Character(yytext().charAt(0))); - } - case 217: break; - case 114: - { lexThrow = concExc(lexThrow,yytext().substring(8).trim()); - } - case 218: break; - case 109: - { throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline); - } - case 219: break; - case 93: - { packed = false; useRowMap = true; - } - case 220: break; - case 87: - { cupCompatible = true; - isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner"); - if (functionName == null) - functionName = "next_token"; - if (tokenType == null) - tokenType = "java_cup.runtime.Symbol"; - if (eofVal == null) - eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);"; - if (!Options.jlex) eofclose = true; - } - case 221: break; - case 171: - { return symbol(UNICODE_PARAGRAPH_SEPARATOR); - } - case 222: break; - case 30: - { bolUsed = true; return symbol(HAT); - } - case 223: break; - case 4: - { throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn); - } - case 224: break; - case 35: - { yybegin(REGEXP); return symbol(MORETHAN); - } - case 225: break; - case 100: - { packed = false; useRowMap = false; - } - case 226: break; - case 119: - { caseless = true; - } - case 227: break; - case 38: - { yybegin(nextState); return symbol(STRING, string.toString()); - } - case 228: break; - case 76: - { return symbol(REPEAT, new Integer(yytext().substring(1).trim())); - } - case 229: break; - case 13: - { return symbol_countUpdate(RBRACE, null); - } - case 230: break; - case 139: - { scanErrorException = yytext().substring(11).trim(); - } - case 231: break; - case 141: - { lexThrow = concExc(lexThrow,yytext().substring(12).trim()); - } - case 232: break; - case 84: - { return symbol(MACROUSE, yytext().substring(1,yytext().length()-1)); - } - case 233: break; - case 2: - { /* ignore */ - } - case 234: break; - case 150: - { return symbol(UNICODE_UNASSIGNED); - } - case 235: break; - case 156: - { return symbol(UNICODE_LETTER_NUMBER); - } - case 236: break; - case 127: - { throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline); - } - case 237: break; - case 47: - { throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn); - } - case 238: break; - case 161: - { return symbol(UNICODE_CURRENCY_SYMBOL); - } - case 239: break; - case 108: - { throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline); - } - case 240: break; - case 31: - { actionText.append(yytext()); - } - case 241: break; - case 83: - { string.append( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16)); - } - case 242: break; - case 174: - { return symbol(UNICODE_COMBINING_SPACING_MARK); - } - case 243: break; - case 107: - { notUnix = true; - } - case 244: break; - case 89: - { lineCount = true; - } - case 245: break; - case 136: - { initThrow = concExc(initThrow,yytext().substring(11).trim()); - } - case 246: break; - case 131: - { standalone = true; isInteger = true; - } - case 247: break; - case 52: - { nextState = MACROS; yybegin(COMMENT); - } - case 248: break; - case 25: - { return symbol(TILDE); - } - case 249: break; - case 37: - { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); - } - case 250: break; - case 110: - { className = yytext().substring(7).trim(); - } - case 251: break; - case 9: - { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); - } - case 252: break; - case 162: - { return symbol(UNICODE_MODIFIER_LETTER); - } - case 253: break; - case 55: - { nextState = REGEXPSTART; yybegin(COMMENT); - } - case 254: break; - case 173: - { return symbol(UNICODE_CONNECTOR_PUNCTUATION); - } - case 255: break; - case 16: - { return symbol(POINT); - } - case 256: break; - case 73: - { string.append('\f'); - } - case 257: break; - case 65: - { yybegin(REPEATEXP); return symbol(REPEAT, new Integer(yytext().trim().substring(1).trim())); - } - case 258: break; - case 80: - { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16))); - } - case 259: break; - case 140: - { initThrow = concExc(initThrow,string); yybegin(MACROS); - } - case 260: break; - case 135: - { eofThrow = concExc(eofThrow,string); yybegin(MACROS); - } - case 261: break; - case 71: - { string.append('\t'); - } - case 262: break; - case 67: - { string.append(yytext().charAt(1)); - } - case 263: break; - case 7: - { yybegin(MACROS); - } - case 264: break; - case 98: - { eofCode = conc(eofCode,string); yybegin(MACROS); - } - case 265: break; - case 56: - { return symbol(CHAR, new Character(yytext().charAt(1))); - } - case 266: break; - case 154: - { return symbol(UNICODE_OTHER_LETTER); - } - case 267: break; - case 28: - { return symbol(PLUS); - } - case 268: break; - case 101: - { columnCount = true; - } - case 269: break; - case 124: - { isExtending = yytext().substring(9).trim(); - } - case 270: break; - case 123: - { eofVal = string.toString(); yybegin(MACROS); - } - case 271: break; - case 36: - { string.append(yytext()); - } - case 272: break; - case 97: - { return symbol(UNICODE); - } - case 273: break; - case 152: - { return symbol(UNICODE_PRIVATE_USE); - } - case 274: break; - case 163: - { return symbol(UNICODE_MODIFIER_SYMBOL); - } - case 275: break; - case 74: - { string.append('\b'); - } - case 276: break; - case 24: - { return symbol(BANG); - } - case 277: break; - case 132: - { throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline); - } - case 278: break; - case 91: - { packed = true; useRowMap = true; - } - case 279: break; - case 26: - { return symbol(OPENBRACKET); - } - case 280: break; - case 155: - { return symbol(UNICODE_OTHER_SYMBOL); - } - case 281: break; - case 60: - { return symbol(CHAR,new Character('\r')); - } - case 282: break; - case 94: - { isFinal = true; - } - case 283: break; - case 27: - { return symbol(CLOSEBRACKET); - } - case 284: break; - case 86: - { isInteger = true; - } - case 285: break; - case 166: - { return symbol(UNICODE_TITLECASE_LETTER); - } - case 286: break; - case 20: - { return symbol(LOOKAHEAD); - } - case 287: break; - case 51: - { commentbalance++; - } - case 288: break; - case 49: - { t.start(); - yybegin(MACROS); - macroDefinition = true; - return symbol(USERCODE,userCode); - } - case 289: break; - case 44: - { return symbol(DASH); - } - case 290: break; - case 138: - { throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline); - } - case 291: break; - case 96: - { debugOption = true; - } - case 292: break; - case 64: - { nextState = REGEXP; yybegin(COMMENT); - } - case 293: break; - case 32: - { if (balance > 0) { - balance--; - actionText.append('}'); - } - else { - yybegin(REGEXPSTART); - Action a = new Action(actionText.toString(), action_line); - actions.addElement(a); - return symbol(ACTION, a); - } - } - case 294: break; - case 157: - { return symbol(UNICODE_ENCLOSING_MARK); - } - case 295: break; - case 29: - { return symbol(DOLLAR); - } - case 296: break; - case 169: - { return symbol(UNICODE_OTHER_PUNCTUATION); - } - case 297: break; - case 17: - { yybegin(CHARCLASS); return symbol(OPENCLASS); - } - case 298: break; - case 105: - { initCode = conc(initCode,string); yybegin(MACROS); - } - case 299: break; - case 69: - { string.append('\"'); - } - case 300: break; - case 137: - { isImplementing = concExc(isImplementing, yytext().substring(12).trim()); - } - case 301: break; - case 126: - { return symbol(LETTERCLASS); - } - case 302: break; - case 151: - { return symbol(UNICODE_MATH_SYMBOL); - } - case 303: break; - case 102: - { isInteger = true; - if (eofVal == null) - eofVal = "return 0;"; - eofclose = true; - } - case 304: break; - case 41: - { if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS); - } - case 305: break; - case 77: - { string.setLength(0); yybegin(COPY); - } - case 306: break; - case 8: - { return symbol(IDENT, yytext()); - } - case 307: break; - case 121: - { return symbol(DIGITCLASS); - } - case 308: break; - case 144: - { lexThrow = concExc(lexThrow,string); yybegin(MACROS); - } - case 309: break; - case 53: - { Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1); - } - case 310: break; - case 23: - { return symbol(BAR); - } - case 311: break; - case 148: - { return symbol(UNICODE_CONTROL); - } - case 312: break; - case 45: - { throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn); - } - case 313: break; - case 117: - { cupSymbol = yytext().substring(8).trim(); - if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline); - } - case 314: break; - case 58: - { return symbol(CHAR,new Character('\n')); - } - case 315: break; - case 95: - { isYYEOF = true; - } - case 316: break; - case 14: - { return symbol(CHAR, new Character(yytext().charAt(0))); - } - case 317: break; - case 99: - { tokenType = yytext().substring(6).trim(); - } - case 318: break; - case 160: - { return symbol(UNICODE_SPACE_SEPARATOR); - } - case 319: break; - case 33: - { balance++; actionText.append('{'); - } - case 320: break; - case 128: - { eofThrow = concExc(eofThrow,yytext().substring(10).trim()); - } - case 321: break; - case 63: - { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND); - } - case 322: break; - case 81: - { return symbol_countUpdate(MACROUSE, makeMacroIdent()); - } - case 323: break; - case 170: - { return symbol(UNICODE_START_PUNCTUATION); - } - case 324: break; - case 149: - { return symbol(UNICODE_SURROGATE); - } - case 325: break; - case 15: - { if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND); - } - case 326: break; - case 125: - { throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline); - } - case 327: break; - case 167: - { return symbol(UNICODE_LOWERCASE_LETTER); - } - case 328: break; - case 90: - { charCount = true; - } - case 329: break; - case 165: - { return symbol(UNICODE_NON_SPACING_MARK); - } - case 330: break; - case 130: - { visibility = "private"; Skeleton.makePrivate(); - } - case 331: break; - case 134: - { return symbol(JLETTERCLASS); - } - case 332: break; - case 22: - { yybegin(REGEXPSTART); return symbol(LBRACE); - } - case 333: break; - case 115: - { eofclose = true; - } - case 334: break; - case 66: - // lookahead expression with fixed lookahead length - yypushback(1); - { if (macroDefinition) { - yybegin(EATWSPNL); - return symbol(BAR); - } - else { - yybegin(REGEXPSTART); - return symbol(NOACTION); - } - } - case 335: break; - case 82: - // lookahead expression with fixed lookahead length - yypushback(2); - { if (macroDefinition) { - yybegin(EATWSPNL); - return symbol(BAR); - } - else { - yybegin(REGEXPSTART); - return symbol(NOACTION); - } - } - case 336: break; - case 46: - { yybegin(REGEXP); return symbol(RBRACE); - } - case 337: break; - case 78: - { inclusive_states = false; yybegin(STATELIST); - } - case 338: break; - case 120: - { bufferSize = Integer.parseInt(yytext().substring(8).trim()); - } - case 339: break; - case 106: - { isIntWrap = true; - } - case 340: break; - case 133: - { yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim()); - } - case 341: break; - case 3: - { userCode.append(yytext()); - } - case 342: break; - case 159: - { return symbol(UNICODE_END_PUNCTUATION); - } - case 343: break; - case 54: - { macroDefinition = false; yybegin(REGEXPSTART); return symbol(DELIMITER); - } - case 344: break; - case 129: - { functionName = yytext().substring(10).trim(); - } - case 345: break; - case 85: - { classCode = conc(classCode,string); yybegin(MACROS); - } - case 346: break; - case 18: - { return symbol(QUESTION); - } - case 347: break; - case 50: - { if (commentbalance > 0) - commentbalance--; - else - yybegin(nextState); - } - case 348: break; - case 79: - { inclusive_states = true; yybegin(STATELIST); - } - case 349: break; - case 57: - { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8))); - } - case 350: break; - case 172: - { return symbol(UNICODE_DECIMAL_DIGIT_NUMBER); - } - case 351: break; - case 6: - { - } - case 352: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - zzDoEOF(); - switch (zzLexicalState) { - case STRING_CONTENT: { - throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); - } - case 1300: break; - case MACROS: { - if ( yymoreStreams() ) { - file = (File) files.pop(); - yypopStream(); - } - else - throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); - } - case 1301: break; - case STATELIST: { - throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); - } - case 1302: break; - case CHARCLASS: { - throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); - } - case 1303: break; - case JAVA_CODE: { - throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1); - } - case 1304: break; - case REPEATEXP: { - throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); - } - case 1305: break; - case COMMENT: { - throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT); - } - case 1306: break; - case STATES: { - throw new ScannerException(file,ErrorMessages.EOF_IN_STATES); - } - case 1307: break; - case COPY: { - throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); - } - case 1308: break; - default: - { - if ( yymoreStreams() ) { - file = (File) files.pop(); - yypopStream(); - } - else - return symbol(EOF); - } - } - } - else { - zzScanError(ZZ_NO_MATCH); - } - } - } - } - - /** - * Converts an int token code into the name of the - * token by reflection on the cup symbol class/interface sym - * - * This code was contributed by Karl Meissner - */ - private String getTokenName(int token) { - try { - java.lang.reflect.Field [] classFields = sym.class.getFields(); - for (int i = 0; i < classFields.length; i++) { - if (classFields[i].getInt(null) == token) { - return classFields[i].getName(); - } - } - } catch (Exception e) { - e.printStackTrace(System.err); - } - - return "UNKNOWN TOKEN"; - } - - /** - * Same as next_token but also prints the token to standard out - * for debugging. - * - * This code was contributed by Karl Meissner - */ - public Symbol debug_next_token() throws java.io.IOException { - java_cup.runtime.Symbol s = next_token(); - System.out.println( "line:" + (yyline+1) + " col:" + (yycolumn+1) + " --"+ yytext() + "--" + getTokenName(s.sym) + "--"); - return s; - } - - /** - * Runs the scanner on input files. - * - * This main method is the debugging routine for the scanner. - * It prints debugging information about each returned token to - * System.out until the end of file is reached, or an error occured. - * - * @param argv the command line, contains the filenames to run - * the scanner on. - */ - public static void main(String argv[]) { - if (argv.length == 0) { - System.out.println("Usage : java LexScan "); - } - else { - for (int i = 0; i < argv.length; i++) { - LexScan scanner = null; - try { - scanner = new LexScan( new java.io.FileReader(argv[i]) ); - while ( !scanner.zzAtEOF ) scanner.debug_next_token(); - } - catch (java.io.FileNotFoundException e) { - System.out.println("File not found : \""+argv[i]+"\""); - } - catch (java.io.IOException e) { - System.out.println("IO error scanning file \""+argv[i]+"\""); - System.out.println(e); - } - catch (Exception e) { - System.out.println("Unexpected exception:"); - e.printStackTrace(); - } - } - } - } - - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/LexicalStates.java b/tools/lexer/jflex-1.4/src/JFlex/LexicalStates.java deleted file mode 100644 index 1efcdb79ecb9..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/LexicalStates.java +++ /dev/null @@ -1,97 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.util.*; - - -/** - * Simple symbol table, mapping lexical state names to integers. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class LexicalStates { - - /** maps state name to state number */ - Hashtable states; - - /** codes of inclusive states (subset of states) */ - Vector inclusive; - - /** number of declared states */ - int numStates; - - - /** - * constructs a new lexical state symbol table - */ - public LexicalStates() { - states = new Hashtable(); - inclusive = new Vector(); - } - - - /** - * insert a new state declaration - */ - public void insert(String name, boolean is_inclusive) { - if ( states.containsKey(name) ) return; - - Integer code = new Integer(numStates++); - states.put(name, code); - - if (is_inclusive) - inclusive.addElement(code); - } - - - /** - * returns the number (code) of a declared state, - * null if no such state has been declared. - */ - public Integer getNumber(String name) { - return (Integer) states.get(name); - } - - - /** - * returns the number of declared states - */ - public int number() { - return numStates; - } - - - /** - * returns the names of all states - */ - public Enumeration names() { - return states.keys(); - } - - /** - * returns the code of all inclusive states - */ - public Enumeration getInclusiveStates() { - return inclusive.elements(); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/MacroException.java b/tools/lexer/jflex-1.4/src/JFlex/MacroException.java deleted file mode 100644 index 56ff910793cb..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/MacroException.java +++ /dev/null @@ -1,49 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * This Exception is used in the macro expander to report cycles or - * undefined macro usages. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class MacroException extends RuntimeException { - - /** - * Creates a new MacroException without message - */ - public MacroException() { - } - - - /** - * Creates a new MacroException with the specified message - * - * @param message the error description presented to the user. - */ - public MacroException(String message) { - super(message); - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Macros.java b/tools/lexer/jflex-1.4/src/JFlex/Macros.java deleted file mode 100644 index 02c0b4d370e2..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Macros.java +++ /dev/null @@ -1,217 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.util.*; - - -/** - * Symbol table and expander for macros. - * - * Maps macros to their (expanded) definitions, detects cycles and - * unused macros. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class Macros { - - /** Maps names of macros to their definition */ - private Hashtable macros; - - /** Maps names of macros to their "used" flag */ - private Hashtable used; - - - /** - * Creates a new macro expander. - */ - public Macros() { - macros = new Hashtable(); - used = new Hashtable(); - } - - - /** - * Stores a new macro and its definition. - * - * @param name the name of the new macro - * @param definition the definition of the new macro - * - * @return true, iff the macro name has not been - * stored before. - */ - public boolean insert(String name, RegExp definition) { - - if (Options.DEBUG) - Out.debug("inserting macro "+name+" with definition :"+Out.NL+definition); //$NON-NLS-1$ //$NON-NLS-2$ - - used.put(name, Boolean.FALSE); - return macros.put(name,definition) == null; - } - - - /** - * Marks a makro as used. - * - * @return true, iff the macro name has been - * stored before. - */ - public boolean markUsed(String name) { - return used.put(name, Boolean.TRUE) != null; - } - - - /** - * Tests if a macro has been used. - * - * @return true, iff the macro has been used in - * a regular expression. - */ - public boolean isUsed(String name) { - return ((Boolean)used.get(name)).booleanValue(); - } - - - /** - * Returns all unused macros. - * - * @return the enumeration of macro names that have not been used. - */ - public Enumeration unused() { - - Vector unUsed = new Vector(); - - Enumeration names = used.keys(); - while ( names.hasMoreElements() ) { - String name = (String) names.nextElement(); - Boolean isUsed = (Boolean) used.get( name ); - if ( !isUsed.booleanValue() ) unUsed.addElement(name); - } - - return unUsed.elements(); - } - - - /** - * Fetches the definition of the macro with the specified name, - *

- * The definition will either be the same as stored (expand() not - * called), or an equivalent one, that doesn't contain any macro - * usages (expand() called before). - * - * @param name the name of the macro - * - * @return the definition of the macro, null if - * no macro with the specified name has been stored. - * - * @see JFlex.Macros#expand - */ - public RegExp getDefinition(String name) { - return (RegExp) macros.get(name); - } - - - /** - * Expands all stored macros, so that getDefinition always returns - * a defintion that doesn't contain any macro usages. - * - * @throws MacroException if there is a cycle in the macro usage graph. - */ - public void expand() throws MacroException { - - Enumeration names; - - names = macros.keys(); - - while ( names.hasMoreElements() ) { - String name = (String) names.nextElement(); - if ( isUsed(name) ) - macros.put(name, expandMacro(name, getDefinition(name))); - // this put doesn't get a new key, so only a new value - // is set for the key "name" (without changing the enumeration - // "names"!) - } - } - - - /** - * Expands the specified macro by replacing each macro usage - * with the stored definition. - * - * @param name the name of the macro to expand (for detecting cycles) - * @param definition the definition of the macro to expand - * - * @return the expanded definition of the macro. - * - * @throws MacroException when an error (such as a cyclic definition) - * occurs during expansion - */ - private RegExp expandMacro(String name, RegExp definition) throws MacroException { - - // Out.print("checking macro "+name); - // Out.print("definition is "+definition); - - switch ( definition.type ) { - case sym.BAR: - case sym.CONCAT: - RegExp2 binary = (RegExp2) definition; - binary.r1 = expandMacro(name, binary.r1); - binary.r2 = expandMacro(name, binary.r2); - return definition; - - case sym.STAR: - case sym.PLUS: - case sym.QUESTION: - case sym.BANG: - case sym.TILDE: - RegExp1 unary = (RegExp1) definition; - unary.content = expandMacro(name, (RegExp) unary.content); - return definition; - - case sym.MACROUSE: - String usename = (String) ((RegExp1) definition).content; - - if ( name.equals(usename) ) - throw new MacroException(ErrorMessages.get(ErrorMessages.MACRO_CYCLE, name)); - - RegExp usedef = getDefinition(usename); - - if ( usedef == null ) - throw new MacroException(ErrorMessages.get(ErrorMessages.MACRO_DEF_MISSING, usename, name)); - - markUsed(usename); - - return expandMacro(name, usedef); - - case sym.STRING: - case sym.STRING_I: - case sym.CHAR: - case sym.CHAR_I: - case sym.CCLASS: - case sym.CCLASSNOT: - return definition; - - default: - throw new MacroException("unknown expression type "+definition.type+" in macro expansion"); //$NON-NLS-1$ //$NON-NLS-2$ - } - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Main.java b/tools/lexer/jflex-1.4/src/JFlex/Main.java deleted file mode 100644 index 5b7068692b2d..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Main.java +++ /dev/null @@ -1,342 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.io.*; -import java.util.*; -import JFlex.gui.MainFrame; - - -/** - * This is the main class of JFlex controlling the scanner generation process. - * It is responsible for parsing the commandline, getting input files, - * starting up the GUI if necessary, etc. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class Main { - - /** JFlex version */ - final public static String version = "1.4.3"; //$NON-NLS-1$ - - /** - * Generates a scanner for the specified input file. - * - * @param inputFile a file containing a lexical specification - * to generate a scanner for. - */ - public static void generate(File inputFile) { - - Out.resetCounters(); - - Timer totalTime = new Timer(); - Timer time = new Timer(); - - LexScan scanner = null; - LexParse parser = null; - FileReader inputReader = null; - - totalTime.start(); - - try { - Out.println(ErrorMessages.READING, inputFile.toString()); - inputReader = new FileReader(inputFile); - scanner = new LexScan(inputReader); - scanner.setFile(inputFile); - parser = new LexParse(scanner); - } - catch (FileNotFoundException e) { - Out.error(ErrorMessages.CANNOT_OPEN, inputFile.toString()); - throw new GeneratorException(); - } - - try { - NFA nfa = (NFA) parser.parse().value; - - Out.checkErrors(); - - if (Options.dump) Out.dump(ErrorMessages.get(ErrorMessages.NFA_IS)+ - Out.NL+nfa+Out.NL); - - if (Options.dot) - nfa.writeDot(Emitter.normalize("nfa.dot", null)); //$NON-NLS-1$ - - Out.println(ErrorMessages.NFA_STATES, nfa.numStates); - - time.start(); - DFA dfa = nfa.getDFA(); - time.stop(); - Out.time(ErrorMessages.DFA_TOOK, time); - - dfa.checkActions(scanner, parser); - - nfa = null; - - if (Options.dump) Out.dump(ErrorMessages.get(ErrorMessages.DFA_IS)+ - Out.NL+dfa+Out.NL); - - if (Options.dot) - dfa.writeDot(Emitter.normalize("dfa-big.dot", null)); //$NON-NLS-1$ - - Out.checkErrors(); - - time.start(); - dfa.minimize(); - time.stop(); - - Out.time(ErrorMessages.MIN_TOOK, time); - - if (Options.dump) - Out.dump(ErrorMessages.get(ErrorMessages.MIN_DFA_IS)+ - Out.NL+dfa); - - if (Options.dot) - dfa.writeDot(Emitter.normalize("dfa-min.dot", null)); //$NON-NLS-1$ - - time.start(); - - Emitter e = new Emitter(inputFile, parser, dfa); - e.emit(); - - time.stop(); - - Out.time(ErrorMessages.WRITE_TOOK, time); - - totalTime.stop(); - - Out.time(ErrorMessages.TOTAL_TIME, totalTime); - } - catch (ScannerException e) { - Out.error(e.file, e.message, e.line, e.column); - throw new GeneratorException(); - } - catch (MacroException e) { - Out.error(e.getMessage()); - throw new GeneratorException(); - } - catch (IOException e) { - Out.error(ErrorMessages.IO_ERROR, e.toString()); - throw new GeneratorException(); - } - catch (OutOfMemoryError e) { - Out.error(ErrorMessages.OUT_OF_MEMORY); - throw new GeneratorException(); - } - catch (GeneratorException e) { - throw new GeneratorException(); - } - catch (Exception e) { - e.printStackTrace(); - throw new GeneratorException(); - } - - } - - public static Vector parseOptions(String argv[]) throws SilentExit { - Vector files = new Vector(); - - for (int i = 0; i < argv.length; i++) { - - if ( argv[i].equals("-d") || argv[i].equals("--outdir") ) { //$NON-NLS-1$ //$NON-NLS-2$ - if ( ++i >= argv.length ) { - Out.error(ErrorMessages.NO_DIRECTORY); - throw new GeneratorException(); - } - Options.setDir(argv[i]); - continue; - } - - if ( argv[i].equals("--skel") || argv[i].equals("-skel") ) { //$NON-NLS-1$ //$NON-NLS-2$ - if ( ++i >= argv.length ) { - Out.error(ErrorMessages.NO_SKEL_FILE); - throw new GeneratorException(); - } - - Options.setSkeleton(new File(argv[i])); - continue; - } - - if ( argv[i].equals("-jlex") || argv[i].equals("--jlex") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.jlex = true; - continue; - } - - if ( argv[i].equals("-v") || argv[i].equals("--verbose") || argv[i].equals("-verbose") ) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - Options.verbose = true; - Options.progress = true; - continue; - } - - if ( argv[i].equals("-q") || argv[i].equals("--quiet") || argv[i].equals("-quiet") ) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - Options.verbose = false; - Options.progress = false; - continue; - } - - if ( argv[i].equals("--dump") || argv[i].equals("-dump") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.dump = true; - continue; - } - - if ( argv[i].equals("--time") || argv[i].equals("-time") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.time = true; - continue; - } - - if ( argv[i].equals("--version") || argv[i].equals("-version") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Out.println(ErrorMessages.THIS_IS_JFLEX, version); - throw new SilentExit(); - } - - if ( argv[i].equals("--dot") || argv[i].equals("-dot") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.dot = true; - continue; - } - - if ( argv[i].equals("--help") || argv[i].equals("-h") || argv[i].equals("/h") ) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - printUsage(); - throw new SilentExit(); - } - - if ( argv[i].equals("--info") || argv[i].equals("-info") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Out.printSystemInfo(); - throw new SilentExit(); - } - - if ( argv[i].equals("--nomin") || argv[i].equals("-nomin") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.no_minimize = true; - continue; - } - - if ( argv[i].equals("--pack") || argv[i].equals("-pack") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.gen_method = Options.PACK; - continue; - } - - if ( argv[i].equals("--table") || argv[i].equals("-table") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.gen_method = Options.TABLE; - continue; - } - - if ( argv[i].equals("--switch") || argv[i].equals("-switch") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.gen_method = Options.SWITCH; - continue; - } - - if ( argv[i].equals("--nobak") || argv[i].equals("-nobak") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.no_backup = true; - continue; - } - - if ( argv[i].equals("--charat") || argv[i].equals("-charat") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.char_at = true; - continue; - } - - if ( argv[i].equals("--sliceandcharat") || argv[i].equals("-sliceandcharat") ) { //$NON-NLS-1$ //$NON-NLS-2$ - Options.sliceAndCharAt = true; - continue; - } - - if ( argv[i].startsWith("-") ) { //$NON-NLS-1$ - Out.error(ErrorMessages.UNKNOWN_COMMANDLINE, argv[i]); - printUsage(); - throw new SilentExit(); - } - - // if argv[i] is not an option, try to read it as file - File f = new File(argv[i]); - if ( f.isFile() && f.canRead() ) - files.addElement(f); - else { - Out.error("Sorry, couldn't open \""+f+"\""); //$NON-NLS-2$ - throw new GeneratorException(); - } - } - - return files; - } - - - public static void printUsage() { - Out.println(""); //$NON-NLS-1$ - Out.println("Usage: jflex "); - Out.println(""); - Out.println("Where can be one or more of"); - Out.println("-d write generated file to "); - Out.println("--skel use external skeleton "); - Out.println("--switch"); - Out.println("--table"); - Out.println("--pack set default code generation method"); - Out.println("--jlex strict JLex compatibility"); - Out.println("--nomin skip minimization step"); - Out.println("--nobak don't create backup files"); - Out.println("--dump display transition tables"); - Out.println("--dot write graphviz .dot files for the generated automata (alpha)"); - Out.println("--verbose"); - Out.println("-v display generation progress messages (default)"); - Out.println("--quiet"); - Out.println("-q display errors only"); - Out.println("--time display generation time statistics"); - Out.println("--version print the version number of this copy of jflex"); - Out.println("--info print system + JDK information"); - Out.println("--help"); - Out.println("-h print this message"); - Out.println(""); - Out.println(ErrorMessages.THIS_IS_JFLEX, version); - Out.println("Have a nice day!"); - } - - - public static void generate(String argv[]) throws SilentExit { - Vector files = parseOptions(argv); - - if (files.size() > 0) { - for (int i = 0; i < files.size(); i++) - generate((File) files.elementAt(i)); - } - else { - new MainFrame(); - } - } - - - /** - * Starts the generation process with the files in argv or - * pops up a window to choose a file, when argv doesn't have - * any file entries. - * - * @param argv the commandline. - */ - public static void main(String argv[]) { - try { - generate(argv); - } - catch (GeneratorException e) { - Out.statistics(); - System.exit(1); - } - catch (SilentExit e) { - System.exit(1); - } - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Messages.properties b/tools/lexer/jflex-1.4/src/JFlex/Messages.properties deleted file mode 100644 index c90ff55a95cd..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Messages.properties +++ /dev/null @@ -1,74 +0,0 @@ -UNTERMINATED_STR = Unterminated string at end of line. -EOF_WO_ACTION = <> must be followed by an action. -EOF_SINGLERULE = <> can only be used as a single rule. -UNKNOWN_OPTION = Unkown %-option -UNEXPECTED_CHAR = Unexpected character -UNEXPECTED_NL = Unexpected character -LEXSTATE_UNDECL = Lexical state has not been declared. -STATE_IDENT_EXP = State identifier expected. -REPEAT_ZERO = Illegal repeat statement. At least one operand must be > 0 -REPEAT_GREATER = Illegal repeat statement. First operand must not be greater than second one. -REGEXP_EXPECTED = Regular expression expected. -MACRO_UNDECL = Macro has not been declared. -CHARSET_2_SMALL = Character set is too small for this class. -CS2SMALL_STRING = Character set is too small for a charactor of this string. -CS2SMALL_CHAR = Character set is too small for this character. -CHARCLASS_MACRO = Macros in character classes are not supported. -UNKNOWN_SYNTAX = Syntax error. -SYNTAX_ERROR = Syntax error. -NOT_AT_BOL = %-option is not at the beginning of the line. -NO_MATCHING_BR = Didn't find matching bracket -EOF_IN_ACTION = Unexpected end of file in action code -EOF_IN_COMMENT = Unexpected end of file in comment -EOF_IN_STRING = Unexpected end of file in string -EOF_IN_MACROS = Unexpected end of file in macros -EOF_IN_STATES = Unexpected end of file in state list -EOF_IN_REGEXP = Unexpected end of file in regular expression -UNEXPECTED_EOF = Unexpected end of file (maybe missing "*/" ")" "]" or "}") -NO_LEX_SPEC = This seems not to be a lexical specification (first %% is missing) -NO_LAST_ACTION = Last action in the specification must not be "|" -NO_DIRECTORY = No directory for -d option -NO_SKEL_FILE = No file provided for -skel option -WRONG_SKELETON = Incorrect skeleton file (wrong number of sections). -OUT_OF_MEMORY = JFlex has run out of memory. Please try increasing the maximum JVM heap size -QUIL_INITTHROW = %initthrow needs a list of (qualified) identifiers -QUIL_EOFTHROW = %eofthrow needs a list of (qualified) identifiers -QUIL_YYLEXTHROW = %yylexthrow needs a list of (qualified) identifiers -ZERO_STATES = Your scanner has zero states. Very funny. -NO_BUFFER_SIZE = %buffer expects the size of the scanner buffer as decimal number -NOT_READABLE = Could not open file. -FILE_CYCLE = Cyclic file inclusion. -FILE_WRITE = Error writing to file -QUIL_SCANERROR = %scannerror needs a (qualified) identifier -NEVER_MATCH = Rule can never be matched: -QUIL_THROW = %throws needs a list of (qualified) identifiers -EOL_IN_CHARCLASS = Unexpected newline in character class (closing "]" is missing) -QUIL_CUPSYM = %cupsym needs a (qualified) identifier -CUPSYM_AFTER_CUP = %cupsym should be used before %cup -ALREADY_RUNNING = The generator is already running -CANNOT_READ_SKEL = Cannot read skeleton file "{0}". -READING_SKEL = Reading skeleton file "{0}". -SKEL_IO_ERROR = IO problem reading skeleton file. -SKEL_IO_ERROR_DEFAULT = IO problem reading default skeleton file. -READING=Reading "{0}" -CANNOT_OPEN=Sorry, couldn''t find the file "{0}". -NFA_IS=NFA is -NFA_STATES={0} states in NFA -DFA_TOOK=DFA construction took {0} -DFA_IS=DFA is -MIN_TOOK=Minimization took {0} -MIN_DFA_IS=Miniminal DFA is -WRITE_TOOK=Writing took {0} -TOTAL_TIME=Overall scanner generation time: {0} -IO_ERROR=An I/O-Error occured: {0} -THIS_IS_JFLEX=This is JFlex {0} -UNKNOWN_COMMANDLINE=Error: unknown option "{0}". -MACRO_CYCLE=Macro {0} contains a cycle. -MACRO_DEF_MISSING=Found no definition for macro "{0}" while expanding "{1}" -PARSING_TOOK=Parsing took {0} -NFA_TOOK=NFA construction took {0} -LOOKAHEAD_NEEDS_ACTION="|" action cannot be used with lookahead expressions -EMPTY_MATCH = Lookahead expression must have match with at least length 1. -CTOR_ARG = Expected an identifier for constructor argument name. -CTOR_DEBUG = Emitting default constructor without parameters and init code for debug/standalone. -INT_AND_TYPE = Scanner can't have int and reference return type at the same time. diff --git a/tools/lexer/jflex-1.4/src/JFlex/NFA.java b/tools/lexer/jflex-1.4/src/JFlex/NFA.java deleted file mode 100644 index 728e0203efd0..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/NFA.java +++ /dev/null @@ -1,1052 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex; - -import java.util.*; -import java.io.*; - - -/** - * NFA representation in JFlex. - * - * Contains algorithms RegExp -> NFA and NFA -> DFA. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class NFA { - - /** table[current_state][next_char] is the set of states that can be reached - /* from current_state with an input next_char */ - StateSet [][] table; - - /** epsilon[current_state] is the set of states that can be reached - /* from current_state via epsilon edges */ - StateSet [] epsilon; - - /** isFinal[state] == true <=> state is a final state of the NFA */ - boolean [] isFinal; - - /** action[current_state]: the action associated with the state - /* current_state (null, if there is no action for the state) */ - Action [] action; - - /** the number of states in this NFA */ - int numStates; - - /** the current maximum number of input characters */ - int numInput; - - /** the number of lexical States. Lexical states have the indices - /* 0..numLexStates-1 in the transition table */ - int numLexStates; - - /** estimated size of the NFA (before actual construction) */ - int estSize = 256; - - Macros macros; - CharClasses classes; - - LexScan scanner; - RegExps regExps; - - // will be reused by several methods (avoids excessive object creation) - private static StateSetEnumerator states = new StateSetEnumerator(); - private static StateSet tempStateSet = new StateSet(); - - public NFA(int numInput, int estSize) { - this.numInput = numInput; - this.estSize = estSize; - numStates = 0; - epsilon = new StateSet [estSize]; - action = new Action [estSize]; - isFinal = new boolean [estSize]; - table = new StateSet [estSize][numInput]; - } - - /** - * Construct new NFA. - * - * Assumes that lookahead cases and numbers are already resolved in RegExps. - * @see RegExps#checkLookAheads() - */ - public NFA(int numInput, LexScan scanner, RegExps regExps, - Macros macros, CharClasses classes) { - this(numInput, regExps.NFASize(macros)+2*scanner.states.number()); - - this.scanner = scanner; - this.regExps = regExps; - this.macros = macros; - this.classes = classes; - - numLexStates = scanner.states.number(); - - // ensureCapacity assumes correctly set up numStates. - int new_num = numEntryStates(); - ensureCapacity(new_num); - numStates = new_num; - } - - public int numEntryStates() { - return 2*(numLexStates+regExps.gen_look_count); - } - - /** - * Add a standalone rule that has minimum priority, fires a transition - * on all single input characters and has a "print yytext" action. - */ - public void addStandaloneRule() { - int start = numStates; - int end = numStates+1; - - for (int c = 0; c < classes.getNumClasses(); c++) - addTransition(start, c, end); - - for (int i = 0; i < numLexStates*2; i++) - addEpsilonTransition(i, start); - - action[end] = new Action("System.out.print(yytext());", Integer.MAX_VALUE); - isFinal[end] = true; - } - - /** - * Add a regexp to this NFA. - * - * @param regExpNum the number of the regexp to add. - */ - public void addRegExp(int regExpNum) { - - if (Options.DEBUG) - Out.debug("Adding nfa for regexp "+regExpNum+" :"+Out.NL+regExps.getRegExp(regExpNum)); - - IntPair nfa = insertNFA( regExps.getRegExp(regExpNum) ); - - Enumeration lexStates = regExps.getStates(regExpNum).elements(); - - if ( !lexStates.hasMoreElements() ) - lexStates = scanner.states.getInclusiveStates(); - - while ( lexStates.hasMoreElements() ) { - int stateNum = ((Integer)lexStates.nextElement()).intValue(); - - if ( !regExps.isBOL(regExpNum) ) - addEpsilonTransition(2*stateNum, nfa.start); - - addEpsilonTransition(2*stateNum+1, nfa.start); - } - - - if ( regExps.getLookAhead(regExpNum) != null ) { - Action a = regExps.getAction(regExpNum); - - if (a.lookAhead() == Action.FINITE_CHOICE) { - insertLookAheadChoices(nfa.end, a, regExps.getLookAhead(regExpNum)); - // remove the original action from the collection: it will never - // be matched directly, only its copies will. - scanner.actions.remove(a); - } - else { - RegExp r1 = regExps.getRegExp(regExpNum); - RegExp r2 = regExps.getLookAhead(regExpNum); - - IntPair look = insertNFA(r2); - - addEpsilonTransition(nfa.end, look.start); - - action[look.end] = a; - isFinal[look.end] = true; - - if (a.lookAhead() == Action.GENERAL_LOOK) { - // base forward pass - IntPair forward = insertNFA(r1); - // lookahead backward pass - IntPair backward = insertNFA(r2.rev(macros)); - - isFinal[forward.end] = true; - action[forward.end] = new Action(Action.FORWARD_ACTION); - - isFinal[backward.end] = true; - action[backward.end] = new Action(Action.BACKWARD_ACTION); - - int entry = 2*(regExps.getLookEntry(regExpNum) + numLexStates); - addEpsilonTransition(entry, forward.start); - addEpsilonTransition(entry+1, backward.start); - - a.setEntryState(entry); - } - } - } - else { - action[nfa.end] = regExps.getAction(regExpNum); - isFinal[nfa.end] = true; - } - } - - /** - * Insert NFAs for the (finitely many) fixed length lookahead choices. - * - * @param lookAhead a lookahead of which isFiniteChoice is true - * @param baseEnd the end state of the base expression NFA - * @param a the action of the expression - * - * @see SemCheck#isFiniteChoice(RegExp) - */ - private void insertLookAheadChoices(int baseEnd, Action a, RegExp lookAhead) { - if (lookAhead.type == sym.BAR) { - RegExp2 r = (RegExp2) lookAhead; - insertLookAheadChoices(baseEnd, a, r.r1); - insertLookAheadChoices(baseEnd, a, r.r2); - } - else if (lookAhead.type == sym.MACROUSE) { - RegExp1 r = (RegExp1) lookAhead; - insertLookAheadChoices(baseEnd, a, macros.getDefinition((String) r.content)); - } - else { - int len = SemCheck.length(lookAhead); - - if (len >= 0) { - // termination case - IntPair look = insertNFA(lookAhead); - - addEpsilonTransition(baseEnd, look.start); - - Action x = a.copyChoice(len); - action[look.end] = x; - isFinal[look.end] = true; - - // add new copy to the collection of known actions such that - // it can be checked for the NEVER_MATCH warning. - scanner.actions.add(x); - } - else { - // should never happen - throw new Error("When inserting lookahead expression: unkown expression type "+lookAhead.type+" in "+lookAhead); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - } - - /** - * Make sure the NFA can contain at least newNumStates states. - * - * @param newNumStates the minimu number of states. - */ - private void ensureCapacity(int newNumStates) { - int oldLength = epsilon.length; - - if ( newNumStates < oldLength ) return; - - int newStatesLength = Math.max(oldLength*2, newNumStates); - - boolean [] newFinal = new boolean [newStatesLength]; - boolean [] newIsPush = new boolean [newStatesLength]; - Action [] newAction = new Action [newStatesLength]; - StateSet [] [] newTable = new StateSet [newStatesLength] [numInput]; - StateSet [] newEpsilon = new StateSet [newStatesLength]; - - System.arraycopy(isFinal,0,newFinal,0,numStates); - System.arraycopy(action,0,newAction,0,numStates); - System.arraycopy(epsilon,0,newEpsilon,0,numStates); - System.arraycopy(table,0,newTable,0,numStates); - - isFinal = newFinal; - action = newAction; - epsilon = newEpsilon; - table = newTable; - } - - public void addTransition(int start, int input, int dest) { - Out.debug("Adding transition ("+start+", "+input+", "+dest+")"); - - int maxS = Math.max(start,dest)+1; - - ensureCapacity( maxS ); - - if (maxS > numStates) numStates = maxS; - - if ( table[start][input] != null ) - table[start][input].addState(dest); - else - table[start][input] = new StateSet(estSize,dest); - } - - public void addEpsilonTransition(int start, int dest) { - int max = Math.max(start,dest)+1; - ensureCapacity( max ); - if (max > numStates) numStates = max; - - if (epsilon[start] != null) - epsilon[start].addState(dest); - else - epsilon[start] = new StateSet(estSize,dest); - } - - - /** - * Returns true, iff the specified set of states - * contains a final state. - * - * @param set the set of states that is tested for final states. - */ - private boolean containsFinal(StateSet set) { - states.reset(set); - - while ( states.hasMoreElements() ) - if ( isFinal[states.nextElement()] ) return true; - - return false; - } - - - /** - * Returns true, iff the specified set of states - * contains a pushback-state. - * - * @param set the set of states that is tested for pushback-states. - private boolean containsPushback(StateSet set) { - states.reset(set); - - while ( states.hasMoreElements() ) - if ( isPushback[states.nextElement()] ) return true; - - return false; - } - */ - - /** - * Returns the action with highest priority in the specified - * set of states. - * - * @param set the set of states for which to determine the action - */ - private Action getAction(StateSet set) { - - states.reset(set); - - Action maxAction = null; - - Out.debug("Determining action of : "+set); - - while ( states.hasMoreElements() ) { - - Action currentAction = action[ states.nextElement() ]; - - if ( currentAction != null ) { - if (maxAction == null) - maxAction = currentAction; - else - maxAction = maxAction.getHigherPriority(currentAction); - } - - } - - return maxAction; - } - - - /** - * Calculates the epsilon closure for a specified set of states. - * - * The epsilon closure for set a is the set of states that can be reached - * by epsilon edges from a. - * - * @param set the set of states to calculate the epsilon closure for - * - * @return the epsilon closure of the specified set of states - * in this NFA - */ - private StateSet closure(int startState) { - - // Out.debug("Calculating closure of "+set); - - StateSet notvisited = tempStateSet; - StateSet closure = new StateSet(numStates,startState); - - notvisited.clear(); - notvisited.addState(startState); - - while ( notvisited.containsElements() ) { - // Out.debug("closure is now "+closure); - // Out.debug("notvisited is "+notvisited); - int state = notvisited.getAndRemoveElement(); - // Out.debug("removed element "+state+" of "+notvisited); - // Out.debug("epsilon[states] = "+epsilon[state]); - notvisited.add(closure.complement(epsilon[state])); - closure.add(epsilon[state]); - } - - // Out.debug("Closure is : "+closure); - - return closure; - } - - /** - * Returns the epsilon closure of a set of states - */ - private StateSet closure(StateSet startStates) { - StateSet result = new StateSet(numStates); - - if (startStates != null) { - states.reset(startStates); - while (states.hasMoreElements()) - result.add( closure(states.nextElement()) ); - } - - return result; - } - - - private void epsilonFill() { - for (int i = 0; i < numStates; i++) { - epsilon[i] = closure(i); - } - } - - /** - * Calculates the set of states that can be reached from another - * set of states start with an specified input - * character input - * - * @param start the set of states to start from - * @param input the input character for which to search the next states - * - * @return the set of states that are reached from start - * via input - */ - private StateSet DFAEdge(StateSet start, char input) { - // Out.debug("Calculating DFAEdge for state set "+start+" and input '"+input+"'"); - - tempStateSet.clear(); - - states.reset(start); - while ( states.hasMoreElements() ) - tempStateSet.add( table[states.nextElement()][input] ); - - StateSet result = new StateSet(tempStateSet); - - states.reset(tempStateSet); - while ( states.hasMoreElements() ) - result.add( epsilon[states.nextElement()] ); - - // Out.debug("DFAEdge is : "+result); - - return result; - } - - - /** - * Returns an DFA that accepts the same language as this NFA. - * This DFA is usually not minimal. - */ - public DFA getDFA() { - - Hashtable dfaStates = new Hashtable(numStates); - Vector dfaVector = new Vector(numStates); - - DFA dfa = new DFA(numEntryStates(), numInput, numLexStates); - - int numDFAStates = 0; - int currentDFAState = 0; - - Out.println("Converting NFA to DFA : "); - - epsilonFill(); - - StateSet currentState, newState; - - // create the initial states of the DFA - for ( int i = 0; i < numEntryStates(); i++ ) { - newState = epsilon[i]; - - dfaStates.put(newState, new Integer(numDFAStates)); - dfaVector.addElement(newState); - - dfa.setEntryState( i, numDFAStates ); - - dfa.setFinal( numDFAStates, containsFinal(newState) ); - dfa.setAction( numDFAStates, getAction(newState) ); - - numDFAStates++; - } - - numDFAStates--; - - if (Options.DEBUG) - Out.debug("DFA start states are :"+Out.NL+dfaStates+Out.NL+Out.NL+"ordered :"+Out.NL+dfaVector); - - currentDFAState = 0; - - StateSet tempStateSet = NFA.tempStateSet; - StateSetEnumerator states = NFA.states; - - // will be reused - newState = new StateSet(numStates); - - while ( currentDFAState <= numDFAStates ) { - - currentState = (StateSet) dfaVector.elementAt(currentDFAState); - - for (char input = 0; input < numInput; input++) { - - // newState = DFAEdge(currentState, input); - - // inlining DFAEdge for performance: - - // Out.debug("Calculating DFAEdge for state set "+currentState+" and input '"+input+"'"); - - tempStateSet.clear(); - states.reset(currentState); - while ( states.hasMoreElements() ) - tempStateSet.add( table[states.nextElement()][input] ); - - newState.copy(tempStateSet); - - states.reset(tempStateSet); - while ( states.hasMoreElements() ) - newState.add( epsilon[states.nextElement()] ); - - // Out.debug("DFAEdge is : "+newState); - - - if ( newState.containsElements() ) { - - // Out.debug("DFAEdge for input "+(int)input+" and state set "+currentState+" is "+newState); - - // Out.debug("Looking for state set "+newState); - Integer nextDFAState = (Integer) dfaStates.get(newState); - - if ( nextDFAState != null ) { - // Out.debug("FOUND!"); - dfa.addTransition(currentDFAState, input, nextDFAState.intValue()); - } - else { - if (Options.progress) Out.print("."); - // Out.debug("NOT FOUND!"); - // Out.debug("Table was "+dfaStates); - numDFAStates++; - - // make a new copy of newState to store in dfaStates - StateSet storeState = new StateSet(newState); - - dfaStates.put(storeState, new Integer(numDFAStates)); - dfaVector.addElement(storeState); - - dfa.addTransition(currentDFAState, input, numDFAStates); - dfa.setFinal( numDFAStates, containsFinal(storeState) ); - dfa.setAction( numDFAStates, getAction(storeState) ); - } - } - } - - currentDFAState++; - } - - if (Options.verbose) Out.println(""); - - return dfa; - } - - - public void dumpTable() { - Out.dump(toString()); - } - - public String toString() { - StringBuffer result = new StringBuffer(); - - for (int i=0; i < numStates; i++) { - result.append("State"); - if ( isFinal[i] ) { - result.append("[FINAL"); - String l = action[i].lookString(); - if (!l.equals("")) { - result.append(", "); - result.append(l); - } - result.append("]"); - } - result.append(" "+i+Out.NL); - - for (char input = 0; input < numInput; input++) { - if ( table[i][input] != null && table[i][input].containsElements() ) - result.append(" with "+((int) input)+" in "+table[i][input]+Out.NL); - } - - if ( epsilon[i] != null && epsilon[i].containsElements() ) - result.append(" with epsilon in "+epsilon[i]+Out.NL); - } - - return result.toString(); - } - - public void writeDot(File file) { - try { - PrintWriter writer = new PrintWriter(new FileWriter(file)); - writer.println(dotFormat()); - writer.close(); - } - catch (IOException e) { - Out.error(ErrorMessages.FILE_WRITE, file); - throw new GeneratorException(); - } - } - - public String dotFormat() { - StringBuffer result = new StringBuffer(); - - result.append("digraph NFA {"+Out.NL); - result.append("rankdir = LR"+Out.NL); - - for (int i=0; i < numStates; i++) { - if ( isFinal[i] ) { - result.append(i); - result.append(" [shape = doublecircle]"); - result.append(Out.NL); - } - } - - for (int i=0; i < numStates; i++) { - for (int input = 0; input < numInput; input++) { - if ( table[i][input] != null ) { - StateSetEnumerator states = table[i][input].states(); - - while (states.hasMoreElements()) { - int s = states.nextElement(); - result.append(i+" -> "+s); - result.append(" [label=\""+classes.toString(input)+"\"]"+Out.NL); - } - } - } - if ( epsilon[i] != null ) { - StateSetEnumerator states = epsilon[i].states(); - while (states.hasMoreElements()) { - int s = states.nextElement(); - result.append(i+" -> "+s+" [style=dotted]"+Out.NL); - } - } - } - - result.append("}"+Out.NL); - - return result.toString(); - } - - - //----------------------------------------------------------------------- - // Functions for constructing NFAs out of regular expressions. - - private void insertLetterNFA(boolean caseless, char letter, int start, int end) { - if (caseless) { - int lower = classes.getClassCode(Character.toLowerCase(letter)); - int upper = classes.getClassCode(Character.toUpperCase(letter)); - addTransition(start, lower, end); - if (upper != lower) addTransition(start, upper, end); - } - else { - addTransition(start, classes.getClassCode(letter), end); - } - } - - private IntPair insertStringNFA(boolean caseless, String letters) { - int start = numStates; - int i; - - for (i = 0; i < letters.length(); i++) { - if (caseless) { - char c = letters.charAt(i); - int lower = classes.getClassCode(Character.toLowerCase(c)); - int upper = classes.getClassCode(Character.toUpperCase(c)); - addTransition(i+start, lower, i+start+1); - if (upper != lower) addTransition(i+start, upper, i+start+1); - } - else { - addTransition(i+start, classes.getClassCode(letters.charAt(i)), i+start+1); - } - } - - return new IntPair(start, i+start); - } - - - private void insertClassNFA(Vector intervalls, int start, int end) { - // empty char class is ok: - if (intervalls == null) return; - - int [] cl = classes.getClassCodes(intervalls); - for (int i = 0; i < cl.length; i++) - addTransition(start, cl[i], end); - } - - private void insertNotClassNFA(Vector intervalls, int start, int end) { - int [] cl = classes.getNotClassCodes(intervalls); - - for (int i = 0; i < cl.length; i++) - addTransition(start, cl[i], end); - } - - - /** - * Constructs an NFA accepting the complement of the language - * of a given NFA. - * - * Converts the NFA into a DFA, then negates that DFA. - * Exponential state blowup possible and common. - * - * @param the NFA to construct the complement for. - * - * @return a pair of integers denoting the index of start - * and end state of the complement NFA. - */ - private IntPair complement(IntPair nfa) { - - if (Options.DEBUG) { - Out.debug("complement for "+nfa); - Out.debug("NFA is :"+Out.NL+this); - } - - int dfaStart = nfa.end+1; - - // FIXME: only need epsilon closure of states reachable from nfa.start - epsilonFill(); - - Hashtable dfaStates = new Hashtable(numStates); - Vector dfaVector = new Vector(numStates); - - int numDFAStates = 0; - int currentDFAState = 0; - - StateSet currentState, newState; - - newState = epsilon[nfa.start]; - dfaStates.put(newState, new Integer(numDFAStates)); - dfaVector.addElement(newState); - - if (Options.DEBUG) - Out.debug("pos DFA start state is :"+Out.NL+dfaStates+Out.NL+Out.NL+"ordered :"+Out.NL+dfaVector); - - currentDFAState = 0; - - while ( currentDFAState <= numDFAStates ) { - - currentState = (StateSet) dfaVector.elementAt(currentDFAState); - - for (char input = 0; input < numInput; input++) { - newState = DFAEdge(currentState, input); - - if ( newState.containsElements() ) { - - // Out.debug("DFAEdge for input "+(int)input+" and state set "+currentState+" is "+newState); - - // Out.debug("Looking for state set "+newState); - Integer nextDFAState = (Integer) dfaStates.get(newState); - - if ( nextDFAState != null ) { - // Out.debug("FOUND!"); - addTransition(dfaStart+currentDFAState, input, dfaStart+nextDFAState.intValue()); - } - else { - if (Options.dump) Out.print("+"); - // Out.debug("NOT FOUND!"); - // Out.debug("Table was "+dfaStates); - numDFAStates++; - - dfaStates.put(newState, new Integer(numDFAStates)); - dfaVector.addElement(newState); - - addTransition(dfaStart+currentDFAState, input, dfaStart+numDFAStates); - } - } - } - - currentDFAState++; - } - - // We have a dfa accepting the positive regexp. - - // Now the complement: - if (Options.DEBUG) - Out.debug("dfa finished, nfa is now :"+Out.NL+this); - - int start = dfaStart+numDFAStates+1; - int error = dfaStart+numDFAStates+2; - int end = dfaStart+numDFAStates+3; - - addEpsilonTransition(start, dfaStart); - - for (int i = 0; i < numInput; i++) - addTransition(error, i, error); - - addEpsilonTransition(error, end); - - for (int s = 0; s <= numDFAStates; s++) { - currentState = (StateSet) dfaVector.elementAt(s); - - currentDFAState = dfaStart+s; - - // if it was not a final state, it is now in the complement - if (!currentState.isElement(nfa.end)) - addEpsilonTransition(currentDFAState, end); - - // all inputs not present (formerly leading to an implicit error) - // now lead to an explicit (final) state accepting everything. - for (int i = 0; i < numInput; i++) - if (table[currentDFAState][i] == null) - addTransition(currentDFAState, i, error); - } - - // eliminate transitions leading to dead states - if (live == null || live.length < numStates) { - live = new boolean [2*numStates]; - visited = new boolean [2*numStates]; - } - - removeDead(dfaStart, end); - - if (Options.DEBUG) - Out.debug("complement finished, nfa ("+start+","+end+") is now :"+this); - - return new IntPair(start, end); - } - - // "global" data for use in method removeDead only: - // live[s] == false <=> no final state can be reached from s - private boolean [] live; // = new boolean [estSize]; - private boolean [] visited; // = new boolean [estSize]; - - private void removeDead(int start, int end) { - // Out.debug("removeDead ("+start+")"); - - if ( visited[start] || live[start] ) return; - visited[start] = true; - - // Out.debug("not yet visited"); - - if (closure(start).isElement(end)) - live[start] = true; - - // Out.debug("is final :"+live[start]); - - for (int i = 0; i < numInput; i++) { - StateSet nextState = closure(table[start][i]); - StateSetEnumerator states = nextState.states(); - while (states.hasMoreElements()) { - int next = states.nextElement(); - - if (next != start) { - removeDead(next,end); - - if (live[next]) - live[start] = true; - else - table[start][i] = null; - } - } - } - - StateSet nextState = closure(epsilon[start]); - StateSetEnumerator states = nextState.states(); - while (states.hasMoreElements()) { - int next = states.nextElement(); - - if (next != start) { - removeDead(next,end); - - if (live[next]) - live[start] = true; - } - } - - // Out.debug("state "+start+" is live :"+live[start]); - } - - - /** - * Constructs a two state NFA for char class regexps, - * such that the NFA has - * - * exactly one start state, - * exactly one end state, - * no transitions leading out of the end state - * no transitions leading into the start state - * - * Assumes that regExp.isCharClass(macros) == true - * - * @param regExp the regular expression to construct the - * NFA for - * - * @return a pair of integers denoting the index of start - * and end state of the NFA. - */ - private void insertCCLNFA(RegExp regExp, int start, int end) { - switch (regExp.type) { - - case sym.BAR: - RegExp2 r = (RegExp2) regExp; - insertCCLNFA(r.r1, start, end); - insertCCLNFA(r.r2, start, end); - return; - - case sym.CCLASS: - insertClassNFA( (Vector) ((RegExp1) regExp).content, start, end); - return; - - case sym.CCLASSNOT: - insertNotClassNFA( (Vector) ((RegExp1) regExp).content, start, end); - return; - - case sym.CHAR: - insertLetterNFA( - false, ((Character) ((RegExp1) regExp).content).charValue(), - start, end); - return; - - case sym.CHAR_I: - insertLetterNFA( - true, ((Character) ((RegExp1) regExp).content).charValue(), - start, end); - return; - - case sym.MACROUSE: - insertCCLNFA(macros.getDefinition((String) ((RegExp1) regExp).content), - start, end); - return; - } - - throw new Error("Unknown expression type "+regExp.type+" in NFA construction"); - } - - - /** - * Constructs an NFA for regExp such that the NFA has - * - * exactly one start state, - * exactly one end state, - * no transitions leading out of the end state - * no transitions leading into the start state - * - * @param regExp the regular expression to construct the - * NFA for - * - * @return a pair of integers denoting the index of start - * and end state of the NFA. - */ - public IntPair insertNFA(RegExp regExp) { - - IntPair nfa1, nfa2; - int start, end; - RegExp2 r; - - if (Options.DEBUG) - Out.debug("Inserting RegExp : "+regExp); - - if (regExp.isCharClass(macros)) { - start = numStates; - end = numStates+1; - - ensureCapacity(end+1); - if (end+1 > numStates) numStates = end+1; - - insertCCLNFA(regExp, start, end); - - return new IntPair(start, end); - } - - switch (regExp.type) { - - case sym.BAR: - - r = (RegExp2) regExp; - - nfa1 = insertNFA(r.r1); - nfa2 = insertNFA(r.r2); - - start = nfa2.end+1; - end = nfa2.end+2; - - addEpsilonTransition(start, nfa1.start); - addEpsilonTransition(start, nfa2.start); - addEpsilonTransition(nfa1.end, end); - addEpsilonTransition(nfa2.end, end); - - return new IntPair(start, end); - - case sym.CONCAT: - - r = (RegExp2) regExp; - - nfa1 = insertNFA(r.r1); - nfa2 = insertNFA(r.r2); - - addEpsilonTransition(nfa1.end, nfa2.start); - - return new IntPair(nfa1.start, nfa2.end); - - case sym.STAR: - nfa1 = insertNFA( (RegExp) ((RegExp1) regExp).content ); - - start = nfa1.end+1; - end = nfa1.end+2; - - addEpsilonTransition(nfa1.end, end); - addEpsilonTransition(start, nfa1.start); - - addEpsilonTransition(start, end); - addEpsilonTransition(nfa1.end, nfa1.start); - - return new IntPair(start, end); - - case sym.PLUS: - nfa1 = insertNFA( (RegExp) ((RegExp1) regExp).content ); - - start = nfa1.end+1; - end = nfa1.end+2; - - addEpsilonTransition(nfa1.end, end); - addEpsilonTransition(start, nfa1.start); - - addEpsilonTransition(nfa1.end, nfa1.start); - - return new IntPair(start, end); - - case sym.QUESTION: - nfa1 = insertNFA( (RegExp) ((RegExp1) regExp).content ); - - addEpsilonTransition(nfa1.start, nfa1.end); - - return new IntPair(nfa1.start, nfa1.end); - - case sym.BANG: - return complement(insertNFA((RegExp) ((RegExp1) regExp).content)); - - case sym.TILDE: - return insertNFA(regExp.resolveTilde(macros)); - - case sym.STRING: - return insertStringNFA(false, (String) ((RegExp1) regExp).content ); - - case sym.STRING_I: - return insertStringNFA(true, (String) ((RegExp1) regExp).content ); - - case sym.MACROUSE: - return insertNFA(macros.getDefinition((String) ((RegExp1) regExp).content)); - } - - throw new Error("Unknown expression type "+regExp.type+" in NFA construction"); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Options.java b/tools/lexer/jflex-1.4/src/JFlex/Options.java deleted file mode 100644 index 88590de49154..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Options.java +++ /dev/null @@ -1,135 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.io.File; - -/** - * Collects all global JFlex options. Can be set from command line parser, - * ant taks, gui, etc. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class Options { - - /** If true, additional verbose debug information is produced - * This is a compile time option */ - public final static boolean DEBUG = false; - - /** code generation method: maximum packing */ - final public static int PACK = 0; - /** code generation method: traditional */ - final public static int TABLE = 1; - /** code generation method: switch statement */ - final public static int SWITCH = 2; - - - /** output directory */ - private static File directory; - /** strict JLex compatibility */ - public static boolean jlex; - /** don't run minimization algorithm if this is true */ - public static boolean no_minimize; - /** don't write backup files if this is true */ - public static boolean no_backup; - /** use charAt function for accessing the zzBuffer */ - public static boolean char_at; - - /** use charAt function for accessing the zzBuffer and [] for zzBufferArray */ - public static boolean sliceAndCharAt; - - /** default code generation method */ - public static int gen_method; - /** If false, only error/warning output will be generated */ - public static boolean verbose; - /** If true, progress dots will be printed */ - public static boolean progress; - /** If true, jflex will print time statistics about the generation process */ - public static boolean time; - /** If true, jflex will write graphviz .dot files for generated automata */ - public static boolean dot; - /** If true, you will be flooded with information (e.g. dfa tables). */ - public static boolean dump; - /** If true, the generated scanner will include a constructor taking an InputStream. */ - public static boolean emitInputStreamCtor; - - static { setDefaults(); } - - - /** - * @return the output directory - */ - public static File getDir() { - return directory; - } - - /** - * Set output directory - * - * @param dirName the name of the directory to write output files to - */ - public static void setDir(String dirName) { - setDir(new File(dirName)); - } - - - /** - * Set output directory - * - * @param d the directory to write output files to - */ - public static void setDir(File d) { - if ( d.isFile() ) { - Out.error("Error: \""+d+"\" is not a directory."); - throw new GeneratorException(); - } - - if ( !d.isDirectory() && !d.mkdirs() ) { - Out.error("Error: couldn't create directory \""+d+"\""); - throw new GeneratorException(); - } - - directory = d; - } - - /** - * Sets all options back to default values. - */ - public static void setDefaults() { - directory = null; - jlex = false; - no_minimize = false; - no_backup = false; - gen_method = Options.PACK; - verbose = true; - progress = true; - time = false; - dot = false; - dump = false; - emitInputStreamCtor = false; - Skeleton.readDefault(); - } - - public static void setSkeleton(File skel) { - Skeleton.readSkelFile(skel); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Out.java b/tools/lexer/jflex-1.4/src/JFlex/Out.java deleted file mode 100644 index 2ea57ba79f02..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Out.java +++ /dev/null @@ -1,461 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -import java.io.*; -import java.awt.TextArea; - - -/** - * In this class all output to the java console is filtered. - * - * Use the switches verbose, time and DUMP at compile time to determine - * the verbosity of JFlex output. There is no switch for - * suppressing error messages. verbose and time can be overridden - * by command line paramters. - * - * Redirects output to a TextArea in GUI mode. - * - * Counts error and warning messages. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public final class Out { - - /** platform dependent newline sequence */ - public static final String NL = System.getProperty("line.separator"); - - /** count total warnings */ - private static int warnings; - - /** count total errors */ - private static int errors; - - /** output device */ - private static StdOutWriter out = new StdOutWriter(); - - - /** - * Switches to GUI mode if text is not null - * - * @param text the message TextArea of the JFlex GUI - */ - public static void setGUIMode(TextArea text) { - out.setGUIMode(text); - } - - /** - * Sets a new output stream and switches to non-gui mode. - * - * @param stream the new output stream - */ - public static void setOutputStream(OutputStream stream) { - out = new StdOutWriter(stream); - out.setGUIMode(null); - } - - /** - * Report time statistic data. - * - * @param message the message to be printed - * @param time elapsed time - */ - public static void time(ErrorMessages message, Timer time) { - if (Options.time) { - String msg = ErrorMessages.get(message, time.toString()); - out.println(msg); - } - } - - /** - * Report time statistic data. - * - * @param message the message to be printed - */ - public static void time(String message) { - if (Options.time) { - out.println(message); - } - } - - /** - * Report generation progress. - * - * @param message the message to be printed - */ - public static void println(String message) { - if (Options.verbose) - out.println(message); - } - - /** - * Report generation progress. - * - * @param message the message to be printed - * @param data data to be inserted into the message - */ - public static void println(ErrorMessages message, String data) { - if (Options.verbose) { - out.println(ErrorMessages.get(message,data)); - } - } - - /** - * Report generation progress. - * - * @param message the message to be printed - * @param data data to be inserted into the message - */ - public static void println(ErrorMessages message, int data) { - if (Options.verbose) { - out.println(ErrorMessages.get(message,data)); - } - } - - /** - * Report generation progress. - * - * @param message the message to be printed - */ - public static void print(String message) { - if (Options.verbose) out.print(message); - } - - /** - * Dump debug information to System.out - * - * Use like this - * - * if (Out.DEBUG) Out.debug(message) - * - * to save performance during normal operation (when DEBUG - * is turned off). - */ - public static void debug(String message) { - if (Options.DEBUG) System.out.println(message); - } - - - /** - * All parts of JFlex, that want to provide dump information - * should use this method for their output. - * - * @message the message to be printed - */ - public static void dump(String message) { - if (Options.dump) out.println(message); - } - - - /** - * All parts of JFlex, that want to report error messages - * should use this method for their output. - * - * @message the message to be printed - */ - private static void err(String message) { - out.println(message); - } - - - /** - * throws a GeneratorException if there are any errors recorded - */ - public static void checkErrors() { - if (errors > 0) throw new GeneratorException(); - } - - - /** - * print error and warning statistics - */ - public static void statistics() { - StringBuffer line = new StringBuffer(errors+" error"); - if (errors != 1) line.append("s"); - - line.append(", "+warnings+" warning"); - if (warnings != 1) line.append("s"); - - line.append("."); - err(line.toString()); - } - - - /** - * reset error and warning counters - */ - public static void resetCounters() { - errors = 0; - warnings = 0; - } - - - /** - * print a warning without position information - * - * @param message the warning message - */ - public static void warning(String message) { - warnings++; - - err(NL+"Warning : "+message); - } - - - /** - * print a warning with line information - * - * @param message code of the warning message - * @param line the line information - * - * @see ErrorMessages - */ - public static void warning(ErrorMessages message, int line) { - warnings++; - - String msg = NL+"Warning"; - if (line > 0) msg = msg+" in line "+(line+1); - - err(msg+": "+ErrorMessages.get(message)); - } - - - /** - * print warning message with location information - * - * @param file the file the warning is issued for - * @param message the code of the message to print - * @param line the line number of the position - * @param column the column of the position - */ - public static void warning(File file, ErrorMessages message, int line, int column) { - - String msg = NL+"Warning"; - if (file != null) msg += " in file \""+file+"\""; - if (line >= 0) msg = msg+" (line "+(line+1)+")"; - - try { - err(msg+": "+NL+ErrorMessages.get(message)); - } - catch (ArrayIndexOutOfBoundsException e) { - err(msg); - } - - warnings++; - - if (line >= 0) { - if (column >= 0) - showPosition(file, line, column); - else - showPosition(file, line); - } - } - - - /** - * print error message (string) - * - * @param message the message to print - */ - public static void error(String message) { - errors++; - err(NL+message); - } - - - /** - * print error message (code) - * - * @param message the code of the error message - * - * @see ErrorMessages - */ - public static void error(ErrorMessages message) { - errors++; - err(NL+"Error: "+ErrorMessages.get(message) ); - } - - - /** - * print error message with data - * - * @param data data to insert into the message - * @param message the code of the error message - * - * @see ErrorMessages - */ - public static void error(ErrorMessages message, String data) { - errors++; - err(NL+"Error: "+ ErrorMessages.get(message,data)); - } - - - /** - * IO error message for a file (displays file - * name in parentheses). - * - * @param message the code of the error message - * @param file the file it occurred for - */ - public static void error(ErrorMessages message, File file) { - errors++; - err(NL+"Error: "+ErrorMessages.get(message)+" ("+file+")"); - } - - - /** - * print error message with location information - * - * @param file the file the error occurred for - * @param message the code of the error message to print - * @param line the line number of error position - * @param column the column of error position - */ - public static void error(File file, ErrorMessages message, int line, int column) { - - String msg = NL+"Error"; - if (file != null) msg += " in file \""+file+"\""; - if (line >= 0) msg = msg+" (line "+(line+1)+")"; - - try { - err(msg+": "+NL+ErrorMessages.get(message)); - } - catch (ArrayIndexOutOfBoundsException e) { - err(msg); - } - - errors++; - - if (line >= 0) { - if (column >= 0) - showPosition(file, line, column); - else - showPosition(file, line); - } - } - - - /** - * prints a line of a file with marked position. - * - * @param file the file of which to show the line - * @param line the line to show - * @param column the column in which to show the marker - */ - public static void showPosition(File file, int line, int column) { - try { - String ln = getLine(file, line); - if (ln != null) { - err( ln ); - - if (column < 0) return; - - String t = "^"; - for (int i = 0; i < column; i++) t = " "+t; - - err(t); - } - } - catch (IOException e) { - /* silently ignore IO errors, don't show anything */ - } - } - - - /** - * print a line of a file - * - * @param file the file to show - * @param line the line number - */ - public static void showPosition(File file, int line) { - try { - String ln = getLine(file, line); - if (ln != null) err(ln); - } - catch (IOException e) { - /* silently ignore IO errors, don't show anything */ - } - } - - - /** - * get one line from a file - * - * @param file the file to read - * @param line the line number to get - * - * @throw IOException if any error occurs - */ - private static String getLine(File file, int line) throws IOException { - BufferedReader reader = new BufferedReader(new FileReader(file)); - - String msg = ""; - - for (int i = 0; i <= line; i++) - msg = reader.readLine(); - - reader.close(); - - return msg; - } - - - /** - * Print system information (e.g. in case of unexpected exceptions) - */ - public static void printSystemInfo() { - err("Java version: "+System.getProperty("java.version")); - err("Runtime name: "+System.getProperty("java.runtime.name")); - err("Vendor: "+System.getProperty("java.vendor")); - err("VM version: "+System.getProperty("java.vm.version")); - err("VM vendor: "+System.getProperty("java.vm.vendor")); - err("VM name: "+System.getProperty("java.vm.name")); - err("VM info: "+System.getProperty("java.vm.info")); - err("OS name: "+System.getProperty("os.name")); - err("OS arch: "+System.getProperty("os.arch")); - err("OS version: "+System.getProperty("os.version")); - err("Encoding: "+System.getProperty("file.encoding")); - err("JFlex version: "+Main.version); - } - - - /** - * Request a bug report for an unexpected Exception/Error. - */ - public static void requestBugReport(Error e) { - err("An unexpected error occurred. Please send a report of this to"); - err(" and include the following information:"); - err(""); - printSystemInfo(); - err("Exception:"); - e.printStackTrace(out); - err(""); - err("Please also include a specification (as small as possible)"); - err("that triggers this error. You may also want to check at"); - err("http://www.jflex.de if there is a newer version available"); - err("that doesn't have this problem"); - err(""); - err("Thanks for your support."); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/PackEmitter.java b/tools/lexer/jflex-1.4/src/JFlex/PackEmitter.java deleted file mode 100644 index c856f259628c..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/PackEmitter.java +++ /dev/null @@ -1,230 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * jflex 1.4 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * Encodes int arrays as strings. - * - * Also splits up strings when longer than 64K in UTF8 encoding. - * Subclasses emit unpacking code. - * - * Usage protocol: - * p.emitInit();
- * for each data: p.emitData(data);
- * p.emitUnpack(); - * - * @author Gerwin Klein - * @version $Revision$, $Date$ - */ -public abstract class PackEmitter { - - /** name of the generated array (mixed case, no yy prefix) */ - protected String name; - - /** current UTF8 length of generated string in current chunk */ - private int UTF8Length; - - /** position in the current line */ - private int linepos; - - /** max number of entries per line */ - private static final int maxEntries = 16; - - /** output buffer */ - protected StringBuffer out = new StringBuffer(); - - /** number of existing string chunks */ - protected int chunks; - - /** maximum size of chunks */ - // String constants are stored as UTF8 with 2 bytes length - // field in class files. One Unicode char can be up to 3 - // UTF8 bytes. 64K max and two chars safety. - private static final int maxSize = 0xFFFF-6; - - /** indent for string lines */ - private static final String indent = " "; - - /** - * Create new emitter for an array. - * - * @param name the name of the generated array - */ - public PackEmitter(String name) { - this.name = name; - } - - /** - * Convert array name into all uppercase internal scanner - * constant name. - * - * @return name as a internal constant name. - * @see PackEmitter#name - */ - protected String constName() { - return "ZZ_" + name.toUpperCase(); - } - - /** - * Return current output buffer. - */ - public String toString() { - return out.toString(); - } - - /** - * Emit declaration of decoded member and open first chunk. - */ - public void emitInit() { - out.append(" private static final int [] "); - out.append(constName()); - out.append(" = zzUnpack"); - out.append(name); - out.append("();"); - nl(); - nextChunk(); - } - - /** - * Emit single unicode character. - * - * Updates length, position, etc. - * - * @param i the character to emit. - * @prec 0 <= i <= 0xFFFF - */ - public void emitUC(int i) { - if (i < 0 || i > 0xFFFF) - throw new IllegalArgumentException("character value expected"); - - // cast ok because of prec - char c = (char) i; - - printUC(c); - UTF8Length += UTF8Length(c); - linepos++; - } - - /** - * Execute line/chunk break if necessary. - * Leave space for at least two chars. - */ - public void breaks() { - if (UTF8Length >= maxSize) { - // close current chunk - out.append("\";"); - nl(); - - nextChunk(); - } - else { - if (linepos >= maxEntries) { - // line break - out.append("\"+"); - nl(); - out.append(indent); - out.append("\""); - linepos = 0; - } - } - } - - /** - * Emit the unpacking code. - */ - public abstract void emitUnpack(); - - /** - * emit next chunk - */ - private void nextChunk() { - nl(); - out.append(" private static final String "); - out.append(constName()); - out.append("_PACKED_"); - out.append(chunks); - out.append(" ="); - nl(); - out.append(indent); - out.append("\""); - - UTF8Length = 0; - linepos = 0; - chunks++; - } - - /** - * emit newline - */ - protected void nl() { - out.append(Out.NL); - } - - /** - * Append a unicode/octal escaped character - * to out buffer. - * - * @param c the character to append - */ - private void printUC(char c) { - if (c > 255) { - out.append("\\u"); - if (c < 0x1000) out.append("0"); - out.append(Integer.toHexString(c)); - } - else { - out.append("\\"); - out.append(Integer.toOctalString(c)); - } - } - - /** - * Calculates the number of bytes a Unicode character - * would have in UTF8 representation in a class file. - * - * @param value the char code of the Unicode character - * @prec 0 <= value <= 0xFFFF - * - * @return length of UTF8 representation. - */ - private int UTF8Length(char value) { - // if (value < 0 || value > 0xFFFF) throw new Error("not a char value ("+value+")"); - - // see JVM spec section 4.4.7, p 111 - if (value == 0) return 2; - if (value <= 0x7F) return 1; - - // workaround for javac bug (up to jdk 1.3): - if (value < 0x0400) return 2; - if (value <= 0x07FF) return 3; - - // correct would be: - // if (value <= 0x7FF) return 2; - return 3; - } - - // convenience - protected void println(String s) { - out.append(s); - nl(); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/RegExp.java b/tools/lexer/jflex-1.4/src/JFlex/RegExp.java deleted file mode 100644 index db862f67be52..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/RegExp.java +++ /dev/null @@ -1,332 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.util.Vector; - -/** - * Stores a regular expression of rules section in a JFlex-specification. - * - * This base class has no content other than its type. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class RegExp { - - /** - * The type of the regular expression. This field will be - * filled with values from class sym.java (generated by cup) - */ - int type; - - - /** - * Create a new regular expression of the specified type. - * - * @param type a value from the cup generated class sym. - * - * @see JFlex.sym - */ - public RegExp(int type) { - this.type = type; - } - - - - /** - * Returns a String-representation of this regular expression - * with the specified indentation. - * - * @param tab a String that should contain only space characters and - * that is inserted in front of standard String-representation - * pf this object. - */ - public String print(String tab) { - return tab+toString(); - } - - - /** - * Returns a String-representation of this regular expression - */ - public String toString() { - return "type = "+type; - } - - - /** - * Find out if this regexp is a char class or equivalent to one. - * - * @param macros for macro expansion - * @return true if the regexp is equivalent to a char class. - */ - public boolean isCharClass(Macros macros) { - RegExp1 unary; - RegExp2 binary; - - switch (type) { - case sym.CHAR: - case sym.CHAR_I: - case sym.CCLASS: - case sym.CCLASSNOT: - return true; - - case sym.BAR: - binary = (RegExp2) this; - return binary.r1.isCharClass(macros) && binary.r2.isCharClass(macros); - - case sym.MACROUSE: - unary = (RegExp1) this; - return macros.getDefinition((String) unary.content).isCharClass(macros); - - default: return false; - } - } - - /** - * The approximate number of NFA states this expression will need (only - * works correctly after macro expansion and without negation) - * - * @param macros macro table for expansion - */ - public int size(Macros macros) { - RegExp1 unary; - RegExp2 binary; - RegExp content; - - switch ( type ) { - case sym.BAR: - binary = (RegExp2) this; - return binary.r1.size(macros) + binary.r2.size(macros) + 2; - - case sym.CONCAT: - binary = (RegExp2) this; - return binary.r1.size(macros) + binary.r2.size(macros); - - case sym.STAR: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return content.size(macros) + 2; - - case sym.PLUS: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return content.size(macros) + 2; - - case sym.QUESTION: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return content.size(macros); - - case sym.BANG: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return content.size(macros) * content.size(macros); - // this is only a very rough estimate (worst case 2^n) - // exact size too complicated (propably requires construction) - - case sym.TILDE: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return content.size(macros) * content.size(macros) * 3; - // see sym.BANG - - case sym.STRING: - case sym.STRING_I: - unary = (RegExp1) this; - return ((String) unary.content).length()+1; - - case sym.CHAR: - case sym.CHAR_I: - return 2; - - case sym.CCLASS: - case sym.CCLASSNOT: - return 2; - - case sym.MACROUSE: - unary = (RegExp1) this; - return macros.getDefinition((String) unary.content).size(macros); - } - - throw new Error("unknown regexp type "+type); - } - - /** - * @return the reverse of the specified string. - */ - public final static String revString(String s) { - StringBuffer b = new StringBuffer(s.length()); - for (int i=s.length()-1; i >= 0; i--) { - b.append(s.charAt(i)); - } - return b.toString(); - } - - /** - * Recursively convert tilde (upto) expressions into negation and star. - * - * @param macros the macro table for expansion. - * @return new RegExp equivalent to the current one, but without upto expressions. - */ - public final RegExp resolveTilde(Macros macros) { - RegExp1 unary; - RegExp2 binary; - RegExp content; - - switch ( type ) { - case sym.BAR: - binary = (RegExp2) this; - return new RegExp2(sym.BAR, binary.r1.resolveTilde(macros), - binary.r2.resolveTilde(macros)); - - case sym.CONCAT: - binary = (RegExp2) this; - return new RegExp2(sym.CONCAT, binary.r1.resolveTilde(macros), - binary.r2.resolveTilde(macros)); - - case sym.STAR: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return new RegExp1(sym.STAR, content.resolveTilde(macros)); - - case sym.PLUS: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return new RegExp1(sym.PLUS, content.resolveTilde(macros)); - - case sym.QUESTION: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return new RegExp1(sym.QUESTION, content.resolveTilde(macros)); - - case sym.BANG: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return new RegExp1(sym.BANG, content.resolveTilde(macros)); - - case sym.TILDE: - // ~a = !([^]* a [^]*) a - // uses subexpression sharing - unary = (RegExp1) this; - content = ((RegExp) unary.content).resolveTilde(macros); - - RegExp any_star = new RegExp1(sym.STAR, anyChar()); - RegExp neg = new RegExp1(sym.BANG, - new RegExp2(sym.CONCAT, any_star, - new RegExp2(sym.CONCAT, content, any_star))); - - return new RegExp2(sym.CONCAT, neg, content); - - case sym.STRING: - case sym.STRING_I: - case sym.CHAR: - case sym.CHAR_I: - case sym.CCLASS: - case sym.CCLASSNOT: - unary = (RegExp1) this; - return new RegExp1(unary.type, unary.content); - - case sym.MACROUSE: - unary = (RegExp1) this; - return macros.getDefinition((String) unary.content).resolveTilde(macros); - } - - throw new Error("unknown regexp type "+type); - } - - - /** - * Returns a regexp that matches any character: [^] - * @return the regexp for [^] - */ - public RegExp anyChar() { - // FIXME: there is some code duplication here with the parser - Vector list = new Vector(); - list.addElement(new Interval((char)0,CharClasses.maxChar)); - return new RegExp1(sym.CCLASS,list); - } - - - /** - * Create a new regexp that matches the reverse text of this one. - * - * @return the reverse regexp - */ - public final RegExp rev(Macros macros) { - RegExp1 unary; - RegExp2 binary; - RegExp content; - - switch ( type ) { - case sym.BAR: - binary = (RegExp2) this; - return new RegExp2(sym.BAR, binary.r1.rev(macros), binary.r2.rev(macros)); - - case sym.CONCAT: - binary = (RegExp2) this; - return new RegExp2(sym.CONCAT, binary.r2.rev(macros), binary.r1.rev(macros)); - - case sym.STAR: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return new RegExp1(sym.STAR, content.rev(macros)); - - case sym.PLUS: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return new RegExp1(sym.PLUS, content.rev(macros)); - - case sym.QUESTION: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return new RegExp1(sym.QUESTION, content.rev(macros)); - - case sym.BANG: - unary = (RegExp1) this; - content = (RegExp) unary.content; - return new RegExp1(sym.BANG, content.rev(macros)); - - case sym.TILDE: - content = resolveTilde(macros); - return content.rev(macros); - - case sym.STRING: - case sym.STRING_I: - unary = (RegExp1) this; - return new RegExp1(unary.type, revString((String) unary.content)); - - case sym.CHAR: - case sym.CHAR_I: - case sym.CCLASS: - case sym.CCLASSNOT: - unary = (RegExp1) this; - return new RegExp1(unary.type, unary.content); - - case sym.MACROUSE: - unary = (RegExp1) this; - return macros.getDefinition((String) unary.content).rev(macros); - } - - throw new Error("unknown regexp type "+type); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/RegExp1.java b/tools/lexer/jflex-1.4/src/JFlex/RegExp1.java deleted file mode 100644 index 29b2c6663049..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/RegExp1.java +++ /dev/null @@ -1,80 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * Stores a regular expression from the rules section of a JFlex specification. - * - * This class provides storage for one Object of content. - * It is used for all regular expressions that are constructed from one object. - * - * For instance: a* is new RegExp1(sym.STAR, new Character ('a')); - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class RegExp1 extends RegExp { - - /** - * The child of this expression node in the syntax tree of a regular expression. - */ - Object content; - - - /** - * Constructs a new regular expression with one child object. - * - * @param type a value from the cup generated class sym, defining the - * kind of this regular expression - * - * @param content the child of this expression - */ - public RegExp1(int type, Object content) { - super(type); - this.content = content; - } - - - /** - * Returns a String-representation of this regular expression - * with the specified indentation. - * - * @param tab a String that should contain only space characters and - * that is inserted in front of standard String-representation - * pf this object. - */ - public String print(String tab) { - if (content instanceof RegExp) { - return tab+"type = "+type+Out.NL+tab+"content :"+Out.NL+((RegExp)content).print(tab+" "); - } - else - return tab+"type = "+type+Out.NL+tab+"content :"+Out.NL+tab+" "+content; - } - - - /** - * Returns a String-representation of this regular expression - */ - public String toString() { - return print(""); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/RegExp2.java b/tools/lexer/jflex-1.4/src/JFlex/RegExp2.java deleted file mode 100644 index 479991f9af76..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/RegExp2.java +++ /dev/null @@ -1,50 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -/** - * Regular expression with two children (e.g. a | b) - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class RegExp2 extends RegExp { - - RegExp r1, r2; - - public RegExp2(int type, RegExp r1, RegExp r2) { - super(type); - this.r1 = r1; - this.r2 = r2; - } - - public String print(String tab) { - return tab+"type = "+type+Out.NL+tab+"child 1 :"+Out.NL+ //$NON-NLS-1$ //$NON-NLS-2$ - r1.print(tab+" ")+Out.NL+tab+"child 2 :"+Out.NL+ //$NON-NLS-1$ //$NON-NLS-2$ - r2.print(tab+" "); //$NON-NLS-1$ - } - - public String toString() { - return print(""); //$NON-NLS-1$ - } -} - diff --git a/tools/lexer/jflex-1.4/src/JFlex/RegExps.java b/tools/lexer/jflex-1.4/src/JFlex/RegExps.java deleted file mode 100644 index cd49a49e3a43..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/RegExps.java +++ /dev/null @@ -1,217 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex; - -import java.util.*; - - -/** - * Stores all rules of the specification for later access in RegExp -> NFA - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class RegExps { - - /** the spec line in which a regexp is used */ - Vector /* of Integer */ lines; - - /** the lexical states in wich the regexp is used */ - Vector /* of Vector of Integer */ states; - - /** the regexp */ - Vector /* of RegExp */ regExps; - - /** the action of a regexp */ - Vector /* of Action */ actions; - - /** flag if it is a BOL regexp */ - Vector /* of Boolean */ BOL; - - /** the lookahead expression */ - Vector /* of RegExp */ look; - - /** the forward DFA entry point of the lookahead expression */ - Vector /* of Integer */ look_entry; - - /** Count of many general lookahead expressions there are. - * Need 2*gen_look_count additional DFA entry points. */ - int gen_look_count; - - public RegExps() { - states = new Vector(); - regExps = new Vector(); - actions = new Vector(); - BOL = new Vector(); - look = new Vector(); - lines = new Vector(); - look_entry = new Vector(); - } - - public int insert(int line, Vector stateList, RegExp regExp, Action action, - Boolean isBOL, RegExp lookAhead) { - if (Options.DEBUG) { - Out.debug("Inserting regular expression with statelist :"+Out.NL+stateList); //$NON-NLS-1$ - Out.debug("and action code :"+Out.NL+action.content+Out.NL); //$NON-NLS-1$ - Out.debug("expression :"+Out.NL+regExp); //$NON-NLS-1$ - } - - states.addElement(stateList); - regExps.addElement(regExp); - actions.addElement(action); - BOL.addElement(isBOL); - look.addElement(lookAhead); - lines.addElement(new Integer(line)); - look_entry.addElement(null); - - return states.size()-1; - } - - public int insert(Vector stateList, Action action) { - - if (Options.DEBUG) { - Out.debug("Inserting eofrule with statelist :"+Out.NL+stateList); //$NON-NLS-1$ - Out.debug("and action code :"+Out.NL+action.content+Out.NL); //$NON-NLS-1$ - } - - states.addElement(stateList); - regExps.addElement(null); - actions.addElement(action); - BOL.addElement(null); - look.addElement(null); - lines.addElement(null); - look_entry.addElement(null); - - return states.size()-1; - } - - public void addStates(int regNum, Vector newStates) { - Enumeration s = newStates.elements(); - - while (s.hasMoreElements()) - ((Vector)states.elementAt(regNum)).addElement(s.nextElement()); - } - - public int getNum() { - return states.size(); - } - - public boolean isBOL(int num) { - return ((Boolean) BOL.elementAt(num)).booleanValue(); - } - - public RegExp getLookAhead(int num) { - return (RegExp) look.elementAt(num); - } - - public boolean isEOF(int num) { - return BOL.elementAt(num) == null; - } - - public Vector getStates(int num) { - return (Vector) states.elementAt(num); - } - - public RegExp getRegExp(int num) { - return (RegExp) regExps.elementAt(num); - } - - public int getLine(int num) { - return ((Integer) lines.elementAt(num)).intValue(); - } - - public int getLookEntry(int num) { - return ((Integer) look_entry.elementAt(num)).intValue(); - } - - public void checkActions() { - if ( actions.elementAt(actions.size()-1) == null ) { - Out.error(ErrorMessages.NO_LAST_ACTION); - throw new GeneratorException(); - } - } - - public Action getAction(int num) { - while ( num < actions.size() && actions.elementAt(num) == null ) - num++; - - return (Action) actions.elementAt(num); - } - - public int NFASize(Macros macros) { - int size = 0; - Enumeration e = regExps.elements(); - while (e.hasMoreElements()) { - RegExp r = (RegExp) e.nextElement(); - if (r != null) size += r.size(macros); - } - e = look.elements(); - while (e.hasMoreElements()) { - RegExp r = (RegExp) e.nextElement(); - if (r != null) size += r.size(macros); - } - return size; - } - - public void checkLookAheads() { - for (int i=0; i < regExps.size(); i++) - lookAheadCase(i); - } - - /** - * Determine which case of lookahead expression regExpNum points to (if any). - * Set case data in corresponding action. - * Increment count of general lookahead expressions for entry points - * of the two additional DFAs. - * Register DFA entry point in RegExps - * - * Needs to be run before adding any regexps/rules to be able to reserve - * the correct amount of space of lookahead DFA entry points. - * - * @param regExpNum the number of the regexp in RegExps. - */ - private void lookAheadCase(int regExpNum) { - if ( getLookAhead(regExpNum) != null ) { - RegExp r1 = getRegExp(regExpNum); - RegExp r2 = getLookAhead(regExpNum); - - Action a = getAction(regExpNum); - - int len1 = SemCheck.length(r1); - int len2 = SemCheck.length(r2); - - if (len1 >= 0) { - a.setLookAction(Action.FIXED_BASE,len1); - } - else if (len2 >= 0) { - a.setLookAction(Action.FIXED_LOOK,len2); - } - else if (SemCheck.isFiniteChoice(r2)) { - a.setLookAction(Action.FINITE_CHOICE,0); - } - else { - a.setLookAction(Action.GENERAL_LOOK,0); - look_entry.setElementAt(new Integer(gen_look_count), regExpNum); - gen_look_count++; - } - } - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/ScannerException.java b/tools/lexer/jflex-1.4/src/JFlex/ScannerException.java deleted file mode 100644 index 86c99e9d56e9..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/ScannerException.java +++ /dev/null @@ -1,104 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -import java.io.File; - -/** - * This Exception could be thrown while scanning the specification - * (e.g. unmatched input) - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class ScannerException extends RuntimeException { - - public int line; - public int column; - public ErrorMessages message; - public File file; - - private ScannerException(File file, String text, ErrorMessages message, int line, int column) { - super(text); - this.file = file; - this.message = message; - this.line = line; - this.column = column; - } - - - /** - * Creates a new ScannerException with a message only. - * - * @param message the code for the error description presented to the user. - */ - public ScannerException(ErrorMessages message) { - this( null, ErrorMessages.get(message), message, -1, -1 ); - } - - /** - * Creates a new ScannerException for a file with a message only. - * - * @param file the file in which the error occured - * @param message the code for the error description presented to the user. - */ - public ScannerException(File file, ErrorMessages message) { - this( file, ErrorMessages.get(message), message, -1, -1 ); - } - - - /** - * Creates a new ScannerException with a message and line number. - * - * @param message the code for the error description presented to the user. - * @param line the number of the line in the specification that - * contains the error - */ - public ScannerException(ErrorMessages message, int line) { - this( null, ErrorMessages.get(message), message, line, -1 ); - } - - - /** - * Creates a new ScannerException for a file with a message and line number. - * - * @param message the code for the error description presented to the user. - * @param line the number of the line in the specification that - * contains the error - */ - public ScannerException(File file, ErrorMessages message, int line) { - this( file, ErrorMessages.get(message), message, line, -1 ); - } - - - /** - * Creates a new ScannerException with a message, line number and column. - * - * @param message the code for the error description presented to the user. - * @param line the number of the line in the specification that - * contains the error - * @param column the column where the error starts - */ - public ScannerException(File file, ErrorMessages message, int line, int column) { - this( file, ErrorMessages.get(message), message, line, column ); - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/SemCheck.java b/tools/lexer/jflex-1.4/src/JFlex/SemCheck.java deleted file mode 100644 index 114a4d64edff..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/SemCheck.java +++ /dev/null @@ -1,227 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex; - -import java.io.File; - -/** - * Performs simple semantic analysis on regular expressions. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public final class SemCheck { - - // stored globally since they are used as constants in all checks - private static Macros macros; - - /** - * Performs semantic analysis for all expressions. - * - * Currently checks for empty expressions only. - * - * @param rs the reg exps to be checked - * @param m the macro table (in expanded form) - * @param f the spec file containing the rules - */ - public static void check(RegExps rs, Macros m, File f) { - macros = m; - int num = rs.getNum(); - for (int i = 0; i < num; i++) { - RegExp r = rs.getRegExp(i); - RegExp l = rs.getLookAhead(i); - Action a = rs.getAction(i); - - if (r != null && l != null && maybeEmtpy(r)) { - if (a == null) - Out.error(ErrorMessages.EMPTY_MATCH, ""); - else - Out.error(f, ErrorMessages.EMPTY_MATCH, a.priority-1, -1); - } - } - } - - - /** - * Checks if the expression potentially matches the empty string. - * - */ - public static boolean maybeEmtpy(RegExp re) { - RegExp2 r; - - switch (re.type) { - - case sym.BAR: { - r = (RegExp2) re; - return maybeEmtpy(r.r1) || maybeEmtpy(r.r2); - } - - case sym.CONCAT: { - r = (RegExp2) re; - return maybeEmtpy(r.r1) && maybeEmtpy(r.r2); - } - - case sym.STAR: - case sym.QUESTION: - return true; - - case sym.PLUS: { - RegExp1 r1 = (RegExp1) re; - return maybeEmtpy((RegExp) r1.content); - } - - case sym.CCLASS: - case sym.CCLASSNOT: - case sym.CHAR: - case sym.CHAR_I: - return false; - - case sym.STRING: - case sym.STRING_I: { - String content = (String) ((RegExp1) re).content; - return content.length() == 0; - } - - case sym.TILDE: - return false; - - case sym.BANG: { - RegExp1 r1 = (RegExp1) re; - return !maybeEmtpy((RegExp) r1.content); - } - - case sym.MACROUSE: - return maybeEmtpy(macros.getDefinition((String) ((RegExp1) re).content)); - } - - throw new Error("Unkown expression type "+re.type+" in "+re); //$NON-NLS-1$ //$NON-NLS-2$ - } - - /** - * Returns length if expression has fixed length, -1 otherwise. - * - * Negation operators are treated as always variable length. - */ - public static int length(RegExp re) { - RegExp2 r; - - switch (re.type) { - - case sym.BAR: { - r = (RegExp2) re; - int l1 = length(r.r1); - if (l1 < 0) return -1; - int l2 = length(r.r2); - - if (l1 == l2) - return l1; - else - return -1; - } - - case sym.CONCAT: { - r = (RegExp2) re; - int l1 = length(r.r1); - if (l1 < 0) return -1; - int l2 = length(r.r2); - if (l2 < 0) return -1; - return l1+l2; - } - - case sym.STAR: - case sym.PLUS: - case sym.QUESTION: - return -1; - - case sym.CCLASS: - case sym.CCLASSNOT: - case sym.CHAR: - case sym.CHAR_I: - return 1; - - case sym.STRING: - case sym.STRING_I: { - String content = (String) ((RegExp1) re).content; - return content.length(); - } - - case sym.TILDE: - case sym.BANG: - // too hard to calculate at this level, use safe approx - return -1; - - case sym.MACROUSE: - return length(macros.getDefinition((String) ((RegExp1) re).content)); - } - - throw new Error("Unkown expression type "+re.type+" in "+re); //$NON-NLS-1$ //$NON-NLS-2$ - } - - /** - * Returns true iff the expression is a finite choice of fixed length - * expressions. - * - * Negation operators are treated as always variable length. - */ - public static boolean isFiniteChoice(RegExp re) { - RegExp2 r; - - switch (re.type) { - - case sym.BAR: { - r = (RegExp2) re; - return isFiniteChoice(r.r1) && isFiniteChoice(r.r2); - } - - case sym.CONCAT: { - r = (RegExp2) re; - int l1 = length(r.r1); - if (l1 < 0) return false; - int l2 = length(r.r2); - return l2 >= 0; - } - - case sym.STAR: - case sym.PLUS: - case sym.QUESTION: - return false; - - case sym.CCLASS: - case sym.CCLASSNOT: - case sym.CHAR: - case sym.CHAR_I: - return true; - - case sym.STRING: - case sym.STRING_I: { - return true; - } - - case sym.TILDE: - case sym.BANG: - return false; - - case sym.MACROUSE: - return isFiniteChoice(macros.getDefinition((String) ((RegExp1) re).content)); - } - - throw new Error("Unkown expression type "+re.type+" in "+re); //$NON-NLS-1$ //$NON-NLS-2$ - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/SilentExit.java b/tools/lexer/jflex-1.4/src/JFlex/SilentExit.java deleted file mode 100644 index b098713bca7c..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/SilentExit.java +++ /dev/null @@ -1,31 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -/** - * Signals a silent exit (no statistics printout). - * - * @author Gerwin Klein - * @version $Revision$, $Date$ - */ -public class SilentExit extends Exception { - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Skeleton.java b/tools/lexer/jflex-1.4/src/JFlex/Skeleton.java deleted file mode 100644 index 6a860369b2a5..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Skeleton.java +++ /dev/null @@ -1,222 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex; - -import java.io.*; -import java.net.URL; -import java.util.Vector; - - -/** - * This class stores the skeleton of generated scanners. - * - * The skeleton consists of several parts that can be emitted to - * a file. Usually there is a portion of generated code - * (produced in class Emitter) between every two parts of skeleton code. - * - * There is a static part (the skeleton code) and state based iterator - * part to this class. The iterator part is used to emit consecutive skeleton - * sections to some PrintWriter. - * - * @see JFlex.Emitter - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class Skeleton { - - /** location of default skeleton */ - static final private String DEFAULT_LOC = "JFlex/skeleton.default"; //$NON-NLS-1$ - - /** expected number of sections in the skeleton file */ - static final private int size = 21; - - /** platform specific newline */ - static final private String NL = System.getProperty("line.separator"); //$NON-NLS-1$ - - /** The skeleton */ - public static String line[]; - - /** initialization */ - static { readDefault(); } - - // the state based, iterator part of Skeleton: - - /** - * The current part of the skeleton (an index of nextStop[]) - */ - private int pos; - - /** - * The writer to write the skeleton-parts to - */ - private PrintWriter out; - - - /** - * Creates a new skeleton (iterator) instance. - * - * @param out the writer to write the skeleton-parts to - */ - public Skeleton(PrintWriter out) { - this.out = out; - } - - - /** - * Emits the next part of the skeleton - */ - public void emitNext() { - out.print( line[pos++] ); - } - - - /** - * Make the skeleton private. - * - * Replaces all occurences of " public " in the skeleton with " private ". - */ - public static void makePrivate() { - for (int i=0; i < line.length; i++) { - line[i] = replace(" public ", " private ", line[i]); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - - - /** - * Reads an external skeleton file for later use with this class. - * - * @param skeletonFile the file to read (must be != null and readable) - */ - public static void readSkelFile(File skeletonFile) { - if (skeletonFile == null) - throw new IllegalArgumentException("Skeleton file must not be null"); //$NON-NLS-1$ - - if (!skeletonFile.isFile() || !skeletonFile.canRead()) { - Out.error(ErrorMessages.CANNOT_READ_SKEL, skeletonFile.toString()); - throw new GeneratorException(); - } - - Out.println(ErrorMessages.READING_SKEL, skeletonFile.toString()); - - try { - BufferedReader reader = new BufferedReader(new FileReader(skeletonFile)); - readSkel(reader); - } - catch (IOException e) { - Out.error(ErrorMessages.SKEL_IO_ERROR); - throw new GeneratorException(); - } - } - - - /** - * Reads an external skeleton file from a BufferedReader. - * - * @param reader the reader to read from (must be != null) - * @throws IOException if an IO error occurs - * @throws GeneratorException if the number of skeleton sections does not match - */ - public static void readSkel(BufferedReader reader) throws IOException { - Vector lines = new Vector(); - StringBuffer section = new StringBuffer(); - - String ln; - while ((ln = reader.readLine()) != null) { - if (ln.startsWith("---")) { //$NON-NLS-1$ - lines.addElement(section.toString()); - section.setLength(0); - } else { - section.append(ln); - section.append(NL); - } - } - - if (section.length() > 0) - lines.addElement(section.toString()); - - if (lines.size() != size) { - Out.error(ErrorMessages.WRONG_SKELETON); - throw new GeneratorException(); - } - - line = new String[size]; - for (int i = 0; i < size; i++) - line[i] = (String) lines.elementAt(i); - } - - /** - * Replaces a with b in c. - * - * @param a the String to be replaced - * @param b the replacement - * @param c the String in which to replace a by b - * @return a String object with a replaced by b in c - */ - public static String replace(String a, String b, String c) { - StringBuffer result = new StringBuffer(c.length()); - int i = 0; - int j = c.indexOf(a); - - while (j >= i) { - result.append(c.substring(i,j)); - result.append(b); - i = j+a.length(); - j = c.indexOf(a,i); - } - - result.append(c.substring(i,c.length())); - - return result.toString(); - } - - - /** - * (Re)load the default skeleton. Looks in the current system class path. - */ - public static void readDefault() { - ClassLoader l = Skeleton.class.getClassLoader(); - URL url; - - /* Try to load from same class loader as this class. - * Should work, but does not on OS/2 JDK 1.1.8 (see bug 1065521). - * Use system class loader in this case. - */ - if (l != null) { - url = l.getResource(DEFAULT_LOC); - } - else { - url = ClassLoader.getSystemResource(DEFAULT_LOC); - } - - if (url == null) { - Out.error(ErrorMessages.SKEL_IO_ERROR_DEFAULT); - throw new GeneratorException(); - } - - try { - InputStreamReader reader = new InputStreamReader(url.openStream()); - readSkel(new BufferedReader(reader)); - } catch (IOException e) { - Out.error(ErrorMessages.SKEL_IO_ERROR_DEFAULT); - throw new GeneratorException(); - } - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/StatePairList.java b/tools/lexer/jflex-1.4/src/JFlex/StatePairList.java deleted file mode 100644 index 13c4aa96fca2..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/StatePairList.java +++ /dev/null @@ -1,83 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - -/** - * A list of pairs of states. Used in DFA minimization. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class StatePairList { - - // implemented as two arrays of integers. - // java.util classes proved too inefficient. - - int p []; - int q []; - - int num; - - public StatePairList() { - p = new int [8]; - q = new int [8]; - num = 0; - } - - public void addPair(int i, int j) { - for (int x = 0; x < num; x++) - if (p[x] == i && q[x] == j) return; - - if (num >= p.length) increaseSize(num); - - p[num] = i; - q[num] = j; - - num++; - } - - public void markAll(StatePairList [] [] list, boolean [] [] equiv) { - for (int x = 0; x < num; x++) { - int i = p[x]; - int j = q[x]; - - if (equiv[i][j]) { - equiv[i][j] = false; - if (list[i][j] != null) - list[i][j].markAll(list, equiv); - } - } - } - - private void increaseSize(int length) { - length = Math.max(length+1, 4*p.length); - Out.debug("increasing length to "+length); //$NON-NLS-1$ - - int pn [] = new int[length]; - int qn [] = new int[length]; - - System.arraycopy(p, 0, pn, 0, p.length); - System.arraycopy(q, 0, qn, 0, q.length); - - p = pn; - q = qn; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/StateSet.java b/tools/lexer/jflex-1.4/src/JFlex/StateSet.java deleted file mode 100644 index 1cd1345ea86c..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/StateSet.java +++ /dev/null @@ -1,334 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex; - -/** - * A set of NFA states (= integers). - * - * Very similar to java.util.BitSet, but is faster and doesn't crash - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class StateSet { - - private final boolean DEBUG = false; - - public final static StateSet EMPTY = new StateSet(); - - - final static int BITS = 6; - final static int MASK = (1<> BITS; - if (index >= bits.length) resize(state); - bits[index] |= (1L << (state & MASK)); - - if (DEBUG) { - Out.dump("StateSet.addState("+state+") end"); //$NON-NLS-1$ //$NON-NLS-2$ - Out.dump("Set is : "+this); //$NON-NLS-1$ - } - } - - - private int size2nbits (int size) { - return ((size >> BITS) + 1); - } - - - private void resize(int size) { - int needed = size2nbits(size); - - // if (needed < bits.length) return; - - long newbits[] = new long[Math.max(bits.length*4,needed)]; - System.arraycopy(bits, 0, newbits, 0, bits.length); - - bits = newbits; - } - - - public void clear() { - int l = bits.length; - for (int i = 0; i < l; i++) bits[i] = 0; - } - - public boolean isElement(int state) { - int index = state >> BITS; - if (index >= bits.length) return false; - return (bits[index] & (1L << (state & MASK))) != 0; - } - - /** - * Returns one element of the set and removes it. - * - * Precondition: the set is not empty. - */ - public int getAndRemoveElement() { - int i = 0; - int o = 0; - long m = 1; - - while (bits[i] == 0) i++; - - while ( (bits[i] & m) == 0 ) { - m<<= 1; - o++; - } - - bits[i]&= ~m; - - return (i << BITS) + o; - } - - public void remove(int state) { - int index = state >> BITS; - if (index >= bits.length) return; - bits[index] &= ~(1L << (state & MASK)); - } - - /** - * Returns the set of elements that contained are in the specified set - * but are not contained in this set. - */ - public StateSet complement(StateSet set) { - - if (set == null) return null; - - StateSet result = new StateSet(); - - result.bits = new long[set.bits.length]; - - int i; - int m = Math.min(bits.length, set.bits.length); - - for (i = 0; i < m; i++) { - result.bits[i] = ~bits[i] & set.bits[i]; - } - - if (bits.length < set.bits.length) - System.arraycopy(set.bits, m, result.bits, m, result.bits.length-m); - - if (DEBUG) - Out.dump("Complement of "+this+Out.NL+"and "+set+Out.NL+" is :"+result); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - - return result; - } - - public void add(StateSet set) { - - if (DEBUG) Out.dump("StateSet.add("+set+") start"); //$NON-NLS-1$ //$NON-NLS-2$ - - if (set == null) return; - - long tbits[]; - long sbits[] = set.bits; - int sbitsl = sbits.length; - - if (bits.length < sbitsl) { - tbits = new long[sbitsl]; - System.arraycopy(bits, 0, tbits, 0, bits.length); - } - else { - tbits = this.bits; - } - - for (int i = 0; i < sbitsl; i++) { - tbits[i] |= sbits[i]; - } - - this.bits = tbits; - - if (DEBUG) { - Out.dump("StateSet.add("+set+") end"); //$NON-NLS-1$ //$NON-NLS-2$ - Out.dump("Set is : "+this); //$NON-NLS-1$ - } - } - - - - public boolean containsSet(StateSet set) { - - if (DEBUG) - Out.dump("StateSet.containsSet("+set+"), this="+this); //$NON-NLS-1$ //$NON-NLS-2$ - - int i; - int min = Math.min(bits.length, set.bits.length); - - for (i = 0; i < min; i++) - if ( (bits[i] & set.bits[i]) != set.bits[i] ) return false; - - for (i = min; i < set.bits.length; i++) - if ( set.bits[i] != 0 ) return false; - - return true; - } - - - - /** - * @throws ClassCastException if b is not a StateSet - * @throws NullPointerException if b is null - */ - public boolean equals(Object b) { - - int i = 0; - int l1,l2; - StateSet set = (StateSet) b; - - if (DEBUG) Out.dump("StateSet.equals("+set+"), this="+this); //$NON-NLS-1$ //$NON-NLS-2$ - - l1 = bits.length; - l2 = set.bits.length; - - if (l1 <= l2) { - while (i < l1) { - if (bits[i] != set.bits[i]) return false; - i++; - } - - while (i < l2) - if (set.bits[i++] != 0) return false; - } - else { - while (i < l2) { - if (bits[i] != set.bits[i]) return false; - i++; - } - - while (i < l1) - if (bits[i++] != 0) return false; - } - - return true; - } - - public int hashCode() { - long h = 1234; - long [] _bits = bits; - int i = bits.length-1; - - // ignore zero high bits - while (i >= 0 && _bits[i] == 0) i--; - - while (i >= 0) - h ^= _bits[i--] * i; - - return (int)((h >> 32) ^ h); - } - - - public StateSetEnumerator states() { - return new StateSetEnumerator(this); - } - - - public boolean containsElements() { - for (int i = 0; i < bits.length; i++) - if (bits[i] != 0) return true; - - return false; - } - - - public StateSet copy() { - StateSet set = new StateSet(); - set.bits = new long[bits.length]; - System.arraycopy(bits, 0, set.bits, 0, bits.length); - return set; - } - - - /** - * Copy specified StateSet into this. - * - * @param set the state set to copy. - */ - public void copy(StateSet set) { - - if (DEBUG) - Out.dump("StateSet.copy("+set+") start"); //$NON-NLS-1$ //$NON-NLS-2$ - - if (set == null) { - for (int i = 0; i < bits.length; i++) bits[i] = 0; - return; - } - - if (bits.length < set.bits.length) { - bits = new long[set.bits.length]; - } - else { - for (int i = set.bits.length; i < bits.length; i++) bits[i] = 0; - } - - System.arraycopy(set.bits, 0, bits, 0, bits.length); - - if (DEBUG) { - Out.dump("StateSet.copy("+set+") end"); //$NON-NLS-1$ //$NON-NLS-2$ - Out.dump("Set is : "+this); //$NON-NLS-1$ - } - } - - - public String toString() { - StateSetEnumerator set = states(); - - StringBuffer result = new StringBuffer("{"); //$NON-NLS-1$ - - if ( set.hasMoreElements() ) result.append(""+set.nextElement()); //$NON-NLS-1$ - - while ( set.hasMoreElements() ) { - int i = set.nextElement(); - result.append( ", "+i); //$NON-NLS-1$ - } - - result.append("}"); //$NON-NLS-1$ - - return result.toString(); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/StateSetEnumerator.java b/tools/lexer/jflex-1.4/src/JFlex/StateSetEnumerator.java deleted file mode 100644 index 36188486ba72..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/StateSetEnumerator.java +++ /dev/null @@ -1,124 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex; - -/** - * Enumerates the states of a StateSet. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class StateSetEnumerator { - - private final static boolean DEBUG = false; - - private int index; - private int offset; - private long mask; - - private long [] bits; - - /** - * creates a new StateSetEnumerator that is not yet associated - * with a StateSet. hasMoreElements() and nextElement() will - * throw NullPointerException when used before reset() - */ - public StateSetEnumerator() { - } - - public StateSetEnumerator(StateSet states) { - reset(states); - } - - public void reset(StateSet states) { - bits = states.bits; - index = 0; - offset = 0; - mask = 1; - while (index < bits.length && bits[index] == 0) - index++; - - if (index >= bits.length) return; - - while (offset <= StateSet.MASK && ((bits[index] & mask) == 0)) { - mask<<= 1; - offset++; - } - } - - private void advance() { - - if (DEBUG) Out.dump("Advancing, at start, index = "+index+", offset = "+offset); //$NON-NLS-1$ //$NON-NLS-2$ - - // cache fields in local variable for faster access - int _index = this.index; - int _offset = this.offset; - long _mask = this.mask; - long [] _bits = this.bits; - - long bi = _bits[_index]; - - do { - _offset++; - _mask<<= 1; - } while (_offset <= StateSet.MASK && ((bi & _mask) == 0)); - - if (_offset > StateSet.MASK) { - int length = _bits.length; - - do - _index++; - while (_index < length && _bits[_index] == 0); - - if (_index >= length) { - this.index = length; // indicates "no more elements" - return; - } - - _offset = 0; - _mask = 1; - bi = _bits[_index]; - - // terminates, because bi != 0 - while ((bi & _mask) == 0) { - _mask<<= 1; - _offset++; - } - } - - // write back cached values - this.index = _index; - this.mask = _mask; - this.offset = _offset; - } - - public boolean hasMoreElements() { - if (DEBUG) Out.dump("hasMoreElements, index = "+index+", offset = "+offset); //$NON-NLS-1$ //$NON-NLS-2$ - return index < bits.length; - } - - public int nextElement() { - if (DEBUG) Out.dump("nextElement, index = "+index+", offset = "+offset); //$NON-NLS-1$ //$NON-NLS-2$ - int x = (index << StateSet.BITS) + offset; - advance(); - return x; - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/StdOutWriter.java b/tools/lexer/jflex-1.4/src/JFlex/StdOutWriter.java deleted file mode 100644 index ca747f70635c..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/StdOutWriter.java +++ /dev/null @@ -1,113 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex; - - -import java.io.*; -import java.awt.TextArea; - - -/** - * Convenience class for JFlex stdout, redirects output to a TextArea - * if in GUI mode. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public final class StdOutWriter extends PrintWriter { - - /** text area to write to if in gui mode, gui mode = (text != null) */ - private TextArea text; - - /** - * approximation of the current column in the text area - * for auto wrapping at wrap characters - **/ - private int col; - - /** auto wrap lines in gui mode at this value */ - private final static int wrap = 78; - - /** A StdOutWriter, attached to System.out, no gui mode */ - public StdOutWriter() { - super(System.out,true); - } - - /** A StdOutWrite, attached to the specified output stream, no gui mode */ - public StdOutWriter(OutputStream out) { - super(out,true); - } - - /** - * Set the TextArea to write text to. Will continue - * to write to System.out if text is null. - * - * @param text the TextArea to write to - */ - public void setGUIMode(TextArea text) { - this.text = text; - } - - /** Write a single character. */ - public void write(int c) { - if (text != null) { - text.append(String.valueOf((char) c)); - if (++col > wrap) println(); - } - else - super.write(c); - } - - /** Write a portion of an array of characters. */ - public void write(char buf[], int off, int len) { - if (text != null) { - text.append(new String(buf,off,len)); - if ((col+=len) > wrap) println(); - } - else - super.write(buf, off, len); - } - - /** Write a portion of a string. */ - public void write(String s, int off, int len) { - if (text != null) { - text.append(s.substring(off,off+len)); - if ((col+=len) > wrap) println(); - } - else { - super.write(s,off,len); - flush(); - } - } - - /** - * Begin a new line. Which actual character/s is/are written - * depends on the runtime platform. - */ - public void println() { - if (text != null) { - text.append(Out.NL); - col = 0; - } - else - super.println(); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/Timer.java b/tools/lexer/jflex-1.4/src/JFlex/Timer.java deleted file mode 100644 index f8be1313cd89..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/Timer.java +++ /dev/null @@ -1,110 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex; - -/** - * Very simple timer for code generation time statistics. - * - * Not very exact, measures user time, not processor time. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class Timer { - - /* the timer stores start and stop time from currentTimeMillis() */ - private long startTime, stopTime; - - /* flag if the timer is running (if stop time is valid) */ - private boolean running; - - - /** - * Construct a new timer that starts immediatly. - */ - public Timer() { - startTime = System.currentTimeMillis(); - running = true; - } - - - /** - * Start the timer. If it is already running, the old start - * time is lost. - */ - public void start() { - startTime = System.currentTimeMillis(); - running = true; - } - - - /** - * Stop the timer. - */ - public void stop() { - stopTime = System.currentTimeMillis(); - running = false; - } - - - /** - * Return the number of milliseconds the timer has been running. - * - * (up till now, if it still runs, up to the stop time if it has been stopped) - */ - public long diff() { - if (running) - return System.currentTimeMillis()-startTime; - else - return stopTime-startTime; - } - - - /** - * Return a string representation of the timer. - * - * @return a string displaying the diff-time in readable format (h m s ms) - * - * @see Timer#diff - */ - public String toString() { - long diff = diff(); - - long millis = diff%1000; - long secs = (diff/1000)%60; - long mins = (diff/(1000*60))%60; - long hs = (diff/(1000*3600))%24; - long days = diff/(1000*3600*24); - - if (days > 0) - return days+"d "+hs+"h "+mins+"m "+secs+"s "+millis+"ms"; - - if (hs > 0) - return hs+"h "+mins+"m "+secs+"s "+millis+"ms"; - - if (mins > 0) - return mins+"m "+secs+"s "+millis+"ms"; - - if (secs > 0) - return secs+"s "+millis+"ms"; - - return millis+"ms"; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/anttask/JFlexTask.java b/tools/lexer/jflex-1.4/src/JFlex/anttask/JFlexTask.java deleted file mode 100644 index 9b34cc2e252d..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/anttask/JFlexTask.java +++ /dev/null @@ -1,266 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex Anttask * - * Copyright (C) 2001 Rafal Mantiuk * - * Copyright (C) 2003 changes by Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.anttask; - -import org.apache.tools.ant.Task; -import org.apache.tools.ant.BuildException; - -import JFlex.Main; -import JFlex.Options; - -import java.io.*; - -/** - * JFlex task class - * - * @author Rafal Mantiuk - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class JFlexTask extends Task { - private File inputFile; - - // found out by looking into .flex file - private String className = null; - private String packageName = null; - - /** for javac-like dest dir behaviour */ - private File destinationDir; - - /** the actual output directory (outputDir = destinationDir + package)) */ - private File outputDir = null; - - public JFlexTask() { - // ant default is different from the rest of JFlex - setVerbose(false); - Options.progress = false; - } - - public void execute() throws BuildException { - try { - if (inputFile == null) - throw new BuildException("Input file needed. Use "); - - if (!inputFile.canRead()) - throw new BuildException("Cannot read input file "+inputFile); - - try { - findPackageAndClass(); - normalizeOutdir(); - File destFile = new File(outputDir, className + ".java"); - - if (inputFile.lastModified() > destFile.lastModified()) { - Main.generate(inputFile); - if (!Options.verbose) - System.out.println("Generated: " + destFile.getName()); - } - } catch (IOException e1) { - throw new BuildException("IOException: " + e1.toString()); - } - } catch (JFlex.GeneratorException e) { - throw new BuildException("JFlex: generation failed!"); - } - } - - /** - * Peek into .flex file to get package and class name - * - * @throws IOException if there is a problem reading the .flex file - */ - public void findPackageAndClass() throws IOException { - // find name of the package and class in jflex source file - packageName = null; - className = null; - - LineNumberReader reader = new LineNumberReader(new FileReader(inputFile)); - - while (className == null || packageName == null) { - String line = reader.readLine(); - if (line == null) break; - - if (packageName == null) { - int index = line.indexOf("package"); - if (index >= 0) { - index += 7; - - int end = line.indexOf(';', index); - if (end >= index) { - packageName = line.substring(index, end); - packageName = packageName.trim(); - } - } - } - - if (className == null) { - int index = line.indexOf("%class"); - if (index >= 0) { - index += 6; - - className = line.substring(index); - className = className.trim(); - } - } - } - - // package name may be null, but class name not - if (className == null) className = "Yylex"; - } - - /** - * Sets the actual output directory if not already set. - * - * Uses javac logic to determine output dir = dest dir + package name - * If not destdir has been set, output dir = parent of input file - * - * Assumes that package name is already set. - */ - public void normalizeOutdir() { - if (outputDir != null) return; - - // find out what the destination directory is. Append packageName to dest dir. - File destDir; - - // this is not the default the jflex logic, but javac-like - if (destinationDir != null) { - if (packageName == null) { - destDir = destinationDir; - } - else { - String path = packageName.replace('.', File.separatorChar); - destDir = new File(destinationDir,path); - } - } else { //save parser to the same dir as .flex - destDir = new File(inputFile.getParent()); - } - - setOutdir(destDir); - } - - /** - * @return package name of input file - * - * @see JFlexTask.findPackageAndClass - */ - public String getPackage() { - return packageName; - } - - /** - * @return class name of input file - * - * @see JFlexTask.findPackageAndClass - */ - public String getClassName() { - return className; - } - - public void setDestdir(File destinationDir) { - this.destinationDir = destinationDir; - } - - public void setOutdir(File outDir) { - this.outputDir = outDir; - Options.setDir(outputDir); - } - - public void setFile(File file) { - this.inputFile = file; - } - - public void setGenerateDot(boolean genDot) { - setDot(genDot); - } - - public void setTimeStatistics(boolean displayTime) { - Options.time = displayTime; - } - - public void setTime(boolean displayTime) { - setTimeStatistics(displayTime); - } - - public void setVerbose(boolean verbose) { - Options.verbose = verbose; - } - - public void setSkeleton(File skeleton) { - Options.setSkeleton(skeleton); - } - - public void setSkel(File skeleton) { - setSkeleton(skeleton); - } - - public void setSkipMinimization(boolean skipMin) { - setNomin(skipMin); - } - - public void setNomin(boolean b) { - Options.no_minimize = b; - } - - public void setNobak(boolean b) { - Options.no_backup = b; - } - - public void setSwitch(boolean b) { - if (b) { - Options.gen_method = Options.SWITCH; - } - else { - Options.gen_method = Options.PACK; - } - } - - public void setTable(boolean b) { - if (b) { - Options.gen_method = Options.TABLE; - } - else { - Options.gen_method = Options.PACK; - } - } - - public void setPack(boolean b) { - if (b) { - Options.gen_method = Options.PACK; - } - else { - Options.gen_method = Options.SWITCH; - } - } - - public void setDot(boolean b) { - Options.dot = b; - } - - public void setDump(boolean b) { - Options.dump = b; - } - - public void setJLex(boolean b) { - Options.jlex = b; - } - - public void setCharAt(boolean b) { - Options.char_at = b; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/gui/GeneratorThread.java b/tools/lexer/jflex-1.4/src/JFlex/gui/GeneratorThread.java deleted file mode 100644 index a225e890664f..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/gui/GeneratorThread.java +++ /dev/null @@ -1,93 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.gui; - -import JFlex.*; - -import java.io.File; - - -/** - * Low priority thread for code generation (low priority - * that gui has time for screen updates) - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class GeneratorThread extends Thread { - - /** there must be at most one instance of this Thread running */ - private static volatile boolean running = false; - - /** input file setting from GUI */ - String inputFile; - - /** output directory */ - String outputDir; - - /** main UI component, likes to be notified when generator finishes */ - MainFrame parent; - - /** - * Create a new GeneratorThread, but do not run it yet. - * - * @param parent the frame, main UI component - * @param inputFile input file from UI settings - * @param messages where generator messages should appear - * @param outputDir output directory from UI settings - */ - public GeneratorThread(MainFrame parent, String inputFile, - String outputDir) { - this.parent = parent; - this.inputFile = inputFile; - this.outputDir = outputDir; - } - - - /** - * Run the generator thread. Only one instance of it can run at any time. - */ - public void run() { - if (running) { - Out.error(ErrorMessages.ALREADY_RUNNING); - parent.generationFinished(false); - } - else { - running = true; - setPriority(MIN_PRIORITY); - try { - if (!outputDir.equals("")) { - Options.setDir(outputDir); - } - Main.generate(new File(inputFile)); - Out.statistics(); - parent.generationFinished(true); - } - catch (GeneratorException e) { - Out.statistics(); - parent.generationFinished(false); - } - finally { - running = false; - } - } - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/gui/GridPanel.java b/tools/lexer/jflex-1.4/src/JFlex/gui/GridPanel.java deleted file mode 100644 index 753b136fb96e..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/gui/GridPanel.java +++ /dev/null @@ -1,161 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.gui; - -import java.awt.*; -import java.util.*; - -/** - * Grid layout manager like GridLayout but with predefinable - * grid size. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class GridPanel extends Panel implements Handles { - - private int cols; - private int rows; - - private int hgap; - private int vgap; - - private Vector constraints = new Vector(); - private Insets insets = new Insets(0,0,0,0); - - public GridPanel(int cols, int rows) { - this(cols, rows, 0, 0); - } - - public GridPanel(int cols, int rows, int hgap, int vgap) { - this.cols = cols; - this.rows = rows; - this.hgap = hgap; - this.vgap = vgap; - } - - public void doLayout() { - Dimension size = getSize(); - size.height -= insets.top+insets.bottom; - size.width -= insets.left+insets.right; - - float cellWidth = size.width/cols; - float cellHeight = size.height/rows; - - for (int i = 0; i < constraints.size(); i++) { - GridPanelConstraint c = (GridPanelConstraint) constraints.elementAt(i); - - float x = cellWidth * c.x + insets.left + hgap/2; - float y = cellHeight * c.y + insets.right + vgap/2; - - float width, height; - - if (c.handle == FILL) { - width = (cellWidth-hgap) * c.width; - height = (cellHeight-vgap) * c.height; - } - else { - Dimension d = c.component.getPreferredSize(); - width = d.width; - height = d.height; - } - - switch (c.handle) { - case TOP_CENTER: - x+= (cellWidth+width)/2; - break; - case TOP_RIGHT: - x+= cellWidth-width; - break; - case CENTER_LEFT: - y+= (cellHeight+height)/2; - break; - case CENTER: - x+= (cellWidth+width)/2; - y+= (cellHeight+height)/2; - break; - case CENTER_RIGHT: - y+= (cellHeight+height)/2; - x+= cellWidth-width; - break; - case BOTTOM: - y+= cellHeight-height; - break; - case BOTTOM_CENTER: - x+= (cellWidth+width)/2; - y+= cellHeight-height; - break; - case BOTTOM_RIGHT: - y+= cellHeight-height; - x+= cellWidth-width; - break; - } - - c.component.setBounds(new Rectangle((int)x, (int)y, (int)width, (int)height)); - } - } - - public Dimension getPreferredSize() { - float dy = 0; - float dx = 0; - - for (int i = 0; i < constraints.size(); i++) { - GridPanelConstraint c = (GridPanelConstraint) constraints.elementAt(i); - - Dimension d = c.component.getPreferredSize(); - - dx = Math.max(dx, d.width/c.width); - dy = Math.max(dy, d.height/c.height); - } - - dx+= hgap; - dy+= vgap; - - dx*= cols; - dy*= rows; - - dx+= insets.left+insets.right; - dy+= insets.top+insets.bottom; - - return new Dimension((int)dx,(int)dy); - } - - public void setInsets(Insets insets) { - this.insets = insets; - } - - public void add(int x, int y, Component c) { - add(x,y,1,1,FILL,c); - } - - public void add(int x, int y, int handle, Component c) { - add(x,y,1,1,handle,c); - } - - public void add(int x, int y, int dx, int dy, Component c) { - add(x,y,dx,dy,FILL,c); - } - - public void add(int x, int y, int dx, int dy, int handle, Component c) { - super.add(c); - constraints.addElement(new GridPanelConstraint(x,y,dx,dy,handle,c)); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/gui/GridPanelConstraint.java b/tools/lexer/jflex-1.4/src/JFlex/gui/GridPanelConstraint.java deleted file mode 100644 index e2de3c92ecc3..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/gui/GridPanelConstraint.java +++ /dev/null @@ -1,44 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex.gui; - -import java.awt.Component; - -/** - * Constraints for layout elements of GridLayout - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class GridPanelConstraint { - - int x, y, width, height, handle; - Component component; - - public GridPanelConstraint(int x, int y, int width, int height, - int handle, Component component) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - this.handle = handle; - this.component = component; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/gui/Handles.java b/tools/lexer/jflex-1.4/src/JFlex/gui/Handles.java deleted file mode 100644 index c8a0e679d10c..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/gui/Handles.java +++ /dev/null @@ -1,49 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.gui; - -/** - * Constants used for GridLayout - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public interface Handles { - - int FILL = 0; - - int TOP = 1; - int TOP_LEFT = TOP; - int TOP_CENTER = 2; - int TOP_RIGHT = 3; - - int CENTER_LEFT = 4; - int CENTER = 5; - int CENTER_CENTER = CENTER; - int CENTER_RIGHT = 6; - - int BOTTOM = 7; - int BOTTOM_LEFT = BOTTOM; - int BOTTOM_CENTER = 8; - int BOTTOM_RIGHT = 9; - -} - diff --git a/tools/lexer/jflex-1.4/src/JFlex/gui/MainFrame.java b/tools/lexer/jflex-1.4/src/JFlex/gui/MainFrame.java deleted file mode 100644 index 4990ea795e0a..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/gui/MainFrame.java +++ /dev/null @@ -1,275 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.gui; - -import JFlex.Main; -import JFlex.Out; - -import java.io.File; -import java.awt.*; -import java.awt.event.*; - -/** - * JFlex main application frame (GUI mode only) - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -final public class MainFrame extends Frame implements Handles { - - private volatile boolean choosing; - - private String fileName = ""; - private String dirName = ""; - - private Button quit; - private Button options; - private Button generate; - private Button stop; - private Button specChoose; - private Button dirChoose; - - private TextField spec; - private TextField dir; - - private TextArea messages; - - private GeneratorThread thread; - - private OptionsDialog dialog; - - - public MainFrame() { - super("JFlex "+Main.version); - buildContent(); - - addWindowListener( new WindowAdapter() { - public void windowClosing(WindowEvent e) { - quit(); - } - }); - - pack(); - show(); - } - - - private void buildContent() { - setBackground(SystemColor.control); - - generate = new Button("Generate"); - quit = new Button("Quit"); - options = new Button("Options"); - stop = new Button("Stop"); - dirChoose = new Button("Browse"); - dir = new TextField(10); - specChoose = new Button("Browse"); - spec = new TextField(10); - messages = new TextArea(10,80); - - messages.setEditable(false); - Font font = messages.getFont(); - if (font != null) - messages.setFont(new Font("Monospaced", font.getStyle(), font.getSize())); - else - messages.setFont(new Font("Monospaced", Font.PLAIN, 12)); - - Out.setGUIMode(messages); - - generate.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - generate(); - } - } ); - - options.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - showOptions(); - } - } ); - - quit.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - quit(); - } - } ); - - stop.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - stop(); - } - } ); - - specChoose.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - specChoose(); - } - } ); - - dirChoose.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - dirChoose(); - } - } ); - - spec.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - fileName = spec.getText(); - generate(); - } - } ); - - spec.addTextListener( new TextListener() { - public void textValueChanged(TextEvent e) { - fileName = spec.getText(); - } - } ); - - dir.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - dirName = dir.getText(); - generate(); - } - } ); - - dir.addTextListener( new TextListener() { - public void textValueChanged(TextEvent e) { - dirName = dir.getText(); - } - } ); - - GridPanel north = new GridPanel(5,4,10,10); - north.setInsets( new Insets(10,5,5,10) ); - - north.add( 4,0, quit); - north.add( 4,1, generate); - north.add( 4,2, options); - north.add( 4,3, stop); - - north.add( 0,0, BOTTOM, new Label("Lexical specification:")); - north.add( 0,1, 2,1, spec); - north.add( 2,1, specChoose); - - north.add( 0,2, BOTTOM, new Label("Output directory:")); - north.add( 0,3, 2,1, dir); - north.add( 2,3, dirChoose); - - Panel center = new Panel(new BorderLayout()); - center.add("North", new Label("Messages:")); - center.add("Center", messages); - - add("North", north); - add("Center", center); - - setEnabledAll(false); - } - - protected void showOptions() { - if (dialog == null) { - dialog = new OptionsDialog(this); - } - dialog.show(); - } - - - public Dimension getPreferredSize() { - Dimension d = super.getPreferredSize(); - d.width = messages.getPreferredSize().width; - return d; - } - - private void setEnabledAll(boolean generating) { - stop.setEnabled( generating ); - quit.setEnabled( !generating ); - generate.setEnabled( !generating ); - dirChoose.setEnabled( !generating ); - dir.setEnabled( !generating ); - specChoose.setEnabled( !generating ); - spec.setEnabled( !generating ); - } - - private void generate() { - // workaround for a weird AWT bug - if (choosing) return; - - setEnabledAll(true); - - thread = new GeneratorThread(this, fileName, dirName); - thread.start(); - } - - public void generationFinished(boolean success) { - setEnabledAll(false); - - if (success) - messages.append(Out.NL+"Generation finished successfully."+Out.NL); - else - messages.append(Out.NL+"Generation aborted."+Out.NL); - } - - private void stop() { - if (thread != null) { - /* stop ok here despite deprecation (?) - I don't know any good way to abort generation without changing the - generator code */ - thread.stop(); - thread = null; - } - generationFinished(false); - } - - private void quit() { - setVisible(false); - System.exit(0); - } - - private void dirChoose() { - choosing = true; - - FileDialog d = new FileDialog(this, "Choose directory", FileDialog.LOAD); - - d.show(); - - if (d.getDirectory() != null) { - dir.setText( (new File(d.getDirectory())).getAbsolutePath() ); - } - - choosing = false; - } - - private void specChoose() { - choosing = true; - - FileDialog d = new FileDialog(this, "Choose file", FileDialog.LOAD); - - d.setFile("*.flex"); - d.show(); - - if (d.getFile() != null) { - fileName = d.getDirectory()+d.getFile(); - dir.setText(d.getDirectory()); - spec.setText(fileName); - } - - choosing = false; - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/gui/OptionsDialog.java b/tools/lexer/jflex-1.4/src/JFlex/gui/OptionsDialog.java deleted file mode 100644 index 7ac19505c672..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/gui/OptionsDialog.java +++ /dev/null @@ -1,259 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.gui; - -import java.awt.*; -import java.awt.event.*; - -import java.io.File; - -import JFlex.GeneratorException; -import JFlex.Options; -import JFlex.Skeleton; - -/** - * A dialog for setting JFlex options - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class OptionsDialog extends Dialog { - - private Frame owner; - - private Button skelBrowse; - private TextField skelFile; - - private Button ok; - private Button defaults; - - private Checkbox dump; - private Checkbox verbose; - private Checkbox jlex; - private Checkbox no_minimize; - private Checkbox no_backup; - private Checkbox time; - private Checkbox dot; - - private Checkbox tableG; - private Checkbox switchG; - private Checkbox packG; - - - /** - * Create a new options dialog - * - * @param owner - */ - public OptionsDialog(Frame owner) { - super(owner, "Options"); - - this.owner = owner; - - setup(); - pack(); - - addWindowListener( new WindowAdapter() { - public void windowClosing(WindowEvent e) { - close(); - } - }); - } - - public void setup() { - // create components - ok = new Button("Ok"); - defaults = new Button("Defaults"); - skelBrowse = new Button(" Browse"); - skelFile = new TextField(); - skelFile.setEditable(false); - dump = new Checkbox(" dump"); - verbose = new Checkbox(" verbose"); - - jlex = new Checkbox(" JLex compatibility"); - no_minimize = new Checkbox(" skip minimization"); - no_backup = new Checkbox(" no backup file"); - time = new Checkbox(" time statistics"); - dot = new Checkbox(" dot graph files"); - - CheckboxGroup codeG = new CheckboxGroup(); - tableG = new Checkbox(" table",Options.gen_method == Options.TABLE, codeG); - switchG = new Checkbox(" switch",Options.gen_method == Options.SWITCH, codeG); - packG = new Checkbox(" pack",Options.gen_method == Options.PACK, codeG); - - // setup interaction - ok.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - close(); - } - } ); - - defaults.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - setDefaults(); - } - } ); - - skelBrowse.addActionListener( new ActionListener() { - public void actionPerformed(ActionEvent e) { - skelBrowse(); - } - } ); - - tableG.addItemListener( new ItemListener() { - public void itemStateChanged(ItemEvent e) { - setGenMethod(); - } - } ); - - verbose.addItemListener( new ItemListener() { - public void itemStateChanged(ItemEvent e) { - Options.verbose = verbose.getState(); - } - } ); - - dump.addItemListener( new ItemListener() { - public void itemStateChanged(ItemEvent e) { - Options.dump = dump.getState(); - } - } ); - - jlex.addItemListener( new ItemListener() { - public void itemStateChanged(ItemEvent e) { - Options.jlex = jlex.getState(); - } - } ); - - no_minimize.addItemListener( new ItemListener() { - public void itemStateChanged(ItemEvent e) { - Options.no_minimize = no_minimize.getState(); - } - } ); - - no_backup.addItemListener( new ItemListener() { - public void itemStateChanged(ItemEvent e) { - Options.no_backup = no_backup.getState(); - } - } ); - - dot.addItemListener( new ItemListener() { - public void itemStateChanged(ItemEvent e) { - Options.dot = dot.getState(); - } - } ); - - time.addItemListener( new ItemListener() { - public void itemStateChanged(ItemEvent e) { - Options.time = time.getState(); - } - } ); - - // setup layout - GridPanel panel = new GridPanel(4,7,10,10); - panel.setInsets( new Insets(10,5,5,10) ); - - panel.add(3,0,ok); - panel.add(3,1,defaults); - - panel.add(0,0,2,1,Handles.BOTTOM,new Label("skeleton file:")); - panel.add(0,1,2,1,skelFile); - panel.add(2,1,1,1,Handles.TOP, skelBrowse); - - panel.add(0,2,1,1,Handles.BOTTOM,new Label("code:")); - panel.add(0,3,1,1,tableG); - panel.add(0,4,1,1,switchG); - panel.add(0,5,1,1,packG); - - panel.add(1,3,1,1,dump); - panel.add(1,4,1,1,verbose); - panel.add(1,5,1,1,time); - - - panel.add(2,3,1,1,no_minimize); - panel.add(2,4,1,1,no_backup); - - panel.add(3,3,1,1,jlex); - panel.add(3,4,1,1,dot); - - add("Center",panel); - - updateState(); - } - - private void skelBrowse() { - FileDialog d = new FileDialog(owner , "Choose file", FileDialog.LOAD); - d.show(); - - if (d.getFile() != null) { - File skel = new File(d.getDirectory()+d.getFile()); - try { - Skeleton.readSkelFile(skel); - skelFile.setText(skel.toString()); - } - catch (GeneratorException e) { - // do nothing - } - } - } - - private void setGenMethod() { - if ( tableG.getState() ) { - Options.gen_method = Options.TABLE; - return; - } - - if ( switchG.getState() ) { - Options.gen_method = Options.SWITCH; - return; - } - - if ( packG.getState() ) { - Options.gen_method = Options.PACK; - return; - } - } - - private void updateState() { - dump.setState(Options.dump); - verbose.setState(Options.verbose); - jlex.setState(Options.jlex); - no_minimize.setState(Options.no_minimize); - no_backup.setState(Options.no_backup); - time.setState(Options.time); - dot.setState(Options.dot); - - tableG.setState(Options.gen_method == Options.TABLE); - switchG.setState(Options.gen_method == Options.SWITCH); - packG.setState(Options.gen_method == Options.PACK); - } - - private void setDefaults() { - Options.setDefaults(); - Skeleton.readDefault(); - skelFile.setText(""); - updateState(); - } - - public void close() { - hide(); - } - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/skeleton.default b/tools/lexer/jflex-1.4/src/JFlex/skeleton.default deleted file mode 100644 index c2a807820775..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/skeleton.default +++ /dev/null @@ -1,317 +0,0 @@ - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** initial size of the lookahead buffer */ ---- private static final int ZZ_BUFFERSIZE = ...; - - /** lexical states */ ---- lexical states, charmap - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - ---- isFinal list - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the textposition at the last state to be included in yytext */ - private int zzPushbackPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; - - /** number of newlines encountered up to the start of the matched text */ - private int yyline; - - /** the number of characters up to the start of the matched text */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - ---- user class code - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ ---- constructor declaration - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzPushbackPos-= zzStartRead; - zzStartRead = 0; - } - - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); - - if (numRead < 0) { - return true; - } - else { - zzEndRead+= numRead; - return false; - } - } - - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = zzPushbackPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ ---- zzScanError declaration - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - ---- throws clause - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ ---- yypushback decl (contains zzScanError exception) - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - ---- zzDoEOF - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ ---- yylex declaration - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - ---- local declarations - - while (true) { - zzMarkedPosL = zzMarkedPos; - ---- start admin (line, char, col count) - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - ---- start admin (lexstate etc) - - zzForAction: { - while (true) { - ---- next input, line, col, char count, next transition, isFinal action - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; ---- line count update - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; ---- char count update - ---- actions - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; ---- eofvalue - } - else { ---- no match - } - } - } - } - ---- main - -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/sym.java b/tools/lexer/jflex-1.4/src/JFlex/sym.java deleted file mode 100644 index 9c340d530a93..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/sym.java +++ /dev/null @@ -1,91 +0,0 @@ - -//---------------------------------------------------- -// The following code was generated by CUP v0.11a beta 20060608 -// Mon Dec 03 16:12:49 MSK 2012 -//---------------------------------------------------- - -package JFlex; - -/** CUP generated interface containing symbol constants. */ -public interface sym { - /* terminals */ - public static final int DELIMITER = 9; - public static final int UNICODE_SPACE_SEPARATOR = 41; - public static final int UNICODE_OTHER_LETTER = 34; - public static final int USERCODE = 61; - public static final int UNICODE_ENCLOSING_MARK = 36; - public static final int REGEXPEND = 19; - public static final int CCLASSNOT = 74; - public static final int UNICODE = 18; - public static final int UNICODE_CURRENCY_SYMBOL = 54; - public static final int UNICODE_LETTER_NUMBER = 39; - public static final int UNICODE_START_PUNCTUATION = 49; - public static final int UNICODE_OTHER_SYMBOL = 56; - public static final int UNICODE_COMBINING_SPACING_MARK = 37; - public static final int UNICODE_FINAL_QUOTE_PUNCTUATION = 58; - public static final int UNICODE_UNASSIGNED = 29; - public static final int COMMA = 11; - public static final int RBRACE = 15; - public static final int UNICODE_UPPERCASE_LETTER = 30; - public static final int UNICODE_INITIAL_QUOTE_PUNCTUATION = 57; - public static final int LBRACE = 14; - public static final int UNICODE_SURROGATE = 47; - public static final int ACTION = 59; - public static final int CHAR_I = 77; - public static final int UNICODE_DECIMAL_DIGIT_NUMBER = 38; - public static final int CLOSECLASS = 7; - public static final int TILDE = 69; - public static final int UNICODE_NON_SPACING_MARK = 35; - public static final int DOLLAR = 5; - public static final int UNICODE_END_PUNCTUATION = 50; - public static final int FULL = 17; - public static final int LESSTHAN = 12; - public static final int UNICODE_DASH_PUNCTUATION = 48; - public static final int CLOSEBRACKET = 3; - public static final int PLUS = 64; - public static final int QUESTION = 66; - public static final int CHAR = 70; - public static final int NOACTION = 27; - public static final int STAR = 63; - public static final int UNICODE_CONNECTOR_PUNCTUATION = 51; - public static final int CONCAT = 75; - public static final int ASCII = 16; - public static final int MORETHAN = 13; - public static final int OPENCLASS = 6; - public static final int POINT = 67; - public static final int JLETTERDIGITCLASS = 21; - public static final int EOFRULE = 26; - public static final int EOF = 0; - public static final int UNICODE_MODIFIER_LETTER = 33; - public static final int BANG = 68; - public static final int UPPERCLASS = 24; - public static final int JLETTERCLASS = 20; - public static final int REPEAT = 62; - public static final int LOOKAHEAD = 28; - public static final int UNICODE_OTHER_NUMBER = 40; - public static final int UNICODE_PRIVATE_USE = 46; - public static final int UNICODE_MATH_SYMBOL = 53; - public static final int OPENBRACKET = 2; - public static final int HAT = 4; - public static final int IDENT = 60; - public static final int error = 1; - public static final int UNICODE_PARAGRAPH_SEPARATOR = 43; - public static final int LOWERCLASS = 25; - public static final int STRING_I = 76; - public static final int UNICODE_MODIFIER_SYMBOL = 55; - public static final int UNICODE_CONTROL = 44; - public static final int UNICODE_OTHER_PUNCTUATION = 52; - public static final int DIGITCLASS = 23; - public static final int UNICODE_FORMAT = 45; - public static final int UNICODE_TITLECASE_LETTER = 32; - public static final int DASH = 8; - public static final int MACROUSE = 72; - public static final int STRING = 71; - public static final int CCLASS = 73; - public static final int UNICODE_LOWERCASE_LETTER = 31; - public static final int LETTERCLASS = 22; - public static final int BAR = 65; - public static final int UNICODE_LINE_SEPARATOR = 42; - public static final int EQUALS = 10; -} - diff --git a/tools/lexer/jflex-1.4/src/JFlex/tests/AllTests.java b/tools/lexer/jflex-1.4/src/JFlex/tests/AllTests.java deleted file mode 100644 index eaa370ffbf14..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/tests/AllTests.java +++ /dev/null @@ -1,50 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * jflex * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.tests; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * AllTests - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("JFlex tests"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(AntTaskTests.class)); - suite.addTest(new TestSuite(CharClassesTest.class)); - suite.addTest(new TestSuite(EmitterTest.class)); - suite.addTest(new TestSuite(RegExpTests.class)); - suite.addTest(new TestSuite(SkeletonTest.class)); - suite.addTest(new TestSuite(PackEmitterTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/tests/AntTaskTests.java b/tools/lexer/jflex-1.4/src/JFlex/tests/AntTaskTests.java deleted file mode 100644 index 9a717056383c..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/tests/AntTaskTests.java +++ /dev/null @@ -1,167 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -package JFlex.tests; - -import java.io.File; -import java.io.IOException; - -import JFlex.Options; -import JFlex.anttask.JFlexTask; - -import junit.framework.TestCase; - -/** - * Unit tests for the jflex ant task. - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class AntTaskTests extends TestCase { - - private JFlexTask task; - - /** - * Constructor for AntTaskTests. - * - * @param name test case name - */ - public AntTaskTests(String name) { - super(name); - } - - /* - * @see TestCase#setUp() - */ - protected void setUp() throws Exception { - super.setUp(); - Options.setDefaults(); - task = new JFlexTask(); - } - - public void testPackageAndClass() throws IOException { - task.setFile(new File("src/JFlex/LexScan.flex")); - task.findPackageAndClass(); - assertEquals(task.getPackage(), "JFlex"); - assertEquals(task.getClassName(), "LexScan"); - } - - public void testPackageAndClassDefaults() throws IOException { - task.setFile(new File("examples/simple/simple.flex")); - task.findPackageAndClass(); - assertEquals(task.getPackage(), null); - assertEquals(task.getClassName(), "Yylex"); - } - - public void testDestdir() throws IOException { - task.setFile(new File("src/JFlex/LexScan.flex")); - File dir = new File("src"); - task.setDestdir(dir); - task.findPackageAndClass(); - task.normalizeOutdir(); - // not default jflex logic, but javac (uses package name) - assertEquals(Options.getDir(), new File(dir, "JFlex")); - } - - public void testOutdir() throws IOException { - task.setFile(new File("src/JFlex/LexScan.flex")); - File dir = new File("src"); - task.setOutdir(dir); - task.findPackageAndClass(); - task.normalizeOutdir(); - // this should be default jflex logic - assertEquals(Options.getDir(), dir); - } - - public void testDefaultDir() throws IOException { - task.setFile(new File("src/JFlex/LexScan.flex")); - task.findPackageAndClass(); - task.normalizeOutdir(); - // this should be default jflex logic - assertEquals(Options.getDir(), new File("src/JFlex")); - } - - public void testNomin() { - assertTrue(!Options.no_minimize); - task.setNomin(true); - assertTrue(Options.no_minimize); - } - - public void testSkipMinimization() { - assertTrue(!Options.no_minimize); - task.setSkipMinimization(true); - assertTrue(Options.no_minimize); - } - - public void testNobak() { - assertTrue(!Options.no_backup); - task.setNobak(true); - assertTrue(Options.no_backup); - } - - public void testCodeGen() { - task.setSwitch(true); - assertEquals(Options.gen_method, Options.SWITCH); - task.setTable(true); - assertEquals(Options.gen_method, Options.TABLE); - task.setPack(true); - assertEquals(Options.gen_method, Options.PACK); - } - - public void testSkel() { - task.setVerbose(false); // avoid to java console pop up - task.setSkeleton(new File("src/skeleton.nested")); - assertTrue(JFlex.Skeleton.line[3].indexOf("java.util.Stack") > 0); - } - - public void testVerbose() { - task.setVerbose(false); - assertTrue(!Options.verbose); - task.setVerbose(true); - assertTrue(Options.verbose); - } - - public void testTime() { - assertTrue(!Options.time); - task.setTimeStatistics(true); - assertTrue(Options.time); - task.setTime(false); - assertTrue(!Options.time); - } - - public void testDot() { - assertTrue(!Options.dot); - task.setDot(true); - assertTrue(Options.dot); - task.setGenerateDot(false); - assertTrue(!Options.dot); - } - - public void testDump() { - assertTrue(!Options.dump); - task.setDump(true); - assertTrue(Options.dump); - } - - public void testJlex() { - assertTrue(!Options.jlex); - task.setJLex(true); - assertTrue(Options.jlex); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/tests/CharClassesTest.java b/tools/lexer/jflex-1.4/src/JFlex/tests/CharClassesTest.java deleted file mode 100644 index 62b9cf9a7b54..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/tests/CharClassesTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.tests; - -import JFlex.IntCharSet; -import JFlex.Interval; -import junit.framework.TestCase; - -/** - * CharClassesTest - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class CharClassesTest extends TestCase { - - /** - * Constructor for CharClassesTest. - * @param arg0 - */ - public CharClassesTest(String arg0) { - super(arg0); - } - - public void testAdd1() { - IntCharSet set = new IntCharSet(new Interval('a','h')); - set.add(new Interval('o','z')); - set.add(new Interval('A','Z')); - set.add(new Interval('h','o')); - assertEquals("{ ['A'-'Z']['a'-'z'] }", set.toString()); - } - - public void testAdd2() { - IntCharSet set = new IntCharSet(new Interval('a','h')); - set.add(new Interval('o','z')); - set.add(new Interval('A','Z')); - set.add(new Interval('i','n')); - assertEquals("{ ['A'-'Z']['a'-'z'] }", set.toString()); - } - - public void testAdd3() { - IntCharSet set = new IntCharSet(new Interval('a','h')); - set.add(new Interval('o','z')); - set.add(new Interval('A','Z')); - set.add(new Interval('a','n')); - assertEquals("{ ['A'-'Z']['a'-'z'] }", set.toString()); - } - - public void testMergeLast() { - IntCharSet set = new IntCharSet(new Interval('a','k')); - assertEquals("{ ['a'-'k'] }", set.toString()); - set.add('l'); - assertEquals("{ ['a'-'l'] }", set.toString()); - } - - public void testAddChar() { - IntCharSet set = new IntCharSet(new Interval('a','h')); - set.add(new Interval('o','z')); - set.add('n'); - set.add('k'); - assertEquals("{ ['a'-'h']['k']['n'-'z'] }", set.toString()); - set.add('i'); - assertEquals("{ ['a'-'i']['k']['n'-'z'] }", set.toString()); - set.add('j'); - assertEquals("{ ['a'-'k']['n'-'z'] }", set.toString()); - set.add(new Interval('l','m')); - assertEquals("{ ['a'-'z'] }", set.toString()); - } - - public void testCopy() { - IntCharSet set = new IntCharSet(new Interval('a','z')); - IntCharSet copy = set.copy(); - Interval i = set.getNext(); - i.end = 'h'; - assertEquals("{ ['a'-'h'] }", set.toString()); - assertEquals("{ ['a'-'z'] }", copy.toString()); - } - - public void testCaseless() { - IntCharSet set = new IntCharSet(new Interval('a','c')); - set.add(new Interval('h','o')); - assertEquals("{ ['A'-'C']['H'-'O']['a'-'c']['h'-'o'] }", - set.getCaseless().toString()); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/tests/EmitterTest.java b/tools/lexer/jflex-1.4/src/JFlex/tests/EmitterTest.java deleted file mode 100644 index 26a4b37f3ba1..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/tests/EmitterTest.java +++ /dev/null @@ -1,50 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.tests; - -import JFlex.Emitter; -import junit.framework.TestCase; - -/** - * Some unit tests for the jflex Emitter class - * - * @author Gerwin Klein - * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $ - */ -public class EmitterTest extends TestCase { - - /** - * Constructor for EmitterTest. - * @param name the test name - */ - public EmitterTest(String name) { - super(name); - } - - public void testJavadoc() { - StringBuffer usercode = new StringBuffer("/* some *** comment */"); - assertTrue(!Emitter.endsWithJavadoc(usercode)); - usercode.append("import bla; /** javadoc /* */ "); - assertTrue(Emitter.endsWithJavadoc(usercode)); - usercode.append("bla"); - assertTrue(!Emitter.endsWithJavadoc(usercode)); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/tests/PackEmitterTest.java b/tools/lexer/jflex-1.4/src/JFlex/tests/PackEmitterTest.java deleted file mode 100644 index 1b1a4203418c..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/tests/PackEmitterTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * jflex * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.tests; - -import junit.framework.TestCase; -import JFlex.Out; -import JFlex.PackEmitter; - -/** - * PackEmitterTest - * - * @author Gerwin Klein - * @version $Revision$, $Date$ - */ -public class PackEmitterTest extends TestCase { - - private PackEmitter p; - - - /** - * Constructor for PackEmitterTest. - */ - public PackEmitterTest() { - super("PackEmitter test"); - } - - public void setUp() { - p = new PackEmitter("Bla") { - public void emitUnpack() { } - }; - } - - public void testInit() { - p.emitInit(); - assertEquals( - " private static final int [] ZZ_BLA = zzUnpackBla();" + Out.NL + - Out.NL + - " private static final String ZZ_BLA_PACKED_0 =" + Out.NL + - " \"", - p.toString()); - } - - public void testEmitUCplain() { - p.emitUC(8); - p.emitUC(0xFF00); - - assertEquals("\\10\\uff00", p.toString()); - } - - public void testLineBreak() { - for (int i = 0; i < 36; i++) { - p.breaks(); - p.emitUC(i); - } - System.out.println(p); - assertEquals( - "\\0\\1\\2\\3\\4\\5\\6\\7\\10\\11\\12\\13\\14\\15\\16\\17\"+"+Out.NL+ - " \"\\20\\21\\22\\23\\24\\25\\26\\27\\30\\31\\32\\33\\34\\35\\36\\37\"+"+Out.NL+ - " \"\\40\\41\\42\\43", - p.toString()); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/tests/RegExpTests.java b/tools/lexer/jflex-1.4/src/JFlex/tests/RegExpTests.java deleted file mode 100644 index 6734f95c6c46..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/tests/RegExpTests.java +++ /dev/null @@ -1,62 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.tests; - -import JFlex.*; -import junit.framework.TestCase; - -/** - * Unit tests for JFlex.RegExp - * - * @author Gerwin Klein - * @version $Revision$, $Date$ - */ -public class RegExpTests extends TestCase implements sym { - - /** - * Constructor for RegExpTests. - * - * @param name the test name - */ - public RegExpTests(String name) { - super(name); - } - - public void testrevString() { - assertTrue(RegExp.revString("blah").equals("halb")); - } - - public void testCharClass() { - Macros m = new Macros(); - RegExp e1 = new RegExp1(CCLASS, new Interval('a','z')); - RegExp e2 = new RegExp1(CHAR, new Character('Z')); - RegExp e3 = new RegExp1(CCLASS, new Interval('0','9')); - m.insert("macro", e3); - RegExp s = new RegExp1(STAR, e1); - RegExp u = new RegExp1(MACROUSE, "macro"); - RegExp b = new RegExp2(BAR, e2, u); - assertTrue(e1.isCharClass(m)); - assertTrue(e2.isCharClass(m)); - assertTrue(b.isCharClass(m)); - assertTrue(!s.isCharClass(m)); - assertTrue(u.isCharClass(m)); - } -} diff --git a/tools/lexer/jflex-1.4/src/JFlex/tests/SkeletonTest.java b/tools/lexer/jflex-1.4/src/JFlex/tests/SkeletonTest.java deleted file mode 100644 index c273952d31ad..000000000000 --- a/tools/lexer/jflex-1.4/src/JFlex/tests/SkeletonTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * JFlex 1.4.3 * - * Copyright (C) 1998-2009 Gerwin Klein * - * All rights reserved. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License. See the file * - * COPYRIGHT for more information. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License along * - * with this program; if not, write to the Free Software Foundation, Inc., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -package JFlex.tests; - - -import java.io.File; - -import JFlex.Skeleton; -import junit.framework.TestCase; - -/** - * SkeletonTest - * - * @author Gerwin Klein - * @version $Revision$, $Date$ - */ -public class SkeletonTest extends TestCase { - - /** - * Constructor for SkeletonTest. - * @param arg0 test name - */ - public SkeletonTest(String arg0) { - super(arg0); - } - - public void testReplace() { - assertEquals(Skeleton.replace("bla ", "blub", "bla blub bla "), - "blubblub blub"); - } - - public void testMakePrivate() { - Skeleton.makePrivate(); - for (int i=0; i < Skeleton.line.length; i++) { - assertEquals(Skeleton.line[i].indexOf("public"), -1); - } - } - - public void testDefault() { - Skeleton.readSkelFile(new File("src/skeleton.nested")); - assertTrue(JFlex.Skeleton.line[3].indexOf("java.util.Stack") > 0); - Skeleton.readDefault(); - assertEquals(JFlex.Skeleton.line[3].indexOf("java.util.Stack"), -1); - } -} diff --git a/tools/lexer/jflex-1.4/src/README b/tools/lexer/jflex-1.4/src/README deleted file mode 100644 index 8bf11a7a9e2c..000000000000 --- a/tools/lexer/jflex-1.4/src/README +++ /dev/null @@ -1,46 +0,0 @@ -This directory contains the source code for JFlex. - -Dependencies - -You need the following tools in your class path: - -ant.jar >= 1.4 - -To compile, run first - -ant gettools -(this will download JFlex, java_cup, and junit jars for bootstrapping) - -then, run -ant jar - - -The command "ant help" should give you other useful targets. - - -Directory contents: -manifest: - jar manifest file for JFlex.jar - -skeleton: - a skeleton file matching exactly the precompiled scanner skeleton. - Can be used together with the --skel option - -skeleton.nested: - a skeleton file that supports nested input streams (see the manual - for the API). Can be used together with the --skel option - -JFlex: - source files of package JFlex - -JFlex/gui: - source files of package JFlex.gui - -JFlex/anttask - source files of the JFlex Ant task (contributed by Rafal Mantiuk) - -JFlex/test - unit tests for JFlex - -java_cup/runtime: - CUP 11a beta 20060608 runtime classes, used by JFlex diff --git a/tools/lexer/jflex-1.4/src/build.xml b/tools/lexer/jflex-1.4/src/build.xml deleted file mode 100644 index f497dba607ca..000000000000 --- a/tools/lexer/jflex-1.4/src/build.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/lexer/jflex-1.4/src/changelog b/tools/lexer/jflex-1.4/src/changelog deleted file mode 100644 index f751ef6163cd..000000000000 --- a/tools/lexer/jflex-1.4/src/changelog +++ /dev/null @@ -1,277 +0,0 @@ -* JFlex 1.4.3 (Jan 31, 2009) -- fixed bug #2018299 (lookahead syntax error) -- fixed bug #2010261 (min_int in Java example scanner) -- fixed bug #2007221 (zzEOFDone not reset in yyreset(Reader)) -- fixed bug #1999301 (%type and %int at the same time should produce error msg) - -* JFlex 1.4.2 (May 27, 2008) -- implemented feature request #1212181: - Now supports generics syntax for %type, %extends, etc -- implemented feature request #1762500: - Provided %ctorarg option to add arguments to constructor -- fixed bug #1464525 (Reader.read might return 0) -- fixed bug #1968897 (Ambiguous error message in macro expansion) -- fixed bug #1832973 (Syntax error in input may cause NullPointerException) -- fixed bug #1629920 (Need to defend against path blanks in jflex bash script) -- fixed bug #1540228 (EOF actions may be ignored for same lex state) -- fixed bug #1498726 (syntax error in generated ZZ_CMAP) -- fixed bug #1282840 (lookahead and "|" actions) -- fixed bug #1164852 (yytext() longer than expected with lookahead) -- fixed bug #1065521 (OS/2 Java 1.1.8 Issues) -- fixed bug #421495 (dangerous lookahead check may fail) - -* JFlex 1.4.1 (November 7, 2004) -- merged in patch by Don Brown (fixes #1049791 Uses Old JUnit method assertFalse) -- merged in patch by Don Brown (fixes #887821 buffer expansion bug in yy_refill()) - Thanks to Binesh Bannerjee for providing a simpler test case for this problem. -- fixed bug #1035407 (ArrayIndexOutOfBounds in IntCharSet) -- fixed bug #1003569 (Cannot use lookahead with ignorecase) -- converted dangerous lookahead error to warning -- print info for EOF actions as well in %debug mode -- fixed line number count for EOF actions -- internal: removed unused methods in LexScan.flex and IntCharSet - -* JFlex 1.4 (April 12, 2004) -- new, very fast minimization algorithm (also fixes memory issues) -- new --jlex option for strict compatibility to JLex. Currently it - changes %ignorecase to JLex semantics, that is, character classes - are interpreted in a caseless way, too. - (fixes bus #751757, %ignorecase ignored by char classes). - Thanks to Edward D. Willink for spotting the incompatibility. -- support for even larger scanners (up to 64K DFA states). - Thanks to Karin Vespoor. -- removed eclipse compiler warnings for generated classes - (feature request #778747) -- implemented faster character classes (feature request #604589). - Expressions like [a-z] | [A-Z] are interpreted as one atomic class - [a-zA-Z], reducing NFA states and generation time significantly - for some specifications. This affects the generation process only, - generated scanners remain the same. -- new %apiprivate switch (feature request #513500/1) that causes all - generated and skeleton methods to be made private. Exceptions to this - are user defined functions and the constructor. Thanks to Stephen - Ostermiller for the suggestion. -- allow user defined javadoc class comments (feature request #513500/2) - If the user code section ends with a javadoc comment, JFlex takes this - instead of the generated comment. Thanks to Stephen Ostermiller for - the suggestion. -- fixed bug #491095 (undefined macros in complement expressions do - not throw exception in generator). Thanks to Stephen Ostermiller - for the bug report. -- fixed bug #495422 (yypushStream/yypopStream in skeleton.nested - work as advertised) -- fixed bug #611118 (no wrong macro warnings on regexp negation) -- fixed bug #655528 (%cupsym now also affects %cupdebug) - Thanks to Eric Schweitz for the fix. -- fixed bug #510010 (single-line %initthrow works now - in case of extra whitespace before newline) -- yyreset() does no longer close the associated reader (use yyclose() - explicitly for that). Makes some reader objects reusable (feature - request #513492). Thanks to Stephen Ostermiller for the suggestion. -- fixed modifier order in generated code, removes jikes compiler warnings - Thanks to Michael Wildpaner for the fix. -- ant task now also works with ant >= 1.4 (fixes bug #526905) -- yyreset() does not declare an execption any more (fixes bug #913132) -- %cup does not include %eofclose in JLex mode (--jlex). (Fixes bug #910562) -- optional parameter to %eofclose: "%eofclose false" turns off %eofclose if - it was turned on previously (e.g. by %cup). (Fixes bug #910562) -- jflex build script switched to ant -- internal: central Options class for better integration with - build tools and IDEs -- internal: change naming scheme for generated internal variables from - yy_ to zz to comply with Java naming standard. Thanks to Max Gilead - for the patch. - - -* JFlex 1.3.5 (October 8, 2001) -- fixed all bugs reported for version 1.3.4. Thanks to - Amin Ahmad and Fred Wehrhahn for their excellent bug reports. -- implemented feature request #459014: vim syntax file. - Thanks to Michael Brailsford for his help and suggestions. -- JFlex should run with JDK 1.1 out-of-the-box again. - - -* JFlex 1.3.4 (October 1, 2001) -- fixed all bugs reported for version 1.3.3. Thanks to Mike Akerman - for his excellent bug reports and his help. -- implemented feature request #459355: exclusive start states. - Thanks to Ed Beroset for the suggestion. -- introduced %s and %x shorthands for state declarations - - -* JFlex 1.3.3 (September 21, 2001) -- fixed all reported bugs except #39 (lookahead check at generation - time may fail). Thanks to Axel Schwolow, Karl Meissner, Angelo - Borsotti, and Paolo Di Francesco for their excellent bug reports. -- enhanced %debug output. JFlex scanners in debug mode now print line, - column, matched text, and executed action (with line number in spec) - for each processed token. Thanks to - Karl Meissner for the - suggestion. -- introduced %cupdebug directive for readable CUP debugging. Generated - scanners print line, column, matched text, and CUP symbol name for - each returned token. Again thanks to Karl Meissner for tips and - contributed Java reflection code. -- new %cupsym to customize CUP generated symbols class name. Thanks - to Karl Meissner and Paolo Di Francesco. -- new %throws as shorthand for %yylexthrow -- code generation now customizable at command line with --table, - --pack, and --switch -- command line switch --info prints system and JVM information (useful - for bug reports) -- command line switch --nobak for not generating backup files -- an Ant task for the Ant build tool http://jakarta.apache.org/ant/ - contributed by Rafal Mantiuk. Many thanks to him. -- better error message for missing ] in char class. Thanks to Karl - Meissner. -- performance enhancements in the runtime system. The engine is now - 10%-50% faster. These are only the first implementations of a few of - the many suggestions from Angelo Borsotti. Thanks to Angelo for many - insights, tips, and fruitful discussions. -- a new warning if a rule can never be matched -- macros and regular expression can now span multiple lines (note - that | at the end of a line in a rule is a special action, - not the | operator) -- updated the manual to contain more information about the generated - class, clarified the description of lexical states. Thanks to Michael - Binz, Angelo Borsotti, Vasily Karyaev and for the suggestions. -- Simplified java example lexer, and allow // style comments at EOF. - Thanks to Thomas Mulcahy. -- Byacc/J example updated to version 1.1 -- New interpreter example using CUP. Thanks to Bernhard Rumpe for - the code. - - -* JFlex 1.3.2 (February 24, 2001) -- fixed bug #32 (this time for real). Thanks to Thilo Goetz for - his quick report. -- updated the binary scanning example with the more comprehensive and - usable class StraightStreamReader by Stephen Ostermiller. Thanks go to - him for his contribution. The original version of this class is at - http://www.smo.f2s.com/utils/ -- added a link to a Japanese translation of the JFlex manual (it's in Japanese - Shift_JIS encoding). The translation is for an older release (1.1.2), but - most of the text still applies to the current version. See the change log - for the differences between 1.1.2 and the current version. Many thanks to - Yuichi Nakajima, Yukio Ikeda, Katsuhiko Yamazaki, and Koji Ooya for - their efforts. - If you would like to translate the JFlex manual into another language, or - if you already have done so, please let me know. I will include a link to - it on the documentation page. I can also give you access to the latex - sources of the manual, so that printable versions of your translation can - be generated, too. - - -* JFlex 1.3.1 (February 20, 2001) -- fixed all JFlex bugs reported for 1.3 (bugs #32-#36) - Thanks to Hans Kratz, Vasily Karyaev, Alexey Yakovets, and Tom Moog for - their excellent reports. -- added two new example scanners: - . a demonstration how to scan binary files - . a small calculator example for Cup, based on the example in the Linux - Gazette by Richard A. Sevenich and Christopher Lopes. See also - http://www.linuxgazette.com/issue39/sevenich.html - http://www.linuxgazette.com/issue41/sevenich.html - http://www.linuxgazette.com/issue41/lopes/lopes.html -- manual section about encodings, platforms and Unicode. - Thanks to Stephen Ostermiller for his valuable input. -- switch for skipping the minimization step in DFA generation (--nomin). - This feature is still in alpha status and not yet extensively tested. It - might be useful when you have very large scanners and not much memory - available. -- switch for generating graphviz dot files for graphical representation (ps - or gif) of generated NFA, DFA and minimized DFA (--dot). Might be useful for - teaching. This feature is also still in alpha status and not fully finished - yet. It is included as preview, comments are welcome, please try it out and - tell me what you think. For information on graphviz see - http://www.research.att.com:80/sw/tools/graphviz/ -- changed to --style long command line switches (single - still recognized). -- moved part of the project to http://sourceforge.net/projects/jflex/ - - -* JFlex 1.3 (October 21, 2000) - -- Fixed all bugs reported for 1.2.2 (bugs #23-#27). -- Better start script for Linux. -- Customize for internal error handling in yy_ScanError. -- Empty charclass [], and any (=negated empty) charclass [^]. -- New negation operator ! for regexps. -- New upto operator ~ for regexps. -- Customizable buffer size (%buffer). -- New char yycharat(int) for efficient access to single characters in matched text. -- Split up of too large lex tables for even larger scanner sizes. -- New additional external skeleton with support for nested input streams. -- JLex compatibility: BOL ^ and EOL $ use unicode line separators as in - http://www.unicode.org/unicode/reports/tr18/tr18-5.1.html. -- New resetStream method for reusing scanner objects. -_ BYacc/J support (%byaccj) + BYacc/J example. -- Include files in lexer specs (%include). -- New --dump switch for a dump of the generated charclasses, NFA, DFA, and minimized DFA tables. - - -* JFlex 1.2.2 (August 23, 1999) -- Updated JFlex to the new CUP version 0.10j. -- Eliminated some remaining platform dependent newlines in the generated source code - (affecting the readabilty of the generated code only, no functional changes). -- Minor improvements in error reporting (out of memory). -- Added a --version command line option for printing the current jflex version. -- Updated the Java 1.2 lexer/parser example to CUP 0.10j. - - -* JFlex 1.2.1 (June 25, 1999) -- Fixed all bugs reported for version 1.2 (#19-#22). -- Webpage redesigned and moved to http://www.jflex.de. -- Example java lexer/parser switched to Java 1.2. - - -* JFlex 1.2 (March 21, 1999) -- Fixed all bugs for 1.1.2. -- JFlex now works again with Solaris JIT. -- Significant Unicode optimizations in scanning and generation performance, -- changed the empty string match wrt. EOF behavior to the one that is commonly expected. -- added command line switches for more customization -- external skeleton files -- new GUI without any console output -- <> as in lex/flex -- better error messages -- better generation speed -- better generation memory efficiency -- | Action, trailing context (/ operator) -- new %final, %abstract and %extends directives -- uses jar file -- included makefile for JFlex, -- %pack now uses string packing, -- %pack now default code generation method, -- new %switch directive for old default code generation method, -- more convenient declaration of exceptions, -- new %int switch, -- manual now written in latex, available as html and in printable .ps.gz and pdf file formats. - - -* JFlex 1.1.2 -- All bugs reported for version 1.1.1 (#8-#10) have been fixed. - - -* JFlex 1.1.1 -- All bugs reported for version 1.1 (i.e. bug #7 and feature request #6) have been fixed. -- Scanning speed was optimized further. - - -* JFlex 1.1 adds new features and fixes all known bugs of 1.0 -- Revised directory structure. -- Fixed all reported bugs (#1-#5 and some unreported ones). -- Fixed thousands of typos in the manual. -- whitespace characters in regular expressions, -- flex style repeat expressions, -- %caseless switch, -- %eofclose switch, -- method for closing the input stream, -- method for the current lexical state, -- method for rereading matched text, -- backup of files that are overwitten in the generation process, -- improved error reporting, -- graphical UI when no filename is provided on the commandline - - -* JFlex 1.0 (May 1998) was the first public release of JFlex. - It was developed using Sun's JDK 1.1, JFlex (bootstrapped) and the parser generator CUP \ No newline at end of file diff --git a/tools/lexer/jflex-1.4/src/java_cup/runtime/ComplexSymbolFactory.java b/tools/lexer/jflex-1.4/src/java_cup/runtime/ComplexSymbolFactory.java deleted file mode 100644 index 8f85d7ae2b14..000000000000 --- a/tools/lexer/jflex-1.4/src/java_cup/runtime/ComplexSymbolFactory.java +++ /dev/null @@ -1,119 +0,0 @@ -package java_cup.runtime; - -/** - * Default Implementation for SymbolFactory, creates - * plain old Symbols - * - * @version last updated 27-03-2006 - * @author Michael Petter - */ - -/* ************************************************* - class DefaultSymbolFactory - - interface for creating new symbols - ***************************************************/ -public class ComplexSymbolFactory implements SymbolFactory{ - public static class Location { - private String unit="unknown"; - private int line, column; - public Location(String unit, int line, int column){ - this.unit=unit; - this.line=line; - this.column=column; - } - public Location(int line, int column){ - this.line=line; - this.column=column; - } - public String toString(){ - return unit+":"+line+"/"+column; - } - public int getColumn(){ - return column; - } - public int getLine(){ - return line; - } - public String getUnit(){ - return unit; - } - } - /** - * ComplexSymbol with detailed Location Informations and a Name - */ - public static class ComplexSymbol extends Symbol { - protected String name; - protected Location xleft,xright; - public ComplexSymbol(String name, int id) { - super(id); - this.name=name; - } - public ComplexSymbol(String name, int id, Object value) { - super(id,value); - this.name=name; - } - public String toString(){ - if (xleft==null || xright==null) return "Symbol: "+name; - return "Symbol: "+name+" ("+xleft+" - "+xright+")"; - } - public ComplexSymbol(String name, int id, int state) { - super(id,state); - this.name=name; - } - public ComplexSymbol(String name, int id, Symbol left, Symbol right) { - super(id,left,right); - this.name=name; - if (left!=null) this.xleft = ((ComplexSymbol)left).xleft; - if (right!=null) this.xright= ((ComplexSymbol)right).xright; - } - public ComplexSymbol(String name, int id, Location left, Location right) { - super(id); - this.name=name; - this.xleft=left; - this.xright=right; - } - public ComplexSymbol(String name, int id, Symbol left, Symbol right, Object value) { - super(id,value); - this.name=name; - if (left!=null) this.xleft = ((ComplexSymbol)left).xleft; - if (right!=null) this.xright= ((ComplexSymbol)right).xright; - } - public ComplexSymbol(String name, int id, Location left, Location right, Object value) { - super(id,value); - this.name=name; - this.xleft=left; - this.xright=right; - } - public Location getLeft(){ - return xleft; - } - public Location getRight(){ - return xright; - } - } - - - // Factory methods - public Symbol newSymbol(String name, int id, Location left, Location right, Object value){ - return new ComplexSymbol(name,id,left,right,value); - } - public Symbol newSymbol(String name, int id, Location left, Location right){ - return new ComplexSymbol(name,id,left,right); - } - public Symbol newSymbol(String name, int id, Symbol left, Symbol right, Object value){ - return new ComplexSymbol(name,id,left,right,value); - } - public Symbol newSymbol(String name, int id, Symbol left, Symbol right){ - return new ComplexSymbol(name,id,left,right); - } - public Symbol newSymbol(String name, int id){ - return new ComplexSymbol(name,id); - } - public Symbol newSymbol(String name, int id, Object value){ - return new ComplexSymbol(name,id,value); - } - public Symbol startSymbol(String name, int id, int state){ - return new ComplexSymbol(name,id,state); - } -} diff --git a/tools/lexer/jflex-1.4/src/java_cup/runtime/DefaultSymbolFactory.java b/tools/lexer/jflex-1.4/src/java_cup/runtime/DefaultSymbolFactory.java deleted file mode 100644 index d5bca58a271a..000000000000 --- a/tools/lexer/jflex-1.4/src/java_cup/runtime/DefaultSymbolFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -package java_cup.runtime; - -/** - * Default Implementation for SymbolFactory, creates - * plain old Symbols - * - * @version last updated 27-03-2006 - * @author Michael Petter - */ - -/* ************************************************* - class DefaultSymbolFactory - - interface for creating new symbols - ***************************************************/ -public class DefaultSymbolFactory implements SymbolFactory{ - // Factory methods - /** - * DefaultSymbolFactory for CUP. - * Users are strongly encoraged to use ComplexSymbolFactory instead, since - * it offers more detailed information about Symbols in source code. - * Yet since migrating has always been a critical process, You have the - * chance of still using the oldstyle Symbols. - * - * @deprecated as of CUP v11a - * replaced by the new java_cup.runtime.ComplexSymbolFactory - */ - //@deprecated - public DefaultSymbolFactory(){ - } - public Symbol newSymbol(String name ,int id, Symbol left, Symbol right, Object value){ - return new Symbol(id,left,right,value); - } - public Symbol newSymbol(String name, int id, Symbol left, Symbol right){ - return new Symbol(id,left,right); - } - public Symbol newSymbol(String name, int id, int left, int right, Object value){ - return new Symbol(id,left,right,value); - } - public Symbol newSymbol(String name, int id, int left, int right){ - return new Symbol(id,left,right); - } - public Symbol startSymbol(String name, int id, int state){ - return new Symbol(id,state); - } - public Symbol newSymbol(String name, int id){ - return new Symbol(id); - } - public Symbol newSymbol(String name, int id, Object value){ - return new Symbol(id,value); - } -} diff --git a/tools/lexer/jflex-1.4/src/java_cup/runtime/Scanner.java b/tools/lexer/jflex-1.4/src/java_cup/runtime/Scanner.java deleted file mode 100644 index 32335516f082..000000000000 --- a/tools/lexer/jflex-1.4/src/java_cup/runtime/Scanner.java +++ /dev/null @@ -1,25 +0,0 @@ -package java_cup.runtime; - -/** - * Defines the Scanner interface, which CUP uses in the default - * implementation of lr_parser.scan(). Integration - * of scanners implementing Scanner is facilitated. - * - * @version last updated 23-Jul-1999 - * @author David MacMahon - */ - -/* ************************************************* - Interface Scanner - - Declares the next_token() method that should be - implemented by scanners. This method is typically - called by lr_parser.scan(). End-of-file can be - indicated either by returning - new Symbol(lr_parser.EOF_sym()) or - null. - ***************************************************/ -public interface Scanner { - /** Return the next token, or null on end-of-file. */ - public Symbol next_token() throws java.lang.Exception; -} diff --git a/tools/lexer/jflex-1.4/src/java_cup/runtime/Symbol.java b/tools/lexer/jflex-1.4/src/java_cup/runtime/Symbol.java deleted file mode 100644 index c9ce556d0a4c..000000000000 --- a/tools/lexer/jflex-1.4/src/java_cup/runtime/Symbol.java +++ /dev/null @@ -1,116 +0,0 @@ -package java_cup.runtime; - -/** - * Defines the Symbol class, which is used to represent all terminals - * and nonterminals while parsing. The lexer should pass CUP Symbols - * and CUP returns a Symbol. - * - * @version last updated: 7/3/96 - * @author Frank Flannery - */ - -/* **************************************************************** - Class Symbol - what the parser expects to receive from the lexer. - the token is identified as follows: - sym: the symbol type - parse_state: the parse state. - value: is the lexical value of type Object - left : is the left position in the original input file - right: is the right position in the original input file - xleft: is the left position Object in the original input file - xright: is the left position Object in the original input file -******************************************************************/ - -public class Symbol { - -// TUM 20060327: Added new Constructor to provide more flexible way -// for location handling -/******************************* - *******************************/ - public Symbol(int id, Symbol left, Symbol right, Object o){ - this(id,left.left,right.right,o); - } - public Symbol(int id, Symbol left, Symbol right){ - this(id,left.left,right.right); - } -/******************************* - Constructor for l,r values - *******************************/ - - public Symbol(int id, int l, int r, Object o) { - this(id); - left = l; - right = r; - value = o; - } - -/******************************* - Constructor for no l,r values -********************************/ - - public Symbol(int id, Object o) { - this(id, -1, -1, o); - } - -/***************************** - Constructor for no value - ***************************/ - - public Symbol(int id, int l, int r) { - this(id, l, r, null); - } - -/*********************************** - Constructor for no value or l,r -***********************************/ - - public Symbol(int sym_num) { - this(sym_num, -1); - left = -1; - right = -1; - } - -/*********************************** - Constructor to give a start state -***********************************/ - Symbol(int sym_num, int state) - { - sym = sym_num; - parse_state = state; - } - -/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The symbol number of the terminal or non terminal being represented */ - public int sym; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The parse state to be recorded on the parse stack with this symbol. - * This field is for the convenience of the parser and shouldn't be - * modified except by the parser. - */ - public int parse_state; - /** This allows us to catch some errors caused by scanners recycling - * symbols. For the use of the parser only. [CSA, 23-Jul-1999] */ - boolean used_by_parser = false; - -/******************************* - The data passed to parser - *******************************/ - - public int left, right; - public Object value; - - /***************************** - Printing this token out. (Override for pretty-print). - ****************************/ - public String toString() { return "#"+sym; } -} - - - - - - diff --git a/tools/lexer/jflex-1.4/src/java_cup/runtime/SymbolFactory.java b/tools/lexer/jflex-1.4/src/java_cup/runtime/SymbolFactory.java deleted file mode 100644 index 86bae0837b9c..000000000000 --- a/tools/lexer/jflex-1.4/src/java_cup/runtime/SymbolFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -package java_cup.runtime; - -/** - * Creates the Symbols interface, which CUP uses as default - * - * @version last updated 27-03-2006 - * @author Michael Petter - */ - -/* ************************************************* - Interface SymbolFactory - - interface for creating new symbols - You can also use this interface for your own callback hooks - Declare Your own factory methods for creation of Objects in Your scanner! - ***************************************************/ -public interface SymbolFactory { - // Factory methods - /** - * Construction with left/right propagation switched on - */ - public Symbol newSymbol(String name, int id, Symbol left, Symbol right, Object value); - public Symbol newSymbol(String name, int id, Symbol left, Symbol right); - /** - * Construction with left/right propagation switched off - */ - public Symbol newSymbol(String name, int id, Object value); - public Symbol newSymbol(String name, int id); - /** - * Construction of start symbol - */ - public Symbol startSymbol(String name, int id, int state); -} diff --git a/tools/lexer/jflex-1.4/src/java_cup/runtime/lr_parser.java b/tools/lexer/jflex-1.4/src/java_cup/runtime/lr_parser.java deleted file mode 100644 index 89068e1099dc..000000000000 --- a/tools/lexer/jflex-1.4/src/java_cup/runtime/lr_parser.java +++ /dev/null @@ -1,1253 +0,0 @@ - -package java_cup.runtime; - -import java.util.Stack; - -/** This class implements a skeleton table driven LR parser. In general, - * LR parsers are a form of bottom up shift-reduce parsers. Shift-reduce - * parsers act by shifting input onto a parse stack until the Symbols - * matching the right hand side of a production appear on the top of the - * stack. Once this occurs, a reduce is performed. This involves removing - * the Symbols corresponding to the right hand side of the production - * (the so called "handle") and replacing them with the non-terminal from - * the left hand side of the production.

- * - * To control the decision of whether to shift or reduce at any given point, - * the parser uses a state machine (the "viable prefix recognition machine" - * built by the parser generator). The current state of the machine is placed - * on top of the parse stack (stored as part of a Symbol object representing - * a terminal or non terminal). The parse action table is consulted - * (using the current state and the current lookahead Symbol as indexes) to - * determine whether to shift or to reduce. When the parser shifts, it - * changes to a new state by pushing a new Symbol (containing a new state) - * onto the stack. When the parser reduces, it pops the handle (right hand - * side of a production) off the stack. This leaves the parser in the state - * it was in before any of those Symbols were matched. Next the reduce-goto - * table is consulted (using the new state and current lookahead Symbol as - * indexes) to determine a new state to go to. The parser then shifts to - * this goto state by pushing the left hand side Symbol of the production - * (also containing the new state) onto the stack.

- * - * This class actually provides four LR parsers. The methods parse() and - * debug_parse() provide two versions of the main parser (the only difference - * being that debug_parse() emits debugging trace messages as it parses). - * In addition to these main parsers, the error recovery mechanism uses two - * more. One of these is used to simulate "parsing ahead" in the input - * without carrying out actions (to verify that a potential error recovery - * has worked), and the other is used to parse through buffered "parse ahead" - * input in order to execute all actions and re-synchronize the actual parser - * configuration.

- * - * This is an abstract class which is normally filled out by a subclass - * generated by the JavaCup parser generator. In addition to supplying - * the actual parse tables, generated code also supplies methods which - * invoke various pieces of user supplied code, provide access to certain - * special Symbols (e.g., EOF and error), etc. Specifically, the following - * abstract methods are normally supplied by generated code: - *

- *
short[][] production_table() - *
Provides a reference to the production table (indicating the index of - * the left hand side non terminal and the length of the right hand side - * for each production in the grammar). - *
short[][] action_table() - *
Provides a reference to the parse action table. - *
short[][] reduce_table() - *
Provides a reference to the reduce-goto table. - *
int start_state() - *
Indicates the index of the start state. - *
int start_production() - *
Indicates the index of the starting production. - *
int EOF_sym() - *
Indicates the index of the EOF Symbol. - *
int error_sym() - *
Indicates the index of the error Symbol. - *
Symbol do_action() - *
Executes a piece of user supplied action code. This always comes at - * the point of a reduce in the parse, so this code also allocates and - * fills in the left hand side non terminal Symbol object that is to be - * pushed onto the stack for the reduce. - *
void init_actions() - *
Code to initialize a special object that encapsulates user supplied - * actions (this object is used by do_action() to actually carry out the - * actions). - *
- * - * In addition to these routines that must be supplied by the - * generated subclass there are also a series of routines that may - * be supplied. These include: - *
- *
Symbol scan() - *
Used to get the next input Symbol from the scanner. - *
Scanner getScanner() - *
Used to provide a scanner for the default implementation of - * scan(). - *
int error_sync_size() - *
This determines how many Symbols past the point of an error - * must be parsed without error in order to consider a recovery to - * be valid. This defaults to 3. Values less than 2 are not - * recommended. - *
void report_error(String message, Object info) - *
This method is called to report an error. The default implementation - * simply prints a message to System.err and where the error occurred. - * This method is often replaced in order to provide a more sophisticated - * error reporting mechanism. - *
void report_fatal_error(String message, Object info) - *
This method is called when a fatal error that cannot be recovered from - * is encountered. In the default implementation, it calls - * report_error() to emit a message, then throws an exception. - *
void syntax_error(Symbol cur_token) - *
This method is called as soon as syntax error is detected (but - * before recovery is attempted). In the default implementation it - * invokes: report_error("Syntax error", null); - *
void unrecovered_syntax_error(Symbol cur_token) - *
This method is called if syntax error recovery fails. In the default - * implementation it invokes:
- * report_fatal_error("Couldn't repair and continue parse", null); - *
- * - * @see java_cup.runtime.Symbol - * @see java_cup.runtime.Symbol - * @see java_cup.runtime.virtual_parse_stack - * @version last updated: 7/3/96 - * @author Frank Flannery - */ - -public abstract class lr_parser { - /*-----------------------------------------------------------*/ - /*--- Constructor(s) ----------------------------------------*/ - /*-----------------------------------------------------------*/ - - /** - * Simple constructor. - */ - public lr_parser() { - } - - /** - * Constructor that sets the default scanner. [CSA/davidm] - */ - public lr_parser(Scanner s) { - this(s,new DefaultSymbolFactory()); // TUM 20060327 old cup v10 Symbols as default - } - /** - * Constructor that sets the default scanner and a SymbolFactory - */ - public lr_parser(Scanner s, SymbolFactory symfac) { - this(); // in case default constructor someday does something - symbolFactory = symfac; - setScanner(s); - } - public SymbolFactory symbolFactory;// = new DefaultSymbolFactory(); - /** - * Whenever creation of a new Symbol is necessary, one should use this factory. - */ - public SymbolFactory getSymbolFactory(){ - return symbolFactory; - } - /*-----------------------------------------------------------*/ - /*--- (Access to) Static (Class) Variables ------------------*/ - /*-----------------------------------------------------------*/ - - /** The default number of Symbols after an error we much match to consider - * it recovered from. - */ - protected final static int _error_sync_size = 3; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The number of Symbols after an error we much match to consider it - * recovered from. - */ - protected int error_sync_size() {return _error_sync_size; } - - /*-----------------------------------------------------------*/ - /*--- (Access to) Instance Variables ------------------------*/ - /*-----------------------------------------------------------*/ - - /** Table of production information (supplied by generated subclass). - * This table contains one entry per production and is indexed by - * the negative-encoded values (reduce actions) in the action_table. - * Each entry has two parts, the index of the non-terminal on the - * left hand side of the production, and the number of Symbols - * on the right hand side. - */ - public abstract short[][] production_table(); - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The action table (supplied by generated subclass). This table is - * indexed by state and terminal number indicating what action is to - * be taken when the parser is in the given state (i.e., the given state - * is on top of the stack) and the given terminal is next on the input. - * States are indexed using the first dimension, however, the entries for - * a given state are compacted and stored in adjacent index, value pairs - * which are searched for rather than accessed directly (see get_action()). - * The actions stored in the table will be either shifts, reduces, or - * errors. Shifts are encoded as positive values (one greater than the - * state shifted to). Reduces are encoded as negative values (one less - * than the production reduced by). Error entries are denoted by zero. - * - * @see java_cup.runtime.lr_parser#get_action - */ - public abstract short[][] action_table(); - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The reduce-goto table (supplied by generated subclass). This - * table is indexed by state and non-terminal number and contains - * state numbers. States are indexed using the first dimension, however, - * the entries for a given state are compacted and stored in adjacent - * index, value pairs which are searched for rather than accessed - * directly (see get_reduce()). When a reduce occurs, the handle - * (corresponding to the RHS of the matched production) is popped off - * the stack. The new top of stack indicates a state. This table is - * then indexed by that state and the LHS of the reducing production to - * indicate where to "shift" to. - * - * @see java_cup.runtime.lr_parser#get_reduce - */ - public abstract short[][] reduce_table(); - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The index of the start state (supplied by generated subclass). */ - public abstract int start_state(); - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The index of the start production (supplied by generated subclass). */ - public abstract int start_production(); - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The index of the end of file terminal Symbol (supplied by generated - * subclass). - */ - public abstract int EOF_sym(); - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The index of the special error Symbol (supplied by generated subclass). */ - public abstract int error_sym(); - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Internal flag to indicate when parser should quit. */ - protected boolean _done_parsing = false; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** This method is called to indicate that the parser should quit. This is - * normally called by an accept action, but can be used to cancel parsing - * early in other circumstances if desired. - */ - public void done_parsing() - { - _done_parsing = true; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - /* Global parse state shared by parse(), error recovery, and - * debugging routines */ - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Indication of the index for top of stack (for use by actions). */ - protected int tos; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The current lookahead Symbol. */ - protected Symbol cur_token; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** The parse stack itself. */ - protected Stack stack = new Stack(); - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Direct reference to the production table. */ - protected short[][] production_tab; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Direct reference to the action table. */ - protected short[][] action_tab; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Direct reference to the reduce-goto table. */ - protected short[][] reduce_tab; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** This is the scanner object used by the default implementation - * of scan() to get Symbols. To avoid name conflicts with existing - * code, this field is private. [CSA/davidm] */ - private Scanner _scanner; - - /** - * Simple accessor method to set the default scanner. - */ - public void setScanner(Scanner s) { _scanner = s; } - - /** - * Simple accessor method to get the default scanner. - */ - public Scanner getScanner() { return _scanner; } - - /*-----------------------------------------------------------*/ - /*--- General Methods ---------------------------------------*/ - /*-----------------------------------------------------------*/ - - /** Perform a bit of user supplied action code (supplied by generated - * subclass). Actions are indexed by an internal action number assigned - * at parser generation time. - * - * @param act_num the internal index of the action to be performed. - * @param parser the parser object we are acting for. - * @param stack the parse stack of that object. - * @param top the index of the top element of the parse stack. - */ - public abstract Symbol do_action( - int act_num, - lr_parser parser, - Stack stack, - int top) - throws java.lang.Exception; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** User code for initialization inside the parser. Typically this - * initializes the scanner. This is called before the parser requests - * the first Symbol. Here this is just a placeholder for subclasses that - * might need this and we perform no action. This method is normally - * overridden by the generated code using this contents of the "init with" - * clause as its body. - */ - public void user_init() throws java.lang.Exception { } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Initialize the action object. This is called before the parser does - * any parse actions. This is filled in by generated code to create - * an object that encapsulates all action code. - */ - protected abstract void init_actions() throws java.lang.Exception; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Get the next Symbol from the input (supplied by generated subclass). - * Once end of file has been reached, all subsequent calls to scan - * should return an EOF Symbol (which is Symbol number 0). By default - * this method returns getScanner().next_token(); this implementation - * can be overriden by the generated parser using the code declared in - * the "scan with" clause. Do not recycle objects; every call to - * scan() should return a fresh object. - */ - public Symbol scan() throws java.lang.Exception { - Symbol sym = getScanner().next_token(); - return (sym!=null) ? sym : getSymbolFactory().newSymbol("END_OF_FILE",EOF_sym()); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Report a fatal error. This method takes a message string and an - * additional object (to be used by specializations implemented in - * subclasses). Here in the base class a very simple implementation - * is provided which reports the error then throws an exception. - * - * @param message an error message. - * @param info an extra object reserved for use by specialized subclasses. - */ - public void report_fatal_error( - String message, - Object info) - throws java.lang.Exception - { - /* stop parsing (not really necessary since we throw an exception, but) */ - done_parsing(); - - /* use the normal error message reporting to put out the message */ - report_error(message, info); - - /* throw an exception */ - throw new Exception("Can't recover from previous error(s)"); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Report a non fatal error (or warning). This method takes a message - * string and an additional object (to be used by specializations - * implemented in subclasses). Here in the base class a very simple - * implementation is provided which simply prints the message to - * System.err. - * - * @param message an error message. - * @param info an extra object reserved for use by specialized subclasses. - */ - public void report_error(String message, Object info) - { - System.err.print(message); - System.err.flush(); - if (info instanceof Symbol) - if (((Symbol)info).left != -1) - System.err.println(" at character " + ((Symbol)info).left + - " of input"); - else System.err.println(""); - else System.err.println(""); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** This method is called when a syntax error has been detected and recovery - * is about to be invoked. Here in the base class we just emit a - * "Syntax error" error message. - * - * @param cur_token the current lookahead Symbol. - */ - public void syntax_error(Symbol cur_token) - { - report_error("Syntax error", cur_token); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** This method is called if it is determined that syntax error recovery - * has been unsuccessful. Here in the base class we report a fatal error. - * - * @param cur_token the current lookahead Symbol. - */ - public void unrecovered_syntax_error(Symbol cur_token) - throws java.lang.Exception - { - report_fatal_error("Couldn't repair and continue parse", cur_token); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Fetch an action from the action table. The table is broken up into - * rows, one per state (rows are indexed directly by state number). - * Within each row, a list of index, value pairs are given (as sequential - * entries in the table), and the list is terminated by a default entry - * (denoted with a Symbol index of -1). To find the proper entry in a row - * we do a linear or binary search (depending on the size of the row). - * - * @param state the state index of the action being accessed. - * @param sym the Symbol index of the action being accessed. - */ - protected final short get_action(int state, int sym) - { - short tag; - int first, last, probe; - short[] row = action_tab[state]; - - /* linear search if we are < 10 entries */ - if (row.length < 20) - for (probe = 0; probe < row.length; probe++) - { - /* is this entry labeled with our Symbol or the default? */ - tag = row[probe++]; - if (tag == sym || tag == -1) - { - /* return the next entry */ - return row[probe]; - } - } - /* otherwise binary search */ - else - { - first = 0; - last = (row.length-1)/2 - 1; /* leave out trailing default entry */ - while (first <= last) - { - probe = (first+last)/2; - if (sym == row[probe*2]) - return row[probe*2+1]; - else if (sym > row[probe*2]) - first = probe+1; - else - last = probe-1; - } - - /* not found, use the default at the end */ - return row[row.length-1]; - } - - /* shouldn't happened, but if we run off the end we return the - default (error == 0) */ - return 0; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Fetch a state from the reduce-goto table. The table is broken up into - * rows, one per state (rows are indexed directly by state number). - * Within each row, a list of index, value pairs are given (as sequential - * entries in the table), and the list is terminated by a default entry - * (denoted with a Symbol index of -1). To find the proper entry in a row - * we do a linear search. - * - * @param state the state index of the entry being accessed. - * @param sym the Symbol index of the entry being accessed. - */ - protected final short get_reduce(int state, int sym) - { - short tag; - short[] row = reduce_tab[state]; - - /* if we have a null row we go with the default */ - if (row == null) - return -1; - - for (int probe = 0; probe < row.length; probe++) - { - /* is this entry labeled with our Symbol or the default? */ - tag = row[probe++]; - if (tag == sym || tag == -1) - { - /* return the next entry */ - return row[probe]; - } - } - /* if we run off the end we return the default (error == -1) */ - return -1; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** This method provides the main parsing routine. It returns only when - * done_parsing() has been called (typically because the parser has - * accepted, or a fatal error has been reported). See the header - * documentation for the class regarding how shift/reduce parsers operate - * and how the various tables are used. - */ - public Symbol parse() throws java.lang.Exception - { - /* the current action code */ - int act; - - /* the Symbol/stack element returned by a reduce */ - Symbol lhs_sym = null; - - /* information about production being reduced with */ - short handle_size, lhs_sym_num; - - /* set up direct reference to tables to drive the parser */ - - production_tab = production_table(); - action_tab = action_table(); - reduce_tab = reduce_table(); - - /* initialize the action encapsulation object */ - init_actions(); - - /* do user initialization */ - user_init(); - - /* get the first token */ - cur_token = scan(); - - /* push dummy Symbol with start state to get us underway */ - stack.removeAllElements(); - stack.push(getSymbolFactory().startSymbol("START", 0, start_state())); - tos = 0; - - /* continue until we are told to stop */ - for (_done_parsing = false; !_done_parsing; ) - { - /* Check current token for freshness. */ - if (cur_token.used_by_parser) - throw new Error("Symbol recycling detected (fix your scanner)."); - - /* current state is always on the top of the stack */ - - /* look up action out of the current state with the current input */ - act = get_action(((Symbol)stack.peek()).parse_state, cur_token.sym); - - /* decode the action -- > 0 encodes shift */ - if (act > 0) - { - /* shift to the encoded state by pushing it on the stack */ - cur_token.parse_state = act-1; - cur_token.used_by_parser = true; - stack.push(cur_token); - tos++; - - /* advance to the next Symbol */ - cur_token = scan(); - } - /* if its less than zero, then it encodes a reduce action */ - else if (act < 0) - { - /* perform the action for the reduce */ - lhs_sym = do_action((-act)-1, this, stack, tos); - - /* look up information about the production */ - lhs_sym_num = production_tab[(-act)-1][0]; - handle_size = production_tab[(-act)-1][1]; - - /* pop the handle off the stack */ - for (int i = 0; i < handle_size; i++) - { - stack.pop(); - tos--; - } - - /* look up the state to go to from the one popped back to */ - act = get_reduce(((Symbol)stack.peek()).parse_state, lhs_sym_num); - - /* shift to that state */ - lhs_sym.parse_state = act; - lhs_sym.used_by_parser = true; - stack.push(lhs_sym); - tos++; - } - /* finally if the entry is zero, we have an error */ - else if (act == 0) - { - /* call user syntax error reporting routine */ - syntax_error(cur_token); - - /* try to error recover */ - if (!error_recovery(false)) - { - /* if that fails give up with a fatal syntax error */ - unrecovered_syntax_error(cur_token); - - /* just in case that wasn't fatal enough, end parse */ - done_parsing(); - } else { - lhs_sym = (Symbol)stack.peek(); - } - } - } - return lhs_sym; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Write a debugging message to System.err for the debugging version - * of the parser. - * - * @param mess the text of the debugging message. - */ - public void debug_message(String mess) - { - System.err.println(mess); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Dump the parse stack for debugging purposes. */ - public void dump_stack() - { - if (stack == null) - { - debug_message("# Stack dump requested, but stack is null"); - return; - } - - debug_message("============ Parse Stack Dump ============"); - - /* dump the stack */ - for (int i=0; i"); - if ((i%3)==2 || (i==(stack.size()-1))) { - debug_message(sb.toString()); - sb = new StringBuffer(" "); - } - } - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Perform a parse with debugging output. This does exactly the - * same things as parse(), except that it calls debug_shift() and - * debug_reduce() when shift and reduce moves are taken by the parser - * and produces various other debugging messages. - */ - public Symbol debug_parse() - throws java.lang.Exception - { - /* the current action code */ - int act; - - /* the Symbol/stack element returned by a reduce */ - Symbol lhs_sym = null; - - /* information about production being reduced with */ - short handle_size, lhs_sym_num; - - /* set up direct reference to tables to drive the parser */ - production_tab = production_table(); - action_tab = action_table(); - reduce_tab = reduce_table(); - - debug_message("# Initializing parser"); - - /* initialize the action encapsulation object */ - init_actions(); - - /* do user initialization */ - user_init(); - - /* the current Symbol */ - cur_token = scan(); - - debug_message("# Current Symbol is #" + cur_token.sym); - - /* push dummy Symbol with start state to get us underway */ - stack.removeAllElements(); - stack.push(getSymbolFactory().startSymbol("START",0, start_state())); - tos = 0; - - /* continue until we are told to stop */ - for (_done_parsing = false; !_done_parsing; ) - { - /* Check current token for freshness. */ - if (cur_token.used_by_parser) - throw new Error("Symbol recycling detected (fix your scanner)."); - - /* current state is always on the top of the stack */ - //debug_stack(); - - /* look up action out of the current state with the current input */ - act = get_action(((Symbol)stack.peek()).parse_state, cur_token.sym); - - /* decode the action -- > 0 encodes shift */ - if (act > 0) - { - /* shift to the encoded state by pushing it on the stack */ - cur_token.parse_state = act-1; - cur_token.used_by_parser = true; - debug_shift(cur_token); - stack.push(cur_token); - tos++; - - /* advance to the next Symbol */ - cur_token = scan(); - debug_message("# Current token is " + cur_token); - } - /* if its less than zero, then it encodes a reduce action */ - else if (act < 0) - { - /* perform the action for the reduce */ - lhs_sym = do_action((-act)-1, this, stack, tos); - - /* look up information about the production */ - lhs_sym_num = production_tab[(-act)-1][0]; - handle_size = production_tab[(-act)-1][1]; - - debug_reduce((-act)-1, lhs_sym_num, handle_size); - - /* pop the handle off the stack */ - for (int i = 0; i < handle_size; i++) - { - stack.pop(); - tos--; - } - - /* look up the state to go to from the one popped back to */ - act = get_reduce(((Symbol)stack.peek()).parse_state, lhs_sym_num); - debug_message("# Reduce rule: top state " + - ((Symbol)stack.peek()).parse_state + - ", lhs sym " + lhs_sym_num + " -> state " + act); - - /* shift to that state */ - lhs_sym.parse_state = act; - lhs_sym.used_by_parser = true; - stack.push(lhs_sym); - tos++; - - debug_message("# Goto state #" + act); - } - /* finally if the entry is zero, we have an error */ - else if (act == 0) - { - /* call user syntax error reporting routine */ - syntax_error(cur_token); - - /* try to error recover */ - if (!error_recovery(true)) - { - /* if that fails give up with a fatal syntax error */ - unrecovered_syntax_error(cur_token); - - /* just in case that wasn't fatal enough, end parse */ - done_parsing(); - } else { - lhs_sym = (Symbol)stack.peek(); - } - } - } - return lhs_sym; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - /* Error recovery code */ - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Attempt to recover from a syntax error. This returns false if recovery - * fails, true if it succeeds. Recovery happens in 4 steps. First we - * pop the parse stack down to a point at which we have a shift out - * of the top-most state on the error Symbol. This represents the - * initial error recovery configuration. If no such configuration is - * found, then we fail. Next a small number of "lookahead" or "parse - * ahead" Symbols are read into a buffer. The size of this buffer is - * determined by error_sync_size() and determines how many Symbols beyond - * the error must be matched to consider the recovery a success. Next, - * we begin to discard Symbols in attempt to get past the point of error - * to a point where we can continue parsing. After each Symbol, we attempt - * to "parse ahead" though the buffered lookahead Symbols. The "parse ahead" - * process simulates that actual parse, but does not modify the real - * parser's configuration, nor execute any actions. If we can parse all - * the stored Symbols without error, then the recovery is considered a - * success. Once a successful recovery point is determined, we do an - * actual parse over the stored input -- modifying the real parse - * configuration and executing all actions. Finally, we return the the - * normal parser to continue with the overall parse. - * - * @param debug should we produce debugging messages as we parse. - */ - protected boolean error_recovery(boolean debug) - throws java.lang.Exception - { - if (debug) debug_message("# Attempting error recovery"); - - /* first pop the stack back into a state that can shift on error and - do that shift (if that fails, we fail) */ - if (!find_recovery_config(debug)) - { - if (debug) debug_message("# Error recovery fails"); - return false; - } - - /* read ahead to create lookahead we can parse multiple times */ - read_lookahead(); - - /* repeatedly try to parse forward until we make it the required dist */ - for (;;) - { - /* try to parse forward, if it makes it, bail out of loop */ - if (debug) debug_message("# Trying to parse ahead"); - if (try_parse_ahead(debug)) - { - break; - } - - /* if we are now at EOF, we have failed */ - if (lookahead[0].sym == EOF_sym()) - { - if (debug) debug_message("# Error recovery fails at EOF"); - return false; - } - - /* otherwise, we consume another Symbol and try again */ - // BUG FIX by Bruce Hutton - // Computer Science Department, University of Auckland, - // Auckland, New Zealand. - // It is the first token that is being consumed, not the one - // we were up to parsing - if (debug) - debug_message("# Consuming Symbol #" + lookahead[ 0 ].sym); - restart_lookahead(); - } - - /* we have consumed to a point where we can parse forward */ - if (debug) debug_message("# Parse-ahead ok, going back to normal parse"); - - /* do the real parse (including actions) across the lookahead */ - parse_lookahead(debug); - - /* we have success */ - return true; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Determine if we can shift under the special error Symbol out of the - * state currently on the top of the (real) parse stack. - */ - protected boolean shift_under_error() - { - /* is there a shift under error Symbol */ - return get_action(((Symbol)stack.peek()).parse_state, error_sym()) > 0; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Put the (real) parse stack into error recovery configuration by - * popping the stack down to a state that can shift on the special - * error Symbol, then doing the shift. If no suitable state exists on - * the stack we return false - * - * @param debug should we produce debugging messages as we parse. - */ - protected boolean find_recovery_config(boolean debug) - { - Symbol error_token; - int act; - - if (debug) debug_message("# Finding recovery state on stack"); - - /* Remember the right-position of the top symbol on the stack */ - Symbol right = ((Symbol)stack.peek());// TUM 20060327 removed .right - Symbol left = right;// TUM 20060327 removed .left - - /* pop down until we can shift under error Symbol */ - while (!shift_under_error()) - { - /* pop the stack */ - if (debug) - debug_message("# Pop stack by one, state was # " + - ((Symbol)stack.peek()).parse_state); - left = ((Symbol)stack.pop()); // TUM 20060327 removed .left - tos--; - - /* if we have hit bottom, we fail */ - if (stack.empty()) - { - if (debug) debug_message("# No recovery state found on stack"); - return false; - } - } - - /* state on top of the stack can shift under error, find the shift */ - act = get_action(((Symbol)stack.peek()).parse_state, error_sym()); - if (debug) - { - debug_message("# Recover state found (#" + - ((Symbol)stack.peek()).parse_state + ")"); - debug_message("# Shifting on error to state #" + (act-1)); - } - - /* build and shift a special error Symbol */ - error_token = getSymbolFactory().newSymbol("ERROR",error_sym(), left, right); - error_token.parse_state = act-1; - error_token.used_by_parser = true; - stack.push(error_token); - tos++; - - return true; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Lookahead Symbols used for attempting error recovery "parse aheads". */ - protected Symbol lookahead[]; - - /** Position in lookahead input buffer used for "parse ahead". */ - protected int lookahead_pos; - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Read from input to establish our buffer of "parse ahead" lookahead - * Symbols. - */ - protected void read_lookahead() throws java.lang.Exception - { - /* create the lookahead array */ - lookahead = new Symbol[error_sync_size()]; - - /* fill in the array */ - for (int i = 0; i < error_sync_size(); i++) - { - lookahead[i] = cur_token; - cur_token = scan(); - } - - /* start at the beginning */ - lookahead_pos = 0; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Return the current lookahead in our error "parse ahead" buffer. */ - protected Symbol cur_err_token() { return lookahead[lookahead_pos]; } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Advance to next "parse ahead" input Symbol. Return true if we have - * input to advance to, false otherwise. - */ - protected boolean advance_lookahead() - { - /* advance the input location */ - lookahead_pos++; - - /* return true if we didn't go off the end */ - return lookahead_pos < error_sync_size(); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Reset the parse ahead input to one Symbol past where we started error - * recovery (this consumes one new Symbol from the real input). - */ - protected void restart_lookahead() throws java.lang.Exception - { - /* move all the existing input over */ - for (int i = 1; i < error_sync_size(); i++) - lookahead[i-1] = lookahead[i]; - - /* read a new Symbol into the last spot */ - // BUG Fix by Bruce Hutton - // Computer Science Department, University of Auckland, - // Auckland, New Zealand. [applied 5-sep-1999 by csa] - // The following two lines were out of order!! - lookahead[error_sync_size()-1] = cur_token; - cur_token = scan(); - - /* reset our internal position marker */ - lookahead_pos = 0; - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Do a simulated parse forward (a "parse ahead") from the current - * stack configuration using stored lookahead input and a virtual parse - * stack. Return true if we make it all the way through the stored - * lookahead input without error. This basically simulates the action of - * parse() using only our saved "parse ahead" input, and not executing any - * actions. - * - * @param debug should we produce debugging messages as we parse. - */ - protected boolean try_parse_ahead(boolean debug) - throws java.lang.Exception - { - int act; - short lhs, rhs_size; - - /* create a virtual stack from the real parse stack */ - virtual_parse_stack vstack = new virtual_parse_stack(stack); - - /* parse until we fail or get past the lookahead input */ - for (;;) - { - /* look up the action from the current state (on top of stack) */ - act = get_action(vstack.top(), cur_err_token().sym); - - /* if its an error, we fail */ - if (act == 0) return false; - - /* > 0 encodes a shift */ - if (act > 0) - { - /* push the new state on the stack */ - vstack.push(act-1); - - if (debug) debug_message("# Parse-ahead shifts Symbol #" + - cur_err_token().sym + " into state #" + (act-1)); - - /* advance simulated input, if we run off the end, we are done */ - if (!advance_lookahead()) return true; - } - /* < 0 encodes a reduce */ - else - { - /* if this is a reduce with the start production we are done */ - if ((-act)-1 == start_production()) - { - if (debug) debug_message("# Parse-ahead accepts"); - return true; - } - - /* get the lhs Symbol and the rhs size */ - lhs = production_tab[(-act)-1][0]; - rhs_size = production_tab[(-act)-1][1]; - - /* pop handle off the stack */ - for (int i = 0; i < rhs_size; i++) - vstack.pop(); - - if (debug) - debug_message("# Parse-ahead reduces: handle size = " + - rhs_size + " lhs = #" + lhs + " from state #" + vstack.top()); - - /* look up goto and push it onto the stack */ - vstack.push(get_reduce(vstack.top(), lhs)); - if (debug) - debug_message("# Goto state #" + vstack.top()); - } - } - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Parse forward using stored lookahead Symbols. In this case we have - * already verified that parsing will make it through the stored lookahead - * Symbols and we are now getting back to the point at which we can hand - * control back to the normal parser. Consequently, this version of the - * parser performs all actions and modifies the real parse configuration. - * This returns once we have consumed all the stored input or we accept. - * - * @param debug should we produce debugging messages as we parse. - */ - protected void parse_lookahead(boolean debug) - throws java.lang.Exception - { - /* the current action code */ - int act; - - /* the Symbol/stack element returned by a reduce */ - Symbol lhs_sym = null; - - /* information about production being reduced with */ - short handle_size, lhs_sym_num; - - /* restart the saved input at the beginning */ - lookahead_pos = 0; - - if (debug) - { - debug_message("# Reparsing saved input with actions"); - debug_message("# Current Symbol is #" + cur_err_token().sym); - debug_message("# Current state is #" + - ((Symbol)stack.peek()).parse_state); - } - - /* continue until we accept or have read all lookahead input */ - while(!_done_parsing) - { - /* current state is always on the top of the stack */ - - /* look up action out of the current state with the current input */ - act = - get_action(((Symbol)stack.peek()).parse_state, cur_err_token().sym); - - /* decode the action -- > 0 encodes shift */ - if (act > 0) - { - /* shift to the encoded state by pushing it on the stack */ - cur_err_token().parse_state = act-1; - cur_err_token().used_by_parser = true; - if (debug) debug_shift(cur_err_token()); - stack.push(cur_err_token()); - tos++; - - /* advance to the next Symbol, if there is none, we are done */ - if (!advance_lookahead()) - { - if (debug) debug_message("# Completed reparse"); - - /* scan next Symbol so we can continue parse */ - // BUGFIX by Chris Harris : - // correct a one-off error by commenting out - // this next line. - /*cur_token = scan();*/ - - /* go back to normal parser */ - return; - } - - if (debug) - debug_message("# Current Symbol is #" + cur_err_token().sym); - } - /* if its less than zero, then it encodes a reduce action */ - else if (act < 0) - { - /* perform the action for the reduce */ - lhs_sym = do_action((-act)-1, this, stack, tos); - - /* look up information about the production */ - lhs_sym_num = production_tab[(-act)-1][0]; - handle_size = production_tab[(-act)-1][1]; - - if (debug) debug_reduce((-act)-1, lhs_sym_num, handle_size); - - /* pop the handle off the stack */ - for (int i = 0; i < handle_size; i++) - { - stack.pop(); - tos--; - } - - /* look up the state to go to from the one popped back to */ - act = get_reduce(((Symbol)stack.peek()).parse_state, lhs_sym_num); - - /* shift to that state */ - lhs_sym.parse_state = act; - lhs_sym.used_by_parser = true; - stack.push(lhs_sym); - tos++; - - if (debug) debug_message("# Goto state #" + act); - - } - /* finally if the entry is zero, we have an error - (shouldn't happen here, but...)*/ - else if (act == 0) - { - report_fatal_error("Syntax error", lhs_sym); - return; - } - } - - - } - - /*-----------------------------------------------------------*/ - - /** Utility function: unpacks parse tables from strings */ - protected static short[][] unpackFromStrings(String[] sa) - { - // Concatanate initialization strings. - StringBuffer sb = new StringBuffer(sa[0]); - for (int i=1; i= real_stack.size()) return; - - /* get a copy of the first Symbol we have not transfered */ - stack_sym = (Symbol)real_stack.elementAt(real_stack.size()-1-real_next); - - /* record the transfer */ - real_next++; - - /* put the state number from the Symbol onto the virtual stack */ - vstack.push(new Integer(stack_sym.parse_state)); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Indicate whether the stack is empty. */ - public boolean empty() - { - /* if vstack is empty then we were unable to transfer onto it and - the whole thing is empty. */ - return vstack.empty(); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Return value on the top of the stack (without popping it). */ - public int top() throws java.lang.Exception - { - if (vstack.empty()) - throw new Exception( - "Internal parser error: top() called on empty virtual stack"); - - return ((Integer)vstack.peek()).intValue(); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Pop the stack. */ - public void pop() throws java.lang.Exception - { - if (vstack.empty()) - throw new Exception( - "Internal parser error: pop from empty virtual stack"); - - /* pop it */ - vstack.pop(); - - /* if we are now empty transfer an element (if there is one) */ - if (vstack.empty()) - get_from_real(); - } - - /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ - - /** Push a state number onto the stack. */ - public void push(int state_num) - { - vstack.push(new Integer(state_num)); - } - - /*-----------------------------------------------------------*/ - -} diff --git a/tools/lexer/jflex-1.4/src/manifest b/tools/lexer/jflex-1.4/src/manifest deleted file mode 100644 index 1e139295c20c..000000000000 --- a/tools/lexer/jflex-1.4/src/manifest +++ /dev/null @@ -1 +0,0 @@ -Main-Class: JFlex.Main diff --git a/tools/lexer/jflex-1.4/src/skeleton.default b/tools/lexer/jflex-1.4/src/skeleton.default deleted file mode 100644 index 89f8fcc0a881..000000000000 --- a/tools/lexer/jflex-1.4/src/skeleton.default +++ /dev/null @@ -1,327 +0,0 @@ - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** initial size of the lookahead buffer */ ---- private static final int ZZ_BUFFERSIZE = ...; - - /** lexical states */ ---- lexical states, charmap - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - ---- isFinal list - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; - - /** number of newlines encountered up to the start of the matched text */ - private int yyline; - - /** the number of characters up to the start of the matched text */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; - ---- user class code - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ ---- constructor declaration - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; - } - - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); - - if (numRead > 0) { - zzEndRead+= numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0 - return true; - } - - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ ---- zzScanError declaration - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - ---- throws clause - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ ---- yypushback decl (contains zzScanError exception) - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - ---- zzDoEOF - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ ---- yylex declaration - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - ---- local declarations - - while (true) { - zzMarkedPosL = zzMarkedPos; - ---- start admin (line, char, col count) - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - ---- start admin (lexstate etc) - - zzForAction: { - while (true) { - ---- next input, line, col, char count, next transition, isFinal action - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; ---- line count update - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; ---- char count update - ---- actions - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; ---- eofvalue - } - else { ---- no match - } - } - } - } - ---- main - -} diff --git a/tools/lexer/jflex-1.4/src/skeleton.nested b/tools/lexer/jflex-1.4/src/skeleton.nested deleted file mode 100644 index 77717ad6a5ca..000000000000 --- a/tools/lexer/jflex-1.4/src/skeleton.nested +++ /dev/null @@ -1,428 +0,0 @@ - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** initial size of the lookahead buffer */ ---- private static final int ZZ_BUFFERSIZE = ...; - - /** lexical states */ ---- lexical states, charmap - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - ---- isFinal list - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; - - /** number of newlines encountered up to the start of the matched text */ - private int yyline; - - /** the number of characters up to the start of the matched text */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; - - /** the stack of open (nested) input streams to read from */ - private java.util.Stack zzStreams = new java.util.Stack(); - - /** - * inner class used to store info for nested - * input streams - */ - private static final class ZzFlexStreamInfo { - java.io.Reader zzReader; - int zzEndRead; - int zzStartRead; - int zzCurrentPos; - int zzMarkedPos; - int yyline; - int yycolumn; - char [] zzBuffer; - boolean zzAtEOF; - boolean zzEOFDone; - - /** sets all values stored in this class */ - ZzFlexStreamInfo(java.io.Reader zzReader, int zzEndRead, int zzStartRead, - int zzCurrentPos, int zzMarkedPos, - char [] zzBuffer, boolean zzAtEOF, int yyline, int yycolumn) { - this.zzReader = zzReader; - this.zzEndRead = zzEndRead; - this.zzStartRead = zzStartRead; - this.zzCurrentPos = zzCurrentPos; - this.zzMarkedPos = zzMarkedPos; - this.zzBuffer = zzBuffer; - this.zzAtEOF = zzAtEOF; - this.zzEOFDone = zzEOFDone; - this.yyline = yyline; - this.yycolumn = yycolumn; - } - } - ---- user class code - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ ---- constructor declaration - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; - } - - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); - - if (numRead > 0) { - zzEndRead+= numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0) - return true; - } - - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - - /** - * Stores the current input stream on a stack, and - * reads from a new stream. Lexical state, line, - * char, and column counting remain untouched. - * - * The current input stream can be restored with - * yypopstream (usually in an <> action). - * - * @param reader the new input stream to read from - * - * @see #yypopStream() - */ - public final void yypushStream(java.io.Reader reader) { - zzStreams.push( - new ZzFlexStreamInfo(zzReader, zzEndRead, zzStartRead, zzCurrentPos, - zzMarkedPos, zzBuffer, zzAtEOF, - yyline, yycolumn) - ); - zzAtEOF = false; - zzBuffer = new char[ZZ_BUFFERSIZE]; - zzReader = reader; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yycolumn = 0; - } - - - /** - * Closes the current input stream and continues to - * read from the one on top of the stream stack. - * - * @throws java.util.EmptyStackException - * if there is no further stream to read from. - * - * @throws java.io.IOException - * if there was an error in closing the stream. - * - * @see #yypushStream(java.io.Reader) - */ - public final void yypopStream() throws java.io.IOException { - zzReader.close(); - ZzFlexStreamInfo s = (ZzFlexStreamInfo) zzStreams.pop(); - zzBuffer = s.zzBuffer; - zzReader = s.zzReader; - zzEndRead = s.zzEndRead; - zzStartRead = s.zzStartRead; - zzCurrentPos = s.zzCurrentPos; - zzMarkedPos = s.zzMarkedPos ; - zzAtEOF = s.zzAtEOF; - zzEOFDone = s.zzEOFDone; - yyline = s.yyline; - yycolumn = s.yycolumn; - } - - - /** - * Returns true iff there are still streams left - * to read from on the stream stack. - */ - public final boolean yymoreStreams() { - return !zzStreams.isEmpty(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * @param reader the new input stream - * - * @see #yypushStream(java.io.Reader) - * @see #yypopStream() - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ ---- zzScanError declaration - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - ---- throws clause - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ ---- yypushback decl (contains zzScanError exception) - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - ---- zzDoEOF - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ ---- yylex declaration - int zzInput; - int zzAction; - ---- local declarations - - while (true) { - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL = zzMarkedPos; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - ---- start admin (line, char, col count) - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - ---- start admin (lexstate etc) - - zzForAction: { - while (true) { - ---- next input, line, col, char count, next transition, isFinal action - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; ---- line count update - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; ---- char count update - ---- actions - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; ---- eofvalue - } - else { ---- no match - } - } - } - } - ---- main - -}