summaryrefslogtreecommitdiff
path: root/usr.bin/lex
diff options
context:
space:
mode:
authorTed Unangst <tedu@cvs.openbsd.org>2015-11-19 19:43:41 +0000
committerTed Unangst <tedu@cvs.openbsd.org>2015-11-19 19:43:41 +0000
commit3ed71134b00d13f674ae555d489ed3f7c262c849 (patch)
tree5366e49076abb45d59627f9ccce444d886065259 /usr.bin/lex
parent77d522ada02becf96f1a46c2dfc83c03dc2d48dc (diff)
Update flex from ancient 2.5.4 to the recent 2.5.39.
This work was all done by Serguey Parkhomovsky. Thanks. Some changes from upstream: * Removed autotools cruft/localization/texinfo manual/etc * Kept the old manpage, as the new manpage is content-free * Used safe string handling functions and fixed several compiler warnings * pledge(2). Flex 2.5.39 now forks/execs its filter chains and needs proc exec in addition to what was previously pledged * Removed register keyword from all variable declarations * renamed parse.c, parse.h, scan.c, skel.c with init prefix so compiling flex outside of obj by accident wouldn't clobber the bootstrap files * Minor fixes (spelling, accessing buf[strlen(buf) - 1] for zero-length strings in initscan.c/scan.l, etc) that were already in our tree This is a huge change, so it's going in the tree code bomb style. I'm not excited about the growth in complexity (like now running m4 to _post_ process lexers) but hopefully this will be a one time update and we will now take "ownership" of the code.
Diffstat (limited to 'usr.bin/lex')
-rw-r--r--usr.bin/lex/COPYING58
-rw-r--r--usr.bin/lex/ChangeLog8222
-rw-r--r--usr.bin/lex/FlexLexer.h100
-rw-r--r--usr.bin/lex/Makefile50
-rw-r--r--usr.bin/lex/NEWS532
-rw-r--r--usr.bin/lex/ONEWS1233
-rw-r--r--usr.bin/lex/README113
-rw-r--r--usr.bin/lex/VERSION2
-rw-r--r--usr.bin/lex/buf.c277
-rw-r--r--usr.bin/lex/ccl.c312
-rw-r--r--usr.bin/lex/config.h230
-rw-r--r--usr.bin/lex/dfa.c966
-rw-r--r--usr.bin/lex/ecs.c161
-rw-r--r--usr.bin/lex/filter.c446
-rw-r--r--usr.bin/lex/flex.skl3394
-rw-r--r--usr.bin/lex/flexdef.h656
-rw-r--r--usr.bin/lex/flexint.h65
-rw-r--r--usr.bin/lex/gen.c2707
-rw-r--r--usr.bin/lex/gettext.h61
-rw-r--r--usr.bin/lex/initparse.c3223
-rw-r--r--usr.bin/lex/initparse.h148
-rw-r--r--usr.bin/lex/initscan.c5461
-rw-r--r--usr.bin/lex/initskel.c3732
-rw-r--r--usr.bin/lex/libmain.c34
-rw-r--r--usr.bin/lex/libyywrap.c26
-rw-r--r--usr.bin/lex/main.c2422
-rw-r--r--usr.bin/lex/misc.c1234
-rw-r--r--usr.bin/lex/mkskel.sh24
-rw-r--r--usr.bin/lex/nfa.c643
-rw-r--r--usr.bin/lex/options.c282
-rw-r--r--usr.bin/lex/options.h136
-rw-r--r--usr.bin/lex/parse.y478
-rw-r--r--usr.bin/lex/regex.c174
-rw-r--r--usr.bin/lex/scan.l546
-rw-r--r--usr.bin/lex/scanflags.c71
-rw-r--r--usr.bin/lex/scanopt.c875
-rw-r--r--usr.bin/lex/scanopt.h134
-rw-r--r--usr.bin/lex/sym.c295
-rw-r--r--usr.bin/lex/tables.c504
-rw-r--r--usr.bin/lex/tables.h87
-rw-r--r--usr.bin/lex/tables_shared.c72
-rw-r--r--usr.bin/lex/tables_shared.h146
-rw-r--r--usr.bin/lex/tblcmp.c587
-rw-r--r--usr.bin/lex/version.h4
-rw-r--r--usr.bin/lex/yylex.c326
45 files changed, 33775 insertions, 7474 deletions
diff --git a/usr.bin/lex/COPYING b/usr.bin/lex/COPYING
index fdfcd894b56..684b011026d 100644
--- a/usr.bin/lex/COPYING
+++ b/usr.bin/lex/COPYING
@@ -2,34 +2,36 @@ Flex carries the copyright used for BSD software, slightly modified
because it originated at the Lawrence Berkeley (not Livermore!) Laboratory,
which operates under a contract with the Department of Energy:
- Copyright (c) 1990 The Regents of the University of California.
- All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Vern Paxson.
-
- The United States Government has rights in this work pursuant
- to contract no. DE-AC03-76SF00098 between the United States
- Department of Energy and the University of California.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 The Flex Project.
+
+Copyright (c) 1990, 1997 The Regents of the University of California.
+All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Vern Paxson.
+
+The United States Government has rights in this work pursuant
+to contract no. DE-AC03-76SF00098 between the United States
+Department of Energy and the University of California.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+Neither the name of the University nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
This basically says "do whatever you please with this software except
remove this notice or take advantage of the University's (or the flex
diff --git a/usr.bin/lex/ChangeLog b/usr.bin/lex/ChangeLog
new file mode 100644
index 00000000000..f5610cd8c0a
--- /dev/null
+++ b/usr.bin/lex/ChangeLog
@@ -0,0 +1,8222 @@
+2014-02-16 Translation Project <coordinator@translationproject.org>
+
+ * po/ru.po: update ru translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated da translation in release news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/da.po: update da translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated es translation in release news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/es.po: update es translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated ko translation in release news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/ko.po: update ko translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated ro translation in release news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/ro.po: update ro translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated ru translation in release news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/ru.po: update ru translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated sv translation in news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/sv.po: update sv translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated tr translation in news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/tr.po: update tr translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated zh_CN in release news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/zh_CN.po: update zh_CN translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS, po/LINGUAS, po/zh_TW.po, po/zh_tw.po: rename zh_tw
+ translation to its proper zh_TW name
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * NEWS: mention updated nl, vi translations in release news
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/vi.po: update vi translation from the translation project
+
+2014-02-14 Translation Project <coordinator@translationproject.org>
+
+ * po/nl.po: update nl translation from the translation project
+
+2014-02-14 Will Estes <westes575@gmail.com>
+
+ * TODO: remove some unneeded entries from the todo list
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * doc/Makefile.am: list more generated files in CLEANFILES
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * doc/flex.xml: remove unmaintained xml documentation
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * configure.ac: bump AM_GNU_GETTEXT_VERSION to 0.18.1
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * README: list new location of flex git repo
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * po/.gitignore: git ignore generated files from english quoting
+ variant translations
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * po/LINGUAS: name english quoting variants correctly
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * Makefile.am, configure.ac, tools/Makefile.am: removed tools/
+ subdirectory from distribution Since it is not possible to rebuild the ChangeLog file without being
+ in a git working directory of flex, distributing the tools directory
+ is misleading. In particular, git2cl will always fail.
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * po/LINGUAS: removed unneeded blank line from translation list
+
+2014-02-13 Will Estes <westes575@gmail.com>
+
+ * po/LINGUAS: added en quoting variants to translation list
+
+2014-02-11 Will Estes <westes575@gmail.com>
+
+ * configure.ac: use gnu automake option instead of gnits option
+
+2014-02-11 Will Estes <westes575@gmail.com>
+
+ * README-alpha: remove README_alpha file since it is no longer
+ needed
+
+2014-02-10 Will Estes <westes575@gmail.com>
+
+ * configure.ac: increment version to 2.5.38
+
+2013-11-27 Will Estes <westes575@gmail.com>
+
+ * NEWS: flesh out internationalization section of NEWS file; mention
+ pt_BR translation
+
+2013-11-27 Translation Project <coordinator@translationproject.org>
+
+ * po/pt_BR.po: update pt_BR translation from the translation project
+
+2013-10-31 Will Estes <westes575@gmail.com>
+
+ * NEWS: begin listing 2.5.38 version in NEWS; list new sr
+ translation
+
+2013-10-31 Will Estes <westes575@gmail.com>
+
+ * po/LINGUAS: list new sr translation in list of translations
+
+2013-10-31 Will Estes <westes575@gmail.com>
+
+ * po/sr.po: add sr translation from the translation project
+
+2013-07-02 Till Varoquaux <till.varoquaux@gmail.com>
+
+ * configure.ac, flex.skl, nfa.c, tests/Makefile.am,
+ tests/test-lineno-trailing/.gitignore,
+ tests/test-lineno-trailing/Makefile.am,
+ tests/test-lineno-trailing/scanner.l,
+ tests/test-lineno-trailing/test.input: Adjust yylineno properly when
+ rewinding trailing contexts.
+
+2013-05-28 Will Estes <westes575@gmail.com>
+
+ * Makefile.am: Remove incorrect / in install-exec-hook target
+
+2013-02-16 Translation Project <coordinators@translationproject.org>
+
+ * po/LINGUAS, po/zh_tw.po: add zh_tw translation from the
+ translation project
+
+2012-12-06 Christoph Junghans <ottxor@gentoo.org>
+
+ * Makefile.am, configure.ac: add version information to shared
+ library Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-12-04 Christoph Junghans <ottxor@gentoo.org>
+
+ * .gitignore, Makefile.am, configure.ac, lib/Makefile.am: Build
+ libfl and libcompat using libtool; resolves #3586814 Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-12-04 Translation Project <coordinator@translationproject.org>
+
+ * po/ca.po: update ca translation
+
+2012-10-31 Hugh Sasse <hgs@dmu.ac.uk>
+
+ * tests/test-extended/Makefile.am, tests/test-quotes/Makefile.am:
+ use cmp instead of diff in some tests for portability reasons Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-10-31 Dennis Clarke <dclarke@blastwave.org>
+
+ * tests/TEMPLATE/Makefile.am, tests/test-alloc-extra/Makefile.am,
+ tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am,
+ tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am,
+ tests/test-bison-nr/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c++-basic/Makefile.am,
+ tests/test-c++-multiple-scanners/Makefile.am,
+ tests/test-c++-yywrap/Makefile.am, tests/test-c-cpp-nr/Makefile.am,
+ tests/test-c-cpp-r/Makefile.am, tests/test-ccl/Makefile.am,
+ tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am,
+ tests/test-extended/Makefile.am, tests/test-header-nr/Makefile.am,
+ tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-push/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-linedir-r/Makefile.am, tests/test-lineno-nr/Makefile.am,
+ tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am,
+ tests/test-mem-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-noansi-nr/Makefile.am, tests/test-noansi-r/Makefile.am,
+ tests/test-posix/Makefile.am,
+ tests/test-posixly-correct/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-quotes/Makefile.am,
+ tests/test-reject/Makefile.am, tests/test-rescan-nr/Makefile.am,
+ tests/test-rescan-r/Makefile.am, tests/test-string-nr/Makefile.am,
+ tests/test-string-r/Makefile.am, tests/test-table-opts/Makefile.am,
+ tests/test-top/Makefile.am, tests/test-yyextra/Makefile.am: add
+ CFLAGS and CXXFLAGS options as appropriate to testsuite Makefile.am
+ files Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-10-25 Will Estes <westes575@gmail.com>
+
+ * po/LINGUAS: add hr to list of translations
+
+2012-10-25 Translation Project <coordinator@translationproject.org>
+
+ * po/hr.po: add hr translation from the translation project
+
+2012-10-25 Translation Project <coordinator@translationproject.org>
+
+ * po/fr.po: new fr translation project from the translation project
+
+2012-09-08 Will Estes <westes575@gmail.com>
+
+ * po/LINGUAS: update languages list to include esperanto translation
+
+2012-09-08 Translation Project <coordinator@translationproject.org>
+
+ * po/eo.po: add eo translation from the translation project
+
+2012-08-26 Will Estes <westes575@gmail.com>
+
+ * configure.ac: add dist-xz to automake options; resolves #3561837
+
+2012-08-26 Will Estes <westes575@gmail.com>
+
+ * autogen.sh, configure.ac: require gettext 0.18; force autoreconf
+ in autogen.sh; resolves #3561759 Autoconf had trouble finding the shared libraries for gettext. Using
+ gettext 0.18 fixes that. When updating the gettext version number, autoreconf could fail to
+ update files, since autopoint would assume the gettext-related files
+ had been locally modified. Passing --force prevents that from
+ happening.
+
+2012-08-15 Will Estes <westes575@gmail.com>
+
+ * Makefile.am: remove README.cvs from dist_doc_DATA in Makefile.am
+
+2012-08-13 Will Estes <westes575@gmail.com>
+
+ * : commit 9256a268e2a1000cb410766e95487912a7d66d61 Author: Will
+ Estes <westes575@gmail.com> Date: Mon Aug 13 16:23:35 2012 -0400
+
+2012-08-08 Will Estes <westes575@gmail.com>
+
+ * README, README.cvs: append README.cvs contents to README
+
+2012-08-08 Will Estes <westes575@gmail.com>
+
+ * gen.c: fix m4 error when useecs and nultrans are true; resolves
+ #1816878
+
+2012-08-08 Robert Minsk <rminsk@users.sourceforge.net>
+
+ * flex.skl: put user code after yyguts init; resolves #1744516 Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-08-08 Robert Minsk <rminsk@users.sourceforge.net>
+
+ * flex.skl, main.c: do not output yy_nxt to header with %option
+ full; resolves #1739922 Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-08-07 Will Estes <westes575@gmail.com>
+
+ * main.c: let flex decide if yymore and reject are needed in lex
+ compatible mode This resolves bug #3510440.
+
+2012-08-06 Translation Project <coordinator@translationproject.org>
+
+ * po/vi.po: new vi translation from the translation project
+
+2012-08-06 Will Estes <westes575@gmail.com>
+
+ * .gitignore: add more patterns to .gitignore Undersome circumstances, the build process will generate conf.in~,
+ which we want to ignore. Also, some patch files will apply but not
+ cleanly and *.orig and *.rej files are generated. We want to ignore
+ them as well.
+
+2012-08-06 Will Estes <westes575@gmail.com>
+
+ * configure.ac, configure.in: rename configure.in to configure.ac to
+ prep for upcoming automake changes
+
+2012-08-06 Elias Pipping <pipping@users.sourceforge.net>
+
+ * tests/test-bison-yylloc/main.c, tests/test-bison-yylloc/parser.y,
+ tests/test-bison-yylval/main.c, tests/test-bison-yylval/parser.y:
+ Fix two tests to pass under bison 2.6 Given that bison is moving forward with the %parse-param instead of
+ YYPARSE_PARAM syntax, it makes sense to switch over to using the new
+ style declaration. In particular, this means that flex scanners that
+ use bison features will now require bison 2.6 or higher. Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-08-04 Will Estes <westes575@gmail.com>
+
+ * po/nl.po: new nl translation from the translation project
+
+2012-08-04 Mike Frysinger <vapier@gentoo.org>
+
+ * flexdef.h: add prototype for lerrsf_fatal to flexdef.h Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-08-04 nomis52 <nomis52@users.sourceforge.net>
+
+ * flex.skl, gen.c: Change variable types to silence compiler
+ warnings; resolves #3552806 Signed-off-by: Will Estes <westes575@gmail.com>
+
+2012-08-03 Will Estes <westes575@gmail.com>
+
+ * NEWS: update NEWS to reflect changes in 2.5.37
+
+2012-08-03 Will Estes <westes575@gmail.com>
+
+ * configure.in: update flex version to 2.5.37
+
+2012-08-03 Will Estes <westes575@gmail.com>
+
+ * po/de.po: new de translation from the translation project
+
+2012-08-02 Will Estes <westes575@gmail.com>
+
+ * po/vi.po: new vi translation from the translation project
+
+2012-08-02 Will Estes <westes575@gmail.com>
+
+ * po/pl.po: new pl translation from the translation project
+
+2012-08-02 Will Estes <westes575@gmail.com>
+
+ * po/fi.po: new fi translation from the translation project
+
+2012-08-02 Will Estes <westes575@gmail.com>
+
+ * Makefile.am: Add -f option to LN_S to create flex++ The autoconf macro LN_S needs -f to successfully install flex++ if
+ flex++ already exists. Fortunately, ln, ln -s and cp -p, which are
+ the various forms that LN_S can take all will do the right thing
+ with a -f argument passed.
+
+2012-08-02 Will Estes <westes575@gmail.com>
+
+ * Makefile.am, tools/Makefile.am, tools/cvs2cl.pl,
+ tools/cvsauthors, tools/git2cl: replace cvs2cl with git2cl Add the git2cl script in tools/ and remove the (now unnecessary)
+ cvs2cl script. Remove tools/cvsauthors since git2cl does not need
+ that file. Account for all the above in Makefile.am and
+ tools/Makefile.am
+
+2012-07-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/.cvsignore, tests/.gitignore, tests/TEMPLATE/.cvsignore,
+ tests/TEMPLATE/.gitignore, tests/test-alloc-extra/.cvsignore,
+ tests/test-alloc-extra/.gitignore, tests/test-array-nr/.cvsignore,
+ tests/test-array-nr/.gitignore, tests/test-array-r/.cvsignore,
+ tests/test-array-r/.gitignore, tests/test-basic-nr/.cvsignore,
+ tests/test-basic-nr/.gitignore, tests/test-basic-r/.cvsignore,
+ tests/test-basic-r/.gitignore, tests/test-bison-nr/.cvsignore,
+ tests/test-bison-nr/.gitignore, tests/test-bison-yylloc/.cvsignore,
+ tests/test-bison-yylloc/.gitignore,
+ tests/test-bison-yylval/.cvsignore,
+ tests/test-bison-yylval/.gitignore,
+ tests/test-c++-basic/.cvsignore, tests/test-c++-basic/.gitignore,
+ tests/test-c++-multiple-scanners/.cvsignore,
+ tests/test-c++-multiple-scanners/.gitignore,
+ tests/test-c++-yywrap/.cvsignore, tests/test-c++-yywrap/.gitignore,
+ tests/test-c-cpp-nr/.cvsignore, tests/test-c-cpp-nr/.gitignore,
+ tests/test-c-cpp-r/.cvsignore, tests/test-c-cpp-r/.gitignore,
+ tests/test-ccl/.cvsignore, tests/test-ccl/.gitignore,
+ tests/test-concatenated-options/.cvsignore,
+ tests/test-concatenated-options/.gitignore,
+ tests/test-debug-nr/.cvsignore, tests/test-debug-nr/.gitignore,
+ tests/test-debug-r/.cvsignore, tests/test-debug-r/.gitignore,
+ tests/test-extended/.cvsignore, tests/test-extended/.gitignore,
+ tests/test-header-nr/.cvsignore, tests/test-header-nr/.gitignore,
+ tests/test-header-r/.cvsignore, tests/test-header-r/.gitignore,
+ tests/test-include-by-buffer/.cvsignore,
+ tests/test-include-by-buffer/.gitignore,
+ tests/test-include-by-push/.cvsignore,
+ tests/test-include-by-push/.gitignore,
+ tests/test-include-by-reentrant/.cvsignore,
+ tests/test-include-by-reentrant/.gitignore,
+ tests/test-linedir-r/.cvsignore, tests/test-linedir-r/.gitignore,
+ tests/test-lineno-nr/.cvsignore, tests/test-lineno-nr/.gitignore,
+ tests/test-lineno-r/.cvsignore, tests/test-lineno-r/.gitignore,
+ tests/test-mem-nr/.cvsignore, tests/test-mem-nr/.gitignore,
+ tests/test-mem-r/.cvsignore, tests/test-mem-r/.gitignore,
+ tests/test-multiple-scanners-nr/.cvsignore,
+ tests/test-multiple-scanners-nr/.gitignore,
+ tests/test-multiple-scanners-r/.cvsignore,
+ tests/test-multiple-scanners-r/.gitignore,
+ tests/test-noansi-nr/.cvsignore, tests/test-noansi-nr/.gitignore,
+ tests/test-noansi-r/.cvsignore, tests/test-noansi-r/.gitignore,
+ tests/test-posix/.cvsignore, tests/test-posix/.gitignore,
+ tests/test-posixly-correct/.cvsignore,
+ tests/test-posixly-correct/.gitignore,
+ tests/test-prefix-nr/.cvsignore, tests/test-prefix-nr/.gitignore,
+ tests/test-prefix-r/.cvsignore, tests/test-prefix-r/.gitignore,
+ tests/test-pthread/.cvsignore, tests/test-pthread/.gitignore,
+ tests/test-quotes/.cvsignore, tests/test-quotes/.gitignore,
+ tests/test-reject/.cvsignore, tests/test-reject/.gitignore,
+ tests/test-rescan-nr/.cvsignore, tests/test-rescan-nr/.gitignore,
+ tests/test-rescan-r/.cvsignore, tests/test-rescan-r/.gitignore,
+ tests/test-string-nr/.cvsignore, tests/test-string-nr/.gitignore,
+ tests/test-string-r/.cvsignore, tests/test-string-r/.gitignore,
+ tests/test-table-opts/.cvsignore, tests/test-table-opts/.gitignore,
+ tests/test-top/.cvsignore, tests/test-top/.gitignore,
+ tests/test-yyextra/.cvsignore, tests/test-yyextra/.gitignore: rename
+ .cvsignore files in tests/ subdirectories to gitignore
+
+2012-07-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * examples/.cvsignore, examples/fastwc/.cvsignore,
+ examples/manual/.cvsignore, lib/.cvsignore, tools/.cvsignore: remove
+ unneeded .cvsignore files
+
+2012-07-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * .gitignore: add *.o and *.a to top level .gitignore The cvs tree did not need these additions because cvs assumed a lot
+ of C-style defaults for .cvsignore files. flex builds *.o object
+ files in the course of compilation and *.a files are built as a part
+ of the libraries that flex compiles in the build process.
+
+2012-07-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * .cvsignore, .gitignore, doc/.cvsignore, doc/.gitignore,
+ m4/.cvsignore, m4/.gitignore, po/.cvsignore, po/.gitignore: rename
+ .cvsignore files to .gitignore The .cvsignore files from the legacy cvs repository tracked what
+ files got autogenerated during various stages of the flex build.
+ Renaming the .cvsignore files to .gitignore lets git do the same
+ thing. git is better about letting higher level .gitignore files
+ not-track files in lower level directories. As I work my way through
+ the test directories, we may add additional .gitignore files from
+ the old .cvsignore files. The po/ directory has a lot of special files used by gettext, so the
+ patterns in po/.gitignore look very different. The doc/.gitignore file accounts for what texinfo/makeinfo do, and
+ so it also has special patterns. The m4 directory is mainly present for autoconf's benefit, but we
+ have to account for it so make can do the right thing. Hence,
+ m4/.gitignore says to ignore *.m4, as counterintuitive as that may
+ seem.
+
+2012-07-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: update NEWS file to note release date of 2.5.36
+
+2012-06-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: fix call to version in manual
+
+2012-06-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: add missing argument to call to yylex in manual
+
+2012-04-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: lintish cleanup in flex.skl; resolves #2040664
+
+2012-04-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: add a 7 to the c99 octal pattern; resolves #3518269
+
+2012-03-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: copyedit; resolves #3513670
+
+2012-03-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * buf.c: escape backslashes in #line filenames in %top section;
+ resolves #3212400; patch submitted by scfc_de
+
+2012-03-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in, lib/Makefile.am, lib/lib.c,
+ lib/malloc.c, lib/realloc.c: provide malloc() and realloc() for
+ systems that do not have satisfactory versions; resolves #1899047
+
+2012-03-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: install flex++ as a link; resolves bug #2939681
+
+2012-03-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-bison-nr/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am: fix dependencies for make -j in
+ test suite
+
+2012-03-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: add missing prototypes for yyset_column() and
+ yyget_column(); resolves #3029024; patch submitted by scfc_de
+
+2012-03-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, tests/test-reject/scanner.l,
+ tests/test-table-opts/scanner.l: wrap yy_fatal_error calls
+ appropriately
+
+2012-03-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * regex.c: fix overlapping data buffer issue; patch from Tim
+ Landsheet scfc_de
+
+2012-03-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: better bracket handling in the scanner
+
+2012-03-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexdef.h, main.c, misc.c: Remove unneeded tracking of line/column
+ output; patch from Tim Landsheet scfc_de
+
+2012-03-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: fix test for m4 to accept an m4 with -P and not jus
+ tGNU m4; patch from Tim Landsheet scfc_de on sourceforge
+
+2012-03-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: fix order of td_lolen and td_hilen in
+ documentation; resolves #2913693; patch submitted by Andreas
+ Gruenbacher <agruen@suse.de>
+
+2012-03-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: correct document of YY_FLUSH_BUFFER; resolves
+ #1723028
+
+2012-02-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * dfa.c, flexdef.h, misc.c, parse.y: speed up things for complex
+ inputs; resolves #2891390
+
+2012-02-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: fix ipv6 pattern in manual; update manual copyright
+ to 2012
+
+2012-02-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: fremove isatty() declaration; resolves #1984987
+
+2012-02-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: Add link for RFC 2396
+
+2012-02-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: resolve #1990170
+
+2012-02-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: fix documentation to reflect arguments actually used;
+ bug #2783023
+
+2012-02-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: fix yywrap behavior for reentrant scanners
+
+2012-02-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: Mmention tr translation
+
+2012-02-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * tables.c: prevent unused stuff from being compiled so as to reduce
+ warnings
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * buf.c, filter.c, main.c, misc.c, regex.c, scanflags.c: more better
+ error messages; more better memory handling
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * misc.c: more careful/paranoia
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * scanopt.c: more careful memory allocation in option processing
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in: remove m4/ directory and generally
+ clean up automake/autoconf inputs
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * lib/.cvsignore: cvsignore files that need that
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/da.po, po/es.po, po/ko.po, po/pt_BR.po, po/ro.po,
+ po/ru.po, po/sv.po, po/tr.po, po/zh_CN.po: check in translations
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: correct macro definition of yywrap
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: Greater specificity in error messages
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * parse.y: improve rule handling at EOF
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: include cstdio for definition of EOF in all cases
+
+2012-02-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: suppress warning on unused yyguts_t
+
+2010-08-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/LINGUAS, po/fi.po: new fi translation from the
+ translation project
+
+2009-03-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: Include version.texi after @setfilename, so that @set values are correctly evaluated. (Start Conditions, Performance, Lex and Posix): Fix some markup errors. (Cxx): Likewise. Also, fix C++ example to actually be compilable. Patch from Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+2008-12-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: remove line break that broke configure
+
+2008-12-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: specify the title on the title page since @settitle
+ doesn't do that for us; resolves bug #2043491
+
+2008-12-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, flexdef.h: check for regex.h; resolves bug #2337486
+
+2008-07-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/ga.po: new ga translation from the translation project
+
+2008-06-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/ca.po: new ca translation
+
+2008-05-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: move ABOUT-NLS back to EXTRA_DIST
+
+2008-05-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: create new dist_doc_DATA; move some EXTRA_DIST files
+ to new dist_doc_DATA target
+
+2008-05-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * .cvsignore: ignore more automake generated config.status* files
+
+2008-05-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: flex distribution now built with automake and autoconf
+ versions ...
+
+2008-05-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * README.cvs: document GNU auto* version changes for building flex
+ from cvs
+
+2008-05-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * .cvsignore, doc/Makefile.am: ignore automake-supplied ylwrap
+
+2008-05-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, flex.skl: clean up types; resolves 1961902
+
+2008-05-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: update NEWS re manual
+
+2008-05-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: correct eroneous references to 'nowrap' to refer to
+ 'noyywrap'; resolves bug #1739912
+
+2008-05-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * filter.c: call clearerr on stdin before dup2'ing it; resolves bug
+ #1902612
+
+2008-05-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: generic updates to NEWS
+
+2008-05-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-pthread/Makefile.am: move library flags in linker
+ command; resolves patch #1943403; patch submitted by
+ nullnix@users.sourceforge.net
+
+2008-05-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: use ansi syntax in simple examples; resolves patch
+ #1909844; patch submitted by Tom Browder,
+ tbrowder2@users.sourceforge.net
+
+2008-04-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: fix typo in example (from Paolo J. Matos
+
+2008-04-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexint.h: move endif to better account for what C99 defines for
+ integer types (fix from debian project)
+
+2008-04-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * gen.c: fix another int type to be size_t
+
+2008-03-30 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/fr.po: new fr translation
+
+2008-03-30 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: start version 2.5.36
+
+2008-02-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: add date of release
+
+2008-02-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, parse.y: fix bug that prevented comments from working
+ properly
+
+2008-02-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/de.po: new de translation
+
+2008-02-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/vi.po: new vi translation
+
+2008-02-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/nl.po: new nl translation
+
+2008-02-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/pl.po: new pl translation
+
+2008-02-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/de.po, po/pt_BR.po: new de, pt_br translations
+
+2008-02-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, flex.skl: generate headers for all functions (resolves bug
+ #1628314)
+
+2008-02-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, flex.skl: change yy_size_t to be size_t (resolves bug
+ #1849812)
+
+2008-02-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: start work on version 2.5.35
+
+2007-12-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: revert NEWS and configure.in to version 2.5.34
+
+2007-09-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: update version number to 2.5.35
+
+2007-09-10 Aaron Stone <sodabrew@users.sourceforge.net>
+
+ * tests/test-alloc-extra/scanner.l: Use %option extra-type.
+
+2007-09-10 Aaron Stone <sodabrew@users.sourceforge.net>
+
+ * NEWS, doc/flex.texi, flex.skl, flexdef.h, main.c, parse.y, scan.l:
+ Introduce %option extra-type="your_type *" (resolves bug #1744505).
+
+2007-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/nl.po: new nl translations from the translation project
+
+2007-06-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: change release date
+
+2007-06-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: adjustment for prefix classes; patch submitted by Petr
+ Machata <pmachata@redhat.com>
+
+2007-06-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: NEWS item for yy_init_extra
+
+2007-06-12 Aaron Stone <sodabrew@users.sourceforge.net>
+
+ * doc/flex.texi: Docs and example for yylex_init_extra.
+
+2007-06-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-alloc-extra/.cvsignore: ignore OUTPUT file in
+ test-alloc-extra
+
+2007-06-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/descriptions: add description of concatenated options test
+
+2007-05-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-alloc-extra/.cvsignore: add missing .cvsignore to
+ test-alloc-extra
+
+2007-05-31 Aaron Stone <sodabrew@users.sourceforge.net>
+
+ * configure.in, flex.skl, gen.c, main.c: Changes to resolve SF bugs
+ 1568325 and 1563589.
+
+2007-05-31 Aaron Stone <sodabrew@users.sourceforge.net>
+
+ * tests/Makefile.am, tests/descriptions,
+ tests/test-alloc-extra/Makefile.am,
+ tests/test-alloc-extra/scanner.l, tests/test-alloc-extra/test.input:
+ Adding test cases for yylex_init_extra.
+
+2007-05-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, tests/test-pthread/scanner.l: fixes to test-pthread
+
+2007-05-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: NEWS item for concatenated options
+
+2007-05-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, tests/Makefile.am,
+ tests/test-concatenated-options/.cvsignore,
+ tests/test-concatenated-options/Makefile.am: unit test to verify
+ concatenated options parsing
+
+2007-05-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * scanopt.c: parse multiple short concatenated options; patch
+ submitted by Petr Machata <pmachata@redhat.com
+
+2007-05-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: remove --force option from autogen.sh; much faster
+ without it
+
+2007-05-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.34
+
+2007-05-08 Aaron Stone <sodabrew@users.sourceforge.net>
+
+ * NEWS, flex.skl: Better checking after yyalloc/yyrealloc (resolves
+ bug #1595967)
+
+2007-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: change title of manual to 'Lexical Analysis with
+ Flex'
+
+2007-04-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: c++ memory leak plug
+
+2007-04-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: roll back c++ memory patch as it causes the test suite
+ no end of grief
+
+2007-04-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: fix function definitions for non-ANSI environments (from
+ Manoj Srivastava from Debian patchset)
+
+2007-04-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: fix c++ memory leak (from Manoj Srivastava from Debian
+ patchset)
+
+2007-04-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: fix parameter name in comment (patch from Manoj
+ Srivastava from the debian patchset
+
+2007-04-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: add a size_t cast (patch from Manoj Srivastava from the
+ debian patchset
+
+2007-04-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-extended/Makefile.am, tests/test-quotes/Makefile.am:
+ cleanups to handle VPATH builds better; passifies make distcheck
+
+2007-04-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: drop using the \ in \ escaping as it throws pdf
+ generation for a loop
+
+2007-04-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * .cvsignore: add compile and *.tar.bz2 to .cvsignore
+
+2007-04-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: add call to setlocale for ctype as per debian patchset
+
+2007-04-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, NEWS: provide for a PIC version of libfl.a for shared
+ libraries using flex scanners
+
+2007-04-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * FlexLexer.h: annotate endifs since they're a bit far from their
+ opening #if statements
+
+2007-04-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexdef.h, parse.y: refactor and slightly redo alloca testing,
+ resolves bug #1675899
+
+2007-04-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * : overhaul configure.in: use octathorps for comments so they're
+ passed through m4 processing; better bracketing of m4 arguments;
+ retool checks as per suggestions from autoscan(1)
+
+2007-04-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: fix skeleton for reentrant scanners
+
+2007-04-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: remove homegrown tags target; automake does that for
+ us
+
+2007-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: fix skeleton for reentrant scanners, resolves bug
+ #1694318
+
+2007-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * FlexLexer.h: declare some const where missing in c++ header file
+
+2007-04-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: corrections to the manual as per suggestions from
+ flex-help@
+
+2007-04-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: include author names in online versions of the
+ manual
+
+2007-04-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * COPYING: update copyright notice
+
+2007-04-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * AUTHORS: rearrange and update AUTHORS
+
+2007-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: note sf feature request 1658379 in NEWS
+
+2007-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * tools/cvsauthors: add sodabrew to cvsauthors file
+
+2007-03-29 Aaron Stone <sodabrew@users.sourceforge.net>
+
+ * flex.skl: SourceForge feature request #1658379: Expose YY_BUF_SIZE
+ in the header file.
+
+2007-03-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, filter.c, flex.skl: apply patches submitted by sodabrew
+
+2007-03-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * README.cvs: more changes describing building flex from cvs
+
+2007-03-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, README.cvs, README.cvs-snapshot: rename
+ README.cvs-snapshot to README.cvs
+
+2007-03-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * README.cvs-snapshot: update to explain where flex cvs lives
+
+2007-03-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * README, doc/flex.texi: correct how to submit bugs
+
+2007-02-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: clarify NEWS item re man page and pdf manual
+
+2007-02-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/Makevars: update bug address to point to flex-devel instead of
+ lex-help
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, doc/Makefile.am: make better use of AC_INIT; clean
+ up, simplify and make more robust the generation of the man page
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: remove option check-news from call to
+ AM_INIT_AUTOMAKE as gnits implies check-news
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in: move automake options from Makefile.am
+ to configure.in
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: restore --install option to autogen.sh since --force
+ does not imply --install
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * tools/cvsauthors: add john43 to cvsauthors file
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: call autoreconf with --force instead of --install
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/.cvsignore: remove texinfo.tex from cvs tree
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: updates to NEWS file to reflect recent changes
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/Makefile.am: add flex.pdf to EXTRA_DIST
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: remove flex.spec
+
+2007-02-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: remove maintainercleanfiles
+
+2007-02-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/Makefile.am: more changes to build system to distribute man
+ page
+
+2007-02-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/Makefile.am: add flex man page to distribution
+
+2007-02-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * .cvsignore, flex.spec.in: remove flex spec file
+
+2006-11-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-table-opts/Makefile.am: make test target depend on test
+ groupings, which in turn depend on building executables; cygwin
+ portability fix
+
+2006-11-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/create-test: change create-test script to edit files in
+ place
+
+2006-11-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am,
+ tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am,
+ tests/test-bison-nr/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c++-basic/Makefile.am,
+ tests/test-c++-multiple-scanners/Makefile.am,
+ tests/test-c++-yywrap/Makefile.am, tests/test-c-cpp-nr/Makefile.am,
+ tests/test-c-cpp-r/Makefile.am, tests/test-ccl/Makefile.am,
+ tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am,
+ tests/test-extended/Makefile.am, tests/test-header-nr/Makefile.am,
+ tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-push/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-linedir-r/Makefile.am, tests/test-lineno-nr/Makefile.am,
+ tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am,
+ tests/test-mem-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-noansi-nr/Makefile.am, tests/test-noansi-r/Makefile.am,
+ tests/test-posix/Makefile.am,
+ tests/test-posixly-correct/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-quotes/Makefile.am,
+ tests/test-reject/Makefile.am, tests/test-rescan-nr/Makefile.am,
+ tests/test-rescan-r/Makefile.am, tests/test-string-nr/Makefile.am,
+ tests/test-string-r/Makefile.am, tests/test-top/Makefile.am,
+ tests/test-yyextra/Makefile.am: change CLEANFILES to include
+ instead of just the testname for the executable
+
+2006-11-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: fix typos in manual; resolves bug #1592857
+
+2006-11-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am: change test template to remove test
+ executable when that executable has an extension, e.g. under Cygwin
+
+2006-11-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.am: test names weren't displaying in test
+ success/failure messages (from #1591672
+
+2006-10-30 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/.cvsignore: add flex.html to .cvsignore in doc directory
+
+2006-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: update NEWS file for the work that millaway did
+
+2006-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * FlexLexer.h, NEWS, main.c,
+ tests/test-c++-multiple-scanners/scanner-2.l: make yywrap work with
+ c++ scanners as per sf bug report
+
+2006-10-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, flex.skl, tests/test-c++-multiple-scanners/main.cpp,
+ tests/test-c-cpp-nr/scanner.l: memory leak issues in c++ scanner
+
+2006-10-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in, tests/Makefile.am, tests/descriptions,
+ tests/test-c++-yywrap/.cvsignore,
+ tests/test-c++-yywrap/Makefile.am, tests/test-c++-yywrap/scanner.l,
+ tests/test-c++-yywrap/test.input: add unit test for c++ with yywrap
+
+2006-10-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, tests/test-c++-basic/Makefile.am,
+ tests/test-linedir-r/Makefile.am: use configure-provided awk
+ variable for portability; add loadlibes variable to c++ test
+
+2006-10-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/flex.texi: add noyywrap option to example; use whitespace to
+ clarify example
+
+2006-08-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/ca.po, po/vi.po: new translations
+
+2006-04-11 John Millaway <john43@users.sourceforge.net>
+
+ * tables.c: Casted away signedness to appease -Werror freaks.
+
+2006-03-28 John Millaway <john43@users.sourceforge.net>
+
+ * ccl.c, doc/flex.texi, flexdef.h, parse.y, scan.l, sym.c,
+ tests/test-ccl/scanner.l, tests/test-ccl/test.input: Added ccl union
+ operator. Added test in test suite for ccl union operator.
+ Documented ccl union operator. Removed crufty ccl cache to prevent
+ parser problems.
+
+2006-03-28 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi, scan.l, tests/test-extended/scanner.l,
+ tests/test-extended/test.input: Extended syntax excluded for
+ lex/posix compat mode. Comments discarded inside (?x:) patterns.
+ Added test in test suite for comments in extended patterns.
+ Documented syntax additions.
+
+2006-03-27 John Millaway <john43@users.sourceforge.net>
+
+ * scan.l, tests/test-ccl/scanner.l, tests/test-ccl/test.input:
+ Implemented (?x:) syntax to allow whitespace in patterns. Added
+ test for (?x:) syntax in test suite.
+
+2006-03-27 John Millaway <john43@users.sourceforge.net>
+
+ * parse.y, tests/test-ccl/scanner.l, tests/test-ccl/test.input:
+ Implemented dot-all syntax. Added test for dot-all syntax in test
+ suite.
+
+2006-03-27 John Millaway <john43@users.sourceforge.net>
+
+ * dfa.c, doc/flex.texi, flexdef.h, gen.c, main.c, parse.y, scan.l,
+ scanflags.c, tests/test-ccl/scanner.l, tests/test-ccl/test.input:
+ Removed global variable caseins. Added scanner stack flags for
+ case-insensitivity. Moved case-folding code from DFA-generation to
+ parse time read-macros. Added localized case-sensitivity syntax
+ from Perl. Added test for new syntax in test suite. Documented new
+ syntax.
+
+2006-03-27 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, configure.in, flexdef.h, scanflags.c: Added configure
+ check for assert.h. Added scanner flags stack.
+
+2006-03-25 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, doc/flex.texi, scan.l, tests/Makefile.am,
+ tests/descriptions, tests/test-extended/.cvsignore,
+ tests/test-extended/Makefile.am, tests/test-extended/scanner.l,
+ tests/test-extended/test.input: Added extended, perl-compatible
+ comment syntax. Added test for extended comment syntax. Documented
+ extended comment syntax.
+
+2006-03-25 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi, parse.y: Changed explicit 'A'-'Z' to isupper(),
+ where correct to do so. Documentation.
+
+2006-03-24 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: Documentation.
+
+2006-03-24 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: Added appendix of patterns to manual.
+
+2006-03-23 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: .
+
+2006-03-22 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: Documentation.
+
+2006-03-22 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: Documented set difference operator {-}.
+
+2006-03-22 John Millaway <john43@users.sourceforge.net>
+
+ * ccl.c, flexdef.h, parse.y, scan.l, tests/test-ccl/scanner.l,
+ tests/test-ccl/test.input: Added set difference operator {-} for
+ character classes.
+
+2006-03-22 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, doc/flex.texi, parse.y, scan.l, tests/Makefile.am,
+ tests/descriptions, tests/test-ccl/.cvsignore,
+ tests/test-ccl/Makefile.am, tests/test-ccl/scanner.l,
+ tests/test-ccl/test.input: Added negated character class
+ expressions. Documented negated character class expressions. Added
+ regression test for negated character class expressions.
+
+2006-03-22 John Millaway <john43@users.sourceforge.net>
+
+ * buf.c, filter.c, gen.c, main.c, misc.c, nfa.c, parse.y, regex.c:
+ Replaced sprintf with snprintf everywhere.
+
+2006-03-22 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: Removed includedir from AM_CPPFLAGS #1439351.
+
+2006-03-21 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, tests/Makefile.am, tests/descriptions,
+ tests/test-quotes/.cvsignore, tests/test-quotes/Makefile.am,
+ tests/test-quotes/scanner.l, tests/test-quotes/test.input: Added
+ test to verify user code is unmangled.
+
+2006-03-21 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, misc.c, scan.l: Fixed escape in actions.
+
+2006-03-21 John Millaway <john43@users.sourceforge.net>
+
+ * filter.c, flexdef.h, main.c, scan.l: Reverted previous input
+ filter changes. Added noop macro to scanner output. Modified
+ scan.l to escape m4 quotes found in user code.
+
+2006-03-21 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-table-opts/Makefile.am,
+ tests/test-table-opts/scanner.l: Removed m4 from test-table-opts
+
+2006-03-21 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-reject/Makefile.am, tests/test-reject/scanner.l:
+ Removed m4 from test-reject
+
+2006-03-21 John Millaway <john43@users.sourceforge.net>
+
+ * filter.c, flexdef.h, main.c, scan.l: Moved set_input_file to
+ different file.
+
+2006-03-21 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flexdef.h, flexint.h, misc.c: Relaxed tests for __STDC__
+ and __STDC_VERSION__ to cope with bugs in GCC and Sun cc.
+
+2006-03-20 John Millaway <john43@users.sourceforge.net>
+
+ * filter.c: Documented filter chain. Removed fdopen. Added no-op
+ fseek.
+
+2006-03-13 John Millaway <john43@users.sourceforge.net>
+
+ * gen.c: Fixed another -Wall report.
+
+2006-03-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/vi.po: new vi translation
+
+2006-03-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/ga.po, po/nl.po: new nl, ga translations
+
+2006-02-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * m4/Makefile.am: add po.m4 to extra_dist in m4/ so it gets picked
+ up by distributions
+
+2006-02-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * m4/Makefile.am: add nls.m4 to extra_dist in m4/ so it will get
+ picked up in distribution tarballs
+
+2006-02-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: remove website directory from configure.in
+
+2006-02-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.33 marks in NEWS and configure.in
+
+2006-02-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: change email address in configure.in to point to
+ flex-help@sourceforge.net
+
+2006-02-20 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: Documentation.
+
+2006-02-20 John Millaway <john43@users.sourceforge.net>
+
+ * BUGS: Appended to BUGS file.
+
+2006-02-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: remove website directory (since it now has its own
+ module in the flex project
+
+2006-02-16 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi, flex.skl: Fixed buffer overflow in reject state
+ buffer. Corrected documentation on the state buffer.
+
+2006-02-16 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Reverted num_read from size_t back to int.
+
+2006-02-15 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, configure.in: Removed reference to RoadMap in
+ Makefile.am. Added website directory.
+
+2006-02-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * README, RoadMap: remove RoadMap and reference to it in README
+
+2006-02-15 John Millaway <john43@users.sourceforge.net>
+
+ * BUGS, README, doc/flex.texi, doc/flex.xml: Eliminated references
+ to lex.sf.net.
+
+2006-02-15 John Millaway <john43@users.sourceforge.net>
+
+ * BUGS, flex.skl: Transfered bugs list from lex.sf.net to BUGS file.
+
+2006-02-15 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-rescan-nr/.cvsignore,
+ tests/test-rescan-nr/Makefile.am, tests/test-rescan-nr/scanner.l,
+ tests/test-rescan-nr/test.input, tests/test-rescan-r/.cvsignore,
+ tests/test-rescan-r/Makefile.am, tests/test-rescan-r/scanner.l,
+ tests/test-rescan-r/test.input: Recommit of last commit -- broken
+ pipe.
+
+2006-02-15 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, flex.skl, tests/Makefile.am, tests/descriptions:
+ yy_lex_destroy calls yy_init_globals to reset everything for next
+ call to yylex. Added two new tests for reusing scanners.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.spec.in: Patched rpm spec file.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, flexint.h: Added C99 macro for inttypes, just to be
+ conformant.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, nfa.c, parse.y: Changed symbol INFINITE to fix conflict
+ with C math symbol.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * scan.l: Omitting parens for named rules in trailing context.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, main.c, po/ca.po, po/da.po, po/de.po, po/es.po,
+ po/fr.po, po/ga.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po,
+ po/ro.po, po/ru.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po,
+ tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l: Added check
+ for locale.h and libintl.h in configure script.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Removed unused local vars.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Removed certain offending #undefs.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * flexint.h: Removed logical and from preprocessor statement.
+
+2006-02-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/nl.po, po/nl.po.1: remove eroneously named nl.po.1; update
+ nl.po
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * dfa.c: .
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Included <sys/types.h> for serialized tables.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in: Minor patch to call to head in configure script.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: Documentation patch.
+
+2006-02-14 John Millaway <john43@users.sourceforge.net>
+
+ * filter.c, gen.c, libyywrap.c, main.c: Patch for full file system
+ failure.
+
+2006-02-13 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: Documentation.
+
+2006-02-13 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Fixed double-fclose when input file is empty.
+
+2006-02-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ca.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/ga.po,
+ po/ko.po, po/nl.po.1, po/pl.po, po/pt_BR.po, po/ro.po, po/ru.po,
+ po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po: newtranslations
+
+2005-12-22 John Millaway <john43@users.sourceforge.net>
+
+ * buf.c, main.c: Improvement request 1069716 log vs. log10
+
+2005-12-22 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Fixed bug 1257093 yy_init_globals in header file
+
+2005-04-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/nl.po: new nl translation
+
+2005-04-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/LINGUAS, po/nl.po, po/vi.po: new nl and vi translations
+
+2004-07-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * filter.c: correct improper stdin assignment
+
+2004-05-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/tr.po: new tr translation
+
+2004-05-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * .cvsignore, .indent.pro: .cvsignore and .indent.pro got missed in
+ the import to sourceforge; replace them
+
+2004-05-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/fr.po: new fr translation
+
+2004-05-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/LINGUAS: polish is pl, not po
+
+2004-03-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/sv.po: yet another sweedish update
+
+2004-03-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/sv.po: new sv translation
+
+2003-12-11 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, filter.c, main.c: Configure checks for GNU m4.
+ Environment variable M4 overrides built-in m4 path. Generated m4
+ does a late check for GNU m4.
+
+2003-12-09 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: added 3 faqs
+
+2003-11-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ro.po: new ro translation
+
+2003-11-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/fr.po: new french translation
+
+2003-11-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/ca.po: new catalan translation from the translation
+ project
+
+2003-11-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/LINGUAS, po/ga.po, po/pl.po: new polish translation;
+ updated irish translation from translation project
+
+2003-10-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/LINGUAS, po/ga.po: new Irish translation
+
+2003-08-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/LINGUAS, po/ro.po: add romanian translation
+
+2003-07-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: flex_*int* type fixes
+
+2003-07-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * tools/cvsauthors: change wlestes email address
+
+2003-07-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: undef yytext_ptr has some bad side effects
+
+2003-07-07 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi: Documented m4 incompatibility with lex.
+
+2003-05-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: upgrade to gettext 0.12
+
+2003-05-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, gen.c: patches from manoj via sourceforge
+
+2003-05-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, po/.cvsignore, po/Makevars: upgrade gettext to 0.12;
+ this allows running make pdf and make ps to be successful
+
+2003-05-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/.cvsignore: cvs should ignore flex.pdf and flex.ps
+
+2003-04-25 John Millaway <john43@users.sourceforge.net>
+
+ * TODO: Added yylineno bugs to TODO list.
+
+2003-04-03 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.xml: Docbook.
+
+2003-04-03 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.xml: xml now validates.
+
+2003-04-02 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.xml: Began conversion to DocBook.
+
+2003-04-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.31
+
+2003-04-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: remove --enable-maintainer-mode configure option
+
+2003-04-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: remove AM_MAINTAINER_MODE
+
+2003-04-01 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flexdef.h, main.c, misc.c, scan.l: Renamed some internal
+ variables.
+
+2003-03-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: yylineno is now per-buffer in reentrant scanners
+
+2003-03-31 John Millaway <john43@users.sourceforge.net>
+
+ * TODO: Added TODO item.
+
+2003-03-30 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, gen.c: yylineno is per-buffer in the reentrant scanner.
+ support for yycolumn exists, but is not yet developed.
+
+2003-03-28 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Minor documentation.
+
+2003-03-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: added %top directive
+
+2003-03-27 John Millaway <john43@users.sourceforge.net>
+
+ * buf.c, configure.in, doc/flex.texi, flexdef.h, main.c, scan.l,
+ tests/Makefile.am, tests/descriptions, tests/test-top/.cvsignore,
+ tests/test-top/Makefile.am, tests/test-top/main.c,
+ tests/test-top/scanner.l, tests/test-top/test.input: Added %top
+ block syntax. Added test for %top block. Documented %top block.
+
+2003-03-27 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, doc/flex.texi: Documented the m4 dependency.
+
+2003-03-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, flexdef.h: check for sys/wait.h since we use wait(2)
+
+2003-03-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexdef.h: reorder include directives so as to catch system
+ integer types before flex defined values for same
+
+2003-03-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: assign tasks due before major release can happen; remove
+ --enable-maintainer-mode entry
+
+2003-03-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: only rebuild the ChangeLog if we're inside a cvs
+ working directory
+
+2003-03-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, tools/.cvsignore, tools/Makefile.am: add tools/
+ subdirectory to distribution
+
+2003-03-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: remove maintainer_mode conditional; add filter.c and
+ regex.c to indentfiles; reformat and sort indentfiles so it's easier
+ to add files in the future
+
+2003-03-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/Makefile.am: clean up flex.texi processing leftovers with
+ cleanfiles
+
+2003-03-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-linedir-r/Makefile.am: an awk script wasn't included in
+ the distribution
+
+2003-03-26 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, configure.in, tests/Makefile.am, tests/descriptions,
+ tests/test-include-by-push/.cvsignore,
+ tests/test-include-by-push/Makefile.am,
+ tests/test-include-by-push/scanner.l,
+ tests/test-include-by-push/test-1.input,
+ tests/test-include-by-push/test-2.input,
+ tests/test-include-by-push/test-3.input: Added test for
+ yypush_buffer_state and yypop_buffer_state.
+
+2003-03-26 John Millaway <john43@users.sourceforge.net>
+
+ * TODO: Removed items from TODO list.
+
+2003-03-26 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, tests/Makefile.am, tests/descriptions,
+ tests/test-linedir-r/.cvsignore, tests/test-linedir-r/Makefile.am,
+ tests/test-linedir-r/check-lines.awk, tests/test-linedir-r/main.c,
+ tests/test-linedir-r/scanner.l, tests/test-linedir-r/test.input:
+ Added test for #line directives.
+
+2003-03-26 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, tests/Makefile.am, tests/test-noansi-nr/.cvsignore,
+ tests/test-noansi-nr/Makefile.am, tests/test-noansi-nr/scanner.l,
+ tests/test-noansi-nr/test.input, tests/test-noansi-r/.cvsignore,
+ tests/test-noansi-r/Makefile.am, tests/test-noansi-r/scanner.l,
+ tests/test-noansi-r/test.input: Added test for noansi (traditional)
+ options. Reordered the tests so the basic ones are first.
+
+2003-03-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO, doc/Makefile.am: remove maintainer-mode conditional around
+ rebuilding of manpage
+
+2003-03-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: mention doc/ for user documentation
+
+2003-03-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: rework distribution items
+
+2003-03-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: mention m4 processing
+
+2003-03-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/README: update instructions for running test suite
+
+2003-03-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * FlexLexer.h, Makefile.am, TODO, buf.c, configure.in,
+ doc/flex.texi, filter.c, flex.skl, flexdef.h, gen.c, main.c,
+ misc.c, options.c, options.h, regex.c, scan.l, sym.c,
+ tests/test-bison-nr/scanner.l, tests/test-bison-yylloc/scanner.l,
+ tests/test-reject/scanner.l, tests/test-table-opts/scanner.l: merge
+ millaway's m4 branch work
+
+2003-03-24 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi, flex.skl, flexdef.h, gen.c, main.c, options.c,
+ options.h, scan.l: Option ansi-definitions. Option ansi-prototypes.
+ Cleaned up some of header. Documented bison-locations.
+
+2003-03-24 John Millaway <john43@users.sourceforge.net>
+
+ * scan.l: Escaped m4 macros in scan.l which would cause
+ bootstrapping issues.
+
+2003-03-21 John Millaway <john43@users.sourceforge.net>
+
+ * doc/flex.texi, flex.skl, main.c: Cleaning up the skel.
+
+2003-03-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: we want to move the contents of to.do/Wishlist to top level
+ TODO
+
+2003-03-20 John Millaway <john43@users.sourceforge.net>
+
+ * to.do/Wish-List: Assessment of every item in Wish-List.
+
+2003-03-19 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Fixed allocation of slightly more memory than needed.
+
+2003-03-19 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, buf.c, configure.in, flex.skl, flexdef.h, main.c, sym.c:
+ Start conditions now generated in a single place.
+
+2003-03-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: cosmetic changes to TODO list
+
+2003-03-19 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Cleaned up warnings so multiple headers could coincide.
+
+2003-03-19 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, flex.skl, main.c: Moved prefixes to m4.
+
+2003-03-19 John Millaway <john43@users.sourceforge.net>
+
+ * FlexLexer.h, filter.c, flex.skl, flexdef.h, main.c, misc.c,
+ regex.c: Removed Paxson/Berkeley copyright restriction from filter.c
+ and regex.c. Inline documentation of much of the generated API.
+ Line directives now fixed for header and stdin/stdout. Blank lines
+ squeezed from generated scanner.
+
+2003-03-18 John Millaway <john43@users.sourceforge.net>
+
+ * filter.c, flexdef.h, main.c, regex.c: Fixed #line directives.
+
+2003-03-17 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, filter.c, flexdef.h, regex.c: Added regex.c for
+ regex-related code. Worked on fixing line directives;incomplete.
+
+2003-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * TODO: Added some TODOs.
+
+2003-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, main.c, options.c, options.h, scan.l,
+ tests/test-bison-nr/scanner.l, tests/test-bison-yylloc/scanner.l:
+ Bison bridge was simplified to rely less on bison output. New
+ option bison-locations.
+
+2003-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * filter.c, flex.skl, flexdef.h, gen.c, main.c, scan.l,
+ tests/test-reject/scanner.l: Filters are now direct children of main
+ process. Header file now generated through m4.
+
+2003-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * buf.c, filter.c, flexdef.h, main.c, misc.c: Added internal filter
+ ability. Deleted various unused variables.
+
+2003-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * main.c, tests/test-table-opts/scanner.l: Keeping tests up to date
+ with m4 changes. Proper wait for all children.
+
+2003-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, tests/test-table-opts/scanner.l: Moved test-tables to
+ m4.
+
+2003-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, main.c, options.c: Moved bison bridge code to m4.
+
+2003-03-13 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, gen.c, main.c, scan.l: Moved YY_USE_LINENO to m4.
+
+2003-03-13 John Millaway <john43@users.sourceforge.net>
+
+ * buf.c, flexdef.h, scan.l: Added function buf_m4_undefine.
+
+2003-03-13 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, main.c, scan.l: Replaced YY_ALWAYS_INTERACTIVE with m4.
+ Replaced YY_NEVER_INTERACTIVE with m4.
+
+2003-03-13 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, main.c: Moved YY_TEXT_IS_ARRAY to m4.
+
+2003-03-12 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, gen.c, main.c, tests/test-reject/scanner.l: Renaming
+ macros from YY_* to M4_YY_* where appropriate.
+
+2003-03-12 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, tests/test-reject/scanner.l,
+ tests/test-table-opts/scanner.l: Now using local variable "yyg"
+ instead of lengthly YY_G expansion.
+
+2003-03-12 John Millaway <john43@users.sourceforge.net>
+
+ * buf.c, filter.c, flex.skl, flexdef.h, main.c, misc.c, options.c,
+ options.h, scan.l, tests/test-reject/scanner.l: More m4 macro
+ conversions. Added debugging option --preproc-level=NUM.
+
+2003-03-11 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, buf.c, flex.skl, flexdef.h, gen.c, main.c, misc.c,
+ scan.l: Replaced many CPP macros with m4 equivalents.
+
+2003-03-10 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, filter.c, flex.skl, flexdef.h, main.c, misc.c: Added
+ filter.c Added filter.c rules to Makefile.am Added filter prototypes
+ to flexdef.h Flex now filters output through m4.
+
+2003-03-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * doc/.cvsignore, texinfo.tex: move texinfo.tex to doc/
+
+2003-03-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: update TODO
+
+2003-03-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.29
+
+2003-03-04 John Millaway <john43@users.sourceforge.net>
+
+ * FlexLexer.h, flex.skl: Added growable buffer stack to C++ scanner
+ as well. yyensure_buffer_stack is now static.
+
+2003-03-02 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, misc.c: Removed awkward %push %pop syntax from skeleton.
+
+2003-03-02 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Renamed YY_CURRENT_BUFFER_FAST to
+ YY_CURRENT_BUFFER_LVALUE to better reflect its purpose.
+
+2003-02-28 John Millaway <john43@users.sourceforge.net>
+
+ * NEWS: made entry on input buffer stacks.
+
+2003-02-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, doc/Makefile.am: build on . in top level first; this
+ will simplify calling help2man
+
+2003-02-28 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, doc/flex.texi, flex.skl, gen.c, main.c: Removed
+ yy_current_buffer from the planet. Input buffer states are now in
+ an internal unbounded stack. Added new internal function,
+ yyensure_buffer_stack. Added new API function, yypush_buffer_state.
+ Added new API function, yypop_buffer_state. Documented the new API
+ calls in the manual. Macro YY_BUFFER_STATE now refers to top of
+ stack. This revision breaks the C++ scanner (again.)
+
+2003-02-28 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Removed some symbols from the undef list. They are needed
+ for multiple headers to coexist.
+
+2003-02-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, NEWS, configure.in, doc/.cvsignore, doc/Makefile.am,
+ doc/flex.texi, flex.texi: move flex.texi and flex.1 to new doc/
+ subdirectory
+
+2003-02-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: namespace cleanups
+
+2003-02-26 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Added a few macros to the undef list.
+
+2003-02-26 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Put the undef macros in an array.
+
+2003-02-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.28
+
+2003-02-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * README, TODO, configure.in, flex.texi: update documentation to
+ reflect the sourceforge move
+
+2003-02-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: update according to current thinking
+
+2003-02-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: mcvs reviewed
+
+2003-02-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: sourceforge migration tasks
+
+2003-02-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: Flex now warns if always-interactive is specified with fast
+ or full; Fixed trailing slash bug in YY_INPUT macro def
+
+2003-01-31 John Millaway <john43@users.sourceforge.net>
+
+ * scan.l: Flex now warns if always-interactive is specified with
+ fast or full.
+
+2003-01-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: switch to using cvs2cl.pl to generate the ChangeLog
+
+2003-01-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * tools/cvs2cl.pl, tools/cvsauthors: we're going to be switching how
+ we handle our ChangeLog
+
+2003-01-29 John Millaway <john43@users.sourceforge.net>
+
+ * gen.c, misc.c: Fixed trailing slash bug in YY_INPUT macro def.
+
+2003-01-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * README.cvs-snapshot: upgrade texinfo to 4.3d
+
+2003-01-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: the @copying construct works now; thanks to the texinfo
+ maintainers for finding the problem
+
+2003-01-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.27
+
+2003-01-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: flex now works with recent bison versions
+
+2003-01-18 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Check for YYLTYPE_IS_DECLARED. This fixes bison-bridge
+ with latest bison.
+
+2003-01-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/pt_BR.po: new pt_br translation
+
+2003-01-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.26
+
+2003-01-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: Fixed table deserialization bug on big-endian archs. Patch
+ sent from Bryce Nichols <bryce@bnichols.org>
+
+2003-01-12 John Millaway <john43@users.sourceforge.net>
+
+ * tables_shared.h: Fixed table deserialization bug on big-endian
+ archs. Patch sent from Bryce Nichols <bryce@bnichols.org>.
+
+2003-01-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * README.cvs-snapshot: add version numbers for some tools and
+ explain about version.texi and --enable-maintainer-mode
+
+2003-01-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: catch news up
+
+2003-01-09 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l: Changed
+ size_t to yy_size_t in yyalloc() and yyrealloc(). Is this really
+ what we want?
+
+2003-01-09 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Changed type of yyleng from size_t to int. This fixes
+ bug in PostgreSQL compilation.
+
+2003-01-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: catch news up
+
+2003-01-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: more c++ fixes
+
+2003-01-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in, flex.spec.in: add a spec file
+
+2003-01-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: type cast to pacify c++ compilers; patch from Bruce
+ Lilly <blilly@erols.com>
+
+2003-01-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: new es translation
+
+2003-01-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/es.po: new spanish translation
+
+2002-12-19 John Millaway <john43@users.sourceforge.net>
+
+ * gen.c: Fixed bug where YY_G(0) sometimes occurs (created by my
+ previous commit.)
+
+2002-12-17 John Millaway <john43@users.sourceforge.net>
+
+ * gen.c: Fixed bug submitted by Bojan Smojver <bojan@rexursive.com>
+ where the use of yylineno, reentrant, and yymore together caused a
+ compile-time error.
+
+2002-12-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: update NEWS
+
+2002-12-17 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Documented new behavior with character ranges.
+
+2002-12-16 John Millaway <john43@users.sourceforge.net>
+
+ * parse.y: Fixed bug submitted by Bruce Lilly <blilly@erols.com>
+ where character ranges would yield unexpected behavior in a caseless
+ scanner. Also, flex now emits a warning if the range looks like
+ trouble.
+
+2002-12-16 John Millaway <john43@users.sourceforge.net>
+
+ * ccl.c, flexdef.h: Added utility functions to deal with character
+ case.
+
+2002-12-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexint.h: we don't really need int64 anyway
+
+2002-12-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: apparently some lints are happier with fllthrough
+ without a space
+
+2002-12-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.25
+
+2002-12-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: enclose flex.1 target in MAINTERNER_MODE
+
+2002-12-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/pt_BR.po: new pt_br translation
+
+2002-12-01 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Indexed some more faqs.
+
+2002-11-29 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Fixed bug in SECOND yyless definition where argument was
+ not enclosed in parentheses.
+
+2002-11-29 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Fixed bug in yyless definition where argument was not
+ enclosed in parentheses.
+
+2002-11-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: flex uses flex_int*_t types
+
+2002-11-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexint.h: integer types for non-C99 systems flexint.h
+
+2002-11-27 John Millaway <john43@users.sourceforge.net>
+
+ * dfa.c, flexint.h, gen.c, tables.c, tables.h, tables_shared.c,
+ tables_shared.h: Changed int types to flex_intX_t. The build is now
+ broken until typedef's are established.
+
+2002-11-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: MAINTAINERCLEANFILES: new variable: try to make it so
+ that make maintainer-clean erases everything not under version
+ control
+
+2002-11-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * config.rpath: remove config.rpath
+
+2002-11-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * README-alpha: just list location of betas
+
+2002-11-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexint.h: __STDC_VERSION__ needs an L suffix
+
+2002-11-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/LINGUAS, po/pt_BR.po: new pt_br translation from the
+ translation project
+
+2002-11-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexint.h: include inttypes.h for folks who really are C99
+
+2002-11-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: fix a typo
+
+2002-11-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.24
+
+2002-11-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: try to make sure we have GNU m4
+
+2002-11-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-c++-multiple-scanners/Makefile.am: include
+ tests/test-c++-multipl-scanners/test.input
+
+2002-11-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: more portability fixes
+
+2002-11-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, flexdef.h: apparently on some BSD systems, we need
+ sys/params.h; reported by millaway
+
+2002-11-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: update NEWS
+
+2002-11-22 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, main.c, tests/test-c++-multiple-scanners/Makefile.am:
+ Fixed prefix of yyalloc,yyfree,yyrealloc in C++ scanner. Removed
+ yylex_destroy from C++ scanner.
+
+2002-11-22 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: renamed some faqs.
+
+2002-11-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * AUTHORS: update wording about authorship
+
+2002-11-17 John Millaway <john43@users.sourceforge.net>
+
+ * parse.y: Removed space before line num in error messages to look
+ more like gcc's errors.
+
+2002-11-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/tr.po: new turkish translation from the translation
+ project
+
+2002-10-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * gen.c: applied c++ from lilypond folks for std:: reasons
+
+2002-10-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: proofreading
+
+2002-10-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: proofreading
+
+2002-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: use c-style header names in c++ for now; at some point
+ we'll have a separate c++ skeleton and we can go whole-hog pure c++
+
+2002-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: c++ rants
+
+2002-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: more proofreading
+
+2002-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: include intent.pro; indent target is MAINTAINER_MODE
+ conditional
+
+2002-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: When we use AC_PATH_PROG, value-if-not-found is the
+ name of the program we wanted to find; this will generate more
+ helpful error messages
+
+2002-10-21 John Millaway <john43@users.sourceforge.net>
+
+ * tables.c: Added a missing function prototype.
+
+2002-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.23
+
+2002-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: update NEWS on recent changes
+
+2002-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexint.h: use sys/types.h and not inttypes.h
+
+2002-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: check for limits.h
+
+2002-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: update TODO on recent suggestions
+
+2002-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: titlepage and contents
+
+2002-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: typo
+
+2002-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, README.cvs-snapshot: include README.cvs-snapshot in
+ the distribution; in README-cvs-snapshot, mention the need for
+ enable-maintainer-mode
+
+2002-10-21 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: typo.
+
+2002-10-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: report the current version info that flex provides;
+ reformat a list of non-posix features
+
+2002-10-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: report the current version info that flex provides
+
+2002-10-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: FLEX_BETA defined if flex is beta
+
+2002-10-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexint.h: if we're doing c++, then we can't use long long
+
+2002-10-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: update TODO on several things
+
+2002-10-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: more proofreading
+
+2002-10-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am,
+ tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am,
+ tests/test-basic-r/Makefile.am, tests/test-bison-nr/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c++-basic/Makefile.am,
+ tests/test-c++-multiple-scanners/Makefile.am,
+ tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am,
+ tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am,
+ tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am,
+ tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-posix/Makefile.am,
+ tests/test-posixly-correct/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-reject/Makefile.am,
+ tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am,
+ tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am:
+ remove BISON assignment as per suggestion from Akim Demaille
+
+2002-10-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in: remove intl from dist
+
+2002-10-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: we use maintainer mode now
+
+2002-10-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: include create-test
+
+2002-10-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.am: rename test to check-local as per Akim
+ Demaille; test for failed tests so that make check fails if any
+ tests do
+
+2002-10-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.am: use dist_noinst_scripts as per email from Akim
+ Demaille
+
+2002-10-10 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Documentation.
+
+2002-10-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.22; portability fixes and attn to
+ the test suite
+
+2002-10-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexint.h: ok, this seems to work
+
+2002-10-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am, tests/test-bison-nr/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am: use builddir in tests
+ that need it in their include path
+
+2002-10-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am: sometimes we put header files in the
+ builddir and so we should account for that
+
+2002-10-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am: replace the last instance
+
+2002-10-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: include unistd.h and not cunistd as cunistd only seems
+ to be present on very recent systems
+
+2002-10-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in, flex.skl, flexdef.h, flexint.h: redo
+ integral types again; add flexint.h; change dependencies caused by
+ adding flexint.h; remove autoconf wrapper around cunistd; restore
+ netinet/in.h includes; remove unneded feature checks in configure.in
+
+2002-10-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, flex.skl, flexdef.h: current swipe at header magic;
+ int types be damned
+
+2002-10-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: change version constant info to reflect change to flex.skl
+
+2002-10-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: remove README-alpha option; add definitions for
+ FLEX_{MAJOR,MINOR,SUBMINOR}_VERSION
+
+2002-10-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, flexdef.h: ok, here goes; try to handle integral
+ typedefs in one swell foop
+
+2002-10-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: we check for {u,}int*_t types; maybe this will
+ simplify things
+
+2002-10-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: we create the tests/TEMPLATE/Makefile so that we can
+ build the dist archives
+
+2002-10-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: more test suite cleanups
+
+2002-10-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-c++-multiple-scanners/Makefile.am: we don't use header
+ files...
+
+2002-10-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexdef.h: remove include of malloc.h
+
+2002-10-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: more editing; remove examples index; merge examples
+ into concept index
+
+2002-10-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: edited one more faq; used C-u C-c C-u C-a to update
+ menus and nodes since the other updating commands are somewhat
+ broken; unfortunately this means that all nodes have all pointers
+ filled in
+
+2002-10-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: yesterday's proofreading
+
+2002-10-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: proofread some more
+
+2002-10-02 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: proofread edit begins
+
+2002-10-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, tests/Makefile.am,
+ tests/test-c++-multiple-scanners/.cvsignore,
+ tests/test-c++-multiple-scanners/Makefile.am,
+ tests/test-c++-multiple-scanners/main.cpp,
+ tests/test-c++-multiple-scanners/scanner-1.l,
+ tests/test-c++-multiple-scanners/scanner-2.l,
+ tests/test-c++-multiple-scanners/test.input: test c++ with multiple
+ scanners
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am,
+ tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am,
+ tests/test-bison-nr/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c++-basic/Makefile.am, tests/test-c-cpp-nr/Makefile.am,
+ tests/test-c-cpp-r/Makefile.am, tests/test-debug-nr/Makefile.am,
+ tests/test-debug-r/Makefile.am, tests/test-header-nr/Makefile.am,
+ tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am,
+ tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-posix/Makefile.am,
+ tests/test-posixly-correct/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-reject/Makefile.am,
+ tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am,
+ tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am:
+ we used INCLUDES in another place in the Makefile.am files in the
+ test suite
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am,
+ tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am,
+ tests/test-bison-nr/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c++-basic/Makefile.am, tests/test-c-cpp-nr/Makefile.am,
+ tests/test-c-cpp-r/Makefile.am, tests/test-debug-nr/Makefile.am,
+ tests/test-debug-r/Makefile.am, tests/test-header-nr/Makefile.am,
+ tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am,
+ tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-posix/Makefile.am,
+ tests/test-posixly-correct/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-reject/Makefile.am,
+ tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am,
+ tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am:
+ oops, I typed that last s/// command to perl way wrong
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am,
+ tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am,
+ tests/test-basic-r/Makefile.am, tests/test-bison-nr/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c++-basic/Makefile.am, tests/test-c-cpp-nr/Makefile.am,
+ tests/test-c-cpp-r/Makefile.am, tests/test-debug-nr/Makefile.am,
+ tests/test-debug-r/Makefile.am, tests/test-header-nr/Makefile.am,
+ tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am,
+ tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-posix/Makefile.am,
+ tests/test-posixly-correct/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-reject/Makefile.am,
+ tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am,
+ tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am:
+ use AM_CPPFLAGS instead of INCLUDES; write -I with no space after it
+ for broken compilers
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: INCLUDES is obsolete; use AM_CPPFLAGS instead
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: apparently, AM_CONFIG_HEADER is obsolete
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: integrate test suite into automake
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: since we dont run the template test, we dont need to
+ generate its Makefile either
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: use autoreconf instead of calling individual utilities
+ separately
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: check for c++ compiler
+
+2002-09-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: re-organize according to suggested layout in
+ autoconf manual
+
+2002-09-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, NEWS, configure.in: update automake to 1.7 and
+ autoconf to 2.54
+
+2002-09-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: use AM_YFLAGS since YFLAGS is a user variable
+
+2002-09-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: catch NEWS up on things, some of which happened a long time
+ ago; correct punctuation; try to remove some editorializing
+
+2002-09-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, flex.skl, flex.texi: include a single, automatically
+ generated version number in flex scanners
+
+2002-09-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/create-test: complain audibly when argument not supplied;
+ echo on stderr when writing error messages
+
+2002-09-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.am, tests/create-test: DIST_SUBDIRS so we don't
+ have to run the TEMPLATE test; so we add new tests to SUBDIRS and
+ DIST_SUBDIRS
+
+2002-09-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am: not all compilers support '-I dir' so
+ we write '-Idir' instead
+
+2002-09-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: reorganize faq entries; proofread the manual
+
+2002-09-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: move c++ experimental warning to top of cxx node
+
+2002-09-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: move stdint.h include to table-serialization section;
+ we'll still need to think about stdint.h more though
+
+2002-09-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: new smarter skeleton/scanner generation
+
+2002-09-20 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, misc.c: bison-bridge skel handled via %if/%endif pairs.
+
+2002-09-19 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, misc.c: reentrant skel handled via %if/%endif pairs.
+
+2002-09-19 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, misc.c: skeleton uses %push/%pop to keep skelout() scope
+ sane. skel commands are omitted unless --debug enabled.
+
+2002-09-19 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, main.c, misc.c, tables.h: Added %push and %pop
+ operations to skel processing.
+
+2002-09-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: flex 2.5.21
+
+2002-09-17 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-reject/Makefile.am: minor fixup for dist.
+
+2002-09-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.20
+
+2002-09-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: correct typo
+
+2002-09-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: note the new tables functionality
+
+2002-09-16 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-multiple-scanners-r/.cvsignore,
+ tests/test-multiple-scanners-r/Makefile.am: Fixed `clean' target and
+ .cvsignore.
+
+2002-09-16 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, flex.skl, flex.texi, main.c, tables_shared.h,
+ tests/test-multiple-scanners-r/main.c,
+ tests/test-multiple-scanners-r/scanner-1.l,
+ tests/test-multiple-scanners-r/scanner-2.l: Serialization works in
+ headers (%option headers). Serialization code (Tables API) is
+ complete.
+
+2002-09-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-reject/scanner.l: replace yytables_load with
+ yytables_fload as per millaway's other changes
+
+2002-09-15 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, flex.texi: Created user API for tables deserialization.
+ Documented API and --tables-* options in manual.
+
+2002-09-15 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, tests/test-table-opts/scanner.l: Tables deserialization
+ uses yyalloc/yyfree. Changed yytables_load to yytables_fload.
+
+2002-09-15 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-bison-nr/.cvsignore: minor upkeep.
+
+2002-09-15 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Categorized and indexed scanner options in manual.
+
+2002-09-15 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Initialization of reject vars and %array vars in
+ reentrant scanner.
+
+2002-09-13 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, configure.in, devel/tables.pl, dfa.c, flex.skl, flex.texi,
+ gen.c, tables.c, tables_shared.c, tables_shared.h,
+ tests/Makefile.am, tests/test-reject/.cvsignore,
+ tests/test-reject/Makefile.am, tests/test-reject/scanner.l,
+ tests/test-reject/test.input, tests/test-table-opts/Makefile.am:
+ Created test for reject. Handled reject-triggered tables in
+ serialization.
+
+2002-09-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: millaway has been very busy
+
+2002-09-13 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, tests/test-table-opts/Makefile.am,
+ tests/test-table-opts/scanner.l: Added test for multiple tables in
+ one file.
+
+2002-09-13 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-bison-nr/.cvsignore: forgot to add .cvsignore on last
+ commit.
+
+2002-09-13 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-bison-nr/Makefile.am, tests/test-bison-nr/main.c,
+ tests/test-bison-nr/parser.y, tests/test-bison-nr/scanner.l,
+ tests/test-bison-nr/test.input: Added test-bison-bridge.
+
+2002-09-13 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, flex.skl, flex.texi, flexdef.h, gen.c, main.c,
+ misc.c, options.c, options.h, scan.l, tables.h, tests/Makefile.am,
+ tests/descriptions, tests/test-bison-yylloc/scanner.l,
+ tests/test-bison-yylval/scanner.l, tests/test-table-opts/scanner.l:
+ Bison bridge code now works for all C scanners and pure/non-pure
+ bison parsers. Added %option bison-bridge (--bison-bridge).
+ Removed %option reentrant-bison/--reentrant-bison/-Rb. Scanner
+ knows the name of its tables. Tables serialization is OK on EOF.
+ yylineno is present in all scanners. Modified nasty performance
+ penalty warning w/ yylineno. test-table-opts is now run last
+ because it's so fat. Updated manual.
+
+2002-09-12 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: documentation of tabels api in manual
+
+2002-09-12 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, tables.c: Renamed *_fwrite to *_write to reflect writer
+ abstraction.
+
+2002-09-11 John Millaway <john43@users.sourceforge.net>
+
+ * devel/tables.pl: Added perl script to read/dump serialized tables
+ in devel/
+
+2002-09-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: the debian patch used strlen(yytext) and similar
+ constructs--as millaway points out, this is better known as yyleng
+
+2002-09-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/de.po: new de translation from the translation project
+
+2002-09-11 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: yytbl_load now checks tables set by name. Localized var
+ scaope in yytbl_load.
+
+2002-09-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.am: make clean before make test
+
+2002-09-09 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, flex.skl: Fixed deserialization of --fast tables.
+
+2002-09-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: fix typo; remove the yylineo entry
+
+2002-09-09 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, buf.c, devel/dump-tables.pl, dfa.c, flex.skl, flexdef.h,
+ gen.c, main.c, misc.c, options.c, options.h, scan.l, tables.c,
+ tables.h, tables_shared.h, tests/test-table-opts/.cvsignore,
+ tests/test-table-opts/Makefile.am, tests/test-table-opts/scanner.l:
+ Table deserialization works for everything except --fast scanners.
+ Scanners can auto-verify serialized table integrity via
+ --tables-verify. Added tables API items to TODO list.
+ test-table-opts is becoming exhaustive (a good thing).
+
+2002-09-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: flex has better internal diagnostics
+
+2002-09-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, flexdef.h: test for presence of __func__ and
+ compensate if absent
+
+2002-09-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: include the intl/ subdirectory when searching for
+ include files
+
+2002-09-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/ru.po, po/sv.po: new sv, ru translations from the
+ translation project
+
+2002-09-07 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, misc.c: Changed cryptic skeleton markers to readable
+ form.
+
+2002-09-07 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, dfa.c, flex.skl, flex.texi, flexdef.h, gen.c,
+ main.c, misc.c, parse.y, tables.c, tables.h, tables_shared.c,
+ tables_shared.h: Members of struct yy_trans_info are now forced to
+ be the same size. Added shared file tables_shared.c. Separated
+ tables.h from flexdef.h Bulk of table deserialization code is done.
+
+2002-09-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/ca.po: new ca translation
+
+2002-09-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: new fr translation
+
+2002-09-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/fr.po: new french translation from the translation project
+
+2002-09-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: c99 function defs by default
+
+2002-09-05 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, tables.c: Added flex_die macro. May need some autoconf
+ massaging. Added thorough error checking in tables code.
+
+2002-09-05 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flex.texi: Flex generates C99 defs now. Documented the
+ above change in manual.
+
+2002-09-05 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-table-opts/.cvsignore,
+ tests/test-table-opts/Makefile.am: Added serialization test to
+ table-opts test.
+
+2002-09-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: oops, i made a typo
+
+2002-09-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.19
+
+2002-09-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: use FLEX_EXIT(), not exit()
+
+2002-09-05 John Millaway <john43@users.sourceforge.net>
+
+ * devel/00EXTRACT-ALL-SYMS.sh, devel/README, devel/dump-tables.pl:
+ Added devel/ directory for junk that we don't want in the
+ distribution, but that we want in CVS.
+
+2002-09-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: s/exit(1)/exit(EXIT_FAILURE)
+
+2002-09-05 John Millaway <john43@users.sourceforge.net>
+
+ * dfa.c, gen.c: Tables are now generated with %option
+ tables-file=FILE.
+
+2002-09-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: catch up on a few things
+
+2002-09-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: prevent segfault on input lines which are longer than the
+ allocated space (problem report from Manoj Srivastava
+ <srivasta@golden-gryphon.com>)
+
+2002-09-05 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi, main.c, options.c, options.h: Changed option 'header'
+ to 'header-file'. 'header' still works, though.
+
+2002-09-05 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi, flexdef.h, gen.c, main.c, options.c, options.h,
+ scan.l, tables.c: Tons more work on tables.
+
+2002-09-05 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, gen.c, tables.c, tables_shared.h: Lots of work on
+ tables serialization code.
+
+2002-09-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * README.cvs-snapshot: mention GNU indent
+
+2002-09-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: remove the word after from the version line
+
+2002-09-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.18
+
+2002-09-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: catch up on the NEWS
+
+2002-09-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.am: target test: quote the results echoing so that
+ the ECHO_C will work on systems where it is used
+
+2002-09-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: when we don't have GNU indent, the test will
+ generate output on stderr, so we send that to /dev/null
+
+2002-09-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: fixed bug whereby bison was reported missing even
+ when it was found
+
+2002-09-02 John Millaway <john43@users.sourceforge.net>
+
+ * tables.c: In-code documentation.
+
+2002-09-02 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h: Forgot to indent before previous commit.
+
+2002-09-02 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h: Added known integer limits if undefined.
+
+2002-08-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: version 2.5.17
+
+2002-08-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: more portability fixes; new version number
+
+2002-08-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexdef.h, main.c, misc.c, scanopt.c: #include fixes; we've
+ factored out all the system include files and put them in flexdef.h
+
+2002-08-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * dfa.c: eat a blank line
+
+2002-08-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: new config.{sub,guess} files; mention that we use indent on
+ flex
+
+2002-08-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: warn if no indent found; version 2.5.16
+
+2002-08-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: catch up on recent changes; version 2.5.16
+
+2002-08-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * buf.c, ccl.c, dfa.c, ecs.c, flexdef.h, gen.c, libmain.c,
+ libyywrap.c, main.c, misc.c, nfa.c, options.c, options.h,
+ scanopt.c, scanopt.h, sym.c, tables.c, tables_shared.h, tblcmp.c,
+ yylex.c: ran the indent target; commit the results
+
+2002-08-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: touch up the indent targeet; it's ready for
+ production use now
+
+2002-08-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: test for GNU indent; reorder the tests somewhat
+
+2002-08-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: automake is smarter about autoconf's versioning
+ scheme
+
+2002-08-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: catch NEWS up on what we've been doing
+
+2002-08-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * flexdef.h: do some more conditional including for folks without
+ standard systems
+
+2002-08-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-c++-basic/Makefile.am: use CXX to link the test scanner
+ here
+
+2002-08-22 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Documentation.
+
+2002-08-22 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: Created 'indent' target and added .indent.pro.
+
+2002-08-22 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am,
+ tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am,
+ tests/test-c-cpp-nr/Makefile.am: Fixed missing 'make clean' files.
+
+2002-08-22 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am: fixed missing 'clean' file.
+
+2002-08-22 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, tests/test-c++-basic/Makefile.am,
+ tests/test-c++-basic/scanner.l: Removed core of yylex_destroy from
+ c++ scanner -- hack! Added -lstdc++ to LDFLAGS (should we have to do
+ this??)
+
+2002-08-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: official releases are being hosted by Vern
+
+2002-08-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: new beta version; more entries in NEWS from
+ millaway; the top level entry for test-c++-basic
+
+2002-08-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.am, tests/test-c++-basic/.cvsignore,
+ tests/test-c++-basic/Makefile.am, tests/test-c++-basic/scanner.l,
+ tests/test-c++-basic/test.input: add test-c++-basic
+
+2002-08-21 John Millaway <john43@users.sourceforge.net>
+
+ * gen.c, nfa.c: More tabels work.
+
+2002-08-21 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, gen.c, tables.c, tables_shared.h: More work on tables.
+
+2002-08-20 John Millaway <john43@users.sourceforge.net>
+
+ * dfa.c: Cleaned up macros that took no ';'.
+
+2002-08-20 John Millaway <john43@users.sourceforge.net>
+
+ * scanopt.c: Fixed oddball '=-'.
+
+2002-08-20 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flex.texi, gen.c: Dynamically allocate REJECT state
+ buffer. Mentioned memory usage in docs. Made REJECT buffer
+ variables reentrant-safe.
+
+2002-08-20 John Millaway <john43@users.sourceforge.net>
+
+ * tables.c: More work on tables code.
+
+2002-08-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, NEWS, configure.in: we're using m4 so have configure
+ test for it
+
+2002-08-20 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, tables.c: Added tables.c and rebuilt dependencies.
+
+2002-08-20 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, flex.texi: Dicussed prototypes and header in manual.
+
+2002-08-19 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, configure.in, flex.skl, flexdef.h, tables_shared.h:
+ More work on tables serialization.
+
+2002-08-19 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, mkskel.sh: Skeleton is now passed through m4 (before
+ dist is built).
+
+2002-08-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/LINGUAS, po/zh_CN.po: add zh_cn translation from the
+ translation project
+
+2002-08-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: millaway's done a lot of things which need to be mentioned
+ in NEWS
+
+2002-08-18 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Removed #undef of start conditions.
+
+2002-08-17 John Millaway <john43@users.sourceforge.net>
+
+ * TODO: todo list
+
+2002-08-17 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, main.c, misc.c: Start conditions now optional in
+ header. undef's now optional in header. Start conditions are NOT
+ prefixed.
+
+2002-08-17 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flex.texi: Working on tables API.
+
+2002-08-16 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, main.c, misc.c, options.c, options.h, parse.y, scan.l:
+ Added --tables option. Omitted tables code from generated scanner
+ when unused.
+
+2002-08-16 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flex.texi, misc.c: Prelimary work on tables API.
+
+2002-08-16 John Millaway <john43@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am,
+ tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am,
+ tests/test-basic-r/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am,
+ tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am,
+ tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am,
+ tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-posix/Makefile.am,
+ tests/test-posixly-correct/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-string-nr/Makefile.am,
+ tests/test-string-r/Makefile.am, tests/test-table-opts/Makefile.am,
+ tests/test-yyextra/Makefile.am: Tests now respect CFLAGS, CPPFLAGS,
+ etc..
+
+2002-08-16 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-basic-nr/scanner.l, tests/test-basic-r/scanner.l,
+ tests/test-lineno-nr/scanner.l, tests/test-lineno-r/scanner.l: Got
+ rid of flex -s warnings in tests.
+
+2002-08-16 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: Updated dependencies list.
+
+2002-08-15 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Fixed seg fault bug in ecs.
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-c-cpp-nr/.cvsignore, tests/test-c-cpp-r/.cvsignore:
+ ignore .cpp files since we generate them instead of .c
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: version 2.5.14
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: c-as-c++ tests reworked
+
+2002-08-15 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-nr/scanner.l,
+ tests/test-c-cpp-r/Makefile.am, tests/test-c-cpp-r/scanner.l: The
+ c++ tests use .cpp instead of .c extensions just to be on the safe
+ side.
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: conditionally include <locale.h>; include config.h as well
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, flex.skl: only include <cunistd> if we have it
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: portability fixes; added missing punctuation; de translation
+ now included
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/LINGUAS: we also translate to german
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: require automake at least 1.6
+
+2002-08-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.13
+
+2002-08-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: reverted away from the @copying as it breaks the info
+ reader
+
+2002-08-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi, flexdef.h, main.c, misc.c: Start condition prefixes
+ attempts to adjust to user preferences.
+
+2002-08-13 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Include start condition symbols in header.
+
+2002-08-13 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, main.c: Omit user code and tables from generated header
+ file.
+
+2002-08-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: use @copying construct to display the flex license;
+ move copying and bug reporting to the front of the manual
+
+2002-08-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: printf fix and yylex_init reports errors
+
+2002-08-12 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Updated manual for %option header.
+
+2002-08-12 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flex.texi, gen.c: Fixed type mismatch in printf.
+ yylex_init now reports errors.
+
+2002-08-10 John Millaway <john43@users.sourceforge.net>
+
+ * dfa.c, main.c: Added alignment flag for future use.
+
+2002-08-10 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-table-opts/.cvsignore,
+ tests/test-table-opts/Makefile.am: Added options to test-table-opts
+
+2002-08-10 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, tests/Makefile.am, tests/descriptions,
+ tests/test-c-cpp-nr/Makefile.am, tests/test-table-opts/.cvsignore,
+ tests/test-table-opts/Makefile.am, tests/test-table-opts/scanner.l,
+ tests/test-table-opts/test.input: Added a test for various DFA table
+ options.
+
+2002-08-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: more faq editing; corrected mistyped nodenames
+
+2002-08-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: fix typo which propogates out to generated scanners
+
+2002-08-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: edited a few more faqs
+
+2002-08-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, faq.texi: remove faq.texi as it's included in
+ flex.texi
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: a few more faq edits; remove faq-89
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: cite, not site
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: and get the faq included
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: fix some grammer/typography in the top node and add a
+ detailed menu
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: we've updated gettext
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/.cvsignore: we need to ignore a few more gettext files
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.12
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: mention gettext; document the non-need for bison/flex in the
+ build process
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in: include intl in the distribution and in
+ the build process
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: builddir in help2man call needed @-signs around it
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/.cvsignore: we can ignore Makefile.in.in
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * m4/.cvsignore, m4/Makefile.am: oops, too hasty on deleting this
+ directory, sigh
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: if autopoint is going to run automatically, it's going
+ to need to be able to update existing files
+
+2002-08-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * ABOUT-NLS, autogen.sh, configure.in, m4/.cvsignore,
+ m4/Makefile.am, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4,
+ m4/iconv.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-ld.m4,
+ m4/lib-link.m4, m4/lib-prefix.m4, m4/progtest.m4: autopoint now
+ works so let's let it run the gettext show
+
+2002-08-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: we need to index the faq entries
+
+2002-08-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * faq.texi: proofed "Why do flex scanners call fileno if it is not
+ ANSI compatible?"
+
+2002-08-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * faq.texi: proofed "How do I expand \ escape sequences in C-style
+ quoted strings?"
+
+2002-08-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: changes to README to align with GNU coding standards
+
+2002-08-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: help2man should look in builddir for the flex binary
+
+2002-08-02 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Fixed yyunput prototype.
+
+2002-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: new fr translation from the translation project
+
+2002-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/fr.po: new fr.po translation from the translation project
+
+2002-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: yylineno performance hit is fixed
+
+2002-07-31 John Millaway <john43@users.sourceforge.net>
+
+ * TODO, flex.texi: Updated docs on yylineno.
+
+2002-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: discuss yylineno performance
+
+2002-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: forgot to say what the date was that we made the release
+
+2002-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: version 2.5.11
+
+2002-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * faq.texi: fixed a menu entry and related problems
+
+2002-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: someday, maybe we can use autopoint
+
+2002-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: we need to include texinfo.tex now
+
+2002-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * texinfo.tex: add texinfo.tex
+
+2002-07-30 Will Estes <wlestes@users.sourceforge.net>
+
+ * faq.texi: fix up some fatal bugs in the texinfo of the faq; begin
+ the clean up; remove trailing and leading white space
+
+2002-07-30 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: faqs need work
+
+2002-07-30 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, TODO: prototypes get airtime these days
+
+2002-07-28 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Added some comments.
+
+2002-07-28 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Fixed bug where yyless did not consider yylineno.
+
+2002-07-28 John Millaway <john43@users.sourceforge.net>
+
+ * scan.l: Fixed bug I created in previous commit.
+
+2002-07-28 John Millaway <john43@users.sourceforge.net>
+
+ * scan.l: Don't wrap ()s around {NAMEDEFS} at the end of a rule.
+
+2002-07-27 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, tests/test-c-cpp-nr/Makefile.am,
+ tests/test-c-cpp-r/Makefile.am: Fixed test-c-cpp to actually use the
+ C++ compiler for the test. Fixed the bug that this exposed.
+
+2002-07-27 John Millaway <john43@users.sourceforge.net>
+
+ * ccl.c, flex.skl, flexdef.h, gen.c, main.c, nfa.c, parse.y, scan.l:
+ yylineno check is only performed on rules whose regexs can match a
+ newline.
+
+2002-07-25 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, tests/TEMPLATE/scanner.l,
+ tests/test-array-nr/scanner.l, tests/test-array-r/scanner.l,
+ tests/test-basic-nr/scanner.l, tests/test-basic-r/scanner.l,
+ tests/test-bison-yylloc/parser.y, tests/test-c-cpp-nr/scanner.l,
+ tests/test-c-cpp-r/scanner.l, tests/test-debug-nr/scanner.l,
+ tests/test-debug-r/scanner.l,
+ tests/test-include-by-buffer/scanner.l,
+ tests/test-include-by-reentrant/scanner.l,
+ tests/test-lineno-nr/scanner.l, tests/test-lineno-r/scanner.l,
+ tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l,
+ tests/test-posix/scanner.l, tests/test-posixly-correct/scanner.l,
+ tests/test-prefix-nr/scanner.l, tests/test-prefix-r/scanner.l,
+ tests/test-pthread/scanner.l, tests/test-string-nr/scanner.l,
+ tests/test-string-r/scanner.l, tests/test-yyextra/scanner.l: All
+ prototypes were rewritten to depend upon the macro
+ YY_TRADITIONAL_FUNC_DEFS, which is defined by default. The
+ generated scanners build cleanly under gcc's traditional strictness
+ and under C++ compilers.
+
+2002-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: dist-bzip2 and rename yy_globals and yy_globals_t
+
+2002-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: version 2.5.10
+
+2002-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: add dist-bzip2 to automake_options so we'll start
+ getting tar.bz2 archives
+
+2002-07-23 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flex.texi, tests/test-bison-yylval/scanner.l,
+ tests/test-mem-r/scanner.l,
+ tests/test-multiple-scanners-r/scanner-1.l,
+ tests/test-multiple-scanners-r/scanner-2.l,
+ tests/test-prefix-r/scanner.l, tests/test-pthread/scanner.l,
+ tests/test-yyextra/scanner.l: s/yy_globals_t/yyguts_t/g
+ s/yy_globals/yyscanner/g
+
+2002-07-23 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: typo in tags target
+
+2002-07-22 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: Removed erroneous $(srcdir) from help2man target.
+
+2002-07-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, configure.in: it's version 2.5.9 now
+
+2002-07-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/.cvsignore: updated gettext to 0.11.3
+
+2002-07-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * ABOUT-NLS, config.rpath, m4/gettext.m4, m4/iconv.m4,
+ m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-link.m4: updated gettext to
+ version 0.11.3
+
+2002-07-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh, configure.in: rollback on configure.in and autogen.sh
+ because autpoint is broken
+
+2002-07-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ru.po: new russian translation from translation project
+
+2002-07-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: ok, we're going to start using autopoint, but the tree
+ is going to undergo some changes after this
+
+2002-07-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: we're preparing for autopoint
+
+2002-07-17 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Updated manual.
+
+2002-07-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: update the NEWS file for lots of things millaway has done
+
+2002-07-17 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, main.c, misc.c, scan.l, scanopt.c, sym.c,
+ tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l: Fixed
+ prototype/definition conflicts with "traditional" C in skeleton at
+ request of gcc developer. Removed duplicate prototypes in gen.c,
+ sym.c, main.c. Added missing prototypes where needed. All
+ functions in skeleton follow ISO C style protos and defs, instead of
+ BOTH ISO and new-style. Skeleton now compiles cleanly under
+ super-strict gcc flags. Flex itself almost compiles cleanly under
+ strict flags.
+
+2002-07-15 John Millaway <john43@users.sourceforge.net>
+
+ * faq.texi, flex.texi: Worked on mem mgmt sect of manual.
+
+2002-07-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: allow blank lines and continuations in more places
+
+2002-07-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: millaway finished the faqs directory
+
+2002-07-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: removed items as per email from millaway
+
+2002-07-12 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, tests/Makefile.am, tests/descriptions,
+ tests/test-posix/.cvsignore, tests/test-posix/Makefile.am,
+ tests/test-posix/scanner.l, tests/test-posixly-correct/.cvsignore,
+ tests/test-posixly-correct/Makefile.am,
+ tests/test-posixly-correct/scanner.l: Added test for %option
+ posix-compat and repeat operator. Added test for POSIXLY_CORRECT
+ environment variable and repeat operator.
+
+2002-07-12 John Millaway <john43@users.sourceforge.net>
+
+ * main.c, scan.l: Fixed POSIXLY_CORRECT detection in scanner.
+
+2002-07-11 John Millaway <john43@users.sourceforge.net>
+
+ * faq.texi: More work on faq.
+
+2002-07-11 John Millaway <john43@users.sourceforge.net>
+
+ * faq.texi: Moved all faqs into manual -- but did not evaluate them
+ yet. Removed the old faq files.
+
+2002-07-10 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Removed duplicate definition of FLEX_DEBUG. gcc doesn't
+ care, but other compilers might.
+
+2002-07-10 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Wrote some more about memory mgmt in the manual.
+
+2002-07-10 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: flex.texi now works with install-info.
+
+2002-07-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: added items as per email from millaway
+
+2002-07-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: after we release a version, we have to keep the version
+ number in NEWS current
+
+2002-07-10 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flex.texi, main.c, scan.l, tests/test-mem-nr/scanner.l,
+ tests/test-mem-r/scanner.l: Fixed prefix issue with get/set debug
+ functions. Fixed prefix issues with memory functions.
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Memory functions are no longer static.
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-mem-nr/test.input: Added a missing input file for
+ test-mem-nr/
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-mem-nr/.cvsignore, tests/test-mem-nr/Makefile.am,
+ tests/test-mem-nr/scanner.l, tests/test-mem-r/.cvsignore,
+ tests/test-mem-r/Makefile.am, tests/test-mem-r/scanner.l,
+ tests/test-mem-r/test.input: Added tests for overriding memory.
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Added sections in manual for memory management.
+
+2002-07-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: noted more user visible changes
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, flex.skl, scan.l, tests/Makefile.am: Added
+ yylex_destroy() to non-reentrant scanner. Added ability to override
+ memory functions. Added tests for overriding memory functions.
+
+2002-07-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: new POSIXLY_CORRECT and new ru translation
+
+2002-07-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ru.po: new ru translation from the translation project
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Made note of set/get debug in docs.
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, flexdef.h, tests/create-test: Replaced obsolete
+ macros in configure.in. Modified create-test to handle the above
+ changes in configure.in. Added support for <stdbool.h>.
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Check POSIXLY_CORRECT env variable.
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Added prototypes for the get/set debug functions.
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in, flex.skl, gen.c, main.c, scan.l, tests/Makefile.am,
+ tests/test-debug-nr/.cvsignore, tests/test-debug-nr/Makefile.am,
+ tests/test-debug-nr/scanner.l, tests/test-debug-nr/test.input,
+ tests/test-debug-r/.cvsignore, tests/test-debug-r/Makefile.am,
+ tests/test-debug-r/scanner.l, tests/test-debug-r/test.input: Made
+ yy_flex_debug non-global in reentrant scanner. Created get/set
+ functions for yy_flex_debug. Defined prefixes for new yy_flex_debug
+ symbols. Added tests/ for yy_flex_debug.
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * tests/create-test: create-test script now modifies .cvsignore
+
+2002-07-09 John Millaway <john43@users.sourceforge.net>
+
+ * tests/create-test: Improved the error checking.
+
+2002-07-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: fix bug whereby prefix didn't get passed to everybody;
+ patch by rse@engelschall.com
+
+2002-07-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * faq.texi: ~ is an active character, so we'll just use the word
+ 'about'
+
+2002-07-02 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: Fixed typo.
+
+2002-07-02 John Millaway <john43@users.sourceforge.net>
+
+ * faq.texi: Added a faq.
+
+2002-06-28 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: Added 'tags' target -- something I should have done
+ long ago.
+
+2002-06-28 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: add two new items regarding coding; remove tests/ copyright
+ notice item as it's done
+
+2002-06-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: note the copyright messages in tests/
+
+2002-06-25 John Millaway <john43@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am, tests/TEMPLATE/parser.y,
+ tests/TEMPLATE/scanner.l, tests/test-array-nr/Makefile.am,
+ tests/test-array-nr/scanner.l, tests/test-array-r/Makefile.am,
+ tests/test-array-r/scanner.l, tests/test-basic-nr/Makefile.am,
+ tests/test-basic-nr/scanner.l, tests/test-basic-r/Makefile.am,
+ tests/test-basic-r/scanner.l, tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylloc/main.c, tests/test-bison-yylloc/parser.y,
+ tests/test-bison-yylloc/scanner.l,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-bison-yylval/main.c, tests/test-bison-yylval/parser.y,
+ tests/test-bison-yylval/scanner.l, tests/test-c-cpp-nr/Makefile.am,
+ tests/test-c-cpp-nr/scanner.l, tests/test-c-cpp-r/Makefile.am,
+ tests/test-c-cpp-r/scanner.l, tests/test-header-nr/Makefile.am,
+ tests/test-header-nr/main.c, tests/test-header-nr/scanner.l,
+ tests/test-header-r/Makefile.am, tests/test-header-r/main.c,
+ tests/test-header-r/scanner.l,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-buffer/scanner.l,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-include-by-reentrant/scanner.l,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-nr/scanner.l,
+ tests/test-lineno-r/Makefile.am, tests/test-lineno-r/scanner.l,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-nr/main.c,
+ tests/test-multiple-scanners-nr/scanner-1.l,
+ tests/test-multiple-scanners-nr/scanner-2.l,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-multiple-scanners-r/main.c,
+ tests/test-multiple-scanners-r/scanner-1.l,
+ tests/test-multiple-scanners-r/scanner-2.l,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-nr/scanner.l,
+ tests/test-prefix-r/Makefile.am, tests/test-prefix-r/scanner.l,
+ tests/test-pthread/Makefile.am, tests/test-pthread/scanner.l,
+ tests/test-string-nr/Makefile.am, tests/test-string-nr/scanner.l,
+ tests/test-string-r/Makefile.am, tests/test-string-r/scanner.l,
+ tests/test-yyextra/Makefile.am, tests/test-yyextra/scanner.l:
+ Prepended explicit license to all test-*/ sources.
+
+2002-06-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, po/ca.po, po/de.po, po/fr.po, po/sv.po, po/tr.po: new ca,
+ de, fr, sv, tr translations
+
+2002-06-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: add bootstrapper to the todo list
+
+2002-06-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: new version number
+
+2002-06-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: update TODO list
+
+2002-06-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, TODO, flex.texi, flexdef.h, main.c, options.c, options.h,
+ parse.y, scan.l: address typos in NEWS; add --posix option for ERE
+ parsing the way posix wants it; update the TODO file
+
+2002-05-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * README-alpha: made code quality warning more explicit; gave url
+ for cvs and beta flex
+
+2002-05-23 John Millaway <john43@users.sourceforge.net>
+
+ * gen.c: Fixed bug where omission of user section 3 caused unmatched
+ #ifdef's in generated code.
+
+2002-05-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: configure.in requires at least autoconf 2.50
+
+2002-05-13 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: Updated my email address.
+
+2002-05-10 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, misc.c: chomp'd lines when reading external skel file.
+
+2002-05-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/sv.po: new sweedish translation from the translation project
+
+2002-04-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ca.po: new catalan translation from the translation project
+
+2002-04-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/es.po: new spanish translation from the translation project
+
+2002-04-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: note that the lex matching of abc{1,3} is the posix behavior
+ and so we have a problem
+
+2002-04-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: note that the lex matching of abc{1,3} is the posix
+ behavior
+
+2002-04-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: new version 2.5.7; use autoconf versioning info
+
+2002-04-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: note changes in 2.5.7
+
+2002-04-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: conditional compile gettext initialization
+
+2002-04-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/de.po: new german translation from the translation project
+
+2002-04-19 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-include-by-reentrant/Makefile.am: Fixed command line
+ for test-include-by-reentrant/Makefile.am
+
+2002-04-19 John Millaway <john43@users.sourceforge.net>
+
+ * tests/Makefile.am, tests/TEMPLATE/Makefile.am,
+ tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am,
+ tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am,
+ tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-string-nr/Makefile.am,
+ tests/test-string-r/Makefile.am, tests/test-yyextra/Makefile.am:
+ Added -I . to compiler search path in tests (so it finds the
+ generated parser.h).
+
+2002-04-19 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, misc.c, parse.y, sym.c: Applied 'const' to a few more
+ char*, where appropriate.
+
+2002-04-19 John Millaway <john43@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am,
+ tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am,
+ tests/test-basic-r/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am,
+ tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am,
+ tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-string-nr/Makefile.am,
+ tests/test-string-r/Makefile.am, tests/test-yyextra/Makefile.am:
+ Added top_builddir to -I path. Changed $(srcdir)/$(testname) to
+ ./$(testname) in 'make test' rule.
+
+2002-04-19 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h, gen.c, misc.c: Changed 'char[]' to 'const char*'
+ wherever in conflicted with gettext.
+
+2002-04-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/fr.po, po/sv.po: new files from translation after 2.5.6 beta
+ release
+
+2002-04-18 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-lineno-r/Makefile.am: Fixed minor typo/cut and paste
+ error.
+
+2002-04-18 John Millaway <john43@users.sourceforge.net>
+
+ * configure.in: Added yylineno test.
+
+2002-04-18 John Millaway <john43@users.sourceforge.net>
+
+ * tests/Makefile.am: Added yylineno tests.
+
+2002-04-18 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-lineno-nr/.cvsignore,
+ tests/test-lineno-nr/Makefile.am, tests/test-lineno-nr/scanner.l,
+ tests/test-lineno-nr/test.input, tests/test-lineno-r/.cvsignore,
+ tests/test-lineno-r/Makefile.am, tests/test-lineno-r/scanner.l,
+ tests/test-lineno-r/test.input: Created yylineno tests.
+
+2002-04-15 John Millaway <john43@users.sourceforge.net>
+
+ * scanopt.c: Applied gettext macros to error messages from scanopt.
+
+2002-04-15 John Millaway <john43@users.sourceforge.net>
+
+ * buf.c, faq.texi, options.c, options.h, scanopt.c, scanopt.h:
+ Changed copyright from Millaway to flex? U.S. Gov't? Regents of U.
+ Cali.? Paxson?
+
+2002-04-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-bison-yylloc/Makefile.am,
+ tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am:
+ we missed a few main.c files in the distribution
+
+2002-04-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: a lot more work has happened to flex; note this by removing
+ a number of TODO entries
+
+2002-04-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: make sure all gettext modules use gettext translation
+ facilities
+
+2002-04-14 John Millaway <john43@users.sourceforge.net>
+
+ * faq.texi: Converted faqs 34-41 to texinfo.
+
+2002-04-14 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, faq.texi, flex.texi: Added faq.texi to archive.
+ Added faq.texi to flex_TEXINFOS macro in Makefile.am. flex.texi now
+ includes faq.texi.
+
+2002-04-13 John Millaway <john43@users.sourceforge.net>
+
+ * flexdef.h: defined FLEX_EXIT macro to call longjmp on errors.
+
+2002-04-13 John Millaway <john43@users.sourceforge.net>
+
+ * main.c, misc.c: Replaced exit(2) calls with longjmps (in the form
+ of FLEX_EXIT macro). Moved main() to flex_main() to allow flex to
+ be called from a library.
+
+2002-04-13 John Millaway <john43@users.sourceforge.net>
+
+ * scanopt.c: Fixed minor typo in error message
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-header-nr/Makefile.am,
+ tests/test-header-r/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-pthread/Makefile.am, tests/test-string-nr/Makefile.am,
+ tests/test-string-r/Makefile.am, tests/test-yyextra/Makefile.am:
+ removed eroneous files listed in EXTRA_DIST
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-yyextra/.cvsignore: ignore Makefile.in
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-string-r/.cvsignore: it's Makefile.in, not makefile.in
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-yyextra/Makefile.am, tests/test-yyextra/Makefile.in:
+ put test-yyextra under automake
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-string-r/Makefile.am, tests/test-string-r/Makefile.in:
+ put test-string-r under automake
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-string-nr/.cvsignore, tests/test-string-r/.cvsignore:
+ we can ignore Makefile.in
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-string-nr/Makefile.am,
+ tests/test-string-nr/Makefile.in: put test-string-nr under automake
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-pthread/.cvsignore: ignore Makefile.in
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-pthread/Makefile.am, tests/test-pthread/Makefile.in:
+ put test-pthread under automake
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-prefix-r/Makefile.am, tests/test-prefix-r/Makefile.in:
+ put test-prefix-r under automake
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-prefix-nr/.cvsignore, tests/test-prefix-r/.cvsignore:
+ we can ignore Makefile.in
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-prefix-nr/Makefile.am,
+ tests/test-prefix-nr/Makefile.in: put test-prefix-nr under automake
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-multiple-scanners-r/Makefile.am,
+ tests/test-multiple-scanners-r/Makefile.in: put
+ test-multiple-scanners-r under automake
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-multiple-scanners-nr/.cvsignore,
+ tests/test-multiple-scanners-r/.cvsignore: we can ignore Makefile.in
+ now
+
+2002-04-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-multiple-scanners-nr/Makefile.am,
+ tests/test-multiple-scanners-nr/Makefile.in: put
+ test-multiple-scanners-nr under automake
+
+2002-04-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am:
+ we didn't need parser.y
+
+2002-04-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: work done on the test suite; remove relevant entries from
+ TODO
+
+2002-04-10 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-include-by-reentrant/.cvsignore,
+ tests/test-include-by-reentrant/Makefile.am,
+ tests/test-include-by-reentrant/Makefile.in: put
+ test-include-by-reentrant under automake
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-include-by-buffer/.cvsignore: we have a Makefile.in
+ which we need to ignore
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-include-by-buffer/Makefile.am,
+ tests/test-include-by-buffer/Makefile.in: test-include-by-buffer now
+ under automake control
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am: and we want LFLAGS in the rule to make
+ scanner.c as well
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-header-r/.cvsignore, tests/test-header-r/Makefile.am,
+ tests/test-header-r/Makefile.in: put test-header-r under automake
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-header-nr/.cvsignore: we now generate a Makefile.in
+ from automake; cvs should ignore it
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-header-nr/Makefile.am: add dependencies for main.o and
+ scaner.h
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am: We may want to have LFLAGS readily
+ available
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-header-nr/Makefile.am,
+ tests/test-header-nr/Makefile.in: put test-header-nr under automake
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am: oops, we need to clean objects too
+
+2002-04-09 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am,
+ tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am,
+ tests/test-basic-r/Makefile.am,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylval/Makefile.am,
+ tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am: now
+ that config.h lives in the top-level directory, we need to tell the
+ testsuite
+
+2002-04-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-array-nr/.cvsignore, tests/test-array-r/.cvsignore,
+ tests/test-basic-nr/.cvsignore, tests/test-basic-r/.cvsignore,
+ tests/test-bison-yylval/.cvsignore, tests/test-c-cpp-nr/.cvsignore,
+ tests/test-c-cpp-r/.cvsignore: we can ignore some Makefile.in
+
+2002-04-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in, tests/TEMPLATE/Makefile.am: only one config file
+ header apparently; this will have consequences in the test suite
+
+2002-04-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-bison-yylval/Makefile.am,
+ tests/test-bison-yylval/Makefile.in: adding automake support
+
+2002-04-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-bison-yylloc/.cvsignore,
+ tests/test-bison-yylloc/Makefile.am: tuned Makefile.am to build
+ correctly; ignore Makefile.in now
+
+2002-04-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/configure.in: test suite changes
+
+2002-04-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh, configure.in, tests/.cvsignore, tests/Makefile.am,
+ tests/Makefile.in, tests/README, tests/TEMPLATE/.cvsignore,
+ tests/TEMPLATE/Makefile.am, tests/TEMPLATE/Makefile.in,
+ tests/configure.in, tests/create-test, tests/create-test.pl,
+ tests/test-array-nr/Makefile.am, tests/test-array-nr/Makefile.in,
+ tests/test-array-r/Makefile.am, tests/test-array-r/Makefile.in,
+ tests/test-basic-nr/Makefile.am, tests/test-basic-nr/Makefile.in,
+ tests/test-basic-r/Makefile.am, tests/test-basic-r/Makefile.in,
+ tests/test-bison-yylloc/Makefile.am,
+ tests/test-bison-yylloc/Makefile.in,
+ tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-nr/Makefile.in,
+ tests/test-c-cpp-r/Makefile.am, tests/test-c-cpp-r/Makefile.in: test
+ suite changes
+
+2002-04-05 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Corrected error in manual regarding return type for
+ yy_scan_{string,buffer,bytes}.
+
+2002-04-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/de.po: new german translations from the translation project
+
+2002-04-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/es.po: new spanish translations
+
+2002-04-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: DIST_SUBDIRS: new variable. we can build flex with
+ SUBDIRS and then build the distribution using DIST_SUBDIRS
+
+2002-04-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: fix typo in comment
+
+2002-03-31 John Millaway <john43@users.sourceforge.net>
+
+ * main.c: Documented the header file kludge, (in anticipation of
+ buffering Section 1.)
+
+2002-03-31 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Created appendix "Makefiles and Flex" in the manual.
+
+2002-03-30 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: updating manual.
+
+2002-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/POTFILES.in: we want parse.y, not parse.c
+
+2002-03-29 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Indexing the manual (75% done).
+
+2002-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: unlisted intermediate flex/yacc-created files
+
+2002-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: millaway has done more work
+
+2002-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in: ok, one last touch up; users most
+ likely wont have help2man so we need to insure that's ok
+
+2002-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: fine tune flex.1 some more
+
+2002-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, configure.in: generalize the manpage a bit and tell
+ autofoo about help2man
+
+2002-03-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/da.po: new danish from translation project robot
+
+2002-03-28 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Indexing the manual -- it's only half done.
+
+2002-03-28 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: flex manual now uses automake's versioning info.
+
+2002-03-28 John Millaway <john43@users.sourceforge.net>
+
+ * README.cvs-snapshot: Mentioned requirements for gettext and
+ help2man.
+
+2002-03-28 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am, main.c: Output of `flex --version` now matches GNU
+ coding standards. Makefile.am now uses `help2man` to generate
+ flex.1
+
+2002-03-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: millaway has done a lot on the TODO list; remove those items
+ that he has take care of
+
+2002-03-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * README.cvs-snapshot: edited millaway's initial draft
+
+2002-03-27 John Millaway <john43@users.sourceforge.net>
+
+ * README.cvs-snapshot: Created file.
+
+2002-03-27 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Fixed case of node names in flex.texi.
+
+2002-03-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: lex- and yacc- generated files
+
+2002-03-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/fr.po: new french
+
+2002-03-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: ending periods in news items removed; mention nounistd
+ options
+
+2002-03-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/sv.po: updated sweedish translations
+
+2002-03-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/de.po: german translation
+
+2002-03-18 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl, flex.texi, main.c, options.c, options.h, scan.l: Removed
+ CFront 1.2 -specific code from skeleton, because CFront now defines
+ __cplusplus properly. Removed TurboC-specific code from skeleton.
+ Skeleton now includes proper C++ standard headers. Relocated
+ "unistd.h" code after user section 1 to allow user to overrid it.
+ New option "nounistd" to suppress unistd.h from being included.
+
+2002-03-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/tr.po: new turkish translation
+
+2002-03-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: mention included translations
+
+2002-03-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: we've done the gettext thing, but sometime we should get
+ 0.11.1
+
+2002-03-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ca.po: new catalan translation
+
+2002-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Added section on format of comments.
+
+2002-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Split format chapter into sections.
+
+2002-03-14 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Removed explicit pointers in node definitions.
+
+2002-03-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: unistd.h can be problematic
+
+2002-03-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/README: editing changes to README
+
+2002-03-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/POTFILES.in: scan.l, not scan.c because gettext gets confused
+
+2002-03-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: gettext cruft
+
+2002-03-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/descriptions: separate out test descriptions
+
+2002-03-13 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/LINGUAS: french and korean dont crash now
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/fr.po, po/ko.po: remove duplicate messages as per advice from
+ Jordi Mallach <jordi@debian.org>
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * gettext.h: yes, more gettext cruft
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * ABOUT-NLS, config.rpath, m4/codeset.m4, m4/gettext.m4,
+ m4/glibc21.m4, m4/iconv.m4, m4/isc-posix.m4, m4/lcmessage.m4,
+ m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/progtest.m4: this
+ is gettext cruft
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: gettext and autofoo are now involved
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, autogen.sh, configure.in, flexdef.h, main.c: mostly,
+ changes for gettext
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ca.po, po/da.po, po/es.po, po/ru.po, po/sv.po, po/tr.po: these
+ sure change a lot
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: note about cvs documentation
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/LINGUAS: we now have turkish
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/tr.po: updated translations, i think
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ca.po, po/da.po, po/es.po, po/fr.po, po/ko.po, po/ru.po,
+ po/sv.po, po/tr.po: ok, maybe we do keep these things?
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * README-alpha: README-alpha for those bad-hair days
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * m4/.cvsignore, m4/Makefile.am: ok,now we kinda have a m4/ subdir
+ for gettext
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/.cvsignore, po/LINGUAS, po/Makevars, po/POTFILES.in, po/da.po,
+ po/es.po, po/fr.po, po/ko.po, po/ru.po, po/sv.po: now, we have a po/
+ subdirectory for gettext. i hope you're happy
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ca.po: removing po files, maybe
+
+2002-03-12 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/.cvsignore: ignore autom4te.cache
+
+2002-03-11 Will Estes <wlestes@users.sourceforge.net>
+
+ * po/ca.po, po/da.po, po/es.po, po/fr.po, po/ko.po, po/ru.po,
+ po/sv.po: po files from debian
+
+2002-03-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: add several notes about tasks which need doing; create a new
+ top-level entry for generic coding concerns (this is distinct from
+ specific API or other such issues)
+
+2002-03-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: eliminate to.do and faqs from the README file
+
+2002-03-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: more notes on tests/
+
+2002-03-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: remove subdirectories from EXTRA_DIST; add a SUBDIRS
+ macro to handle examples/; clean up the dist-hook target
+
+2002-03-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: we want to generate Makefiles in some more
+ subdirectories; automake will like this
+
+2002-03-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: notes on subdirectories
+
+2002-03-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * examples/.cvsignore, examples/Makefile.am: now examples/ fits into
+ automake
+
+2002-03-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * examples/fastwc/.cvsignore, examples/fastwc/Makefile.am:
+ examples/fastwc now fits into automake
+
+2002-03-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * examples/manual/.cvsignore, examples/manual/Makefile.am,
+ examples/manual/Makefile.examples, examples/manual/README:
+ examples/manual directory now fits into automake
+
+2002-03-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * examples/manual/Makefile: renamed Makefile to Makefile.examples
+ for automake's sake
+
+2002-03-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: add parse.c and scan.c to built_sources
+
+2002-02-24 John Millaway <john43@users.sourceforge.net>
+
+ * Makefile.am: Removed CVS-specific code from 'dist-hook' target so
+ anybody with a copy of the tree can build a dist.
+
+2002-02-22 John Millaway <john43@users.sourceforge.net>
+
+ * tests/Makefile.in: Converted test script to portable /bin/sh.
+
+2002-02-22 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-bison-yylloc/Makefile.in: Added some spaces in shell
+ scripts for portability.
+
+2002-02-22 John Millaway <john43@users.sourceforge.net>
+
+ * tests/create-test.pl: Fixed #! line for portability.
+
+2002-02-22 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-bison-yylloc/Makefile.in: Fixed return status code on
+ bison-lloc test.
+
+2002-02-21 John Millaway <john43@users.sourceforge.net>
+
+ * tests/create-test.pl: Added script to auto-create tests. Probably
+ overkill.
+
+2002-02-21 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Fixed C++ #ifdef problem. Removed mistyped __CPLUSPLUS
+ macro. Removed THROW_NIL. Not sure where it came from in the first
+ place.
+
+2002-02-21 John Millaway <john43@users.sourceforge.net>
+
+ * tests/README, tests/TEMPLATE/Makefile.in, tests/configure.in,
+ tests/test-c-cpp-nr/.cvsignore, tests/test-c-cpp-nr/Makefile.in,
+ tests/test-c-cpp-nr/scanner.l, tests/test-c-cpp-nr/test.input,
+ tests/test-c-cpp-r/.cvsignore, tests/test-c-cpp-r/Makefile.in,
+ tests/test-c-cpp-r/scanner.l, tests/test-c-cpp-r/test.input: Added
+ test-c-cpp-nr and test-c-cpp-r.
+
+2002-02-16 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Added missing #endif.
+
+2002-02-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/.cvsignore, tests/test-array-nr/.cvsignore,
+ tests/test-array-r/.cvsignore, tests/test-basic-nr/.cvsignore,
+ tests/test-basic-r/.cvsignore, tests/test-bison-yylloc/.cvsignore,
+ tests/test-bison-yylval/.cvsignore,
+ tests/test-header-nr/.cvsignore, tests/test-header-r/.cvsignore,
+ tests/test-include-by-buffer/.cvsignore,
+ tests/test-include-by-reentrant/.cvsignore,
+ tests/test-multiple-scanners-nr/.cvsignore,
+ tests/test-multiple-scanners-r/.cvsignore,
+ tests/test-prefix-nr/.cvsignore, tests/test-prefix-r/.cvsignore,
+ tests/test-pthread/.cvsignore, tests/test-string-nr/.cvsignore,
+ tests/test-string-r/.cvsignore, tests/test-yyextra/.cvsignore: add
+ OUTPUT to .cvsignore files in test directories; it's also in the
+ template directory
+
+2002-02-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * gen.c: fix interrupted reads and freads; from the debian package
+ maintainer
+
+2002-02-06 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi, flexdef.h, main.c, nfa.c: support large flex tables;
+ from debian package maintainer
+
+2002-01-29 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/configure.in: add more output files to account for new tests
+
+2002-01-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-array-nr/.cvsignore, tests/test-array-nr/Makefile.in,
+ tests/test-array-nr/scanner.l, tests/test-array-nr/test.input: add
+ this test
+
+2002-01-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-array-r/.cvsignore, tests/test-array-r/Makefile.in,
+ tests/test-array-r/scanner.l, tests/test-array-r/test.input: add
+ this test suite
+
+2001-11-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, main.c: millaway: Fixed yytext_ptr when using %array in
+ reentrant scanner
+
+2001-11-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * buf.c: oops, forgot this one line
+
+2001-11-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-header-r/.cvsignore, tests/test-header-r/Makefile.in,
+ tests/test-header-r/main.c, tests/test-header-r/scanner.l,
+ tests/test-header-r/test.input: and more fallout
+
+2001-11-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO, flex.skl, flex.texi, flexdef.h, main.c, misc.c,
+ tests/README, tests/TEMPLATE/Makefile.in, tests/configure.in,
+ tests/test-basic-r/scanner.l, tests/test-bison-yylloc/.cvsignore,
+ tests/test-bison-yylloc/Makefile.in,
+ tests/test-bison-yylloc/parser.y,
+ tests/test-bison-yylloc/scanner.l,
+ tests/test-bison-yylval/.cvsignore,
+ tests/test-bison-yylval/Makefile.in,
+ tests/test-bison-yylval/parser.y,
+ tests/test-bison-yylval/scanner.l,
+ tests/test-include-by-reentrant/scanner.l,
+ tests/test-prefix-r/scanner.l, tests/test-pthread/scanner.l,
+ tests/test-string-r/scanner.l, tests/test-yyextra/scanner.l: more
+ from the same batch
+
+2001-11-14 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-bison-yylloc/main.c, tests/test-bison-yylval/main.c,
+ tests/test-header-nr/.cvsignore, tests/test-header-nr/Makefile.in,
+ tests/test-header-nr/main.c, tests/test-header-nr/scanner.l,
+ tests/test-header-nr/test.input,
+ tests/test-multiple-scanners-nr/.cvsignore,
+ tests/test-multiple-scanners-nr/Makefile.in,
+ tests/test-multiple-scanners-nr/main.c,
+ tests/test-multiple-scanners-nr/scanner-1.l,
+ tests/test-multiple-scanners-nr/scanner-2.l,
+ tests/test-multiple-scanners-r/.cvsignore,
+ tests/test-multiple-scanners-r/Makefile.in,
+ tests/test-multiple-scanners-r/main.c,
+ tests/test-multiple-scanners-r/scanner-1.l,
+ tests/test-multiple-scanners-r/scanner-2.l: a big batch from
+ millaway
+
+2001-10-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: now NEWS has forgotten about the _r variables
+
+2001-10-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, flex.texi, gen.c, main.c,
+ tests/test-bison-yylloc/scanner.l,
+ tests/test-bison-yylval/scanner.l,
+ tests/test-include-by-reentrant/scanner.l,
+ tests/test-prefix-nr/scanner.l, tests/test-pthread/scanner.l,
+ tests/test-string-r/scanner.l, tests/test-yyextra/scanner.l:
+ millaway simplified the reentrant api; here's the result
+
+2001-10-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c, options.c, options.h: more from millaway
+
+2001-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c, options.c, options.h: the last checkin was broken;
+ millaway fixed it
+
+2001-10-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, flex.texi, gen.c, main.c, misc.c, options.h, scan.l,
+ scanopt.c, tests/README, tests/configure.in: phew, millaway's latest
+ batch
+
+2001-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: flex.skl should come up in C mode
+
+2001-10-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: apparently, isatty and c++ need help getting along (from
+ octave)
+
+2001-10-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: document new options and new option handling
+
+2001-10-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: tell emacs that TODO is a text/outline mode file
+
+2001-10-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: we have new long options; we need to document that
+
+2001-10-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: tell emacs that NEWS is text/outline mode
+
+2001-10-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: oops, lost a line somewhere in the merge process on
+ millaway's work
+
+2001-10-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am, buf.c, flex.skl, flex.texi, flexdef.h, main.c,
+ misc.c, options.c, options.h, parse.y, scan.l, scanopt.c, scanopt.h:
+ merge latest batch of millaway's changes
+
+2001-09-22 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: Fixed typo in options display
+
+2001-09-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: reentrant and non-reentrant scanners share the same yywrap
+ MACRO. millaway
+
+2001-09-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: clarify item on comments in lexical files
+
+2001-09-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS, scan.l: now flex recognizes \r as an eol character
+
+2001-09-20 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: specify cvsroot so automake distcheck works
+
+2001-09-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: tex has lost its mind; we remove parentheses to
+ compensate
+
+2001-09-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: now that c++ is better supported, let's mention it as a news
+ item
+
+2001-09-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * examples/fastwc/wc1.l, examples/fastwc/wc2.l,
+ examples/fastwc/wc3.l, examples/fastwc/wc4.l,
+ examples/fastwc/wc5.l, flex.skl, main.c: commit the backwash from
+ the branch merges
+
+2001-09-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * FlexLexer.h, examples/testxxLexer.l, flex.skl: made preliminary
+ c++ fixes; the intent is to make it work with recent c++ compilers
+
+2001-08-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * main.c: remove argv_fixup; fix typo in error message; changes from
+ millaway's branch
+
+2001-08-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: mention no more c++ comments in c scanners
+
+2001-08-21 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Changed // comments to /* */ comments in skeleton.
+
+2001-08-19 John Millaway <john43@users.sourceforge.net>
+
+ * flex.texi: Changed @var to @code everywhere.
+
+2001-08-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * to.do/flex.rmail: more mail
+
+2001-08-16 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: the manual now has its own section; we're not adding
+ comments either
+
+2001-08-04 John Millaway <john43@users.sourceforge.net>
+
+ * tests/Makefile.in, tests/README, tests/TEMPLATE/Makefile.in,
+ tests/test-basic-nr/Makefile.in, tests/test-basic-r/Makefile.in,
+ tests/test-bison-yylloc/Makefile.in,
+ tests/test-bison-yylval/Makefile.in,
+ tests/test-include-by-buffer/Makefile.in,
+ tests/test-include-by-reentrant/Makefile.in,
+ tests/test-prefix-nr/Makefile.in, tests/test-prefix-r/Makefile.in,
+ tests/test-pthread/Makefile.in, tests/test-string-nr/Makefile.in,
+ tests/test-string-r/Makefile.in, tests/test-yyextra/Makefile.in:
+ Cleaned up the output of the tests.
+
+2001-08-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: note jason's thoughts on having a manpage
+
+2001-08-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: note millaway's assignment and tests to be under flex
+ license
+
+2001-08-01 John Millaway <john43@users.sourceforge.net>
+
+ * tests/test-bison-yylval/scanner.l: Fixed semantics of test (the
+ success or failure of this test should be unaffected by this
+ change.)
+
+2001-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: fake automake into believing that ChangeLog already
+ exists
+
+2001-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: millaway needs to be covered in the ChangeLog
+
+2001-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * version.h: automake is supplying version info now so we just pick
+ it up
+
+2001-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: forgot braces on @copyright
+
+2001-08-01 John Millaway <john43@users.sourceforge.net>
+
+ * flex.skl: Added missing argument to yy_flex_free.
+
+2001-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * AUTHORS: john millaway wrote the reentrant C support
+
+2001-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: add license node to the manual
+
+2001-08-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: c++ ideas
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * parse.y: error messages will now show up the way that emacs likes
+ them
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: oops, left in an extra backslash
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: flex.texi is here; clarify tests/ rewrite issue
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: hey, we have texinfo, not man
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.1: no more manpage
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: remove flex.1 and rewrite the dist-hook so that we
+ pick up a couple more directories
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: the namual now compiles; hurray
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: first attempt at including the tests/ directory via
+ automake, dist-hook target added
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/.cvsignore: ignore config.cache in tests/ directory
+
+2001-07-31 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: automake groks the ChangeLog now so we don't have to
+ remind the maintainer to remake it
+
+2001-07-30 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: more corrections to the manual; the end is in site
+
+2001-07-30 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: auto-generated backup?
+
+2001-07-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: today's tinkering on the manual
+
+2001-07-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: if we want flex.1 we have to say so in EXTRA_DIST
+
+2001-07-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: note future issues with flex.texi
+
+2001-07-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: include flex.1 as it's the only working documentation
+ for now
+
+2001-07-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: rearrange to work with automake on building the
+ ChangeLog
+
+2001-07-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: automake is unhappy if we specify the outfile
+
+2001-07-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: more conversions/corrections
+
+2001-07-26 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: we removed misc/ so we don't mention it any more
+
+2001-07-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: begin the manual conversion to texinfo; yes, it's
+ broken right now
+
+2001-07-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * AUTHORS, THANKS: copy in manual author and thanks info
+
+2001-07-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: how to fake the ChangeLog into showing up in the
+ distribution
+
+2001-07-25 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: add YFLAGS so parse.h gets made
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * examples/fastwc/README, examples/fastwc/mywc.c,
+ examples/fastwc/wc1.l, examples/fastwc/wc2.l,
+ examples/fastwc/wc3.l, examples/fastwc/wc4.l, examples/fastwc/wc5.l:
+ re-add these files
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: reflect recent doings
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.in: what with automake, we don't need Makefile.in any
+ more
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: more rearranging for automake
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * to.do/flex.rmail: more mail came in
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: adjust to automake's idea of the world
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: add Vern's misc dependencies; noinst_SCRIPTS was
+ broken?; list a few last files to be included in the distribution
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: rearrange for better order; add automake support as a news
+ item
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: copyright notice on Makefile.am; document some -D
+ switches (are they still usable?)
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: add lex-replacement issue
+
+2001-07-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: add EXTRA_DIST
+
+2001-07-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: we need to do the same thing in each directory
+
+2001-07-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: introduce automake into the macro calls
+
+2001-07-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: add AUTOMAKE_OPTIONS, info_TEXINFOS, include_HEADERS,
+ noinst_HEADERS; it's libfl.a, not libflex.a
+
+2001-07-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.am: bin_PROGRAMS and lib_LIBRARIES
+
+2001-07-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * to.do/streams.mail: streams.mail has moved here
+
+2001-07-23 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: add xref for teximanual
+
+2001-07-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.1: include typo/punctuation fixes from a patch submitted by
+ noon@cote-dazur.com (Fabrice Bauzac)
+
+2001-07-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: we want gettext
+
+2001-06-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: include c++ STD fixes from quanstro@quanstro.net
+
+2001-06-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, gen.c: change some int types to size_t as per FreeBSD
+ 28364 from avn@any.ru
+
+2001-06-24 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: remove parse.[ch] from make clean target; repackage
+ distribution (not rework)
+
+2001-06-19 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: add memory api and reworking of flex.skl reworking
+
+2001-06-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: remove extraneous notice from flex.skl
+
+2001-06-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: patch memory leak as per millaway
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * to.do/flex.rmail: add vern's ok for copyright/license changes and
+ john's answer on line offsets
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: remove creation of .cvsignore files (it's done); add other
+ notes about the test suite
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/.cvsignore, tests/test-basic-nr/.cvsignore,
+ tests/test-basic-r/.cvsignore, tests/test-bison-yylloc/.cvsignore,
+ tests/test-bison-yylval/.cvsignore,
+ tests/test-include-by-buffer/.cvsignore,
+ tests/test-include-by-reentrant/.cvsignore,
+ tests/test-prefix-nr/.cvsignore, tests/test-prefix-r/.cvsignore,
+ tests/test-pthread/.cvsignore, tests/test-string-nr/.cvsignore,
+ tests/test-string-r/.cvsignore, tests/test-yyextra/.cvsignore:
+ adding .cvsignore files for existing tests/ subdirectories
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/README: reformat, say to add a description to this file and
+ mention what to do re .cvsignore
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/TEMPLATE/cvsignore: create template for .cvsignore
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: reorganize for logical reasons; test suite now seems to run
+ out of the box
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/.cvsignore: we dont want the Makefile either
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/test-prefix-nr/test.input, tests/test-prefix-r/test.input:
+ test.input was supposed to be here
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/.cvsignore: add autoconf legacy files to be ignored
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: clarify usage instructions; prepare tests/ as well
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/.cvsignore: . cvsignore for tests/ subdirectory
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * FlexLexer.h: tell emacs that FlexLexer.h is c++
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * scan.l: tell emacs scan.l is in C mode
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: added punctuation
+
+2001-06-17 Will Estes <wlestes@users.sourceforge.net>
+
+ * FlexLexer.h, Makefile.in, README, RoadMap, autogen.sh, ccl.c,
+ configure.in, dfa.c, ecs.c, flex.1, flex.skl, flexdef.h, gen.c,
+ libmain.c, libyywrap.c, main.c, misc.c, mkskel.sh, nfa.c, parse.y,
+ scan.l, sym.c, tblcmp.c, yylex.c: change copyright/license notices
+ as per Vern's response to Theo
+
+2001-06-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * to.do/flex.rmail: add bill fenlason's emails
+
+2001-06-15 Will Estes <wlestes@users.sourceforge.net>
+
+ * COPYING: make changes as per Theo De Raadt; remove tabs
+
+2001-06-08 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl: save errno as per Theo de Raadt
+
+2001-06-07 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.1: correct hyphenation as per openbsd tree
+
+2001-06-05 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.in, configure.in: change references to TESTS/ to tests/
+ to account for the directory name changes
+
+2001-05-27 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, gen.c: commit john millaway's YY_G wrapper corrections
+
+2001-05-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.in: remove || exit calls
+
+2001-05-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * gen.c: complete john millaway's reentrant patch
+
+2001-05-21 Will Estes <wlestes@users.sourceforge.net>
+
+ * to.do/flex.rmail: more flex messages in the queue
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.skl, flexdef.h, gen.c, main.c, nfa.c, scan.l: john millaway's
+ reentrancy patch
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.in: remove || exit from testing loop
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.in: tell make about the tests directory and its
+ associated targets
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: rethink the todo list
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.1: describe reentrant api changes
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * TODO: mention work needed for tests/
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: tell auto* about the test directory
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: make punctuation uniform, mention the new tests/ directory
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * NEWS: reformat items; cut out old items and move them to ONEWS
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * ONEWS: move old NEWS items to ONEWS
+
+2001-05-18 Will Estes <wlestes@users.sourceforge.net>
+
+ * tests/Makefile.in, tests/README, tests/TEMPLATE/Makefile.in,
+ tests/TEMPLATE/parser.y, tests/TEMPLATE/scanner.l,
+ tests/TEMPLATE/test.input, tests/configure.in,
+ tests/test-basic-nr/Makefile.in, tests/test-basic-nr/scanner.l,
+ tests/test-basic-nr/test.input, tests/test-basic-r/Makefile.in,
+ tests/test-basic-r/scanner.l, tests/test-basic-r/test.input,
+ tests/test-bison-yylloc/Makefile.in,
+ tests/test-bison-yylloc/parser.y,
+ tests/test-bison-yylloc/scanner.l,
+ tests/test-bison-yylloc/test.input,
+ tests/test-bison-yylval/Makefile.in,
+ tests/test-bison-yylval/parser.y,
+ tests/test-bison-yylval/scanner.l,
+ tests/test-bison-yylval/test.input,
+ tests/test-include-by-buffer/Makefile.in,
+ tests/test-include-by-buffer/scanner.l,
+ tests/test-include-by-buffer/test-1.input,
+ tests/test-include-by-buffer/test-2.input,
+ tests/test-include-by-buffer/test-3.input,
+ tests/test-include-by-reentrant/Makefile.in,
+ tests/test-include-by-reentrant/scanner.l,
+ tests/test-include-by-reentrant/test-1.input,
+ tests/test-include-by-reentrant/test-2.input,
+ tests/test-include-by-reentrant/test-3.input,
+ tests/test-prefix-nr/Makefile.in, tests/test-prefix-nr/README,
+ tests/test-prefix-nr/scanner.l, tests/test-prefix-r/Makefile.in,
+ tests/test-prefix-r/README, tests/test-prefix-r/scanner.l,
+ tests/test-pthread/Makefile.in, tests/test-pthread/scanner.l,
+ tests/test-pthread/test-1.input, tests/test-pthread/test-2.input,
+ tests/test-pthread/test-3.input, tests/test-pthread/test-4.input,
+ tests/test-pthread/test-5.input, tests/test-string-nr/Makefile.in,
+ tests/test-string-nr/scanner.l, tests/test-string-r/Makefile.in,
+ tests/test-string-r/scanner.l, tests/test-yyextra/Makefile.in,
+ tests/test-yyextra/scanner.l, tests/test-yyextra/test.input: add
+ john millaway's test directory
+
+2001-05-04 Will Estes <wlestes@users.sourceforge.net>
+
+ * to.do/flex.rmail: more mail in flex.rmail
+
+2001-05-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * FlexLexer.h, ccl.c, dfa.c, ecs.c, flex.skl, flexdef.h, gen.c,
+ libmain.c, libyywrap.c, main.c, misc.c, nfa.c, parse.y, scan.l,
+ sym.c, tblcmp.c, yylex.c: remove extraneous rcs keywords
+
+2001-05-03 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: mention RoadMap
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * examples/README, examples/debflex.awk, examples/manual/ChangeLog,
+ examples/manual/Makefile, examples/manual/README,
+ examples/manual/cat.lex, examples/manual/dates.lex,
+ examples/manual/datetest.dat, examples/manual/eof_rules.lex,
+ examples/manual/eof_test01.txt, examples/manual/eof_test02.txt,
+ examples/manual/eof_test03.txt, examples/manual/expr.lex,
+ examples/manual/expr.y, examples/manual/front.lex,
+ examples/manual/front.y, examples/manual/j2t.lex,
+ examples/manual/myname.lex, examples/manual/myname.txt,
+ examples/manual/myname2.lex, examples/manual/numbers.lex,
+ examples/manual/pas_include.lex, examples/manual/pascal.lex,
+ examples/manual/reject.lex, examples/manual/replace.lex,
+ examples/manual/string1.lex, examples/manual/string2.lex,
+ examples/manual/strtest.dat, examples/manual/unput.lex,
+ examples/manual/user_act.lex, examples/manual/userinit.lex,
+ examples/manual/wc.lex, examples/manual/yymore.lex,
+ examples/manual/yymore2.lex, examples/manual/yymoretest.dat,
+ examples/testxxLexer.l, to.do/README, to.do/Wilhelms.todo,
+ to.do/Wish-List, to.do/flex.rmail, to.do/unicode/FlexLexer.h,
+ to.do/unicode/ccl.c, to.do/unicode/changes.txt,
+ to.do/unicode/ecs.c, to.do/unicode/flex.1, to.do/unicode/flex.skl,
+ to.do/unicode/flexdef.h, to.do/unicode/gen.c, to.do/unicode/main.c,
+ to.do/unicode/misc.c, to.do/unicode/scan.l, to.do/unicode/tblcmp.c:
+ adding the rest of vern's files
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: mention misc/ directory
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * version.h: version is 2.5.5b
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * Makefile.in: remove header from top; add rule to generate
+ initscan.c just in case
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * configure.in: dont check for initscan.c; check for scan.l instead
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * RoadMap: list of source files
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * README: rewrite README to reflect changes in layout of directories
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * AUTHORS, THANKS, TODO: initial attempt at the files
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * COPYING: add 2001 copyright notice
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * autogen.sh: initial attempt at a bootstrap script for developers
+
+2001-05-01 Will Estes <wlestes@users.sourceforge.net>
+
+ * flex.texi: texinfo manual, old contributed version
+
+2000-08-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: fixed some bugs in examples of [[:...:]] ccls
+
+2000-08-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: version shipped to Dick King
+
+2000-08-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: explicit include of iostream.h
+
+2000-08-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: if a newline is seen in <ACTION_STRING>, assume it
+ terminates the string.
+
+2000-08-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, sym.c: moved symbol table definitions from flexdef.h
+ into sym.c
+
+2000-08-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: fixed underallocation for accset
+
+1997-06-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * COPYING: revised for rms
+
+1997-06-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: fixed memory leak
+
+1997-06-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: input() doesn't destroy yytext
+
+1997-06-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: wrapped with extern "C++"
+
+1996-12-13 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: use delete [] for yy_state_buf
+
+1996-10-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: fixed %option noinput
+
+1996-10-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: free(char*) fix ... Sigh ...
+
+1996-10-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: bug fix for yymore()/yylineno interaction
+
+1996-10-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: fixed memory leak
+
+1996-09-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: release 2.5.4
+
+1996-09-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: more stuff for distclean
+
+1996-09-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: "str" -> "yy_str"
+
+1996-09-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: 2.5.4
+
+1996-07-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: (attempted) fix for input() crossing a file boundary
+
+1996-05-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: don't do Acorn diffs
+
+1996-05-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: some minor additions for 2.5.3
+
+1996-05-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, version.h: 2.5.3
+
+1996-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: initialize yy_more_offset etc. for yyFlexLexer class
+
+1996-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: niggling cosmetic tweak
+
+1996-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: bug fixes for yymore (especially with %array)
+
+1996-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: yymore + %array tweaks
+
+1996-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: added yy_{,prev_}more_offset
+
+1996-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: removed decl of unused library function
+
+1996-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: snapshot of cscope yymore fixes, prior to switching
+ yymore-on-%array approach
+
+1995-12-18 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: don't stack states on NUL-transitions that are jams
+
+1995-09-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * libmain.c: fixed re Esmond Pitt's ancient suggestion
+
+1995-04-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: ANSI C / Solaris tweak
+
+1995-04-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: credits
+
+1995-04-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: multiple FlexLexer.h includes
+
+1995-04-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: fix multiple inclusions
+
+1995-04-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: lint tweak
+
+1995-04-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: typo fixed
+
+1995-04-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: credits update
+
+1995-04-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: (char*) cast for realloc
+
+1995-04-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: (char*) tweak
+
+1995-04-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: VMS update for 2.5.2
+
+1995-04-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: clarify when 8-bit scanners are created by default,
+ vs. 7-bit
+
+1995-04-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: reworked alloca() chud, from Francois
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, version.h: 2.5.2
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: 2.5.2 update
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c, main.c: const -> yyconst
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: fixed some old libfl.a references
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: some (but not all) of Francois' tweaks
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * configure.in: tweaks from Francois
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: yy_delete_buffer allows nil buffer pointer
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: do_stdinit now defaults to false
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: remove first default for yylex(new_in, new_out)
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: rearrange some definitions; fix YY_NO_UNPUT
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: more alloca() bullshit
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: octal escape sequence must have just digits 0-7
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: '-' means stdin octal escape sequence must just be digits
+ 0-7
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: -- terminates options
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: added dataflush() prototype
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: move dataflush, otoi prototypes into flexdef.h
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, gen.c: const -> yyconst
+
+1995-04-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: fixed bug in needing yy_cp for -Cf w/ backing up
+
+1995-03-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * README, flex.1: Stan Adermann credit
+
+1995-03-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: beta-tester update
+
+1995-03-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, version.h: 2.5.1
+
+1995-03-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: update date for 2.5.1 release, some feedbacker credits
+
+1995-03-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: fixed lint problem with declaring yy_cp unnecessarily
+
+1995-03-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: {}'s around full-table initializations
+
+1995-03-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: for version 2.5
+
+1995-03-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: added note regarding yylineno should be maintained on a
+ per-buffer basis
+
+1995-03-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: new C++ member functions
+
+1995-03-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, flex.1: 2.5.0.8 update
+
+1995-03-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: rename yylineno if -P
+
+1995-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: do_yylineno MARKER_DIFFERENCE depends on MAXIMUM_MNS
+
+1995-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: removed redundant skel.c from DISTFILES
+
+1995-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: debug(), setdebug(), lineno()
+
+1995-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: %option yylineno support
+
+1995-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: read up to newline for interactive reads, rather than one
+ char
+
+1995-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c, scan.l: added %option yylineno
+
+1995-03-18 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: added do_yylineno
+
+1995-03-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, flex.1: 2.5.0.7
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: realclean -> maintainer-clean
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added yy_flush_buffer
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: added yy_flush_buffer
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: prefix support for yy_flush_buffer
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: added %option yyclass
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, main.c, scan.l: added yyclass
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: Added switch_streams
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: added switch_streams
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: don't rename yy_flex_debug for C++
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: yy_flex_debug extern only if not C++
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: added yy_flex_debug member variable
+
+1995-03-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: yyFlexLexer initialization of yy_flex_debug
+
+1995-03-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, main.c: VMS POSIX stuff
+
+1995-03-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: moved position of yy_init = 0
+
+1995-03-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: added YY_EXIT_FAILURE
+
+1995-03-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: removed VMS-specific exit
+
+1995-03-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c, flexdef.h, gen.c, main.c, misc.c, nfa.c, scan.l, sym.c,
+ yylex.c: internationalization aids
+
+1995-03-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: do yy_flex_debug prefix for both C++ and C
+
+1995-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: fixed program_name tweak again
+
+1995-01-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: oops, fixed program_name tweak
+
+1995-01-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: program_name is "flex" if argv[0] nil
+
+1995-01-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.5.0.5
+
+1995-01-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Documented YY_NUM_RULES
+
+1995-01-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: added formatted man page to MISC
+
+1995-01-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: help messages to stdout
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Added YY_NUM_RULES
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: better fix for #pragma problem
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: better fix for #pragma portability problem
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: "# line" -> #line
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, flexdef.h: comment out Turbo C #pragma's
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: reset linenum on new file
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: isatty() extern
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, flex.1: 2.5.0.4
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: long options, VMS tweaks
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added parse.c, parse.h for dist MISC directory
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: some "const" cleansing
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * mkskel.sh: skel[] is now const
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: some const cleansing
+
+1995-01-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: #line in section 1
+
+1995-01-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: preen
+
+1994-12-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * configure.in: config.h from conf.in
+
+1994-12-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: for VMS, delete -> remove
+
+1994-12-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: config.h.in -> conf.in rm config.h on distclean
+
+1994-12-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: stdinit tweaks
+
+1994-12-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: added nostdinit
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: added MS-DOS note for 2.5.0.2
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: typos, tweaks
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: removed flexdoc
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: flexdoc/flex merge
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: typos
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: typo
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: 2.5 update
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.5.0.2
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: fixed sense of %option main implying %option noyywrap
+
+1994-12-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: YY_FLEX_{MAJOR,MINOR}_VERSION fixed bug in unput
+ trashing yytext even with %array
+
+1994-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: prior to 2.5 update
+
+1994-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: C++/-P fixes
+
+1994-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: -P fixes constructor, destructor moved to flex.skl
+
+1994-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: YY_SKIP_YYWRAP yyFlexLexer constructor, destructor
+
+1994-12-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: formatting
+
+1994-12-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: fixed bug in adjusting yytext before backing up
+
+1994-12-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: switched scanner itself over to [:xxx:]
+
+1994-12-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: added YY_FLEX_VERSION
+
+1994-12-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Fixed CCL-match pattern for [:whatever:]
+
+1994-12-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: treat [:upper:] as [:lower:] if -i
+
+1994-12-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.5.0.1
+
+1994-12-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, gen.c: input() maintains BOL
+
+1994-12-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: check size of buffer in yy_scan_buffer
+
+1994-12-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: added %option main, fixed missing %*
+
+1994-12-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: added ccl exprs
+
+1994-12-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: added ccl exprs, %option main
+
+1994-12-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: added %options, ccl exprs
+
+1994-12-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: undid previous change
+
+1994-12-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Makefile.in from srcdir
+
+1994-12-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: added skel.c to DISTFILES
+
+1994-12-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: added YYSTATE alias
+
+1994-12-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: NL is now \r?\n
+
+1994-12-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: use cerr for C++ diagnostics
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: undid YY_UNIX_NEWLINE
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: STDC_HEADERS to check for stdlib
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * configure.in: AC_STDC_HEADERS -> AC_HEADER_STDC
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: \n -> '\012'
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added YY_UNIX_NEWLINE
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: BOL changes
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: fixed bug with caseins but not ecs
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: BOL changes some casts for Turbo C
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: messages identify filenames
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Increase slowly if realloc double overflows
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: YY_RULE_SETUP
+
+1994-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Added yy_XX_state %option's Added yy_set_bol
+
+1994-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: don't remove ~ files
+
+1994-11-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: get CFLAGS from autoconf
+
+1994-11-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c, flex.skl, flexdef.h, gen.c, misc.c, parse.y, scan.l, sym.c:
+ Brian Madsen's tweaks for Borland
+
+1994-11-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: 2.5.0
+
+1994-11-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added do_stdinit
+
+1994-11-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: Added yy_delete_buffer() in destructor
+
+1994-11-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added yy_set_interactive, YY_ALWAYS_INTERACTIVE,
+ YY_NEVER_INTERACTIVE, YY_NO_INPUT, YY_NO_UNPUT, YY_NO_*_STATE
+
+1994-11-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Added do_stdinit, Think C hacks
+
+1994-11-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Added %options for input, always-interactive,
+ never-interactive, yy_scan_{buffer,bytes,string}
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: size_t #ifdef's for not compiling some statics
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: $(FLEX) config.h
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * configure.in: config.h, size_t, malloc.h, sys/types.h
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: config.h, size_t
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: yywrap option, no stdin/out init for VMS, mundane tweaks
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: alloca, lint tweaks
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: %option yywrap size_t tweaks
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: size_t tweaks
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: size_t, STDC tweaks
+
+1994-11-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added yy_scan_{buffer,bytes,string}, plus tweaks
+
+1994-10-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: made stack code conditional on "stack" option
+
+1994-10-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: added use of "stack" %option
+
+1994-08-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Fixed fencepost in call to yy_flex_strncpy
+
+1994-07-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: yy_eof_status -> yy_buffer_status
+
+1994-07-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: yy_flex_strcpy -> yy_flex_strncpy minor prototype tweak
+
+1994-07-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Bug fix for matching NUL's at end of token when
+ interactive. yy_flex_strcpy -> yy_flex_strncpy
+
+1994-07-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: No YY_USER_ACTION if continued action
+
+1994-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added fix for 8-bit chars returned by input()
+
+1994-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Move definition of yy_flex_strcpy to come after #define
+ of yytext_ptr
+
+1994-01-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * mkskel.sh: flex.skel -> flex.skl
+
+1994-01-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * mkskel.sh: Initial revision
+
+1993-12-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Fixed scan.c target so "make" detects flex failure
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Added %option's
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Nuked FLEX_FLAGS that are now done using %option
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y, scan.l: %option
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Reworked for %option
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added "unspecified", globals for %option
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: start condition #define's go to action file
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Added action_define()
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Minor consolidation using scon scopes etc
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Modified to use scon scopes
+
+1993-12-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: indented rules
+
+1993-12-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: Added scon_stk stuff, format_warn
+
+1993-12-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added format_warn
+
+1993-12-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: Working checkpoint prior to adding <scon>{ stuff
+
+1993-12-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, main.c: Added in_rule, deleted actvsc
+
+1993-12-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Added doubling of '\'s in filenames
+
+1993-12-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Added in_rule, doing_rule_action
+
+1993-12-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: Removed actvsc
+
+1993-12-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: -ooutput #line directives credits
+
+1993-12-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Fixsed sense of test for %array
+
+1993-12-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.5.0 snapshot for Craig
+
+1993-12-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: Added beginnings of <SCON>{ ... }
+
+1993-12-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Simplified scanning {}'s
+
+1993-12-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added <stdlib.h>
+
+1993-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: prototypes for alloc/string routines
+
+1993-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: alloc, string routines internal
+
+1993-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Nuked lib{string,alloc}.c, added dependency of
+ yylex.o on parse.h
+
+1993-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * configure.in: Check for string.h
+
+1993-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Use autoconf for string/strings.h yy_flex_XXX ->
+ flex_XXX
+
+1993-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Added flex_XXX -> yy_flex_XXX wrappers
+
+1993-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c, misc.c, sym.c: yy_flex_XXX -> flex_XXX
+
+1993-12-17 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: No more WHITESPACE token
+
+1993-12-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h, flex.skl: Added yy_top_state()
+
+1993-12-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: simplified comment-scanning using push/pop states
+
+1993-12-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: removed crufty WHITESPACE token, some uses of '\n' token
+
+1993-12-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: start stack, extern "C++" moved
+
+1993-12-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: Bug fix for -CF
+
+1993-12-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, misc.c: alloc routines take unsigned
+
+1993-12-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: start-state stacks, alloc routines take unsigned
+
+1993-12-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, misc.c: bracket -CF table elements
+
+1993-12-13 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Do #bytes computation in {re,}allocate_array() only once
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, flexdef.h, gen.c, main.c, misc.c, scan.l, sym.c:
+ yy_str*() -> str*()
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in, dfa.c, flexdef.h, gen.c, main.c, misc.c, nfa.c,
+ parse.y, scan.l, sym.c: -o option
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: lint tweak
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Expanded on extern "C++" news item
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.4.5
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added yy_fill_buffer
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: is_interactive -> yy_is_interactive
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Updated credits
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Fixed typo in "uninstall" target
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Updated comment regarding 0-based vs. 1-based arrays for
+ -CF.
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: Initialize dfaacc[0] for -CF representation Fixed minor
+ memory leak
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: #include "FlexLexer.h" -> <FlexLexer.h>
+
+1993-12-11 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: Added extern "C++" wrapper
+
+1993-12-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Detect REJECT etc. before generating YY_USES_REJECT!
+
+1993-12-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Fixed bug in interactive reads where char is unsigned
+
+1993-12-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: Fixed bug in treating '$' as variable trailing context
+
+1993-12-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: 2.4.5
+
+1993-12-07 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: pretester update
+
+1993-12-07 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.4.4
+
+1993-12-07 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: LexError(), C++ experiment warning, credits
+
+1993-12-07 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Fixed 8-bit bug
+
+1993-12-07 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, gen.c: Fixed nasty 8-bit bugs
+
+1993-12-07 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c, ecs.c, flexdef.h, gen.c, main.c, nfa.c, tblcmp.c:
+ {min,max,abs} -> {MIN,MAX,ABS}
+
+1993-12-07 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h, flex.skl: Support for yyFlexLexer::LexerError
+
+1993-12-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: 2.4.4
+
+1993-12-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: credits update
+
+1993-12-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: very minor "install" tweaks
+
+1993-12-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, nfa.c: YY_USER_ACTION generated now for each case in
+ action switch
+
+1993-12-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Fixed bug in pointing yyin at a new file and resuming
+ scanning
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Added note regarding g++ 2.5.X
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: updated credits
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: ranlib addition for 2.4.3
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Minor tweak to last change
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: run ranlib on libfl.a
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Hopefully last update prior to 2.4.3
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, gen.c, misc.c, sym.c: lint tweaks
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added exec_prefix
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: credit update
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: lint tweak
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: FlexLexer.h fixed for separate inclusion
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h, flex.skl, main.c: mods so FlexLexer.h can be included
+ separately
+
+1993-12-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: -F incompatible with -+
+
+1993-12-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Elaborated comments for 2.4.3
+
+1993-12-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.4.3
+
+1993-12-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Updated message regarding missing libfl.a routines Added
+ thanks to Noah Friedman
+
+1993-12-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added libstring.c Modified "lint" target to use
+ -Dconst= Added a.out, lex.yy.cc to sundry clean targets
+
+1993-12-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, flexdef.h, gen.c, main.c, misc.c, scan.l, sym.c: Use
+ yy_strXXX() routines instead of <string.h>
+
+1993-12-01 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: 2.4.3
+
+1993-12-01 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, misc.c: yy_flex_xmalloc() moved to misc.c
+
+1993-12-01 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Fixed bug in yy_fatal_error()
+
+1993-12-01 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: ... and remove plain tar file after compression
+
+1993-12-01 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.4.2
+
+1993-12-01 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Produce both compress'd and gzip'd distribution tar
+ files
+
+1993-12-01 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: Release 2.4.2
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: -a -> -Ca
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: described configuration files in manifest
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added intermediate step of copying MISC/alloca.c ->
+ alloca.c Included CPPFLAGS when compiling alloca.c
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: Credit to 2.4 pre-testers.
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Fixed nasty bug in short/long decl decision
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Lowered MAX_SHORT out of increased general paranoia.
+ Added yy_flex_xmalloc() proto
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Fixed very minor typo in -v output
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Removed vestigal cast to (char) in isupper() call
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Added casts to unsigned Char for isascii() calls
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: Added #ifdef chud for alloca()
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added alloca
+
+1993-11-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * configure.in: Add AC_ALLOCA if using bison
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added intermediate file going scan.l -> scan.c
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Removed parse.{c,h} from distribution files, since
+ they may not be all that portable.
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Fixed %array YYLMAX headaches, added error message if
+ buffer needs growing but REJECT used
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c, main.c: Fixed YYLMAX headaches
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Documented that buffer can't grow if REJECT used
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added parse.{c,h} to dist files
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, flexdef.h, gen.c, main.c, misc.c, scan.l: Fixed to
+ buffer section 1 definitions
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: Fixed ANSI-C glitch with '%' operator
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Fixed mis-definition of ndlookup()
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.4 -> 2.4.1
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added install.sh, mkinstalldirs to distribution files
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Added Nathan Zelle, "promoted" Francois
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: only "realclean" removes flex dist depends on flex
+
+1993-11-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h, misc.c: myctoi takes char[] instead of Char[]
+
+1993-11-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: -a -> -Ca all_lower, all_upper -> work on char*
+
+1993-11-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added -Ca to bigcheck
+
+1993-11-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: -a -> -Ca; fixed help output
+
+1993-11-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c, flex.1: -a -> -Ca
+
+1993-11-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: all_lower, all_upper work on char*
+
+1993-11-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Fixed some casts now that yytext is always char* and never
+ unsigned char*
+
+1993-11-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Francois' tweaks
+
+1993-11-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * configure.in: AC_LN_S, AC_STDC_HEADERS (but not AC_ALLOCA)
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: fixed typo
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Don't remove dist directory
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Include liballoc.c in lint targets
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: lint tweak
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Added -l compression to bigcheck
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: permission tweaking for "dist"
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: more "dist" tweaks
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Changed "make dist" to use version.h, include scan.c
+ in initial dir copy
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: 2.4.1
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: Revised as per Francois Pinard
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * COPYING: flex.skel -> flex.skl
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Updated date of 2.4 release
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Removed manual & nroff output from distribution
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.4.1 release
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * configure.in: Initial revision
+
+1993-11-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Merge w/ 2.4.1 changes added "dist2" target
+
+1993-11-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * Makefile.in: Initial revision
+
+1993-11-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Removed #ifndef FILE protection from include of stdio
+
+1993-11-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Added Francois Pinard to distribution headache helpers
+
+1993-11-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Modified C++ scanners to get input a character at a time
+ for interactive scanners.
+
+1993-11-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Added YY_INTERACTIVE.
+
+1993-11-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Put definitions inside ()'s so we can test -l option for
+ "make bigcheck"
+
+1993-11-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Documented YY_INTERACTIVE.
+
+1993-11-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1, flex.skl, flexdef.h, gen.c, main.c, parse.y, scan.l: -l
+ lex compatibility flag
+
+1993-11-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Support for read()/fread() section 1 definitions precede
+ default macro definitions
+
+1993-11-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added use_read global
+
+1993-11-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Cleaner definition for yymore() Fixed string broken across
+ multiple lines
+
+1993-11-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Added -Cr
+
+1993-11-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: K&R declaration for check_char()
+
+1993-11-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Documented -Cr
+
+1993-11-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: No need to #undef before redefining prior to -Cr
+ documentation
+
+1993-11-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: Heavily massaged for 2.4
+
+1993-11-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Added Landon Noll to thanks.
+
+1993-11-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.4 release
+
+1993-11-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: 2.4 documentation
+
+1993-11-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Added global to remember -P prefix so it can be written in
+ -v summary. Alphabetized prefix generation, added yywrap
+
+1993-11-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * version.h: updated date for 2.4.0 :-(
+
+1993-10-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: Whitespace tweaking
+
+1993-10-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Use DEFAULT_CSIZE only if not using equivalence classes.
+
+1993-10-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Checkpoint prior to final 2.4 update
+
+1993-10-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Raw 2.4 changes
+
+1993-10-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: osfcn.h -> unistd.h
+
+1993-10-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added "static" to definition of yy_fatal_error as well
+ as fwd decl.
+
+1993-10-04 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added yy_fatal_error function.
+
+1993-10-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, gen.c: Got rid of (char *) casts of yytext, no longer
+ needed.
+
+1993-10-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: YY_CHAR -> char added YYText(), YYLeng()
+
+1993-10-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, gen.c: Minimized use of YY_CHAR
+
+1993-10-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Added "flex++" feature Minimized use of YY_CHAR
+
+1993-10-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Clarified help message for -S
+
+1993-10-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * libyywrap.c, version.h: Initial revision
+
+1993-10-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: If -+ used, output to lex.yy.cc
+
+1993-10-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h, flex.skl: Switched from FILE*'s to stream's
+
+1993-10-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added expand_nxt_chk() extern.
+
+1993-10-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added dynamic buffer growing. Added yyless() for
+ section 3.
+
+1993-10-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c, flexdef.h, gen.c, main.c: Added -a option for long-align.
+
+1993-10-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: formfeed no longer considered whitespace
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Nuked FILENAMESIZE
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: yyflexlexer.h -> FlexLexer.h minor portability tweak
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Added start condition to EOF trace output
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added YY_START changed yyFlexLexer to define yylex()
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Minor portability tweaks
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: Split into two classes, one fully abstract. yylex()
+ no longer abstract in yyFlexLexer
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: PC lint tweak
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: YYSTYPE #define'd to int
+
+1993-09-21 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: minor lint tweak
+
+1993-09-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * FlexLexer.h: Initial revision
+
+1993-09-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Delete prototypes for Unix system calls.
+
+1993-09-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c, dfa.c, ecs.c, gen.c, main.c, misc.c, nfa.c, parse.y,
+ scan.l, sym.c, tblcmp.c, yylex.c: nuked static RCS string
+
+1993-09-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: %array not allowed with C++ scanners
+
+1993-09-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Fixed bugs regarding %{%} code in section 2 prolog %array
+ not allowed with C++ scanners
+
+1993-08-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added C_plus_plus flag.
+
+1993-08-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: First version of C/C++ skeleton
+
+1993-08-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: yy_state_type declared earlier. Made a bunch of statics
+ only output if not -+
+
+1993-08-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Added -+ option, updated usage() output, rearranged some
+ generated code to come at the right point in the output for
+ yyflexlexer.h.
+
+1993-08-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Added %+/%-/%* to skelout()
+
+1993-08-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: EOF in section 2 prolog leads to section 0, not section 3
+
+1993-08-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: Dump promotion of EOF in section 2 to turn on section 3;
+ instead just treat it like a final EOF
+
+1993-08-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: yy_nxt table should be "const"
+
+1993-08-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Removed a lot of #ifdef chud "backtracking" -> "backing
+ up"
+
+1993-08-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: "backtracking" -> "backing up" got rid of time reports
+
+1993-08-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: "backtracking" -> "backing up" some portability tweaks
+ fixed to only call flexscan() when done if known to be in section 3
+
+1993-08-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: isascii() moved to flexdef.h nuked flex_gettime()
+
+1993-08-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Fixed bug with empty section 2
+
+1993-08-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: Chucked definition of isascii()
+
+1993-08-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: preserve yytext on input() bug fix when combining
+ yyless() with yymore() checkpoint prior to C++ option
+
+1993-08-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: "backtracking" -> "backing up"
+
+1993-07-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Fixed to not generate extra EOF's after reading one.
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Spit out definition of YY_CHAR early
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Some rearranging to make sure things get declared in the
+ right order
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: Some comment fixes as per Wilhelms
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Nuked #undef of yywrap, now that it's a function
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: Fixed bug with Z-a character classes as per Wilhelms
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: added check_char call in mkstate() to prevent bad xtion
+ chars
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Fixed some reallocation bugs, etc. as per Wilhelms
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added check_char(), readable_form()
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added #ifndef's around #define's to let user override
+ Moved a bunch of definitions prior to section 1
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: Wilhems bug fixes.
+
+1993-07-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c, misc.c: Added check_char()
+
+1993-06-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Changed to use yy_flex_alloc() and friends
+
+1993-06-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Added -P flag
+
+1993-06-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Fixed bug in lex % directives
+
+1993-06-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Modified to use yy_flex_alloc() and friends
+
+1993-06-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: Modified to use yy_flex_alloc()
+
+1993-06-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Modified to use yy_flex_alloc() and friends Moved some
+ globals earlier in the file to permit access in section 1
+
+1993-06-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: Got rid of code needed for %t
+
+1993-04-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c, dfa.c, ecs.c, flex.skl, flexdef.h, gen.c, libmain.c,
+ main.c, misc.c, nfa.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c:
+ Reformatting.
+
+1993-04-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Fixed bug in description of backtracking
+
+1993-04-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.3.8
+
+1993-04-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, main.c: %array support
+
+1993-04-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Added non-STDC clause for '\a'
+
+1993-04-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Fixed subtle problems regarding '*'s in comments
+ %pointer/%array match entire lines
+
+1993-04-05 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Added %array support
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: Finally updated email addr
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Mostly .LP -> .PP
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: [no log message]
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c, scan.l: A lot of tweaks ...
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: reallocate_character_array -> reallocate_Character_array
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Bug/lint fixes Modified to work with "action" array instead
+ of temp file
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: Fixed bug in 8-bit hashing
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: numerous bug fixes extra formatting of error/warning
+ messages added support of <*>, partial support for nested start
+ conditions
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * ecs.c: Remove %t cruft
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Beginning of %pointer/%array support
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: Added keeping track of which rules are useful fixed a
+ fencepost error in checking for scanners that require -8
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: Added checking for whether rules are useful modified to
+ work with internal "action" array
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Added internal "action" array, internal skeleton,
+ zero_out() in lieu of bzero
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: Fixed a bunch of fencepost errors in increasing tables.
+
+1993-02-06 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: -Wall fix
+
+1991-03-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Fixed out-of-bounds access bug; patch #7 for release 2.3
+
+1991-03-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Patch #7 for 2.3
+
+1990-10-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: fixed missing "rule_type" entry for end-of-buffer action
+
+1990-08-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Fixed yymore() but in not resetting yy_more_len
+
+1990-08-29 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Patch #6 for 2.3
+
+1990-08-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Patch #5
+
+1990-08-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: fixed comment in myesc()
+
+1990-08-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: fixed date in patch #4
+
+1990-08-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: patch #4
+
+1990-08-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: fixed hexadecimal escapes; added is_hex_digit()
+
+1990-08-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Patch #3
+
+1990-08-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, flexdef.h: changed to include <stddef.h> for __GNUC__
+
+1990-08-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.3 patch #2
+
+1990-08-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Another try at getting the malloc() definitions correct;
+ this time for g++, too
+
+1990-08-02 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, flexdef.h: fixed to declare malloc() and free() by hand
+ if __GNUC__
+
+1990-07-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Changed to get malloc definition in identical fashion
+ to that used by flex.skel
+
+1990-06-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: [no log message]
+
+1990-06-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Fixed bug in mini-scanner examle Fixed bug in YY_INPUT
+ redefinition yylineno defense reentrancy documentation Something
+ else which I forget.
+
+1990-06-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * COPYING, ccl.c, dfa.c, ecs.c, flexdef.h, gen.c, main.c, misc.c,
+ nfa.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c: 4.4 BSD copyright
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: Changed prolog to reflect 2.3 release.
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: pointed reader at Makefile instead of README for porting
+ considerations added Makefile comments: support for SCO Unix;
+ parameterization
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added DONT_HAVE_STDLIB_H and declarations of malloc()
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.3 changes
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: documentation on new features Comment regarding Ove's work
+ ^foo|bar difference between flex / lex yyin initialization
+ difference documented that yy_switch_to_buffer can be used in
+ yywrap() documented that # comments are deprecated
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: declared void functions as such added prototypes for
+ forward references changed to check for error status when closing
+ files
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: Added macro definition for isascii() if not already
+ present
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: declared void functions as such added prototypes for
+ forward references changed to use format_pinpoint_message where
+ appropriate
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: declared void functions as such changed to strip #
+ comments, as documented moved #undef of yywrap() to before include
+ of flexdef, so prototype doesn't get screwed up
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: introduced format_pinpoint_message() declared void
+ functions as such changed lone <<EOF>> to apply to all outstanding
+ start conditions
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c, tblcmp.c: declared void functions as such added prototypes
+ for forward references
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: declared void functions as such prototypes for forward
+ references shuffled around some routines to make the order perhaps a
+ little more logical changed memory references to use void* instead
+ of char*
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * libmain.c: Added declaration of arguments made yylex() a function
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: prototypes for forward references declared void functions
+ as such yy_flex_debug testing of error on file closes casts to void
+ for sprintf() and strcpy()
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added prototypes changed memory allocation routines to
+ deal with void*'s instead of char*'s some rearranging for VMS
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Added YY_USER_INIT Added yy_new_buffer() alias for
+ yy_create_buffer() fixed (hopefully) malloc declaration headaches
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * ecs.c: declared void functions as such declared void functions as
+ such
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: prototypes for forward references declared void functions
+ as such
+
+1990-05-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: Declared void functions as such
+
+1990-04-12 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: added fix for allowing yy_switch_to_buffer() in yywrap()
+
+1990-04-03 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: patch #3 - -I fix
+
+1990-03-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Changed generation of archaic "continue" to "goto
+ yy_find_action"
+
+1990-03-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Patch #2 changes
+
+1990-03-27 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: fixed fencepost errors with yy_buf_size and detecting
+ NUL's
+
+1990-03-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: [no log message]
+
+1990-03-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: g++ tweaks
+
+1990-03-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: Changes for Patch #1.
+
+1990-03-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: fix for g++
+
+1990-03-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: minor typos and formatting changes. Removed BITNET
+ address.
+
+1990-03-23 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: nuked BITNET address.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: 2.2 README
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: USG alias.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added USG alias for SYS_V
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * : [no log message]
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Tweaks for lint and C++
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: -ll => -lfl
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: 2.2 changes
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Changed to use YY_BUFFER_STATE everywhere.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: [no log message]
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: "associated rules" changed to "associated rule line
+ numbers".
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: cast added to malloc() call to keep lint happy.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: Fixed handling of premature EOF's.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: Removed declaration of malloc()
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Removed malloc() declaration. Added detection of EOF in
+ actions.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: Rules rewritten so '/' and '$' parsed correctly.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: Corrected line numbers for continued actions.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Removed declarations of malloc() and realloc().
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Summary of generation flags. Minor -8 tweaks.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: full support for -d
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: defines for malloc() and realloc() conditional defines
+ for abs(), min(), and max()
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Many multiple-buffer additions.
+
+1990-03-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: -8 tweaks.
+
+1990-03-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Proto hacks. NUL hacks. Debugging hacks. C++ hacks.
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * : RCS won't let me unedit! gets "Missing access list"
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: Minor tweaks for NUL's.
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * : no changes -- had checked out for testing smaller read buffer
+ sizes
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: hack for NUL's.
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Hack to cshell for NUL's.
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: NUL's. -8
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: NUL's.
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: NUL's. 8-bit chars.
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: NUL's; indenting
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: more thrashing around with NUL's
+
+1990-03-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: removed NUL hack
+
+1990-03-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: Added <<EOF>> token
+
+1990-03-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * ecs.c, flexdef.h: Tweaks for NUL chars.
+
+1990-03-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c, gen.c, main.c, misc.c, parse.y, scan.l, tblcmp.c: Tweaks
+ for NUL chars.
+
+1990-03-14 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: Tweaks for handling NUL's.
+
+1990-02-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: [no log message]
+
+1990-02-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Changed .so options.man to inlined version since flex.1
+ will have a different (shorter) options description.
+
+1990-02-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: [no log message]
+
+1990-02-28 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: [no log message]
+
+1990-02-26 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: [no log message]
+
+1990-02-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: [no log message]
+
+1990-02-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.1: Initial revision
+
+1990-01-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Restored EOB accepting list for REJECT. Second try at 2.2
+ Release.
+
+1990-01-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Added missing ',' in error message. 2.2 Release, second
+ try.
+
+1990-01-16 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: 8-bit char support. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: 8-bit char support. Arbitrary indented/%{} code allowed
+ in section 2. \x escapes. %t support. Minor POSIX-compliance
+ changes. BEGIN(0) -> BEGIN(INITIAL). yywrap() and set_input_file()
+ for multiple input files. C_COMMENT_2 removed. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: 8-bit char support. SYS_V / Atari portability fixes.
+ Removed generated array names. CSIZE now only defined if not
+ already defined. Added "csize" global. Added "input_files",
+ "num_input_files", and "program_name" globals. %t support globals.
+ 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Removed unused EOB_accepting_list array. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Bug in -F table generation fixed. 8-bit char support.
+ Hardwired generated array names. "const"'s added to generated code.
+ Fixed yymore() / trailing context bug.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: 8-bit char support. Error-message pinpointing. 2.2
+ Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Unsigned char support. %t support. Removed hard-wiring
+ of program name "flex". -c changed to -C; -c now deprecated. -n
+ added. :-( Multiple input files. SYSV tmpnam() use. Removed old
+ #define's from output. Identified error messages w/ filename and
+ line. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: Unsigned char support. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: Removed redundant test. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: Unsigned char support. \x support. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: 8-bit char support. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: C++ support. Turbo-C support. 8-bit char support.
+ yyleng is an int. unput() callable in section 3. yymore hacks.
+ yyrestart() no longer closes stdin. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * ecs.c: %t support. 8-bit/unsigned char support. 2.2 Release.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: %t hacks. minor cosmetics. 2.2 Relase.
+
+1990-01-15 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: Changes for unsigned/8-bit chars. 2.2 Release.
+
+1990-01-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * libmain.c: Initial revision
+
+1989-12-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: removed gratuitous trailing context code
+
+1989-12-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: made -c<compression flags> case-sensitive
+
+1989-12-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: unput() bug fix
+
+1989-12-30 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: [no log message]
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: changed to not use '|' and trailing context combo so users
+ can test using -F ...
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: made trailing context combined with '|' warning always
+ come out
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: [no log message]
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * COPYING: Initial revision
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, README, main.c: [no log message]
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: [no log message]
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, README, main.c: [no log message]
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * : Beta release
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, main.c: [no log message]
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl, flexdef.h, gen.c, misc.c, nfa.c, parse.y, scan.l, sym.c:
+ 2.0.1 beta
+
+1989-06-20 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: [no log message]
+
+1989-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: fixsed bug with -I and backtracking
+
+1989-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Cleaned up forward declarations of yyunput() and input()
+
+1989-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: Split copyright string.
+
+1989-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: Split copyright string. Added check for empty machine in
+ dupmachine().
+
+1989-05-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c, dfa.c, ecs.c, gen.c, main.c, misc.c, scan.l, sym.c,
+ tblcmp.c, yylex.c: Split copyright string into two to avoid tempting
+ fate with \<newline> sequences ...
+
+1989-05-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: updated for 2nd release Beta test added RCS header
+
+1989-05-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: removed static char copyright
+
+1989-05-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added BSD copyright notice. Removed
+ FAST_SKELETON_FILE.
+
+1989-05-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: added BSD copyright notice. Removed references to
+ FAST_SKELETON_FILE.
+
+1989-05-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * ecs.c, gen.c, nfa.c: Added BSD copyright notice
+
+1989-05-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c, dfa.c, misc.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c:
+ added BSD copyright notice
+
+1989-05-24 Vern Paxson <vern@ee.lbl.gov>
+
+ * flex.skl: Initial revision
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: renamed accnum to num_rules
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: moved table generation code to gen.c moved ntod() to
+ dfa.c
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: the most piddling format change imaginable
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: changed to look for yymore, REJECT, %used and %unused
+ removed gross magic for dealing with section 3
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c, parse.y: changes for variable trailing context
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: added all_lower() and all_upper()
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: added checking for features being Really used
+ backtracking, performance reports misc. cleanup
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: major overhaul for merged skeleton
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: a zillion changes/additions/cleanups
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: added backtrack report added checking for dangerous
+ trailing context considerable minor cleanup
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: list_character_set() modified to take a FILE to write to
+ ...
+
+1989-05-19 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: updated for beta release
+
+1988-11-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: added -p flag generation of #define's for scanner
+
+1988-11-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: Added END_OF_BUFFER_ACTION and bol_needed
+
+1988-11-25 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: added ntod()
+
+1988-05-09 Vern Paxson <vern@ee.lbl.gov>
+
+ * gen.c: Initial revision
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: RCS header changed display style of non-printings from ^x
+ to \0xx
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: RCS header MAX_XTIONS_FOR_FULL_INTERIOR_FIT ->
+ MAX_XTIONS_FULL_INTERIOR_FIT made back-tracking accepting number be
+ one greater than the last legit accepting number, instead of 0.
+ This way, end-of-buffer can take 0 and no negative accepting numbers
+ are needed. added genftbl() changed last ftl references to C added
+ check for UNSIGNED_CHAR's added back-track logic to make_tables()
+ added checking and report for backtracking fixed fence-post error
+ with onesp stack pointer
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: RCS header changed "entry" to "sym_entry" to avoid conflict
+ with old keyword
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: RCS header removed \^ from ESCSEQ
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: RCS header bug fix due to missing default rule, could
+ have to backtrack when backtrack variables haven't been set up
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: RCS ident yy_cp, yy_bp support name shortenings assoc_rule
+ support
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: RCS header check before malloc()'ing for 16 bit overflow
+ MS_DOS, VMS ifdef's removed commented-out \^ code removed FTLSOURCE
+ code added readable_form()
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: Added RCS header removed revision history misc additions
+ and fixes to globals VMS ifdef's backtracking statistics -p flag
+ name shortenings
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: removed revision history added RCS header added VMS,
+ MS_DOS ifdef's removed DEFAULT_ACTION, changed END_OF_BUFFER_ACTION
+ shortened MAX_XTIONS_FOR_FULL_INTERIOR_FIT to
+ MAX_XTIONS_FULL_INTERIOR_FIT added MAX_ASSOC_RULES added
+ performance_report, assoc_rule gloabls added num_backtracking gloabl
+ shortened allocate_integer_pointer_array,
+ reallocate_integer_pointer_array
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * ecs.c: added RCS id added PROCFLG to avoid assumption of signed
+ char's
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: added RCS id added check_for_backtracking() added
+ dump_associated_rules() added dump_transitions() shortened
+ reallocate_integer_pointer_array to reallocate_int_ptr_array removed
+ some dfaacc_{state,set} abuses
+
+1988-05-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: Added list_character_set()
+
+1988-05-07 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: added RCS id
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: minor tweaks
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: forgot sh flex.shar
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * README: final tweaking
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: removed minor lint fluff
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS: [no log message]
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * NEWS, README: Initial revision
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * yylex.c: added identifying comment. changed to include "parse.h"
+ instead of "y.tab.h"
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * tblcmp.c: Changed name from flexcmp.c -> tblcmp.c fixed misc.
+ typos made generating ec tables be a routine
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * sym.c: changed name from flexsym.c -> sym.c revamped calling
+ sequences, etc., for extended table struct definition which now has
+ both char * and int fields.
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * scan.l: Changed name from flexscan.l -> scan.l fixed bug in
+ <RECOVER> added block comments between rules.
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * parse.y: changed name from flexparse.y -> parse.y added start
+ condition "INITIAL" made a{3} have "variable length"
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * nfa.c: changed name from flexnfa.c -> nfa.c corrected some typos.
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * misc.c: changed name from flexmisc.c -> misc.c
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * main.c: fixed bug causing core dumps if skeleton files could not
+ be opened. Added -cF. Added fullspd to be equivalent to fulltbl
+ for which options is cannot be mixed with.
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * flexdef.h: fixed typos, enhanced symbol table definition.
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * ecs.c: changed name from flexecs.c to ecs.c
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * dfa.c: changed name from flexdfa.c to dfa.c
+
+1988-04-10 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c: changed name from flexccl.c -> ccl.c
+
+1988-02-13 Vern Paxson <vern@ee.lbl.gov>
+
+ * ccl.c, dfa.c, ecs.c, flexdef.h, main.c, misc.c, nfa.c, parse.y,
+ scan.l, sym.c, tblcmp.c, yylex.c: Beta Release.
+
+1987-11-08 Vern Paxson <vern@ee.lbl.gov>
+
+ * Initial revision
+
diff --git a/usr.bin/lex/FlexLexer.h b/usr.bin/lex/FlexLexer.h
index 3fd7f63c16c..43ec39031e9 100644
--- a/usr.bin/lex/FlexLexer.h
+++ b/usr.bin/lex/FlexLexer.h
@@ -1,9 +1,10 @@
-/* $OpenBSD: FlexLexer.h,v 1.6 2004/02/03 21:20:17 espie Exp $ */
+/* $OpenBSD: FlexLexer.h,v 1.7 2015/11/19 19:43:40 tedu Exp $ */
-// $Header: /cvs/OpenBSD/src/usr.bin/lex/FlexLexer.h,v 1.6 2004/02/03 21:20:17 espie Exp $
+// $Header: /cvs/OpenBSD/src/usr.bin/lex/FlexLexer.h,v 1.7 2015/11/19 19:43:40 tedu Exp $
+// -*-C++-*-
// FlexLexer.h -- define interfaces for lexical analyzer classes generated
-// by flex
+// by flex
// Copyright (c) 1993 The Regents of the University of California.
// All rights reserved.
@@ -11,24 +12,24 @@
// This code is derived from software contributed to Berkeley by
// Kent Williams and Tom Epperly.
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-//
-// 1. Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// Neither the name of the University nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-// IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-// PURPOSE.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+
+// Neither the name of the University nor the names of its contributors
+// may be used to endorse or promote products derived from this software
+// without specific prior written permission.
+
+// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+// IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE.
// This file defines FlexLexer, an abstract class which specifies the
// external interface provided to flex C++ lexer objects, and yyFlexLexer,
@@ -51,9 +52,13 @@
// Never included before - need to define base class.
#define __FLEX_LEXER_H
-
#include <iostream>
+# ifndef FLEX_STD
+# define FLEX_STD std::
+# endif
+
extern "C++" {
+
struct yy_buffer_state;
typedef int yy_state_type;
@@ -61,20 +66,20 @@ class FlexLexer {
public:
virtual ~FlexLexer() { }
- const char* YYText() { return yytext; }
- int YYLeng() { return yyleng; }
+ const char* YYText() const { return yytext; }
+ int YYLeng() const { return yyleng; }
virtual void
yy_switch_to_buffer( struct yy_buffer_state* new_buffer ) = 0;
virtual struct yy_buffer_state*
- yy_create_buffer( std::istream* s, int size ) = 0;
+ yy_create_buffer( FLEX_STD istream* s, int size ) = 0;
virtual void yy_delete_buffer( struct yy_buffer_state* b ) = 0;
- virtual void yyrestart( std::istream* s ) = 0;
+ virtual void yyrestart( FLEX_STD istream* s ) = 0;
virtual int yylex() = 0;
// Call yylex with new input/output sources.
- int yylex( std::istream* new_in, std::ostream* new_out = 0 )
+ int yylex( FLEX_STD istream* new_in, FLEX_STD ostream* new_out = 0 )
{
switch_streams( new_in, new_out );
return yylex();
@@ -82,8 +87,8 @@ public:
// Switch to new input/output streams. A nil stream pointer
// indicates "keep the current one".
- virtual void switch_streams( std::istream* new_in = 0,
- std::ostream* new_out = 0 ) = 0;
+ virtual void switch_streams( FLEX_STD istream* new_in = 0,
+ FLEX_STD ostream* new_out = 0 ) = 0;
int lineno() const { return yylineno; }
@@ -98,29 +103,35 @@ protected:
};
}
-#endif
+#endif // FLEXLEXER_H
#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce)
// Either this is the first time through (yyFlexLexerOnce not defined),
// or this is a repeated include to define a different flavor of
-// yyFlexLexer, as discussed in the flex man page.
+// yyFlexLexer, as discussed in the flex manual.
#define yyFlexLexerOnce
+extern "C++" {
+
class yyFlexLexer : public FlexLexer {
public:
// arg_yyin and arg_yyout default to the cin and cout, but we
// only make that assignment when initializing in yylex().
- yyFlexLexer( std::istream* arg_yyin = 0, std::ostream* arg_yyout = 0 );
+ yyFlexLexer( FLEX_STD istream* arg_yyin = 0, FLEX_STD ostream* arg_yyout = 0 );
virtual ~yyFlexLexer();
void yy_switch_to_buffer( struct yy_buffer_state* new_buffer );
- struct yy_buffer_state* yy_create_buffer( std::istream* s, int size );
+ struct yy_buffer_state* yy_create_buffer( FLEX_STD istream* s, int size );
void yy_delete_buffer( struct yy_buffer_state* b );
- void yyrestart( std::istream* s );
+ void yyrestart( FLEX_STD istream* s );
+
+ void yypush_buffer_state( struct yy_buffer_state* new_buffer );
+ void yypop_buffer_state();
virtual int yylex();
- virtual void switch_streams( std::istream* new_in, std::ostream* new_out );
+ virtual void switch_streams( FLEX_STD istream* new_in, FLEX_STD ostream* new_out = 0 );
+ virtual int yywrap();
protected:
virtual int LexerInput( char* buf, int max_size );
@@ -131,7 +142,7 @@ protected:
int yyinput();
void yy_load_buffer_state();
- void yy_init_buffer( struct yy_buffer_state* b, std::istream* s );
+ void yy_init_buffer( struct yy_buffer_state* b, FLEX_STD istream* s );
void yy_flush_buffer( struct yy_buffer_state* b );
int yy_start_stack_ptr;
@@ -146,10 +157,8 @@ protected:
yy_state_type yy_try_NUL_trans( yy_state_type current_state );
int yy_get_next_buffer();
- std::istream* yyin; // input source for default LexerInput
- std::ostream* yyout; // output sink for default LexerOutput
-
- struct yy_buffer_state* yy_current_buffer;
+ FLEX_STD istream* yyin; // input source for default LexerInput
+ FLEX_STD ostream* yyout; // output sink for default LexerOutput
// yy_hold_char holds the character lost when yytext is formed.
char yy_hold_char;
@@ -167,6 +176,12 @@ protected:
// instead of setting up a fresh yyin. A bit of a hack ...
int yy_did_buffer_switch_on_eof;
+
+ size_t yy_buffer_stack_top; /**< index of top of stack. */
+ size_t yy_buffer_stack_max; /**< capacity of stack. */
+ struct yy_buffer_state ** yy_buffer_stack; /**< Stack as an array. */
+ void yyensure_buffer_stack(void);
+
// The following are not always needed, but may be depending
// on use of certain flex features (like REJECT or yymore()).
@@ -189,4 +204,7 @@ protected:
int yy_prev_more_offset;
};
-#endif
+}
+
+#endif // yyFlexLexer || ! yyFlexLexerOnce
+
diff --git a/usr.bin/lex/Makefile b/usr.bin/lex/Makefile
index c524e7c28a1..1c2f3905878 100644
--- a/usr.bin/lex/Makefile
+++ b/usr.bin/lex/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.11 2013/06/18 17:38:46 robert Exp $
+# $OpenBSD: Makefile,v 1.12 2015/11/19 19:43:40 tedu Exp $
#
# By default, flex will be configured to generate 8-bit scanners only if the
# -8 flag is given. If you want it to always generate 8-bit scanners, add
@@ -11,33 +11,37 @@
#
# To bootstrap lex, cp initscan.c to scan.c and run make.
-PROG= lex
-CFLAGS+=-I. -I${.CURDIR}
-SRCS= ccl.c dfa.c ecs.c gen.c main.c misc.c nfa.c parse.c sym.c tblcmp.c \
- yylex.c
-OBJS+= scan.o skel.o
-CLEANFILES+=parse.c parse.h scan.c skel.c y.tab.c y.tab.h
-LDADD= -ll
-DPADD= ${LIBL}
+PROG= lex
+CFLAGS+=-I. -I${.CURDIR} -DHAVE_CONFIG_H
+SRCS= buf.c ccl.c dfa.c ecs.c filter.c gen.c main.c misc.c \
+ nfa.c options.c parse.y regex.c scan.l scanflags.c \
+ scanopt.c skel.c sym.c tables.c tables_shared.c \
+ tblcmp.c yylex.c
-MAN = flex.1
-
-LINKS= ${BINDIR}/lex ${BINDIR}/flex \
- ${BINDIR}/lex ${BINDIR}/flex++
-MLINKS= flex.1 lex.1 flex.1 flex++.1
+CLEANFILES+=skel.c parse.h
+LDADD+=-lm
-parse.h parse.c: parse.y
- ${YACC} -d ${.ALLSRC}
- mv y.tab.c parse.c
- mv y.tab.h parse.h
+MAN = flex.1
-skel.c: flex.skl mkskel.sh
- sh ${.CURDIR}/mkskel.sh ${.CURDIR}/flex.skl > skel.c
+LINKS= ${BINDIR}/lex ${BINDIR}/flex \
+ ${BINDIR}/lex ${BINDIR}/flex++
+MLINKS= flex.1 lex.1
-scan.c: scan.l
- flex -t -p ${.CURDIR}/scan.l > scan.c
+VERSION="2.5.39"
-scan.o: parse.c
+# Our yacc is too old to compile parse.y; use bootstrapped parse.c instead
+parse.h parse.c: parse.y
+ cp ${.CURDIR}/initparse.c parse.c
+ cp ${.CURDIR}/initparse.h parse.h
+
+skel.c: flex.skl mkskel.sh flexint.h tables_shared.h
+ sed -e 's/m4_/m4postproc_/g' -e 's/m4preproc_/m4_/g' \
+ ${.CURDIR}/flex.skl | m4 -I${.CURDIR} -P \
+ -DFLEX_MAJOR_VERSION=`echo ${VERSION} | cut -f 1 -d .` \
+ -DFLEX_MINOR_VERSION=`echo ${VERSION} | cut -f 2 -d .` \
+ -DFLEX_SUBMINOR_VERSION=`echo ${VERSION} | cut -f 3 -d .` | \
+ sed -e 's/m4postproc_/m4_/g' | \
+ sh ${.CURDIR}/mkskel.sh > ${.TARGET}
includes:
.if !exists(${DESTDIR}/usr/include/g++)
diff --git a/usr.bin/lex/NEWS b/usr.bin/lex/NEWS
new file mode 100644
index 00000000000..aa30e43ddad
--- /dev/null
+++ b/usr.bin/lex/NEWS
@@ -0,0 +1,532 @@
+This is the file NEWS for the flex package. It records user -visible
+changes between releases of flex.
+
+See the file COPYING for copying conditions.
+
+* flex version 2.5.39
+
+** no user visible changes in this release
+
+* version 2.5.38 released 2014-02-14
+
+** internationalization
+
+*** add sr translation from the translation project
+
+*** update da, es, ko, nl, pt_BR, ro, ru, sv, tr, vi, zh_CN translations from the translation project
+
+*** rename zh_tw to its proper zh_TW name
+
+* version 2.5.37 released 2012-08-03
+
+** Import flex into git. See
+ git://flex.git.sourceforge.net/gitroot/flex/flex.
+
+** Fix make install target to not fail when the flex++ program is
+ already installed
+
+** New translations from the translation project: de, fi, pl, vi
+
+* version 2.5.36 released 2012-07-20
+
+** various portability fixes that quiet compiler warnings on 64-bit
+ hosts
+
+** various manual fixes, including correcting the name of a %option and
+ updating some simple examples to use ANSI C syntax
+
+** various bug fixes that prevent certain error conditions from
+ persisting when they should not persist
+
+** improvements to the test suite so it behaves better when linking
+ compiled files
+
+** new translations from the translation project: ca, da, es, fi, fr,
+ ga, ko, pt_br, ro, ru, sv, tr, zh_cn
+
+** the flex distribution is now built with automake 1.10.1 and automake
+ 2.61
+
+* version 2.5.35 released 2008-02-26
+
+** fixed bug that prevented flex from accepting certain comments in the
+ scanner file (resolves bugs #1849809 and #1849805)
+
+** fix bug that prevented headers for all functions from being generated
+ (resolves bug #1628314)
+
+** change yy_size_t to be size_t (resolves bug #1849812)
+
+** new de, nl, pl, pt_br, vi translations from the translation project
+
+* version 2.5.34 released 2007-12-12
+
+** introduce yylex_init_extra; see the manual for details
+
+** introduce %option extra-type="your_type *" (resolves bug #1744505)
+
+** The flex program now parses multiple short concatenated options (resolves bug
+ #1619820). Thanks to Petr Machata of Red Hat on this issue.
+
+** better checking after yyalloc/yyrealloc (resolves bug #1595967)
+
+** flex now provides for a libfl_pic.a compiled with position
+ independent code. Particularly useful when including a flex scanner
+ in a shared library and with more recent versions of gcc. Thanks to the Debian project for the idea.
+
+** SourceForge feature request #1658379: Expose YY_BUF_SIZE in the
+ header file.
+
+** flex better escapes filenames with special characters in them
+ (resolves bug #1623600)
+
+** a memory leak was plugged(resolves bug #1601111)
+
+** pattern language expanded; see the manual for details on the below
+ highlights
+
+*** pattern options added to specify patterns as case-insensitive or
+ case-sensitive
+
+*** pattern options to specify whether the "." character should match
+ the newline character
+
+*** pattern options added to allow ignoring of whitespace in patterns
+
+*** POSIX character classes may be negated in patterns
+
+*** patterns may now use set difference, union operators
+
+** the manual now contains an appendix listing various common patterns
+ which may be useful when writing scanners
+
+** some memory leaks were removed from the C++ scanner (but the C++
+ scanner is still experimental and may change radically without
+ notice)
+
+** c++ scanners can now use yywrap
+
+** added new unit test for c++ and yywrap
+
+** portability fixes to some unit tests
+
+** flex man page and flex manual in pdf now distributed in the flex
+distribution
+
+** new ca, vi, ga, nl translations from the translation project
+
+** flex no longer comes with an rpm spec file
+
+** flex development now happens with automake 1.9.6
+
+* version 2.5.33 released 2006-2-20
+
+** all flex resources are now to be found from the website at
+ http://flex.sourceforge.net/
+
+** there was no release 2.5.32 published
+
+** numerous bug and security fixes
+
+** new nl, vi, sv, ro, po, ga, ca, fr, tr translations from the translation project
+
+** upgrade to use gettext 0.12 (this now makes the "pdf" and "ps"
+ targets in the build system able to be run successfully)
+
+* version 2.5.31 released 2003-4-1
+
+** remove --enable-maintainer-mode configure option; none of the
+ Makefiles were using it and it can be unduely confusing
+
+* version 2.5.30 released 2003-4-1
+
+** yylineno is per-buffer in reentrant scanners
+
+** added %top directive for placing code at the top of the generated
+ scanner; see manual for details
+
+** flex now uses m4 to generate scanners; while this means that
+ scanners are more readable, it means that flex requires m4 to be
+ installed; see manual for details
+
+* version 2.5.29 released 2003-3-5
+
+** Automatic stack management for multiple input buffers in C and C++ scanners
+
+** moved the flex documentation to a new doc/ subdirectory
+
+** cleanups to the yy namespace
+
+* version 2.5.28 released 2003-2-12
+
+** flex is now hosted at sourceforge
+
+** Fixed trailing slash bug in YY_INPUT macro def
+
+** Flex now warns if always-interactive is specified with fast or full
+
+* version 2.5.27 released 2003-1-21
+
+** flex now works with recent bison versions
+
+** new pt_br translation from the translation project
+
+* version 2.5.26 released 2003-1-14
+
+** Fixed table deserialization bug on big-endian archs. Patch sent from Bryce Nichols <bryce@bnichols.org>
+
+** yyleng has proper declarations now; this caused flex to generate
+ unusable scanners for some programs
+
+** the flex distribution now includes a spec file suitable for use
+ with rpm
+
+** some more c++ fixes
+
+** new es translation from the translation project
+
+** slight tweeks to the flex_int*_t types
+
+** flex now warns about pattern ranges that might be ambiguous when
+ generating a case-insensitive scanner
+
+
+* version 2.5.25 released 2002-12-2
+
+** flex now uses flex_int*_t types. For C99 systems, they are just the
+ int*_t types; for non-C99 systems, we just make some typedefs
+
+** new pt_br translation from the translation project
+
+* version 2.5.24 released 2002-11-25
+
+* more portability fixes
+
+** the manual continues to be updated and edited, but it's still got a
+ ways to go
+
+** it is possible to have multiple c++ scanners in the same program again
+
+** new turkish translation from the translation project
+
+* version 2.5.23 released 2002-10-21
+
+** more portability fixes
+
+** the manual includes a title page and a table-of-contents when printed
+
+** the test suite can be run with "make check" from the top-level
+ directory
+
+** configure now accepts the --enable-maintainer-mode option
+
+** gettext functionality is now only available externally
+
+** the constant FLEX_BETA is defined if flex is a beta release
+
+** the script create-test was not included in the distribution and it
+ should have been
+
+* version 2.5.22 released 2002-10-10
+
+** more portability fixes around how we get ahold of the integral
+ types; there is a constant FLEX_NEED_INTEGRAL_TYPE_DEFINITIONS
+ which you should define if you don't have the <inttypes.h> header
+ file (after you complain to your C vendor for not providing a
+ reasonable C environment)
+
+** more test suite cleanups; in particular, the test suite should run
+ correctly when build from a different directory
+
+** upgraded automake to 1.7 and consequently autoconf to 2.54; this
+ means, among other things, that there is some support for
+formatting the manual in postscript and pdf in the distributed
+ Makefile.in (and therefore in the Makefile built by configure)
+
+** the flex.1 manpage is generated by help2man; (this has been true
+ for quite a while but was not listed here)
+
+** flex now includes three defined constants to indicate which version
+ of flex generated a scanner (YY_FLEX_{MAJOR,MINOR,SUBMINOR}_VERSION)
+
+** flex tries its best to output only the relevant portions of the
+ skeleton when generating a scanner, thus avoiding as much
+ conditional compilation as possible
+
+* version 2.5.21 released 2002-9-17
+
+** one of the tests in the test suite broke the dist target
+
+* version 2.5.20 released 2002-9-16
+
+** A flex scanner has the ability to save the DFA tables to a file,
+ and load them at runtime when needed; see the manual for details
+
+** Added %option bison-bridge (--bison-bridge)
+
+** Removed %option reentrant-bison/--reentrant-bison/-Rb
+
+** yylineno is present in all scanners; Modified nasty performance
+ penalty warning with yylineno in documentation
+
+** test-table-opts is now run last in the test suite because it's so fat
+
+** flex can, to some extent, diagnose where internal problems occur
+
+** new translations from the translation project: fr, ca, de, ru, sv
+
+**Flex generates C99 defs now; see YY_TRADITIONAL_FUNC_DEFS in the
+ manual if that's not a good thing for you
+
+* version 2.5.19 released 2002-9-5
+
+** prevent segfault on input lines which are longer than the allocated
+ space (problem report from Manoj Srivastava
+ <srivasta@golden-gryphon.com>)
+
+** Changed option 'header' to 'header-file'
+
+* version 2.5.18 released 2002-9-4
+
+** portability fixes for integer constants and in the way the test
+ suite reports its results
+
+** the test for bison was reporting bison missing when it was, in
+ fact, found
+
+** if we don't find GNU indent, we're more careful when we're not
+ finding it
+
+* version 2.5.17 released 2002-8-29
+
+** more portability fixes
+
+** updated config.sub and config.guess
+
+** flex is indented by GNU indent (this was done earlier but not
+ explicitly documented)
+
+* version 2.5.16 released 2002-8-28
+
+** c++ scanners compile again
+
+** there is now an indent target in the top-level Makefile; configure
+ checks for GNU indent which is required for proper operation of the
+ indent target
+
+** some more portability fixes were made
+
+** %options and invocation sections of manual merged
+
+** a c++ test was added to the test suite
+
+** we're trying to clean up more files in the test suite's make clean
+ targets
+
+* version 2.5.15 released 2002-8-21
+
+** reject-state buffer is now dynamically allocated and REJECT buffer
+ variables are reentrant-safe
+
+** manual now discusses memory usage
+
+** skeleton now processed by m4 before mkskel.sh; (this only matters
+ if you want to change the skeleton or if you're doing flex development)
+
+** zh_cn translation added from translation project
+
+** a bug that caused a segfault has now been fixed
+
+** the test suite now respects the usual CFLAGS, etc. variables
+
+** removed some warnings which some tests trigggered with the -s option
+
+** the flex-generated header file now tries to be smarter about
+ conditionally including start conditions
+
+** tables code omitted from generated scanner when not used
+
+* version 2.5.14 released 2002-8-15
+
+** the tests using the reentrant c scanner as c++ were reworked
+ slightly to be sure that the c++ was enforced
+
+** de translation now included in the distribution
+
+** various portability fixes regarding nls support, c++ include
+ headers, etc.
+
+* version 2.5.13 released 2002-8-15
+
+** the header file output with %option header is now much smaller
+
+** Fixed type mismatch in printf in scanner skeleton
+
+** yylex_init now reports errors
+
+* version 2.5.12 released 2002-8-8
+
+** updated gettext support to 0.11.5
+
+** new fr translation from the translation project
+
+** bison is no longer needed to build flex; If you are building flex
+ from a release (i.e., not from a cvs snapshot), then you don't need
+ to have a pre-built lex around either (unless you modify scan.l, of
+ course); (This has been true for some time, but was not mentioned
+ here.)
+
+* version 2.5.11 released 2002-7-31
+
+** Fixed bug where yyless did not consider yylineno
+
+** the yylineno performance hit is now gone
+
+** fixed some typos in the manual and we now include texinfo.tex in
+ the distribution
+
+** traditional prototypes output for C scanners, controlled by a
+ preprocessor symbol; see documentation for details
+
+* version 2.5.10 released 2002-7-24
+
+** yy_globals renamed to yyscanner and yy_globals_t renamed to
+ yy_guts_t
+
+** added dist-bzip2 option to Makefile.am so we now produce a bzip2'd
+ archive in addition to the standard gzip archive
+
+* version 2.5.9
+
+** new tests in test suite: test-mem-{nr,r}, test-posix,
+ test-posixly-correct, test-debug-{nr,r}
+
+** made changes to work with gcc-3.2 development code
+
+** ability to choose which memory functions are used in flex
+
+** new yylex_destroy() function for the non-reentrant scanner
+
+** new handling of POSIXLY_CORRECT environment variable
+
+** the test suite now has its copyrights explicitly described
+
+** new ca, de, fr, ru, sv, tr translations
+
+* version 2.5.8
+
+** a new --posix option generates scanners with posix-style abc{1,3}
+ compatible parsing, see manual for the screwy details
+
+* version 2.5.7
+
+** configure.in now includes a call to AC_PREREQ to enforce the
+ requirement for autoconf at least 2.50 (This only effects you if
+ you're doing flex development.)
+
+** configure now uses autoconf's versioning information and configure
+ --help reports the bug-reporting address for flex
+
+** test suite now only reports success versus failure; reporting
+ skipped is problematic under the current setup
+
+** compilation with --disable-nls now works
+
+** flex can now be built in a separate directory
+
+* version 2.5.6
+
+** gettext support added (from gettext 0.11)
+
+*** translations for ca, da, de, es, fr, ko, ru, sv, tr included
+
+** distribution now built under automake 1.6 and autoconf 2.53
+
+** command-line option parsing happens differently now:
+
+*** Added long option parsing
+
+*** Options -n and -c, previously deprecated, now simply do nothing
+
+*** Options are now parsed left to right
+
+** added a number of new options
+
+*** All positive %options are now accessible from the command line
+
+*** Added option -D, to define a preprocessor symbol
+
+*** Added option --header=FILE to specify a C .h file to generate
+
+*** added option --yywrap to call yywrap on EOF
+
+*** added option --yylineno to track line count in yylineno
+
+*** --yyclass=NAME name of C++ class when generating c++ scanners
+
+*** for long option names which are associated with existing short
+options, see accompanying documentation
+
+*** new %option nounistd or command-line --nounistd added to prevent
+ flex from generating #include <unistd.h> on systems that don't
+ have that include file
+
+** Support for reentrant C scanners has been added
+
+*** Updated the manual with the new reentrant API
+
+*** Two new options %option reentrant (-R) and
+%option reentrant-bison (-Rb)
+
+*** All globals optionally placed into struct yyglobals_t
+
+*** All access to globals replaced by macro invocations
+
+*** All functions optionally take one additional
+argument, yy_globals
+
+*** New style for invoking reentrant scanner:
+yylex_init(void** scanner );
+yylex( scanner );
+yylex_destroy( scanner );
+
+*** Added get/set functions for members of struct yy_globals_t
+e.g., yyget_text, yyget_leng, etc
+
+*** Prefix substitution added for new functions
+
+*** Macro shortcuts to the lengthy get/set functions
+provided for use in actions, e.g., yytext, yyleng, etc
+
+*** Arbitrary, user-defined data, "yyextra", may be added to scanner
+
+** %option nomain no longer implies %option yywrap
+But the inverse is still true
+
+** Developer test suite added
+
+*** TESTS/ directory has been added. Users can
+'make test' in the TESTS directory to execute the test suite
+
+** Support for bison variables yylval and yylloc added
+
+** automake support for the build process
+
+** manual is now in texinfo/info format
+
+*** flex.1 removed from distribution
+
+** flex no longer generates C-language scanners with C++-style
+ comments
+
+** flex now generates scanners in c++ which are compatible with
+ recent c++ compilers
+
+** flex input scanner now recognizes '\r' as an EOL character
+
+See the file ONEWS for changes in earlier releases.
+
+Local Variables:
+mode: text
+mode: outline-minor
+end:
diff --git a/usr.bin/lex/ONEWS b/usr.bin/lex/ONEWS
new file mode 100644
index 00000000000..33415772185
--- /dev/null
+++ b/usr.bin/lex/ONEWS
@@ -0,0 +1,1233 @@
+Changes between release 2.5.4 (11Sep96) and release 2.5.3:
+
+ - Fixed a bug introduced in 2.5.3 that blew it when a call
+ to input() occurred at the end of an input file.
+
+ - Fixed scanner skeleton so the example in the man page of
+ scanning strings using exclusive start conditions works.
+
+ - Minor Makefile tweaks.
+
+
+Changes between release 2.5.3 (29May96) and release 2.5.2:
+
+ - Some serious bugs in yymore() have been fixed. In particular,
+ when using AT&T-lex-compatibility or %array, you can intermix
+ calls to input(), unput(), and yymore(). (This still doesn't
+ work for %pointer, and isn't likely to in the future.)
+
+ - A bug in handling NUL's in the input stream of scanners using
+ REJECT has been fixed.
+
+ - The default main() in libfl.a now repeatedly calls yylex() until
+ it returns 0, rather than just calling it once.
+
+ - Minor tweak for Windows NT Makefile, MISC/NT/Makefile.
+
+
+Changes between release 2.5.2 (25Apr95) and release 2.5.1:
+
+ - The --prefix configuration option now works.
+
+ - A bug that completely broke the "-Cf" table compression
+ option has been fixed.
+
+ - A major headache involving "const" declarators and Solaris
+ systems has been fixed.
+
+ - An octal escape sequence in a flex regular expression must
+ now contain only the digits 0-7.
+
+ - You can now use "--" on the flex command line to mark the
+ end of flex options.
+
+ - You can now specify the filename '-' as a synonym for stdin.
+
+ - By default, the scanners generated by flex no longer
+ statically initialize yyin and yyout to stdin and stdout.
+ This change is necessary because in some ANSI environments,
+ stdin and stdout are not compile-time constant. You can
+ force the initialization using "%option stdinit" in the first
+ section of your flex input.
+
+ - "%option nounput" now correctly omits the unput() routine
+ from the output.
+
+ - "make clean" now removes config.log, config.cache, and the
+ flex binary. The fact that it removes the flex binary means
+ you should take care if making changes to scan.l, to make
+ sure you don't wind up in a bootstrap problem.
+
+ - In general, the Makefile has been reworked somewhat (thanks
+ to Francois Pinard) for added flexibility - more changes will
+ follow in subsequent releases.
+
+ - The .texi and .info files in MISC/texinfo/ have been updated,
+ thanks also to Francois Pinard.
+
+ - The FlexLexer::yylex(istream* new_in, ostream* new_out) method
+ now does not have a default for the first argument, to disambiguate
+ it from FlexLexer::yylex().
+
+ - A bug in destructing a FlexLexer object before doing any scanning
+ with it has been fixed.
+
+ - A problem with including FlexLexer.h multiple times has been fixed.
+
+ - The alloca() chud necessary to accommodate bison has grown
+ even uglier, but hopefully more correct.
+
+ - A portability tweak has been added to accommodate compilers that
+ use char* generic pointers.
+
+ - EBCDIC contact information in the file MISC/EBCDIC has been updated.
+
+ - An OS/2 Makefile and config.h for flex 2.5 is now available in
+ MISC/OS2/, contributed by Kai Uwe Rommel.
+
+ - The descrip.mms file for building flex under VMS has been updated,
+ thanks to Pat Rankin.
+
+ - The notes on building flex for the Amiga have been updated for
+ flex 2.5, contributed by Andreas Scherer.
+
+
+Changes between release 2.5.1 (28Mar95) and release 2.4.7:
+
+ - A new concept of "start condition" scope has been introduced.
+ A start condition scope is begun with:
+
+ <SCs>{
+
+ where SCs is a list of one or more start conditions. Inside
+ the start condition scope, every rule automatically has the
+ prefix <SCs> applied to it, until a '}' which matches the
+ initial '{'. So, for example:
+
+ <ESC>{
+ "\\n" return '\n';
+ "\\r" return '\r';
+ "\\f" return '\f';
+ "\\0" return '\0';
+ }
+
+ is equivalent to:
+
+ <ESC>"\\n" return '\n';
+ <ESC>"\\r" return '\r';
+ <ESC>"\\f" return '\f';
+ <ESC>"\\0" return '\0';
+
+ As indicated in this example, rules inside start condition scopes
+ (and any rule, actually, other than the first) can be indented,
+ to better show the extent of the scope.
+
+ Start condition scopes may be nested.
+
+ - The new %option directive can be used in the first section of
+ a flex scanner to control scanner-generation options. Most
+ options are given simply as names, optionally preceded by the
+ word "no" (with no intervening whitespace) to negate their
+ meaning. Some are equivalent to flex flags, so putting them
+ in your scanner source is equivalent to always specifying
+ the flag (%option's take precedence over flags):
+
+ 7bit -7 option
+ 8bit -8 option
+ align -Ca option
+ backup -b option
+ batch -B option
+ c++ -+ option
+ caseful opposite of -i option (caseful is the default);
+ case-sensitive same as above
+ caseless -i option;
+ case-insensitive same as above
+ debug -d option
+ default opposite of -s option
+ ecs -Ce option
+ fast -F option
+ full -f option
+ interactive -I option
+ lex-compat -l option
+ meta-ecs -Cm option
+ perf-report -p option
+ read -Cr option
+ stdout -t option
+ verbose -v option
+ warn opposite of -w option (so use "%option nowarn" for -w)
+
+ array equivalent to "%array"
+ pointer equivalent to "%pointer" (default)
+
+ Some provide new features:
+
+ always-interactive generate a scanner which always
+ considers its input "interactive" (no call to isatty()
+ will be made when the scanner runs)
+ main supply a main program for the scanner, which
+ simply calls yylex(). Implies %option noyywrap.
+ never-interactive generate a scanner which never
+ considers its input "interactive" (no call to isatty()
+ will be made when the scanner runs)
+ stack if set, enable start condition stacks (see below)
+ stdinit if unset ("%option nostdinit"), initialize yyin
+ and yyout statically to nil FILE* pointers, instead
+ of stdin and stdout
+ yylineno if set, keep track of the current line
+ number in global yylineno (this option is expensive
+ in terms of performance). The line number is available
+ to C++ scanning objects via the new member function
+ lineno().
+ yywrap if unset ("%option noyywrap"), scanner does not
+ call yywrap() upon EOF but simply assumes there
+ are no more files to scan
+
+ Flex scans your rule actions to determine whether you use the
+ REJECT or yymore features (this is not new). Two %options can be
+ used to override its decision, either by setting them to indicate
+ the feature is indeed used, or unsetting them to indicate it
+ actually is not used:
+
+ reject
+ yymore
+
+ Three %option's take string-delimited values, offset with '=':
+
+ outfile="<name>" equivalent to -o<name>
+ prefix="<name>" equivalent to -P<name>
+ yyclass="<name>" set the name of the C++ scanning class
+ (see below)
+
+ A number of %option's are available for lint purists who
+ want to suppress the appearance of unneeded routines in
+ the generated scanner. Each of the following, if unset,
+ results in the corresponding routine not appearing in the
+ generated scanner:
+
+ input, unput
+ yy_push_state, yy_pop_state, yy_top_state
+ yy_scan_buffer, yy_scan_bytes, yy_scan_string
+
+ You can specify multiple options with a single %option directive,
+ and multiple directives in the first section of your flex input file.
+
+ - The new function:
+
+ YY_BUFFER_STATE yy_scan_string( const char *str )
+
+ returns a YY_BUFFER_STATE (which also becomes the current input
+ buffer) for scanning the given string, which occurs starting
+ with the next call to yylex(). The string must be NUL-terminated.
+ A related function:
+
+ YY_BUFFER_STATE yy_scan_bytes( const char *bytes, int len )
+
+ creates a buffer for scanning "len" bytes (including possibly NUL's)
+ starting at location "bytes".
+
+ Note that both of these functions create and scan a *copy* of
+ the string/bytes. (This may be desirable, since yylex() modifies
+ the contents of the buffer it is scanning.) You can avoid the
+ copy by using:
+
+ YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+
+ which scans in place the buffer starting at "base", consisting
+ of "size" bytes, the last two bytes of which *must* be
+ YY_END_OF_BUFFER_CHAR (these bytes are not scanned; thus, scanning
+ consists of base[0] through base[size-2], inclusive). If you
+ fail to set up "base" in this manner, yy_scan_buffer returns a
+ nil pointer instead of creating a new input buffer.
+
+ The type yy_size_t is an integral type to which you can cast
+ an integer expression reflecting the size of the buffer.
+
+ - Three new routines are available for manipulating stacks of
+ start conditions:
+
+ void yy_push_state( int new_state )
+
+ pushes the current start condition onto the top of the stack
+ and BEGIN's "new_state" (recall that start condition names are
+ also integers).
+
+ void yy_pop_state()
+
+ pops the top of the stack and BEGIN's to it, and
+
+ int yy_top_state()
+
+ returns the top of the stack without altering the stack's
+ contents.
+
+ The start condition stack grows dynamically and so has no built-in
+ size limitation. If memory is exhausted, program execution
+ is aborted.
+
+ To use start condition stacks, your scanner must include
+ a "%option stack" directive.
+
+ - flex now supports POSIX character class expressions. These
+ are expressions enclosed inside "[:" and ":]" delimiters (which
+ themselves must appear between the '[' and ']' of a character
+ class; other elements may occur inside the character class, too).
+ The expressions flex recognizes are:
+
+ [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:]
+ [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]
+
+ These expressions all designate a set of characters equivalent to
+ the corresponding isXXX function (for example, [:alnum:] designates
+ those characters for which isalnum() returns true - i.e., any
+ alphabetic or numeric). Some systems don't provide isblank(),
+ so flex defines [:blank:] as a blank or a tab.
+
+ For example, the following character classes are all equivalent:
+
+ [[:alnum:]]
+ [[:alpha:][:digit:]
+ [[:alpha:]0-9]
+ [a-zA-Z0-9]
+
+ If your scanner is case-insensitive (-i flag), then [:upper:]
+ and [:lower:] are equivalent to [:alpha:].
+
+ - The promised rewrite of the C++ FlexLexer class has not yet
+ been done. Support for FlexLexer is limited at the moment to
+ fixing show-stopper bugs, so, for example, the new functions
+ yy_scan_string() & friends are not available to FlexLexer
+ objects.
+
+ - The new macro
+
+ yy_set_interactive(is_interactive)
+
+ can be used to control whether the current buffer is considered
+ "interactive". An interactive buffer is processed more slowly,
+ but must be used when the scanner's input source is indeed
+ interactive to avoid problems due to waiting to fill buffers
+ (see the discussion of the -I flag in flex.1). A non-zero value
+ in the macro invocation marks the buffer as interactive, a zero
+ value as non-interactive. Note that use of this macro overrides
+ "%option always-interactive" or "%option never-interactive".
+
+ yy_set_interactive() must be invoked prior to beginning to
+ scan the buffer.
+
+ - The new macro
+
+ yy_set_bol(at_bol)
+
+ can be used to control whether the current buffer's scanning
+ context for the next token match is done as though at the
+ beginning of a line (non-zero macro argument; makes '^' anchored
+ rules active) or not at the beginning of a line (zero argument,
+ '^' rules inactive).
+
+ - Related to this change, the mechanism for determining when a scan is
+ starting at the beginning of a line has changed. It used to be
+ that '^' was active iff the character prior to that at which the
+ scan started was a newline. The mechanism now is that '^' is
+ active iff the last token ended in a newline (or the last call to
+ input() returned a newline). For most users, the difference in
+ mechanisms is negligible. Where it will make a difference,
+ however, is if unput() or yyless() is used to alter the input
+ stream. When in doubt, use yy_set_bol().
+
+ - The new beginning-of-line mechanism involved changing some fairly
+ twisted code, so it may have introduced bugs - beware ...
+
+ - The macro YY_AT_BOL() returns true if the next token scanned from
+ the current buffer will have '^' rules active, false otherwise.
+
+ - The new function
+
+ void yy_flush_buffer( struct yy_buffer_state* b )
+
+ flushes the contents of the current buffer (i.e., next time
+ the scanner attempts to match a token using b as the current
+ buffer, it will begin by invoking YY_INPUT to fill the buffer).
+ This routine is also available to C++ scanners (unlike some
+ of the other new routines).
+
+ The related macro
+
+ YY_FLUSH_BUFFER
+
+ flushes the contents of the current buffer.
+
+ - A new "-ooutput" option writes the generated scanner to "output".
+ If used with -t, the scanner is still written to stdout, but
+ its internal #line directives (see previous item) use "output".
+
+ - Flex now generates #line directives relating the code it
+ produces to the output file; this means that error messages
+ in the flex-generated code should be correctly pinpointed.
+
+ - When generating #line directives, filenames with embedded '\'s
+ have those characters escaped (i.e., turned into '\\'). This
+ feature helps with reporting filenames for some MS-DOS and OS/2
+ systems.
+
+ - The FlexLexer class includes two new public member functions:
+
+ virtual void switch_streams( istream* new_in = 0,
+ ostream* new_out = 0 )
+
+ reassigns yyin to new_in (if non-nil) and yyout to new_out
+ (ditto), deleting the previous input buffer if yyin is
+ reassigned. It is used by:
+
+ int yylex( istream* new_in = 0, ostream* new_out = 0 )
+
+ which first calls switch_streams() and then returns the value
+ of calling yylex().
+
+ - C++ scanners now have yy_flex_debug as a member variable of
+ FlexLexer rather than a global, and member functions for testing
+ and setting it.
+
+ - When generating a C++ scanning class, you can now use
+
+ %option yyclass="foo"
+
+ to inform flex that you have derived "foo" as a subclass of
+ yyFlexLexer, so flex will place your actions in the member
+ function foo::yylex() instead of yyFlexLexer::yylex(). It also
+ generates a yyFlexLexer::yylex() member function that generates a
+ run-time error if called (by invoking yyFlexLexer::LexerError()).
+ This feature is necessary if your subclass "foo" introduces some
+ additional member functions or variables that you need to access
+ from yylex().
+
+ - Current texinfo files in MISC/texinfo, contributed by Francois
+ Pinard.
+
+ - You can now change the name "flex" to something else (e.g., "lex")
+ by redefining $(FLEX) in the Makefile.
+
+ - Two bugs (one serious) that could cause "bigcheck" to fail have
+ been fixed.
+
+ - A number of portability/configuration changes have been made
+ for easier portability.
+
+ - You can use "YYSTATE" in your scanner as an alias for YY_START
+ (for AT&T lex compatibility).
+
+ - input() now maintains yylineno.
+
+ - input() no longer trashes yytext.
+
+ - interactive scanners now read characters in YY_INPUT up to a
+ newline, a large performance gain.
+
+ - C++ scanner objects now work with the -P option. You include
+ <FlexLexer.h> once per scanner - see comments in <FlexLexer.h>
+ (or flex.1) for details.
+
+ - C++ FlexLexer objects now use the "cerr" stream to report -d output
+ instead of stdio.
+
+ - The -c flag now has its full glorious POSIX interpretation (do
+ nothing), rather than being interpreted as an old-style -C flag.
+
+ - Scanners generated by flex now include two #define's giving
+ the major and minor version numbers (YY_FLEX_MAJOR_VERSION,
+ YY_FLEX_MINOR_VERSION). These can then be tested to see
+ whether certain flex features are available.
+
+ - Scanners generated using -l lex compatibility now have the symbol
+ YY_FLEX_LEX_COMPAT #define'd.
+
+ - When initializing (i.e., yy_init is non-zero on entry to yylex()),
+ generated scanners now set yy_init to zero before executing
+ YY_USER_INIT. This means that you can set yy_init back to a
+ non-zero value in YY_USER_INIT if you need the scanner to be
+ reinitialized on the next call.
+
+ - You can now use "#line" directives in the first section of your
+ scanner specification.
+
+ - When generating full-table scanners (-Cf), flex now puts braces
+ around each row of the 2-d array initialization, to silence warnings
+ on over-zealous compilers.
+
+ - Improved support for MS-DOS. The flex sources have been successfully
+ built, unmodified, for Borland 4.02 (all that's required is a
+ Borland Makefile and config.h file, which are supplied in
+ MISC/Borland - contributed by Terrence O Kane).
+
+ - Improved support for Macintosh using Think C - the sources should
+ build for this platform "out of the box". Contributed by Scott
+ Hofmann.
+
+ - Improved support for VMS, in MISC/VMS/, contributed by Pat Rankin.
+
+ - Support for the Amiga, in MISC/Amiga/, contributed by Andreas
+ Scherer. Note that the contributed files were developed for
+ flex 2.4 and have not been tested with flex 2.5.
+
+ - Some notes on support for the NeXT, in MISC/NeXT, contributed
+ by Raf Schietekat.
+
+ - The MISC/ directory now includes a preformatted version of flex.1
+ in flex.man, and pre-yacc'd versions of parse.y in parse.{c,h}.
+
+ - The flex.1 and flexdoc.1 manual pages have been merged. There
+ is now just one document, flex.1, which includes an overview
+ at the beginning to help you find the section you need.
+
+ - Documentation now clarifies that start conditions persist across
+ switches to new input files or different input buffers. If you
+ want to e.g., return to INITIAL, you must explicitly do so.
+
+ - The "Performance Considerations" section of the manual has been
+ updated.
+
+ - Documented the "yy_act" variable, which when YY_USER_ACTION is
+ invoked holds the number of the matched rule, and added an
+ example of using yy_act to profile how often each rule is matched.
+
+ - Added YY_NUM_RULES, a definition that gives the total number
+ of rules in the file, including the default rule (even if you
+ use -s).
+
+ - Documentation now clarifies that you can pass a nil FILE* pointer
+ to yy_create_buffer() or yyrestart() if you've arrange YY_INPUT
+ to not need yyin.
+
+ - Documentation now clarifies that YY_BUFFER_STATE is a pointer to
+ an opaque "struct yy_buffer_state".
+
+ - Documentation now stresses that you gain the benefits of removing
+ backing-up states only if you remove *all* of them.
+
+ - Documentation now points out that traditional lex allows you
+ to put the action on a separate line from the rule pattern if
+ the pattern has trailing whitespace (ugh!), but flex doesn't
+ support this.
+
+ - A broken example in documentation of the difference between
+ inclusive and exclusive start conditions is now fixed.
+
+ - Usage (-h) report now goes to stdout.
+
+ - Version (-V) info now goes to stdout.
+
+ - More #ifdef chud has been added to the parser in attempt to
+ deal with bison's use of alloca().
+
+ - "make clean" no longer deletes emacs backup files (*~).
+
+ - Some memory leaks have been fixed.
+
+ - A bug was fixed in which dynamically-expanded buffers were
+ reallocated a couple of bytes too small.
+
+ - A bug was fixed which could cause flex to read and write beyond
+ the end of the input buffer.
+
+ - -S will not be going away.
+
+
+Changes between release 2.4.7 (03Aug94) and release 2.4.6:
+
+ - Fixed serious bug in reading multiple files.
+
+ - Fixed bug in scanning NUL's.
+
+ - Fixed bug in input() returning 8-bit characters.
+
+ - Fixed bug in matching text with embedded NUL's when
+ using %array or lex compatibility.
+
+ - Fixed multiple invocations of YY_USER_ACTION when using '|'
+ continuation action.
+
+ - Minor prototyping fixes.
+
+Changes between release 2.4.6 (04Jan94) and release 2.4.5:
+
+ - Linking with -lfl no longer required if your program includes
+ its own yywrap() and main() functions. (This change will cause
+ problems if you have a non-ANSI compiler on a system for which
+ sizeof(int) != sizeof(void*) or sizeof(int) != sizeof(size_t).)
+
+ - The use of 'extern "C++"' in FlexLexer.h has been modified to
+ get around an incompatibility with g++'s header files.
+
+Changes between release 2.4.5 (11Dec93) and release 2.4.4:
+
+ - Fixed bug breaking C++ scanners that use REJECT or variable
+ trailing context.
+
+ - Fixed serious input problem for interactive scanners on
+ systems for which char is unsigned.
+
+ - Fixed bug in incorrectly treating '$' operator as variable
+ trailing context.
+
+ - Fixed bug in -CF table representation that could lead to
+ corrupt tables.
+
+ - Fixed fairly benign memory leak.
+
+ - Added `extern "C++"' wrapper to FlexLexer.h header. This
+ should overcome the g++ 2.5.X problems mentioned in the
+ NEWS for release 2.4.3.
+
+ - Changed #include of FlexLexer.h to use <> instead of "".
+
+ - Added feature to control whether the scanner attempts to
+ refill the input buffer once it's exhausted. This feature
+ will be documented in the 2.5 release.
+
+
+Changes between release 2.4.4 (07Dec93) and release 2.4.3:
+
+ - Fixed two serious bugs in scanning 8-bit characters.
+
+ - Fixed bug in YY_USER_ACTION that caused it to be executed
+ inappropriately (on the scanner's own internal actions, and
+ with incorrect yytext/yyleng values).
+
+ - Fixed bug in pointing yyin at a new file and resuming scanning.
+
+ - Portability fix regarding min/max/abs macros conflicting with
+ function definitions in standard header files.
+
+ - Added a virtual LexerError() method to the C++ yyFlexLexer class
+ for reporting error messages instead of always using cerr.
+
+ - Added warning in flexdoc that the C++ scanning class is presently
+ experimental and subject to considerable change between major
+ releases.
+
+
+Changes between release 2.4.3 (03Dec93) and release 2.4.2:
+
+ - Fixed bug causing fatal scanner messages to fail to print.
+
+ - Fixed things so FlexLexer.h can be included in other C++
+ sources. One side-effect of this change is that -+ and -CF
+ are now incompatible.
+
+ - libfl.a now supplies private versions of the the <string.h>/
+ <strings.h> string routines needed by flex and the scanners
+ it generates, to enhance portability to some BSD systems.
+
+ - More robust solution to 2.4.2's flexfatal() bug fix.
+
+ - Added ranlib of installed libfl.a.
+
+ - Some lint tweaks.
+
+ - NOTE: problems have been encountered attempting to build flex
+ C++ scanners using g++ version 2.5.X. The problem is due to an
+ unfortunate heuristic in g++ 2.5.X that attempts to discern between
+ C and C++ headers. Because FlexLexer.h is installed (by default)
+ in /usr/local/include and not /usr/local/lib/g++-include, g++ 2.5.X
+ decides that it's a C header :-(. So if you have problems, install
+ the header in /usr/local/lib/g++-include instead.
+
+
+Changes between release 2.4.2 (01Dec93) and release 2.4.1:
+
+ - Fixed bug in libfl.a referring to non-existent "flexfatal" function.
+
+ - Modified to produce both compress'd and gzip'd tar files for
+ distributions (you probably don't care about this change!).
+
+
+Changes between release 2.4.1 (30Nov93) and release 2.3.8:
+
+ - The new '-+' flag instructs flex to generate a C++ scanner class
+ (thanks to Kent Williams). flex writes an implementation of the
+ class defined in FlexLexer.h to lex.yy.cc. You may include
+ multiple scanner classes in your program using the -P flag. Note
+ that the scanner class also provides a mechanism for creating
+ reentrant scanners. The scanner class uses C++ streams for I/O
+ instead of FILE*'s (thanks to Tom Epperly). If the flex executable's
+ name ends in '+' then the '-+' flag is automatically on, so creating
+ a symlink or copy of "flex" to "flex++" results in a version of
+ flex that can be used exclusively for C++ scanners.
+
+ Note that without the '-+' flag, flex-generated scanners can still
+ be compiled using C++ compilers, though they use FILE*'s for I/O
+ instead of streams.
+
+ See the "GENERATING C++ SCANNERS" section of flexdoc for details.
+
+ - The new '-l' flag turns on maximum AT&T lex compatibility. In
+ particular, -l includes support for "yylineno" and makes yytext
+ be an array instead of a pointer. It does not, however, do away
+ with all incompatibilities. See the "INCOMPATIBILITIES WITH LEX
+ AND POSIX" section of flexdoc for details.
+
+ - The new '-P' option specifies a prefix to use other than "yy"
+ for the scanner's globally-visible variables, and for the
+ "lex.yy.c" filename. Using -P you can link together multiple
+ flex scanners in the same executable.
+
+ - The distribution includes a "texinfo" version of flexdoc.1,
+ contributed by Roland Pesch (thanks also to Marq Kole, who
+ contributed another version). It has not been brought up to
+ date, but reflects version 2.3. See MISC/flex.texinfo.
+
+ The flex distribution will soon include G.T. Nicol's flex
+ manual; he is presently bringing it up-to-date for version 2.4.
+
+ - yywrap() is now a function, and you now *must* link flex scanners
+ with libfl.a.
+
+ - Site-configuration is now done via an autoconf-generated
+ "configure" script contributed by Francois Pinard.
+
+ - Scanners now use fread() (or getc(), if interactive) and not
+ read() for input. A new "table compression" option, -Cr,
+ overrides this change and causes the scanner to use read()
+ (because read() is a bit faster than fread()). -f and -F
+ are now equivalent to -Cfr and -CFr; i.e., they imply the
+ -Cr option.
+
+ - In the blessed name of POSIX compliance, flex supports "%array"
+ and "%pointer" directives in the definitions (first) section of
+ the scanner specification. The former specifies that yytext
+ should be an array (of size YYLMAX), the latter, that it should
+ be a pointer. The array version of yytext is universally slower
+ than the pointer version, but has the advantage that its contents
+ remain unmodified across calls to input() and unput() (the pointer
+ version of yytext is, still, trashed by such calls).
+
+ "%array" cannot be used with the '-+' C++ scanner class option.
+
+ - The new '-Ca' option directs flex to trade off memory for
+ natural alignment when generating a scanner's tables. In
+ particular, table entries that would otherwise be "short"
+ become "long".
+
+ - The new '-h' option produces a summary of the flex flags.
+
+ - The new '-V' option reports the flex version number and exits.
+
+ - The new scanner macro YY_START returns an integer value
+ corresponding to the current start condition. You can return
+ to that start condition by passing the value to a subsequent
+ "BEGIN" action. You also can implement "start condition stacks"
+ by storing the values in an integer stack.
+
+ - You can now redefine macros such as YY_INPUT by just #define'ing
+ them to some other value in the first section of the flex input;
+ no need to first #undef them.
+
+ - flex now generates warnings for rules that can't be matched.
+ These warnings can be turned off using the new '-w' flag. If
+ your scanner uses REJECT then you will not get these warnings.
+
+ - If you specify the '-s' flag but the default rule can be matched,
+ flex now generates a warning.
+
+ - "yyleng" is now a global, and may be modified by the user (though
+ doing so and then using yymore() will yield weird results).
+
+ - Name definitions in the first section of a scanner specification
+ can now include a leading '^' or trailing '$' operator. In this
+ case, the definition is *not* pushed back inside of parentheses.
+
+ - Scanners with compressed tables are now "interactive" (-I option)
+ by default. You can suppress this attribute (which makes them
+ run slightly slower) using the new '-B' flag.
+
+ - Flex now generates 8-bit scanners by default, unless you use the
+ -Cf or -CF compression options (-Cfe and -CFe result in 8-bit
+ scanners). You can force it to generate a 7-bit scanner using
+ the new '-7' flag. You can build flex to generate 8-bit scanners
+ for -Cf and -CF, too, by adding -DDEFAULT_CSIZE=256 to CFLAGS
+ in the Makefile.
+
+ - You no longer need to call the scanner routine yyrestart() to
+ inform the scanner that you have switched to a new file after
+ having seen an EOF on the current input file. Instead, just
+ point yyin at the new file and continue scanning.
+
+ - You no longer need to invoke YY_NEW_FILE in an <<EOF>> action
+ to indicate you wish to continue scanning. Simply point yyin
+ at a new file.
+
+ - A leading '#' no longer introduces a comment in a flex input.
+
+ - flex no longer considers formfeed ('\f') a whitespace character.
+
+ - %t, I'm happy to report, has been nuked.
+
+ - The '-p' option may be given twice ('-pp') to instruct flex to
+ report minor performance problems as well as major ones.
+
+ - The '-v' verbose output no longer includes start/finish time
+ information.
+
+ - Newlines in flex inputs can optionally include leading or
+ trailing carriage-returns ('\r'), in support of several PC/Mac
+ run-time libraries that automatically include these.
+
+ - A start condition of the form "<*>" makes the following rule
+ active in every start condition, whether exclusive or inclusive.
+
+ - The following items have been corrected in the flex documentation:
+
+ - '-C' table compression options *are* cumulative.
+
+ - You may modify yytext but not lengthen it by appending
+ characters to the end. Modifying its final character
+ will affect '^' anchoring for the next rule matched
+ if the character is changed to or from a newline.
+
+ - The term "backtracking" has been renamed "backing up",
+ since it is a one-time repositioning and not a repeated
+ search. What used to be the "lex.backtrack" file is now
+ "lex.backup".
+
+ - Unindented "/* ... */" comments are allowed in the first
+ flex input section, but not in the second.
+
+ - yyless() can only be used in the flex input source, not
+ externally.
+
+ - You can use "yyrestart(yyin)" to throw away the
+ current contents of the input buffer.
+
+ - To write high-speed scanners, attempt to match as much
+ text as possible with each rule. See MISC/fastwc/README
+ for more information.
+
+ - Using the beginning-of-line operator ('^') is fairly
+ cheap. Using unput() is expensive. Using yyless() is
+ cheap.
+
+ - An example of scanning strings with embedded escape
+ sequences has been added.
+
+ - The example of backing-up in flexdoc was erroneous; it
+ has been corrected.
+
+ - A flex scanner's internal buffer now dynamically grows if needed
+ to match large tokens. Note that growing the buffer presently
+ requires rescanning the (large) token, so consuming a lot of
+ text this way is a slow process. Also note that presently the
+ buffer does *not* grow if you unput() more text than can fit
+ into the buffer.
+
+ - The MISC/ directory has been reorganized; see MISC/README for
+ details.
+
+ - yyless() can now be used in the third (user action) section
+ of a scanner specification, thanks to Ceriel Jacobs. yyless()
+ remains a macro and cannot be used outside of the scanner source.
+
+ - The skeleton file is no longer opened at run-time, but instead
+ compiled into a large string array (thanks to John Gilmore and
+ friends at Cygnus). You can still use the -S flag to point flex
+ at a different skeleton file.
+
+ - flex no longer uses a temporary file to store the scanner's
+ actions.
+
+ - A number of changes have been made to decrease porting headaches.
+ In particular, flex no longer uses memset() or ctime(), and
+ provides a single simple mechanism for dealing with C compilers
+ that still define malloc() as returning char* instead of void*.
+
+ - Flex now detects if the scanner specification requires the -8 flag
+ but the flag was not given or on by default.
+
+ - A number of table-expansion fencepost bugs have been fixed,
+ making flex more robust for generating large scanners.
+
+ - flex more consistently identifies the location of errors in
+ its input.
+
+ - YY_USER_ACTION is now invoked only for "real" actions, not for
+ internal actions used by the scanner for things like filling
+ the buffer or handling EOF.
+
+ - The rule "[^]]" now matches any character other than a ']';
+ formerly it matched any character at all followed by a ']'.
+ This change was made for compatibility with AT&T lex.
+
+ - A large number of miscellaneous bugs have been found and fixed
+ thanks to Gerhard Wilhelms.
+
+ - The source code has been heavily reformatted, making patches
+ relative to previous flex releases no longer accurate.
+
+
+Changes between 2.3 Patch #8 (21Feb93) and 2.3 Patch #7:
+
+ - Fixed bugs in dynamic memory allocation leading to grievous
+ fencepost problems when generating large scanners.
+ - Fixed bug causing infinite loops on character classes with 8-bit
+ characters in them.
+ - Fixed bug in matching repetitions with a lower bound of 0.
+ - Fixed bug in scanning NUL characters using an "interactive" scanner.
+ - Fixed bug in using yymore() at the end of a file.
+ - Fixed bug in misrecognizing rules with variable trailing context.
+ - Fixed bug compiling flex on Suns using gcc 2.
+ - Fixed bug in not recognizing that input files with the character
+ ASCII 128 in them require the -8 flag.
+ - Fixed bug that could cause an infinite loop writing out
+ error messages.
+ - Fixed bug in not recognizing old-style lex % declarations if
+ followed by a tab instead of a space.
+ - Fixed potential crash when flex terminated early (usually due
+ to a bad flag) and the -v flag had been given.
+ - Added some missing declarations of void functions.
+ - Changed to only use '\a' for __STDC__ compilers.
+ - Updated mailing addresses.
+
+
+Changes between 2.3 Patch #7 (28Mar91) and 2.3 Patch #6:
+
+ - Fixed out-of-bounds array access that caused bad tables
+ to be produced on machines where the bad reference happened
+ to yield a 1. This caused problems installing or running
+ flex on some Suns, in particular.
+
+
+Changes between 2.3 Patch #6 (29Aug90) and 2.3 Patch #5:
+
+ - Fixed a serious bug in yymore() which basically made it
+ completely broken. Thanks goes to Jean Christophe of
+ the Nethack development team for finding the problem
+ and passing along the fix.
+
+
+Changes between 2.3 Patch #5 (16Aug90) and 2.3 Patch #4:
+
+ - An up-to-date version of initscan.c so "make test" will
+ work after applying the previous patches
+
+
+Changes between 2.3 Patch #4 (14Aug90) and 2.3 Patch #3:
+
+ - Fixed bug in hexadecimal escapes which allowed only digits,
+ not letters, in escapes
+ - Fixed bug in previous "Changes" file!
+
+
+Changes between 2.3 Patch #3 (03Aug90) and 2.3 Patch #2:
+
+ - Correction to patch #2 for gcc compilation; thanks goes to
+ Paul Eggert for catching this.
+
+
+Changes between 2.3 Patch #2 (02Aug90) and original 2.3 release:
+
+ - Fixed (hopefully) headaches involving declaring malloc()
+ and free() for gcc, which defines __STDC__ but (often) doesn't
+ come with the standard include files such as <stdlib.h>.
+ Reordered #ifdef maze in the scanner skeleton in the hope of
+ getting the declarations right for cfront and g++, too.
+
+ - Note that this patch supercedes patch #1 for release 2.3,
+ which was never announced but was available briefly for
+ anonymous ftp.
+
+
+Changes between 2.3 (full) release of 28Jun90 and 2.2 (alpha) release:
+
+User-visible:
+
+ - A lone <<EOF>> rule (that is, one which is not qualified with
+ a list of start conditions) now specifies the EOF action for
+ *all* start conditions which haven't already had <<EOF>> actions
+ given. To specify an end-of-file action for just the initial
+ state, use <INITIAL><<EOF>>.
+
+ - -d debug output is now contigent on the global yy_flex_debug
+ being set to a non-zero value, which it is by default.
+
+ - A new macro, YY_USER_INIT, is provided for the user to specify
+ initialization action to be taken on the first call to the
+ scanner. This action is done before the scanner does its
+ own initialization.
+
+ - yy_new_buffer() has been added as an alias for yy_create_buffer()
+
+ - Comments beginning with '#' and extending to the end of the line
+ now work, but have been deprecated (in anticipation of making
+ flex recognize #line directives).
+
+ - The funky restrictions on when semi-colons could follow the
+ YY_NEW_FILE and yyless macros have been removed. They now
+ behave identically to functions.
+
+ - A bug in the sample redefinition of YY_INPUT in the documentation
+ has been corrected.
+
+ - A bug in the sample simple tokener in the documentation has
+ been corrected.
+
+ - The documentation on the incompatibilities between flex and
+ lex has been reordered so that the discussion of yylineno
+ and input() come first, as it's anticipated that these will
+ be the most common source of headaches.
+
+
+Things which didn't used to be documented but now are:
+
+ - flex interprets "^foo|bar" differently from lex. flex interprets
+ it as "match either a 'foo' or a 'bar', providing it comes at the
+ beginning of a line", whereas lex interprets it as "match either
+ a 'foo' at the beginning of a line, or a 'bar' anywhere".
+
+ - flex initializes the global "yyin" on the first call to the
+ scanner, while lex initializes it at compile-time.
+
+ - yy_switch_to_buffer() can be used in the yywrap() macro/routine.
+
+ - flex scanners do not use stdio for their input, and hence when
+ writing an interactive scanner one must explictly call fflush()
+ after writing out a prompt.
+
+ - flex scanner can be made reentrant (after a fashion) by using
+ "yyrestart( yyin );". This is useful for interactive scanners
+ which have interrupt handlers that long-jump out of the scanner.
+
+ - a defense of why yylineno is not supported is included, along
+ with a suggestion on how to convert scanners which rely on it.
+
+
+Other changes:
+
+ - Prototypes and proper declarations of void routines have
+ been added to the flex source code, courtesy of Kevin B. Kenny.
+
+ - Routines dealing with memory allocation now use void* pointers
+ instead of char* - see Makefile for porting implications.
+
+ - Error-checking is now done when flex closes a file.
+
+ - Various lint tweaks were added to reduce the number of gripes.
+
+ - Makefile has been further parameterized to aid in porting.
+
+ - Support for SCO Unix added.
+
+ - Flex now sports the latest & greatest UC copyright notice
+ (which is only slightly different from the previous one).
+
+ - A note has been added to flexdoc.1 mentioning work in progress
+ on modifying flex to generate straight C code rather than a
+ table-driven automaton, with an email address of whom to contact
+ if you are working along similar lines.
+
+
+Changes between 2.2 Patch #3 (30Mar90) and 2.2 Patch #2:
+
+ - fixed bug which caused -I scanners to bomb
+
+
+Changes between 2.2 Patch #2 (27Mar90) and 2.2 Patch #1:
+
+ - fixed bug writing past end of input buffer in yyunput()
+ - fixed bug detecting NUL's at the end of a buffer
+
+
+Changes between 2.2 Patch #1 (23Mar90) and 2.2 (alpha) release:
+
+ - Makefile fixes: definition of MAKE variable for systems
+ which don't have it; installation of flexdoc.1 along with
+ flex.1; fixed two bugs which could cause "bigtest" to fail.
+
+ - flex.skel fix for compiling with g++.
+
+ - README and flexdoc.1 no longer list an out-of-date BITNET address
+ for contacting me.
+
+ - minor typos and formatting changes to flex.1 and flexdoc.1.
+
+
+Changes between 2.2 (alpha) release of March '90 and previous release:
+
+User-visible:
+
+ - Full user documentation now available.
+
+ - Support for 8-bit scanners.
+
+ - Scanners now accept NUL's.
+
+ - A facility has been added for dealing with multiple
+ input buffers.
+
+ - Two manual entries now. One which fully describes flex
+ (rather than just its differences from lex), and the
+ other for quick(er) reference.
+
+ - A number of changes to bring flex closer into compliance
+ with the latest POSIX lex draft:
+
+ %t support
+ flex now accepts multiple input files and concatenates
+ them together to form its input
+ previous -c (compress) flag renamed -C
+ do-nothing -c and -n flags added
+ Any indented code or code within %{}'s in section 2 is
+ now copied to the output
+
+ - yyleng is now a bona fide global integer.
+
+ - -d debug information now gives the line number of the
+ matched rule instead of which number rule it was from
+ the beginning of the file.
+
+ - -v output now includes a summary of the flags used to generate
+ the scanner.
+
+ - unput() and yyrestart() are now globally callable.
+
+ - yyrestart() no longer closes the previous value of yyin.
+
+ - C++ support; generated scanners can be compiled with C++ compiler.
+
+ - Primitive -lfl library added, containing default main()
+ which calls yylex(). A number of routines currently living
+ in the scanner skeleton will probably migrate to here
+ in the future (in particular, yywrap() will probably cease
+ to be a macro and instead be a function in the -lfl library).
+
+ - Hexadecimal (\x) escape sequences added.
+
+ - Support for MS-DOS, VMS, and Turbo-C integrated.
+
+ - The %used/%unused operators have been deprecated. They
+ may go away soon.
+
+
+Other changes:
+
+ - Makefile enhanced for easier testing and installation.
+ - The parser has been tweaked to detect some erroneous
+ constructions which previously were missed.
+ - Scanner input buffer overflow is now detected.
+ - Bugs with missing "const" declarations fixed.
+ - Out-of-date Minix/Atari patches provided.
+ - Scanners no longer require printf() unless FLEX_DEBUG is being used.
+ - A subtle input() bug has been fixed.
+ - Line numbers for "continued action" rules (those following
+ the special '|' action) are now correct.
+ - unput() bug fixed; had been causing problems porting flex to VMS.
+ - yymore() handling rewritten to fix bug with interaction
+ between yymore() and trailing context.
+ - EOF in actions now generates an error message.
+ - Bug involving -CFe and generating equivalence classes fixed.
+ - Bug which made -CF be treated as -Cf fixed.
+ - Support for SysV tmpnam() added.
+ - Unused #define's for scanner no longer generated.
+ - Error messages which are associated with a particular input
+ line are now all identified with their input line in standard
+ format.
+ - % directives which are valid to lex but not to flex are
+ now ignored instead of generating warnings.
+ - -DSYS_V flag can now also be specified -DUSG for System V
+ compilation.
+
+
+Changes between 2.1 beta-test release of June '89 and previous release:
+
+User-visible:
+
+ - -p flag generates a performance report to stderr. The report
+ consists of comments regarding features of the scanner rules
+ which result in slower scanners.
+
+ - -b flag generates backtracking information to lex.backtrack.
+ This is a list of scanner states which require backtracking
+ and the characters on which they do so. By adding rules
+ one can remove backtracking states. If all backtracking states
+ are eliminated, the generated scanner will run faster.
+ Backtracking is not yet documented in the manual entry.
+
+ - Variable trailing context now works, i.e., one can have
+ rules like "(foo)*/[ \t]*bletch". Some trailing context
+ patterns still cannot be properly matched and generate
+ error messages. These are patterns where the ending of the
+ first part of the rule matches the beginning of the second
+ part, such as "zx*/xy*", where the 'x*' matches the 'x' at
+ the beginning of the trailing context. Lex won't get these
+ patterns right either.
+
+ - Faster scanners.
+
+ - End-of-file rules. The special rule "<<EOF>>" indicates
+ actions which are to be taken when an end-of-file is
+ encountered and yywrap() returns non-zero (i.e., indicates
+ no further files to process). See manual entry for example.
+
+ - The -r (reject used) flag is gone. flex now scans the input
+ for occurrences of the string "REJECT" to determine if the
+ action is needed. It tries to be intelligent about this but
+ can be fooled. One can force the presence or absence of
+ REJECT by adding a line in the first section of the form
+ "%used REJECT" or "%unused REJECT".
+
+ - yymore() has been implemented. Similarly to REJECT, flex
+ detects the use of yymore(), which can be overridden using
+ "%used" or "%unused".
+
+ - Patterns like "x{0,3}" now work (i.e., with lower-limit == 0).
+
+ - Removed '\^x' for ctrl-x misfeature.
+
+ - Added '\a' and '\v' escape sequences.
+
+ - \<digits> now works for octal escape sequences; previously
+ \0<digits> was required.
+
+ - Better error reporting; line numbers are associated with rules.
+
+ - yyleng is a macro; it cannot be accessed outside of the
+ scanner source file.
+
+ - yytext and yyleng should not be modified within a flex action.
+
+ - Generated scanners #define the name FLEX_SCANNER.
+
+ - Rules are internally separated by YY_BREAK in lex.yy.c rather
+ than break, to allow redefinition.
+
+ - The macro YY_USER_ACTION can be redefined to provide an action
+ which is always executed prior to the matched rule's action.
+
+ - yyrestart() is a new action which can be used to restart
+ the scanner after it has seen an end-of-file (a "real" one,
+ that is, one for which yywrap() returned non-zero). It takes
+ a FILE* argument indicating a new file to scan and sets
+ things up so that a subsequent call to yylex() will start
+ scanning that file.
+
+ - Internal scanner names all preceded by "yy_"
+
+ - lex.yy.c is deleted if errors are encountered during processing.
+
+ - Comments may be put in the first section of the input by preceding
+ them with '#'.
+
+
+
+Other changes:
+
+ - Some portability-related bugs fixed, in particular for machines
+ with unsigned characters or sizeof( int* ) != sizeof( int ).
+ Also, tweaks for VMS and Microsoft C (MS-DOS), and identifiers all
+ trimmed to be 31 or fewer characters. Shortened file names
+ for dinosaur OS's. Checks for allocating > 64K memory
+ on 16 bit'ers. Amiga tweaks. Compiles using gcc on a Sun-3.
+ - Compressed and fast scanner skeletons merged.
+ - Skeleton header files done away with.
+ - Generated scanner uses prototypes and "const" for __STDC__.
+ - -DSV flag is now -DSYS_V for System V compilation.
+ - Removed all references to FTL language.
+ - Software now covered by BSD Copyright.
+ - flex will replace lex in subsequent BSD releases.
diff --git a/usr.bin/lex/README b/usr.bin/lex/README
new file mode 100644
index 00000000000..8906709ef41
--- /dev/null
+++ b/usr.bin/lex/README
@@ -0,0 +1,113 @@
+This is flex, the fast lexical analyzer generator.
+
+flex is a tool for generating scanners: programs which recognize
+lexical patterns in text.
+
+More information about flex as well as the latest official release of
+flex can be found at:
+
+http://flex.sourceforge.net/
+
+Bug reports should be submitted using the SourceForge Bug Tracker for
+flex at:
+
+http://sourceforge.net/tracker/?group_id=97492&atid=618177
+
+The flex codebase is kept in git at:
+
+https://github.com/westes/flex
+
+There are several mailing lists available as well:
+
+flex-announce@lists.sourceforge.net - where posts will be made
+announcing new releases of flex.
+
+flex-help@lists.sourceforge.net - where you can post questions about
+using flex
+
+flex-devel@lists.sourceforge.net - where you can discuss development of
+flex itself
+
+Find information on subscribing to the mailing lists at:
+
+http://sourceforge.net/mail/?group_id=97492
+
+The flex distribution contains the following files which may be of interest:
+
+README - This file.
+
+NEWS - current version number and list of user-visible changes.
+
+INSTALL - basic installation information.
+
+ABOUT-NLS - description of internationalization support in flex.
+
+COPYING - flex's copyright and license.
+
+doc/ - user documentation.
+
+examples/ - containing examples of some possible flex scanners and a
+few other things. See the file examples/README for more details.
+
+TODO - outstanding bug reports, desired features, etc.
+
+tests/ - regression tests. See TESTS/README for details.
+
+po/ - internationalization support files.
+
+You need the following tools to build flex from the maintainer's
+repository:
+
+compiler suite - flex is built with gcc
+bash, or a good Bourne-style shell
+m4 - m4 -p needs to work; GNU m4 and a few others are suitable
+GNU bison; to generate parse.c from parse.y
+autoconf 2.69; for handling the build system
+automake 1.12.2; for Makefile generation
+gettext 0.18; fori18n support
+help2man 1.36; to generate the flex man page
+tar, gzip, etc.; for packaging of the source distribution
+GNU texinfo 498; to build and test the flex manual
+GNU indent 2.8; for indenting the flex source the way we want it done
+
+Once you have all the necessary tools installed, life becomes
+simple. To prepare the flex tree for building, run the script:
+
+$ ./autogen.sh
+
+in the top level of the flex source tree.
+This script calls the various tools needed to get flex ready for the
+GNU-style configure script to be able to work.
+
+From this point on, building flex follows the usual configure, make,
+make install routine.
+
+This file is part of flex.
+
+This code is derived from software contributed to Berkeley by
+Vern Paxson.
+
+The United States Government has rights in this work pursuant
+to contract no. DE-AC03-76SF00098 between the United States
+Department of Energy and the University of California.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+Neither the name of the University nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+
diff --git a/usr.bin/lex/VERSION b/usr.bin/lex/VERSION
deleted file mode 100644
index c1e55be514d..00000000000
--- a/usr.bin/lex/VERSION
+++ /dev/null
@@ -1,2 +0,0 @@
-A complete flex-2.5.4 distribution is available from ftp.ee.lbl.gov
-or prep.ai.mit.edu
diff --git a/usr.bin/lex/buf.c b/usr.bin/lex/buf.c
new file mode 100644
index 00000000000..89c6cc9d81d
--- /dev/null
+++ b/usr.bin/lex/buf.c
@@ -0,0 +1,277 @@
+/* $OpenBSD: buf.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* flex - tool to generate fast lexical analyzers */
+
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+
+/* Take note: The buffer object is sometimes used as a String buffer (one
+ * continuous string), and sometimes used as a list of strings, usually line by
+ * line.
+ *
+ * The type is specified in buf_init by the elt_size. If the elt_size is
+ * sizeof(char), then the buffer should be treated as string buffer. If the
+ * elt_size is sizeof(char*), then the buffer should be treated as a list of
+ * strings.
+ *
+ * Certain functions are only appropriate for one type or the other.
+ */
+
+/* global buffers. */
+struct Buf userdef_buf; /**< for user #definitions triggered by cmd-line. */
+struct Buf defs_buf; /**< for #define's autogenerated. List of strings. */
+struct Buf yydmap_buf; /**< string buffer to hold yydmap elements */
+struct Buf m4defs_buf; /**< m4 definitions. List of strings. */
+struct Buf top_buf; /**< contains %top code. String buffer. */
+
+struct Buf *buf_print_strings(struct Buf * buf, FILE* out)
+{
+ int i;
+
+ if(!buf || !out)
+ return buf;
+
+ for (i=0; i < buf->nelts; i++){
+ const char * s = ((char**)buf->elts)[i];
+ if(s)
+ fprintf(out, "%s", s);
+ }
+ return buf;
+}
+
+/* Append a "%s" formatted string to a string buffer */
+struct Buf *buf_prints (struct Buf *buf, const char *fmt, const char *s)
+{
+ char *t;
+ size_t tsz;
+
+ t = flex_alloc (tsz = strlen (fmt) + strlen (s) + 1);
+ if (!t)
+ flexfatal (_("Allocation of buffer to print string failed"));
+ snprintf (t, tsz, fmt, s);
+ buf = buf_strappend (buf, t);
+ flex_free (t);
+ return buf;
+}
+
+/** Append a line directive to the string buffer.
+ * @param buf A string buffer.
+ * @param filename file name
+ * @param lineno line number
+ * @return buf
+ */
+struct Buf *buf_linedir (struct Buf *buf, const char* filename, int lineno)
+{
+ const char *src;
+ char *dst, *t;
+ size_t tsz;
+
+ t = flex_alloc (tsz = strlen ("#line \"\"\n") + /* constant parts */
+ 2 * strlen (filename) + /* filename with possibly all backslashes escaped */
+ (int) (1 + log10 (abs (lineno))) + /* line number */
+ 1); /* NUL */
+ if (!t)
+ flexfatal (_("Allocation of buffer for line directive failed"));
+ for (dst = t + snprintf (t, tsz, "#line %d \"", lineno), src = filename; *src; *dst++ = *src++)
+ if (*src == '\\') /* escape backslashes */
+ *dst++ = '\\';
+ *dst++ = '"';
+ *dst++ = '\n';
+ *dst = '\0';
+ buf = buf_strappend (buf, t);
+ flex_free (t);
+ return buf;
+}
+
+
+/** Append the contents of @a src to @a dest.
+ * @param @a dest the destination buffer
+ * @param @a dest the source buffer
+ * @return @a dest
+ */
+struct Buf *buf_concat(struct Buf* dest, const struct Buf* src)
+{
+ buf_append(dest, src->elts, src->nelts);
+ return dest;
+}
+
+
+/* Appends n characters in str to buf. */
+struct Buf *buf_strnappend (buf, str, n)
+ struct Buf *buf;
+ const char *str;
+ int n;
+{
+ buf_append (buf, str, n + 1);
+
+ /* "undo" the '\0' character that buf_append() already copied. */
+ buf->nelts--;
+
+ return buf;
+}
+
+/* Appends characters in str to buf. */
+struct Buf *buf_strappend (buf, str)
+ struct Buf *buf;
+ const char *str;
+{
+ return buf_strnappend (buf, str, strlen (str));
+}
+
+/* appends "#define str def\n" */
+struct Buf *buf_strdefine (buf, str, def)
+ struct Buf *buf;
+ const char *str;
+ const char *def;
+{
+ buf_strappend (buf, "#define ");
+ buf_strappend (buf, " ");
+ buf_strappend (buf, str);
+ buf_strappend (buf, " ");
+ buf_strappend (buf, def);
+ buf_strappend (buf, "\n");
+ return buf;
+}
+
+/** Pushes "m4_define( [[def]], [[val]])m4_dnl" to end of buffer.
+ * @param buf A buffer as a list of strings.
+ * @param def The m4 symbol to define.
+ * @param val The definition; may be NULL.
+ * @return buf
+ */
+struct Buf *buf_m4_define (struct Buf *buf, const char* def, const char* val)
+{
+ const char * fmt = "m4_define( [[%s]], [[%s]])m4_dnl\n";
+ char * str;
+ size_t strsz;
+
+ val = val?val:"";
+ str = (char*)flex_alloc(strsz = strlen(fmt) + strlen(def) + strlen(val) + 2);
+ if (!str)
+ flexfatal (_("Allocation of buffer for m4 def failed"));
+
+ snprintf(str, strsz, fmt, def, val);
+ buf_append(buf, &str, 1);
+ return buf;
+}
+
+/** Pushes "m4_undefine([[def]])m4_dnl" to end of buffer.
+ * @param buf A buffer as a list of strings.
+ * @param def The m4 symbol to undefine.
+ * @return buf
+ */
+struct Buf *buf_m4_undefine (struct Buf *buf, const char* def)
+{
+ const char * fmt = "m4_undefine( [[%s]])m4_dnl\n";
+ char * str;
+ size_t strsz;
+
+ str = (char*)flex_alloc(strsz = strlen(fmt) + strlen(def) + 2);
+ if (!str)
+ flexfatal (_("Allocation of buffer for m4 undef failed"));
+
+ snprintf(str, strsz, fmt, def);
+ buf_append(buf, &str, 1);
+ return buf;
+}
+
+/* create buf with 0 elements, each of size elem_size. */
+void buf_init (buf, elem_size)
+ struct Buf *buf;
+ size_t elem_size;
+{
+ buf->elts = (void *) 0;
+ buf->nelts = 0;
+ buf->elt_size = elem_size;
+ buf->nmax = 0;
+}
+
+/* frees memory */
+void buf_destroy (buf)
+ struct Buf *buf;
+{
+ if (buf && buf->elts)
+ flex_free (buf->elts);
+ buf->elts = (void *) 0;
+}
+
+
+/* appends ptr[] to buf, grow if necessary.
+ * n_elem is number of elements in ptr[], NOT bytes.
+ * returns buf.
+ * We grow by mod(512) boundaries.
+ */
+
+struct Buf *buf_append (buf, ptr, n_elem)
+ struct Buf *buf;
+ const void *ptr;
+ int n_elem;
+{
+ int n_alloc = 0;
+
+ if (!ptr || n_elem == 0)
+ return buf;
+
+ /* May need to alloc more. */
+ if (n_elem + buf->nelts > buf->nmax) {
+
+ /* exact amount needed... */
+ n_alloc = (n_elem + buf->nelts) * buf->elt_size;
+
+ /* ...plus some extra */
+ if (((n_alloc * buf->elt_size) % 512) != 0
+ && buf->elt_size < 512)
+ n_alloc +=
+ (512 -
+ ((n_alloc * buf->elt_size) % 512)) /
+ buf->elt_size;
+
+ if (!buf->elts)
+ buf->elts =
+ allocate_array (n_alloc, buf->elt_size);
+ else
+ buf->elts =
+ reallocate_array (buf->elts, n_alloc,
+ buf->elt_size);
+
+ buf->nmax = n_alloc;
+ }
+
+ memcpy ((char *) buf->elts + buf->nelts * buf->elt_size, ptr,
+ n_elem * buf->elt_size);
+ buf->nelts += n_elem;
+
+ return buf;
+}
+
+/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */
diff --git a/usr.bin/lex/ccl.c b/usr.bin/lex/ccl.c
index 5226940320f..628edcac6ab 100644
--- a/usr.bin/lex/ccl.c
+++ b/usr.bin/lex/ccl.c
@@ -1,94 +1,210 @@
-/* $OpenBSD: ccl.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* $OpenBSD: ccl.c,v 1.7 2015/11/19 19:43:40 tedu Exp $ */
/* ccl - routines for character classes */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+ /* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/ccl.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include "flexdef.h"
+/* return true if the chr is in the ccl. Takes negation into account. */
+static bool
+ccl_contains (const int cclp, const int ch)
+{
+ int ind, len, i;
+
+ len = ccllen[cclp];
+ ind = cclmap[cclp];
+
+ for (i = 0; i < len; ++i)
+ if (ccltbl[ind + i] == ch)
+ return !cclng[cclp];
+
+ return cclng[cclp];
+}
+
+
/* ccladd - add a single character to a ccl */
-void ccladd( cclp, ch )
-int cclp;
-int ch;
- {
- int ind, len, newpos, i;
+void ccladd (cclp, ch)
+ int cclp;
+ int ch;
+{
+ int ind, len, newpos, i;
- check_char( ch );
+ check_char (ch);
len = ccllen[cclp];
ind = cclmap[cclp];
/* check to see if the character is already in the ccl */
- for ( i = 0; i < len; ++i )
- if ( ccltbl[ind + i] == ch )
+ for (i = 0; i < len; ++i)
+ if (ccltbl[ind + i] == ch)
return;
+ /* mark newlines */
+ if (ch == nlch)
+ ccl_has_nl[cclp] = true;
+
newpos = ind + len;
- if ( newpos >= current_max_ccl_tbl_size )
- {
+ if (newpos >= current_max_ccl_tbl_size) {
current_max_ccl_tbl_size += MAX_CCL_TBL_SIZE_INCREMENT;
++num_reallocs;
- ccltbl = reallocate_Character_array( ccltbl,
- current_max_ccl_tbl_size );
- }
+ ccltbl = reallocate_Character_array (ccltbl,
+ current_max_ccl_tbl_size);
+ }
ccllen[cclp] = len + 1;
ccltbl[newpos] = ch;
+}
+
+/* dump_cclp - same thing as list_character_set, but for cclps. */
+
+static void dump_cclp (FILE* file, int cclp)
+{
+ int i;
+
+ putc ('[', file);
+
+ for (i = 0; i < csize; ++i) {
+ if (ccl_contains(cclp, i)){
+ int start_char = i;
+
+ putc (' ', file);
+
+ fputs (readable_form (i), file);
+
+ while (++i < csize && ccl_contains(cclp,i)) ;
+
+ if (i - 1 > start_char)
+ /* this was a run */
+ fprintf (file, "-%s",
+ readable_form (i - 1));
+
+ putc (' ', file);
+ }
}
+ putc (']', file);
+}
+
+
+
+/* ccl_set_diff - create a new ccl as the set difference of the two given ccls. */
+int
+ccl_set_diff (int a, int b)
+{
+ int d, ch;
+
+ /* create new class */
+ d = cclinit();
+
+ /* In order to handle negation, we spin through all possible chars,
+ * addding each char in a that is not in b.
+ * (This could be O(n^2), but n is small and bounded.)
+ */
+ for ( ch = 0; ch < csize; ++ch )
+ if (ccl_contains (a, ch) && !ccl_contains(b, ch))
+ ccladd (d, ch);
+
+ /* debug */
+ if (0){
+ fprintf(stderr, "ccl_set_diff (");
+ fprintf(stderr, "\n ");
+ dump_cclp (stderr, a);
+ fprintf(stderr, "\n ");
+ dump_cclp (stderr, b);
+ fprintf(stderr, "\n ");
+ dump_cclp (stderr, d);
+ fprintf(stderr, "\n)\n");
+ }
+ return d;
+}
+
+/* ccl_set_union - create a new ccl as the set union of the two given ccls. */
+int
+ccl_set_union (int a, int b)
+{
+ int d, i;
+
+ /* create new class */
+ d = cclinit();
+
+ /* Add all of a */
+ for (i = 0; i < ccllen[a]; ++i)
+ ccladd (d, ccltbl[cclmap[a] + i]);
+
+ /* Add all of b */
+ for (i = 0; i < ccllen[b]; ++i)
+ ccladd (d, ccltbl[cclmap[b] + i]);
+
+ /* debug */
+ if (0){
+ fprintf(stderr, "ccl_set_union (%d + %d = %d", a, b, d);
+ fprintf(stderr, "\n ");
+ dump_cclp (stderr, a);
+ fprintf(stderr, "\n ");
+ dump_cclp (stderr, b);
+ fprintf(stderr, "\n ");
+ dump_cclp (stderr, d);
+ fprintf(stderr, "\n)\n");
+ }
+ return d;
+}
+
/* cclinit - return an empty ccl */
-int cclinit()
- {
- if ( ++lastccl >= current_maxccls )
- {
+int cclinit ()
+{
+ if (++lastccl >= current_maxccls) {
current_maxccls += MAX_CCLS_INCREMENT;
++num_reallocs;
- cclmap = reallocate_integer_array( cclmap, current_maxccls );
- ccllen = reallocate_integer_array( ccllen, current_maxccls );
- cclng = reallocate_integer_array( cclng, current_maxccls );
- }
+ cclmap =
+ reallocate_integer_array (cclmap, current_maxccls);
+ ccllen =
+ reallocate_integer_array (ccllen, current_maxccls);
+ cclng = reallocate_integer_array (cclng, current_maxccls);
+ ccl_has_nl =
+ reallocate_bool_array (ccl_has_nl,
+ current_maxccls);
+ }
- if ( lastccl == 1 )
+ if (lastccl == 1)
/* we're making the first ccl */
cclmap[lastccl] = 0;
@@ -98,22 +214,25 @@ int cclinit()
* ccl, adding the length of the ccl to the cclmap pointer
* will produce a cursor to the first free space.
*/
- cclmap[lastccl] = cclmap[lastccl - 1] + ccllen[lastccl - 1];
+ cclmap[lastccl] =
+ cclmap[lastccl - 1] + ccllen[lastccl - 1];
ccllen[lastccl] = 0;
cclng[lastccl] = 0; /* ccl's start out life un-negated */
+ ccl_has_nl[lastccl] = false;
return lastccl;
- }
+}
/* cclnegate - negate the given ccl */
-void cclnegate( cclp )
-int cclp;
- {
+void cclnegate (cclp)
+ int cclp;
+{
cclng[cclp] = 1;
- }
+ ccl_has_nl[cclp] = !ccl_has_nl[cclp];
+}
/* list_character_set - list the members of a set of characters in CCL form
@@ -123,34 +242,71 @@ int cclp;
* has a non-zero value in the cset array.
*/
-void list_character_set( file, cset )
-FILE *file;
-int cset[];
- {
+void list_character_set (file, cset)
+ FILE *file;
+ int cset[];
+{
int i;
- putc( '[', file );
+ putc ('[', file);
- for ( i = 0; i < csize; ++i )
- {
- if ( cset[i] )
- {
+ for (i = 0; i < csize; ++i) {
+ if (cset[i]) {
int start_char = i;
- putc( ' ', file );
+ putc (' ', file);
- fputs( readable_form( i ), file );
+ fputs (readable_form (i), file);
- while ( ++i < csize && cset[i] )
- ;
+ while (++i < csize && cset[i]) ;
- if ( i - 1 > start_char )
+ if (i - 1 > start_char)
/* this was a run */
- fprintf( file, "-%s", readable_form( i - 1 ) );
+ fprintf (file, "-%s",
+ readable_form (i - 1));
- putc( ' ', file );
- }
+ putc (' ', file);
}
+ }
+
+ putc (']', file);
+}
- putc( ']', file );
+/** Determines if the range [c1-c2] is unambiguous in a case-insensitive
+ * scanner. Specifically, if a lowercase or uppercase character, x, is in the
+ * range [c1-c2], then we require that UPPERCASE(x) and LOWERCASE(x) must also
+ * be in the range. If not, then this range is ambiguous, and the function
+ * returns false. For example, [@-_] spans [a-z] but not [A-Z]. Beware that
+ * [a-z] will be labeled ambiguous because it does not include [A-Z].
+ *
+ * @param c1 the lower end of the range
+ * @param c2 the upper end of the range
+ * @return true if [c1-c2] is not ambiguous for a caseless scanner.
+ */
+bool range_covers_case (int c1, int c2)
+{
+ int i, o;
+
+ for (i = c1; i <= c2; i++) {
+ if (has_case (i)) {
+ o = reverse_case (i);
+ if (o < c1 || c2 < o)
+ return false;
+ }
}
+ return true;
+}
+
+/** Reverse the case of a character, if possible.
+ * @return c if case-reversal does not apply.
+ */
+int reverse_case (int c)
+{
+ return isupper (c) ? tolower (c) : (islower (c) ? toupper (c) : c);
+}
+
+/** Return true if c is uppercase or lowercase. */
+bool has_case (int c)
+{
+ return (isupper (c) || islower (c)) ? true : false;
+}
diff --git a/usr.bin/lex/config.h b/usr.bin/lex/config.h
index ec878e4daea..14d25ab8d67 100644
--- a/usr.bin/lex/config.h
+++ b/usr.bin/lex/config.h
@@ -1,28 +1,224 @@
-/* $OpenBSD: config.h,v 1.3 1996/10/26 21:50:30 tholo Exp $ */
+/* $OpenBSD: config.h,v 1.4 2015/11/19 19:43:40 tedu Exp $ */
-/* config.h. Generated automatically by configure. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/config.h,v 1.3 1996/10/26 21:50:30 tholo Exp $ */
+/* config.h. Generated from conf.in by configure. */
+/* conf.in. Generated from configure.ac by autoheader. */
-/* Define to empty if the keyword does not work. */
-/* #undef const */
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+ systems. This function is required for `alloca.c' support on those systems.
+ */
+/* #undef CRAY_STACKSEG_END */
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-/* #undef size_t */
+/* Define to 1 if using `alloca.c'. */
+/* #undef C_ALLOCA */
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+/* #undef ENABLE_NLS */
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#define HAVE_ALLOCA 1
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+ */
+/* #undef HAVE_ALLOCA_H */
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+ CoreFoundation framework. */
+/* #undef HAVE_CFLOCALECOPYCURRENT */
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+/* #undef HAVE_DCGETTEXT */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the `dup2' function. */
+#define HAVE_DUP2 1
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+/* #undef HAVE_GETTEXT */
+
+/* Define if you have the iconv() function and it works. */
+#define HAVE_ICONV 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `isascii' function. */
+#define HAVE_ISASCII 1
+
+/* Define to 1 if you have the <libintl.h> header file. */
+/* #undef HAVE_LIBINTL_H */
+
+/* Define to 1 if you have the `m' library (-lm). */
+#define HAVE_LIBM 1
+
+/* pthread library */
+#define HAVE_LIBPTHREAD 1
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+ to 0 otherwise. */
+#define HAVE_MALLOC 1
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#define HAVE_MALLOC_H 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `memset' function. */
+#define HAVE_MEMSET 1
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H 1
+
+/* Define to 1 if you have the `pow' function. */
+#define HAVE_POW 1
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#define HAVE_PTHREAD_H 1
+
+/* Define to 1 if your system has a GNU libc compatible `realloc' function,
+ and to 0 otherwise. */
+#define HAVE_REALLOC 1
+
+/* Define to 1 if you have the `regcomp' function. */
+#define HAVE_REGCOMP 1
+
+/* Define to 1 if you have the <regex.h> header file. */
+#define HAVE_REGEX_H 1
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_H 1
-/* Define if you have the <malloc.h> header file. */
-/* #undef HAVE_MALLOC_H */
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
-/* Define if you have the <string.h> header file. */
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
-/* Define if you have the <sys/types.h> header file. */
+/* Define to 1 if you have the `strtol' function. */
+#define HAVE_STRTOL 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
-/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
-/* #undef HAVE_ALLOCA_H */
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `vfork' function. */
+#define HAVE_VFORK 1
+
+/* Define to 1 if you have the <vfork.h> header file. */
+/* #undef HAVE_VFORK_H */
+
+/* Define to 1 if `fork' works. */
+#define HAVE_WORKING_FORK 1
+
+/* Define to 1 if `vfork' works. */
+#define HAVE_WORKING_VFORK 1
+
+/* Define to 1 if the system has the type `_Bool'. */
+#define HAVE__BOOL 1
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#define LT_OBJDIR ".libs/"
+
+/* Define to the m4 executable name. */
+#define M4 "/usr/bin/m4"
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+/* #undef NO_MINUS_C_MINUS_O */
+
+/* Name of package */
+#define PACKAGE "flex"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "flex-help@lists.sourceforge.net"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "the fast lexical analyser generator"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "the fast lexical analyser generator 2.5.39"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "flex"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "2.5.39"
+
+/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at runtime.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+/* #undef STACK_DIRECTION */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Version number of package */
+#define VERSION "2.5.39"
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+ `char[]'. */
+#define YYTEXT_POINTER 1
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to rpl_malloc if the replacement function should be used. */
+/* #undef malloc */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef pid_t */
+
+/* Define to rpl_realloc if the replacement function should be used. */
+/* #undef realloc */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
-/* Define if platform-specific command line handling is necessary. */
-/* #undef NEED_ARGV_FIXUP */
+/* Define as `fork' if `vfork' does not work. */
+/* #undef vfork */
diff --git a/usr.bin/lex/dfa.c b/usr.bin/lex/dfa.c
index ba3e62f1525..316a36bc6de 100644
--- a/usr.bin/lex/dfa.c
+++ b/usr.bin/lex/dfa.c
@@ -1,49 +1,45 @@
-/* $OpenBSD: dfa.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* $OpenBSD: dfa.c,v 1.7 2015/11/19 19:43:40 tedu Exp $ */
/* dfa - DFA construction routines */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/dfa.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
-#include "flexdef.h"
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+#include "tables.h"
/* declare functions that have forward references */
-void dump_associated_rules PROTO((FILE*, int));
-void dump_transitions PROTO((FILE*, int[]));
-void sympartition PROTO((int[], int, int[], int[]));
-int symfollowset PROTO((int[], int, int, int[]));
+void dump_associated_rules PROTO ((FILE *, int));
+void dump_transitions PROTO ((FILE *, int[]));
+void sympartition PROTO ((int[], int, int[], int[]));
+int symfollowset PROTO ((int[], int, int, int[]));
/* check_for_backing_up - check a DFA state for backing up
@@ -55,32 +51,29 @@ int symfollowset PROTO((int[], int, int, int[]));
* indexed by equivalence class.
*/
-void check_for_backing_up( ds, state )
-int ds;
-int state[];
- {
- if ( (reject && ! dfaacc[ds].dfaacc_set) ||
- (! reject && ! dfaacc[ds].dfaacc_state) )
- { /* state is non-accepting */
+void check_for_backing_up (ds, state)
+ int ds;
+ int state[];
+{
+ if ((reject && !dfaacc[ds].dfaacc_set) || (!reject && !dfaacc[ds].dfaacc_state)) { /* state is non-accepting */
++num_backing_up;
- if ( backing_up_report )
- {
- fprintf( backing_up_file,
- _( "State #%d is non-accepting -\n" ), ds );
+ if (backing_up_report) {
+ fprintf (backing_up_file,
+ _("State #%d is non-accepting -\n"), ds);
/* identify the state */
- dump_associated_rules( backing_up_file, ds );
+ dump_associated_rules (backing_up_file, ds);
/* Now identify it further using the out- and
* jam-transitions.
*/
- dump_transitions( backing_up_file, state );
+ dump_transitions (backing_up_file, state);
- putc( '\n', backing_up_file );
- }
+ putc ('\n', backing_up_file);
}
}
+}
/* check_trailing_context - check to see if NFA state set constitutes
@@ -105,42 +98,38 @@ int state[];
* accset[1 .. nacc] is the list of accepting numbers for the DFA state.
*/
-void check_trailing_context( nfa_states, num_states, accset, nacc )
-int *nfa_states, num_states;
-int *accset;
-int nacc;
- {
+void check_trailing_context (nfa_states, num_states, accset, nacc)
+ int *nfa_states, num_states;
+ int *accset;
+ int nacc;
+{
int i, j;
- for ( i = 1; i <= num_states; ++i )
- {
- int ns = nfa_states[i];
+ for (i = 1; i <= num_states; ++i) {
+ int ns = nfa_states[i];
int type = state_type[ns];
int ar = assoc_rule[ns];
- if ( type == STATE_NORMAL || rule_type[ar] != RULE_VARIABLE )
- { /* do nothing */
- }
+ if (type == STATE_NORMAL || rule_type[ar] != RULE_VARIABLE) { /* do nothing */
+ }
- else if ( type == STATE_TRAILING_CONTEXT )
- {
+ else if (type == STATE_TRAILING_CONTEXT) {
/* Potential trouble. Scan set of accepting numbers
* for the one marking the end of the "head". We
* assume that this looping will be fairly cheap
* since it's rare that an accepting number set
* is large.
*/
- for ( j = 1; j <= nacc; ++j )
- if ( accset[j] & YY_TRAILING_HEAD_MASK )
- {
- line_warning(
- _( "dangerous trailing context" ),
- rule_linenum[ar] );
+ for (j = 1; j <= nacc; ++j)
+ if (accset[j] & YY_TRAILING_HEAD_MASK) {
+ line_warning (_
+ ("dangerous trailing context"),
+ rule_linenum[ar]);
return;
- }
- }
+ }
}
}
+}
/* dump_associated_rules - list the rules associated with a DFA state
@@ -150,46 +139,44 @@ int nacc;
* and writes a report to the given file.
*/
-void dump_associated_rules( file, ds )
-FILE *file;
-int ds;
- {
+void dump_associated_rules (file, ds)
+ FILE *file;
+ int ds;
+{
int i, j;
int num_associated_rules = 0;
- int rule_set[MAX_ASSOC_RULES + 1];
- int *dset = dss[ds];
- int size = dfasiz[ds];
+ int rule_set[MAX_ASSOC_RULES + 1];
+ int *dset = dss[ds];
+ int size = dfasiz[ds];
- for ( i = 1; i <= size; ++i )
- {
+ for (i = 1; i <= size; ++i) {
int rule_num = rule_linenum[assoc_rule[dset[i]]];
- for ( j = 1; j <= num_associated_rules; ++j )
- if ( rule_num == rule_set[j] )
+ for (j = 1; j <= num_associated_rules; ++j)
+ if (rule_num == rule_set[j])
break;
- if ( j > num_associated_rules )
- { /* new rule */
- if ( num_associated_rules < MAX_ASSOC_RULES )
- rule_set[++num_associated_rules] = rule_num;
- }
+ if (j > num_associated_rules) { /* new rule */
+ if (num_associated_rules < MAX_ASSOC_RULES)
+ rule_set[++num_associated_rules] =
+ rule_num;
}
+ }
- bubble( rule_set, num_associated_rules );
+ qsort (&rule_set [1], num_associated_rules, sizeof (rule_set [1]), intcmp);
- fprintf( file, _( " associated rule line numbers:" ) );
+ fprintf (file, _(" associated rule line numbers:"));
- for ( i = 1; i <= num_associated_rules; ++i )
- {
- if ( i % 8 == 1 )
- putc( '\n', file );
+ for (i = 1; i <= num_associated_rules; ++i) {
+ if (i % 8 == 1)
+ putc ('\n', file);
- fprintf( file, "\t%d", rule_set[i] );
- }
-
- putc( '\n', file );
+ fprintf (file, "\t%d", rule_set[i]);
}
+ putc ('\n', file);
+}
+
/* dump_transitions - list the transitions associated with a DFA state
*
@@ -202,33 +189,32 @@ int ds;
* is done to the given file.
*/
-void dump_transitions( file, state )
-FILE *file;
-int state[];
- {
+void dump_transitions (file, state)
+ FILE *file;
+ int state[];
+{
int i, ec;
- int out_char_set[CSIZE];
+ int out_char_set[CSIZE];
- for ( i = 0; i < csize; ++i )
- {
- ec = ABS( ecgroup[i] );
+ for (i = 0; i < csize; ++i) {
+ ec = ABS (ecgroup[i]);
out_char_set[i] = state[ec];
- }
+ }
- fprintf( file, _( " out-transitions: " ) );
+ fprintf (file, _(" out-transitions: "));
- list_character_set( file, out_char_set );
+ list_character_set (file, out_char_set);
/* now invert the members of the set to get the jam transitions */
- for ( i = 0; i < csize; ++i )
- out_char_set[i] = ! out_char_set[i];
+ for (i = 0; i < csize; ++i)
+ out_char_set[i] = !out_char_set[i];
- fprintf( file, _( "\n jam-transitions: EOF " ) );
+ fprintf (file, _("\n jam-transitions: EOF "));
- list_character_set( file, out_char_set );
+ list_character_set (file, out_char_set);
- putc( '\n', file );
- }
+ putc ('\n', file);
+}
/* epsclosure - construct the epsilon closure of a set of ndfa states
@@ -251,146 +237,141 @@ int state[];
* hashval is the hash value for the dfa corresponding to the state set.
*/
-int *epsclosure( t, ns_addr, accset, nacc_addr, hv_addr )
-int *t, *ns_addr, accset[], *nacc_addr, *hv_addr;
- {
+int *epsclosure (t, ns_addr, accset, nacc_addr, hv_addr)
+ int *t, *ns_addr, accset[], *nacc_addr, *hv_addr;
+{
int stkpos, ns, tsp;
- int numstates = *ns_addr, nacc, hashval, transsym, nfaccnum;
- int stkend, nstate;
- static int did_stk_init = false, *stk;
+ int numstates = *ns_addr, nacc, hashval, transsym, nfaccnum;
+ int stkend, nstate;
+ static int did_stk_init = false, *stk;
#define MARK_STATE(state) \
-trans1[state] = trans1[state] - MARKER_DIFFERENCE;
+do{ trans1[state] = trans1[state] - MARKER_DIFFERENCE;} while(0)
#define IS_MARKED(state) (trans1[state] < 0)
#define UNMARK_STATE(state) \
-trans1[state] = trans1[state] + MARKER_DIFFERENCE;
+do{ trans1[state] = trans1[state] + MARKER_DIFFERENCE;} while(0)
#define CHECK_ACCEPT(state) \
-{ \
+do{ \
nfaccnum = accptnum[state]; \
if ( nfaccnum != NIL ) \
accset[++nacc] = nfaccnum; \
-}
+}while(0)
-#define DO_REALLOCATION \
-{ \
+#define DO_REALLOCATION() \
+do { \
current_max_dfa_size += MAX_DFA_SIZE_INCREMENT; \
++num_reallocs; \
t = reallocate_integer_array( t, current_max_dfa_size ); \
stk = reallocate_integer_array( stk, current_max_dfa_size ); \
-} \
+}while(0) \
#define PUT_ON_STACK(state) \
-{ \
+do { \
if ( ++stkend >= current_max_dfa_size ) \
-DO_REALLOCATION \
+DO_REALLOCATION(); \
stk[stkend] = state; \
-MARK_STATE(state) \
-}
+MARK_STATE(state); \
+}while(0)
#define ADD_STATE(state) \
-{ \
+do { \
if ( ++numstates >= current_max_dfa_size ) \
-DO_REALLOCATION \
+DO_REALLOCATION(); \
t[numstates] = state; \
hashval += state; \
-}
+}while(0)
#define STACK_STATE(state) \
-{ \
-PUT_ON_STACK(state) \
-CHECK_ACCEPT(state) \
+do { \
+PUT_ON_STACK(state); \
+CHECK_ACCEPT(state); \
if ( nfaccnum != NIL || transchar[state] != SYM_EPSILON ) \
-ADD_STATE(state) \
-}
+ADD_STATE(state); \
+}while(0)
- if ( ! did_stk_init )
- {
- stk = allocate_integer_array( current_max_dfa_size );
+ if (!did_stk_init) {
+ stk = allocate_integer_array (current_max_dfa_size);
did_stk_init = true;
- }
+ }
nacc = stkend = hashval = 0;
- for ( nstate = 1; nstate <= numstates; ++nstate )
- {
+ for (nstate = 1; nstate <= numstates; ++nstate) {
ns = t[nstate];
/* The state could be marked if we've already pushed it onto
* the stack.
*/
- if ( ! IS_MARKED(ns) )
- {
- PUT_ON_STACK(ns)
- CHECK_ACCEPT(ns)
+ if (!IS_MARKED (ns)) {
+ PUT_ON_STACK (ns);
+ CHECK_ACCEPT (ns);
hashval += ns;
- }
}
+ }
- for ( stkpos = 1; stkpos <= stkend; ++stkpos )
- {
+ for (stkpos = 1; stkpos <= stkend; ++stkpos) {
ns = stk[stkpos];
transsym = transchar[ns];
- if ( transsym == SYM_EPSILON )
- {
+ if (transsym == SYM_EPSILON) {
tsp = trans1[ns] + MARKER_DIFFERENCE;
- if ( tsp != NO_TRANSITION )
- {
- if ( ! IS_MARKED(tsp) )
- STACK_STATE(tsp)
+ if (tsp != NO_TRANSITION) {
+ if (!IS_MARKED (tsp))
+ STACK_STATE (tsp);
tsp = trans2[ns];
- if ( tsp != NO_TRANSITION && ! IS_MARKED(tsp) )
- STACK_STATE(tsp)
- }
+ if (tsp != NO_TRANSITION
+ && !IS_MARKED (tsp))
+ STACK_STATE (tsp);
}
}
+ }
/* Clear out "visit" markers. */
- for ( stkpos = 1; stkpos <= stkend; ++stkpos )
- {
- if ( IS_MARKED(stk[stkpos]) )
- UNMARK_STATE(stk[stkpos])
+ for (stkpos = 1; stkpos <= stkend; ++stkpos) {
+ if (IS_MARKED (stk[stkpos]))
+ UNMARK_STATE (stk[stkpos]);
else
- flexfatal(
- _( "consistency check failed in epsclosure()" ) );
- }
+ flexfatal (_
+ ("consistency check failed in epsclosure()"));
+ }
*ns_addr = numstates;
*hv_addr = hashval;
*nacc_addr = nacc;
return t;
- }
+}
/* increase_max_dfas - increase the maximum number of DFAs */
-void increase_max_dfas()
- {
+void increase_max_dfas ()
+{
current_max_dfas += MAX_DFAS_INCREMENT;
++num_reallocs;
- base = reallocate_integer_array( base, current_max_dfas );
- def = reallocate_integer_array( def, current_max_dfas );
- dfasiz = reallocate_integer_array( dfasiz, current_max_dfas );
- accsiz = reallocate_integer_array( accsiz, current_max_dfas );
- dhash = reallocate_integer_array( dhash, current_max_dfas );
- dss = reallocate_int_ptr_array( dss, current_max_dfas );
- dfaacc = reallocate_dfaacc_union( dfaacc, current_max_dfas );
+ base = reallocate_integer_array (base, current_max_dfas);
+ def = reallocate_integer_array (def, current_max_dfas);
+ dfasiz = reallocate_integer_array (dfasiz, current_max_dfas);
+ accsiz = reallocate_integer_array (accsiz, current_max_dfas);
+ dhash = reallocate_integer_array (dhash, current_max_dfas);
+ dss = reallocate_int_ptr_array (dss, current_max_dfas);
+ dfaacc = reallocate_dfaacc_union (dfaacc, current_max_dfas);
- if ( nultrans )
+ if (nultrans)
nultrans =
- reallocate_integer_array( nultrans, current_max_dfas );
- }
+ reallocate_integer_array (nultrans,
+ current_max_dfas);
+}
/* ntod - convert an ndfa to a dfa
@@ -399,16 +380,19 @@ void increase_max_dfas()
* dfa starts out in state #1.
*/
-void ntod()
- {
- int *accset, ds, nacc, newds;
- int sym, hashval, numstates, dsize;
- int num_full_table_rows; /* used only for -f */
- int *nset, *dset;
- int targptr, totaltrans, i, comstate, comfreq, targ;
- int symlist[CSIZE + 1];
- int num_start_states;
- int todo_head, todo_next;
+void ntod ()
+{
+ int *accset, ds, nacc, newds;
+ int sym, hashval, numstates, dsize;
+ int num_full_table_rows=0; /* used only for -f */
+ int *nset, *dset;
+ int targptr, totaltrans, i, comstate, comfreq, targ;
+ int symlist[CSIZE + 1];
+ int num_start_states;
+ int todo_head, todo_next;
+
+ struct yytbl_data *yynxt_tbl = 0;
+ flex_int32_t *yynxt_data = 0, yynxt_curr = 0;
/* Note that the following are indexed by *equivalence classes*
* and not by characters. Since equivalence classes are indexed
@@ -417,11 +401,14 @@ void ntod()
* equivalence class) these arrays must have room for indices
* from 1 to CSIZE, so their size must be CSIZE + 1.
*/
- int duplist[CSIZE + 1], state[CSIZE + 1];
- int targfreq[CSIZE + 1], targstate[CSIZE + 1];
+ int duplist[CSIZE + 1], state[CSIZE + 1];
+ int targfreq[CSIZE + 1], targstate[CSIZE + 1];
- accset = allocate_integer_array( num_rules + 1 );
- nset = allocate_integer_array( current_max_dfa_size );
+ /* accset needs to be large enough to hold all of the rules present
+ * in the input, *plus* their YY_TRAILING_HEAD_MASK variants.
+ */
+ accset = allocate_integer_array ((num_rules + 1) * 2);
+ nset = allocate_integer_array (current_max_dfa_size);
/* The "todo" queue is represented by the head, which is the DFA
* state currently being processed, and the "next", which is the
@@ -431,22 +418,20 @@ void ntod()
*/
todo_head = todo_next = 0;
- for ( i = 0; i <= csize; ++i )
- {
+ for (i = 0; i <= csize; ++i) {
duplist[i] = NIL;
symlist[i] = false;
- }
+ }
- for ( i = 0; i <= num_rules; ++i )
+ for (i = 0; i <= num_rules; ++i)
accset[i] = NIL;
- if ( trace )
- {
- dumpnfa( scset[1] );
- fputs( _( "\n\nDFA Dump:\n\n" ), stderr );
- }
+ if (trace) {
+ dumpnfa (scset[1]);
+ fputs (_("\n\nDFA Dump:\n\n"), stderr);
+ }
- inittbl();
+ inittbl ();
/* Check to see whether we should build a separate table for
* transitions on NUL characters. We don't do this for full-speed
@@ -480,50 +465,46 @@ void ntod()
/* Note that the test for ecgroup[0] == numecs below accomplishes
* both (1) and (2) above
*/
- if ( ! fullspd && ecgroup[0] == numecs )
- {
+ if (!fullspd && ecgroup[0] == numecs) {
/* NUL is alone in its equivalence class, which is the
* last one.
*/
- int use_NUL_table = (numecs == csize);
+ int use_NUL_table = (numecs == csize);
- if ( fulltbl && ! use_NUL_table )
- {
+ if (fulltbl && !use_NUL_table) {
/* We still may want to use the table if numecs
* is a power of 2.
*/
- int power_of_two;
+ int power_of_two;
- for ( power_of_two = 1; power_of_two <= csize;
- power_of_two *= 2 )
- if ( numecs == power_of_two )
- {
+ for (power_of_two = 1; power_of_two <= csize;
+ power_of_two *= 2)
+ if (numecs == power_of_two) {
use_NUL_table = true;
break;
- }
- }
+ }
+ }
- if ( use_NUL_table )
- nultrans = allocate_integer_array( current_max_dfas );
+ if (use_NUL_table)
+ nultrans =
+ allocate_integer_array (current_max_dfas);
/* From now on, nultrans != nil indicates that we're
* saving null transitions for later, separate encoding.
*/
- }
+ }
- if ( fullspd )
- {
- for ( i = 0; i <= numecs; ++i )
+ if (fullspd) {
+ for (i = 0; i <= numecs; ++i)
state[i] = 0;
- place_state( state, 0, 0 );
+ place_state (state, 0, 0);
dfaacc[0].dfaacc_state = 0;
- }
+ }
- else if ( fulltbl )
- {
- if ( nultrans )
+ else if (fulltbl) {
+ if (nultrans)
/* We won't be including NUL's transitions in the
* table, so build it for entries from 0 .. numecs - 1.
*/
@@ -536,72 +517,105 @@ void ntod()
*/
num_full_table_rows = numecs + 1;
+ /* Begin generating yy_nxt[][]
+ * This spans the entire LONG function.
+ * This table is tricky because we don't know how big it will be.
+ * So we'll have to realloc() on the way...
+ * we'll wait until we can calculate yynxt_tbl->td_hilen.
+ */
+ yynxt_tbl =
+ (struct yytbl_data *) calloc (1,
+ sizeof (struct
+ yytbl_data));
+ yytbl_data_init (yynxt_tbl, YYTD_ID_NXT);
+ yynxt_tbl->td_hilen = 1;
+ yynxt_tbl->td_lolen = num_full_table_rows;
+ yynxt_tbl->td_data = yynxt_data =
+ (flex_int32_t *) calloc (yynxt_tbl->td_lolen *
+ yynxt_tbl->td_hilen,
+ sizeof (flex_int32_t));
+ yynxt_curr = 0;
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_NXT, (void**)&yy_nxt, sizeof(%s)},\n",
+ long_align ? "flex_int32_t" : "flex_int16_t");
+
/* Unless -Ca, declare it "short" because it's a real
* long-shot that that won't be large enough.
*/
- out_str_dec( "static yyconst %s yy_nxt[][%d] =\n {\n",
- /* '}' so vi doesn't get too confused */
- long_align ? "long" : "short", num_full_table_rows );
+ if (gentables)
+ out_str_dec
+ ("static yyconst %s yy_nxt[][%d] =\n {\n",
+ long_align ? "flex_int32_t" : "flex_int16_t",
+ num_full_table_rows);
+ else {
+ out_dec ("#undef YY_NXT_LOLEN\n#define YY_NXT_LOLEN (%d)\n", num_full_table_rows);
+ out_str ("static yyconst %s *yy_nxt =0;\n",
+ long_align ? "flex_int32_t" : "flex_int16_t");
+ }
- outn( " {" );
- /* Generate 0 entries for state #0. */
- for ( i = 0; i < num_full_table_rows; ++i )
- mk2data( 0 );
+ if (gentables)
+ outn (" {");
- dataflush();
- outn( " },\n" );
+ /* Generate 0 entries for state #0. */
+ for (i = 0; i < num_full_table_rows; ++i) {
+ mk2data (0);
+ yynxt_data[yynxt_curr++] = 0;
}
+ dataflush ();
+ if (gentables)
+ outn (" },\n");
+ }
+
/* Create the first states. */
num_start_states = lastsc * 2;
- for ( i = 1; i <= num_start_states; ++i )
- {
+ for (i = 1; i <= num_start_states; ++i) {
numstates = 1;
/* For each start condition, make one state for the case when
* we're at the beginning of the line (the '^' operator) and
* one for the case when we're not.
*/
- if ( i % 2 == 1 )
+ if (i % 2 == 1)
nset[numstates] = scset[(i / 2) + 1];
else
nset[numstates] =
- mkbranch( scbol[i / 2], scset[i / 2] );
+ mkbranch (scbol[i / 2], scset[i / 2]);
- nset = epsclosure( nset, &numstates, accset, &nacc, &hashval );
+ nset = epsclosure (nset, &numstates, accset, &nacc,
+ &hashval);
- if ( snstods( nset, numstates, accset, nacc, hashval, &ds ) )
- {
+ if (snstods (nset, numstates, accset, nacc, hashval, &ds)) {
numas += nacc;
totnst += numstates;
++todo_next;
- if ( variable_trailing_context_rules && nacc > 0 )
- check_trailing_context( nset, numstates,
- accset, nacc );
- }
+ if (variable_trailing_context_rules && nacc > 0)
+ check_trailing_context (nset, numstates,
+ accset, nacc);
}
+ }
- if ( ! fullspd )
- {
- if ( ! snstods( nset, 0, accset, 0, 0, &end_of_buffer_state ) )
- flexfatal(
- _( "could not create unique end-of-buffer state" ) );
+ if (!fullspd) {
+ if (!snstods (nset, 0, accset, 0, 0, &end_of_buffer_state))
+ flexfatal (_
+ ("could not create unique end-of-buffer state"));
++numas;
++num_start_states;
++todo_next;
- }
+ }
- while ( todo_head < todo_next )
- {
+
+ while (todo_head < todo_next) {
targptr = 0;
totaltrans = 0;
- for ( i = 1; i <= numecs; ++i )
+ for (i = 1; i <= numecs; ++i)
state[i] = 0;
ds = ++todo_head;
@@ -609,53 +623,54 @@ void ntod()
dset = dss[ds];
dsize = dfasiz[ds];
- if ( trace )
- fprintf( stderr, _( "state # %d:\n" ), ds );
+ if (trace)
+ fprintf (stderr, _("state # %d:\n"), ds);
- sympartition( dset, dsize, symlist, duplist );
+ sympartition (dset, dsize, symlist, duplist);
- for ( sym = 1; sym <= numecs; ++sym )
- {
- if ( symlist[sym] )
- {
+ for (sym = 1; sym <= numecs; ++sym) {
+ if (symlist[sym]) {
symlist[sym] = 0;
- if ( duplist[sym] == NIL )
- {
+ if (duplist[sym] == NIL) {
/* Symbol has unique out-transitions. */
- numstates = symfollowset( dset, dsize,
- sym, nset );
- nset = epsclosure( nset, &numstates,
- accset, &nacc, &hashval );
-
- if ( snstods( nset, numstates, accset,
- nacc, hashval, &newds ) )
- {
- totnst = totnst + numstates;
+ numstates =
+ symfollowset (dset, dsize,
+ sym, nset);
+ nset = epsclosure (nset,
+ &numstates,
+ accset, &nacc,
+ &hashval);
+
+ if (snstods
+ (nset, numstates, accset, nacc,
+ hashval, &newds)) {
+ totnst = totnst +
+ numstates;
++todo_next;
numas += nacc;
- if (
- variable_trailing_context_rules &&
- nacc > 0 )
- check_trailing_context(
- nset, numstates,
- accset, nacc );
- }
+ if (variable_trailing_context_rules && nacc > 0)
+ check_trailing_context
+ (nset,
+ numstates,
+ accset,
+ nacc);
+ }
state[sym] = newds;
- if ( trace )
- fprintf( stderr, "\t%d\t%d\n",
- sym, newds );
+ if (trace)
+ fprintf (stderr,
+ "\t%d\t%d\n", sym,
+ newds);
targfreq[++targptr] = 1;
targstate[targptr] = newds;
++numuniq;
- }
+ }
- else
- {
+ else {
/* sym's equivalence class has the same
* transitions as duplist(sym)'s
* equivalence class.
@@ -663,87 +678,89 @@ void ntod()
targ = state[duplist[sym]];
state[sym] = targ;
- if ( trace )
- fprintf( stderr, "\t%d\t%d\n",
- sym, targ );
+ if (trace)
+ fprintf (stderr,
+ "\t%d\t%d\n", sym,
+ targ);
/* Update frequency count for
* destination state.
*/
i = 0;
- while ( targstate[++i] != targ )
- ;
+ while (targstate[++i] != targ) ;
++targfreq[i];
++numdup;
- }
+ }
++totaltrans;
duplist[sym] = NIL;
- }
}
+ }
- if ( caseins && ! useecs )
- {
- int j;
-
- for ( i = 'A', j = 'a'; i <= 'Z'; ++i, ++j )
- {
- if ( state[i] == 0 && state[j] != 0 )
- /* We're adding a transition. */
- ++totaltrans;
-
- else if ( state[i] != 0 && state[j] == 0 )
- /* We're taking away a transition. */
- --totaltrans;
-
- state[i] = state[j];
- }
- }
numsnpairs += totaltrans;
- if ( ds > num_start_states )
- check_for_backing_up( ds, state );
+ if (ds > num_start_states)
+ check_for_backing_up (ds, state);
- if ( nultrans )
- {
+ if (nultrans) {
nultrans[ds] = state[NUL_ec];
state[NUL_ec] = 0; /* remove transition */
- }
+ }
- if ( fulltbl )
- {
- outn( " {" );
+ if (fulltbl) {
+
+ /* Each time we hit here, it's another td_hilen, so we realloc. */
+ yynxt_tbl->td_hilen++;
+ yynxt_tbl->td_data = yynxt_data =
+ (flex_int32_t *) realloc (yynxt_data,
+ yynxt_tbl->td_hilen *
+ yynxt_tbl->td_lolen *
+ sizeof (flex_int32_t));
+
+
+ if (gentables)
+ outn (" {");
/* Supply array's 0-element. */
- if ( ds == end_of_buffer_state )
- mk2data( -end_of_buffer_state );
- else
- mk2data( end_of_buffer_state );
+ if (ds == end_of_buffer_state) {
+ mk2data (-end_of_buffer_state);
+ yynxt_data[yynxt_curr++] =
+ -end_of_buffer_state;
+ }
+ else {
+ mk2data (end_of_buffer_state);
+ yynxt_data[yynxt_curr++] =
+ end_of_buffer_state;
+ }
- for ( i = 1; i < num_full_table_rows; ++i )
+ for (i = 1; i < num_full_table_rows; ++i) {
/* Jams are marked by negative of state
* number.
*/
- mk2data( state[i] ? state[i] : -ds );
-
- dataflush();
- outn( " },\n" );
+ mk2data (state[i] ? state[i] : -ds);
+ yynxt_data[yynxt_curr++] =
+ state[i] ? state[i] : -ds;
}
- else if ( fullspd )
- place_state( state, ds, totaltrans );
+ dataflush ();
+ if (gentables)
+ outn (" },\n");
+ }
+
+ else if (fullspd)
+ place_state (state, ds, totaltrans);
- else if ( ds == end_of_buffer_state )
+ else if (ds == end_of_buffer_state)
/* Special case this state to make sure it does what
* it's supposed to, i.e., jam on end-of-buffer.
*/
- stack1( ds, 0, 0, JAMSTATE );
+ stack1 (ds, 0, 0, JAMSTATE);
+
+ else { /* normal, compressed state */
- else /* normal, compressed state */
- {
/* Determine which destination state is the most
* common, and how many transitions to it there are.
*/
@@ -751,41 +768,49 @@ void ntod()
comfreq = 0;
comstate = 0;
- for ( i = 1; i <= targptr; ++i )
- if ( targfreq[i] > comfreq )
- {
+ for (i = 1; i <= targptr; ++i)
+ if (targfreq[i] > comfreq) {
comfreq = targfreq[i];
comstate = targstate[i];
- }
+ }
- bldtbl( state, ds, totaltrans, comstate, comfreq );
- }
+ bldtbl (state, ds, totaltrans, comstate, comfreq);
}
+ }
- if ( fulltbl )
- dataend();
+ if (fulltbl) {
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yynxt_tbl);
+ if (yytbl_data_fwrite (&tableswr, yynxt_tbl) < 0)
+ flexerror (_
+ ("Could not write yynxt_tbl[][]"));
+ }
+ if (yynxt_tbl) {
+ yytbl_data_destroy (yynxt_tbl);
+ yynxt_tbl = 0;
+ }
+ }
- else if ( ! fullspd )
- {
- cmptmps(); /* create compressed template entries */
+ else if (!fullspd) {
+ cmptmps (); /* create compressed template entries */
/* Create tables for all the states with only one
* out-transition.
*/
- while ( onesp > 0 )
- {
- mk1tbl( onestate[onesp], onesym[onesp], onenext[onesp],
- onedef[onesp] );
+ while (onesp > 0) {
+ mk1tbl (onestate[onesp], onesym[onesp],
+ onenext[onesp], onedef[onesp]);
--onesp;
- }
-
- mkdeftbl();
}
- flex_free( (void *) accset );
- flex_free( (void *) nset );
+ mkdeftbl ();
}
+ flex_free ((void *) accset);
+ flex_free ((void *) nset);
+}
+
/* snstods - converts a set of ndfa states into a dfa state
*
@@ -797,129 +822,119 @@ void ntod()
* On return, the dfa state number is in newds.
*/
-int snstods( sns, numstates, accset, nacc, hashval, newds_addr )
-int sns[], numstates, accset[], nacc, hashval, *newds_addr;
- {
- int didsort = 0;
+int snstods (sns, numstates, accset, nacc, hashval, newds_addr)
+ int sns[], numstates, accset[], nacc, hashval, *newds_addr;
+{
+ int didsort = 0;
int i, j;
- int newds, *oldsns;
+ int newds, *oldsns;
- for ( i = 1; i <= lastdfa; ++i )
- if ( hashval == dhash[i] )
- {
- if ( numstates == dfasiz[i] )
- {
+ for (i = 1; i <= lastdfa; ++i)
+ if (hashval == dhash[i]) {
+ if (numstates == dfasiz[i]) {
oldsns = dss[i];
- if ( ! didsort )
- {
+ if (!didsort) {
/* We sort the states in sns so we
* can compare it to oldsns quickly.
- * We use bubble because there probably
- * aren't very many states.
*/
- bubble( sns, numstates );
+ qsort (&sns [1], numstates, sizeof (sns [1]), intcmp);
didsort = 1;
- }
+ }
- for ( j = 1; j <= numstates; ++j )
- if ( sns[j] != oldsns[j] )
+ for (j = 1; j <= numstates; ++j)
+ if (sns[j] != oldsns[j])
break;
- if ( j > numstates )
- {
+ if (j > numstates) {
++dfaeql;
*newds_addr = i;
return 0;
- }
+ }
++hshcol;
- }
+ }
else
++hshsave;
- }
+ }
/* Make a new dfa. */
- if ( ++lastdfa >= current_max_dfas )
- increase_max_dfas();
+ if (++lastdfa >= current_max_dfas)
+ increase_max_dfas ();
newds = lastdfa;
- dss[newds] = allocate_integer_array( numstates + 1 );
+ dss[newds] = allocate_integer_array (numstates + 1);
/* If we haven't already sorted the states in sns, we do so now,
* so that future comparisons with it can be made quickly.
*/
- if ( ! didsort )
- bubble( sns, numstates );
+ if (!didsort)
+ qsort (&sns [1], numstates, sizeof (sns [1]), intcmp);
- for ( i = 1; i <= numstates; ++i )
+ for (i = 1; i <= numstates; ++i)
dss[newds][i] = sns[i];
dfasiz[newds] = numstates;
dhash[newds] = hashval;
- if ( nacc == 0 )
- {
- if ( reject )
+ if (nacc == 0) {
+ if (reject)
dfaacc[newds].dfaacc_set = (int *) 0;
else
dfaacc[newds].dfaacc_state = 0;
accsiz[newds] = 0;
- }
+ }
- else if ( reject )
- {
+ else if (reject) {
/* We sort the accepting set in increasing order so the
* disambiguating rule that the first rule listed is considered
- * match in the event of ties will work. We use a bubble
- * sort since the list is probably quite small.
+ * match in the event of ties will work.
*/
- bubble( accset, nacc );
+ qsort (&accset [1], nacc, sizeof (accset [1]), intcmp);
- dfaacc[newds].dfaacc_set = allocate_integer_array( nacc + 1 );
+ dfaacc[newds].dfaacc_set =
+ allocate_integer_array (nacc + 1);
/* Save the accepting set for later */
- for ( i = 1; i <= nacc; ++i )
- {
+ for (i = 1; i <= nacc; ++i) {
dfaacc[newds].dfaacc_set[i] = accset[i];
- if ( accset[i] <= num_rules )
+ if (accset[i] <= num_rules)
/* Who knows, perhaps a REJECT can yield
* this rule.
*/
rule_useful[accset[i]] = true;
- }
+ }
accsiz[newds] = nacc;
- }
+ }
- else
- {
+ else {
/* Find lowest numbered rule so the disambiguating rule
* will work.
*/
j = num_rules + 1;
- for ( i = 1; i <= nacc; ++i )
- if ( accset[i] < j )
+ for (i = 1; i <= nacc; ++i)
+ if (accset[i] < j)
j = accset[i];
dfaacc[newds].dfaacc_state = j;
- if ( j <= num_rules )
+ if (j <= num_rules)
rule_useful[j] = true;
- }
+ }
*newds_addr = newds;
return 1;
- }
+}
/* symfollowset - follow the symbol transitions one step
@@ -929,85 +944,75 @@ int sns[], numstates, accset[], nacc, hashval, *newds_addr;
* int transsym, int nset[current_max_dfa_size] );
*/
-int symfollowset( ds, dsize, transsym, nset )
-int ds[], dsize, transsym, nset[];
- {
- int ns, tsp, sym, i, j, lenccl, ch, numstates, ccllist;
+int symfollowset (ds, dsize, transsym, nset)
+ int ds[], dsize, transsym, nset[];
+{
+ int ns, tsp, sym, i, j, lenccl, ch, numstates, ccllist;
numstates = 0;
- for ( i = 1; i <= dsize; ++i )
- { /* for each nfa state ns in the state set of ds */
+ for (i = 1; i <= dsize; ++i) { /* for each nfa state ns in the state set of ds */
ns = ds[i];
sym = transchar[ns];
tsp = trans1[ns];
- if ( sym < 0 )
- { /* it's a character class */
+ if (sym < 0) { /* it's a character class */
sym = -sym;
ccllist = cclmap[sym];
lenccl = ccllen[sym];
- if ( cclng[sym] )
- {
- for ( j = 0; j < lenccl; ++j )
- {
+ if (cclng[sym]) {
+ for (j = 0; j < lenccl; ++j) {
/* Loop through negated character
* class.
*/
ch = ccltbl[ccllist + j];
- if ( ch == 0 )
+ if (ch == 0)
ch = NUL_ec;
- if ( ch > transsym )
+ if (ch > transsym)
/* Transsym isn't in negated
* ccl.
*/
break;
- else if ( ch == transsym )
- /* next 2 */ goto bottom;
- }
+ else if (ch == transsym)
+ /* next 2 */
+ goto bottom;
+ }
/* Didn't find transsym in ccl. */
nset[++numstates] = tsp;
- }
+ }
else
- for ( j = 0; j < lenccl; ++j )
- {
+ for (j = 0; j < lenccl; ++j) {
ch = ccltbl[ccllist + j];
- if ( ch == 0 )
+ if (ch == 0)
ch = NUL_ec;
- if ( ch > transsym )
+ if (ch > transsym)
break;
- else if ( ch == transsym )
- {
+ else if (ch == transsym) {
nset[++numstates] = tsp;
break;
- }
}
- }
-
- else if ( sym >= 'A' && sym <= 'Z' && caseins )
- flexfatal(
- _( "consistency check failed in symfollowset" ) );
+ }
+ }
- else if ( sym == SYM_EPSILON )
- { /* do nothing */
- }
+ else if (sym == SYM_EPSILON) { /* do nothing */
+ }
- else if ( ABS( ecgroup[sym] ) == transsym )
+ else if (ABS (ecgroup[sym]) == transsym)
nset[++numstates] = tsp;
- bottom: ;
- }
+ bottom:;
+ }
return numstates;
- }
+}
/* sympartition - partition characters with same out-transitions
@@ -1017,86 +1022,77 @@ int ds[], dsize, transsym, nset[];
* int symlist[numecs], int duplist[numecs] );
*/
-void sympartition( ds, numstates, symlist, duplist )
-int ds[], numstates;
-int symlist[], duplist[];
- {
- int tch, i, j, k, ns, dupfwd[CSIZE + 1], lenccl, cclp, ich;
+void sympartition (ds, numstates, symlist, duplist)
+ int ds[], numstates;
+ int symlist[], duplist[];
+{
+ int tch, i, j, k, ns, dupfwd[CSIZE + 1], lenccl, cclp, ich;
/* Partitioning is done by creating equivalence classes for those
* characters which have out-transitions from the given state. Thus
* we are really creating equivalence classes of equivalence classes.
*/
- for ( i = 1; i <= numecs; ++i )
- { /* initialize equivalence class list */
+ for (i = 1; i <= numecs; ++i) { /* initialize equivalence class list */
duplist[i] = i - 1;
dupfwd[i] = i + 1;
- }
+ }
duplist[1] = NIL;
dupfwd[numecs] = NIL;
- for ( i = 1; i <= numstates; ++i )
- {
+ for (i = 1; i <= numstates; ++i) {
ns = ds[i];
tch = transchar[ns];
- if ( tch != SYM_EPSILON )
- {
- if ( tch < -lastccl || tch >= csize )
- {
- flexfatal(
- _( "bad transition character detected in sympartition()" ) );
- }
+ if (tch != SYM_EPSILON) {
+ if (tch < -lastccl || tch >= csize) {
+ flexfatal (_
+ ("bad transition character detected in sympartition()"));
+ }
- if ( tch >= 0 )
- { /* character transition */
- int ec = ecgroup[tch];
+ if (tch >= 0) { /* character transition */
+ int ec = ecgroup[tch];
- mkechar( ec, dupfwd, duplist );
+ mkechar (ec, dupfwd, duplist);
symlist[ec] = 1;
- }
+ }
- else
- { /* character class */
+ else { /* character class */
tch = -tch;
lenccl = ccllen[tch];
cclp = cclmap[tch];
- mkeccl( ccltbl + cclp, lenccl, dupfwd,
- duplist, numecs, NUL_ec );
+ mkeccl (ccltbl + cclp, lenccl, dupfwd,
+ duplist, numecs, NUL_ec);
- if ( cclng[tch] )
- {
+ if (cclng[tch]) {
j = 0;
- for ( k = 0; k < lenccl; ++k )
- {
+ for (k = 0; k < lenccl; ++k) {
ich = ccltbl[cclp + k];
- if ( ich == 0 )
+ if (ich == 0)
ich = NUL_ec;
- for ( ++j; j < ich; ++j )
+ for (++j; j < ich; ++j)
symlist[j] = 1;
- }
+ }
- for ( ++j; j <= numecs; ++j )
+ for (++j; j <= numecs; ++j)
symlist[j] = 1;
- }
+ }
else
- for ( k = 0; k < lenccl; ++k )
- {
+ for (k = 0; k < lenccl; ++k) {
ich = ccltbl[cclp + k];
- if ( ich == 0 )
+ if (ich == 0)
ich = NUL_ec;
symlist[ich] = 1;
- }
- }
+ }
}
}
}
+}
diff --git a/usr.bin/lex/ecs.c b/usr.bin/lex/ecs.c
index 7dfb5423eee..569b445e36f 100644
--- a/usr.bin/lex/ecs.c
+++ b/usr.bin/lex/ecs.c
@@ -1,50 +1,48 @@
-/* $OpenBSD: ecs.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* $OpenBSD: ecs.c,v 1.7 2015/11/19 19:43:40 tedu Exp $ */
/* ecs - equivalence class routines */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/ecs.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
#include "flexdef.h"
/* ccl2ecl - convert character classes to set of equivalence classes */
-void ccl2ecl()
- {
- int i, ich, newlen, cclp, ccls, cclmec;
+void ccl2ecl ()
+{
+ int i, ich, newlen, cclp, ccls, cclmec;
- for ( i = 1; i <= lastccl; ++i )
- {
+ for (i = 1; i <= lastccl; ++i) {
/* We loop through each character class, and for each character
* in the class, add the character's equivalence class to the
* new "character" class we are creating. Thus when we are all
@@ -55,21 +53,19 @@ void ccl2ecl()
newlen = 0;
cclp = cclmap[i];
- for ( ccls = 0; ccls < ccllen[i]; ++ccls )
- {
+ for (ccls = 0; ccls < ccllen[i]; ++ccls) {
ich = ccltbl[cclp + ccls];
cclmec = ecgroup[ich];
- if ( cclmec > 0 )
- {
+ if (cclmec > 0) {
ccltbl[cclp + newlen] = cclmec;
++newlen;
- }
}
+ }
ccllen[i] = newlen;
- }
}
+}
/* cre8ecs - associate equivalence class numbers with class members
@@ -80,10 +76,10 @@ void ccl2ecl()
* Returned is the number of classes.
*/
-int cre8ecs( fwd, bck, num )
-int fwd[], bck[], num;
- {
- int i, j, numcl;
+int cre8ecs (fwd, bck, num)
+ int fwd[], bck[], num;
+{
+ int i, j, numcl;
numcl = 0;
@@ -92,16 +88,15 @@ int fwd[], bck[], num;
* is positive, then x is the representative of its equivalence
* class.
*/
- for ( i = 1; i <= num; ++i )
- if ( bck[i] == NIL )
- {
+ for (i = 1; i <= num; ++i)
+ if (bck[i] == NIL) {
bck[i] = ++numcl;
- for ( j = fwd[i]; j != NIL; j = fwd[j] )
+ for (j = fwd[i]; j != NIL; j = fwd[j])
bck[j] = -numcl;
- }
+ }
return numcl;
- }
+}
/* mkeccl - update equivalence classes based on character class xtions
@@ -119,12 +114,12 @@ int fwd[], bck[], num;
* NUL_mapping is the value which NUL (0) should be mapped to.
*/
-void mkeccl( ccls, lenccl, fwd, bck, llsiz, NUL_mapping )
-Char ccls[];
-int lenccl, fwd[], bck[], llsiz, NUL_mapping;
- {
- int cclp, oldec, newec;
- int cclm, i, j;
+void mkeccl (ccls, lenccl, fwd, bck, llsiz, NUL_mapping)
+ Char ccls[];
+ int lenccl, fwd[], bck[], llsiz, NUL_mapping;
+{
+ int cclp, oldec, newec;
+ int cclm, i, j;
static unsigned char cclflags[CSIZE]; /* initialized to all '\0' */
/* Note that it doesn't matter whether or not the character class is
@@ -133,11 +128,10 @@ int lenccl, fwd[], bck[], llsiz, NUL_mapping;
cclp = 0;
- while ( cclp < lenccl )
- {
+ while (cclp < lenccl) {
cclm = ccls[cclp];
- if ( NUL_mapping && cclm == 0 )
+ if (NUL_mapping && cclm == 0)
cclm = NUL_mapping;
oldec = bck[cclm];
@@ -145,22 +139,19 @@ int lenccl, fwd[], bck[], llsiz, NUL_mapping;
j = cclp + 1;
- for ( i = fwd[cclm]; i != NIL && i <= llsiz; i = fwd[i] )
- { /* look for the symbol in the character class */
- for ( ; j < lenccl; ++j )
- {
+ for (i = fwd[cclm]; i != NIL && i <= llsiz; i = fwd[i]) { /* look for the symbol in the character class */
+ for (; j < lenccl; ++j) {
int ccl_char;
- if ( NUL_mapping && ccls[j] == 0 )
+ if (NUL_mapping && ccls[j] == 0)
ccl_char = NUL_mapping;
else
ccl_char = ccls[j];
- if ( ccl_char > i )
+ if (ccl_char > i)
break;
- if ( ccl_char == i && ! cclflags[j] )
- {
+ if (ccl_char == i && !cclflags[j]) {
/* We found an old companion of cclm
* in the ccl. Link it into the new
* equivalence class and flag it as
@@ -176,8 +167,8 @@ int lenccl, fwd[], bck[], llsiz, NUL_mapping;
/* Get next equivalence class member. */
/* continue 2 */
goto next_pt;
- }
}
+ }
/* Symbol isn't in character class. Put it in the old
* equivalence class.
@@ -185,48 +176,46 @@ int lenccl, fwd[], bck[], llsiz, NUL_mapping;
bck[i] = oldec;
- if ( oldec != NIL )
+ if (oldec != NIL)
fwd[oldec] = i;
oldec = i;
- next_pt: ;
- }
+ next_pt:;
+ }
- if ( bck[cclm] != NIL || oldec != bck[cclm] )
- {
+ if (bck[cclm] != NIL || oldec != bck[cclm]) {
bck[cclm] = NIL;
fwd[oldec] = NIL;
- }
+ }
fwd[newec] = NIL;
/* Find next ccl member to process. */
- for ( ++cclp; cclflags[cclp] && cclp < lenccl; ++cclp )
- {
+ for (++cclp; cclflags[cclp] && cclp < lenccl; ++cclp) {
/* Reset "doesn't need processing" flag. */
cclflags[cclp] = 0;
- }
}
}
+}
/* mkechar - create equivalence class for single character */
-void mkechar( tch, fwd, bck )
-int tch, fwd[], bck[];
- {
+void mkechar (tch, fwd, bck)
+ int tch, fwd[], bck[];
+{
/* If until now the character has been a proper subset of
* an equivalence class, break it away to create a new ec
*/
- if ( fwd[tch] != NIL )
+ if (fwd[tch] != NIL)
bck[fwd[tch]] = bck[tch];
- if ( bck[tch] != NIL )
+ if (bck[tch] != NIL)
fwd[bck[tch]] = fwd[tch];
fwd[tch] = NIL;
bck[tch] = NIL;
- }
+}
diff --git a/usr.bin/lex/filter.c b/usr.bin/lex/filter.c
new file mode 100644
index 00000000000..7b099e0f993
--- /dev/null
+++ b/usr.bin/lex/filter.c
@@ -0,0 +1,446 @@
+/* $OpenBSD: filter.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* filter - postprocessing of flex output through filters */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+static const char * check_4_gnu_m4 =
+ "m4_dnl ifdef(`__gnu__', ,"
+ "`errprint(Flex requires GNU M4. Set the PATH or set the M4 environment variable to its path name.)"
+ " m4exit(2)')\n";
+
+
+/** global chain. */
+struct filter *output_chain = NULL;
+
+/* Allocate and initialize an external filter.
+ * @param chain the current chain or NULL for new chain
+ * @param cmd the command to execute.
+ * @param ... a NULL terminated list of (const char*) arguments to command,
+ * not including argv[0].
+ * @return newest filter in chain
+ */
+struct filter *filter_create_ext (struct filter *chain, const char *cmd,
+ ...)
+{
+ struct filter *f;
+ int max_args;
+ const char *s;
+ va_list ap;
+
+ /* allocate and initialize new filter */
+ f = (struct filter *) flex_alloc (sizeof (struct filter));
+ if (!f)
+ flexerror (_("flex_alloc failed (f) in filter_create_ext"));
+ memset (f, 0, sizeof (*f));
+ f->filter_func = NULL;
+ f->extra = NULL;
+ f->next = NULL;
+ f->argc = 0;
+
+ if (chain != NULL) {
+ /* append f to end of chain */
+ while (chain->next)
+ chain = chain->next;
+ chain->next = f;
+ }
+
+
+ /* allocate argv, and populate it with the argument list. */
+ max_args = 8;
+ f->argv =
+ (const char **) flex_alloc (sizeof (char *) *
+ (max_args + 1));
+ if (!f->argv)
+ flexerror (_("flex_alloc failed (f->argv) in filter_create_ext"));
+ f->argv[f->argc++] = cmd;
+
+ va_start (ap, cmd);
+ while ((s = va_arg (ap, const char *)) != NULL) {
+ if (f->argc >= max_args) {
+ max_args += 8;
+ f->argv =
+ (const char **) flex_realloc (f->argv,
+ sizeof (char
+ *) *
+ (max_args +
+ 1));
+ }
+ f->argv[f->argc++] = s;
+ }
+ f->argv[f->argc] = NULL;
+
+ va_end (ap);
+ return f;
+}
+
+/* Allocate and initialize an internal filter.
+ * @param chain the current chain or NULL for new chain
+ * @param filter_func The function that will perform the filtering.
+ * filter_func should return 0 if successful, and -1
+ * if an error occurs -- or it can simply exit().
+ * @param extra optional user-defined data to pass to the filter.
+ * @return newest filter in chain
+ */
+struct filter *filter_create_int (struct filter *chain,
+ int (*filter_func) (struct filter *),
+ void *extra)
+{
+ struct filter *f;
+
+ /* allocate and initialize new filter */
+ f = (struct filter *) flex_alloc (sizeof (struct filter));
+ if (!f)
+ flexerror (_("flex_alloc failed in filter_create_int"));
+ memset (f, 0, sizeof (*f));
+ f->next = NULL;
+ f->argc = 0;
+ f->argv = NULL;
+
+ f->filter_func = filter_func;
+ f->extra = extra;
+
+ if (chain != NULL) {
+ /* append f to end of chain */
+ while (chain->next)
+ chain = chain->next;
+ chain->next = f;
+ }
+
+ return f;
+}
+
+/** Fork and exec entire filter chain.
+ * @param chain The head of the chain.
+ * @return true on success.
+ */
+bool filter_apply_chain (struct filter * chain)
+{
+ int pid, pipes[2];
+ int r;
+ const int readsz = 512;
+ char *buf;
+
+
+ /* Tricky recursion, since we want to begin the chain
+ * at the END. Why? Because we need all the forked processes
+ * to be children of the main flex process.
+ */
+ if (chain)
+ filter_apply_chain (chain->next);
+ else
+ return true;
+
+ /* Now we are the right-most unprocessed link in the chain.
+ */
+
+ fflush (stdout);
+ fflush (stderr);
+
+
+ if (pipe (pipes) == -1)
+ flexerror (_("pipe failed"));
+
+ if ((pid = fork ()) == -1)
+ flexerror (_("fork failed"));
+
+ if (pid == 0) {
+ /* child */
+
+ /* We need stdin (the FILE* stdin) to connect to this new pipe.
+ * There is no portable way to set stdin to a new file descriptor,
+ * as stdin is not an lvalue on some systems (BSD).
+ * So we dup the new pipe onto the stdin descriptor and use a no-op fseek
+ * to sync the stream. This is a Hail Mary situation. It seems to work.
+ */
+ close (pipes[1]);
+clearerr(stdin);
+ if (dup2 (pipes[0], fileno (stdin)) == -1)
+ flexfatal (_("dup2(pipes[0],0)"));
+ close (pipes[0]);
+ fseek (stdin, 0, SEEK_CUR);
+
+ /* run as a filter, either internally or by exec */
+ if (chain->filter_func) {
+ int r;
+
+ if ((r = chain->filter_func (chain)) == -1)
+ flexfatal (_("filter_func failed"));
+ exit (0);
+ }
+ else {
+ execvp (chain->argv[0],
+ (char **const) (chain->argv));
+ lerrsf_fatal ( _("exec of %s failed"),
+ chain->argv[0]);
+ }
+
+ exit (1);
+ }
+
+ /* Parent */
+ close (pipes[0]);
+ if (dup2 (pipes[1], fileno (stdout)) == -1)
+ flexfatal (_("dup2(pipes[1],1)"));
+ close (pipes[1]);
+ fseek (stdout, 0, SEEK_CUR);
+
+ return true;
+}
+
+/** Truncate the chain to max_len number of filters.
+ * @param chain the current chain.
+ * @param max_len the maximum length of the chain.
+ * @return the resulting length of the chain.
+ */
+int filter_truncate (struct filter *chain, int max_len)
+{
+ int len = 1;
+
+ if (!chain)
+ return 0;
+
+ while (chain->next && len < max_len) {
+ chain = chain->next;
+ ++len;
+ }
+
+ chain->next = NULL;
+ return len;
+}
+
+/** Splits the chain in order to write to a header file.
+ * Similar in spirit to the 'tee' program.
+ * The header file name is in extra.
+ * @return 0 (zero) on success, and -1 on failure.
+ */
+int filter_tee_header (struct filter *chain)
+{
+ /* This function reads from stdin and writes to both the C file and the
+ * header file at the same time.
+ */
+
+ const int readsz = 512;
+ char *buf;
+ int to_cfd = -1;
+ FILE *to_c = NULL, *to_h = NULL;
+ bool write_header;
+
+ write_header = (chain->extra != NULL);
+
+ /* Store a copy of the stdout pipe, which is already piped to C file
+ * through the running chain. Then create a new pipe to the H file as
+ * stdout, and fork the rest of the chain again.
+ */
+
+ if ((to_cfd = dup (1)) == -1)
+ flexfatal (_("dup(1) failed"));
+ to_c = fdopen (to_cfd, "w");
+
+ if (write_header) {
+ if (freopen ((char *) chain->extra, "w", stdout) == NULL)
+ flexfatal (_("freopen(headerfilename) failed"));
+
+ filter_apply_chain (chain->next);
+ to_h = stdout;
+ }
+
+ /* Now to_c is a pipe to the C branch, and to_h is a pipe to the H branch.
+ */
+
+ if (write_header) {
+ fputs (check_4_gnu_m4, to_h);
+ fputs ("m4_changecom`'m4_dnl\n", to_h);
+ fputs ("m4_changequote`'m4_dnl\n", to_h);
+ fputs ("m4_changequote([[,]])[[]]m4_dnl\n", to_h);
+ fputs ("m4_define([[M4_YY_NOOP]])[[]]m4_dnl\n", to_h);
+ fputs ("m4_define( [[M4_YY_IN_HEADER]],[[]])m4_dnl\n",
+ to_h);
+ fprintf (to_h, "#ifndef %sHEADER_H\n", prefix);
+ fprintf (to_h, "#define %sHEADER_H 1\n", prefix);
+ fprintf (to_h, "#define %sIN_HEADER 1\n\n", prefix);
+ fprintf (to_h,
+ "m4_define( [[M4_YY_OUTFILE_NAME]],[[%s]])m4_dnl\n",
+ headerfilename ? headerfilename : "<stdout>");
+
+ }
+
+ fputs (check_4_gnu_m4, to_c);
+ fputs ("m4_changecom`'m4_dnl\n", to_c);
+ fputs ("m4_changequote`'m4_dnl\n", to_c);
+ fputs ("m4_changequote([[,]])[[]]m4_dnl\n", to_c);
+ fputs ("m4_define([[M4_YY_NOOP]])[[]]m4_dnl\n", to_c);
+ fprintf (to_c, "m4_define( [[M4_YY_OUTFILE_NAME]],[[%s]])m4_dnl\n",
+ outfilename ? outfilename : "<stdout>");
+
+ buf = (char *) flex_alloc (readsz);
+ if (!buf)
+ flexerror (_("flex_alloc failed in filter_tee_header"));
+ while (fgets (buf, readsz, stdin)) {
+ fputs (buf, to_c);
+ if (write_header)
+ fputs (buf, to_h);
+ }
+
+ if (write_header) {
+ fprintf (to_h, "\n");
+
+ /* write a fake line number. It will get fixed by the linedir filter. */
+ fprintf (to_h, "#line 4000 \"M4_YY_OUTFILE_NAME\"\n");
+
+ fprintf (to_h, "#undef %sIN_HEADER\n", prefix);
+ fprintf (to_h, "#endif /* %sHEADER_H */\n", prefix);
+ fputs ("m4_undefine( [[M4_YY_IN_HEADER]])m4_dnl\n", to_h);
+
+ fflush (to_h);
+ if (ferror (to_h))
+ lerrsf (_("error writing output file %s"),
+ (char *) chain->extra);
+
+ else if (fclose (to_h))
+ lerrsf (_("error closing output file %s"),
+ (char *) chain->extra);
+ }
+
+ fflush (to_c);
+ if (ferror (to_c))
+ lerrsf (_("error writing output file %s"),
+ outfilename ? outfilename : "<stdout>");
+
+ else if (fclose (to_c))
+ lerrsf (_("error closing output file %s"),
+ outfilename ? outfilename : "<stdout>");
+
+ while (wait (0) > 0) ;
+
+ exit (0);
+ return 0;
+}
+
+/** Adjust the line numbers in the #line directives of the generated scanner.
+ * After the m4 expansion, the line numbers are incorrect since the m4 macros
+ * can add or remove lines. This only adjusts line numbers for generated code,
+ * not user code. This also happens to be a good place to squeeze multiple
+ * blank lines into a single blank line.
+ */
+int filter_fix_linedirs (struct filter *chain)
+{
+ char *buf;
+ const int readsz = 512;
+ int lineno = 1;
+ bool in_gen = true; /* in generated code */
+ bool last_was_blank = false;
+
+ if (!chain)
+ return 0;
+
+ buf = (char *) flex_alloc (readsz);
+ if (!buf)
+ flexerror (_("flex_alloc failed in filter_fix_linedirs"));
+
+ while (fgets (buf, readsz, stdin)) {
+
+ regmatch_t m[10];
+
+ /* Check for #line directive. */
+ if (buf[0] == '#'
+ && regexec (&regex_linedir, buf, 3, m, 0) == 0) {
+
+ int num;
+ char *fname;
+
+ /* extract the line number and filename */
+ num = regmatch_strtol (&m[1], buf, NULL, 0);
+ fname = regmatch_dup (&m[2], buf);
+
+ if (strcmp (fname,
+ outfilename ? outfilename : "<stdout>")
+ == 0
+ || strcmp (fname,
+ headerfilename ? headerfilename : "<stdout>")
+ == 0) {
+
+ char *s1, *s2;
+ char filename[MAXLINE];
+
+ s1 = fname;
+ s2 = filename;
+
+ while ((s2 - filename) < (MAXLINE - 1) && *s1) {
+ /* Escape the backslash */
+ if (*s1 == '\\')
+ *s2++ = '\\';
+ /* Escape the double quote */
+ if (*s1 == '\"')
+ *s2++ = '\\';
+ /* Copy the character as usual */
+ *s2++ = *s1++;
+ }
+
+ *s2 = '\0';
+
+ /* Adjust the line directives. */
+ in_gen = true;
+ snprintf (buf, readsz, "#line %d \"%s\"\n",
+ lineno + 1, filename);
+ }
+ else {
+ /* it's a #line directive for code we didn't write */
+ in_gen = false;
+ }
+
+ free (fname);
+ last_was_blank = false;
+ }
+
+ /* squeeze blank lines from generated code */
+ else if (in_gen
+ && regexec (&regex_blank_line, buf, 0, NULL,
+ 0) == 0) {
+ if (last_was_blank)
+ continue;
+ else
+ last_was_blank = true;
+ }
+
+ else {
+ /* it's a line of normal, non-empty code. */
+ last_was_blank = false;
+ }
+
+ fputs (buf, stdout);
+ lineno++;
+ }
+ fflush (stdout);
+ if (ferror (stdout))
+ lerrsf (_("error writing output file %s"),
+ outfilename ? outfilename : "<stdout>");
+
+ else if (fclose (stdout))
+ lerrsf (_("error closing output file %s"),
+ outfilename ? outfilename : "<stdout>");
+
+ return 0;
+}
+
+/* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
diff --git a/usr.bin/lex/flex.skl b/usr.bin/lex/flex.skl
index 36d29dca5d5..8ec1e687733 100644
--- a/usr.bin/lex/flex.skl
+++ b/usr.bin/lex/flex.skl
@@ -1,165 +1,558 @@
-/* $OpenBSD: flex.skl,v 1.12 2013/11/04 17:03:32 millert Exp $ */
-
+/* $OpenBSD: flex.skl,v 1.13 2015/11/19 19:43:40 tedu Exp $ */
+
+%# -*-C-*- vi: set ft=c:
+%# This file is processed in several stages.
+%# Here are the stages, as best as I can describe:
+%#
+%# 1. flex.skl is processed through GNU m4 during the
+%# pre-compilation stage of flex. Only macros starting
+%# with `m4preproc_' are processed, and quoting is normal.
+%#
+%# 2. The preprocessed skeleton is translated verbatim into a
+%# C array, saved as "skel.c" and compiled into the flex binary.
+%#
+%# 3. At runtime, the skeleton is generated and filtered (again)
+%# through m4. Macros beginning with `m4_' will be processed.
+%# The quoting is "[[" and "]]" so we don't interfere with
+%# user code.
+%#
+%# All generate macros for the m4 stage contain the text "m4" or "M4"
+%# in them. This is to distinguish them from CPP macros.
+%# The exception to this rule is YY_G, which is an m4 macro,
+%# but it needs to be remain short because it is used everywhere.
+%#
/* A lexical scanner generated by flex */
-/* Scanner skeleton version:
- * $Header: /cvs/OpenBSD/src/usr.bin/lex/flex.skl,v 1.12 2013/11/04 17:03:32 millert Exp $
- */
+%# Macros for preproc stage.
+m4preproc_changecom
+
+%# Macros for runtime processing stage.
+m4_changecom
+m4_changequote
+m4_changequote([[, ]])
+
+%#
+%# Lines in this skeleton starting with a "%" character are "control lines"
+%# and affect the generation of the scanner. The possible control codes are
+%# listed and processed in misc.c.
+%#
+%# %# - A comment. The current line is omitted from the generated scanner.
+%# %if-c++-only - The following lines are printed for C++ scanners ONLY.
+%# %if-c-only - The following lines are NOT printed for C++ scanners.
+%# %if-c-or-c++ - The following lines are printed in BOTH C and C++ scanners.
+%# %if-reentrant - Print for reentrant scanners.(push)
+%# %if-not-reentrant - Print for non-reentrant scanners. (push)
+%# %if-bison-bridge - Print for bison-bridge. (push)
+%# %if-not-bison-bridge - Print for non-bison-bridge. (push)
+%# %endif - pop from the previous if code.
+%# %% - A stop-point, where code is inserted by flex.
+%# Each stop-point is numbered here and also in the code generator.
+%# (See gen.c, etc. for details.)
+%# %not-for-header - Begin code that should NOT appear in a ".h" file.
+%# %ok-for-header - %c and %e are used for building a header file.
+%# %if-tables-serialization
+%#
+%# All control-lines EXCEPT comment lines ("%#") will be inserted into
+%# the generated scanner as a C-style comment. This is to aid those who
+%# edit the skeleton.
+%#
+
+%not-for-header
+%if-c-only
+%if-not-reentrant
+m4_ifelse(M4_YY_PREFIX,yy,,
+#define yy_create_buffer M4_YY_PREFIX[[_create_buffer]]
+#define yy_delete_buffer M4_YY_PREFIX[[_delete_buffer]]
+#define yy_flex_debug M4_YY_PREFIX[[_flex_debug]]
+#define yy_init_buffer M4_YY_PREFIX[[_init_buffer]]
+#define yy_flush_buffer M4_YY_PREFIX[[_flush_buffer]]
+#define yy_load_buffer_state M4_YY_PREFIX[[_load_buffer_state]]
+#define yy_switch_to_buffer M4_YY_PREFIX[[_switch_to_buffer]]
+#define yyin M4_YY_PREFIX[[in]]
+#define yyleng M4_YY_PREFIX[[leng]]
+#define yylex M4_YY_PREFIX[[lex]]
+#define yylineno M4_YY_PREFIX[[lineno]]
+#define yyout M4_YY_PREFIX[[out]]
+#define yyrestart M4_YY_PREFIX[[restart]]
+#define yytext M4_YY_PREFIX[[text]]
+#define yywrap M4_YY_PREFIX[[wrap]]
+#define yyalloc M4_YY_PREFIX[[alloc]]
+#define yyrealloc M4_YY_PREFIX[[realloc]]
+#define yyfree M4_YY_PREFIX[[free]]
+)
+%endif
+%endif
+%ok-for-header
#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-
-%-
+#define YY_FLEX_MAJOR_VERSION FLEX_MAJOR_VERSION
+#define YY_FLEX_MINOR_VERSION FLEX_MINOR_VERSION
+#define YY_FLEX_SUBMINOR_VERSION FLEX_SUBMINOR_VERSION
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+%# Some negated symbols
+m4_ifdef( [[M4_YY_IN_HEADER]], , [[m4_define([[M4_YY_NOT_IN_HEADER]], [[]])]])
+m4_ifdef( [[M4_YY_REENTRANT]], , [[m4_define([[M4_YY_NOT_REENTRANT]], [[]])]])
+
+%# This is the m4 way to say "(stack_used || is_reentrant)
+m4_ifdef( [[M4_YY_STACK_USED]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])
+m4_ifdef( [[M4_YY_REENTRANT]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])
+
+%# Prefixes.
+%# The complexity here is necessary so that m4 preserves
+%# the argument lists to each C function.
+
+
+m4_ifdef( [[M4_YY_PREFIX]],, [[m4_define([[M4_YY_PREFIX]], [[yy]])]])
+
+m4preproc_define(`M4_GEN_PREFIX',
+ ``m4_define(yy[[$1]], [[M4_YY_PREFIX[[$1]]m4_ifelse($'`#,0,,[[($'`@)]])]])'')
+
+%if-c++-only
+ /* The c++ scanner is a mess. The FlexLexer.h header file relies on the
+ * following macro. This is required in order to pass the c++-multiple-scanners
+ * test in the regression suite. We get reports that it breaks inheritance.
+ * We will address this in a future release of flex, or omit the C++ scanner
+ * altogether.
+ */
+ #define yyFlexLexer M4_YY_PREFIX[[FlexLexer]]
+%endif
+
+%if-c-only
+ M4_GEN_PREFIX(`_create_buffer')
+ M4_GEN_PREFIX(`_delete_buffer')
+ M4_GEN_PREFIX(`_scan_buffer')
+ M4_GEN_PREFIX(`_scan_string')
+ M4_GEN_PREFIX(`_scan_bytes')
+ M4_GEN_PREFIX(`_init_buffer')
+ M4_GEN_PREFIX(`_flush_buffer')
+ M4_GEN_PREFIX(`_load_buffer_state')
+ M4_GEN_PREFIX(`_switch_to_buffer')
+ M4_GEN_PREFIX(`push_buffer_state')
+ M4_GEN_PREFIX(`pop_buffer_state')
+ M4_GEN_PREFIX(`ensure_buffer_stack')
+ M4_GEN_PREFIX(`lex')
+ M4_GEN_PREFIX(`restart')
+ M4_GEN_PREFIX(`lex_init')
+ M4_GEN_PREFIX(`lex_init_extra')
+ M4_GEN_PREFIX(`lex_destroy')
+ M4_GEN_PREFIX(`get_debug')
+ M4_GEN_PREFIX(`set_debug')
+ M4_GEN_PREFIX(`get_extra')
+ M4_GEN_PREFIX(`set_extra')
+ M4_GEN_PREFIX(`get_in')
+ M4_GEN_PREFIX(`set_in')
+ M4_GEN_PREFIX(`get_out')
+ M4_GEN_PREFIX(`set_out')
+ M4_GEN_PREFIX(`get_leng')
+ M4_GEN_PREFIX(`get_text')
+ M4_GEN_PREFIX(`get_lineno')
+ M4_GEN_PREFIX(`set_lineno')
+ m4_ifdef( [[M4_YY_REENTRANT]],
+ [[
+ M4_GEN_PREFIX(`get_column')
+ M4_GEN_PREFIX(`set_column')
+ ]])
+ M4_GEN_PREFIX(`wrap')
+%endif
+
+m4_ifdef( [[M4_YY_BISON_LVAL]],
+[[
+ M4_GEN_PREFIX(`get_lval')
+ M4_GEN_PREFIX(`set_lval')
+]])
+
+m4_ifdef( [[<M4_YY_BISON_LLOC>]],
+[[
+ M4_GEN_PREFIX(`get_lloc')
+ M4_GEN_PREFIX(`set_lloc')
+]])
+
+
+ M4_GEN_PREFIX(`alloc')
+ M4_GEN_PREFIX(`realloc')
+ M4_GEN_PREFIX(`free')
+
+%if-c-only
+m4_ifdef( [[M4_YY_NOT_REENTRANT]],
+[[
+ M4_GEN_PREFIX(`text')
+ M4_GEN_PREFIX(`leng')
+ M4_GEN_PREFIX(`in')
+ M4_GEN_PREFIX(`out')
+ M4_GEN_PREFIX(`_flex_debug')
+ M4_GEN_PREFIX(`lineno')
+]])
+%endif
+
+
+m4_ifdef( [[M4_YY_TABLES_EXTERNAL]],
+[[
+ M4_GEN_PREFIX(`tables_fload')
+ M4_GEN_PREFIX(`tables_destroy')
+ M4_GEN_PREFIX(`TABLES_NAME')
+]])
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+%if-c-only
#include <stdio.h>
+#include <string.h>
#include <errno.h>
-%+
-#include <cerrno>
-%*
+#include <stdlib.h>
+%endif
+%if-tables-serialization
+#include <sys/types.h>
+#include <netinet/in.h>
+%endif
+/* end standard C headers. */
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
-#endif
+%if-c-or-c++
+m4preproc_include(`flexint.h')
+%endif
+%if-c++-only
+/* begin standard C++ headers. */
+#include <iostream>
+#include <errno.h>
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+/* end standard C++ headers. */
+%endif
#ifdef __cplusplus
-#include <stdlib.h>
-%+
-#include <iosfwd>
-%*
-#include <unistd.h>
-
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
-
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
-#ifdef __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
-#define YY_USE_PROTOS
#define YY_USE_CONST
-#endif /* __STDC__ */
+#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
+%# For compilers that can not handle prototypes.
+%# e.g.,
+%# The function prototype
+%# int foo(int x, char* y);
+%#
+%# ...should be written as
+%# int foo M4_YY_PARAMS(int x, char* y);
+%#
+%# ...which could possibly generate
+%# int foo ();
+%#
+m4_ifdef( [[M4_YY_NO_ANSI_FUNC_PROTOS]],
+[[
+ m4_define( [[M4_YY_PARAMS]], [[()]])
+]],
+[[
+ m4_define( [[M4_YY_PARAMS]], [[($*)]])
+]])
+
+%not-for-header
/* Returned upon end-of-file. */
#define YY_NULL 0
+%ok-for-header
+%not-for-header
/* Promotes a possibly negative, possibly signed char to an unsigned
* integer for use as an array index. If the signed char is negative,
* we want to instead treat it as an 8-bit unsigned char, hence the
* double cast.
*/
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
+%ok-for-header
+
+
+
+%if-reentrant
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+%# Declare yyguts variable
+m4_define( [[M4_YY_DECL_GUTS_VAR]], [[struct yyguts_t * yyg = (struct yyguts_t*)yyscanner]])
+%# Perform a noop access on yyguts to prevent unused variable complains
+m4_define( [[M4_YY_NOOP_GUTS_VAR]], [[(void)yyg]])
+%# For use wherever a Global is accessed or assigned.
+m4_define( [[YY_G]], [[yyg->$1]])
+
+%# For use in function prototypes to append the additional argument.
+m4_define( [[M4_YY_PROTO_LAST_ARG]], [[, yyscan_t yyscanner]])
+m4_define( [[M4_YY_PROTO_ONLY_ARG]], [[yyscan_t yyscanner]])
+
+%# For use in function definitions to append the additional argument.
+m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
+[[
+ m4_define( [[M4_YY_DEF_LAST_ARG]], [[, yyscanner]])
+ m4_define( [[M4_YY_DEF_ONLY_ARG]], [[yyscanner]])
+]],
+[[
+ m4_define( [[M4_YY_DEF_LAST_ARG]], [[, yyscan_t yyscanner]])
+ m4_define( [[M4_YY_DEF_ONLY_ARG]], [[yyscan_t yyscanner]])
+]])
+m4_define( [[M4_YY_DECL_LAST_ARG]], [[yyscan_t yyscanner;]])
+
+%# For use in function calls to pass the additional argument.
+m4_define( [[M4_YY_CALL_LAST_ARG]], [[, yyscanner]])
+m4_define( [[M4_YY_CALL_ONLY_ARG]], [[yyscanner]])
+
+%# For use in function documentation to adjust for additional argument.
+m4_define( [[M4_YY_DOC_PARAM]], [[@param yyscanner The scanner object.]])
+
+/* For convenience, these vars (plus the bison vars far below)
+ are macros in the reentrant scanner. */
+#define yyin YY_G(yyin_r)
+#define yyout YY_G(yyout_r)
+#define yyextra YY_G(yyextra_r)
+#define yyleng YY_G(yyleng_r)
+#define yytext YY_G(yytext_r)
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug YY_G(yy_flex_debug_r)
+
+m4_define( [[M4_YY_INCR_LINENO]],
+[[
+ do{ yylineno++;
+ yycolumn=0;
+ }while(0)
+]])
+
+%endif
+
+
+
+%if-not-reentrant
+
+m4_define( [[M4_YY_INCR_LINENO]],
+[[
+ yylineno++;
+]])
+
+%# Define these macros to be no-ops.
+m4_define( [[M4_YY_DECL_GUTS_VAR]], [[m4_dnl]])
+m4_define( [[M4_YY_NOOP_GUTS_VAR]], [[m4_dnl]])
+m4_define( [[YY_G]], [[($1)]])
+m4_define( [[M4_YY_PROTO_LAST_ARG]])
+m4_define( [[M4_YY_PROTO_ONLY_ARG]], [[void]])
+m4_define( [[M4_YY_DEF_LAST_ARG]])
+
+m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
+[[
+ m4_define( [[M4_YY_DEF_ONLY_ARG]])
+]],
+[[
+ m4_define( [[M4_YY_DEF_ONLY_ARG]], [[void]])
+]])
+m4_define([[M4_YY_DECL_LAST_ARG]])
+m4_define([[M4_YY_CALL_LAST_ARG]])
+m4_define([[M4_YY_CALL_ONLY_ARG]])
+m4_define( [[M4_YY_DOC_PARAM]], [[]])
+
+%endif
+
+
+m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
+[[
+%# For compilers that need traditional function definitions.
+%# e.g.,
+%# The function prototype taking 2 arguments
+%# int foo (int x, char* y)
+%#
+%# ...should be written as
+%# int foo YYFARGS2(int,x, char*,y)
+%#
+%# ...which could possibly generate
+%# int foo (x,y,yyscanner)
+%# int x;
+%# char * y;
+%# yyscan_t yyscanner;
+%#
+%# Generate traditional function defs
+ m4_define( [[YYFARGS0]], [[(M4_YY_DEF_ONLY_ARG) [[\]]
+ M4_YY_DECL_LAST_ARG]])
+ m4_define( [[YYFARGS1]], [[($2 M4_YY_DEF_LAST_ARG) [[\]]
+ $1 $2; [[\]]
+ M4_YY_DECL_LAST_ARG]])
+ m4_define( [[YYFARGS2]], [[($2,$4 M4_YY_DEF_LAST_ARG) [[\]]
+ $1 $2; [[\]]
+ $3 $4; [[\]]
+ M4_YY_DECL_LAST_ARG]])
+ m4_define( [[YYFARGS3]], [[($2,$4,$6 M4_YY_DEF_LAST_ARG) [[\]]
+ $1 $2; [[\]]
+ $3 $4; [[\]]
+ $5 $6; [[\]]
+ M4_YY_DECL_LAST_ARG]])
+]],
+[[
+%# Generate C99 function defs.
+ m4_define( [[YYFARGS0]], [[(M4_YY_DEF_ONLY_ARG)]])
+ m4_define( [[YYFARGS1]], [[($1 $2 M4_YY_DEF_LAST_ARG)]])
+ m4_define( [[YYFARGS2]], [[($1 $2, $3 $4 M4_YY_DEF_LAST_ARG)]])
+ m4_define( [[YYFARGS3]], [[($1 $2, $3 $4, $5 $6 M4_YY_DEF_LAST_ARG)]])
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Enter a start condition. This macro really ought to take a parameter,
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
-#define BEGIN yy_start = 1 + 2 *
+#define BEGIN YY_G(yy_start) = 1 + 2 *
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
-#define YY_START ((yy_start - 1) / 2)
+#define YY_START ((YY_G(yy_start) - 1) / 2)
#define YYSTATE YY_START
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
+#define YY_NEW_FILE yyrestart( yyin M4_YY_CALL_LAST_ARG )
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
#define YY_END_OF_BUFFER_CHAR 0
+]])
/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
+#endif
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+]])
+
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
-extern int yyleng;
-%-
+%if-not-reentrant
+extern yy_size_t yyleng;
+%endif
+
+%if-c-only
+%if-not-reentrant
extern FILE *yyin, *yyout;
-%*
+%endif
+%endif
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
-
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator). This
- * avoids problems with code like:
- *
- * if ( condition_holds )
- * yyless( 5 );
- * else
- * do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+ m4_ifdef( [[M4_YY_USE_LINENO]],
+ [[
+ /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+ * access to the local variable yy_act. Since yyless() is a macro, it would break
+ * existing scanners that call yyless() from OUTSIDE yylex.
+ * One obvious solution it to make yy_act a global. I tried that, and saw
+ * a 5% performance hit in a non-yylineno scanner, because yy_act is
+ * normally declared as a register variable-- so it is not worth it.
+ */
+ #define YY_LESS_LINENO(n) \
+ do { \
+ int yyl;\
+ for ( yyl = n; yyl < yyleng; ++yyl )\
+ if ( yytext[yyl] == '\n' )\
+ --yylineno;\
+ }while(0)
+ #define YY_LINENO_REWIND_TO(dst) \
+ do {\
+ const char *p;\
+ for ( p = yy_cp-1; p >= (dst); --p)\
+ if ( *p == '\n' )\
+ --yylineno;\
+ }while(0)
+ ]],
+ [[
+ #define YY_LESS_LINENO(n)
+ #define YY_LINENO_REWIND_TO(ptr)
+ ]])
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
do \
{ \
/* Undo effects of setting up yytext. */ \
- *yy_cp = yy_hold_char; \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = YY_G(yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ YY_G(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
YY_DO_BEFORE_ACTION; /* set up yytext again */ \
} \
while ( 0 )
+]])
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+#define unput(c) yyunput( c, YY_G(yytext_ptr) M4_YY_CALL_LAST_ARG )
+]])
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
{
-%-
+%if-c-only
FILE *yy_input_file;
-%+
+%endif
+
+%if-c++-only
std::istream* yy_input_file;
-%*
+%endif
+
char *yy_ch_buf; /* input buffer */
char *yy_buf_pos; /* current position in input buffer */
@@ -172,7 +565,7 @@ struct yy_buffer_state
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
- int yy_n_chars;
+ yy_size_t yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
@@ -193,12 +586,18 @@ struct yy_buffer_state
*/
int yy_at_bol;
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
int yy_fill_buffer;
int yy_buffer_status;
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
/* When an EOF's been seen but there's still some text to process
@@ -212,96 +611,410 @@ struct yy_buffer_state
* just pointing yyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
+]])
};
-
-%- Standard (non-C++) definition
-static YY_BUFFER_STATE yy_current_buffer = 0;
-%*
-
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+%if-c-only Standard (non-C++) definition
+%not-for-header
+%if-not-reentrant
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+%endif
+%ok-for-header
+%endif
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( YY_G(yy_buffer_stack) \
+ ? YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)] \
+ : NULL)
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
*/
-#define YY_CURRENT_BUFFER yy_current_buffer
+#define YY_CURRENT_BUFFER_LVALUE YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)]
+]])
+%if-c-only Standard (non-C++) definition
-%- Standard (non-C++) definition
+%if-not-reentrant
+%not-for-header
/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
-
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-
-
-int yyleng;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1; /* whether we need to initialize */
+static int yy_init = 0; /* whether we need to initialize */
static int yy_start = 0; /* start state number */
/* Flag which is used to allow yywrap()'s to do buffer switches
* instead of setting up a fresh yyin. A bit of a hack ...
*/
static int yy_did_buffer_switch_on_eof;
-
-void yyrestart YY_PROTO(( FILE *input_file ));
-
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
-
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
-%*
-
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
-static void yy_flex_free YY_PROTO(( void * ));
-
+%ok-for-header
+%endif
+
+void yyrestart M4_YY_PARAMS( FILE *input_file M4_YY_PROTO_LAST_ARG );
+void yy_switch_to_buffer M4_YY_PARAMS( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );
+YY_BUFFER_STATE yy_create_buffer M4_YY_PARAMS( FILE *file, int size M4_YY_PROTO_LAST_ARG );
+void yy_delete_buffer M4_YY_PARAMS( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );
+void yy_flush_buffer M4_YY_PARAMS( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );
+void yypush_buffer_state M4_YY_PARAMS( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );
+void yypop_buffer_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+static void yyensure_buffer_stack M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+static void yy_load_buffer_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+static void yy_init_buffer M4_YY_PARAMS( YY_BUFFER_STATE b, FILE *file M4_YY_PROTO_LAST_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG)
+]])
+
+YY_BUFFER_STATE yy_scan_buffer M4_YY_PARAMS( char *base, yy_size_t size M4_YY_PROTO_LAST_ARG );
+YY_BUFFER_STATE yy_scan_string M4_YY_PARAMS( yyconst char *yy_str M4_YY_PROTO_LAST_ARG );
+YY_BUFFER_STATE yy_scan_bytes M4_YY_PARAMS( yyconst char *bytes, yy_size_t len M4_YY_PROTO_LAST_ARG );
+
+%endif
+
+void *yyalloc M4_YY_PARAMS( yy_size_t M4_YY_PROTO_LAST_ARG );
+void *yyrealloc M4_YY_PARAMS( void *, yy_size_t M4_YY_PROTO_LAST_ARG );
+void yyfree M4_YY_PARAMS( void * M4_YY_PROTO_LAST_ARG );
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
#define yy_new_buffer yy_create_buffer
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
#define yy_set_interactive(is_interactive) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
#define yy_set_bol(at_bol) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_at_bol = at_bol; \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+]])
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+%% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here
-%% yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+%% [1.5] DFA
+]])
-%- Standard (non-C++) definition
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
-%*
+%if-c-only Standard (non-C++) definition
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+static yy_state_type yy_get_previous_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+static yy_state_type yy_try_NUL_trans M4_YY_PARAMS( yy_state_type current_state M4_YY_PROTO_LAST_ARG);
+static int yy_get_next_buffer M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+static void yy_fatal_error M4_YY_PARAMS( yyconst char msg[] M4_YY_PROTO_LAST_ARG );
+]])
+
+%endif
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
*/
#define YY_DO_BEFORE_ACTION \
- yytext_ptr = yy_bp; \
-%% code to fiddle yytext and yyleng for yymore() goes here
- yy_hold_char = *yy_cp; \
+ YY_G(yytext_ptr) = yy_bp; \
+%% [2.0] code to fiddle yytext and yyleng for yymore() goes here \
+ YY_G(yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
-%% code to copy yytext_ptr to yytext[] goes here, if %array
- yy_c_buf_p = yy_cp;
-
-%% data tables for the DFA and the user's section 1 definitions go here
+%% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \
+ YY_G(yy_c_buf_p) = yy_cp;
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+%% [4.0] data tables for the DFA and the user's section 1 definitions go here
+]])
+
+m4_ifdef( [[M4_YY_IN_HEADER]], [[#ifdef YY_HEADER_EXPORT_START_CONDITIONS]])
+M4_YY_SC_DEFS
+m4_ifdef( [[M4_YY_IN_HEADER]], [[#endif]])
+
+m4_ifdef( [[M4_YY_NO_UNISTD_H]],,
+[[
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+%if-c-only
+#include <unistd.h>
+%endif
+%if-c++-only
+#include <unistd.h>
+%endif
+#endif
+]])
+
+m4_ifdef( [[M4_EXTRA_TYPE_DEFS]],
+[[
+#define YY_EXTRA_TYPE M4_EXTRA_TYPE_DEFS
+]],
+[[
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+]]
+)
+
+%if-c-only Reentrant structure and macros (non-C++).
+%if-reentrant
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+/* Holds the entire state of the reentrant scanner. */
+struct yyguts_t
+ {
+
+ /* User-defined. Not touched by flex. */
+ YY_EXTRA_TYPE yyextra_r;
+
+ /* The rest are the same as the globals declared in the non-reentrant scanner. */
+ FILE *yyin_r, *yyout_r;
+ size_t yy_buffer_stack_top; /**< index of top of stack. */
+ size_t yy_buffer_stack_max; /**< capacity of stack. */
+ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
+ char yy_hold_char;
+ yy_size_t yy_n_chars;
+ yy_size_t yyleng_r;
+ char *yy_c_buf_p;
+ int yy_init;
+ int yy_start;
+ int yy_did_buffer_switch_on_eof;
+ int yy_start_stack_ptr;
+ int yy_start_stack_depth;
+ int *yy_start_stack;
+ yy_state_type yy_last_accepting_state;
+ char* yy_last_accepting_cpos;
+
+ int yylineno_r;
+ int yy_flex_debug_r;
+
+m4_ifdef( [[M4_YY_USES_REJECT]],
+[[
+ yy_state_type *yy_state_buf;
+ yy_state_type *yy_state_ptr;
+ char *yy_full_match;
+ int yy_lp;
+
+ /* These are only needed for trailing context rules,
+ * but there's no conditional variable for that yet. */
+ int yy_looking_for_trail_begin;
+ int yy_full_lp;
+ int *yy_full_state;
+]])
+
+m4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],
+[[
+ char yytext_r[YYLMAX];
+ char *yytext_ptr;
+ int yy_more_offset;
+ int yy_prev_more_offset;
+]],
+[[
+ char *yytext_r;
+ int yy_more_flag;
+ int yy_more_len;
+]])
+
+m4_ifdef( [[M4_YY_BISON_LVAL]],
+[[
+ YYSTYPE * yylval_r;
+]])
+
+m4_ifdef( [[<M4_YY_BISON_LLOC>]],
+[[
+ YYLTYPE * yylloc_r;
+]])
+
+ }; /* end struct yyguts_t */
+]])
+
+
+%if-c-only
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+static int yy_init_globals M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+%endif
+
+%if-reentrant
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+ m4_ifdef( [[M4_YY_BISON_LVAL]],
+ [[
+ /* This must go here because YYSTYPE and YYLTYPE are included
+ * from bison output in section 1.*/
+ # define yylval YY_G(yylval_r)
+ ]])
+
+ m4_ifdef( [[<M4_YY_BISON_LLOC>]],
+ [[
+ # define yylloc YY_G(yylloc_r)
+ ]])
+]])
+
+int yylex_init M4_YY_PARAMS(yyscan_t* scanner);
+
+int yylex_init_extra M4_YY_PARAMS( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
+
+%endif
+
+%endif End reentrant structures and macros.
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+m4_ifdef( [[M4_YY_NO_DESTROY]],,
+[[
+int yylex_destroy M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_DEBUG]],,
+[[
+int yyget_debug M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_SET_DEBUG]],,
+[[
+void yyset_debug M4_YY_PARAMS( int debug_flag M4_YY_PROTO_LAST_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_EXTRA]],,
+[[
+YY_EXTRA_TYPE yyget_extra M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_SET_EXTRA]],,
+[[
+void yyset_extra M4_YY_PARAMS( YY_EXTRA_TYPE user_defined M4_YY_PROTO_LAST_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_IN]],,
+[[
+FILE *yyget_in M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_SET_IN]],,
+[[
+void yyset_in M4_YY_PARAMS( FILE * in_str M4_YY_PROTO_LAST_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_OUT]],,
+[[
+FILE *yyget_out M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_SET_OUT]],,
+[[
+void yyset_out M4_YY_PARAMS( FILE * out_str M4_YY_PROTO_LAST_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_LENG]],,
+[[
+yy_size_t yyget_leng M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_TEXT]],,
+[[
+char *yyget_text M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_LINENO]],,
+[[
+int yyget_lineno M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+m4_ifdef( [[M4_YY_NO_SET_LINENO]],,
+[[
+void yyset_lineno M4_YY_PARAMS( int line_number M4_YY_PROTO_LAST_ARG );
+]])
+
+m4_ifdef( [[M4_YY_REENTRANT]],
+[[
+m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,
+[[
+int yyget_column M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+]])
+
+m4_ifdef( [[M4_YY_REENTRANT]],
+[[
+m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,
+[[
+void yyset_column M4_YY_PARAMS( int column_no M4_YY_PROTO_LAST_ARG );
+]])
+]])
+
+%if-bison-bridge
+m4_ifdef( [[M4_YY_NO_GET_LVAL]],,
+[[
+YYSTYPE * yyget_lval M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+]])
+
+void yyset_lval M4_YY_PARAMS( YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG );
+
+m4_ifdef( [[<M4_YY_BISON_LLOC>]],
+[[
+ m4_ifdef( [[M4_YY_NO_GET_LLOC]],,
+ [[
+ YYLTYPE *yyget_lloc M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+ ]])
+
+ m4_ifdef( [[M4_YY_NO_SET_LLOC]],,
+ [[
+ void yyset_lloc M4_YY_PARAMS( YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG );
+ ]])
+]])
+%endif
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -309,101 +1022,120 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
+extern "C" int yywrap M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
#else
-extern int yywrap YY_PROTO(( void ));
+extern int yywrap M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
#endif
#endif
-%-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
-#endif
-%*
+%not-for-header
+ m4_ifdef( [[M4_YY_NO_UNPUT]],,
+ [[
+ static void yyunput M4_YY_PARAMS( int c, char *buf_ptr M4_YY_PROTO_LAST_ARG);
+ ]])
+%ok-for-header
+%endif
#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+static void yy_flex_strncpy M4_YY_PARAMS( char *, yyconst char *, int M4_YY_PROTO_LAST_ARG);
#endif
#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+static int yy_flex_strlen M4_YY_PARAMS( yyconst char * M4_YY_PROTO_LAST_ARG);
#endif
#ifndef YY_NO_INPUT
-%- Standard (non-C++) definition
+%if-c-only Standard (non-C++) definition
+%not-for-header
#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
+static int yyinput M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
#else
-static int input YY_PROTO(( void ));
-#endif
-%*
-#endif
-
-#if defined(YY_STACK_USED) && YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
-
-#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
-#endif
-
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#ifdef __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines. This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
-#endif
+static int input M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+#endif
+%ok-for-header
+%endif
+#endif
+
+
+%if-c-only
+%# TODO: This is messy.
+m4_ifdef( [[M4_YY_STACK_USED]],
+[[
+
+m4_ifdef( [[M4_YY_NOT_REENTRANT]],
+[[
+ m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+ [[
+ static int yy_start_stack_ptr = 0;
+ static int yy_start_stack_depth = 0;
+ static int *yy_start_stack = NULL;
+ ]])
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+ m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,
+ [[
+ static void yy_push_state M4_YY_PARAMS( int new_state M4_YY_PROTO_LAST_ARG);
+ ]])
+ m4_ifdef( [[M4_YY_NO_POP_STATE]],,
+ [[
+ static void yy_pop_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+ ]])
+ m4_ifdef( [[M4_YY_NO_TOP_STATE]],,
+ [[
+ static int yy_top_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
+ ]])
+]])
+
+]],
+[[
+m4_define( [[M4_YY_NO_PUSH_STATE]])
+m4_define( [[M4_YY_NO_POP_STATE]])
+m4_define( [[M4_YY_NO_TOP_STATE]])
+]])
+%endif
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Copy whatever the last rule matched to the standard output. */
-
#ifndef ECHO
-%- Standard (non-C++) definition
+%if-c-only Standard (non-C++) definition
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
-%+ C++ definition
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+%endif
+%if-c++-only C++ definition
#define ECHO LexerOutput( yytext, yyleng )
-%*
+%endif
#endif
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
* is returned in "result".
*/
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
-%% fread()/read() definition of YY_INPUT goes here unless we're doing C++
-%+ C++ definition
+%% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \
+\
+%if-c++-only C++ definition \
if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \
YY_FATAL_ERROR( "input in flex scanner failed" );
-%*
+%endif
+
#endif
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* No semi-colon after return; correct usage is to write "yyterminate();" -
* we don't want an extra ';' after the "return" because that will cause
* some compilers to complain about unreachable statements.
@@ -411,139 +1143,261 @@ YY_MALLOC_DECL
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif
+]])
/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
-%-
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-%+
+%if-c-only
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg M4_YY_CALL_LAST_ARG)
+%endif
+%if-c++-only
#define YY_FATAL_ERROR(msg) LexerError( msg )
-%*
+%endif
#endif
+]])
+
+%if-tables-serialization structures and prototypes
+m4preproc_include(`tables_shared.h')
+
+/* Load the DFA tables from the given stream. */
+int yytables_fload M4_YY_PARAMS(FILE * fp M4_YY_PROTO_LAST_ARG);
+
+/* Unload the tables from memory. */
+int yytables_destroy M4_YY_PARAMS(M4_YY_PROTO_ONLY_ARG);
+%not-for-header
+
+/** Describes a mapping from a serialized table id to its deserialized state in
+ * this scanner. This is the bridge between our "generic" deserialization code
+ * and the specifics of this scanner.
+ */
+struct yytbl_dmap {
+ enum yytbl_id dm_id;/**< table identifier */
+ void **dm_arr; /**< address of pointer to store the deserialized table. */
+ size_t dm_sz; /**< local sizeof() each element in table. */
+};
+
+/** A {0,0,0}-terminated list of structs, forming the map */
+static struct yytbl_dmap yydmap[] =
+{
+%tables-yydmap generated elements
+ {0,0,0}
+};
+
+/** A tables-reader object to maintain some state in the read. */
+struct yytbl_reader {
+ FILE * fp; /**< input stream */
+ flex_uint32_t bread; /**< bytes read since beginning of current tableset */
+};
+
+%endif
+/* end tables serialization structures and prototypes */
+
+%ok-for-header
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
-%- Standard (non-C++) definition
-#define YY_DECL int yylex YY_PROTO(( void ))
-%+ C++ definition
+#define YY_DECL_IS_OURS 1
+%if-c-only Standard (non-C++) definition
+
+
+m4_define( [[M4_YY_LEX_PROTO]], [[M4_YY_PARAMS(M4_YY_PROTO_ONLY_ARG)]])
+m4_define( [[M4_YY_LEX_DECLARATION]], [[YYFARGS0(void)]])
+
+m4_ifdef( [[M4_YY_BISON_LVAL]],
+[[
+ m4_dnl The bison pure parser is used. Redefine yylex to
+ m4_dnl accept the lval parameter.
+
+ m4_define( [[M4_YY_LEX_PROTO]], [[\]]
+ [[M4_YY_PARAMS(YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG)]])
+ m4_define( [[M4_YY_LEX_DECLARATION]], [[\]]
+ [[YYFARGS1(YYSTYPE *,yylval_param)]])
+]])
+
+m4_ifdef( [[<M4_YY_BISON_LLOC>]],
+[[
+ m4_dnl Locations are used. yylex should also accept the ylloc parameter.
+
+ m4_define( [[M4_YY_LEX_PROTO]], [[\]]
+ [[M4_YY_PARAMS(YYSTYPE * yylval_param, YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG)]])
+ m4_define( [[M4_YY_LEX_DECLARATION]], [[\]]
+ [[YYFARGS2(YYSTYPE *,yylval_param, YYLTYPE *,yylloc_param)]])
+]])
+
+extern int yylex M4_YY_LEX_PROTO;
+
+#define YY_DECL int yylex M4_YY_LEX_DECLARATION
+%endif
+%if-c++-only C++ definition
#define YY_DECL int yyFlexLexer::yylex()
-%*
-#endif
+%endif
+#endif /* !YY_DECL */
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Code executed at the beginning of each rule, after yytext and yyleng
* have been set up.
*/
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif
+]])
-%% YY_RULE_SETUP definition goes here
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+%% [6.0] YY_RULE_SETUP definition goes here
+]])
+%not-for-header
+/** The main scanner function which does all the work.
+ */
YY_DECL
- {
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
-
-%% user's declarations go here
-
- if ( yy_init )
+{
+ yy_state_type yy_current_state;
+ char *yy_cp, *yy_bp;
+ int yy_act;
+ M4_YY_DECL_GUTS_VAR();
+
+m4_ifdef( [[M4_YY_NOT_REENTRANT]],
+[[
+ m4_ifdef( [[M4_YY_BISON_LVAL]],
+ [[
+ YYSTYPE * yylval;
+ ]])
+ m4_ifdef( [[<M4_YY_BISON_LLOC>]],
+ [[
+ YYLTYPE * yylloc;
+ ]])
+]])
+
+m4_ifdef( [[M4_YY_BISON_LVAL]],
+[[
+ yylval = yylval_param;
+]])
+
+m4_ifdef( [[<M4_YY_BISON_LLOC>]],
+[[
+ yylloc = yylloc_param;
+]])
+
+ if ( !YY_G(yy_init) )
{
- yy_init = 0;
+ YY_G(yy_init) = 1;
#ifdef YY_USER_INIT
YY_USER_INIT;
#endif
- if ( ! yy_start )
- yy_start = 1; /* first start state */
+m4_ifdef( [[M4_YY_USES_REJECT]],
+[[
+ /* Create the reject buffer large enough to save one state per allowed character. */
+ if ( ! YY_G(yy_state_buf) )
+ YY_G(yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE M4_YY_CALL_LAST_ARG);
+ if ( ! YY_G(yy_state_buf) )
+ YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
+]])
+
+ if ( ! YY_G(yy_start) )
+ YY_G(yy_start) = 1; /* first start state */
if ( ! yyin )
-%-
+%if-c-only
yyin = stdin;
-%+
- yyin = &std::cin;
-%*
+%endif
+%if-c++-only
+ yyin = & std::cin;
+%endif
if ( ! yyout )
-%-
+%if-c-only
yyout = stdout;
-%+
- yyout = &std::cout;
-%*
-
- if ( ! yy_current_buffer )
- yy_current_buffer =
- yy_create_buffer( yyin, YY_BUF_SIZE );
+%endif
+%if-c++-only
+ yyout = & std::cout;
+%endif
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);
+ }
- yy_load_buffer_state();
+ yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
}
+ {
+%% [7.0] user's declarations go here
+
while ( 1 ) /* loops until end-of-file is reached */
{
-%% yymore()-related code goes here
- yy_cp = yy_c_buf_p;
+%% [8.0] yymore()-related code goes here
+ yy_cp = YY_G(yy_c_buf_p);
/* Support of yytext. */
- *yy_cp = yy_hold_char;
+ *yy_cp = YY_G(yy_hold_char);
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp = yy_cp;
-%% code to set up and find next match goes here
+%% [9.0] code to set up and find next match goes here
yy_find_action:
-%% code to find the action number goes here
+%% [10.0] code to find the action number goes here
YY_DO_BEFORE_ACTION;
-%% code for yylineno update goes here
+%% [11.0] code for yylineno update goes here
do_action: /* This label is used only to access EOF actions. */
-%% debug code goes here
+%% [12.0] debug code goes here
switch ( yy_act )
{ /* beginning of action switch */
-%% actions go here
+%% [13.0] actions go here
case YY_END_OF_BUFFER:
{
/* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+ int yy_amount_of_matched_text = (int) (yy_cp - YY_G(yytext_ptr)) - 1;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = yy_hold_char;
+ *yy_cp = YY_G(yy_hold_char);
YY_RESTORE_YY_MORE_OFFSET
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
{
/* We're scanning a new file or input source. It's
* possible that this happened because the user
* just pointed yyin at a new source and called
* yylex(). If so, then we have to assure
- * consistency between yy_current_buffer and our
+ * consistency between YY_CURRENT_BUFFER and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yy_current_buffer->yy_input_file = yyin;
- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
}
/* Note that here we test for yy_c_buf_p "<=" to the position
@@ -553,13 +1407,13 @@ do_action: /* This label is used only to access EOF actions. */
* end-of-buffer state). Contrast this with the test
* in input().
*/
- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( YY_G(yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )
{ /* This was really a NUL. */
yy_state_type yy_next_state;
- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+ YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
/* Okay, we're now positioned to make the NUL
* transition. We couldn't have
@@ -570,32 +1424,32 @@ do_action: /* This label is used only to access EOF actions. */
* will run more slowly).
*/
- yy_next_state = yy_try_NUL_trans( yy_current_state );
+ yy_next_state = yy_try_NUL_trans( yy_current_state M4_YY_CALL_LAST_ARG);
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
if ( yy_next_state )
{
/* Consume the NUL. */
- yy_cp = ++yy_c_buf_p;
+ yy_cp = ++YY_G(yy_c_buf_p);
yy_current_state = yy_next_state;
goto yy_match;
}
else
{
-%% code to do back-up for compressed tables and set up yy_cp goes here
+%% [14.0] code to do back-up for compressed tables and set up yy_cp goes here
goto yy_find_action;
}
}
- else switch ( yy_get_next_buffer() )
+ else switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )
{
case EOB_ACT_END_OF_FILE:
{
- yy_did_buffer_switch_on_eof = 0;
+ YY_G(yy_did_buffer_switch_on_eof) = 0;
- if ( yywrap() )
+ if ( yywrap( M4_YY_CALL_ONLY_ARG ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
@@ -606,7 +1460,7 @@ do_action: /* This label is used only to access EOF actions. */
* YY_NULL, it'll still work - another
* YY_NULL will get returned.
*/
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+ YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + YY_MORE_ADJ;
yy_act = YY_STATE_EOF(YY_START);
goto do_action;
@@ -614,30 +1468,30 @@ do_action: /* This label is used only to access EOF actions. */
else
{
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! YY_G(yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
}
break;
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p =
- yytext_ptr + yy_amount_of_matched_text;
+ YY_G(yy_c_buf_p) =
+ YY_G(yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = YY_G(yy_c_buf_p);
+ yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
goto yy_match;
case EOB_ACT_LAST_MATCH:
- yy_c_buf_p =
- &yy_current_buffer->yy_ch_buf[yy_n_chars];
+ YY_G(yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)];
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = YY_G(yy_c_buf_p);
+ yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
goto yy_find_action;
}
break;
@@ -648,15 +1502,20 @@ do_action: /* This label is used only to access EOF actions. */
"fatal flex scanner internal error--no action found" );
} /* end of action switch */
} /* end of scanning one token */
- } /* end of yylex */
+ } /* end of user's declarations */
+} /* end of yylex */
+%ok-for-header
-%+
+%if-c++-only
+%not-for-header
+/* The contents of this function are C++ specific, so the YY_G macro is not used.
+ */
yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout )
- {
+{
yyin = arg_yyin;
yyout = arg_yyout;
yy_c_buf_p = 0;
- yy_init = 1;
+ yy_init = 0;
yy_start = 0;
yy_flex_debug = 0;
yylineno = 1; // this will only get updated if %option yylineno
@@ -669,41 +1528,52 @@ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout )
yy_more_offset = yy_prev_more_offset = 0;
yy_start_stack_ptr = yy_start_stack_depth = 0;
- yy_start_stack = 0;
+ yy_start_stack = NULL;
- yy_current_buffer = 0;
+ yy_buffer_stack = 0;
+ yy_buffer_stack_top = 0;
+ yy_buffer_stack_max = 0;
-#ifdef YY_USES_REJECT
- yy_state_buf = new yy_state_type[YY_BUF_SIZE + 2];
-#else
+
+m4_ifdef( [[M4_YY_USES_REJECT]],
+[[
+ yy_state_buf = new yy_state_type[YY_STATE_BUF_SIZE];
+]],
+[[
yy_state_buf = 0;
-#endif
- }
+]])
+}
+/* The contents of this function are C++ specific, so the YY_G macro is not used.
+ */
yyFlexLexer::~yyFlexLexer()
- {
- delete yy_state_buf;
- yy_delete_buffer( yy_current_buffer );
- }
-
+{
+ delete [] yy_state_buf;
+ yyfree( yy_start_stack M4_YY_CALL_LAST_ARG );
+ yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
+ yyfree( yy_buffer_stack M4_YY_CALL_LAST_ARG );
+}
+
+/* The contents of this function are C++ specific, so the YY_G macro is not used.
+ */
void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )
- {
+{
if ( new_in )
{
- yy_delete_buffer( yy_current_buffer );
- yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) );
+ yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
+ yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE M4_YY_CALL_LAST_ARG) M4_YY_CALL_LAST_ARG);
}
if ( new_out )
yyout = new_out;
- }
+}
#ifdef YY_INTERACTIVE
int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )
#else
int yyFlexLexer::LexerInput( char* buf, int max_size )
#endif
- {
+{
if ( yyin->eof() || yyin->fail() )
return 0;
@@ -726,14 +1596,17 @@ int yyFlexLexer::LexerInput( char* buf, int max_size )
else
return yyin->gcount();
#endif
- }
+}
void yyFlexLexer::LexerOutput( const char* buf, int size )
- {
+{
(void) yyout->write( buf, size );
- }
-%*
+}
+%ok-for-header
+%endif
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
/* yy_get_next_buffer - try to read in a new buffer
*
* Returns a code representing an action:
@@ -741,25 +1614,26 @@ void yyFlexLexer::LexerOutput( const char* buf, int size )
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
* EOB_ACT_END_OF_FILE - end of file
*/
-
-%-
-static int yy_get_next_buffer YY_PROTO(( void ))
-%+
-int yyFlexLexer::yy_get_next_buffer YY_PROTO(( void ))
-%*
- {
- register char *dest = yy_current_buffer->yy_ch_buf;
- register char *source = yytext_ptr;
- register int number_to_move, i;
+%if-c-only
+static int yy_get_next_buffer YYFARGS0(void)
+%endif
+%if-c++-only
+int yyFlexLexer::yy_get_next_buffer()
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+ char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ char *source = YY_G(yytext_ptr);
+ int number_to_move, i;
int ret_val;
- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ if ( YY_G(yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] )
YY_FATAL_ERROR(
"fatal flex scanner internal error--end of buffer missed" );
- if ( yy_current_buffer->yy_fill_buffer == 0 )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
{ /* Don't try to fill the buffer, so this is an EOF. */
- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ if ( YY_G(yy_c_buf_p) - YY_G(yytext_ptr) - YY_MORE_ADJ == 1 )
{
/* We matched a single character, the EOB, so
* treat this as a final EOF.
@@ -779,38 +1653,39 @@ int yyFlexLexer::yy_get_next_buffer YY_PROTO(( void ))
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+ number_to_move = (int) (YY_G(yy_c_buf_p) - YY_G(yytext_ptr)) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
- yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars) = 0;
else
{
- int num_to_read =
- yy_current_buffer->yy_buf_size - number_to_move - 1;
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{ /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
+m4_ifdef( [[M4_YY_USES_REJECT]],
+[[
YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
+]],
+[[
/* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = yy_current_buffer;
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
int yy_c_buf_p_offset =
- (int) (yy_c_buf_p - b->yy_ch_buf);
+ (int) (YY_G(yy_c_buf_p) - b->yy_ch_buf);
if ( b->yy_is_our_buffer )
{
- int new_size = b->yy_buf_size * 2;
+ yy_size_t new_size = b->yy_buf_size * 2;
if ( new_size <= 0 )
b->yy_buf_size += b->yy_buf_size / 8;
@@ -819,8 +1694,8 @@ int yyFlexLexer::yy_get_next_buffer YY_PROTO(( void ))
b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */
- yy_flex_realloc( (void *) b->yy_ch_buf,
- b->yy_buf_size + 2 );
+ yyrealloc( (void *) b->yy_ch_buf,
+ b->yy_buf_size + 2 M4_YY_CALL_LAST_ARG );
}
else
/* Can't grow it, we don't own it. */
@@ -830,35 +1705,35 @@ int yyFlexLexer::yy_get_next_buffer YY_PROTO(( void ))
YY_FATAL_ERROR(
"fatal error - scanner input buffer overflow" );
- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+ YY_G(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
- num_to_read = yy_current_buffer->yy_buf_size -
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
number_to_move - 1;
-#endif
+]])
}
if ( num_to_read > YY_READ_BUF_SIZE )
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
- yy_n_chars, num_to_read );
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ YY_G(yy_n_chars), num_to_read );
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
}
- if ( yy_n_chars == 0 )
+ if ( YY_G(yy_n_chars) == 0 )
{
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
- yyrestart( yyin );
+ yyrestart( yyin M4_YY_CALL_LAST_ARG);
}
else
{
ret_val = EOB_ACT_LAST_MATCH;
- yy_current_buffer->yy_buffer_status =
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
YY_BUFFER_EOF_PENDING;
}
}
@@ -866,36 +1741,48 @@ int yyFlexLexer::yy_get_next_buffer YY_PROTO(( void ))
else
ret_val = EOB_ACT_CONTINUE_SCAN;
- yy_n_chars += number_to_move;
- yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
-
- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
-
- return ret_val;
+ if ((yy_size_t) (YY_G(yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = YY_G(yy_n_chars) + number_to_move + (YY_G(yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
+ (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, new_size M4_YY_CALL_LAST_ARG );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
}
+ YY_G(yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-/* yy_get_previous_state - get the state just before the EOB char was reached */
+ YY_G(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-%-
-static yy_state_type yy_get_previous_state YY_PROTO(( void ))
-%+
-yy_state_type yyFlexLexer::yy_get_previous_state YY_PROTO(( void ))
-%*
- {
- register yy_state_type yy_current_state;
- register char *yy_cp;
+ return ret_val;
+}
+]])
-%% code to get the start state into yy_current_state goes here
+/* yy_get_previous_state - get the state just before the EOB char was reached */
- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+%if-c-only
+%not-for-header
+ static yy_state_type yy_get_previous_state YYFARGS0(void)
+%endif
+%if-c++-only
+ yy_state_type yyFlexLexer::yy_get_previous_state()
+%endif
+{
+ yy_state_type yy_current_state;
+ char *yy_cp;
+ M4_YY_DECL_GUTS_VAR();
+
+%% [15.0] code to get the start state into yy_current_state goes here
+
+ for ( yy_cp = YY_G(yytext_ptr) + YY_MORE_ADJ; yy_cp < YY_G(yy_c_buf_p); ++yy_cp )
{
-%% code to find the next state goes here
+%% [16.0] code to find the next state goes here
}
return yy_current_state;
- }
+}
/* yy_try_NUL_trans - try to make a transition on the NUL character
@@ -903,108 +1790,112 @@ yy_state_type yyFlexLexer::yy_get_previous_state YY_PROTO(( void ))
* synopsis
* next_state = yy_try_NUL_trans( current_state );
*/
-
-%-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
-%+
-yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
-%*
- {
- register int yy_is_jam;
-%% code to find the next state, and perhaps do backing up, goes here
-
+%if-c-only
+ static yy_state_type yy_try_NUL_trans YYFARGS1( yy_state_type, yy_current_state)
+%endif
+%if-c++-only
+ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
+%endif
+{
+ int yy_is_jam;
+ M4_YY_DECL_GUTS_VAR(); /* This var may be unused depending upon options. */
+%% [17.0] code to find the next state, and perhaps do backing up, goes here
+
+ M4_YY_NOOP_GUTS_VAR();
return yy_is_jam ? 0 : yy_current_state;
- }
+}
-%-
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-register char *yy_bp;
-#endif
-%+
-void yyFlexLexer::yyunput( int c, register char* yy_bp )
-%*
- {
- register char *yy_cp = yy_c_buf_p;
+%if-c-only
+m4_ifdef( [[M4_YY_NO_UNPUT]],,
+[[
+ static void yyunput YYFARGS2( int,c, char *,yy_bp)
+%endif
+%if-c++-only
+ void yyFlexLexer::yyunput( int c, char* yy_bp)
+%endif
+{
+ char *yy_cp;
+ M4_YY_DECL_GUTS_VAR();
+
+ yy_cp = YY_G(yy_c_buf_p);
/* undo effects of setting up yytext */
- *yy_cp = yy_hold_char;
+ *yy_cp = YY_G(yy_hold_char);
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
{ /* need to shift things up to make room */
/* +2 for EOB chars. */
- register int number_to_move = yy_n_chars + 2;
- register char *dest = &yy_current_buffer->yy_ch_buf[
- yy_current_buffer->yy_buf_size + 2];
- register char *source =
- &yy_current_buffer->yy_ch_buf[number_to_move];
+ yy_size_t number_to_move = YY_G(yy_n_chars) + 2;
+ char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
- while ( source > yy_current_buffer->yy_ch_buf )
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
*--dest = *--source;
yy_cp += (int) (dest - source);
yy_bp += (int) (dest - source);
- yy_current_buffer->yy_n_chars =
- yy_n_chars = yy_current_buffer->yy_buf_size;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
YY_FATAL_ERROR( "flex scanner push-back overflow" );
}
*--yy_cp = (char) c;
-%% update yylineno here
-
- yytext_ptr = yy_bp;
- yy_hold_char = *yy_cp;
- yy_c_buf_p = yy_cp;
- }
-%-
-#endif /* ifndef YY_NO_UNPUT */
-%*
-
-
-%-
+%% [18.0] update yylineno here
+m4_ifdef( [[M4_YY_USE_LINENO]],
+[[
+ if ( c == '\n' ){
+ --yylineno;
+ }
+]])
+
+ YY_G(yytext_ptr) = yy_bp;
+ YY_G(yy_hold_char) = *yy_cp;
+ YY_G(yy_c_buf_p) = yy_cp;
+}
+%if-c-only
+]])
+%endif
+
+%if-c-only
#ifndef YY_NO_INPUT
#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ))
+ static int yyinput YYFARGS0(void)
#else
-static int input YY_PROTO(( void ))
+ static int input YYFARGS0(void)
#endif
-%+
-int yyFlexLexer::yyinput()
-%*
- {
+
+%endif
+%if-c++-only
+ int yyFlexLexer::yyinput()
+%endif
+{
int c;
+ M4_YY_DECL_GUTS_VAR();
- *yy_c_buf_p = yy_hold_char;
+ *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ if ( *YY_G(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
{
/* yy_c_buf_p now points to the character we want to return.
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( YY_G(yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )
/* This was really a NUL. */
- *yy_c_buf_p = '\0';
+ *YY_G(yy_c_buf_p) = '\0';
else
{ /* need more input */
- int offset = yy_c_buf_p - yytext_ptr;
- ++yy_c_buf_p;
+ yy_size_t offset = YY_G(yy_c_buf_p) - YY_G(yytext_ptr);
+ ++YY_G(yy_c_buf_p);
- switch ( yy_get_next_buffer() )
+ switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )
{
case EOB_ACT_LAST_MATCH:
/* This happens because yy_g_n_b()
@@ -1018,129 +1909,140 @@ int yyFlexLexer::yyinput()
*/
/* Reset buffer status. */
- yyrestart( yyin );
+ yyrestart( yyin M4_YY_CALL_LAST_ARG);
- /* fall through */
+ /*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE:
{
- if ( yywrap() )
+ if ( yywrap( M4_YY_CALL_ONLY_ARG ) )
return EOF;
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! YY_G(yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
#ifdef __cplusplus
- return yyinput();
+ return yyinput(M4_YY_CALL_ONLY_ARG);
#else
- return input();
+ return input(M4_YY_CALL_ONLY_ARG);
#endif
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + offset;
+ YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + offset;
break;
}
}
}
- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
- *yy_c_buf_p = '\0'; /* preserve yytext */
- yy_hold_char = *++yy_c_buf_p;
+ c = *(unsigned char *) YY_G(yy_c_buf_p); /* cast for 8-bit char's */
+ *YY_G(yy_c_buf_p) = '\0'; /* preserve yytext */
+ YY_G(yy_hold_char) = *++YY_G(yy_c_buf_p);
-%% update BOL and yylineno
+%% [19.0] update BOL and yylineno
return c;
- }
-%-
+}
+%if-c-only
#endif /* ifndef YY_NO_INPUT */
-%*
-
-
-%-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
-%+
-void yyFlexLexer::yyrestart( std::istream* input_file )
-%*
- {
- if ( ! yy_current_buffer )
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+%endif
- yy_init_buffer( yy_current_buffer, input_file );
- yy_load_buffer_state();
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * M4_YY_DOC_PARAM
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+%if-c-only
+ void yyrestart YYFARGS1( FILE *,input_file)
+%endif
+%if-c++-only
+ void yyFlexLexer::yyrestart( std::istream* input_file )
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);
}
+ yy_init_buffer( YY_CURRENT_BUFFER, input_file M4_YY_CALL_LAST_ARG);
+ yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
+}
-%-
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
-%+
-void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-%*
- {
- if ( yy_current_buffer == new_buffer )
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * M4_YY_DOC_PARAM
+ */
+%if-c-only
+ void yy_switch_to_buffer YYFARGS1( YY_BUFFER_STATE ,new_buffer)
+%endif
+%if-c++-only
+ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
+ if ( YY_CURRENT_BUFFER == new_buffer )
return;
- if ( yy_current_buffer )
+ if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
- *yy_c_buf_p = yy_hold_char;
- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
}
- yy_current_buffer = new_buffer;
- yy_load_buffer_state();
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
/* We don't actually know whether we did this switch during
* EOF (yywrap()) processing, but the only time this flag
* is looked at is after yywrap() is called, so it's safe
* to go ahead and always set it.
*/
- yy_did_buffer_switch_on_eof = 1;
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
-%+
-void yyFlexLexer::yy_load_buffer_state()
-%*
- {
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
- yyin = yy_current_buffer->yy_input_file;
- yy_hold_char = *yy_c_buf_p;
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
-%+
-YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
-%*
- {
+ YY_G(yy_did_buffer_switch_on_eof) = 1;
+}
+
+
+%if-c-only
+static void yy_load_buffer_state YYFARGS0(void)
+%endif
+%if-c++-only
+ void yyFlexLexer::yy_load_buffer_state()
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+ YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_G(yytext_ptr) = YY_G(yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ YY_G(yy_hold_char) = *YY_G(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * M4_YY_DOC_PARAM
+ * @return the allocated buffer state.
+ */
+%if-c-only
+ YY_BUFFER_STATE yy_create_buffer YYFARGS2( FILE *,file, int ,size)
+%endif
+%if-c++-only
+ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
+%endif
+{
YY_BUFFER_STATE b;
+ m4_dnl M4_YY_DECL_GUTS_VAR();
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
@@ -1149,99 +2051,105 @@ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ b->yy_ch_buf = (char *) yyalloc( b->yy_buf_size + 2 M4_YY_CALL_LAST_ARG );
if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
- yy_init_buffer( b, file );
+ yy_init_buffer( b, file M4_YY_CALL_LAST_ARG);
return b;
- }
+}
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * M4_YY_DOC_PARAM
+ */
+%if-c-only
+ void yy_delete_buffer YYFARGS1( YY_BUFFER_STATE ,b)
+%endif
+%if-c++-only
+ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
-%-
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
-%+
-void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
-%*
- {
if ( ! b )
return;
- if ( b == yy_current_buffer )
- yy_current_buffer = (YY_BUFFER_STATE) 0;
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
- yy_flex_free( (void *) b->yy_ch_buf );
+ yyfree( (void *) b->yy_ch_buf M4_YY_CALL_LAST_ARG );
- yy_flex_free( (void *) b );
- }
-
-
-%-
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-#include <unistd.h>
-#endif
-#endif
+ yyfree( (void *) b M4_YY_CALL_LAST_ARG );
+}
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
-%+
-extern "C" int isatty YY_PROTO(( int ));
-void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file )
-%*
-
- {
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+%if-c-only
+ static void yy_init_buffer YYFARGS2( YY_BUFFER_STATE ,b, FILE *,file)
+%endif
+%if-c++-only
+ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file )
+%endif
+
+{
int oerrno = errno;
+ M4_YY_DECL_GUTS_VAR();
- yy_flush_buffer( b );
+ yy_flush_buffer( b M4_YY_CALL_LAST_ARG);
b->yy_input_file = file;
b->yy_fill_buffer = 1;
-%-
-#if defined(YY_ALWAYS_INTERACTIVE) && YY_ALWAYS_INTERACTIVE
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+%if-c-only
+m4_ifdef( [[M4_YY_ALWAYS_INTERACTIVE]],
+[[
b->yy_is_interactive = 1;
-#else
-#if defined(YY_NEVER_INTERACTIVE) && YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
-%+
+]],
+[[
+ m4_ifdef( [[M4_YY_NEVER_INTERACTIVE]],
+ [[
+ b->yy_is_interactive = 0;
+ ]],
+ [[
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+ ]])
+]])
+%endif
+%if-c++-only
b->yy_is_interactive = 0;
-%*
+%endif
errno = oerrno;
- }
-
-
-%-
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
+}
-%+
-void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
-%*
- {
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * M4_YY_DOC_PARAM
+ */
+%if-c-only
+ void yy_flush_buffer YYFARGS1( YY_BUFFER_STATE ,b)
+%endif
+%if-c++-only
+ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
if ( ! b )
return;
@@ -1259,23 +2167,151 @@ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
b->yy_at_bol = 1;
b->yy_buffer_status = YY_BUFFER_NEW;
- if ( b == yy_current_buffer )
- yy_load_buffer_state();
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
+}
+
+%if-c-or-c++
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ * M4_YY_DOC_PARAM
+ */
+%if-c-only
+void yypush_buffer_state YYFARGS1(YY_BUFFER_STATE,new_buffer)
+%endif
+%if-c++-only
+void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack(M4_YY_CALL_ONLY_ARG);
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ YY_G(yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
+ YY_G(yy_did_buffer_switch_on_eof) = 1;
+}
+%endif
+
+
+%if-c-or-c++
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ * M4_YY_DOC_PARAM
+ */
+%if-c-only
+void yypop_buffer_state YYFARGS0(void)
+%endif
+%if-c++-only
+void yyFlexLexer::yypop_buffer_state (void)
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if (YY_G(yy_buffer_stack_top) > 0)
+ --YY_G(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
+ YY_G(yy_did_buffer_switch_on_eof) = 1;
}
-%*
+}
+%endif
-#ifndef YY_NO_SCAN_BUFFER
-%-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
- {
+%if-c-or-c++
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+%if-c-only
+static void yyensure_buffer_stack YYFARGS0(void)
+%endif
+%if-c++-only
+void yyFlexLexer::yyensure_buffer_stack(void)
+%endif
+{
+ yy_size_t num_to_alloc;
+ M4_YY_DECL_GUTS_VAR();
+
+ if (!YY_G(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ M4_YY_CALL_LAST_ARG);
+ if ( ! YY_G(yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+
+ memset(YY_G(yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ YY_G(yy_buffer_stack_max) = num_to_alloc;
+ YY_G(yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if (YY_G(yy_buffer_stack_top) >= (YY_G(yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = YY_G(yy_buffer_stack_max) + grow_size;
+ YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ (YY_G(yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ M4_YY_CALL_LAST_ARG);
+ if ( ! YY_G(yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset(YY_G(yy_buffer_stack) + YY_G(yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ YY_G(yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+%endif
+
+
+
+
+m4_ifdef( [[M4_YY_NO_SCAN_BUFFER]],,
+[[
+%if-c-only
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * M4_YY_DOC_PARAM
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer YYFARGS2( char *,base, yy_size_t ,size)
+{
YY_BUFFER_STATE b;
+ m4_dnl M4_YY_DECL_GUTS_VAR();
if ( size < 2 ||
base[size-2] != YY_END_OF_BUFFER_CHAR ||
@@ -1283,7 +2319,7 @@ yy_size_t size;
/* They forgot to leave room for the EOB's. */
return 0;
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
@@ -1297,60 +2333,65 @@ yy_size_t size;
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
- yy_switch_to_buffer( b );
+ yy_switch_to_buffer( b M4_YY_CALL_LAST_ARG );
return b;
- }
-%*
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-%-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
-#endif
- {
- int len;
- for ( len = 0; yy_str[len]; ++len )
- ;
-
- return yy_scan_bytes( yy_str, len );
- }
-%*
-#endif
-
-
-#ifndef YY_NO_SCAN_BYTES
-%-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
- {
+}
+%endif
+]])
+
+
+m4_ifdef( [[M4_YY_NO_SCAN_STRING]],,
+[[
+%if-c-only
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * M4_YY_DOC_PARAM
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string YYFARGS1( yyconst char *, yystr)
+{
+ m4_dnl M4_YY_DECL_GUTS_VAR();
+
+ return yy_scan_bytes( yystr, strlen(yystr) M4_YY_CALL_LAST_ARG);
+}
+%endif
+]])
+
+
+m4_ifdef( [[M4_YY_NO_SCAN_BYTES]],,
+[[
+%if-c-only
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * M4_YY_DOC_PARAM
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes YYFARGS2( yyconst char *,yybytes, yy_size_t ,_yybytes_len)
+{
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
- int i;
+ yy_size_t i;
+ m4_dnl M4_YY_DECL_GUTS_VAR();
/* Get memory for full buffer, including space for trailing EOB's. */
- n = len + 2;
- buf = (char *) yy_flex_alloc( n );
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc( n M4_YY_CALL_LAST_ARG );
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
- for ( i = 0; i < len; ++i )
- buf[i] = bytes[i];
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
- b = yy_scan_buffer( buf, n );
+ b = yy_scan_buffer( buf, n M4_YY_CALL_LAST_ARG);
if ( ! b )
YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
@@ -1360,100 +2401,98 @@ int len;
b->yy_is_our_buffer = 1;
return b;
- }
-%*
-#endif
-
-
-#ifndef YY_NO_PUSH_STATE
-%-
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
-%+
-void yyFlexLexer::yy_push_state( int new_state )
-%*
- {
- if ( yy_start_stack_ptr >= yy_start_stack_depth )
+}
+%endif
+]])
+
+
+m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,
+[[
+%if-c-only
+ static void yy_push_state YYFARGS1( int ,new_state)
+%endif
+%if-c++-only
+ void yyFlexLexer::yy_push_state( int new_state )
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+ if ( YY_G(yy_start_stack_ptr) >= YY_G(yy_start_stack_depth) )
{
yy_size_t new_size;
- yy_start_stack_depth += YY_START_STACK_INCR;
- new_size = yy_start_stack_depth * sizeof( int );
+ YY_G(yy_start_stack_depth) += YY_START_STACK_INCR;
+ new_size = YY_G(yy_start_stack_depth) * sizeof( int );
- if ( ! yy_start_stack )
- yy_start_stack = (int *) yy_flex_alloc( new_size );
+ if ( ! YY_G(yy_start_stack) )
+ YY_G(yy_start_stack) = (int *) yyalloc( new_size M4_YY_CALL_LAST_ARG );
else
- yy_start_stack = (int *) yy_flex_realloc(
- (void *) yy_start_stack, new_size );
+ YY_G(yy_start_stack) = (int *) yyrealloc(
+ (void *) YY_G(yy_start_stack), new_size M4_YY_CALL_LAST_ARG );
- if ( ! yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
+ if ( ! YY_G(yy_start_stack) )
+ YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
}
- yy_start_stack[yy_start_stack_ptr++] = YY_START;
+ YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)++] = YY_START;
BEGIN(new_state);
- }
-#endif
-
-
-#ifndef YY_NO_POP_STATE
-%-
-static void yy_pop_state YY_PROTO(( void ))
-%+
-void yyFlexLexer::yy_pop_state YY_PROTO(( void ))
-%*
- {
- if ( --yy_start_stack_ptr < 0 )
+}
+]])
+
+
+m4_ifdef( [[M4_YY_NO_POP_STATE]],,
+[[
+%if-c-only
+ static void yy_pop_state YYFARGS0(void)
+%endif
+%if-c++-only
+ void yyFlexLexer::yy_pop_state()
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+ if ( --YY_G(yy_start_stack_ptr) < 0 )
YY_FATAL_ERROR( "start-condition stack underflow" );
- BEGIN(yy_start_stack[yy_start_stack_ptr]);
- }
-#endif
-
-
-#ifndef YY_NO_TOP_STATE
-%-
-static int yy_top_state YY_PROTO(( void ))
-%+
-int yyFlexLexer::yy_top_state YY_PROTO(( void ))
-%*
- {
- return yy_start_stack[yy_start_stack_ptr - 1];
- }
-#endif
+ BEGIN(YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)]);
+}
+]])
+
+
+m4_ifdef( [[M4_YY_NO_TOP_STATE]],,
+[[
+%if-c-only
+ static int yy_top_state YYFARGS0(void)
+%endif
+%if-c++-only
+ int yyFlexLexer::yy_top_state()
+%endif
+{
+ M4_YY_DECL_GUTS_VAR();
+ return YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1];
+}
+]])
#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif
-%-
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
-#else
-static void yy_fatal_error( msg )
-char msg[];
-#endif
- {
+%if-c-only
+static void yy_fatal_error YYFARGS1(yyconst char*, msg)
+{
+ m4_dnl M4_YY_DECL_GUTS_VAR();
(void) fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE );
- }
-
-%+
-
+}
+%endif
+%if-c++-only
void yyFlexLexer::LexerError( yyconst char msg[] )
- {
- std::cerr << msg << '\n';
+{
+ M4_YY_DECL_GUTS_VAR();
+ std::cerr << msg << std::endl;
exit( YY_EXIT_FAILURE );
- }
-%*
-
+}
+%endif
/* Redefine yyless() so it works in section 3 code. */
@@ -1462,68 +2501,501 @@ void yyFlexLexer::LexerError( yyconst char msg[] )
do \
{ \
/* Undo effects of setting up yytext. */ \
- yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n; \
- yy_hold_char = *yy_c_buf_p; \
- *yy_c_buf_p = '\0'; \
- yyleng = n; \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = YY_G(yy_hold_char); \
+ YY_G(yy_c_buf_p) = yytext + yyless_macro_arg; \
+ YY_G(yy_hold_char) = *YY_G(yy_c_buf_p); \
+ *YY_G(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
} \
while ( 0 )
-/* Internal utility routines. */
-#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+/* Accessor methods (get/set functions) to struct members. */
+
+%if-c-only
+%if-reentrant
+m4_ifdef( [[M4_YY_NO_GET_EXTRA]],,
+[[
+/** Get the user-defined data for this scanner.
+ * M4_YY_DOC_PARAM
+ */
+YY_EXTRA_TYPE yyget_extra YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ return yyextra;
+}
+]])
+%endif
+
+m4_ifdef( [[M4_YY_NO_GET_LINENO]],,
+[[
+/** Get the current line number.
+ * M4_YY_DOC_PARAM
+ */
+int yyget_lineno YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+
+ m4_ifdef( [[M4_YY_REENTRANT]],
+ [[
+ if (! YY_CURRENT_BUFFER)
+ return 0;
+ ]])
+ return yylineno;
+}
+]])
+
+m4_ifdef( [[M4_YY_REENTRANT]],
+[[
+m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,
+[[
+/** Get the current column number.
+ * M4_YY_DOC_PARAM
+ */
+int yyget_column YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+
+ m4_ifdef( [[M4_YY_REENTRANT]],
+ [[
+ if (! YY_CURRENT_BUFFER)
+ return 0;
+ ]])
+ return yycolumn;
+}
+]])
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_IN]],,
+[[
+/** Get the input stream.
+ * M4_YY_DOC_PARAM
+ */
+FILE *yyget_in YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ return yyin;
+}
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_OUT]],,
+[[
+/** Get the output stream.
+ * M4_YY_DOC_PARAM
+ */
+FILE *yyget_out YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ return yyout;
+}
+]])
+
+m4_ifdef( [[M4_YY_NO_GET_LENG]],,
+[[
+/** Get the length of the current token.
+ * M4_YY_DOC_PARAM
+ */
+yy_size_t yyget_leng YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ return yyleng;
+}
+]])
+
+/** Get the current token.
+ * M4_YY_DOC_PARAM
+ */
+m4_ifdef( [[M4_YY_NO_GET_TEXT]],,
+[[
+char *yyget_text YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ return yytext;
+}
+]])
+
+%if-reentrant
+m4_ifdef( [[M4_YY_NO_SET_EXTRA]],,
+[[
+/** Set the user-defined data. This data is never touched by the scanner.
+ * @param user_defined The data to be associated with this scanner.
+ * M4_YY_DOC_PARAM
+ */
+void yyset_extra YYFARGS1( YY_EXTRA_TYPE ,user_defined)
+{
+ M4_YY_DECL_GUTS_VAR();
+ yyextra = user_defined ;
+}
+]])
+%endif
+
+m4_ifdef( [[M4_YY_NO_SET_LINENO]],,
+[[
+/** Set the current line number.
+ * @param line_number
+ * M4_YY_DOC_PARAM
+ */
+void yyset_lineno YYFARGS1( int ,line_number)
+{
+ M4_YY_DECL_GUTS_VAR();
+
+ m4_ifdef( [[M4_YY_REENTRANT]],
+ [[
+ /* lineno is only valid if an input buffer exists. */
+ if (! YY_CURRENT_BUFFER )
+ YY_FATAL_ERROR( "yyset_lineno called with no buffer" );
+ ]])
+ yylineno = line_number;
+}
+]])
+
+m4_ifdef( [[M4_YY_REENTRANT]],
+[[
+m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,
+[[
+/** Set the current column.
+ * @param line_number
+ * M4_YY_DOC_PARAM
+ */
+void yyset_column YYFARGS1( int , column_no)
+{
+ M4_YY_DECL_GUTS_VAR();
+
+ m4_ifdef( [[M4_YY_REENTRANT]],
+ [[
+ /* column is only valid if an input buffer exists. */
+ if (! YY_CURRENT_BUFFER )
+ YY_FATAL_ERROR( "yyset_column called with no buffer" );
+ ]])
+ yycolumn = column_no;
+}
+]])
+]])
+
+
+m4_ifdef( [[M4_YY_NO_SET_IN]],,
+[[
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * M4_YY_DOC_PARAM
+ * @see yy_switch_to_buffer
+ */
+void yyset_in YYFARGS1( FILE * ,in_str)
+{
+ M4_YY_DECL_GUTS_VAR();
+ yyin = in_str ;
+}
+]])
+
+m4_ifdef( [[M4_YY_NO_SET_OUT]],,
+[[
+void yyset_out YYFARGS1( FILE * ,out_str)
+{
+ M4_YY_DECL_GUTS_VAR();
+ yyout = out_str ;
+}
+]])
+
+
+m4_ifdef( [[M4_YY_NO_GET_DEBUG]],,
+[[
+int yyget_debug YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ return yy_flex_debug;
+}
+]])
+
+m4_ifdef( [[M4_YY_NO_SET_DEBUG]],,
+[[
+void yyset_debug YYFARGS1( int ,bdebug)
+{
+ M4_YY_DECL_GUTS_VAR();
+ yy_flex_debug = bdebug ;
+}
+]])
+%endif
+
+%if-reentrant
+/* Accessor methods for yylval and yylloc */
+
+%if-bison-bridge
+m4_ifdef( [[M4_YY_NO_GET_LVAL]],,
+[[
+YYSTYPE * yyget_lval YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ return yylval;
+}
+]])
+
+m4_ifdef( [[M4_YY_NO_SET_LVAL]],,
+[[
+void yyset_lval YYFARGS1( YYSTYPE * ,yylval_param)
+{
+ M4_YY_DECL_GUTS_VAR();
+ yylval = yylval_param;
+}
+]])
+
+m4_ifdef( [[<M4_YY_BISON_LLOC>]],
+[[
+ m4_ifdef( [[M4_YY_NO_GET_LLOC]],,
+ [[
+YYLTYPE *yyget_lloc YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ return yylloc;
+}
+ ]])
+
+ m4_ifdef( [[M4_YY_NO_SET_LLOC]],,
+ [[
+void yyset_lloc YYFARGS1( YYLTYPE * ,yylloc_param)
+{
+ M4_YY_DECL_GUTS_VAR();
+ yylloc = yylloc_param;
+}
+ ]])
+]])
+
+%endif
+
+
+/* User-visible API */
+
+/* yylex_init is special because it creates the scanner itself, so it is
+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
+ * That's why we explicitly handle the declaration, instead of using our macros.
+ */
+m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
+[[
+int yylex_init( ptr_yy_globals )
+ yyscan_t* ptr_yy_globals;
+]],
+[[
+int yylex_init(yyscan_t* ptr_yy_globals)
+]])
+{
+ if (ptr_yy_globals == NULL){
+ errno = EINVAL;
+ return 1;
+ }
+
+ *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
+
+ if (*ptr_yy_globals == NULL){
+ errno = ENOMEM;
+ return 1;
+ }
+
+ /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
+ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+ return yy_init_globals ( *ptr_yy_globals );
+}
+
+
+/* yylex_init_extra has the same functionality as yylex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to yyalloc in
+ * the yyextra field.
+ */
+m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
+[[
+int yylex_init_extra( yy_user_defined, ptr_yy_globals )
+ YY_EXTRA_TYPE yy_user_defined;
+ yyscan_t* ptr_yy_globals;
+]],
+[[
+int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )
+]])
+{
+ struct yyguts_t dummy_yyguts;
+
+ yyset_extra (yy_user_defined, &dummy_yyguts);
+
+ if (ptr_yy_globals == NULL){
+ errno = EINVAL;
+ return 1;
+ }
+
+ *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+
+ if (*ptr_yy_globals == NULL){
+ errno = ENOMEM;
+ return 1;
+ }
+
+ /* By setting to 0xAA, we expose bugs in
+ yy_init_globals. Leave at 0x00 for releases. */
+ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+ yyset_extra (yy_user_defined, *ptr_yy_globals);
+
+ return yy_init_globals ( *ptr_yy_globals );
+}
+
+%endif if-c-only
+
+
+%if-c-only
+static int yy_init_globals YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+m4_ifdef( [[M4_YY_USE_LINENO]],
+[[
+ m4_ifdef( [[M4_YY_NOT_REENTRANT]],
+ [[
+ /* We do not touch yylineno unless the option is enabled. */
+ yylineno = 1;
+ ]])
+]])
+ YY_G(yy_buffer_stack) = 0;
+ YY_G(yy_buffer_stack_top) = 0;
+ YY_G(yy_buffer_stack_max) = 0;
+ YY_G(yy_c_buf_p) = (char *) 0;
+ YY_G(yy_init) = 0;
+ YY_G(yy_start) = 0;
+
+m4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],
+[[
+ YY_G(yy_start_stack_ptr) = 0;
+ YY_G(yy_start_stack_depth) = 0;
+ YY_G(yy_start_stack) = NULL;
+]])
+
+m4_ifdef( [[M4_YY_USES_REJECT]],
+[[
+ YY_G(yy_state_buf) = 0;
+ YY_G(yy_state_ptr) = 0;
+ YY_G(yy_full_match) = 0;
+ YY_G(yy_lp) = 0;
+]])
+
+m4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],
+[[
+ YY_G(yytext_ptr) = 0;
+ YY_G(yy_more_offset) = 0;
+ YY_G(yy_prev_more_offset) = 0;
+]])
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
#endif
- {
- register int i;
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+%endif
+
+
+%if-c-only SNIP! this currently causes conflicts with the c++ scanner
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy YYFARGS0(void)
+{
+ M4_YY_DECL_GUTS_VAR();
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state(M4_YY_CALL_ONLY_ARG);
+ }
+
+ /* Destroy the stack itself. */
+ yyfree(YY_G(yy_buffer_stack) M4_YY_CALL_LAST_ARG);
+ YY_G(yy_buffer_stack) = NULL;
+
+m4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],
+[[
+ /* Destroy the start condition stack. */
+ yyfree( YY_G(yy_start_stack) M4_YY_CALL_LAST_ARG );
+ YY_G(yy_start_stack) = NULL;
+]])
+
+m4_ifdef( [[M4_YY_USES_REJECT]],
+[[
+ yyfree ( YY_G(yy_state_buf) M4_YY_CALL_LAST_ARG);
+ YY_G(yy_state_buf) = NULL;
+]])
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( M4_YY_CALL_ONLY_ARG);
+
+%if-reentrant
+ /* Destroy the main struct (reentrant only). */
+ yyfree ( yyscanner M4_YY_CALL_LAST_ARG );
+ yyscanner = NULL;
+%endif
+ return 0;
+}
+%endif
+
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+/*
+ * Internal utility routines.
+ */
+]])
+
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
+#ifndef yytext_ptr
+static void yy_flex_strncpy YYFARGS3( char*,s1, yyconst char *,s2, int,n)
+{
+ int i;
for ( i = 0; i < n; ++i )
s1[i] = s2[i];
- }
+}
#endif
+]])
+m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
+[[
#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
- {
- register int n;
+static int yy_flex_strlen YYFARGS1( yyconst char *,s)
+{
+ int n;
for ( n = 0; s[n]; ++n )
;
return n;
- }
+}
#endif
+]])
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
- {
+m4_ifdef( [[M4_YY_NO_FLEX_ALLOC]],,
+[[
+void *yyalloc YYFARGS1( yy_size_t ,size)
+{
return (void *) malloc( size );
- }
+}
+]])
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
- {
+m4_ifdef( [[M4_YY_NO_FLEX_REALLOC]],,
+[[
+void *yyrealloc YYFARGS2( void *,ptr, yy_size_t ,size)
+{
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
@@ -1532,22 +3004,446 @@ yy_size_t size;
* as though doing an assignment.
*/
return (void *) realloc( (char *) ptr, size );
- }
-
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
-
-#if defined(YY_MAIN) && YY_MAIN
-int main()
- {
+}
+]])
+
+m4_ifdef( [[M4_YY_NO_FLEX_FREE]],,
+[[
+void yyfree YYFARGS1( void *,ptr)
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+]])
+
+%if-tables-serialization definitions
+m4preproc_include(`tables_shared.c')
+
+static int yytbl_read8 (void *v, struct yytbl_reader * rd)
+{
+ errno = 0;
+ if (fread (v, sizeof (flex_uint8_t), 1, rd->fp) != 1){
+ errno = EIO;
+ return -1;
+ }
+ rd->bread += sizeof(flex_uint8_t);
+ return 0;
+}
+
+static int yytbl_read16 (void *v, struct yytbl_reader * rd)
+{
+ errno = 0;
+ if (fread (v, sizeof (flex_uint16_t), 1, rd->fp) != 1){
+ errno = EIO;
+ return -1;
+ }
+ *((flex_uint16_t *) v) = ntohs (*((flex_uint16_t *) v));
+ rd->bread += sizeof(flex_uint16_t);
+ return 0;
+}
+
+static int yytbl_read32 (void *v, struct yytbl_reader * rd)
+{
+ errno = 0;
+ if (fread (v, sizeof (flex_uint32_t), 1, rd->fp) != 1){
+ errno = EIO;
+ return -1;
+ }
+ *((flex_uint32_t *) v) = ntohl (*((flex_uint32_t *) v));
+ rd->bread += sizeof(flex_uint32_t);
+ return 0;
+}
+
+/** Read the header */
+static int yytbl_hdr_read YYFARGS2(struct yytbl_hdr *, th, struct yytbl_reader *, rd)
+{
+ int bytes;
+ memset (th, 0, sizeof (struct yytbl_hdr));
+
+ if (yytbl_read32 (&(th->th_magic), rd) != 0)
+ return -1;
+
+ if (th->th_magic != YYTBL_MAGIC){
+ YY_FATAL_ERROR( "bad magic number" ); /* TODO: not fatal. */
+ return -1;
+ }
+
+ if (yytbl_read32 (&(th->th_hsize), rd) != 0
+ || yytbl_read32 (&(th->th_ssize), rd) != 0
+ || yytbl_read16 (&(th->th_flags), rd) != 0)
+ return -1;
+
+ /* Sanity check on header size. Greater than 1k suggests some funny business. */
+ if (th->th_hsize < 16 || th->th_hsize > 1024){
+ YY_FATAL_ERROR( "insane header size detected" ); /* TODO: not fatal. */
+ return -1;
+ }
+
+ /* Allocate enough space for the version and name fields */
+ bytes = th->th_hsize - 14;
+ th->th_version = (char *) yyalloc (bytes M4_YY_CALL_LAST_ARG);
+ if ( ! th->th_version )
+ YY_FATAL_ERROR( "out of dynamic memory in yytbl_hdr_read()" );
+
+ /* we read it all into th_version, and point th_name into that data */
+ if (fread (th->th_version, 1, bytes, rd->fp) != bytes){
+ errno = EIO;
+ yyfree(th->th_version M4_YY_CALL_LAST_ARG);
+ th->th_version = NULL;
+ return -1;
+ }
+ else
+ rd->bread += bytes;
+
+ th->th_name = th->th_version + strlen (th->th_version) + 1;
+ return 0;
+}
+
+/** lookup id in the dmap list.
+ * @param dmap pointer to first element in list
+ * @return NULL if not found.
+ */
+static struct yytbl_dmap *yytbl_dmap_lookup YYFARGS2(struct yytbl_dmap *, dmap,
+ int, id)
+{
+ while (dmap->dm_id)
+ if (dmap->dm_id == id)
+ return dmap;
+ else
+ dmap++;
+ return NULL;
+}
+
+/** Read a table while mapping its contents to the local array.
+ * @param dmap used to performing mapping
+ * @return 0 on success
+ */
+static int yytbl_data_load YYFARGS2(struct yytbl_dmap *, dmap, struct yytbl_reader*, rd)
+{
+ struct yytbl_data td;
+ struct yytbl_dmap *transdmap=0;
+ int len, i, rv, inner_loop_count;
+ void *p=0;
+
+ memset (&td, 0, sizeof (struct yytbl_data));
+
+ if (yytbl_read16 (&td.td_id, rd) != 0
+ || yytbl_read16 (&td.td_flags, rd) != 0
+ || yytbl_read32 (&td.td_hilen, rd) != 0
+ || yytbl_read32 (&td.td_lolen, rd) != 0)
+ return -1;
+
+ /* Lookup the map for the transition table so we have it in case we need it
+ * inside the loop below. This scanner might not even have a transition
+ * table, which is ok.
+ */
+ transdmap = yytbl_dmap_lookup (dmap, YYTD_ID_TRANSITION M4_YY_CALL_LAST_ARG);
+
+ if ((dmap = yytbl_dmap_lookup (dmap, td.td_id M4_YY_CALL_LAST_ARG)) == NULL){
+ YY_FATAL_ERROR( "table id not found in map." ); /* TODO: not fatal. */
+ return -1;
+ }
+
+ /* Allocate space for table.
+ * The --full yy_transition table is a special case, since we
+ * need the dmap.dm_sz entry to tell us the sizeof the individual
+ * struct members.
+ */
+ {
+ size_t bytes;
+
+ if ((td.td_flags & YYTD_STRUCT))
+ bytes = sizeof(struct yy_trans_info) * td.td_lolen * (td.td_hilen ? td.td_hilen : 1);
+ else
+ bytes = td.td_lolen * (td.td_hilen ? td.td_hilen : 1) * dmap->dm_sz;
+
+ if(M4_YY_TABLES_VERIFY)
+ /* We point to the array itself */
+ p = dmap->dm_arr;
+ else
+ /* We point to the address of a pointer. */
+ *dmap->dm_arr = p = (void *) yyalloc (bytes M4_YY_CALL_LAST_ARG);
+ if ( ! p )
+ YY_FATAL_ERROR( "out of dynamic memory in yytbl_data_load()" );
+ }
+
+ /* If it's a struct, we read 2 integers to get one element */
+ if ((td.td_flags & YYTD_STRUCT) != 0)
+ inner_loop_count = 2;
+ else
+ inner_loop_count = 1;
+
+ /* read and map each element.
+ * This loop iterates once for each element of the td_data array.
+ * Notice that we increment 'i' in the inner loop.
+ */
+ len = yytbl_calc_total_len (&td);
+ for (i = 0; i < len; ){
+ int j;
+
+
+ /* This loop really executes exactly 1 or 2 times.
+ * The second time is to handle the second member of the
+ * YYTD_STRUCT for the yy_transition array.
+ */
+ for (j = 0; j < inner_loop_count; j++, i++) {
+ flex_int32_t t32;
+
+ /* read into t32 no matter what the real size is. */
+ {
+ flex_int16_t t16;
+ flex_int8_t t8;
+
+ switch (YYTDFLAGS2BYTES (td.td_flags)) {
+ case sizeof (flex_int32_t):
+ rv = yytbl_read32 (&t32, rd);
+ break;
+ case sizeof (flex_int16_t):
+ rv = yytbl_read16 (&t16, rd);
+ t32 = t16;
+ break;
+ case sizeof (flex_int8_t):
+ rv = yytbl_read8 (&t8, rd);
+ t32 = t8;
+ break;
+ default:
+ YY_FATAL_ERROR( "invalid td_flags" ); /* TODO: not fatal. */
+ return -1;
+ }
+ }
+ if (rv != 0)
+ return -1;
+
+ /* copy into the deserialized array... */
+
+ if ((td.td_flags & YYTD_STRUCT)) {
+ /* t32 is the j'th member of a two-element struct. */
+ void *v;
+
+ v = j == 0 ? &(((struct yy_trans_info *) p)->yy_verify)
+ : &(((struct yy_trans_info *) p)->yy_nxt);
+
+ switch (dmap->dm_sz) {
+ case sizeof (flex_int32_t):
+ if (M4_YY_TABLES_VERIFY){
+ if( ((flex_int32_t *) v)[0] != (flex_int32_t) t32)
+ YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int32_t" );
+ }else
+ ((flex_int32_t *) v)[0] = (flex_int32_t) t32;
+ break;
+ case sizeof (flex_int16_t):
+ if (M4_YY_TABLES_VERIFY ){
+ if(((flex_int16_t *) v)[0] != (flex_int16_t) t32)
+ YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int16_t" );
+ }else
+ ((flex_int16_t *) v)[0] = (flex_int16_t) t32;
+ break;
+ case sizeof(flex_int8_t):
+ if (M4_YY_TABLES_VERIFY ){
+ if( ((flex_int8_t *) v)[0] != (flex_int8_t) t32)
+ YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int8_t" );
+ }else
+ ((flex_int8_t *) v)[0] = (flex_int8_t) t32;
+ break;
+ default:
+ YY_FATAL_ERROR( "invalid dmap->dm_sz for struct" ); /* TODO: not fatal. */
+ return -1;
+ }
+
+ /* if we're done with j, increment p */
+ if (j == 1)
+ p = (struct yy_trans_info *) p + 1;
+ }
+ else if ((td.td_flags & YYTD_PTRANS)) {
+ /* t32 is an index into the transition array. */
+ struct yy_trans_info *v;
+
+
+ if (!transdmap){
+ YY_FATAL_ERROR( "transition table not found" ); /* TODO: not fatal. */
+ return -1;
+ }
+
+ if( M4_YY_TABLES_VERIFY)
+ v = &(((struct yy_trans_info *) (transdmap->dm_arr))[t32]);
+ else
+ v = &((*((struct yy_trans_info **) (transdmap->dm_arr)))[t32]);
+
+ if(M4_YY_TABLES_VERIFY ){
+ if( ((struct yy_trans_info **) p)[0] != v)
+ YY_FATAL_ERROR( "tables verification failed at YYTD_PTRANS" );
+ }else
+ ((struct yy_trans_info **) p)[0] = v;
+
+ /* increment p */
+ p = (struct yy_trans_info **) p + 1;
+ }
+ else {
+ /* t32 is a plain int. copy data, then incrememnt p. */
+ switch (dmap->dm_sz) {
+ case sizeof (flex_int32_t):
+ if(M4_YY_TABLES_VERIFY ){
+ if( ((flex_int32_t *) p)[0] != (flex_int32_t) t32)
+ YY_FATAL_ERROR( "tables verification failed at flex_int32_t" );
+ }else
+ ((flex_int32_t *) p)[0] = (flex_int32_t) t32;
+ p = ((flex_int32_t *) p) + 1;
+ break;
+ case sizeof (flex_int16_t):
+ if(M4_YY_TABLES_VERIFY ){
+ if( ((flex_int16_t *) p)[0] != (flex_int16_t) t32)
+ YY_FATAL_ERROR( "tables verification failed at flex_int16_t" );
+ }else
+ ((flex_int16_t *) p)[0] = (flex_int16_t) t32;
+ p = ((flex_int16_t *) p) + 1;
+ break;
+ case sizeof (flex_int8_t):
+ if(M4_YY_TABLES_VERIFY ){
+ if( ((flex_int8_t *) p)[0] != (flex_int8_t) t32)
+ YY_FATAL_ERROR( "tables verification failed at flex_int8_t" );
+ }else
+ ((flex_int8_t *) p)[0] = (flex_int8_t) t32;
+ p = ((flex_int8_t *) p) + 1;
+ break;
+ default:
+ YY_FATAL_ERROR( "invalid dmap->dm_sz for plain int" ); /* TODO: not fatal. */
+ return -1;
+ }
+ }
+ }
+
+ }
+
+ /* Now eat padding. */
+ {
+ int pad;
+ pad = yypad64(rd->bread);
+ while(--pad >= 0){
+ flex_int8_t t8;
+ if(yytbl_read8(&t8,rd) != 0)
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+%define-yytables The name for this specific scanner's tables.
+
+/* Find the key and load the DFA tables from the given stream. */
+static int yytbl_fload YYFARGS2(FILE *, fp, const char *, key)
+{
+ int rv=0;
+ struct yytbl_hdr th;
+ struct yytbl_reader rd;
+
+ rd.fp = fp;
+ th.th_version = NULL;
+
+ /* Keep trying until we find the right set of tables or end of file. */
+ while (!feof(rd.fp)) {
+ rd.bread = 0;
+ if (yytbl_hdr_read (&th, &rd M4_YY_CALL_LAST_ARG) != 0){
+ rv = -1;
+ goto return_rv;
+ }
+
+ /* A NULL key means choose the first set of tables. */
+ if (key == NULL)
+ break;
+
+ if (strcmp(th.th_name,key) != 0){
+ /* Skip ahead to next set */
+ fseek(rd.fp, th.th_ssize - th.th_hsize, SEEK_CUR);
+ yyfree(th.th_version M4_YY_CALL_LAST_ARG);
+ th.th_version = NULL;
+ }
+ else
+ break;
+ }
+
+ while (rd.bread < th.th_ssize){
+ /* Load the data tables */
+ if(yytbl_data_load (yydmap,&rd M4_YY_CALL_LAST_ARG) != 0){
+ rv = -1;
+ goto return_rv;
+ }
+ }
+
+return_rv:
+ if(th.th_version){
+ yyfree(th.th_version M4_YY_CALL_LAST_ARG);
+ th.th_version = NULL;
+ }
+
+ return rv;
+}
+
+/** Load the DFA tables for this scanner from the given stream. */
+int yytables_fload YYFARGS1(FILE *, fp)
+{
+
+ if( yytbl_fload(fp, YYTABLES_NAME M4_YY_CALL_LAST_ARG) != 0)
+ return -1;
+ return 0;
+}
+
+/** Destroy the loaded tables, freeing memory, etc.. */
+int yytables_destroy YYFARGS0(void)
+{
+ struct yytbl_dmap *dmap=0;
+
+ if(!M4_YY_TABLES_VERIFY){
+ /* Walk the dmap, freeing the pointers */
+ for(dmap=yydmap; dmap->dm_id; dmap++) {
+ void * v;
+ v = dmap->dm_arr;
+ if(v && *(char**)v){
+ yyfree(*(char**)v M4_YY_CALL_LAST_ARG);
+ *(char**)v = NULL;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/* end table serialization code definitions */
+%endif
+
+
+m4_ifdef([[M4_YY_MAIN]], [[
+int main M4_YY_PARAMS(void);
+
+int main ()
+{
+
+%if-reentrant
+ yyscan_t lexer;
+ yylex_init(&lexer);
+ yylex( lexer );
+ yylex_destroy( lexer);
+
+%endif
+%if-not-reentrant
yylex();
+%endif
+
return 0;
- }
-#endif
+}
+]])
+
+%ok-for-header
+m4_ifdef( [[M4_YY_IN_HEADER]],
+[[
+#undef YY_NEW_FILE
+#undef YY_FLUSH_BUFFER
+#undef yy_set_bol
+#undef yy_new_buffer
+#undef yy_set_interactive
+#undef YY_DO_BEFORE_ACTION
+
+#ifdef YY_DECL_IS_OURS
+#undef YY_DECL_IS_OURS
+#undef YY_DECL
+#endif
+]])
diff --git a/usr.bin/lex/flexdef.h b/usr.bin/lex/flexdef.h
index 21d04030ccf..7a0ef646522 100644
--- a/usr.bin/lex/flexdef.h
+++ b/usr.bin/lex/flexdef.h
@@ -1,83 +1,112 @@
-/* $OpenBSD: flexdef.h,v 1.8 2015/10/10 05:47:54 deraadt Exp $ */
+/* $OpenBSD: flexdef.h,v 1.9 2015/11/19 19:43:40 tedu Exp $ */
/* flexdef - definitions file for flex */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
-/* @(#) $Header: /cvs/OpenBSD/src/usr.bin/lex/flexdef.h,v 1.8 2015/10/10 05:47:54 deraadt Exp $ (LBL) */
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
-#include <stdio.h>
-#include <ctype.h>
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
-#include "config.h"
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
-#ifdef __TURBOC__
-#define HAVE_STRING_H 1
-#define MS_DOS 1
-#ifndef __STDC__
-#define __STDC__ 1
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#ifndef FLEXDEF_H
+#define FLEXDEF_H 1
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
#endif
- #pragma warn -pro
- #pragma warn -rch
- #pragma warn -use
- #pragma warn -aus
- #pragma warn -par
- #pragma warn -pia
+
+/* AIX requires this to be the first thing in the file. */
+#ifndef __GNUC__
+# if HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+# endif
+# endif
+# endif
#endif
-#ifdef HAVE_STRING_H
+#ifdef STDC_HEADERS
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <setjmp.h>
+#include <ctype.h>
#include <string.h>
+#include <math.h>
+#endif
+#ifdef HAVE_ASSERT_H
+#include <assert.h>
#else
-#include <strings.h>
+#define assert(Pred)
#endif
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
#endif
-
-#ifdef STDC_HEADERS
-#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_SYS_PARAMS_H
+#include <sys/params.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+#ifdef HAVE_STDBOOL_H
+#include <stdbool.h>
#else
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
+#define bool int
+#define true 1
+#define false 0
#endif
+#ifdef HAVE_REGEX_H
+#include <regex.h>
#endif
-
-
-/* As an aid for the internationalization patch to flex, which
- * is maintained outside this distribution for copyright reasons.
- */
-#define _(String) (String)
+#include "flexint.h"
+
+/* We use gettext. So, when we write strings which should be translated, we mark them with _() */
+#ifdef ENABLE_NLS
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif /* HAVE_LOCALE_H */
+#include "gettext.h"
+#define _(String) gettext (String)
+#else
+#define _(STRING) STRING
+#endif /* ENABLE_NLS */
/* Always be prepared to generate an 8-bit scanner. */
#define CSIZE 256
@@ -89,7 +118,7 @@
#endif
#ifndef PROTO
-#ifdef __STDC__
+#if defined(__STDC__)
#define PROTO(proto) proto
#else
#define PROTO(proto) ()
@@ -127,12 +156,8 @@
#define isascii(c) ((c) <= 0177)
#endif
-
-#define true 1
-#define false 0
#define unspecified -1
-
/* Special chk[] values marking the slots taking by end-of-buffer and action
* numbers.
*/
@@ -198,10 +223,10 @@
*/
#define NIL 0
-#define JAM -1 /* to mark a missing DFA transition */
+#define JAM -1 /* to mark a missing DFA transition */
#define NO_TRANSITION NIL
-#define UNIQUE -1 /* marks a symbol as an e.c. representative */
-#define INFINITY -1 /* for x{5,} constructions */
+#define UNIQUE -1 /* marks a symbol as an e.c. representative */
+#define INFINITE_REPEAT -1 /* for x{5,} constructions */
#define INITIAL_MAX_CCLS 100 /* max number of unique character classes */
#define MAX_CCLS_INCREMENT 100
@@ -219,15 +244,16 @@
#define INITIAL_MAX_DFAS 1000 /* default maximum number of dfa states */
#define MAX_DFAS_INCREMENT 1000
-#define JAMSTATE -32766 /* marks a reference to the state that always jams */
+#define JAMSTATE -32766 /* marks a reference to the state that always jams */
/* Maximum number of NFA states. */
#define MAXIMUM_MNS 31999
+#define MAXIMUM_MNS_LONG 1999999999
/* Enough so that if it's subtracted from an NFA state number, the result
* is guaranteed to be negative.
*/
-#define MARKER_DIFFERENCE (MAXIMUM_MNS+2)
+#define MARKER_DIFFERENCE (maximum_mns+2)
/* Maximum number of nxt/chk pairs for non-templates. */
#define INITIAL_MAX_XPAIRS 2000
@@ -243,7 +269,7 @@
#define MAX_SCS_INCREMENT 40 /* amount to bump by if it's not enough */
#define ONE_STACK_SIZE 500 /* stack of states with only one out-transition */
-#define SAME_TRANS -1 /* transition is the same as "default" entry for state */
+#define SAME_TRANS -1 /* transition is the same as "default" entry for state */
/* The following percentages are used to tune table compression:
@@ -255,7 +281,7 @@
/* The percentage the number of homogeneous out-transitions of a state
* must be of the number of total out-transitions of the state in order
- * that the state's transition table is first compared with a potential
+ * that the state's transition table is first compared with a potential
* template of the most common out-transition instead of with the first
* proto in the proto queue.
*/
@@ -297,7 +323,7 @@
*/
#define PROT_SAVE_SIZE 2000
-#define MSP 50 /* maximum number of saved protos (protos on the proto queue) */
+#define MSP 50 /* maximum number of saved protos (protos on the proto queue) */
/* Maximum number of out-transitions a state can have that we'll rummage
* around through the interior of the internal fast table looking for a
@@ -323,30 +349,6 @@
/* Declarations for global variables. */
-/* Variables for symbol tables:
- * sctbl - start-condition symbol table
- * ndtbl - name-definition symbol table
- * ccltab - character class text symbol table
- */
-
-struct hash_entry
- {
- struct hash_entry *prev, *next;
- char *name;
- char *str_val;
- int int_val;
- } ;
-
-typedef struct hash_entry **hash_table;
-
-#define NAME_TABLE_HASH_SIZE 101
-#define START_COND_HASH_SIZE 101
-#define CCL_HASH_SIZE 101
-
-extern struct hash_entry *ndtbl[NAME_TABLE_HASH_SIZE];
-extern struct hash_entry *sctbl[START_COND_HASH_SIZE];
-extern struct hash_entry *ccltab[CCL_HASH_SIZE];
-
/* Variables for flags:
* printstats - if true (-v), dump statistics
@@ -357,8 +359,8 @@ extern struct hash_entry *ccltab[CCL_HASH_SIZE];
* nowarn - if true (-w), do not generate warnings
* spprdflt - if true (-s), suppress the default rule
* interactive - if true (-I), generate an interactive scanner
- * caseins - if true (-i), generate a case-insensitive scanner
* lex_compat - if true (-l), maximize compatibility with AT&T lex
+ * posix_compat - if true (-X), maximize compatibility with POSIX lex
* do_yylineno - if true, generate code to maintain yylineno
* useecs - if true (-Ce flag), use equivalence classes
* fulltbl - if true (-Cf flag), don't compress the DFA state table
@@ -372,6 +374,9 @@ extern struct hash_entry *ccltab[CCL_HASH_SIZE];
* listing backing-up states
* C_plus_plus - if true (i.e., -+ flag), generate a C++ scanner class;
* otherwise, a standard C scanner
+ * reentrant - if true (-R), generate a reentrant C scanner.
+ * bison_bridge_lval - if true (--bison-bridge), bison pure calling convention.
+ * bison_bridge_lloc - if true (--bison-locations), bison yylloc.
* long_align - if true (-Ca flag), favor long-word alignment.
* use_read - if true (-f, -F, or -Cr) then use read() for scanner input;
* otherwise, use fread().
@@ -393,10 +398,13 @@ extern struct hash_entry *ccltab[CCL_HASH_SIZE];
* reject_really_used - same for REJECT
*/
-extern int printstats, syntaxerror, eofseen, ddebug, trace, nowarn, spprdflt;
-extern int interactive, caseins, lex_compat, do_yylineno;
+extern int printstats, syntaxerror, eofseen, ddebug, trace, nowarn,
+ spprdflt;
+extern int interactive, lex_compat, posix_compat, do_yylineno;
extern int useecs, fulltbl, usemecs, fullspd;
extern int gen_line_dirs, performance_report, backing_up_report;
+extern int reentrant, bison_bridge_lval, bison_bridge_lloc;
+extern bool ansi_func_defs, ansi_func_protos;
extern int C_plus_plus, long_align, use_read, yytext_is_array, do_yywrap;
extern int csize;
extern int yymore_used, reject, real_reject, continued_action, in_rule;
@@ -409,7 +417,6 @@ extern int yymore_really_used, reject_really_used;
* dataline - number of contiguous lines of data in current data
* statement. Used to generate readable -f output
* linenum - current input line number
- * out_linenum - current output line number
* skelfile - the skeleton file
* skel - compiled-in skeleton array
* skel_ind - index into "skel" array, if skelfile is nil
@@ -417,6 +424,7 @@ extern int yymore_really_used, reject_really_used;
* backing_up_file - file to summarize backing-up states to
* infilename - name of input file
* outfilename - name of output file
+ * headerfilename - name of the .h file to generate
* did_outfilename - whether outfilename was explicitly set
* prefix - the prefix used for externally visible names ("yy" by default)
* yyclass - yyFlexLexer subclass to use for YY_DECL
@@ -424,7 +432,7 @@ extern int yymore_really_used, reject_really_used;
* use_stdout - the -t flag
* input_files - array holding names of input files
* num_input_files - size of input_files array
- * program_name - name with which program was invoked
+ * program_name - name with which program was invoked
*
* action_array - array to hold the rule actions
* action_size - size of action_array
@@ -436,13 +444,13 @@ extern int yymore_really_used, reject_really_used;
* to "action_array"
*/
-extern int datapos, dataline, linenum, out_linenum;
+extern int datapos, dataline, linenum;
extern FILE *skelfile, *yyin, *backing_up_file;
extern const char *skel[];
extern int skel_ind;
-extern char *infilename, *outfilename;
+extern char *infilename, *outfilename, *headerfilename;
extern int did_outfilename;
-extern char *prefix, *yyclass;
+extern char *prefix, *yyclass, *extra_type;
extern int do_stdinit, use_stdout;
extern char **input_files;
extern int num_input_files;
@@ -466,6 +474,7 @@ extern int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;
/* Variables for nfa machine data:
+ * maximum_mns - maximal number of NFA states supported by tables
* current_mns - current maximum on number of NFA states
* num_rules - number of the last accepting state; also is number of
* rules created so far
@@ -492,13 +501,18 @@ extern int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;
* context
* rule_linenum - line number associated with rule
* rule_useful - true if we've determined that the rule can be matched
+ * rule_has_nl - true if rule could possibly match a newline
+ * ccl_has_nl - true if current ccl could match a newline
+ * nlch - default eol char
*/
-extern int current_mns, current_max_rules;
+extern int maximum_mns, current_mns, current_max_rules;
extern int num_rules, num_eof_rules, default_rule, lastnfa;
extern int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;
extern int *accptnum, *assoc_rule, *state_type;
extern int *rule_type, *rule_linenum, *rule_useful;
+extern bool *rule_has_nl, *ccl_has_nl;
+extern int nlch;
/* Different types of states; values are useful as masks, as well, for
* routines like check_trailing_context().
@@ -609,12 +623,12 @@ extern char **scname;
extern int current_max_dfa_size, current_max_xpairs;
extern int current_max_template_xpairs, current_max_dfas;
extern int lastdfa, *nxt, *chk, *tnxt;
-extern int *base, *def, *nultrans, NUL_ec, tblend, firstfree, **dss, *dfasiz;
-extern union dfaacc_union
- {
- int *dfaacc_set;
- int dfaacc_state;
- } *dfaacc;
+extern int *base, *def, *nultrans, NUL_ec, tblend, firstfree, **dss,
+ *dfasiz;
+extern union dfaacc_union {
+ int *dfaacc_set;
+ int dfaacc_state;
+} *dfaacc;
extern int *accsiz, *dhash, numas;
extern int numsnpairs, jambase, jamstate;
extern int end_of_buffer_state;
@@ -661,12 +675,12 @@ extern int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs;
extern int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave;
extern int num_backing_up, bol_needed;
-void *allocate_array PROTO((int, size_t));
-void *reallocate_array PROTO((void*, int, size_t));
+void *allocate_array PROTO ((int, size_t));
+void *reallocate_array PROTO ((void *, int, size_t));
-void *flex_alloc PROTO((size_t));
-void *flex_realloc PROTO((void*, size_t));
-void flex_free PROTO((void*));
+void *flex_alloc PROTO ((size_t));
+void *flex_realloc PROTO ((void *, size_t));
+void flex_free PROTO ((void *));
#define allocate_integer_array(size) \
(int *) allocate_array( size, sizeof( int ) )
@@ -674,6 +688,12 @@ void flex_free PROTO((void*));
#define reallocate_integer_array(array,size) \
(int *) reallocate_array( (void *) array, size, sizeof( int ) )
+#define allocate_bool_array(size) \
+ (bool *) allocate_array( size, sizeof( bool ) )
+
+#define reallocate_bool_array(array,size) \
+ (bool *) reallocate_array( (void *) array, size, sizeof( bool ) )
+
#define allocate_int_ptr_array(size) \
(int **) allocate_array( size, sizeof( int * ) )
@@ -718,340 +738,490 @@ extern int yylval;
/* from file ccl.c */
-extern void ccladd PROTO((int, int)); /* add a single character to a ccl */
-extern int cclinit PROTO((void)); /* make an empty ccl */
-extern void cclnegate PROTO((int)); /* negate a ccl */
+extern void ccladd PROTO ((int, int)); /* add a single character to a ccl */
+extern int cclinit PROTO ((void)); /* make an empty ccl */
+extern void cclnegate PROTO ((int)); /* negate a ccl */
+extern int ccl_set_diff (int a, int b); /* set difference of two ccls. */
+extern int ccl_set_union (int a, int b); /* set union of two ccls. */
/* List the members of a set of characters in CCL form. */
-extern void list_character_set PROTO((FILE*, int[]));
+extern void list_character_set PROTO ((FILE *, int[]));
/* from file dfa.c */
/* Check a DFA state for backing up. */
-extern void check_for_backing_up PROTO((int, int[]));
+extern void check_for_backing_up PROTO ((int, int[]));
/* Check to see if NFA state set constitutes "dangerous" trailing context. */
-extern void check_trailing_context PROTO((int*, int, int*, int));
+extern void check_trailing_context PROTO ((int *, int, int *, int));
/* Construct the epsilon closure of a set of ndfa states. */
-extern int *epsclosure PROTO((int*, int*, int[], int*, int*));
+extern int *epsclosure PROTO ((int *, int *, int[], int *, int *));
/* Increase the maximum number of dfas. */
-extern void increase_max_dfas PROTO((void));
+extern void increase_max_dfas PROTO ((void));
-extern void ntod PROTO((void)); /* convert a ndfa to a dfa */
+extern void ntod PROTO ((void)); /* convert a ndfa to a dfa */
/* Converts a set of ndfa states into a dfa state. */
-extern int snstods PROTO((int[], int, int[], int, int, int*));
+extern int snstods PROTO ((int[], int, int[], int, int, int *));
/* from file ecs.c */
/* Convert character classes to set of equivalence classes. */
-extern void ccl2ecl PROTO((void));
+extern void ccl2ecl PROTO ((void));
/* Associate equivalence class numbers with class members. */
-extern int cre8ecs PROTO((int[], int[], int));
+extern int cre8ecs PROTO ((int[], int[], int));
/* Update equivalence classes based on character class transitions. */
-extern void mkeccl PROTO((Char[], int, int[], int[], int, int));
+extern void mkeccl PROTO ((Char[], int, int[], int[], int, int));
/* Create equivalence class for single character. */
-extern void mkechar PROTO((int, int[], int[]));
+extern void mkechar PROTO ((int, int[], int[]));
/* from file gen.c */
-extern void do_indent PROTO((void)); /* indent to the current level */
+extern void do_indent PROTO ((void)); /* indent to the current level */
/* Generate the code to keep backing-up information. */
-extern void gen_backing_up PROTO((void));
+extern void gen_backing_up PROTO ((void));
/* Generate the code to perform the backing up. */
-extern void gen_bu_action PROTO((void));
+extern void gen_bu_action PROTO ((void));
/* Generate full speed compressed transition table. */
-extern void genctbl PROTO((void));
+extern void genctbl PROTO ((void));
/* Generate the code to find the action number. */
-extern void gen_find_action PROTO((void));
+extern void gen_find_action PROTO ((void));
-extern void genftbl PROTO((void)); /* generate full transition table */
+extern void genftbl PROTO ((void)); /* generate full transition table */
/* Generate the code to find the next compressed-table state. */
-extern void gen_next_compressed_state PROTO((char*));
+extern void gen_next_compressed_state PROTO ((char *));
/* Generate the code to find the next match. */
-extern void gen_next_match PROTO((void));
+extern void gen_next_match PROTO ((void));
/* Generate the code to find the next state. */
-extern void gen_next_state PROTO((int));
+extern void gen_next_state PROTO ((int));
/* Generate the code to make a NUL transition. */
-extern void gen_NUL_trans PROTO((void));
+extern void gen_NUL_trans PROTO ((void));
/* Generate the code to find the start state. */
-extern void gen_start_state PROTO((void));
+extern void gen_start_state PROTO ((void));
/* Generate data statements for the transition tables. */
-extern void gentabs PROTO((void));
+extern void gentabs PROTO ((void));
/* Write out a formatted string at the current indentation level. */
-extern void indent_put2s PROTO((char[], char[]));
+extern void indent_put2s PROTO ((const char *, const char *));
/* Write out a string + newline at the current indentation level. */
-extern void indent_puts PROTO((char[]));
+extern void indent_puts PROTO ((const char *));
-extern void make_tables PROTO((void)); /* generate transition tables */
+extern void make_tables PROTO ((void)); /* generate transition tables */
/* from file main.c */
-extern void check_options PROTO((void));
-extern void flexend PROTO((int));
-extern void usage PROTO((void));
+extern void check_options PROTO ((void));
+extern void flexend PROTO ((int));
+extern void usage PROTO ((void));
/* from file misc.c */
/* Add a #define to the action file. */
-extern void action_define PROTO(( char *defname, int value ));
+extern void action_define PROTO ((const char *defname, int value));
/* Add the given text to the stored actions. */
-extern void add_action PROTO(( char *new_text ));
+extern void add_action PROTO ((const char *new_text));
/* True if a string is all lower case. */
-extern int all_lower PROTO((register char *));
+extern int all_lower PROTO ((char *));
/* True if a string is all upper case. */
-extern int all_upper PROTO((register char *));
+extern int all_upper PROTO ((char *));
-/* Bubble sort an integer array. */
-extern void bubble PROTO((int [], int));
+/* Compare two integers for use by qsort. */
+extern int intcmp PROTO ((const void *, const void *));
/* Check a character to make sure it's in the expected range. */
-extern void check_char PROTO((int c));
+extern void check_char PROTO ((int c));
/* Replace upper-case letter to lower-case. */
-extern Char clower PROTO((int));
+extern Char clower PROTO ((int));
/* Returns a dynamically allocated copy of a string. */
-extern char *copy_string PROTO((register const char *));
+extern char *copy_string PROTO ((const char *));
/* Returns a dynamically allocated copy of a (potentially) unsigned string. */
-extern Char *copy_unsigned_string PROTO((register Char *));
+extern Char *copy_unsigned_string PROTO ((Char *));
-/* Shell sort a character array. */
-extern void cshell PROTO((Char [], int, int));
+/* Compare two characters for use by qsort with '\0' sorting last. */
+extern int cclcmp PROTO ((const void *, const void *));
/* Finish up a block of data declarations. */
-extern void dataend PROTO((void));
+extern void dataend PROTO ((void));
/* Flush generated data statements. */
-extern void dataflush PROTO((void));
+extern void dataflush PROTO ((void));
/* Report an error message and terminate. */
-extern void flexerror PROTO((const char[]));
+extern void flexerror PROTO ((const char *));
/* Report a fatal error message and terminate. */
-extern void flexfatal PROTO((const char[]));
+extern void flexfatal PROTO ((const char *));
+
+/* Report a fatal error with a pinpoint, and terminate */
+#if HAVE_DECL___FUNC__
+#define flex_die(msg) \
+ do{ \
+ fprintf (stderr,\
+ _("%s: fatal internal error at %s:%d (%s): %s\n"),\
+ program_name, __FILE__, (int)__LINE__,\
+ __func__,msg);\
+ FLEX_EXIT(1);\
+ }while(0)
+#else /* ! HAVE_DECL___FUNC__ */
+#define flex_die(msg) \
+ do{ \
+ fprintf (stderr,\
+ _("%s: fatal internal error at %s:%d %s\n"),\
+ program_name, __FILE__, (int)__LINE__,\
+ msg);\
+ FLEX_EXIT(1);\
+ }while(0)
+#endif /* ! HAVE_DECL___func__ */
/* Convert a hexadecimal digit string to an integer value. */
-extern int htoi PROTO((Char[]));
+extern int htoi PROTO ((Char[]));
/* Report an error message formatted with one integer argument. */
-extern void lerrif PROTO((const char[], int));
+extern void lerrif PROTO ((const char *, int));
/* Report an error message formatted with one string argument. */
-extern void lerrsf PROTO((const char[], const char[]));
+extern void lerrsf PROTO ((const char *, const char *));
+
+/* Like lerrsf, but also exit after displaying message. */
+extern void lerrsf_fatal PROTO ((const char *, const char *));
/* Spit out a "#line" statement. */
-extern void line_directive_out PROTO((FILE*, int));
+extern void line_directive_out PROTO ((FILE *, int));
/* Mark the current position in the action array as the end of the section 1
* user defs.
*/
-extern void mark_defs1 PROTO((void));
+extern void mark_defs1 PROTO ((void));
/* Mark the current position in the action array as the end of the prolog. */
-extern void mark_prolog PROTO((void));
+extern void mark_prolog PROTO ((void));
/* Generate a data statment for a two-dimensional array. */
-extern void mk2data PROTO((int));
+extern void mk2data PROTO ((int));
-extern void mkdata PROTO((int)); /* generate a data statement */
+extern void mkdata PROTO ((int)); /* generate a data statement */
/* Return the integer represented by a string of digits. */
-extern int myctoi PROTO((char []));
+extern int myctoi PROTO ((const char *));
/* Return character corresponding to escape sequence. */
-extern Char myesc PROTO((Char[]));
+extern Char myesc PROTO ((Char[]));
/* Convert an octal digit string to an integer value. */
-extern int otoi PROTO((Char [] ));
+extern int otoi PROTO ((Char[]));
/* Output a (possibly-formatted) string to the generated scanner. */
-extern void out PROTO((const char []));
-extern void out_dec PROTO((const char [], int));
-extern void out_dec2 PROTO((const char [], int, int));
-extern void out_hex PROTO((const char [], unsigned int));
-extern void out_line_count PROTO((const char []));
-extern void out_str PROTO((const char [], const char []));
+extern void out PROTO ((const char *));
+extern void out_dec PROTO ((const char *, int));
+extern void out_dec2 PROTO ((const char *, int, int));
+extern void out_hex PROTO ((const char *, unsigned int));
+extern void out_str PROTO ((const char *, const char *));
extern void out_str3
- PROTO((const char [], const char [], const char [], const char []));
-extern void out_str_dec PROTO((const char [], const char [], int));
-extern void outc PROTO((int));
-extern void outn PROTO((const char []));
+PROTO ((const char *, const char *, const char *, const char *));
+extern void out_str_dec PROTO ((const char *, const char *, int));
+extern void outc PROTO ((int));
+extern void outn PROTO ((const char *));
+extern void out_m4_define (const char* def, const char* val);
/* Return a printable version of the given character, which might be
* 8-bit.
*/
-extern char *readable_form PROTO((int));
+extern char *readable_form PROTO ((int));
/* Write out one section of the skeleton file. */
-extern void skelout PROTO((void));
+extern void skelout PROTO ((void));
/* Output a yy_trans_info structure. */
-extern void transition_struct_out PROTO((int, int));
+extern void transition_struct_out PROTO ((int, int));
/* Only needed when using certain broken versions of bison to build parse.c. */
-extern void *yy_flex_xmalloc PROTO(( int ));
+extern void *yy_flex_xmalloc PROTO ((int));
/* Set a region of memory to 0. */
-extern void zero_out PROTO((char *, size_t));
+extern void zero_out PROTO ((char *, size_t));
/* from file nfa.c */
/* Add an accepting state to a machine. */
-extern void add_accept PROTO((int, int));
+extern void add_accept PROTO ((int, int));
/* Make a given number of copies of a singleton machine. */
-extern int copysingl PROTO((int, int));
+extern int copysingl PROTO ((int, int));
/* Debugging routine to write out an nfa. */
-extern void dumpnfa PROTO((int));
+extern void dumpnfa PROTO ((int));
/* Finish up the processing for a rule. */
-extern void finish_rule PROTO((int, int, int, int));
+extern void finish_rule PROTO ((int, int, int, int, int));
/* Connect two machines together. */
-extern int link_machines PROTO((int, int));
+extern int link_machines PROTO ((int, int));
/* Mark each "beginning" state in a machine as being a "normal" (i.e.,
* not trailing context associated) state.
*/
-extern void mark_beginning_as_normal PROTO((register int));
+extern void mark_beginning_as_normal PROTO ((int));
/* Make a machine that branches to two machines. */
-extern int mkbranch PROTO((int, int));
+extern int mkbranch PROTO ((int, int));
-extern int mkclos PROTO((int)); /* convert a machine into a closure */
-extern int mkopt PROTO((int)); /* make a machine optional */
+extern int mkclos PROTO ((int)); /* convert a machine into a closure */
+extern int mkopt PROTO ((int)); /* make a machine optional */
/* Make a machine that matches either one of two machines. */
-extern int mkor PROTO((int, int));
+extern int mkor PROTO ((int, int));
/* Convert a machine into a positive closure. */
-extern int mkposcl PROTO((int));
+extern int mkposcl PROTO ((int));
-extern int mkrep PROTO((int, int, int)); /* make a replicated machine */
+extern int mkrep PROTO ((int, int, int)); /* make a replicated machine */
/* Create a state with a transition on a given symbol. */
-extern int mkstate PROTO((int));
+extern int mkstate PROTO ((int));
-extern void new_rule PROTO((void)); /* initialize for a new rule */
+extern void new_rule PROTO ((void)); /* initialize for a new rule */
/* from file parse.y */
/* Build the "<<EOF>>" action for the active start conditions. */
-extern void build_eof_action PROTO((void));
+extern void build_eof_action PROTO ((void));
/* Write out a message formatted with one string, pinpointing its location. */
-extern void format_pinpoint_message PROTO((char[], char[]));
+extern void format_pinpoint_message PROTO ((const char *, const char *));
/* Write out a message, pinpointing its location. */
-extern void pinpoint_message PROTO((char[]));
+extern void pinpoint_message PROTO ((const char *));
/* Write out a warning, pinpointing it at the given line. */
-extern void line_warning PROTO(( char[], int ));
+extern void line_warning PROTO ((const char *, int));
/* Write out a message, pinpointing it at the given line. */
-extern void line_pinpoint PROTO(( char[], int ));
+extern void line_pinpoint PROTO ((const char *, int));
/* Report a formatted syntax error. */
-extern void format_synerr PROTO((char [], char[]));
-extern void synerr PROTO((char [])); /* report a syntax error */
-extern void format_warn PROTO((char [], char[]));
-extern void warn PROTO((char [])); /* report a warning */
-extern void yyerror PROTO((char [])); /* report a parse error */
-extern int yyparse PROTO((void)); /* the YACC parser */
+extern void format_synerr PROTO ((const char *, const char *));
+extern void synerr PROTO ((const char *)); /* report a syntax error */
+extern void format_warn PROTO ((const char *, const char *));
+extern void warn PROTO ((const char *)); /* report a warning */
+extern void yyerror PROTO ((const char *)); /* report a parse error */
+extern int yyparse PROTO ((void)); /* the YACC parser */
/* from file scan.l */
/* The Flex-generated scanner for flex. */
-extern int flexscan PROTO((void));
+extern int flexscan PROTO ((void));
/* Open the given file (if NULL, stdin) for scanning. */
-extern void set_input_file PROTO((char*));
+extern void set_input_file PROTO ((char *));
/* Wrapup a file in the lexical analyzer. */
-extern int yywrap PROTO((void));
+extern int yywrap PROTO ((void));
/* from file sym.c */
-/* Add symbol and definitions to symbol table. */
-extern int addsym PROTO((register char[], char*, int, hash_table, int));
-
/* Save the text of a character class. */
-extern void cclinstal PROTO ((Char [], int));
+extern void cclinstal PROTO ((Char[], int));
/* Lookup the number associated with character class. */
-extern int ccllookup PROTO((Char []));
-
-/* Find symbol in symbol table. */
-extern struct hash_entry *findsym PROTO((register char[], hash_table, int ));
+extern int ccllookup PROTO ((Char[]));
-extern void ndinstal PROTO((char[], Char[])); /* install a name definition */
-extern Char *ndlookup PROTO((char[])); /* lookup a name definition */
+extern void ndinstal PROTO ((const char *, Char[])); /* install a name definition */
+extern Char *ndlookup PROTO ((const char *)); /* lookup a name definition */
/* Increase maximum number of SC's. */
-extern void scextend PROTO((void));
-extern void scinstal PROTO((char[], int)); /* make a start condition */
+extern void scextend PROTO ((void));
+extern void scinstal PROTO ((const char *, int)); /* make a start condition */
/* Lookup the number associated with a start condition. */
-extern int sclookup PROTO((char[]));
+extern int sclookup PROTO ((const char *));
/* from file tblcmp.c */
/* Build table entries for dfa state. */
-extern void bldtbl PROTO((int[], int, int, int, int));
+extern void bldtbl PROTO ((int[], int, int, int, int));
+
+extern void cmptmps PROTO ((void)); /* compress template table entries */
+extern void expand_nxt_chk PROTO ((void)); /* increase nxt/chk arrays */
-extern void cmptmps PROTO((void)); /* compress template table entries */
-extern void expand_nxt_chk PROTO((void)); /* increase nxt/chk arrays */
/* Finds a space in the table for a state to be placed. */
-extern int find_table_space PROTO((int*, int));
-extern void inittbl PROTO((void)); /* initialize transition tables */
+extern int find_table_space PROTO ((int *, int));
+extern void inittbl PROTO ((void)); /* initialize transition tables */
+
/* Make the default, "jam" table entries. */
-extern void mkdeftbl PROTO((void));
+extern void mkdeftbl PROTO ((void));
/* Create table entries for a state (or state fragment) which has
* only one out-transition.
*/
-extern void mk1tbl PROTO((int, int, int, int));
+extern void mk1tbl PROTO ((int, int, int, int));
/* Place a state into full speed transition table. */
-extern void place_state PROTO((int*, int, int));
+extern void place_state PROTO ((int *, int, int));
/* Save states with only one out-transition to be processed later. */
-extern void stack1 PROTO((int, int, int, int));
+extern void stack1 PROTO ((int, int, int, int));
/* from file yylex.c */
-extern int yylex PROTO((void));
+extern int yylex PROTO ((void));
+
+/* A growable array. See buf.c. */
+struct Buf {
+ void *elts; /* elements. */
+ int nelts; /* number of elements. */
+ size_t elt_size; /* in bytes. */
+ int nmax; /* max capacity of elements. */
+};
+
+extern void buf_init PROTO ((struct Buf * buf, size_t elem_size));
+extern void buf_destroy PROTO ((struct Buf * buf));
+extern struct Buf *buf_append
+PROTO ((struct Buf * buf, const void *ptr, int n_elem));
+extern struct Buf *buf_concat PROTO((struct Buf* dest, const struct Buf* src));
+extern struct Buf *buf_strappend PROTO ((struct Buf *, const char *str));
+extern struct Buf *buf_strnappend
+PROTO ((struct Buf *, const char *str, int nchars));
+extern struct Buf *buf_strdefine
+PROTO ((struct Buf * buf, const char *str, const char *def));
+extern struct Buf *buf_prints PROTO((struct Buf *buf, const char *fmt, const char* s));
+extern struct Buf *buf_m4_define PROTO((struct Buf *buf, const char* def, const char* val));
+extern struct Buf *buf_m4_undefine PROTO((struct Buf *buf, const char* def));
+extern struct Buf *buf_print_strings PROTO((struct Buf * buf, FILE* out));
+extern struct Buf *buf_linedir PROTO((struct Buf *buf, const char* filename, int lineno));
+
+extern struct Buf userdef_buf; /* a string buffer for #define's generated by user-options on cmd line. */
+extern struct Buf defs_buf; /* a char* buffer to save #define'd some symbols generated by flex. */
+extern struct Buf yydmap_buf; /* a string buffer to hold yydmap elements */
+extern struct Buf m4defs_buf; /* Holds m4 definitions. */
+extern struct Buf top_buf; /* contains %top code. String buffer. */
+
+/* For blocking out code from the header file. */
+#define OUT_BEGIN_CODE() outn("m4_ifdef( [[M4_YY_IN_HEADER]],,[[")
+#define OUT_END_CODE() outn("]])")
+
+/* For setjmp/longjmp (instead of calling exit(2)). Linkage in main.c */
+extern jmp_buf flex_main_jmp_buf;
+
+#define FLEX_EXIT(status) longjmp(flex_main_jmp_buf,(status)+1)
+
+/* Removes all \n and \r chars from tail of str. returns str. */
+extern char *chomp (char *str);
+
+/* ctype functions forced to return boolean */
+#define b_isalnum(c) (isalnum(c)?true:false)
+#define b_isalpha(c) (isalpha(c)?true:false)
+#define b_isascii(c) (isascii(c)?true:false)
+#define b_isblank(c) (isblank(c)?true:false)
+#define b_iscntrl(c) (iscntrl(c)?true:false)
+#define b_isdigit(c) (isdigit(c)?true:false)
+#define b_isgraph(c) (isgraph(c)?true:false)
+#define b_islower(c) (islower(c)?true:false)
+#define b_isprint(c) (isprint(c)?true:false)
+#define b_ispunct(c) (ispunct(c)?true:false)
+#define b_isspace(c) (isspace(c)?true:false)
+#define b_isupper(c) (isupper(c)?true:false)
+#define b_isxdigit(c) (isxdigit(c)?true:false)
+
+/* return true if char is uppercase or lowercase. */
+bool has_case(int c);
+
+/* Change case of character if possible. */
+int reverse_case(int c);
+
+/* return false if [c1-c2] is ambiguous for a caseless scanner. */
+bool range_covers_case (int c1, int c2);
+
+/*
+ * From "filter.c"
+ */
+
+/** A single stdio filter to execute.
+ * The filter may be external, such as "sed", or it
+ * may be internal, as a function call.
+ */
+struct filter {
+ int (*filter_func)(struct filter*); /**< internal filter function */
+ void * extra; /**< extra data passed to filter_func */
+ int argc; /**< arg count */
+ const char ** argv; /**< arg vector, \0-terminated */
+ struct filter * next; /**< next filter or NULL */
+};
+
+/* output filter chain */
+extern struct filter * output_chain;
+extern struct filter *filter_create_ext PROTO((struct filter * chain, const char *cmd, ...));
+struct filter *filter_create_int PROTO((struct filter *chain,
+ int (*filter_func) (struct filter *),
+ void *extra));
+extern bool filter_apply_chain PROTO((struct filter * chain));
+extern int filter_truncate (struct filter * chain, int max_len);
+extern int filter_tee_header PROTO((struct filter *chain));
+extern int filter_fix_linedirs PROTO((struct filter *chain));
+
+
+/*
+ * From "regex.c"
+ */
+
+extern regex_t regex_linedir, regex_blank_line;
+bool flex_init_regex(void);
+void flex_regcomp(regex_t *preg, const char *regex, int cflags);
+char *regmatch_dup (regmatch_t * m, const char *src);
+char *regmatch_cpy (regmatch_t * m, char *dest, const char *src);
+int regmatch_len (regmatch_t * m);
+int regmatch_strtol (regmatch_t * m, const char *src, char **endptr, int base);
+bool regmatch_empty (regmatch_t * m);
+
+/* From "scanflags.h" */
+typedef unsigned int scanflags_t;
+extern scanflags_t* _sf_stk;
+extern size_t _sf_top_ix, _sf_max; /**< stack of scanner flags. */
+#define _SF_CASE_INS 0x0001
+#define _SF_DOT_ALL 0x0002
+#define _SF_SKIP_WS 0x0004
+#define sf_top() (_sf_stk[_sf_top_ix])
+#define sf_case_ins() (sf_top() & _SF_CASE_INS)
+#define sf_dot_all() (sf_top() & _SF_DOT_ALL)
+#define sf_skip_ws() (sf_top() & _SF_SKIP_WS)
+#define sf_set_case_ins(X) ((X) ? (sf_top() |= _SF_CASE_INS) : (sf_top() &= ~_SF_CASE_INS))
+#define sf_set_dot_all(X) ((X) ? (sf_top() |= _SF_DOT_ALL) : (sf_top() &= ~_SF_DOT_ALL))
+#define sf_set_skip_ws(X) ((X) ? (sf_top() |= _SF_SKIP_WS) : (sf_top() &= ~_SF_SKIP_WS))
+extern void sf_init(void);
+extern void sf_push(void);
+extern void sf_pop(void);
+
+
+#endif /* not defined FLEXDEF_H */
diff --git a/usr.bin/lex/flexint.h b/usr.bin/lex/flexint.h
new file mode 100644
index 00000000000..aa761347506
--- /dev/null
+++ b/usr.bin/lex/flexint.h
@@ -0,0 +1,65 @@
+/* $OpenBSD: flexint.h,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
diff --git a/usr.bin/lex/gen.c b/usr.bin/lex/gen.c
index 3f1f86dfdd4..e7af1658439 100644
--- a/usr.bin/lex/gen.c
+++ b/usr.bin/lex/gen.c
@@ -1,52 +1,51 @@
-/* $OpenBSD: gen.c,v 1.11 2004/02/03 21:20:17 espie Exp $ */
+/* $OpenBSD: gen.c,v 1.12 2015/11/19 19:43:40 tedu Exp $ */
/* gen - actual generation (writing) of flex scanners */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/gen.c,v 1.11 2004/02/03 21:20:17 espie Exp $ */
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include "flexdef.h"
+#include "tables.h"
/* declare functions that have forward references */
-void gen_next_state PROTO((int));
-void genecs PROTO((void));
-void indent_put2s PROTO((char [], char []));
-void indent_puts PROTO((char []));
+void gen_next_state PROTO ((int));
+void genecs PROTO ((void));
+void indent_put2s PROTO ((const char *, const char *));
+void indent_puts PROTO ((const char *));
-static int indent_level = 0; /* each level is 8 spaces */
+static int indent_level = 0; /* each level is 8 spaces */
#define indent_up() (++indent_level)
#define indent_down() (--indent_level)
@@ -57,94 +56,292 @@ static int indent_level = 0; /* each level is 8 spaces */
* to this is that the fast table representation generally uses the
* 0 elements of its arrays, too.)
*/
-static char C_int_decl[] = "static yyconst int %s[%d] =\n { 0,\n";
-static char C_short_decl[] = "static yyconst short int %s[%d] =\n { 0,\n";
-static char C_long_decl[] = "static yyconst long int %s[%d] =\n { 0,\n";
-static char C_state_decl[] =
- "static yyconst yy_state_type %s[%d] =\n { 0,\n";
+static const char *get_int16_decl (void)
+{
+ return (gentables)
+ ? "static yyconst flex_int16_t %s[%d] =\n { 0,\n"
+ : "static yyconst flex_int16_t * %s = 0;\n";
+}
+
+
+static const char *get_int32_decl (void)
+{
+ return (gentables)
+ ? "static yyconst flex_int32_t %s[%d] =\n { 0,\n"
+ : "static yyconst flex_int32_t * %s = 0;\n";
+}
+
+static const char *get_state_decl (void)
+{
+ return (gentables)
+ ? "static yyconst yy_state_type %s[%d] =\n { 0,\n"
+ : "static yyconst yy_state_type * %s = 0;\n";
+}
/* Indent to the current level. */
-void do_indent()
- {
+void do_indent ()
+{
int i = indent_level * 8;
- while ( i >= 8 )
- {
- outc( '\t' );
+ while (i >= 8) {
+ outc ('\t');
i -= 8;
- }
+ }
- while ( i > 0 )
- {
- outc( ' ' );
+ while (i > 0) {
+ outc (' ');
--i;
+ }
+}
+
+
+/** Make the table for possible eol matches.
+ * @return the newly allocated rule_can_match_eol table
+ */
+static struct yytbl_data *mkeoltbl (void)
+{
+ int i;
+ flex_int8_t *tdata = 0;
+ struct yytbl_data *tbl;
+
+ tbl = (struct yytbl_data *) calloc (1, sizeof (struct yytbl_data));
+ yytbl_data_init (tbl, YYTD_ID_RULE_CAN_MATCH_EOL);
+ tbl->td_flags = YYTD_DATA8;
+ tbl->td_lolen = num_rules + 1;
+ tbl->td_data = tdata =
+ (flex_int8_t *) calloc (tbl->td_lolen, sizeof (flex_int8_t));
+
+ for (i = 1; i <= num_rules; i++)
+ tdata[i] = rule_has_nl[i] ? 1 : 0;
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_RULE_CAN_MATCH_EOL, (void**)&yy_rule_can_match_eol, sizeof(%s)},\n",
+ "flex_int32_t");
+ return tbl;
+}
+
+/* Generate the table for possible eol matches. */
+static void geneoltbl ()
+{
+ int i;
+
+ outn ("m4_ifdef( [[M4_YY_USE_LINENO]],[[");
+ outn ("/* Table of booleans, true if rule could match eol. */");
+ out_str_dec (get_int32_decl (), "yy_rule_can_match_eol",
+ num_rules + 1);
+
+ if (gentables) {
+ for (i = 1; i <= num_rules; i++) {
+ out_dec ("%d, ", rule_has_nl[i] ? 1 : 0);
+ /* format nicely, 20 numbers per line. */
+ if ((i % 20) == 19)
+ out ("\n ");
}
+ out (" };\n");
}
+ outn ("]])");
+}
/* Generate the code to keep backing-up information. */
-void gen_backing_up()
- {
- if ( reject || num_backing_up == 0 )
+void gen_backing_up ()
+{
+ if (reject || num_backing_up == 0)
return;
- if ( fullspd )
- indent_puts( "if ( yy_current_state[-1].yy_nxt )" );
+ if (fullspd)
+ indent_puts ("if ( yy_current_state[-1].yy_nxt )");
else
- indent_puts( "if ( yy_accept[yy_current_state] )" );
+ indent_puts ("if ( yy_accept[yy_current_state] )");
- indent_up();
- indent_puts( "{" );
- indent_puts( "yy_last_accepting_state = yy_current_state;" );
- indent_puts( "yy_last_accepting_cpos = yy_cp;" );
- indent_puts( "}" );
- indent_down();
- }
+ indent_up ();
+ indent_puts ("{");
+ indent_puts ("YY_G(yy_last_accepting_state) = yy_current_state;");
+ indent_puts ("YY_G(yy_last_accepting_cpos) = yy_cp;");
+ indent_puts ("}");
+ indent_down ();
+}
/* Generate the code to perform the backing up. */
-void gen_bu_action()
- {
- if ( reject || num_backing_up == 0 )
+void gen_bu_action ()
+{
+ if (reject || num_backing_up == 0)
return;
- set_indent( 3 );
+ set_indent (3);
- indent_puts( "case 0: /* must back up */" );
- indent_puts( "/* undo the effects of YY_DO_BEFORE_ACTION */" );
- indent_puts( "*yy_cp = yy_hold_char;" );
+ indent_puts ("case 0: /* must back up */");
+ indent_puts ("/* undo the effects of YY_DO_BEFORE_ACTION */");
+ indent_puts ("*yy_cp = YY_G(yy_hold_char);");
- if ( fullspd || fulltbl )
- indent_puts( "yy_cp = yy_last_accepting_cpos + 1;" );
+ if (fullspd || fulltbl)
+ indent_puts ("yy_cp = YY_G(yy_last_accepting_cpos) + 1;");
else
/* Backing-up info for compressed tables is taken \after/
* yy_cp has been incremented for the next state.
*/
- indent_puts( "yy_cp = yy_last_accepting_cpos;" );
+ indent_puts ("yy_cp = YY_G(yy_last_accepting_cpos);");
- indent_puts( "yy_current_state = yy_last_accepting_state;" );
- indent_puts( "goto yy_find_action;" );
- outc( '\n' );
+ indent_puts ("yy_current_state = YY_G(yy_last_accepting_state);");
+ indent_puts ("goto yy_find_action;");
+ outc ('\n');
+
+ set_indent (0);
+}
+
+/** mkctbl - make full speed compressed transition table
+ * This is an array of structs; each struct a pair of integers.
+ * You should call mkssltbl() immediately after this.
+ * Then, I think, mkecstbl(). Arrrg.
+ * @return the newly allocated trans table
+ */
+
+static struct yytbl_data *mkctbl (void)
+{
+ int i;
+ struct yytbl_data *tbl = 0;
+ flex_int32_t *tdata = 0, curr = 0;
+ int end_of_buffer_action = num_rules + 1;
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_TRANSITION, (void**)&yy_transition, sizeof(%s)},\n",
+ ((tblend + numecs + 1) >= INT16_MAX
+ || long_align) ? "flex_int32_t" : "flex_int16_t");
+
+ tbl = (struct yytbl_data *) calloc (1, sizeof (struct yytbl_data));
+ yytbl_data_init (tbl, YYTD_ID_TRANSITION);
+ tbl->td_flags = YYTD_DATA32 | YYTD_STRUCT;
+ tbl->td_hilen = 0;
+ tbl->td_lolen = tblend + numecs + 1; /* number of structs */
+
+ tbl->td_data = tdata =
+ (flex_int32_t *) calloc (tbl->td_lolen * 2, sizeof (flex_int32_t));
+
+ /* We want the transition to be represented as the offset to the
+ * next state, not the actual state number, which is what it currently
+ * is. The offset is base[nxt[i]] - (base of current state)]. That's
+ * just the difference between the starting points of the two involved
+ * states (to - from).
+ *
+ * First, though, we need to find some way to put in our end-of-buffer
+ * flags and states. We do this by making a state with absolutely no
+ * transitions. We put it at the end of the table.
+ */
+
+ /* We need to have room in nxt/chk for two more slots: One for the
+ * action and one for the end-of-buffer transition. We now *assume*
+ * that we're guaranteed the only character we'll try to index this
+ * nxt/chk pair with is EOB, i.e., 0, so we don't have to make sure
+ * there's room for jam entries for other characters.
+ */
- set_indent( 0 );
+ while (tblend + 2 >= current_max_xpairs)
+ expand_nxt_chk ();
+
+ while (lastdfa + 1 >= current_max_dfas)
+ increase_max_dfas ();
+
+ base[lastdfa + 1] = tblend + 2;
+ nxt[tblend + 1] = end_of_buffer_action;
+ chk[tblend + 1] = numecs + 1;
+ chk[tblend + 2] = 1; /* anything but EOB */
+
+ /* So that "make test" won't show arb. differences. */
+ nxt[tblend + 2] = 0;
+
+ /* Make sure every state has an end-of-buffer transition and an
+ * action #.
+ */
+ for (i = 0; i <= lastdfa; ++i) {
+ int anum = dfaacc[i].dfaacc_state;
+ int offset = base[i];
+
+ chk[offset] = EOB_POSITION;
+ chk[offset - 1] = ACTION_POSITION;
+ nxt[offset - 1] = anum; /* action number */
+ }
+
+ for (i = 0; i <= tblend; ++i) {
+ if (chk[i] == EOB_POSITION) {
+ tdata[curr++] = 0;
+ tdata[curr++] = base[lastdfa + 1] - i;
+ }
+
+ else if (chk[i] == ACTION_POSITION) {
+ tdata[curr++] = 0;
+ tdata[curr++] = nxt[i];
+ }
+
+ else if (chk[i] > numecs || chk[i] == 0) {
+ tdata[curr++] = 0;
+ tdata[curr++] = 0;
+ }
+ else { /* verify, transition */
+
+ tdata[curr++] = chk[i];
+ tdata[curr++] = base[nxt[i]] - (i - chk[i]);
+ }
}
+ /* Here's the final, end-of-buffer state. */
+ tdata[curr++] = chk[tblend + 1];
+ tdata[curr++] = nxt[tblend + 1];
+
+ tdata[curr++] = chk[tblend + 2];
+ tdata[curr++] = nxt[tblend + 2];
+
+ return tbl;
+}
+
+
+/** Make start_state_list table.
+ * @return the newly allocated start_state_list table
+ */
+static struct yytbl_data *mkssltbl (void)
+{
+ struct yytbl_data *tbl = 0;
+ flex_int32_t *tdata = 0;
+ flex_int32_t i;
+
+ tbl = (struct yytbl_data *) calloc (1, sizeof (struct yytbl_data));
+ yytbl_data_init (tbl, YYTD_ID_START_STATE_LIST);
+ tbl->td_flags = YYTD_DATA32 | YYTD_PTRANS;
+ tbl->td_hilen = 0;
+ tbl->td_lolen = lastsc * 2 + 1;
+
+ tbl->td_data = tdata =
+ (flex_int32_t *) calloc (tbl->td_lolen, sizeof (flex_int32_t));
+
+ for (i = 0; i <= lastsc * 2; ++i)
+ tdata[i] = base[i];
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_START_STATE_LIST, (void**)&yy_start_state_list, sizeof(%s)},\n",
+ "struct yy_trans_info*");
+
+ return tbl;
+}
+
+
+
/* genctbl - generates full speed compressed transition table */
-void genctbl()
- {
+void genctbl ()
+{
int i;
- int end_of_buffer_action = num_rules + 1;
+ int end_of_buffer_action = num_rules + 1;
/* Table of verify for transition and offset to next state. */
- out_dec( "static yyconst struct yy_trans_info yy_transition[%d] =\n",
- tblend + numecs + 1 );
- outn( " {" );
+ if (gentables)
+ out_dec ("static yyconst struct yy_trans_info yy_transition[%d] =\n {\n", tblend + numecs + 1);
+ else
+ outn ("static yyconst struct yy_trans_info *yy_transition = 0;");
/* We want the transition to be represented as the offset to the
* next state, not the actual state number, which is what it currently
@@ -164,16 +361,16 @@ void genctbl()
* there's room for jam entries for other characters.
*/
- while ( tblend + 2 >= current_max_xpairs )
- expand_nxt_chk();
+ while (tblend + 2 >= current_max_xpairs)
+ expand_nxt_chk ();
- while ( lastdfa + 1 >= current_max_dfas )
- increase_max_dfas();
+ while (lastdfa + 1 >= current_max_dfas)
+ increase_max_dfas ();
base[lastdfa + 1] = tblend + 2;
nxt[tblend + 1] = end_of_buffer_action;
chk[tblend + 1] = numecs + 1;
- chk[tblend + 2] = 1; /* anything but EOB */
+ chk[tblend + 2] = 1; /* anything but EOB */
/* So that "make test" won't show arb. differences. */
nxt[tblend + 2] = 0;
@@ -181,291 +378,353 @@ void genctbl()
/* Make sure every state has an end-of-buffer transition and an
* action #.
*/
- for ( i = 0; i <= lastdfa; ++i )
- {
- int anum = dfaacc[i].dfaacc_state;
- int offset = base[i];
+ for (i = 0; i <= lastdfa; ++i) {
+ int anum = dfaacc[i].dfaacc_state;
+ int offset = base[i];
chk[offset] = EOB_POSITION;
chk[offset - 1] = ACTION_POSITION;
nxt[offset - 1] = anum; /* action number */
- }
+ }
- for ( i = 0; i <= tblend; ++i )
- {
- if ( chk[i] == EOB_POSITION )
- transition_struct_out( 0, base[lastdfa + 1] - i );
+ for (i = 0; i <= tblend; ++i) {
+ if (chk[i] == EOB_POSITION)
+ transition_struct_out (0, base[lastdfa + 1] - i);
- else if ( chk[i] == ACTION_POSITION )
- transition_struct_out( 0, nxt[i] );
+ else if (chk[i] == ACTION_POSITION)
+ transition_struct_out (0, nxt[i]);
- else if ( chk[i] > numecs || chk[i] == 0 )
- transition_struct_out( 0, 0 ); /* unused slot */
+ else if (chk[i] > numecs || chk[i] == 0)
+ transition_struct_out (0, 0); /* unused slot */
- else /* verify, transition */
- transition_struct_out( chk[i],
- base[nxt[i]] - (i - chk[i]) );
- }
+ else /* verify, transition */
+ transition_struct_out (chk[i],
+ base[nxt[i]] - (i -
+ chk[i]));
+ }
/* Here's the final, end-of-buffer state. */
- transition_struct_out( chk[tblend + 1], nxt[tblend + 1] );
- transition_struct_out( chk[tblend + 2], nxt[tblend + 2] );
+ transition_struct_out (chk[tblend + 1], nxt[tblend + 1]);
+ transition_struct_out (chk[tblend + 2], nxt[tblend + 2]);
- outn( " };\n" );
+ if (gentables)
+ outn (" };\n");
/* Table of pointers to start states. */
- out_dec(
- "static yyconst struct yy_trans_info *yy_start_state_list[%d] =\n",
- lastsc * 2 + 1 );
- outn( " {" ); /* } so vi doesn't get confused */
+ if (gentables)
+ out_dec ("static yyconst struct yy_trans_info *yy_start_state_list[%d] =\n", lastsc * 2 + 1);
+ else
+ outn ("static yyconst struct yy_trans_info **yy_start_state_list =0;");
+
+ if (gentables) {
+ outn (" {");
+
+ for (i = 0; i <= lastsc * 2; ++i)
+ out_dec (" &yy_transition[%d],\n", base[i]);
+
+ dataend ();
+ }
+
+ if (useecs)
+ genecs ();
+}
+
+
+/* mkecstbl - Make equivalence-class tables. */
- for ( i = 0; i <= lastsc * 2; ++i )
- out_dec( " &yy_transition[%d],\n", base[i] );
+struct yytbl_data *mkecstbl (void)
+{
+ int i;
+ struct yytbl_data *tbl = 0;
+ flex_int32_t *tdata = 0;
+
+ tbl = (struct yytbl_data *) calloc (1, sizeof (struct yytbl_data));
+ yytbl_data_init (tbl, YYTD_ID_EC);
+ tbl->td_flags |= YYTD_DATA32;
+ tbl->td_hilen = 0;
+ tbl->td_lolen = csize;
- dataend();
+ tbl->td_data = tdata =
+ (flex_int32_t *) calloc (tbl->td_lolen, sizeof (flex_int32_t));
- if ( useecs )
- genecs();
+ for (i = 1; i < csize; ++i) {
+ ecgroup[i] = ABS (ecgroup[i]);
+ tdata[i] = ecgroup[i];
}
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_EC, (void**)&yy_ec, sizeof(%s)},\n",
+ "flex_int32_t");
+
+ return tbl;
+}
/* Generate equivalence-class tables. */
-void genecs()
- {
+void genecs ()
+{
int i, j;
- int numrows;
+ int numrows;
- out_str_dec( C_int_decl, "yy_ec", csize );
+ out_str_dec (get_int32_decl (), "yy_ec", csize);
- for ( i = 1; i < csize; ++i )
- {
- if ( caseins && (i >= 'A') && (i <= 'Z') )
- ecgroup[i] = ecgroup[clower( i )];
-
- ecgroup[i] = ABS( ecgroup[i] );
- mkdata( ecgroup[i] );
- }
+ for (i = 1; i < csize; ++i) {
+ ecgroup[i] = ABS (ecgroup[i]);
+ mkdata (ecgroup[i]);
+ }
- dataend();
+ dataend ();
- if ( trace )
- {
- fputs( _( "\n\nEquivalence Classes:\n\n" ), stderr );
+ if (trace) {
+ fputs (_("\n\nEquivalence Classes:\n\n"), stderr);
numrows = csize / 8;
- for ( j = 0; j < numrows; ++j )
- {
- for ( i = j; i < csize; i = i + numrows )
- {
- fprintf( stderr, "%4s = %-2d",
- readable_form( i ), ecgroup[i] );
+ for (j = 0; j < numrows; ++j) {
+ for (i = j; i < csize; i = i + numrows) {
+ fprintf (stderr, "%4s = %-2d",
+ readable_form (i), ecgroup[i]);
- putc( ' ', stderr );
- }
-
- putc( '\n', stderr );
+ putc (' ', stderr);
}
+
+ putc ('\n', stderr);
}
}
+}
/* Generate the code to find the action number. */
-void gen_find_action()
- {
- if ( fullspd )
- indent_puts( "yy_act = yy_current_state[-1].yy_nxt;" );
-
- else if ( fulltbl )
- indent_puts( "yy_act = yy_accept[yy_current_state];" );
-
- else if ( reject )
- {
- indent_puts( "yy_current_state = *--yy_state_ptr;" );
- indent_puts( "yy_lp = yy_accept[yy_current_state];" );
-
- outn(
- "find_rule: /* we branch to this label when backing up */" );
-
- indent_puts(
- "for ( ; ; ) /* until we find what rule we matched */" );
-
- indent_up();
-
- indent_puts( "{" );
-
- indent_puts(
- "if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )" );
- indent_up();
- indent_puts( "{" );
- indent_puts( "yy_act = yy_acclist[yy_lp];" );
-
- if ( variable_trailing_context_rules )
- {
- indent_puts( "if ( yy_act & YY_TRAILING_HEAD_MASK ||" );
- indent_puts( " yy_looking_for_trail_begin )" );
- indent_up();
- indent_puts( "{" );
-
- indent_puts(
- "if ( yy_act == yy_looking_for_trail_begin )" );
- indent_up();
- indent_puts( "{" );
- indent_puts( "yy_looking_for_trail_begin = 0;" );
- indent_puts( "yy_act &= ~YY_TRAILING_HEAD_MASK;" );
- indent_puts( "break;" );
- indent_puts( "}" );
- indent_down();
-
- indent_puts( "}" );
- indent_down();
-
- indent_puts( "else if ( yy_act & YY_TRAILING_MASK )" );
- indent_up();
- indent_puts( "{" );
- indent_puts(
- "yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;" );
- indent_puts(
- "yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;" );
-
- if ( real_reject )
- {
+void gen_find_action ()
+{
+ if (fullspd)
+ indent_puts ("yy_act = yy_current_state[-1].yy_nxt;");
+
+ else if (fulltbl)
+ indent_puts ("yy_act = yy_accept[yy_current_state];");
+
+ else if (reject) {
+ indent_puts ("yy_current_state = *--YY_G(yy_state_ptr);");
+ indent_puts ("YY_G(yy_lp) = yy_accept[yy_current_state];");
+
+ outn ("find_rule: /* we branch to this label when backing up */");
+
+ indent_puts
+ ("for ( ; ; ) /* until we find what rule we matched */");
+
+ indent_up ();
+
+ indent_puts ("{");
+
+ indent_puts
+ ("if ( YY_G(yy_lp) && YY_G(yy_lp) < yy_accept[yy_current_state + 1] )");
+ indent_up ();
+ indent_puts ("{");
+ indent_puts ("yy_act = yy_acclist[YY_G(yy_lp)];");
+
+ if (variable_trailing_context_rules) {
+ indent_puts
+ ("if ( yy_act & YY_TRAILING_HEAD_MASK ||");
+ indent_puts (" YY_G(yy_looking_for_trail_begin) )");
+ indent_up ();
+ indent_puts ("{");
+
+ indent_puts
+ ("if ( yy_act == YY_G(yy_looking_for_trail_begin) )");
+ indent_up ();
+ indent_puts ("{");
+ indent_puts ("YY_G(yy_looking_for_trail_begin) = 0;");
+ indent_puts ("yy_act &= ~YY_TRAILING_HEAD_MASK;");
+ indent_puts ("break;");
+ indent_puts ("}");
+ indent_down ();
+
+ indent_puts ("}");
+ indent_down ();
+
+ indent_puts
+ ("else if ( yy_act & YY_TRAILING_MASK )");
+ indent_up ();
+ indent_puts ("{");
+ indent_puts
+ ("YY_G(yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;");
+ indent_puts
+ ("YY_G(yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;");
+
+ if (real_reject) {
/* Remember matched text in case we back up
* due to REJECT.
*/
- indent_puts( "yy_full_match = yy_cp;" );
- indent_puts( "yy_full_state = yy_state_ptr;" );
- indent_puts( "yy_full_lp = yy_lp;" );
- }
-
- indent_puts( "}" );
- indent_down();
-
- indent_puts( "else" );
- indent_up();
- indent_puts( "{" );
- indent_puts( "yy_full_match = yy_cp;" );
- indent_puts( "yy_full_state = yy_state_ptr;" );
- indent_puts( "yy_full_lp = yy_lp;" );
- indent_puts( "break;" );
- indent_puts( "}" );
- indent_down();
-
- indent_puts( "++yy_lp;" );
- indent_puts( "goto find_rule;" );
+ indent_puts
+ ("YY_G(yy_full_match) = yy_cp;");
+ indent_puts
+ ("YY_G(yy_full_state) = YY_G(yy_state_ptr);");
+ indent_puts ("YY_G(yy_full_lp) = YY_G(yy_lp);");
}
- else
- {
+ indent_puts ("}");
+ indent_down ();
+
+ indent_puts ("else");
+ indent_up ();
+ indent_puts ("{");
+ indent_puts ("YY_G(yy_full_match) = yy_cp;");
+ indent_puts
+ ("YY_G(yy_full_state) = YY_G(yy_state_ptr);");
+ indent_puts ("YY_G(yy_full_lp) = YY_G(yy_lp);");
+ indent_puts ("break;");
+ indent_puts ("}");
+ indent_down ();
+
+ indent_puts ("++YY_G(yy_lp);");
+ indent_puts ("goto find_rule;");
+ }
+
+ else {
/* Remember matched text in case we back up due to
* trailing context plus REJECT.
*/
- indent_up();
- indent_puts( "{" );
- indent_puts( "yy_full_match = yy_cp;" );
- indent_puts( "break;" );
- indent_puts( "}" );
- indent_down();
- }
+ indent_up ();
+ indent_puts ("{");
+ indent_puts ("YY_G(yy_full_match) = yy_cp;");
+ indent_puts ("break;");
+ indent_puts ("}");
+ indent_down ();
+ }
- indent_puts( "}" );
- indent_down();
+ indent_puts ("}");
+ indent_down ();
- indent_puts( "--yy_cp;" );
+ indent_puts ("--yy_cp;");
/* We could consolidate the following two lines with those at
* the beginning, but at the cost of complaints that we're
* branching inside a loop.
*/
- indent_puts( "yy_current_state = *--yy_state_ptr;" );
- indent_puts( "yy_lp = yy_accept[yy_current_state];" );
+ indent_puts ("yy_current_state = *--YY_G(yy_state_ptr);");
+ indent_puts ("YY_G(yy_lp) = yy_accept[yy_current_state];");
- indent_puts( "}" );
+ indent_puts ("}");
- indent_down();
- }
+ indent_down ();
+ }
- else
- { /* compressed */
- indent_puts( "yy_act = yy_accept[yy_current_state];" );
+ else { /* compressed */
+ indent_puts ("yy_act = yy_accept[yy_current_state];");
- if ( interactive && ! reject )
- {
+ if (interactive && !reject) {
/* Do the guaranteed-needed backing up to figure out
* the match.
*/
- indent_puts( "if ( yy_act == 0 )" );
- indent_up();
- indent_puts( "{ /* have to back up */" );
- indent_puts( "yy_cp = yy_last_accepting_cpos;" );
- indent_puts(
- "yy_current_state = yy_last_accepting_state;" );
- indent_puts( "yy_act = yy_accept[yy_current_state];" );
- indent_puts( "}" );
- indent_down();
- }
+ indent_puts ("if ( yy_act == 0 )");
+ indent_up ();
+ indent_puts ("{ /* have to back up */");
+ indent_puts
+ ("yy_cp = YY_G(yy_last_accepting_cpos);");
+ indent_puts
+ ("yy_current_state = YY_G(yy_last_accepting_state);");
+ indent_puts
+ ("yy_act = yy_accept[yy_current_state];");
+ indent_puts ("}");
+ indent_down ();
}
}
+}
+
+/* mkftbl - make the full table and return the struct .
+ * you should call mkecstbl() after this.
+ */
+
+struct yytbl_data *mkftbl (void)
+{
+ int i;
+ int end_of_buffer_action = num_rules + 1;
+ struct yytbl_data *tbl;
+ flex_int32_t *tdata = 0;
+
+ tbl = (struct yytbl_data *) calloc (1, sizeof (struct yytbl_data));
+ yytbl_data_init (tbl, YYTD_ID_ACCEPT);
+ tbl->td_flags |= YYTD_DATA32;
+ tbl->td_hilen = 0; /* it's a one-dimensional array */
+ tbl->td_lolen = lastdfa + 1;
+
+ tbl->td_data = tdata =
+ (flex_int32_t *) calloc (tbl->td_lolen, sizeof (flex_int32_t));
+
+ dfaacc[end_of_buffer_state].dfaacc_state = end_of_buffer_action;
+
+ for (i = 1; i <= lastdfa; ++i) {
+ int anum = dfaacc[i].dfaacc_state;
+
+ tdata[i] = anum;
+
+ if (trace && anum)
+ fprintf (stderr, _("state # %d accepts: [%d]\n"),
+ i, anum);
+ }
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_ACCEPT, (void**)&yy_accept, sizeof(%s)},\n",
+ long_align ? "flex_int32_t" : "flex_int16_t");
+ return tbl;
+}
/* genftbl - generate full transition table */
-void genftbl()
- {
+void genftbl ()
+{
int i;
- int end_of_buffer_action = num_rules + 1;
+ int end_of_buffer_action = num_rules + 1;
- out_str_dec( long_align ? C_long_decl : C_short_decl,
- "yy_accept", lastdfa + 1 );
+ out_str_dec (long_align ? get_int32_decl () : get_int16_decl (),
+ "yy_accept", lastdfa + 1);
dfaacc[end_of_buffer_state].dfaacc_state = end_of_buffer_action;
- for ( i = 1; i <= lastdfa; ++i )
- {
+ for (i = 1; i <= lastdfa; ++i) {
int anum = dfaacc[i].dfaacc_state;
- mkdata( anum );
+ mkdata (anum);
- if ( trace && anum )
- fprintf( stderr, _( "state # %d accepts: [%d]\n" ),
- i, anum );
- }
+ if (trace && anum)
+ fprintf (stderr, _("state # %d accepts: [%d]\n"),
+ i, anum);
+ }
- dataend();
+ dataend ();
- if ( useecs )
- genecs();
+ if (useecs)
+ genecs ();
/* Don't have to dump the actual full table entries - they were
* created on-the-fly.
*/
- }
+}
/* Generate the code to find the next compressed-table state. */
-void gen_next_compressed_state( char_map )
-char *char_map;
- {
- indent_put2s( "register YY_CHAR yy_c = %s;", char_map );
+void gen_next_compressed_state (char_map)
+ char *char_map;
+{
+ indent_put2s ("YY_CHAR yy_c = %s;", char_map);
/* Save the backing-up info \before/ computing the next state
* because we always compute one more state than needed - we
* always proceed until we reach a jam state
*/
- gen_backing_up();
+ gen_backing_up ();
- indent_puts(
-"while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )" );
- indent_up();
- indent_puts( "{" );
- indent_puts( "yy_current_state = (int) yy_def[yy_current_state];" );
+ indent_puts
+ ("while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )");
+ indent_up ();
+ indent_puts ("{");
+ indent_puts ("yy_current_state = (int) yy_def[yy_current_state];");
- if ( usemecs )
- {
+ if (usemecs) {
/* We've arrange it so that templates are never chained
* to one another. This means we can afford to make a
* very simple test to see if we need to convert to
@@ -473,328 +732,332 @@ char *char_map;
* about erroneously looking up the meta-equivalence
* class twice
*/
- do_indent();
+ do_indent ();
/* lastdfa + 2 is the beginning of the templates */
- out_dec( "if ( yy_current_state >= %d )\n", lastdfa + 2 );
+ out_dec ("if ( yy_current_state >= %d )\n", lastdfa + 2);
- indent_up();
- indent_puts( "yy_c = yy_meta[(unsigned int) yy_c];" );
- indent_down();
- }
+ indent_up ();
+ indent_puts ("yy_c = yy_meta[(unsigned int) yy_c];");
+ indent_down ();
+ }
- indent_puts( "}" );
- indent_down();
+ indent_puts ("}");
+ indent_down ();
- indent_puts(
-"yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];" );
- }
+ indent_puts
+ ("yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];");
+}
/* Generate the code to find the next match. */
-void gen_next_match()
- {
+void gen_next_match ()
+{
/* NOTE - changes in here should be reflected in gen_next_state() and
* gen_NUL_trans().
*/
- char *char_map = useecs ?
- "yy_ec[YY_SC_TO_UI(*yy_cp)]" :
- "YY_SC_TO_UI(*yy_cp)";
-
- char *char_map_2 = useecs ?
- "yy_ec[YY_SC_TO_UI(*++yy_cp)]" :
- "YY_SC_TO_UI(*++yy_cp)";
-
- if ( fulltbl )
- {
- indent_put2s(
- "while ( (yy_current_state = yy_nxt[yy_current_state][%s]) > 0 )",
- char_map );
-
- indent_up();
-
- if ( num_backing_up > 0 )
- {
- indent_puts( "{" ); /* } for vi */
- gen_backing_up();
- outc( '\n' );
- }
+ char *char_map = useecs ?
+ "yy_ec[YY_SC_TO_UI(*yy_cp)] " : "YY_SC_TO_UI(*yy_cp)";
- indent_puts( "++yy_cp;" );
+ char *char_map_2 = useecs ?
+ "yy_ec[YY_SC_TO_UI(*++yy_cp)] " : "YY_SC_TO_UI(*++yy_cp)";
- if ( num_backing_up > 0 )
- /* { for vi */
- indent_puts( "}" );
+ if (fulltbl) {
+ if (gentables)
+ indent_put2s
+ ("while ( (yy_current_state = yy_nxt[yy_current_state][ %s ]) > 0 )",
+ char_map);
+ else
+ indent_put2s
+ ("while ( (yy_current_state = yy_nxt[yy_current_state*YY_NXT_LOLEN + %s ]) > 0 )",
+ char_map);
- indent_down();
+ indent_up ();
- outc( '\n' );
- indent_puts( "yy_current_state = -yy_current_state;" );
+ if (num_backing_up > 0) {
+ indent_puts ("{");
+ gen_backing_up ();
+ outc ('\n');
}
- else if ( fullspd )
- {
- indent_puts( "{" ); /* } for vi */
- indent_puts(
- "register yyconst struct yy_trans_info *yy_trans_info;\n" );
- indent_puts( "register YY_CHAR yy_c;\n" );
- indent_put2s( "for ( yy_c = %s;", char_map );
- indent_puts(
- " (yy_trans_info = &yy_current_state[(unsigned int) yy_c])->" );
- indent_puts( "yy_verify == yy_c;" );
- indent_put2s( " yy_c = %s )", char_map_2 );
-
- indent_up();
-
- if ( num_backing_up > 0 )
- indent_puts( "{" ); /* } for vi */
-
- indent_puts( "yy_current_state += yy_trans_info->yy_nxt;" );
-
- if ( num_backing_up > 0 )
- {
- outc( '\n' );
- gen_backing_up(); /* { for vi */
- indent_puts( "}" );
- }
+ indent_puts ("++yy_cp;");
- indent_down(); /* { for vi */
- indent_puts( "}" );
+ if (num_backing_up > 0)
+
+ indent_puts ("}");
+
+ indent_down ();
+
+ outc ('\n');
+ indent_puts ("yy_current_state = -yy_current_state;");
+ }
+
+ else if (fullspd) {
+ indent_puts ("{");
+ indent_puts
+ ("yyconst struct yy_trans_info *yy_trans_info;\n");
+ indent_puts ("YY_CHAR yy_c;\n");
+ indent_put2s ("for ( yy_c = %s;", char_map);
+ indent_puts
+ (" (yy_trans_info = &yy_current_state[(unsigned int) yy_c])->");
+ indent_puts ("yy_verify == yy_c;");
+ indent_put2s (" yy_c = %s )", char_map_2);
+
+ indent_up ();
+
+ if (num_backing_up > 0)
+ indent_puts ("{");
+
+ indent_puts ("yy_current_state += yy_trans_info->yy_nxt;");
+
+ if (num_backing_up > 0) {
+ outc ('\n');
+ gen_backing_up ();
+ indent_puts ("}");
}
- else
- { /* compressed */
- indent_puts( "do" );
+ indent_down ();
+ indent_puts ("}");
+ }
+
+ else { /* compressed */
+ indent_puts ("do");
+
+ indent_up ();
+ indent_puts ("{");
- indent_up();
- indent_puts( "{" ); /* } for vi */
+ gen_next_state (false);
- gen_next_state( false );
+ indent_puts ("++yy_cp;");
- indent_puts( "++yy_cp;" );
- /* { for vi */
- indent_puts( "}" );
- indent_down();
+ indent_puts ("}");
+ indent_down ();
- do_indent();
+ do_indent ();
- if ( interactive )
- out_dec( "while ( yy_base[yy_current_state] != %d );\n",
- jambase );
+ if (interactive)
+ out_dec ("while ( yy_base[yy_current_state] != %d );\n", jambase);
else
- out_dec( "while ( yy_current_state != %d );\n",
- jamstate );
+ out_dec ("while ( yy_current_state != %d );\n",
+ jamstate);
- if ( ! reject && ! interactive )
- {
+ if (!reject && !interactive) {
/* Do the guaranteed-needed backing up to figure out
* the match.
*/
- indent_puts( "yy_cp = yy_last_accepting_cpos;" );
- indent_puts(
- "yy_current_state = yy_last_accepting_state;" );
- }
+ indent_puts
+ ("yy_cp = YY_G(yy_last_accepting_cpos);");
+ indent_puts
+ ("yy_current_state = YY_G(yy_last_accepting_state);");
}
}
+}
/* Generate the code to find the next state. */
-void gen_next_state( worry_about_NULs )
-int worry_about_NULs;
- { /* NOTE - changes in here should be reflected in gen_next_match() */
- char char_map[256];
-
- if ( worry_about_NULs && ! nultrans )
- {
- if ( useecs )
- (void) snprintf( char_map, sizeof char_map,
- "(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : %d)",
- NUL_ec );
+void gen_next_state (worry_about_NULs)
+ int worry_about_NULs;
+{ /* NOTE - changes in here should be reflected in gen_next_match() */
+ char char_map[256];
+
+ if (worry_about_NULs && !nultrans) {
+ if (useecs)
+ snprintf (char_map, sizeof(char_map),
+ "(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : %d)",
+ NUL_ec);
else
- (void) snprintf( char_map, sizeof char_map,
- "(*yy_cp ? YY_SC_TO_UI(*yy_cp) : %d)", NUL_ec );
- }
+ snprintf (char_map, sizeof(char_map),
+ "(*yy_cp ? YY_SC_TO_UI(*yy_cp) : %d)",
+ NUL_ec);
+ }
else
- strlcpy( char_map, useecs ?
- "yy_ec[YY_SC_TO_UI(*yy_cp)]" : "YY_SC_TO_UI(*yy_cp)",
- sizeof char_map );
+ strlcpy (char_map, useecs ?
+ "yy_ec[YY_SC_TO_UI(*yy_cp)] " : "YY_SC_TO_UI(*yy_cp)",
+ sizeof char_map );
- if ( worry_about_NULs && nultrans )
- {
- if ( ! fulltbl && ! fullspd )
+ if (worry_about_NULs && nultrans) {
+ if (!fulltbl && !fullspd)
/* Compressed tables back up *before* they match. */
- gen_backing_up();
+ gen_backing_up ();
- indent_puts( "if ( *yy_cp )" );
- indent_up();
- indent_puts( "{" ); /* } for vi */
- }
+ indent_puts ("if ( *yy_cp )");
+ indent_up ();
+ indent_puts ("{");
+ }
- if ( fulltbl )
- indent_put2s(
- "yy_current_state = yy_nxt[yy_current_state][%s];",
- char_map );
+ if (fulltbl) {
+ if (gentables)
+ indent_put2s
+ ("yy_current_state = yy_nxt[yy_current_state][%s];",
+ char_map);
+ else
+ indent_put2s
+ ("yy_current_state = yy_nxt[yy_current_state*YY_NXT_LOLEN + %s];",
+ char_map);
+ }
- else if ( fullspd )
- indent_put2s(
- "yy_current_state += yy_current_state[%s].yy_nxt;",
- char_map );
+ else if (fullspd)
+ indent_put2s
+ ("yy_current_state += yy_current_state[%s].yy_nxt;",
+ char_map);
else
- gen_next_compressed_state( char_map );
-
- if ( worry_about_NULs && nultrans )
- {
- /* { for vi */
- indent_puts( "}" );
- indent_down();
- indent_puts( "else" );
- indent_up();
- indent_puts(
- "yy_current_state = yy_NUL_trans[yy_current_state];" );
- indent_down();
- }
+ gen_next_compressed_state (char_map);
- if ( fullspd || fulltbl )
- gen_backing_up();
+ if (worry_about_NULs && nultrans) {
- if ( reject )
- indent_puts( "*yy_state_ptr++ = yy_current_state;" );
+ indent_puts ("}");
+ indent_down ();
+ indent_puts ("else");
+ indent_up ();
+ indent_puts
+ ("yy_current_state = yy_NUL_trans[yy_current_state];");
+ indent_down ();
}
+ if (fullspd || fulltbl)
+ gen_backing_up ();
+
+ if (reject)
+ indent_puts ("*YY_G(yy_state_ptr)++ = yy_current_state;");
+}
+
/* Generate the code to make a NUL transition. */
-void gen_NUL_trans()
- { /* NOTE - changes in here should be reflected in gen_next_match() */
+void gen_NUL_trans ()
+{ /* NOTE - changes in here should be reflected in gen_next_match() */
/* Only generate a definition for "yy_cp" if we'll generate code
* that uses it. Otherwise lint and the like complain.
*/
- int need_backing_up = (num_backing_up > 0 && ! reject);
+ int need_backing_up = (num_backing_up > 0 && !reject);
- if ( need_backing_up && (! nultrans || fullspd || fulltbl) )
+ if (need_backing_up && (!nultrans || fullspd || fulltbl))
/* We're going to need yy_cp lying around for the call
* below to gen_backing_up().
*/
- indent_puts( "register char *yy_cp = yy_c_buf_p;" );
+ indent_puts ("char *yy_cp = YY_G(yy_c_buf_p);");
- outc( '\n' );
+ outc ('\n');
- if ( nultrans )
- {
- indent_puts(
- "yy_current_state = yy_NUL_trans[yy_current_state];" );
- indent_puts( "yy_is_jam = (yy_current_state == 0);" );
- }
+ if (nultrans) {
+ indent_puts
+ ("yy_current_state = yy_NUL_trans[yy_current_state];");
+ indent_puts ("yy_is_jam = (yy_current_state == 0);");
+ }
- else if ( fulltbl )
- {
- do_indent();
- out_dec( "yy_current_state = yy_nxt[yy_current_state][%d];\n",
- NUL_ec );
- indent_puts( "yy_is_jam = (yy_current_state <= 0);" );
- }
+ else if (fulltbl) {
+ do_indent ();
+ if (gentables)
+ out_dec ("yy_current_state = yy_nxt[yy_current_state][%d];\n", NUL_ec);
+ else
+ out_dec ("yy_current_state = yy_nxt[yy_current_state*YY_NXT_LOLEN + %d];\n", NUL_ec);
+ indent_puts ("yy_is_jam = (yy_current_state <= 0);");
+ }
- else if ( fullspd )
- {
- do_indent();
- out_dec( "register int yy_c = %d;\n", NUL_ec );
+ else if (fullspd) {
+ do_indent ();
+ out_dec ("int yy_c = %d;\n", NUL_ec);
- indent_puts(
- "register yyconst struct yy_trans_info *yy_trans_info;\n" );
- indent_puts(
- "yy_trans_info = &yy_current_state[(unsigned int) yy_c];" );
- indent_puts( "yy_current_state += yy_trans_info->yy_nxt;" );
+ indent_puts
+ ("yyconst struct yy_trans_info *yy_trans_info;\n");
+ indent_puts
+ ("yy_trans_info = &yy_current_state[(unsigned int) yy_c];");
+ indent_puts ("yy_current_state += yy_trans_info->yy_nxt;");
- indent_puts(
- "yy_is_jam = (yy_trans_info->yy_verify != yy_c);" );
- }
+ indent_puts
+ ("yy_is_jam = (yy_trans_info->yy_verify != yy_c);");
+ }
- else
- {
- char NUL_ec_str[20];
+ else {
+ char NUL_ec_str[20];
- (void) snprintf( NUL_ec_str, sizeof NUL_ec_str, "%d", NUL_ec );
- gen_next_compressed_state( NUL_ec_str );
+ snprintf (NUL_ec_str, sizeof(NUL_ec_str), "%d", NUL_ec);
+ gen_next_compressed_state (NUL_ec_str);
- do_indent();
- out_dec( "yy_is_jam = (yy_current_state == %d);\n", jamstate );
+ do_indent ();
+ out_dec ("yy_is_jam = (yy_current_state == %d);\n",
+ jamstate);
- if ( reject )
- {
+ if (reject) {
/* Only stack this state if it's a transition we
* actually make. If we stack it on a jam, then
* the state stack and yy_c_buf_p get out of sync.
*/
- indent_puts( "if ( ! yy_is_jam )" );
- indent_up();
- indent_puts( "*yy_state_ptr++ = yy_current_state;" );
- indent_down();
- }
+ indent_puts ("if ( ! yy_is_jam )");
+ indent_up ();
+ indent_puts
+ ("*YY_G(yy_state_ptr)++ = yy_current_state;");
+ indent_down ();
}
+ }
/* If we've entered an accepting state, back up; note that
* compressed tables have *already* done such backing up, so
* we needn't bother with it again.
*/
- if ( need_backing_up && (fullspd || fulltbl) )
- {
- outc( '\n' );
- indent_puts( "if ( ! yy_is_jam )" );
- indent_up();
- indent_puts( "{" );
- gen_backing_up();
- indent_puts( "}" );
- indent_down();
- }
+ if (need_backing_up && (fullspd || fulltbl)) {
+ outc ('\n');
+ indent_puts ("if ( ! yy_is_jam )");
+ indent_up ();
+ indent_puts ("{");
+ gen_backing_up ();
+ indent_puts ("}");
+ indent_down ();
}
+}
/* Generate the code to find the start state. */
-void gen_start_state()
- {
- if ( fullspd )
- {
- if ( bol_needed )
- {
- indent_puts(
- "yy_current_state = yy_start_state_list[yy_start + YY_AT_BOL()];" );
- }
- else
- indent_puts(
- "yy_current_state = yy_start_state_list[yy_start];" );
+void gen_start_state ()
+{
+ if (fullspd) {
+ if (bol_needed) {
+ indent_puts
+ ("yy_current_state = yy_start_state_list[YY_G(yy_start) + YY_AT_BOL()];");
}
+ else
+ indent_puts
+ ("yy_current_state = yy_start_state_list[YY_G(yy_start)];");
+ }
- else
- {
- indent_puts( "yy_current_state = yy_start;" );
+ else {
+ indent_puts ("yy_current_state = YY_G(yy_start);");
- if ( bol_needed )
- indent_puts( "yy_current_state += YY_AT_BOL();" );
+ if (bol_needed)
+ indent_puts ("yy_current_state += YY_AT_BOL();");
- if ( reject )
- {
+ if (reject) {
/* Set up for storing up states. */
- indent_puts( "yy_state_ptr = yy_state_buf;" );
- indent_puts( "*yy_state_ptr++ = yy_current_state;" );
- }
+ outn ("m4_ifdef( [[M4_YY_USES_REJECT]],\n[[");
+ indent_puts
+ ("YY_G(yy_state_ptr) = YY_G(yy_state_buf);");
+ indent_puts
+ ("*YY_G(yy_state_ptr)++ = yy_current_state;");
+ outn ("]])");
}
}
+}
/* gentabs - generate data statements for the transition tables */
-void gentabs()
- {
- int i, j, k, *accset, nacc, *acc_array, total_states;
- int end_of_buffer_action = num_rules + 1;
-
- acc_array = allocate_integer_array( current_max_dfas );
+void gentabs ()
+{
+ int i, j, k, *accset, nacc, *acc_array, total_states;
+ int end_of_buffer_action = num_rules + 1;
+ struct yytbl_data *yyacc_tbl = 0, *yymeta_tbl = 0, *yybase_tbl = 0,
+ *yydef_tbl = 0, *yynxt_tbl = 0, *yychk_tbl = 0, *yyacclist_tbl=0;
+ flex_int32_t *yyacc_data = 0, *yybase_data = 0, *yydef_data = 0,
+ *yynxt_data = 0, *yychk_data = 0, *yyacclist_data=0;
+ flex_int32_t yybase_curr = 0, yyacclist_curr=0,yyacc_curr=0;
+
+ acc_array = allocate_integer_array (current_max_dfas);
nummt = 0;
/* The compressed table format jams by entering the "jam state",
@@ -804,91 +1067,113 @@ void gentabs()
*/
++num_backing_up;
- if ( reject )
- {
+ if (reject) {
/* Write out accepting list and pointer list.
- *
+
* First we generate the "yy_acclist" array. In the process,
* we compute the indices that will go into the "yy_accept"
* array, and save the indices in the dfaacc array.
*/
- int EOB_accepting_list[2];
+ int EOB_accepting_list[2];
/* Set up accepting structures for the End Of Buffer state. */
EOB_accepting_list[0] = 0;
EOB_accepting_list[1] = end_of_buffer_action;
accsiz[end_of_buffer_state] = 1;
- dfaacc[end_of_buffer_state].dfaacc_set = EOB_accepting_list;
-
- out_str_dec( long_align ? C_long_decl : C_short_decl,
- "yy_acclist", MAX( numas, 1 ) + 1 );
-
- j = 1; /* index into "yy_acclist" array */
-
- for ( i = 1; i <= lastdfa; ++i )
- {
+ dfaacc[end_of_buffer_state].dfaacc_set =
+ EOB_accepting_list;
+
+ out_str_dec (long_align ? get_int32_decl () :
+ get_int16_decl (), "yy_acclist", MAX (numas,
+ 1) + 1);
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_ACCLIST, (void**)&yy_acclist, sizeof(%s)},\n",
+ long_align ? "flex_int32_t" : "flex_int16_t");
+
+ yyacclist_tbl = (struct yytbl_data*)calloc(1,sizeof(struct yytbl_data));
+ yytbl_data_init (yyacclist_tbl, YYTD_ID_ACCLIST);
+ yyacclist_tbl->td_lolen = MAX(numas,1) + 1;
+ yyacclist_tbl->td_data = yyacclist_data =
+ (flex_int32_t *) calloc (yyacclist_tbl->td_lolen, sizeof (flex_int32_t));
+ yyacclist_curr = 1;
+
+ j = 1; /* index into "yy_acclist" array */
+
+ for (i = 1; i <= lastdfa; ++i) {
acc_array[i] = j;
- if ( accsiz[i] != 0 )
- {
+ if (accsiz[i] != 0) {
accset = dfaacc[i].dfaacc_set;
nacc = accsiz[i];
- if ( trace )
- fprintf( stderr,
- _( "state # %d accepts: " ),
- i );
+ if (trace)
+ fprintf (stderr,
+ _("state # %d accepts: "),
+ i);
- for ( k = 1; k <= nacc; ++k )
- {
- int accnum = accset[k];
+ for (k = 1; k <= nacc; ++k) {
+ int accnum = accset[k];
++j;
- if ( variable_trailing_context_rules &&
- ! (accnum & YY_TRAILING_HEAD_MASK) &&
- accnum > 0 && accnum <= num_rules &&
- rule_type[accnum] == RULE_VARIABLE )
- {
+ if (variable_trailing_context_rules
+ && !(accnum &
+ YY_TRAILING_HEAD_MASK)
+ && accnum > 0
+ && accnum <= num_rules
+ && rule_type[accnum] ==
+ RULE_VARIABLE) {
/* Special hack to flag
* accepting number as part
* of trailing context rule.
*/
accnum |= YY_TRAILING_MASK;
- }
+ }
- mkdata( accnum );
+ mkdata (accnum);
+ yyacclist_data[yyacclist_curr++] = accnum;
- if ( trace )
- {
- fprintf( stderr, "[%d]",
- accset[k] );
+ if (trace) {
+ fprintf (stderr, "[%d]",
+ accset[k]);
- if ( k < nacc )
- fputs( ", ", stderr );
+ if (k < nacc)
+ fputs (", ",
+ stderr);
else
- putc( '\n', stderr );
- }
+ putc ('\n',
+ stderr);
}
}
}
+ }
/* add accepting number for the "jam" state */
acc_array[i] = j;
- dataend();
- }
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yyacclist_tbl);
+ if (yytbl_data_fwrite (&tableswr, yyacclist_tbl) < 0)
+ flexerror (_("Could not write yyacclist_tbl"));
+ yytbl_data_destroy (yyacclist_tbl);
+ yyacclist_tbl = NULL;
+ }
+ }
- else
- {
- dfaacc[end_of_buffer_state].dfaacc_state = end_of_buffer_action;
+ else {
+ dfaacc[end_of_buffer_state].dfaacc_state =
+ end_of_buffer_action;
- for ( i = 1; i <= lastdfa; ++i )
+ for (i = 1; i <= lastdfa; ++i)
acc_array[i] = dfaacc[i].dfaacc_state;
/* add accepting number for jam state */
acc_array[i] = 0;
- }
+ }
+
+ /* Begin generating yy_accept */
/* Spit out "yy_accept" array. If we're doing "reject", it'll be
* pointers into the "yy_acclist" array. Otherwise it's actual
@@ -900,7 +1185,7 @@ void gentabs()
*/
k = lastdfa + 2;
- if ( reject )
+ if (reject)
/* We put a "cap" on the table associating lists of accepting
* numbers with state numbers. This is needed because we tell
* where the end of an accepting list is by looking at where
@@ -908,240 +1193,391 @@ void gentabs()
*/
++k;
- out_str_dec( long_align ? C_long_decl : C_short_decl, "yy_accept", k );
-
- for ( i = 1; i <= lastdfa; ++i )
- {
- mkdata( acc_array[i] );
-
- if ( ! reject && trace && acc_array[i] )
- fprintf( stderr, _( "state # %d accepts: [%d]\n" ),
- i, acc_array[i] );
- }
+ out_str_dec (long_align ? get_int32_decl () : get_int16_decl (),
+ "yy_accept", k);
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_ACCEPT, (void**)&yy_accept, sizeof(%s)},\n",
+ long_align ? "flex_int32_t" : "flex_int16_t");
+
+ yyacc_tbl =
+ (struct yytbl_data *) calloc (1,
+ sizeof (struct yytbl_data));
+ yytbl_data_init (yyacc_tbl, YYTD_ID_ACCEPT);
+ yyacc_tbl->td_lolen = k;
+ yyacc_tbl->td_data = yyacc_data =
+ (flex_int32_t *) calloc (yyacc_tbl->td_lolen, sizeof (flex_int32_t));
+ yyacc_curr=1;
+
+ for (i = 1; i <= lastdfa; ++i) {
+ mkdata (acc_array[i]);
+ yyacc_data[yyacc_curr++] = acc_array[i];
+
+ if (!reject && trace && acc_array[i])
+ fprintf (stderr, _("state # %d accepts: [%d]\n"),
+ i, acc_array[i]);
+ }
/* Add entry for "jam" state. */
- mkdata( acc_array[i] );
+ mkdata (acc_array[i]);
+ yyacc_data[yyacc_curr++] = acc_array[i];
- if ( reject )
+ if (reject) {
/* Add "cap" for the list. */
- mkdata( acc_array[i] );
+ mkdata (acc_array[i]);
+ yyacc_data[yyacc_curr++] = acc_array[i];
+ }
- dataend();
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yyacc_tbl);
+ if (yytbl_data_fwrite (&tableswr, yyacc_tbl) < 0)
+ flexerror (_("Could not write yyacc_tbl"));
+ yytbl_data_destroy (yyacc_tbl);
+ yyacc_tbl = NULL;
+ }
+ /* End generating yy_accept */
+
+ if (useecs) {
+
+ genecs ();
+ if (tablesext) {
+ struct yytbl_data *tbl;
- if ( useecs )
- genecs();
+ tbl = mkecstbl ();
+ yytbl_data_compress (tbl);
+ if (yytbl_data_fwrite (&tableswr, tbl) < 0)
+ flexerror (_("Could not write ecstbl"));
+ yytbl_data_destroy (tbl);
+ tbl = 0;
+ }
+ }
- if ( usemecs )
- {
+ if (usemecs) {
+ /* Begin generating yy_meta */
/* Write out meta-equivalence classes (used to index
* templates with).
*/
+ flex_int32_t *yymecs_data = 0;
+ yymeta_tbl =
+ (struct yytbl_data *) calloc (1,
+ sizeof (struct
+ yytbl_data));
+ yytbl_data_init (yymeta_tbl, YYTD_ID_META);
+ yymeta_tbl->td_lolen = numecs + 1;
+ yymeta_tbl->td_data = yymecs_data =
+ (flex_int32_t *) calloc (yymeta_tbl->td_lolen,
+ sizeof (flex_int32_t));
+
+ if (trace)
+ fputs (_("\n\nMeta-Equivalence Classes:\n"),
+ stderr);
+
+ out_str_dec (get_int32_decl (), "yy_meta", numecs + 1);
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_META, (void**)&yy_meta, sizeof(%s)},\n",
+ "flex_int32_t");
+
+ for (i = 1; i <= numecs; ++i) {
+ if (trace)
+ fprintf (stderr, "%d = %d\n",
+ i, ABS (tecbck[i]));
+
+ mkdata (ABS (tecbck[i]));
+ yymecs_data[i] = ABS (tecbck[i]);
+ }
- if ( trace )
- fputs( _( "\n\nMeta-Equivalence Classes:\n" ),
- stderr );
-
- out_str_dec( C_int_decl, "yy_meta", numecs + 1 );
-
- for ( i = 1; i <= numecs; ++i )
- {
- if ( trace )
- fprintf( stderr, "%d = %d\n",
- i, ABS( tecbck[i] ) );
-
- mkdata( ABS( tecbck[i] ) );
- }
-
- dataend();
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yymeta_tbl);
+ if (yytbl_data_fwrite (&tableswr, yymeta_tbl) < 0)
+ flexerror (_
+ ("Could not write yymeta_tbl"));
+ yytbl_data_destroy (yymeta_tbl);
+ yymeta_tbl = NULL;
}
+ /* End generating yy_meta */
+ }
total_states = lastdfa + numtemps;
- out_str_dec( (tblend >= MAX_SHORT || long_align) ?
- C_long_decl : C_short_decl,
- "yy_base", total_states + 1 );
-
- for ( i = 1; i <= lastdfa; ++i )
- {
+ /* Begin generating yy_base */
+ out_str_dec ((tblend >= INT16_MAX || long_align) ?
+ get_int32_decl () : get_int16_decl (),
+ "yy_base", total_states + 1);
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_BASE, (void**)&yy_base, sizeof(%s)},\n",
+ (tblend >= INT16_MAX
+ || long_align) ? "flex_int32_t" : "flex_int16_t");
+ yybase_tbl =
+ (struct yytbl_data *) calloc (1,
+ sizeof (struct yytbl_data));
+ yytbl_data_init (yybase_tbl, YYTD_ID_BASE);
+ yybase_tbl->td_lolen = total_states + 1;
+ yybase_tbl->td_data = yybase_data =
+ (flex_int32_t *) calloc (yybase_tbl->td_lolen,
+ sizeof (flex_int32_t));
+ yybase_curr = 1;
+
+ for (i = 1; i <= lastdfa; ++i) {
int d = def[i];
- if ( base[i] == JAMSTATE )
+ if (base[i] == JAMSTATE)
base[i] = jambase;
- if ( d == JAMSTATE )
+ if (d == JAMSTATE)
def[i] = jamstate;
- else if ( d < 0 )
- {
+ else if (d < 0) {
/* Template reference. */
++tmpuses;
def[i] = lastdfa - d + 1;
- }
-
- mkdata( base[i] );
}
+ mkdata (base[i]);
+ yybase_data[yybase_curr++] = base[i];
+ }
+
/* Generate jam state's base index. */
- mkdata( base[i] );
+ mkdata (base[i]);
+ yybase_data[yybase_curr++] = base[i];
- for ( ++i /* skip jam state */; i <= total_states; ++i )
- {
- mkdata( base[i] );
+ for (++i /* skip jam state */ ; i <= total_states; ++i) {
+ mkdata (base[i]);
+ yybase_data[yybase_curr++] = base[i];
def[i] = jamstate;
- }
+ }
- dataend();
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yybase_tbl);
+ if (yytbl_data_fwrite (&tableswr, yybase_tbl) < 0)
+ flexerror (_("Could not write yybase_tbl"));
+ yytbl_data_destroy (yybase_tbl);
+ yybase_tbl = NULL;
+ }
+ /* End generating yy_base */
+
+
+ /* Begin generating yy_def */
+ out_str_dec ((total_states >= INT16_MAX || long_align) ?
+ get_int32_decl () : get_int16_decl (),
+ "yy_def", total_states + 1);
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_DEF, (void**)&yy_def, sizeof(%s)},\n",
+ (total_states >= INT16_MAX
+ || long_align) ? "flex_int32_t" : "flex_int16_t");
+
+ yydef_tbl =
+ (struct yytbl_data *) calloc (1,
+ sizeof (struct yytbl_data));
+ yytbl_data_init (yydef_tbl, YYTD_ID_DEF);
+ yydef_tbl->td_lolen = total_states + 1;
+ yydef_tbl->td_data = yydef_data =
+ (flex_int32_t *) calloc (yydef_tbl->td_lolen, sizeof (flex_int32_t));
+
+ for (i = 1; i <= total_states; ++i) {
+ mkdata (def[i]);
+ yydef_data[i] = def[i];
+ }
+
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yydef_tbl);
+ if (yytbl_data_fwrite (&tableswr, yydef_tbl) < 0)
+ flexerror (_("Could not write yydef_tbl"));
+ yytbl_data_destroy (yydef_tbl);
+ yydef_tbl = NULL;
+ }
+ /* End generating yy_def */
- out_str_dec( (total_states >= MAX_SHORT || long_align) ?
- C_long_decl : C_short_decl,
- "yy_def", total_states + 1 );
- for ( i = 1; i <= total_states; ++i )
- mkdata( def[i] );
+ /* Begin generating yy_nxt */
+ out_str_dec ((total_states >= INT16_MAX || long_align) ?
+ get_int32_decl () : get_int16_decl (), "yy_nxt",
+ tblend + 1);
- dataend();
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_NXT, (void**)&yy_nxt, sizeof(%s)},\n",
+ (total_states >= INT16_MAX
+ || long_align) ? "flex_int32_t" : "flex_int16_t");
- out_str_dec( (total_states >= MAX_SHORT || long_align) ?
- C_long_decl : C_short_decl,
- "yy_nxt", tblend + 1 );
+ yynxt_tbl =
+ (struct yytbl_data *) calloc (1,
+ sizeof (struct yytbl_data));
+ yytbl_data_init (yynxt_tbl, YYTD_ID_NXT);
+ yynxt_tbl->td_lolen = tblend + 1;
+ yynxt_tbl->td_data = yynxt_data =
+ (flex_int32_t *) calloc (yynxt_tbl->td_lolen, sizeof (flex_int32_t));
- for ( i = 1; i <= tblend; ++i )
- {
+ for (i = 1; i <= tblend; ++i) {
/* Note, the order of the following test is important.
* If chk[i] is 0, then nxt[i] is undefined.
*/
- if ( chk[i] == 0 || nxt[i] == 0 )
+ if (chk[i] == 0 || nxt[i] == 0)
nxt[i] = jamstate; /* new state is the JAM state */
- mkdata( nxt[i] );
- }
-
- dataend();
-
- out_str_dec( (total_states >= MAX_SHORT || long_align) ?
- C_long_decl : C_short_decl,
- "yy_chk", tblend + 1 );
+ mkdata (nxt[i]);
+ yynxt_data[i] = nxt[i];
+ }
- for ( i = 1; i <= tblend; ++i )
- {
- if ( chk[i] == 0 )
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yynxt_tbl);
+ if (yytbl_data_fwrite (&tableswr, yynxt_tbl) < 0)
+ flexerror (_("Could not write yynxt_tbl"));
+ yytbl_data_destroy (yynxt_tbl);
+ yynxt_tbl = NULL;
+ }
+ /* End generating yy_nxt */
+
+ /* Begin generating yy_chk */
+ out_str_dec ((total_states >= INT16_MAX || long_align) ?
+ get_int32_decl () : get_int16_decl (), "yy_chk",
+ tblend + 1);
+
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_CHK, (void**)&yy_chk, sizeof(%s)},\n",
+ (total_states >= INT16_MAX
+ || long_align) ? "flex_int32_t" : "flex_int16_t");
+
+ yychk_tbl =
+ (struct yytbl_data *) calloc (1,
+ sizeof (struct yytbl_data));
+ yytbl_data_init (yychk_tbl, YYTD_ID_CHK);
+ yychk_tbl->td_lolen = tblend + 1;
+ yychk_tbl->td_data = yychk_data =
+ (flex_int32_t *) calloc (yychk_tbl->td_lolen, sizeof (flex_int32_t));
+
+ for (i = 1; i <= tblend; ++i) {
+ if (chk[i] == 0)
++nummt;
- mkdata( chk[i] );
- }
+ mkdata (chk[i]);
+ yychk_data[i] = chk[i];
+ }
- dataend();
- free(acc_array);
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yychk_tbl);
+ if (yytbl_data_fwrite (&tableswr, yychk_tbl) < 0)
+ flexerror (_("Could not write yychk_tbl"));
+ yytbl_data_destroy (yychk_tbl);
+ yychk_tbl = NULL;
}
+ /* End generating yy_chk */
+
+ flex_free ((void *) acc_array);
+}
/* Write out a formatted string (with a secondary string argument) at the
* current indentation level, adding a final newline.
*/
-void indent_put2s( fmt, arg )
-char fmt[], arg[];
- {
- do_indent();
- out_str( fmt, arg );
- outn( "" );
- }
+void indent_put2s (fmt, arg)
+ const char *fmt, *arg;
+{
+ do_indent ();
+ out_str (fmt, arg);
+ outn ("");
+}
/* Write out a string at the current indentation level, adding a final
* newline.
*/
-void indent_puts( str )
-char str[];
- {
- do_indent();
- outn( str );
- }
+void indent_puts (str)
+ const char *str;
+{
+ do_indent ();
+ outn (str);
+}
/* make_tables - generate transition tables and finishes generating output file
*/
-void make_tables()
- {
+void make_tables ()
+{
int i;
- int did_eof_rule = false;
+ int did_eof_rule = false;
+ struct yytbl_data *yynultrans_tbl;
+
- skelout();
+ skelout (); /* %% [2.0] - break point in skel */
/* First, take care of YY_DO_BEFORE_ACTION depending on yymore
* being used.
*/
- set_indent( 1 );
+ set_indent (1);
- if ( yymore_used && ! yytext_is_array )
- {
- indent_puts( "yytext_ptr -= yy_more_len; \\" );
- indent_puts( "yyleng = (int) (yy_cp - yytext_ptr); \\" );
- }
+ if (yymore_used && !yytext_is_array) {
+ indent_puts ("YY_G(yytext_ptr) -= YY_G(yy_more_len); \\");
+ indent_puts
+ ("yyleng = (size_t) (yy_cp - YY_G(yytext_ptr)); \\");
+ }
else
- indent_puts( "yyleng = (int) (yy_cp - yy_bp); \\" );
+ indent_puts ("yyleng = (size_t) (yy_cp - yy_bp); \\");
/* Now also deal with copying yytext_ptr to yytext if needed. */
- skelout();
- if ( yytext_is_array )
- {
- if ( yymore_used )
- indent_puts(
- "if ( yyleng + yy_more_offset >= YYLMAX ) \\" );
+ skelout (); /* %% [3.0] - break point in skel */
+ if (yytext_is_array) {
+ if (yymore_used)
+ indent_puts
+ ("if ( yyleng + YY_G(yy_more_offset) >= YYLMAX ) \\");
else
- indent_puts( "if ( yyleng >= YYLMAX ) \\" );
-
- indent_up();
- indent_puts(
- "YY_FATAL_ERROR( \"token too large, exceeds YYLMAX\" ); \\" );
- indent_down();
-
- if ( yymore_used )
- {
- indent_puts(
-"yy_flex_strncpy( &yytext[yy_more_offset], yytext_ptr, yyleng + 1 ); \\" );
- indent_puts( "yyleng += yy_more_offset; \\" );
- indent_puts(
- "yy_prev_more_offset = yy_more_offset; \\" );
- indent_puts( "yy_more_offset = 0; \\" );
- }
- else
- {
- indent_puts(
- "yy_flex_strncpy( yytext, yytext_ptr, yyleng + 1 ); \\" );
- }
+ indent_puts ("if ( yyleng >= YYLMAX ) \\");
+
+ indent_up ();
+ indent_puts
+ ("YY_FATAL_ERROR( \"token too large, exceeds YYLMAX\" ); \\");
+ indent_down ();
+
+ if (yymore_used) {
+ indent_puts
+ ("yy_flex_strncpy( &yytext[YY_G(yy_more_offset)], YY_G(yytext_ptr), yyleng + 1 M4_YY_CALL_LAST_ARG); \\");
+ indent_puts ("yyleng += YY_G(yy_more_offset); \\");
+ indent_puts
+ ("YY_G(yy_prev_more_offset) = YY_G(yy_more_offset); \\");
+ indent_puts ("YY_G(yy_more_offset) = 0; \\");
}
+ else {
+ indent_puts
+ ("yy_flex_strncpy( yytext, YY_G(yytext_ptr), yyleng + 1 M4_YY_CALL_LAST_ARG); \\");
+ }
+ }
+
+ set_indent (0);
- set_indent( 0 );
+ skelout (); /* %% [4.0] - break point in skel */
- skelout();
+ /* This is where we REALLY begin generating the tables. */
- out_dec( "#define YY_NUM_RULES %d\n", num_rules );
- out_dec( "#define YY_END_OF_BUFFER %d\n", num_rules + 1 );
+ out_dec ("#define YY_NUM_RULES %d\n", num_rules);
+ out_dec ("#define YY_END_OF_BUFFER %d\n", num_rules + 1);
- if ( fullspd )
- {
+ if (fullspd) {
/* Need to define the transet type as a size large
* enough to hold the biggest offset.
*/
- int total_table_size = tblend + numecs + 1;
- char *trans_offset_type =
- (total_table_size >= MAX_SHORT || long_align) ?
- "long" : "short";
-
- set_indent( 0 );
- indent_puts( "struct yy_trans_info" );
- indent_up();
- indent_puts( "{" ); /* } for vi */
-
- if ( long_align )
- indent_puts( "long yy_verify;" );
- else
- indent_puts( "short yy_verify;" );
+ int total_table_size = tblend + numecs + 1;
+ char *trans_offset_type =
+ (total_table_size >= INT16_MAX || long_align) ?
+ "flex_int32_t" : "flex_int16_t";
+
+ set_indent (0);
+ indent_puts ("struct yy_trans_info");
+ indent_up ();
+ indent_puts ("{");
+
+ /* We require that yy_verify and yy_nxt must be of the same size int. */
+ indent_put2s ("%s yy_verify;", trans_offset_type);
/* In cases where its sister yy_verify *is* a "yes, there is
* a transition", yy_nxt is the offset (in records) to the
@@ -1151,484 +1587,585 @@ void make_tables()
* for that state.
*/
- indent_put2s( "%s yy_nxt;", trans_offset_type );
- indent_puts( "};" );
- indent_down();
- }
+ indent_put2s ("%s yy_nxt;", trans_offset_type);
+ indent_puts ("};");
+ indent_down ();
+ }
+ else {
+ /* We generate a bogus 'struct yy_trans_info' data type
+ * so we can guarantee that it is always declared in the skel.
+ * This is so we can compile "sizeof(struct yy_trans_info)"
+ * in any scanner.
+ */
+ indent_puts
+ ("/* This struct is not used in this scanner,");
+ indent_puts (" but its presence is necessary. */");
+ indent_puts ("struct yy_trans_info");
+ indent_up ();
+ indent_puts ("{");
+ indent_puts ("flex_int32_t yy_verify;");
+ indent_puts ("flex_int32_t yy_nxt;");
+ indent_puts ("};");
+ indent_down ();
+ }
- if ( fullspd )
- genctbl();
- else if ( fulltbl )
- genftbl();
+ if (fullspd) {
+ genctbl ();
+ if (tablesext) {
+ struct yytbl_data *tbl;
+
+ tbl = mkctbl ();
+ yytbl_data_compress (tbl);
+ if (yytbl_data_fwrite (&tableswr, tbl) < 0)
+ flexerror (_("Could not write ftbl"));
+ yytbl_data_destroy (tbl);
+
+ tbl = mkssltbl ();
+ yytbl_data_compress (tbl);
+ if (yytbl_data_fwrite (&tableswr, tbl) < 0)
+ flexerror (_("Could not write ssltbl"));
+ yytbl_data_destroy (tbl);
+ tbl = 0;
+
+ if (useecs) {
+ tbl = mkecstbl ();
+ yytbl_data_compress (tbl);
+ if (yytbl_data_fwrite (&tableswr, tbl) < 0)
+ flexerror (_
+ ("Could not write ecstbl"));
+ yytbl_data_destroy (tbl);
+ tbl = 0;
+ }
+ }
+ }
+ else if (fulltbl) {
+ genftbl ();
+ if (tablesext) {
+ struct yytbl_data *tbl;
+
+ tbl = mkftbl ();
+ yytbl_data_compress (tbl);
+ if (yytbl_data_fwrite (&tableswr, tbl) < 0)
+ flexerror (_("Could not write ftbl"));
+ yytbl_data_destroy (tbl);
+ tbl = 0;
+
+ if (useecs) {
+ tbl = mkecstbl ();
+ yytbl_data_compress (tbl);
+ if (yytbl_data_fwrite (&tableswr, tbl) < 0)
+ flexerror (_
+ ("Could not write ecstbl"));
+ yytbl_data_destroy (tbl);
+ tbl = 0;
+ }
+ }
+ }
else
- gentabs();
+ gentabs ();
+
+ if (do_yylineno) {
+
+ geneoltbl ();
+
+ if (tablesext) {
+ struct yytbl_data *tbl;
+
+ tbl = mkeoltbl ();
+ yytbl_data_compress (tbl);
+ if (yytbl_data_fwrite (&tableswr, tbl) < 0)
+ flexerror (_("Could not write eoltbl"));
+ yytbl_data_destroy (tbl);
+ tbl = 0;
+ }
+ }
/* Definitions for backing up. We don't need them if REJECT
* is being used because then we use an alternative backin-up
* technique instead.
*/
- if ( num_backing_up > 0 && ! reject )
- {
- if ( ! C_plus_plus )
- {
- indent_puts(
- "static yy_state_type yy_last_accepting_state;" );
- indent_puts(
- "static char *yy_last_accepting_cpos;\n" );
- }
+ if (num_backing_up > 0 && !reject) {
+ if (!C_plus_plus && !reentrant) {
+ indent_puts
+ ("static yy_state_type yy_last_accepting_state;");
+ indent_puts
+ ("static char *yy_last_accepting_cpos;\n");
}
+ }
- if ( nultrans )
- {
- out_str_dec( C_state_decl, "yy_NUL_trans", lastdfa + 1 );
-
- for ( i = 1; i <= lastdfa; ++i )
- {
- if ( fullspd )
- out_dec( " &yy_transition[%d],\n", base[i] );
- else
- mkdata( nultrans[i] );
+ if (nultrans) {
+ flex_int32_t *yynultrans_data = 0;
+
+ /* Begin generating yy_NUL_trans */
+ out_str_dec (get_state_decl (), "yy_NUL_trans",
+ lastdfa + 1);
+ buf_prints (&yydmap_buf,
+ "\t{YYTD_ID_NUL_TRANS, (void**)&yy_NUL_trans, sizeof(%s)},\n",
+ (fullspd) ? "struct yy_trans_info*" :
+ "flex_int32_t");
+
+ yynultrans_tbl =
+ (struct yytbl_data *) calloc (1,
+ sizeof (struct
+ yytbl_data));
+ yytbl_data_init (yynultrans_tbl, YYTD_ID_NUL_TRANS);
+ if (fullspd)
+ yynultrans_tbl->td_flags |= YYTD_PTRANS;
+ yynultrans_tbl->td_lolen = lastdfa + 1;
+ yynultrans_tbl->td_data = yynultrans_data =
+ (flex_int32_t *) calloc (yynultrans_tbl->td_lolen,
+ sizeof (flex_int32_t));
+
+ for (i = 1; i <= lastdfa; ++i) {
+ if (fullspd) {
+ out_dec (" &yy_transition[%d],\n",
+ base[i]);
+ yynultrans_data[i] = base[i];
}
-
- dataend();
- }
-
- if ( ddebug )
- { /* Spit out table mapping rules to line numbers. */
- if ( ! C_plus_plus )
- {
- indent_puts( "extern int yy_flex_debug;" );
- indent_puts( "int yy_flex_debug = 1;\n" );
+ else {
+ mkdata (nultrans[i]);
+ yynultrans_data[i] = nultrans[i];
}
+ }
- out_str_dec( long_align ? C_long_decl : C_short_decl,
- "yy_rule_linenum", num_rules );
- for ( i = 1; i < num_rules; ++i )
- mkdata( rule_linenum[i] );
- dataend();
+ dataend ();
+ if (tablesext) {
+ yytbl_data_compress (yynultrans_tbl);
+ if (yytbl_data_fwrite (&tableswr, yynultrans_tbl) <
+ 0)
+ flexerror (_
+ ("Could not write yynultrans_tbl"));
+ yytbl_data_destroy (yynultrans_tbl);
+ yynultrans_tbl = NULL;
}
+ /* End generating yy_NUL_trans */
+ }
- if ( reject )
- {
- /* Declare state buffer variables. */
- if ( ! C_plus_plus )
- {
- outn(
- "static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;" );
- outn( "static char *yy_full_match;" );
- outn( "static int yy_lp;" );
- }
+ if (!C_plus_plus && !reentrant) {
+ indent_puts ("extern int yy_flex_debug;");
+ indent_put2s ("int yy_flex_debug = %s;\n",
+ ddebug ? "1" : "0");
+ }
- if ( variable_trailing_context_rules )
- {
- if ( ! C_plus_plus )
- {
- outn(
- "static int yy_looking_for_trail_begin = 0;" );
- outn( "static int yy_full_lp;" );
- outn( "static int *yy_full_state;" );
- }
+ if (ddebug) { /* Spit out table mapping rules to line numbers. */
+ out_str_dec (long_align ? get_int32_decl () :
+ get_int16_decl (), "yy_rule_linenum",
+ num_rules);
+ for (i = 1; i < num_rules; ++i)
+ mkdata (rule_linenum[i]);
+ dataend ();
+ }
- out_hex( "#define YY_TRAILING_MASK 0x%x\n",
- (unsigned int) YY_TRAILING_MASK );
- out_hex( "#define YY_TRAILING_HEAD_MASK 0x%x\n",
- (unsigned int) YY_TRAILING_HEAD_MASK );
- }
+ if (reject) {
+ outn ("m4_ifdef( [[M4_YY_USES_REJECT]],\n[[");
+ /* Declare state buffer variables. */
+ if (!C_plus_plus && !reentrant) {
+ outn ("static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;");
+ outn ("static char *yy_full_match;");
+ outn ("static int yy_lp;");
+ }
- outn( "#define REJECT \\" );
- outn( "{ \\" ); /* } for vi */
- outn(
- "*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \\" );
- outn(
- "yy_cp = yy_full_match; /* restore poss. backed-over text */ \\" );
-
- if ( variable_trailing_context_rules )
- {
- outn(
- "yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \\" );
- outn(
- "yy_state_ptr = yy_full_state; /* restore orig. state */ \\" );
- outn(
- "yy_current_state = *yy_state_ptr; /* restore curr. state */ \\" );
+ if (variable_trailing_context_rules) {
+ if (!C_plus_plus && !reentrant) {
+ outn ("static int yy_looking_for_trail_begin = 0;");
+ outn ("static int yy_full_lp;");
+ outn ("static int *yy_full_state;");
}
- outn( "++yy_lp; \\" );
- outn( "goto find_rule; \\" );
- /* { for vi */
- outn( "}" );
+ out_hex ("#define YY_TRAILING_MASK 0x%x\n",
+ (unsigned int) YY_TRAILING_MASK);
+ out_hex ("#define YY_TRAILING_HEAD_MASK 0x%x\n",
+ (unsigned int) YY_TRAILING_HEAD_MASK);
}
- else
- {
- outn(
- "/* The intent behind this definition is that it'll catch" );
- outn( " * any uses of REJECT which flex missed." );
- outn( " */" );
- outn( "#define REJECT reject_used_but_not_detected" );
+ outn ("#define REJECT \\");
+ outn ("{ \\");
+ outn ("*yy_cp = YY_G(yy_hold_char); /* undo effects of setting up yytext */ \\");
+ outn ("yy_cp = YY_G(yy_full_match); /* restore poss. backed-over text */ \\");
+
+ if (variable_trailing_context_rules) {
+ outn ("YY_G(yy_lp) = YY_G(yy_full_lp); /* restore orig. accepting pos. */ \\");
+ outn ("YY_G(yy_state_ptr) = YY_G(yy_full_state); /* restore orig. state */ \\");
+ outn ("yy_current_state = *YY_G(yy_state_ptr); /* restore curr. state */ \\");
}
- if ( yymore_used )
- {
- if ( ! C_plus_plus )
- {
- if ( yytext_is_array )
- {
- indent_puts( "static int yy_more_offset = 0;" );
- indent_puts(
- "static int yy_prev_more_offset = 0;" );
- }
- else
- {
- indent_puts( "static int yy_more_flag = 0;" );
- indent_puts( "static int yy_more_len = 0;" );
- }
- }
+ outn ("++YY_G(yy_lp); \\");
+ outn ("goto find_rule; \\");
+
+ outn ("}");
+ outn ("]])\n");
+ }
- if ( yytext_is_array )
- {
- indent_puts(
- "#define yymore() (yy_more_offset = yy_flex_strlen( yytext ))" );
- indent_puts( "#define YY_NEED_STRLEN" );
- indent_puts( "#define YY_MORE_ADJ 0" );
- indent_puts( "#define YY_RESTORE_YY_MORE_OFFSET \\" );
- indent_up();
- indent_puts( "{ \\" );
- indent_puts( "yy_more_offset = yy_prev_more_offset; \\" );
- indent_puts( "yyleng -= yy_more_offset; \\" );
- indent_puts( "}" );
- indent_down();
+ else {
+ outn ("/* The intent behind this definition is that it'll catch");
+ outn (" * any uses of REJECT which flex missed.");
+ outn (" */");
+ outn ("#define REJECT reject_used_but_not_detected");
+ }
+
+ if (yymore_used) {
+ if (!C_plus_plus) {
+ if (yytext_is_array) {
+ if (!reentrant){
+ indent_puts ("static int yy_more_offset = 0;");
+ indent_puts ("static int yy_prev_more_offset = 0;");
+ }
}
- else
- {
- indent_puts( "#define yymore() (yy_more_flag = 1)" );
- indent_puts( "#define YY_MORE_ADJ yy_more_len" );
- indent_puts( "#define YY_RESTORE_YY_MORE_OFFSET" );
+ else if (!reentrant) {
+ indent_puts
+ ("static int yy_more_flag = 0;");
+ indent_puts
+ ("static int yy_more_len = 0;");
}
}
- else
- {
- indent_puts( "#define yymore() yymore_used_but_not_detected" );
- indent_puts( "#define YY_MORE_ADJ 0" );
- indent_puts( "#define YY_RESTORE_YY_MORE_OFFSET" );
+ if (yytext_is_array) {
+ indent_puts
+ ("#define yymore() (YY_G(yy_more_offset) = yy_flex_strlen( yytext M4_YY_CALL_LAST_ARG))");
+ indent_puts ("#define YY_NEED_STRLEN");
+ indent_puts ("#define YY_MORE_ADJ 0");
+ indent_puts
+ ("#define YY_RESTORE_YY_MORE_OFFSET \\");
+ indent_up ();
+ indent_puts ("{ \\");
+ indent_puts
+ ("YY_G(yy_more_offset) = YY_G(yy_prev_more_offset); \\");
+ indent_puts ("yyleng -= YY_G(yy_more_offset); \\");
+ indent_puts ("}");
+ indent_down ();
}
-
- if ( ! C_plus_plus )
- {
- if ( yytext_is_array )
- {
- outn( "#ifndef YYLMAX" );
- outn( "#define YYLMAX 8192" );
- outn( "#endif\n" );
- outn( "char yytext[YYLMAX];" );
- outn( "char *yytext_ptr;" );
- }
-
- else
- outn( "char *yytext;" );
+ else {
+ indent_puts
+ ("#define yymore() (YY_G(yy_more_flag) = 1)");
+ indent_puts
+ ("#define YY_MORE_ADJ YY_G(yy_more_len)");
+ indent_puts ("#define YY_RESTORE_YY_MORE_OFFSET");
}
+ }
- out( &action_array[defs1_offset] );
-
- line_directive_out( stdout, 0 );
+ else {
+ indent_puts
+ ("#define yymore() yymore_used_but_not_detected");
+ indent_puts ("#define YY_MORE_ADJ 0");
+ indent_puts ("#define YY_RESTORE_YY_MORE_OFFSET");
+ }
- skelout();
+ if (!C_plus_plus) {
+ if (yytext_is_array) {
+ outn ("#ifndef YYLMAX");
+ outn ("#define YYLMAX 8192");
+ outn ("#endif\n");
+ if (!reentrant){
+ outn ("char yytext[YYLMAX];");
+ outn ("char *yytext_ptr;");
+ }
+ }
- if ( ! C_plus_plus )
- {
- if ( use_read )
- {
- outn(
-"\tif ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \\" );
- outn(
- "\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" );" );
- }
+ else {
+ if(! reentrant)
+ outn ("char *yytext;");
+ }
+ }
- else
- {
- outn(
- "\tif ( yy_current_buffer->yy_is_interactive ) \\" );
- outn( "\t\t{ \\" );
- outn( "\t\tint c = '*', n; \\" );
- outn( "\t\tfor ( n = 0; n < max_size && \\" );
- outn( "\t\t\t (c = getc( yyin )) != EOF && c != '\\n'; ++n ) \\" );
- outn( "\t\t\tbuf[n] = (char) c; \\" );
- outn( "\t\tif ( c == '\\n' ) \\" );
- outn( "\t\t\tbuf[n++] = (char) c; \\" );
- outn( "\t\tif ( c == EOF && ferror( yyin ) ) \\" );
- outn(
- "\t\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" ); \\" );
- outn( "\t\tresult = n; \\" );
- outn( "\t\t} \\" );
- outn(
- "\telse if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \\" );
- outn( "\t\t && ferror( yyin ) ) \\" );
- outn(
- "\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" );" );
- }
+ out (&action_array[defs1_offset]);
+
+ line_directive_out (stdout, 0);
+
+ skelout (); /* %% [5.0] - break point in skel */
+
+ if (!C_plus_plus) {
+ if (use_read) {
+ outn ("\terrno=0; \\");
+ outn ("\twhile ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \\");
+ outn ("\t{ \\");
+ outn ("\t\tif( errno != EINTR) \\");
+ outn ("\t\t{ \\");
+ outn ("\t\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" ); \\");
+ outn ("\t\t\tbreak; \\");
+ outn ("\t\t} \\");
+ outn ("\t\terrno=0; \\");
+ outn ("\t\tclearerr(yyin); \\");
+ outn ("\t}\\");
}
- skelout();
-
- indent_puts( "#define YY_RULE_SETUP \\" );
- indent_up();
- if ( bol_needed )
- {
- indent_puts( "if ( yyleng > 0 ) \\" );
- indent_up();
- indent_puts( "yy_current_buffer->yy_at_bol = \\" );
- indent_puts( "\t\t(yytext[yyleng - 1] == '\\n'); \\" );
- indent_down();
+ else {
+ outn ("\tif ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \\");
+ outn ("\t\t{ \\");
+ outn ("\t\tint c = '*'; \\");
+ outn ("\t\tsize_t n; \\");
+ outn ("\t\tfor ( n = 0; n < max_size && \\");
+ outn ("\t\t\t (c = getc( yyin )) != EOF && c != '\\n'; ++n ) \\");
+ outn ("\t\t\tbuf[n] = (char) c; \\");
+ outn ("\t\tif ( c == '\\n' ) \\");
+ outn ("\t\t\tbuf[n++] = (char) c; \\");
+ outn ("\t\tif ( c == EOF && ferror( yyin ) ) \\");
+ outn ("\t\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" ); \\");
+ outn ("\t\tresult = n; \\");
+ outn ("\t\t} \\");
+ outn ("\telse \\");
+ outn ("\t\t{ \\");
+ outn ("\t\terrno=0; \\");
+ outn ("\t\twhile ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \\");
+ outn ("\t\t\t{ \\");
+ outn ("\t\t\tif( errno != EINTR) \\");
+ outn ("\t\t\t\t{ \\");
+ outn ("\t\t\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" ); \\");
+ outn ("\t\t\t\tbreak; \\");
+ outn ("\t\t\t\t} \\");
+ outn ("\t\t\terrno=0; \\");
+ outn ("\t\t\tclearerr(yyin); \\");
+ outn ("\t\t\t} \\");
+ outn ("\t\t}\\");
}
- indent_puts( "YY_USER_ACTION" );
- indent_down();
+ }
+
+ skelout (); /* %% [6.0] - break point in skel */
+
+ indent_puts ("#define YY_RULE_SETUP \\");
+ indent_up ();
+ if (bol_needed) {
+ indent_puts ("if ( yyleng > 0 ) \\");
+ indent_up ();
+ indent_puts ("YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \\");
+ indent_puts ("\t\t(yytext[yyleng - 1] == '\\n'); \\");
+ indent_down ();
+ }
+ indent_puts ("YY_USER_ACTION");
+ indent_down ();
- skelout();
+ skelout (); /* %% [7.0] - break point in skel */
/* Copy prolog to output file. */
- out( &action_array[prolog_offset] );
+ out (&action_array[prolog_offset]);
- line_directive_out( stdout, 0 );
+ line_directive_out (stdout, 0);
- skelout();
+ skelout (); /* %% [8.0] - break point in skel */
- set_indent( 2 );
+ set_indent (2);
- if ( yymore_used && ! yytext_is_array )
- {
- indent_puts( "yy_more_len = 0;" );
- indent_puts( "if ( yy_more_flag )" );
- indent_up();
- indent_puts( "{" );
- indent_puts( "yy_more_len = yy_c_buf_p - yytext_ptr;" );
- indent_puts( "yy_more_flag = 0;" );
- indent_puts( "}" );
- indent_down();
- }
+ if (yymore_used && !yytext_is_array) {
+ indent_puts ("YY_G(yy_more_len) = 0;");
+ indent_puts ("if ( YY_G(yy_more_flag) )");
+ indent_up ();
+ indent_puts ("{");
+ indent_puts
+ ("YY_G(yy_more_len) = YY_G(yy_c_buf_p) - YY_G(yytext_ptr);");
+ indent_puts ("YY_G(yy_more_flag) = 0;");
+ indent_puts ("}");
+ indent_down ();
+ }
- skelout();
+ skelout (); /* %% [9.0] - break point in skel */
- gen_start_state();
+ gen_start_state ();
/* Note, don't use any indentation. */
- outn( "yy_match:" );
- gen_next_match();
-
- skelout();
- set_indent( 2 );
- gen_find_action();
-
- skelout();
- if ( do_yylineno )
- {
- indent_puts( "if ( yy_act != YY_END_OF_BUFFER )" );
- indent_up();
- indent_puts( "{" );
- indent_puts( "int yyl;" );
- indent_puts( "for ( yyl = 0; yyl < yyleng; ++yyl )" );
- indent_up();
- indent_puts( "if ( yytext[yyl] == '\\n' )" );
- indent_up();
- indent_puts( "++yylineno;" );
- indent_down();
- indent_down();
- indent_puts( "}" );
- indent_down();
+ outn ("yy_match:");
+ gen_next_match ();
+
+ skelout (); /* %% [10.0] - break point in skel */
+ set_indent (2);
+ gen_find_action ();
+
+ skelout (); /* %% [11.0] - break point in skel */
+ outn ("m4_ifdef( [[M4_YY_USE_LINENO]],[[");
+ indent_puts
+ ("if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )");
+ indent_up ();
+ indent_puts ("{");
+ indent_puts ("yy_size_t yyl;");
+ do_indent ();
+ out_str ("for ( yyl = %s; yyl < yyleng; ++yyl )\n",
+ yymore_used ? (yytext_is_array ? "YY_G(yy_prev_more_offset)" :
+ "YY_G(yy_more_len)") : "0");
+ indent_up ();
+ indent_puts ("if ( yytext[yyl] == '\\n' )");
+ indent_up ();
+ indent_puts ("M4_YY_INCR_LINENO();");
+ indent_down ();
+ indent_down ();
+ indent_puts ("}");
+ indent_down ();
+ outn ("]])");
+
+ skelout (); /* %% [12.0] - break point in skel */
+ if (ddebug) {
+ indent_puts ("if ( yy_flex_debug )");
+ indent_up ();
+
+ indent_puts ("{");
+ indent_puts ("if ( yy_act == 0 )");
+ indent_up ();
+ indent_puts (C_plus_plus ?
+ "std::cerr << \"--scanner backing up\\n\";" :
+ "fprintf( stderr, \"--scanner backing up\\n\" );");
+ indent_down ();
+
+ do_indent ();
+ out_dec ("else if ( yy_act < %d )\n", num_rules);
+ indent_up ();
+
+ if (C_plus_plus) {
+ indent_puts
+ ("std::cerr << \"--accepting rule at line \" << yy_rule_linenum[yy_act] <<");
+ indent_puts
+ (" \"(\\\"\" << yytext << \"\\\")\\n\";");
}
+ else {
+ indent_puts
+ ("fprintf( stderr, \"--accepting rule at line %ld (\\\"%s\\\")\\n\",");
- skelout();
- if ( ddebug )
- {
- indent_puts( "if ( yy_flex_debug )" );
- indent_up();
-
- indent_puts( "{" );
- indent_puts( "if ( yy_act == 0 )" );
- indent_up();
- indent_puts( C_plus_plus ?
- "std::cerr << \"--scanner backing up\\n\";" :
- "fprintf( stderr, \"--scanner backing up\\n\" );" );
- indent_down();
-
- do_indent();
- out_dec( "else if ( yy_act < %d )\n", num_rules );
- indent_up();
-
- if ( C_plus_plus )
- {
- indent_puts(
- "std::cerr << \"--accepting rule at line \" << yy_rule_linenum[yy_act] <<" );
- indent_puts(
- " \"(\\\"\" << yytext << \"\\\")\\n\";" );
- }
- else
- {
- indent_puts(
- "fprintf( stderr, \"--accepting rule at line %d (\\\"%s\\\")\\n\"," );
-
- indent_puts(
- " yy_rule_linenum[yy_act], yytext );" );
- }
+ indent_puts
+ (" (long)yy_rule_linenum[yy_act], yytext );");
+ }
- indent_down();
+ indent_down ();
- do_indent();
- out_dec( "else if ( yy_act == %d )\n", num_rules );
- indent_up();
+ do_indent ();
+ out_dec ("else if ( yy_act == %d )\n", num_rules);
+ indent_up ();
- if ( C_plus_plus )
- {
- indent_puts(
-"std::cerr << \"--accepting default rule (\\\"\" << yytext << \"\\\")\\n\";" );
- }
- else
- {
- indent_puts(
- "fprintf( stderr, \"--accepting default rule (\\\"%s\\\")\\n\"," );
- indent_puts( " yytext );" );
- }
+ if (C_plus_plus) {
+ indent_puts
+ ("std::cerr << \"--accepting default rule (\\\"\" << yytext << \"\\\")\\n\";");
+ }
+ else {
+ indent_puts
+ ("fprintf( stderr, \"--accepting default rule (\\\"%s\\\")\\n\",");
+ indent_puts (" yytext );");
+ }
- indent_down();
+ indent_down ();
- do_indent();
- out_dec( "else if ( yy_act == %d )\n", num_rules + 1 );
- indent_up();
+ do_indent ();
+ out_dec ("else if ( yy_act == %d )\n", num_rules + 1);
+ indent_up ();
- indent_puts( C_plus_plus ?
- "std::cerr << \"--(end of buffer or a NUL)\\n\";" :
- "fprintf( stderr, \"--(end of buffer or a NUL)\\n\" );" );
+ indent_puts (C_plus_plus ?
+ "std::cerr << \"--(end of buffer or a NUL)\\n\";" :
+ "fprintf( stderr, \"--(end of buffer or a NUL)\\n\" );");
- indent_down();
+ indent_down ();
- do_indent();
- outn( "else" );
- indent_up();
+ do_indent ();
+ outn ("else");
+ indent_up ();
- if ( C_plus_plus )
- {
- indent_puts(
- "std::cerr << \"--EOF (start condition \" << YY_START << \")\\n\";" );
- }
- else
- {
- indent_puts(
- "fprintf( stderr, \"--EOF (start condition %d)\\n\", YY_START );" );
- }
+ if (C_plus_plus) {
+ indent_puts
+ ("std::cerr << \"--EOF (start condition \" << YY_START << \")\\n\";");
+ }
+ else {
+ indent_puts
+ ("fprintf( stderr, \"--EOF (start condition %d)\\n\", YY_START );");
+ }
- indent_down();
+ indent_down ();
- indent_puts( "}" );
- indent_down();
- }
+ indent_puts ("}");
+ indent_down ();
+ }
/* Copy actions to output file. */
- skelout();
- indent_up();
- gen_bu_action();
- out( &action_array[action_offset] );
+ skelout (); /* %% [13.0] - break point in skel */
+ indent_up ();
+ gen_bu_action ();
+ out (&action_array[action_offset]);
- line_directive_out( stdout, 0 );
+ line_directive_out (stdout, 0);
/* generate cases for any missing EOF rules */
- for ( i = 1; i <= lastsc; ++i )
- if ( ! sceof[i] )
- {
- do_indent();
- out_str( "case YY_STATE_EOF(%s):\n", scname[i] );
+ for (i = 1; i <= lastsc; ++i)
+ if (!sceof[i]) {
+ do_indent ();
+ out_str ("case YY_STATE_EOF(%s):\n", scname[i]);
did_eof_rule = true;
- }
-
- if ( did_eof_rule )
- {
- indent_up();
- indent_puts( "yyterminate();" );
- indent_down();
}
+ if (did_eof_rule) {
+ indent_up ();
+ indent_puts ("yyterminate();");
+ indent_down ();
+ }
+
/* Generate code for handling NUL's, if needed. */
/* First, deal with backing up and setting up yy_cp if the scanner
* finds that it should JAM on the NUL.
*/
- skelout();
- set_indent( 4 );
+ skelout (); /* %% [14.0] - break point in skel */
+ set_indent (4);
- if ( fullspd || fulltbl )
- indent_puts( "yy_cp = yy_c_buf_p;" );
+ if (fullspd || fulltbl)
+ indent_puts ("yy_cp = YY_G(yy_c_buf_p);");
- else
- { /* compressed table */
- if ( ! reject && ! interactive )
- {
+ else { /* compressed table */
+ if (!reject && !interactive) {
/* Do the guaranteed-needed backing up to figure
* out the match.
*/
- indent_puts( "yy_cp = yy_last_accepting_cpos;" );
- indent_puts(
- "yy_current_state = yy_last_accepting_state;" );
- }
+ indent_puts
+ ("yy_cp = YY_G(yy_last_accepting_cpos);");
+ indent_puts
+ ("yy_current_state = YY_G(yy_last_accepting_state);");
+ }
else
/* Still need to initialize yy_cp, though
* yy_current_state was set up by
* yy_get_previous_state().
*/
- indent_puts( "yy_cp = yy_c_buf_p;" );
- }
+ indent_puts ("yy_cp = YY_G(yy_c_buf_p);");
+ }
/* Generate code for yy_get_previous_state(). */
- set_indent( 1 );
- skelout();
-
- gen_start_state();
-
- set_indent( 2 );
- skelout();
- gen_next_state( true );
-
- set_indent( 1 );
- skelout();
- gen_NUL_trans();
-
- skelout();
- if ( do_yylineno )
- { /* update yylineno inside of unput() */
- indent_puts( "if ( c == '\\n' )" );
- indent_up();
- indent_puts( "--yylineno;" );
- indent_down();
- }
+ set_indent (1);
+ skelout (); /* %% [15.0] - break point in skel */
+
+ gen_start_state ();
+
+ set_indent (2);
+ skelout (); /* %% [16.0] - break point in skel */
+ gen_next_state (true);
- skelout();
+ set_indent (1);
+ skelout (); /* %% [17.0] - break point in skel */
+ gen_NUL_trans ();
+
+ skelout (); /* %% [18.0] - break point in skel */
+ skelout (); /* %% [19.0] - break point in skel */
/* Update BOL and yylineno inside of input(). */
- if ( bol_needed )
- {
- indent_puts( "yy_current_buffer->yy_at_bol = (c == '\\n');" );
- if ( do_yylineno )
- {
- indent_puts( "if ( yy_current_buffer->yy_at_bol )" );
- indent_up();
- indent_puts( "++yylineno;" );
- indent_down();
- }
+ if (bol_needed) {
+ indent_puts
+ ("YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\\n');");
+ if (do_yylineno) {
+ indent_puts
+ ("if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )");
+ indent_up ();
+ indent_puts ("M4_YY_INCR_LINENO();");
+ indent_down ();
}
+ }
- else if ( do_yylineno )
- {
- indent_puts( "if ( c == '\\n' )" );
- indent_up();
- indent_puts( "++yylineno;" );
- indent_down();
- }
+ else if (do_yylineno) {
+ indent_puts ("if ( c == '\\n' )");
+ indent_up ();
+ indent_puts ("M4_YY_INCR_LINENO();");
+ indent_down ();
+ }
- skelout();
+ skelout ();
/* Copy remainder of input to output. */
- line_directive_out( stdout, 1 );
+ line_directive_out (stdout, 1);
- if ( sectnum == 3 )
- (void) flexscan(); /* copy remainder of input to output */
+ if (sectnum == 3) {
+ OUT_BEGIN_CODE ();
+ (void) flexscan (); /* copy remainder of input to output */
+ OUT_END_CODE ();
}
+}
diff --git a/usr.bin/lex/gettext.h b/usr.bin/lex/gettext.h
new file mode 100644
index 00000000000..a4322379a5d
--- /dev/null
+++ b/usr.bin/lex/gettext.h
@@ -0,0 +1,61 @@
+/* $OpenBSD: gettext.h,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option. */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+#else
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+#endif /* _LIBGETTEXT_H */
diff --git a/usr.bin/lex/initparse.c b/usr.bin/lex/initparse.c
new file mode 100644
index 00000000000..c7c457b9648
--- /dev/null
+++ b/usr.bin/lex/initparse.c
@@ -0,0 +1,3223 @@
+/* $OpenBSD: initparse.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* A Bison parser, made by GNU Bison 2.5. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+
+ 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 3 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.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.5"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Copy the first part of user declarations. */
+
+/* Line 268 of yacc.c */
+#line 34 "parse.y"
+
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+#include "tables.h"
+
+int pat, scnum, eps, headcnt, trailcnt, lastchar, i, rulelen;
+int trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule;
+
+int *scon_stk;
+int scon_stk_ptr;
+
+static int madeany = false; /* whether we've made the '.' character class */
+static int ccldot, cclany;
+int previous_continued_action; /* whether the previous rule's action was '|' */
+
+#define format_warn3(fmt, a1, a2) \
+ do{ \
+ char fw3_msg[MAXLINE];\
+ snprintf( fw3_msg, MAXLINE,(fmt), (a1), (a2) );\
+ warn( fw3_msg );\
+ }while(0)
+
+/* Expand a POSIX character class expression. */
+#define CCL_EXPR(func) \
+ do{ \
+ int c; \
+ for ( c = 0; c < csize; ++c ) \
+ if ( isascii(c) && func(c) ) \
+ ccladd( currccl, c ); \
+ }while(0)
+
+/* negated class */
+#define CCL_NEG_EXPR(func) \
+ do{ \
+ int c; \
+ for ( c = 0; c < csize; ++c ) \
+ if ( !func(c) ) \
+ ccladd( currccl, c ); \
+ }while(0)
+
+/* While POSIX defines isblank(), it's not ANSI C. */
+#define IS_BLANK(c) ((c) == ' ' || (c) == '\t')
+
+/* On some over-ambitious machines, such as DEC Alpha's, the default
+ * token type is "long" instead of "int"; this leads to problems with
+ * declaring yylval in flexdef.h. But so far, all the yacc's I've seen
+ * wrap their definitions of YYSTYPE with "#ifndef YYSTYPE"'s, so the
+ * following should ensure that the default token type is "int".
+ */
+#define YYSTYPE int
+
+
+
+/* Line 268 of yacc.c */
+#line 155 "parse.c"
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ CHAR = 258,
+ NUMBER = 259,
+ SECTEND = 260,
+ SCDECL = 261,
+ XSCDECL = 262,
+ NAME = 263,
+ PREVCCL = 264,
+ EOF_OP = 265,
+ OPTION_OP = 266,
+ OPT_OUTFILE = 267,
+ OPT_PREFIX = 268,
+ OPT_YYCLASS = 269,
+ OPT_HEADER = 270,
+ OPT_EXTRA_TYPE = 271,
+ OPT_TABLES = 272,
+ CCE_ALNUM = 273,
+ CCE_ALPHA = 274,
+ CCE_BLANK = 275,
+ CCE_CNTRL = 276,
+ CCE_DIGIT = 277,
+ CCE_GRAPH = 278,
+ CCE_LOWER = 279,
+ CCE_PRINT = 280,
+ CCE_PUNCT = 281,
+ CCE_SPACE = 282,
+ CCE_UPPER = 283,
+ CCE_XDIGIT = 284,
+ CCE_NEG_ALNUM = 285,
+ CCE_NEG_ALPHA = 286,
+ CCE_NEG_BLANK = 287,
+ CCE_NEG_CNTRL = 288,
+ CCE_NEG_DIGIT = 289,
+ CCE_NEG_GRAPH = 290,
+ CCE_NEG_LOWER = 291,
+ CCE_NEG_PRINT = 292,
+ CCE_NEG_PUNCT = 293,
+ CCE_NEG_SPACE = 294,
+ CCE_NEG_UPPER = 295,
+ CCE_NEG_XDIGIT = 296,
+ CCL_OP_UNION = 297,
+ CCL_OP_DIFF = 298,
+ BEGIN_REPEAT_POSIX = 299,
+ END_REPEAT_POSIX = 300,
+ BEGIN_REPEAT_FLEX = 301,
+ END_REPEAT_FLEX = 302
+ };
+#endif
+/* Tokens. */
+#define CHAR 258
+#define NUMBER 259
+#define SECTEND 260
+#define SCDECL 261
+#define XSCDECL 262
+#define NAME 263
+#define PREVCCL 264
+#define EOF_OP 265
+#define OPTION_OP 266
+#define OPT_OUTFILE 267
+#define OPT_PREFIX 268
+#define OPT_YYCLASS 269
+#define OPT_HEADER 270
+#define OPT_EXTRA_TYPE 271
+#define OPT_TABLES 272
+#define CCE_ALNUM 273
+#define CCE_ALPHA 274
+#define CCE_BLANK 275
+#define CCE_CNTRL 276
+#define CCE_DIGIT 277
+#define CCE_GRAPH 278
+#define CCE_LOWER 279
+#define CCE_PRINT 280
+#define CCE_PUNCT 281
+#define CCE_SPACE 282
+#define CCE_UPPER 283
+#define CCE_XDIGIT 284
+#define CCE_NEG_ALNUM 285
+#define CCE_NEG_ALPHA 286
+#define CCE_NEG_BLANK 287
+#define CCE_NEG_CNTRL 288
+#define CCE_NEG_DIGIT 289
+#define CCE_NEG_GRAPH 290
+#define CCE_NEG_LOWER 291
+#define CCE_NEG_PRINT 292
+#define CCE_NEG_PUNCT 293
+#define CCE_NEG_SPACE 294
+#define CCE_NEG_UPPER 295
+#define CCE_NEG_XDIGIT 296
+#define CCL_OP_UNION 297
+#define CCL_OP_DIFF 298
+#define BEGIN_REPEAT_POSIX 299
+#define END_REPEAT_POSIX 300
+#define BEGIN_REPEAT_FLEX 301
+#define END_REPEAT_FLEX 302
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 343 of yacc.c */
+#line 291 "parse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 3
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 161
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 69
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 27
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 97
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 140
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 302
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 49, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 63, 2, 57, 2, 2, 2,
+ 64, 65, 55, 60, 56, 68, 62, 59, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 53, 48, 54, 61, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 66, 2, 67, 52, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 50, 58, 51, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint16 yyprhs[] =
+{
+ 0, 0, 3, 9, 10, 14, 17, 18, 20, 22,
+ 24, 26, 29, 31, 33, 36, 39, 40, 44, 48,
+ 52, 56, 60, 64, 70, 76, 77, 78, 81, 83,
+ 85, 87, 88, 93, 97, 98, 102, 104, 106, 108,
+ 111, 115, 118, 120, 124, 126, 129, 132, 134, 141,
+ 147, 152, 155, 158, 161, 168, 174, 179, 181, 183,
+ 185, 189, 193, 195, 199, 203, 205, 209, 214, 219,
+ 222, 225, 226, 228, 230, 232, 234, 236, 238, 240,
+ 242, 244, 246, 248, 250, 252, 254, 256, 258, 260,
+ 262, 264, 266, 268, 270, 272, 274, 277
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 70, 0, -1, 71, 72, 73, 79, 80, -1, -1,
+ 72, 74, 75, -1, 72, 76, -1, -1, 1, -1,
+ 5, -1, 6, -1, 7, -1, 75, 8, -1, 8,
+ -1, 1, -1, 11, 77, -1, 77, 78, -1, -1,
+ 12, 48, 8, -1, 16, 48, 8, -1, 13, 48,
+ 8, -1, 14, 48, 8, -1, 15, 48, 8, -1,
+ 17, 48, 8, -1, 79, 83, 80, 81, 49, -1,
+ 79, 83, 50, 79, 51, -1, -1, -1, 52, 86,
+ -1, 86, -1, 10, -1, 1, -1, -1, 53, 82,
+ 84, 54, -1, 53, 55, 54, -1, -1, 84, 56,
+ 85, -1, 85, -1, 1, -1, 8, -1, 88, 87,
+ -1, 88, 87, 57, -1, 87, 57, -1, 87, -1,
+ 87, 58, 89, -1, 89, -1, 87, 59, -1, 89,
+ 90, -1, 90, -1, 89, 44, 4, 56, 4, 45,
+ -1, 89, 44, 4, 56, 45, -1, 89, 44, 4,
+ 45, -1, 90, 55, -1, 90, 60, -1, 90, 61,
+ -1, 90, 46, 4, 56, 4, 47, -1, 90, 46,
+ 4, 56, 47, -1, 90, 46, 4, 47, -1, 62,
+ -1, 91, -1, 9, -1, 63, 95, 63, -1, 64,
+ 87, 65, -1, 3, -1, 91, 43, 92, -1, 91,
+ 42, 92, -1, 92, -1, 66, 93, 67, -1, 66,
+ 52, 93, 67, -1, 93, 3, 68, 3, -1, 93,
+ 3, -1, 93, 94, -1, -1, 18, -1, 19, -1,
+ 20, -1, 21, -1, 22, -1, 23, -1, 24, -1,
+ 25, -1, 26, -1, 27, -1, 29, -1, 28, -1,
+ 30, -1, 31, -1, 32, -1, 33, -1, 34, -1,
+ 35, -1, 37, -1, 38, -1, 39, -1, 41, -1,
+ 36, -1, 40, -1, 95, 3, -1, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 118, 118, 148, 155, 156, 157, 158, 162, 170,
+ 173, 177, 180, 183, 187, 190, 191, 194, 199, 201,
+ 203, 205, 207, 211, 213, 215, 219, 231, 267, 291,
+ 314, 319, 322, 325, 343, 346, 348, 350, 354, 377,
+ 433, 436, 479, 497, 503, 508, 535, 543, 546, 574,
+ 588, 610, 617, 623, 629, 657, 671, 690, 724, 742,
+ 752, 755, 758, 773, 774, 775, 780, 782, 789, 849,
+ 867, 875, 883, 884, 885, 886, 887, 888, 889, 894,
+ 895, 896, 897, 898, 904, 905, 906, 907, 908, 909,
+ 910, 911, 912, 913, 914, 920, 928, 944
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "CHAR", "NUMBER", "SECTEND", "SCDECL",
+ "XSCDECL", "NAME", "PREVCCL", "EOF_OP", "OPTION_OP", "OPT_OUTFILE",
+ "OPT_PREFIX", "OPT_YYCLASS", "OPT_HEADER", "OPT_EXTRA_TYPE",
+ "OPT_TABLES", "CCE_ALNUM", "CCE_ALPHA", "CCE_BLANK", "CCE_CNTRL",
+ "CCE_DIGIT", "CCE_GRAPH", "CCE_LOWER", "CCE_PRINT", "CCE_PUNCT",
+ "CCE_SPACE", "CCE_UPPER", "CCE_XDIGIT", "CCE_NEG_ALNUM", "CCE_NEG_ALPHA",
+ "CCE_NEG_BLANK", "CCE_NEG_CNTRL", "CCE_NEG_DIGIT", "CCE_NEG_GRAPH",
+ "CCE_NEG_LOWER", "CCE_NEG_PRINT", "CCE_NEG_PUNCT", "CCE_NEG_SPACE",
+ "CCE_NEG_UPPER", "CCE_NEG_XDIGIT", "CCL_OP_UNION", "CCL_OP_DIFF",
+ "BEGIN_REPEAT_POSIX", "END_REPEAT_POSIX", "BEGIN_REPEAT_FLEX",
+ "END_REPEAT_FLEX", "'='", "'\\n'", "'{'", "'}'", "'^'", "'<'", "'>'",
+ "'*'", "','", "'$'", "'|'", "'/'", "'+'", "'?'", "'.'", "'\"'", "'('",
+ "')'", "'['", "']'", "'-'", "$accept", "goal", "initlex", "sect1",
+ "sect1end", "startconddecl", "namelist1", "options", "optionlist",
+ "option", "sect2", "initforrule", "flexrule", "scon_stk_ptr", "scon",
+ "namelist2", "sconname", "rule", "re", "re2", "series", "singleton",
+ "fullccl", "braceccl", "ccl", "ccl_expr", "string", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 61, 10,
+ 123, 125, 94, 60, 62, 42, 44, 36, 124, 47,
+ 43, 63, 46, 34, 40, 41, 91, 93, 45
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 69, 70, 71, 72, 72, 72, 72, 73, 74,
+ 74, 75, 75, 75, 76, 77, 77, 78, 78, 78,
+ 78, 78, 78, 79, 79, 79, 80, 81, 81, 81,
+ 81, 82, 83, 83, 83, 84, 84, 84, 85, 86,
+ 86, 86, 86, 87, 87, 88, 89, 89, 89, 89,
+ 89, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 90, 90, 90, 91, 91, 91, 92, 92, 93, 93,
+ 93, 93, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 95, 95
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 5, 0, 3, 2, 0, 1, 1, 1,
+ 1, 2, 1, 1, 2, 2, 0, 3, 3, 3,
+ 3, 3, 3, 5, 5, 0, 0, 2, 1, 1,
+ 1, 0, 4, 3, 0, 3, 1, 1, 1, 2,
+ 3, 2, 1, 3, 1, 2, 2, 1, 6, 5,
+ 4, 2, 2, 2, 6, 5, 4, 1, 1, 1,
+ 3, 3, 1, 3, 3, 1, 3, 4, 4, 2,
+ 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 0
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 3, 0, 0, 1, 7, 0, 8, 9, 10, 16,
+ 25, 0, 5, 14, 34, 13, 12, 4, 0, 0,
+ 0, 0, 0, 0, 15, 31, 2, 26, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 25, 0, 17,
+ 19, 20, 21, 18, 22, 33, 37, 38, 0, 36,
+ 34, 30, 62, 59, 29, 0, 57, 97, 0, 71,
+ 0, 28, 42, 0, 44, 47, 58, 65, 32, 0,
+ 24, 27, 0, 0, 71, 0, 23, 41, 0, 45,
+ 39, 0, 46, 0, 51, 52, 53, 0, 0, 35,
+ 96, 60, 61, 0, 69, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 83, 82, 84, 85, 86,
+ 87, 88, 89, 94, 90, 91, 92, 95, 93, 66,
+ 70, 43, 40, 0, 0, 64, 63, 67, 0, 50,
+ 0, 56, 0, 68, 0, 49, 0, 55, 48, 54
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 1, 2, 5, 10, 11, 17, 12, 13, 24,
+ 14, 26, 60, 36, 27, 48, 49, 61, 62, 63,
+ 64, 65, 66, 67, 75, 120, 72
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -52
+static const yytype_int16 yypact[] =
+{
+ -52, 17, 103, -52, -52, 113, -52, -52, -52, -52,
+ -52, 48, -52, 114, 6, -52, -52, 42, 7, 12,
+ 58, 77, 88, 89, -52, 43, -52, 73, -52, 130,
+ 131, 132, 133, 134, 135, 90, 91, -52, -1, -52,
+ -52, -52, -52, -52, -52, -52, -52, -52, 40, -52,
+ 44, -52, -52, -52, -52, 39, -52, -52, 39, 93,
+ 97, -52, -12, 39, 49, 61, -31, -52, -52, 139,
+ -52, -52, 1, -51, -52, 0, -52, -52, 39, -52,
+ 75, 144, 61, 145, -52, -52, -52, 84, 84, -52,
+ -52, -52, -52, 50, 83, -52, -52, -52, -52, -52,
+ -52, -52, -52, -52, -52, -52, -52, -52, -52, -52,
+ -52, -52, -52, -52, -52, -52, -52, -52, -52, -52,
+ -52, 49, -52, -40, 10, -52, -52, -52, 149, -52,
+ 9, -52, -3, -52, 108, -52, 107, -52, -52, -52
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -52, -52, -52, -52, -52, -52, -52, -52, -52, -52,
+ 118, 129, -52, -52, -52, -52, 92, 102, -48, -52,
+ 80, -21, -52, 47, 85, -52, -52
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -27
+static const yytype_int16 yytable[] =
+{
+ 51, 136, 52, 94, 90, 129, -26, 78, 53, 54,
+ 73, 87, 88, 134, 92, 80, 130, 3, 95, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 52, 82, 137, 77, 78, 79, 53, 15,
+ 28, 55, 52, 94, 135, 29, 16, 131, 53, 25,
+ 30, 56, 57, 58, 91, 59, 132, 119, 95, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 46, 81, 68, 70, 69, 25, 35, 47,
+ 82, 56, 57, 58, 4, 59, 31, 83, -6, -6,
+ -6, 56, 57, 58, -6, 59, 84, 127, 6, 7,
+ 8, 85, 86, 37, 9, 32, 18, 19, 20, 21,
+ 22, 23, 122, 78, 125, 126, 33, 34, 39, 40,
+ 41, 42, 43, 44, 45, 74, 76, 47, 123, 124,
+ 59, 128, 133, 138, 139, 50, 38, 71, 121, 93,
+ 0, 89
+};
+
+#define yypact_value_is_default(yystate) \
+ ((yystate) == (-52))
+
+#define yytable_value_is_error(yytable_value) \
+ YYID (0)
+
+static const yytype_int8 yycheck[] =
+{
+ 1, 4, 3, 3, 3, 45, 0, 58, 9, 10,
+ 58, 42, 43, 4, 65, 63, 56, 0, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 3, 64, 47, 57, 58, 59, 9, 1,
+ 8, 52, 3, 3, 45, 48, 8, 47, 9, 53,
+ 48, 62, 63, 64, 63, 66, 56, 67, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 1, 44, 54, 51, 56, 53, 55, 8,
+ 121, 62, 63, 64, 1, 66, 48, 46, 5, 6,
+ 7, 62, 63, 64, 11, 66, 55, 67, 5, 6,
+ 7, 60, 61, 50, 11, 48, 12, 13, 14, 15,
+ 16, 17, 57, 58, 87, 88, 48, 48, 8, 8,
+ 8, 8, 8, 8, 54, 52, 49, 8, 4, 4,
+ 66, 68, 3, 45, 47, 37, 27, 55, 78, 74,
+ -1, 69
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 70, 71, 0, 1, 72, 5, 6, 7, 11,
+ 73, 74, 76, 77, 79, 1, 8, 75, 12, 13,
+ 14, 15, 16, 17, 78, 53, 80, 83, 8, 48,
+ 48, 48, 48, 48, 48, 55, 82, 50, 80, 8,
+ 8, 8, 8, 8, 8, 54, 1, 8, 84, 85,
+ 79, 1, 3, 9, 10, 52, 62, 63, 64, 66,
+ 81, 86, 87, 88, 89, 90, 91, 92, 54, 56,
+ 51, 86, 95, 87, 52, 93, 49, 57, 58, 59,
+ 87, 44, 90, 46, 55, 60, 61, 42, 43, 85,
+ 3, 63, 65, 93, 3, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 67,
+ 94, 89, 57, 4, 4, 92, 92, 67, 68, 45,
+ 56, 47, 56, 3, 4, 45, 4, 47, 45, 47
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = 0;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yytoken = 0;
+ yyss = yyssa;
+ yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 2:
+
+/* Line 1806 of yacc.c */
+#line 119 "parse.y"
+ { /* add default rule */
+ int def_rule;
+
+ pat = cclinit();
+ cclnegate( pat );
+
+ def_rule = mkstate( -pat );
+
+ /* Remember the number of the default rule so we
+ * don't generate "can't match" warnings for it.
+ */
+ default_rule = num_rules;
+
+ finish_rule( def_rule, false, 0, 0, 0);
+
+ for ( i = 1; i <= lastsc; ++i )
+ scset[i] = mkbranch( scset[i], def_rule );
+
+ if ( spprdflt )
+ add_action(
+ "YY_FATAL_ERROR( \"flex scanner jammed\" )" );
+ else
+ add_action( "ECHO" );
+
+ add_action( ";\n\tYY_BREAK\n" );
+ }
+ break;
+
+ case 3:
+
+/* Line 1806 of yacc.c */
+#line 148 "parse.y"
+ { /* initialize for processing rules */
+
+ /* Create default DFA start condition. */
+ scinstal( "INITIAL", false );
+ }
+ break;
+
+ case 7:
+
+/* Line 1806 of yacc.c */
+#line 159 "parse.y"
+ { synerr( _("unknown error processing section 1") ); }
+ break;
+
+ case 8:
+
+/* Line 1806 of yacc.c */
+#line 163 "parse.y"
+ {
+ check_options();
+ scon_stk = allocate_integer_array( lastsc + 1 );
+ scon_stk_ptr = 0;
+ }
+ break;
+
+ case 9:
+
+/* Line 1806 of yacc.c */
+#line 171 "parse.y"
+ { xcluflg = false; }
+ break;
+
+ case 10:
+
+/* Line 1806 of yacc.c */
+#line 174 "parse.y"
+ { xcluflg = true; }
+ break;
+
+ case 11:
+
+/* Line 1806 of yacc.c */
+#line 178 "parse.y"
+ { scinstal( nmstr, xcluflg ); }
+ break;
+
+ case 12:
+
+/* Line 1806 of yacc.c */
+#line 181 "parse.y"
+ { scinstal( nmstr, xcluflg ); }
+ break;
+
+ case 13:
+
+/* Line 1806 of yacc.c */
+#line 184 "parse.y"
+ { synerr( _("bad start condition list") ); }
+ break;
+
+ case 17:
+
+/* Line 1806 of yacc.c */
+#line 195 "parse.y"
+ {
+ outfilename = copy_string( nmstr );
+ did_outfilename = 1;
+ }
+ break;
+
+ case 18:
+
+/* Line 1806 of yacc.c */
+#line 200 "parse.y"
+ { extra_type = copy_string( nmstr ); }
+ break;
+
+ case 19:
+
+/* Line 1806 of yacc.c */
+#line 202 "parse.y"
+ { prefix = copy_string( nmstr ); }
+ break;
+
+ case 20:
+
+/* Line 1806 of yacc.c */
+#line 204 "parse.y"
+ { yyclass = copy_string( nmstr ); }
+ break;
+
+ case 21:
+
+/* Line 1806 of yacc.c */
+#line 206 "parse.y"
+ { headerfilename = copy_string( nmstr ); }
+ break;
+
+ case 22:
+
+/* Line 1806 of yacc.c */
+#line 208 "parse.y"
+ { tablesext = true; tablesfilename = copy_string( nmstr ); }
+ break;
+
+ case 23:
+
+/* Line 1806 of yacc.c */
+#line 212 "parse.y"
+ { scon_stk_ptr = (yyvsp[(2) - (5)]); }
+ break;
+
+ case 24:
+
+/* Line 1806 of yacc.c */
+#line 214 "parse.y"
+ { scon_stk_ptr = (yyvsp[(2) - (5)]); }
+ break;
+
+ case 26:
+
+/* Line 1806 of yacc.c */
+#line 219 "parse.y"
+ {
+ /* Initialize for a parse of one rule. */
+ trlcontxt = variable_trail_rule = varlength = false;
+ trailcnt = headcnt = rulelen = 0;
+ current_state_type = STATE_NORMAL;
+ previous_continued_action = continued_action;
+ in_rule = true;
+
+ new_rule();
+ }
+ break;
+
+ case 27:
+
+/* Line 1806 of yacc.c */
+#line 232 "parse.y"
+ {
+ pat = (yyvsp[(2) - (2)]);
+ finish_rule( pat, variable_trail_rule,
+ headcnt, trailcnt , previous_continued_action);
+
+ if ( scon_stk_ptr > 0 )
+ {
+ for ( i = 1; i <= scon_stk_ptr; ++i )
+ scbol[scon_stk[i]] =
+ mkbranch( scbol[scon_stk[i]],
+ pat );
+ }
+
+ else
+ {
+ /* Add to all non-exclusive start conditions,
+ * including the default (0) start condition.
+ */
+
+ for ( i = 1; i <= lastsc; ++i )
+ if ( ! scxclu[i] )
+ scbol[i] = mkbranch( scbol[i],
+ pat );
+ }
+
+ if ( ! bol_needed )
+ {
+ bol_needed = true;
+
+ if ( performance_report > 1 )
+ pinpoint_message(
+ "'^' operator results in sub-optimal performance" );
+ }
+ }
+ break;
+
+ case 28:
+
+/* Line 1806 of yacc.c */
+#line 268 "parse.y"
+ {
+ pat = (yyvsp[(1) - (1)]);
+ finish_rule( pat, variable_trail_rule,
+ headcnt, trailcnt , previous_continued_action);
+
+ if ( scon_stk_ptr > 0 )
+ {
+ for ( i = 1; i <= scon_stk_ptr; ++i )
+ scset[scon_stk[i]] =
+ mkbranch( scset[scon_stk[i]],
+ pat );
+ }
+
+ else
+ {
+ for ( i = 1; i <= lastsc; ++i )
+ if ( ! scxclu[i] )
+ scset[i] =
+ mkbranch( scset[i],
+ pat );
+ }
+ }
+ break;
+
+ case 29:
+
+/* Line 1806 of yacc.c */
+#line 292 "parse.y"
+ {
+ if ( scon_stk_ptr > 0 )
+ build_eof_action();
+
+ else
+ {
+ /* This EOF applies to all start conditions
+ * which don't already have EOF actions.
+ */
+ for ( i = 1; i <= lastsc; ++i )
+ if ( ! sceof[i] )
+ scon_stk[++scon_stk_ptr] = i;
+
+ if ( scon_stk_ptr == 0 )
+ warn(
+ "all start conditions already have <<EOF>> rules" );
+
+ else
+ build_eof_action();
+ }
+ }
+ break;
+
+ case 30:
+
+/* Line 1806 of yacc.c */
+#line 315 "parse.y"
+ { synerr( _("unrecognized rule") ); }
+ break;
+
+ case 31:
+
+/* Line 1806 of yacc.c */
+#line 319 "parse.y"
+ { (yyval) = scon_stk_ptr; }
+ break;
+
+ case 32:
+
+/* Line 1806 of yacc.c */
+#line 323 "parse.y"
+ { (yyval) = (yyvsp[(2) - (4)]); }
+ break;
+
+ case 33:
+
+/* Line 1806 of yacc.c */
+#line 326 "parse.y"
+ {
+ (yyval) = scon_stk_ptr;
+
+ for ( i = 1; i <= lastsc; ++i )
+ {
+ int j;
+
+ for ( j = 1; j <= scon_stk_ptr; ++j )
+ if ( scon_stk[j] == i )
+ break;
+
+ if ( j > scon_stk_ptr )
+ scon_stk[++scon_stk_ptr] = i;
+ }
+ }
+ break;
+
+ case 34:
+
+/* Line 1806 of yacc.c */
+#line 343 "parse.y"
+ { (yyval) = scon_stk_ptr; }
+ break;
+
+ case 37:
+
+/* Line 1806 of yacc.c */
+#line 351 "parse.y"
+ { synerr( _("bad start condition list") ); }
+ break;
+
+ case 38:
+
+/* Line 1806 of yacc.c */
+#line 355 "parse.y"
+ {
+ if ( (scnum = sclookup( nmstr )) == 0 )
+ format_pinpoint_message(
+ "undeclared start condition %s",
+ nmstr );
+ else
+ {
+ for ( i = 1; i <= scon_stk_ptr; ++i )
+ if ( scon_stk[i] == scnum )
+ {
+ format_warn(
+ "<%s> specified twice",
+ scname[scnum] );
+ break;
+ }
+
+ if ( i > scon_stk_ptr )
+ scon_stk[++scon_stk_ptr] = scnum;
+ }
+ }
+ break;
+
+ case 39:
+
+/* Line 1806 of yacc.c */
+#line 378 "parse.y"
+ {
+ if ( transchar[lastst[(yyvsp[(2) - (2)])]] != SYM_EPSILON )
+ /* Provide final transition \now/ so it
+ * will be marked as a trailing context
+ * state.
+ */
+ (yyvsp[(2) - (2)]) = link_machines( (yyvsp[(2) - (2)]),
+ mkstate( SYM_EPSILON ) );
+
+ mark_beginning_as_normal( (yyvsp[(2) - (2)]) );
+ current_state_type = STATE_NORMAL;
+
+ if ( previous_continued_action )
+ {
+ /* We need to treat this as variable trailing
+ * context so that the backup does not happen
+ * in the action but before the action switch
+ * statement. If the backup happens in the
+ * action, then the rules "falling into" this
+ * one's action will *also* do the backup,
+ * erroneously.
+ */
+ if ( ! varlength || headcnt != 0 )
+ warn(
+ "trailing context made variable due to preceding '|' action" );
+
+ /* Mark as variable. */
+ varlength = true;
+ headcnt = 0;
+
+ }
+
+ if ( lex_compat || (varlength && headcnt == 0) )
+ { /* variable trailing context rule */
+ /* Mark the first part of the rule as the
+ * accepting "head" part of a trailing
+ * context rule.
+ *
+ * By the way, we didn't do this at the
+ * beginning of this production because back
+ * then current_state_type was set up for a
+ * trail rule, and add_accept() can create
+ * a new state ...
+ */
+ add_accept( (yyvsp[(1) - (2)]),
+ num_rules | YY_TRAILING_HEAD_MASK );
+ variable_trail_rule = true;
+ }
+
+ else
+ trailcnt = rulelen;
+
+ (yyval) = link_machines( (yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]) );
+ }
+ break;
+
+ case 40:
+
+/* Line 1806 of yacc.c */
+#line 434 "parse.y"
+ { synerr( _("trailing context used twice") ); }
+ break;
+
+ case 41:
+
+/* Line 1806 of yacc.c */
+#line 437 "parse.y"
+ {
+ headcnt = 0;
+ trailcnt = 1;
+ rulelen = 1;
+ varlength = false;
+
+ current_state_type = STATE_TRAILING_CONTEXT;
+
+ if ( trlcontxt )
+ {
+ synerr( _("trailing context used twice") );
+ (yyval) = mkstate( SYM_EPSILON );
+ }
+
+ else if ( previous_continued_action )
+ {
+ /* See the comment in the rule for "re2 re"
+ * above.
+ */
+ warn(
+ "trailing context made variable due to preceding '|' action" );
+
+ varlength = true;
+ }
+
+ if ( lex_compat || varlength )
+ {
+ /* Again, see the comment in the rule for
+ * "re2 re" above.
+ */
+ add_accept( (yyvsp[(1) - (2)]),
+ num_rules | YY_TRAILING_HEAD_MASK );
+ variable_trail_rule = true;
+ }
+
+ trlcontxt = true;
+
+ eps = mkstate( SYM_EPSILON );
+ (yyval) = link_machines( (yyvsp[(1) - (2)]),
+ link_machines( eps, mkstate( '\n' ) ) );
+ }
+ break;
+
+ case 42:
+
+/* Line 1806 of yacc.c */
+#line 480 "parse.y"
+ {
+ (yyval) = (yyvsp[(1) - (1)]);
+
+ if ( trlcontxt )
+ {
+ if ( lex_compat || (varlength && headcnt == 0) )
+ /* Both head and trail are
+ * variable-length.
+ */
+ variable_trail_rule = true;
+ else
+ trailcnt = rulelen;
+ }
+ }
+ break;
+
+ case 43:
+
+/* Line 1806 of yacc.c */
+#line 498 "parse.y"
+ {
+ varlength = true;
+ (yyval) = mkor( (yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]) );
+ }
+ break;
+
+ case 44:
+
+/* Line 1806 of yacc.c */
+#line 504 "parse.y"
+ { (yyval) = (yyvsp[(1) - (1)]); }
+ break;
+
+ case 45:
+
+/* Line 1806 of yacc.c */
+#line 509 "parse.y"
+ {
+ /* This rule is written separately so the
+ * reduction will occur before the trailing
+ * series is parsed.
+ */
+
+ if ( trlcontxt )
+ synerr( _("trailing context used twice") );
+ else
+ trlcontxt = true;
+
+ if ( varlength )
+ /* We hope the trailing context is
+ * fixed-length.
+ */
+ varlength = false;
+ else
+ headcnt = rulelen;
+
+ rulelen = 0;
+
+ current_state_type = STATE_TRAILING_CONTEXT;
+ (yyval) = (yyvsp[(1) - (2)]);
+ }
+ break;
+
+ case 46:
+
+/* Line 1806 of yacc.c */
+#line 536 "parse.y"
+ {
+ /* This is where concatenation of adjacent patterns
+ * gets done.
+ */
+ (yyval) = link_machines( (yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]) );
+ }
+ break;
+
+ case 47:
+
+/* Line 1806 of yacc.c */
+#line 544 "parse.y"
+ { (yyval) = (yyvsp[(1) - (1)]); }
+ break;
+
+ case 48:
+
+/* Line 1806 of yacc.c */
+#line 547 "parse.y"
+ {
+ varlength = true;
+
+ if ( (yyvsp[(3) - (6)]) > (yyvsp[(5) - (6)]) || (yyvsp[(3) - (6)]) < 0 )
+ {
+ synerr( _("bad iteration values") );
+ (yyval) = (yyvsp[(1) - (6)]);
+ }
+ else
+ {
+ if ( (yyvsp[(3) - (6)]) == 0 )
+ {
+ if ( (yyvsp[(5) - (6)]) <= 0 )
+ {
+ synerr(
+ _("bad iteration values") );
+ (yyval) = (yyvsp[(1) - (6)]);
+ }
+ else
+ (yyval) = mkopt(
+ mkrep( (yyvsp[(1) - (6)]), 1, (yyvsp[(5) - (6)]) ) );
+ }
+ else
+ (yyval) = mkrep( (yyvsp[(1) - (6)]), (yyvsp[(3) - (6)]), (yyvsp[(5) - (6)]) );
+ }
+ }
+ break;
+
+ case 49:
+
+/* Line 1806 of yacc.c */
+#line 575 "parse.y"
+ {
+ varlength = true;
+
+ if ( (yyvsp[(3) - (5)]) <= 0 )
+ {
+ synerr( _("iteration value must be positive") );
+ (yyval) = (yyvsp[(1) - (5)]);
+ }
+
+ else
+ (yyval) = mkrep( (yyvsp[(1) - (5)]), (yyvsp[(3) - (5)]), INFINITE_REPEAT );
+ }
+ break;
+
+ case 50:
+
+/* Line 1806 of yacc.c */
+#line 589 "parse.y"
+ {
+ /* The series could be something like "(foo)",
+ * in which case we have no idea what its length
+ * is, so we punt here.
+ */
+ varlength = true;
+
+ if ( (yyvsp[(3) - (4)]) <= 0 )
+ {
+ synerr( _("iteration value must be positive")
+ );
+ (yyval) = (yyvsp[(1) - (4)]);
+ }
+
+ else
+ (yyval) = link_machines( (yyvsp[(1) - (4)]),
+ copysingl( (yyvsp[(1) - (4)]), (yyvsp[(3) - (4)]) - 1 ) );
+ }
+ break;
+
+ case 51:
+
+/* Line 1806 of yacc.c */
+#line 611 "parse.y"
+ {
+ varlength = true;
+
+ (yyval) = mkclos( (yyvsp[(1) - (2)]) );
+ }
+ break;
+
+ case 52:
+
+/* Line 1806 of yacc.c */
+#line 618 "parse.y"
+ {
+ varlength = true;
+ (yyval) = mkposcl( (yyvsp[(1) - (2)]) );
+ }
+ break;
+
+ case 53:
+
+/* Line 1806 of yacc.c */
+#line 624 "parse.y"
+ {
+ varlength = true;
+ (yyval) = mkopt( (yyvsp[(1) - (2)]) );
+ }
+ break;
+
+ case 54:
+
+/* Line 1806 of yacc.c */
+#line 630 "parse.y"
+ {
+ varlength = true;
+
+ if ( (yyvsp[(3) - (6)]) > (yyvsp[(5) - (6)]) || (yyvsp[(3) - (6)]) < 0 )
+ {
+ synerr( _("bad iteration values") );
+ (yyval) = (yyvsp[(1) - (6)]);
+ }
+ else
+ {
+ if ( (yyvsp[(3) - (6)]) == 0 )
+ {
+ if ( (yyvsp[(5) - (6)]) <= 0 )
+ {
+ synerr(
+ _("bad iteration values") );
+ (yyval) = (yyvsp[(1) - (6)]);
+ }
+ else
+ (yyval) = mkopt(
+ mkrep( (yyvsp[(1) - (6)]), 1, (yyvsp[(5) - (6)]) ) );
+ }
+ else
+ (yyval) = mkrep( (yyvsp[(1) - (6)]), (yyvsp[(3) - (6)]), (yyvsp[(5) - (6)]) );
+ }
+ }
+ break;
+
+ case 55:
+
+/* Line 1806 of yacc.c */
+#line 658 "parse.y"
+ {
+ varlength = true;
+
+ if ( (yyvsp[(3) - (5)]) <= 0 )
+ {
+ synerr( _("iteration value must be positive") );
+ (yyval) = (yyvsp[(1) - (5)]);
+ }
+
+ else
+ (yyval) = mkrep( (yyvsp[(1) - (5)]), (yyvsp[(3) - (5)]), INFINITE_REPEAT );
+ }
+ break;
+
+ case 56:
+
+/* Line 1806 of yacc.c */
+#line 672 "parse.y"
+ {
+ /* The singleton could be something like "(foo)",
+ * in which case we have no idea what its length
+ * is, so we punt here.
+ */
+ varlength = true;
+
+ if ( (yyvsp[(3) - (4)]) <= 0 )
+ {
+ synerr( _("iteration value must be positive") );
+ (yyval) = (yyvsp[(1) - (4)]);
+ }
+
+ else
+ (yyval) = link_machines( (yyvsp[(1) - (4)]),
+ copysingl( (yyvsp[(1) - (4)]), (yyvsp[(3) - (4)]) - 1 ) );
+ }
+ break;
+
+ case 57:
+
+/* Line 1806 of yacc.c */
+#line 691 "parse.y"
+ {
+ if ( ! madeany )
+ {
+ /* Create the '.' character class. */
+ ccldot = cclinit();
+ ccladd( ccldot, '\n' );
+ cclnegate( ccldot );
+
+ if ( useecs )
+ mkeccl( ccltbl + cclmap[ccldot],
+ ccllen[ccldot], nextecm,
+ ecgroup, csize, csize );
+
+ /* Create the (?s:'.') character class. */
+ cclany = cclinit();
+ cclnegate( cclany );
+
+ if ( useecs )
+ mkeccl( ccltbl + cclmap[cclany],
+ ccllen[cclany], nextecm,
+ ecgroup, csize, csize );
+
+ madeany = true;
+ }
+
+ ++rulelen;
+
+ if (sf_dot_all())
+ (yyval) = mkstate( -cclany );
+ else
+ (yyval) = mkstate( -ccldot );
+ }
+ break;
+
+ case 58:
+
+/* Line 1806 of yacc.c */
+#line 725 "parse.y"
+ {
+ /* Sort characters for fast searching.
+ */
+ qsort( ccltbl + cclmap[(yyvsp[(1) - (1)])], ccllen[(yyvsp[(1) - (1)])], sizeof (*ccltbl), cclcmp );
+
+ if ( useecs )
+ mkeccl( ccltbl + cclmap[(yyvsp[(1) - (1)])], ccllen[(yyvsp[(1) - (1)])],
+ nextecm, ecgroup, csize, csize );
+
+ ++rulelen;
+
+ if (ccl_has_nl[(yyvsp[(1) - (1)])])
+ rule_has_nl[num_rules] = true;
+
+ (yyval) = mkstate( -(yyvsp[(1) - (1)]) );
+ }
+ break;
+
+ case 59:
+
+/* Line 1806 of yacc.c */
+#line 743 "parse.y"
+ {
+ ++rulelen;
+
+ if (ccl_has_nl[(yyvsp[(1) - (1)])])
+ rule_has_nl[num_rules] = true;
+
+ (yyval) = mkstate( -(yyvsp[(1) - (1)]) );
+ }
+ break;
+
+ case 60:
+
+/* Line 1806 of yacc.c */
+#line 753 "parse.y"
+ { (yyval) = (yyvsp[(2) - (3)]); }
+ break;
+
+ case 61:
+
+/* Line 1806 of yacc.c */
+#line 756 "parse.y"
+ { (yyval) = (yyvsp[(2) - (3)]); }
+ break;
+
+ case 62:
+
+/* Line 1806 of yacc.c */
+#line 759 "parse.y"
+ {
+ ++rulelen;
+
+ if ((yyvsp[(1) - (1)]) == nlch)
+ rule_has_nl[num_rules] = true;
+
+ if (sf_case_ins() && has_case((yyvsp[(1) - (1)])))
+ /* create an alternation, as in (a|A) */
+ (yyval) = mkor (mkstate((yyvsp[(1) - (1)])), mkstate(reverse_case((yyvsp[(1) - (1)]))));
+ else
+ (yyval) = mkstate( (yyvsp[(1) - (1)]) );
+ }
+ break;
+
+ case 63:
+
+/* Line 1806 of yacc.c */
+#line 773 "parse.y"
+ { (yyval) = ccl_set_diff ((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])); }
+ break;
+
+ case 64:
+
+/* Line 1806 of yacc.c */
+#line 774 "parse.y"
+ { (yyval) = ccl_set_union ((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])); }
+ break;
+
+ case 66:
+
+/* Line 1806 of yacc.c */
+#line 780 "parse.y"
+ { (yyval) = (yyvsp[(2) - (3)]); }
+ break;
+
+ case 67:
+
+/* Line 1806 of yacc.c */
+#line 783 "parse.y"
+ {
+ cclnegate( (yyvsp[(3) - (4)]) );
+ (yyval) = (yyvsp[(3) - (4)]);
+ }
+ break;
+
+ case 68:
+
+/* Line 1806 of yacc.c */
+#line 790 "parse.y"
+ {
+
+ if (sf_case_ins())
+ {
+
+ /* If one end of the range has case and the other
+ * does not, or the cases are different, then we're not
+ * sure what range the user is trying to express.
+ * Examples: [@-z] or [S-t]
+ */
+ if (has_case ((yyvsp[(2) - (4)])) != has_case ((yyvsp[(4) - (4)]))
+ || (has_case ((yyvsp[(2) - (4)])) && (b_islower ((yyvsp[(2) - (4)])) != b_islower ((yyvsp[(4) - (4)]))))
+ || (has_case ((yyvsp[(2) - (4)])) && (b_isupper ((yyvsp[(2) - (4)])) != b_isupper ((yyvsp[(4) - (4)])))))
+ format_warn3 (
+ _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
+ (yyvsp[(2) - (4)]), (yyvsp[(4) - (4)]));
+
+ /* If the range spans uppercase characters but not
+ * lowercase (or vice-versa), then should we automatically
+ * include lowercase characters in the range?
+ * Example: [@-_] spans [a-z] but not [A-Z]
+ */
+ else if (!has_case ((yyvsp[(2) - (4)])) && !has_case ((yyvsp[(4) - (4)])) && !range_covers_case ((yyvsp[(2) - (4)]), (yyvsp[(4) - (4)])))
+ format_warn3 (
+ _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
+ (yyvsp[(2) - (4)]), (yyvsp[(4) - (4)]));
+ }
+
+ if ( (yyvsp[(2) - (4)]) > (yyvsp[(4) - (4)]) )
+ synerr( _("negative range in character class") );
+
+ else
+ {
+ for ( i = (yyvsp[(2) - (4)]); i <= (yyvsp[(4) - (4)]); ++i )
+ ccladd( (yyvsp[(1) - (4)]), i );
+
+ /* Keep track if this ccl is staying in
+ * alphabetical order.
+ */
+ cclsorted = cclsorted && ((yyvsp[(2) - (4)]) > lastchar);
+ lastchar = (yyvsp[(4) - (4)]);
+
+ /* Do it again for upper/lowercase */
+ if (sf_case_ins() && has_case((yyvsp[(2) - (4)])) && has_case((yyvsp[(4) - (4)]))){
+ (yyvsp[(2) - (4)]) = reverse_case ((yyvsp[(2) - (4)]));
+ (yyvsp[(4) - (4)]) = reverse_case ((yyvsp[(4) - (4)]));
+
+ for ( i = (yyvsp[(2) - (4)]); i <= (yyvsp[(4) - (4)]); ++i )
+ ccladd( (yyvsp[(1) - (4)]), i );
+
+ cclsorted = cclsorted && ((yyvsp[(2) - (4)]) > lastchar);
+ lastchar = (yyvsp[(4) - (4)]);
+ }
+
+ }
+
+ (yyval) = (yyvsp[(1) - (4)]);
+ }
+ break;
+
+ case 69:
+
+/* Line 1806 of yacc.c */
+#line 850 "parse.y"
+ {
+ ccladd( (yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]) );
+ cclsorted = cclsorted && ((yyvsp[(2) - (2)]) > lastchar);
+ lastchar = (yyvsp[(2) - (2)]);
+
+ /* Do it again for upper/lowercase */
+ if (sf_case_ins() && has_case((yyvsp[(2) - (2)]))){
+ (yyvsp[(2) - (2)]) = reverse_case ((yyvsp[(2) - (2)]));
+ ccladd ((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
+
+ cclsorted = cclsorted && ((yyvsp[(2) - (2)]) > lastchar);
+ lastchar = (yyvsp[(2) - (2)]);
+ }
+
+ (yyval) = (yyvsp[(1) - (2)]);
+ }
+ break;
+
+ case 70:
+
+/* Line 1806 of yacc.c */
+#line 868 "parse.y"
+ {
+ /* Too hard to properly maintain cclsorted. */
+ cclsorted = false;
+ (yyval) = (yyvsp[(1) - (2)]);
+ }
+ break;
+
+ case 71:
+
+/* Line 1806 of yacc.c */
+#line 875 "parse.y"
+ {
+ cclsorted = true;
+ lastchar = 0;
+ currccl = (yyval) = cclinit();
+ }
+ break;
+
+ case 72:
+
+/* Line 1806 of yacc.c */
+#line 883 "parse.y"
+ { CCL_EXPR(isalnum); }
+ break;
+
+ case 73:
+
+/* Line 1806 of yacc.c */
+#line 884 "parse.y"
+ { CCL_EXPR(isalpha); }
+ break;
+
+ case 74:
+
+/* Line 1806 of yacc.c */
+#line 885 "parse.y"
+ { CCL_EXPR(IS_BLANK); }
+ break;
+
+ case 75:
+
+/* Line 1806 of yacc.c */
+#line 886 "parse.y"
+ { CCL_EXPR(iscntrl); }
+ break;
+
+ case 76:
+
+/* Line 1806 of yacc.c */
+#line 887 "parse.y"
+ { CCL_EXPR(isdigit); }
+ break;
+
+ case 77:
+
+/* Line 1806 of yacc.c */
+#line 888 "parse.y"
+ { CCL_EXPR(isgraph); }
+ break;
+
+ case 78:
+
+/* Line 1806 of yacc.c */
+#line 889 "parse.y"
+ {
+ CCL_EXPR(islower);
+ if (sf_case_ins())
+ CCL_EXPR(isupper);
+ }
+ break;
+
+ case 79:
+
+/* Line 1806 of yacc.c */
+#line 894 "parse.y"
+ { CCL_EXPR(isprint); }
+ break;
+
+ case 80:
+
+/* Line 1806 of yacc.c */
+#line 895 "parse.y"
+ { CCL_EXPR(ispunct); }
+ break;
+
+ case 81:
+
+/* Line 1806 of yacc.c */
+#line 896 "parse.y"
+ { CCL_EXPR(isspace); }
+ break;
+
+ case 82:
+
+/* Line 1806 of yacc.c */
+#line 897 "parse.y"
+ { CCL_EXPR(isxdigit); }
+ break;
+
+ case 83:
+
+/* Line 1806 of yacc.c */
+#line 898 "parse.y"
+ {
+ CCL_EXPR(isupper);
+ if (sf_case_ins())
+ CCL_EXPR(islower);
+ }
+ break;
+
+ case 84:
+
+/* Line 1806 of yacc.c */
+#line 904 "parse.y"
+ { CCL_NEG_EXPR(isalnum); }
+ break;
+
+ case 85:
+
+/* Line 1806 of yacc.c */
+#line 905 "parse.y"
+ { CCL_NEG_EXPR(isalpha); }
+ break;
+
+ case 86:
+
+/* Line 1806 of yacc.c */
+#line 906 "parse.y"
+ { CCL_NEG_EXPR(IS_BLANK); }
+ break;
+
+ case 87:
+
+/* Line 1806 of yacc.c */
+#line 907 "parse.y"
+ { CCL_NEG_EXPR(iscntrl); }
+ break;
+
+ case 88:
+
+/* Line 1806 of yacc.c */
+#line 908 "parse.y"
+ { CCL_NEG_EXPR(isdigit); }
+ break;
+
+ case 89:
+
+/* Line 1806 of yacc.c */
+#line 909 "parse.y"
+ { CCL_NEG_EXPR(isgraph); }
+ break;
+
+ case 90:
+
+/* Line 1806 of yacc.c */
+#line 910 "parse.y"
+ { CCL_NEG_EXPR(isprint); }
+ break;
+
+ case 91:
+
+/* Line 1806 of yacc.c */
+#line 911 "parse.y"
+ { CCL_NEG_EXPR(ispunct); }
+ break;
+
+ case 92:
+
+/* Line 1806 of yacc.c */
+#line 912 "parse.y"
+ { CCL_NEG_EXPR(isspace); }
+ break;
+
+ case 93:
+
+/* Line 1806 of yacc.c */
+#line 913 "parse.y"
+ { CCL_NEG_EXPR(isxdigit); }
+ break;
+
+ case 94:
+
+/* Line 1806 of yacc.c */
+#line 914 "parse.y"
+ {
+ if ( sf_case_ins() )
+ warn(_("[:^lower:] is ambiguous in case insensitive scanner"));
+ else
+ CCL_NEG_EXPR(islower);
+ }
+ break;
+
+ case 95:
+
+/* Line 1806 of yacc.c */
+#line 920 "parse.y"
+ {
+ if ( sf_case_ins() )
+ warn(_("[:^upper:] ambiguous in case insensitive scanner"));
+ else
+ CCL_NEG_EXPR(isupper);
+ }
+ break;
+
+ case 96:
+
+/* Line 1806 of yacc.c */
+#line 929 "parse.y"
+ {
+ if ( (yyvsp[(2) - (2)]) == nlch )
+ rule_has_nl[num_rules] = true;
+
+ ++rulelen;
+
+ if (sf_case_ins() && has_case((yyvsp[(2) - (2)])))
+ (yyval) = mkor (mkstate((yyvsp[(2) - (2)])), mkstate(reverse_case((yyvsp[(2) - (2)]))));
+ else
+ (yyval) = mkstate ((yyvsp[(2) - (2)]));
+
+ (yyval) = link_machines( (yyvsp[(1) - (2)]), (yyval));
+ }
+ break;
+
+ case 97:
+
+/* Line 1806 of yacc.c */
+#line 944 "parse.y"
+ { (yyval) = mkstate( SYM_EPSILON ); }
+ break;
+
+
+
+/* Line 1806 of yacc.c */
+#line 2847 "parse.c"
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+
+/* Line 2067 of yacc.c */
+#line 947 "parse.y"
+
+
+
+/* build_eof_action - build the "<<EOF>>" action for the active start
+ * conditions
+ */
+
+void build_eof_action()
+ {
+ int i;
+ char action_text[MAXLINE];
+
+ for ( i = 1; i <= scon_stk_ptr; ++i )
+ {
+ if ( sceof[scon_stk[i]] )
+ format_pinpoint_message(
+ "multiple <<EOF>> rules for start condition %s",
+ scname[scon_stk[i]] );
+
+ else
+ {
+ sceof[scon_stk[i]] = true;
+
+ if (previous_continued_action /* && previous action was regular */)
+ add_action("YY_RULE_SETUP\n");
+
+ snprintf( action_text, sizeof(action_text), "case YY_STATE_EOF(%s):\n",
+ scname[scon_stk[i]] );
+ add_action( action_text );
+ }
+ }
+
+ line_directive_out( (FILE *) 0, 1 );
+
+ /* This isn't a normal rule after all - don't count it as
+ * such, so we don't have any holes in the rule numbering
+ * (which make generating "rule can never match" warnings
+ * more difficult.
+ */
+ --num_rules;
+ ++num_eof_rules;
+ }
+
+
+/* format_synerr - write out formatted syntax error */
+
+void format_synerr( msg, arg )
+const char *msg, arg[];
+ {
+ char errmsg[MAXLINE];
+
+ (void) snprintf( errmsg, sizeof(errmsg), msg, arg );
+ synerr( errmsg );
+ }
+
+
+/* synerr - report a syntax error */
+
+void synerr( str )
+const char *str;
+ {
+ syntaxerror = true;
+ pinpoint_message( str );
+ }
+
+
+/* format_warn - write out formatted warning */
+
+void format_warn( msg, arg )
+const char *msg, arg[];
+ {
+ char warn_msg[MAXLINE];
+
+ snprintf( warn_msg, sizeof(warn_msg), msg, arg );
+ warn( warn_msg );
+ }
+
+
+/* warn - report a warning, unless -w was given */
+
+void warn( str )
+const char *str;
+ {
+ line_warning( str, linenum );
+ }
+
+/* format_pinpoint_message - write out a message formatted with one string,
+ * pinpointing its location
+ */
+
+void format_pinpoint_message( msg, arg )
+const char *msg, arg[];
+ {
+ char errmsg[MAXLINE];
+
+ snprintf( errmsg, sizeof(errmsg), msg, arg );
+ pinpoint_message( errmsg );
+ }
+
+
+/* pinpoint_message - write out a message, pinpointing its location */
+
+void pinpoint_message( str )
+const char *str;
+ {
+ line_pinpoint( str, linenum );
+ }
+
+
+/* line_warning - report a warning at a given line, unless -w was given */
+
+void line_warning( str, line )
+const char *str;
+int line;
+ {
+ char warning[MAXLINE];
+
+ if ( ! nowarn )
+ {
+ snprintf( warning, sizeof(warning), "warning, %s", str );
+ line_pinpoint( warning, line );
+ }
+ }
+
+
+/* line_pinpoint - write out a message, pinpointing it at the given line */
+
+void line_pinpoint( str, line )
+const char *str;
+int line;
+ {
+ fprintf( stderr, "%s:%d: %s\n", infilename, line, str );
+ }
+
+
+/* yyerror - eat up an error message from the parser;
+ * currently, messages are ignore
+ */
+
+void yyerror( msg )
+const char *msg;
+ {
+ }
+
diff --git a/usr.bin/lex/initparse.h b/usr.bin/lex/initparse.h
new file mode 100644
index 00000000000..9eb10df852a
--- /dev/null
+++ b/usr.bin/lex/initparse.h
@@ -0,0 +1,148 @@
+/* $OpenBSD: initparse.h,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* A Bison parser, made by GNU Bison 2.5. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+
+ 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 3 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.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ CHAR = 258,
+ NUMBER = 259,
+ SECTEND = 260,
+ SCDECL = 261,
+ XSCDECL = 262,
+ NAME = 263,
+ PREVCCL = 264,
+ EOF_OP = 265,
+ OPTION_OP = 266,
+ OPT_OUTFILE = 267,
+ OPT_PREFIX = 268,
+ OPT_YYCLASS = 269,
+ OPT_HEADER = 270,
+ OPT_EXTRA_TYPE = 271,
+ OPT_TABLES = 272,
+ CCE_ALNUM = 273,
+ CCE_ALPHA = 274,
+ CCE_BLANK = 275,
+ CCE_CNTRL = 276,
+ CCE_DIGIT = 277,
+ CCE_GRAPH = 278,
+ CCE_LOWER = 279,
+ CCE_PRINT = 280,
+ CCE_PUNCT = 281,
+ CCE_SPACE = 282,
+ CCE_UPPER = 283,
+ CCE_XDIGIT = 284,
+ CCE_NEG_ALNUM = 285,
+ CCE_NEG_ALPHA = 286,
+ CCE_NEG_BLANK = 287,
+ CCE_NEG_CNTRL = 288,
+ CCE_NEG_DIGIT = 289,
+ CCE_NEG_GRAPH = 290,
+ CCE_NEG_LOWER = 291,
+ CCE_NEG_PRINT = 292,
+ CCE_NEG_PUNCT = 293,
+ CCE_NEG_SPACE = 294,
+ CCE_NEG_UPPER = 295,
+ CCE_NEG_XDIGIT = 296,
+ CCL_OP_UNION = 297,
+ CCL_OP_DIFF = 298,
+ BEGIN_REPEAT_POSIX = 299,
+ END_REPEAT_POSIX = 300,
+ BEGIN_REPEAT_FLEX = 301,
+ END_REPEAT_FLEX = 302
+ };
+#endif
+/* Tokens. */
+#define CHAR 258
+#define NUMBER 259
+#define SECTEND 260
+#define SCDECL 261
+#define XSCDECL 262
+#define NAME 263
+#define PREVCCL 264
+#define EOF_OP 265
+#define OPTION_OP 266
+#define OPT_OUTFILE 267
+#define OPT_PREFIX 268
+#define OPT_YYCLASS 269
+#define OPT_HEADER 270
+#define OPT_EXTRA_TYPE 271
+#define OPT_TABLES 272
+#define CCE_ALNUM 273
+#define CCE_ALPHA 274
+#define CCE_BLANK 275
+#define CCE_CNTRL 276
+#define CCE_DIGIT 277
+#define CCE_GRAPH 278
+#define CCE_LOWER 279
+#define CCE_PRINT 280
+#define CCE_PUNCT 281
+#define CCE_SPACE 282
+#define CCE_UPPER 283
+#define CCE_XDIGIT 284
+#define CCE_NEG_ALNUM 285
+#define CCE_NEG_ALPHA 286
+#define CCE_NEG_BLANK 287
+#define CCE_NEG_CNTRL 288
+#define CCE_NEG_DIGIT 289
+#define CCE_NEG_GRAPH 290
+#define CCE_NEG_LOWER 291
+#define CCE_NEG_PRINT 292
+#define CCE_NEG_PUNCT 293
+#define CCE_NEG_SPACE 294
+#define CCE_NEG_UPPER 295
+#define CCE_NEG_XDIGIT 296
+#define CCL_OP_UNION 297
+#define CCL_OP_DIFF 298
+#define BEGIN_REPEAT_POSIX 299
+#define END_REPEAT_POSIX 300
+#define BEGIN_REPEAT_FLEX 301
+#define END_REPEAT_FLEX 302
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+extern YYSTYPE yylval;
+
+
diff --git a/usr.bin/lex/initscan.c b/usr.bin/lex/initscan.c
index a88c7631231..e7ede080592 100644
--- a/usr.bin/lex/initscan.c
+++ b/usr.bin/lex/initscan.c
@@ -1,70 +1,114 @@
-/* $OpenBSD: initscan.c,v 1.14 2013/11/04 17:03:32 millert Exp $ */
+/* $OpenBSD: initscan.c,v 1.15 2015/11/19 19:43:40 tedu Exp $ */
-#line 2 "scan.c"
-/* A lexical scanner generated by flex */
+#line 3 "scan.c"
-/* Scanner skeleton version:
- * $Header: /cvs/OpenBSD/src/usr.bin/lex/initscan.c,v 1.14 2013/11/04 17:03:32 millert Exp $
- */
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+/* end standard C headers. */
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
#endif
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
-#ifdef __cplusplus
+#endif /* ! C99 */
-#include <stdlib.h>
-#include <unistd.h>
+#endif /* ! FLEXINT_H */
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
+#ifdef __cplusplus
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
-#ifdef __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
-#define YY_USE_PROTOS
#define YY_USE_CONST
-#endif /* __STDC__ */
+#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
/* Returned upon end-of-file. */
#define YY_NULL 0
@@ -79,71 +123,71 @@
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
-#define BEGIN yy_start = 1 + 2 *
+#define BEGIN (yy_start) = 1 + 2 *
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
-#define YY_START ((yy_start - 1) / 2)
+#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
+#define YY_NEW_FILE yyrestart(yyin )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
+#endif
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
-extern int yyleng;
extern FILE *yyin, *yyout;
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator). This
- * avoids problems with code like:
- *
- * if ( condition_holds )
- * yyless( 5 );
- * else
- * do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
+ #define YY_LESS_LINENO(n)
+ #define YY_LINENO_REWIND_TO(ptr)
+
+/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
do \
{ \
/* Undo effects of setting up yytext. */ \
- *yy_cp = yy_hold_char; \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
YY_DO_BEFORE_ACTION; /* set up yytext again */ \
} \
while ( 0 )
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
+#define unput(c) yyunput( c, (yytext_ptr) )
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
{
FILE *yy_input_file;
@@ -159,7 +203,7 @@ struct yy_buffer_state
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
- int yy_n_chars;
+ yy_size_t yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
@@ -180,12 +224,16 @@ struct yy_buffer_state
*/
int yy_at_bol;
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
int yy_fill_buffer;
int yy_buffer_status;
+
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
/* When an EOF's been seen but there's still some text to process
@@ -199,28 +247,38 @@ struct yy_buffer_state
* just pointing yyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
+
};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-static YY_BUFFER_STATE yy_current_buffer = 0;
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
*/
-#define YY_CURRENT_BUFFER yy_current_buffer
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
-
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-
-
-int yyleng;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1; /* whether we need to initialize */
+static int yy_init = 0; /* whether we need to initialize */
static int yy_start = 0; /* start state number */
/* Flag which is used to allow yywrap()'s to do buffer switches
@@ -228,169 +286,373 @@ static int yy_start = 0; /* start state number */
*/
static int yy_did_buffer_switch_on_eof;
-void yyrestart YY_PROTO(( FILE *input_file ));
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
-static void yy_flex_free YY_PROTO(( void * ));
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_at_bol = at_bol; \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
typedef unsigned char YY_CHAR;
+
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
extern char *yytext;
#define yytext_ptr yytext
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
*/
#define YY_DO_BEFORE_ACTION \
- yytext_ptr = yy_bp; \
- yyleng = (int) (yy_cp - yy_bp); \
- yy_hold_char = *yy_cp; \
+ (yytext_ptr) = yy_bp; \
+ (yytext_ptr) -= (yy_more_len); \
+ yyleng = (size_t) (yy_cp - (yytext_ptr)); \
+ (yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
- yy_c_buf_p = yy_cp;
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 251
+#define YY_END_OF_BUFFER 252
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_acclist[1223] =
+ { 0,
+ 248, 248, 252, 250, 251, 9, 250, 251, 20, 250,
+ 251, 250, 251, 18, 250, 251, 1, 9, 250, 251,
+ 19, 20, 250, 251, 250, 251, 250, 251, 250, 251,
+ 250, 251, 17, 18, 250, 251, 164, 250, 251, 149,
+ 164, 250, 251, 150, 250, 251, 164, 250, 251, 142,
+ 164, 250, 251, 164, 250, 251, 161, 163, 164, 250,
+ 251, 162, 163, 164, 250, 251, 163, 164, 250, 251,
+ 163, 164, 250, 251, 164, 250, 251, 164, 250, 251,
+ 164, 250, 251, 163, 164, 250, 251, 148, 149, 164,
+ 250, 251, 138, 150, 250, 251, 164, 250, 251, 164,
+
+ 250, 251, 140, 164, 250, 251, 141, 164, 250, 251,
+ 136, 250, 251, 137, 250, 251, 136, 250, 251, 135,
+ 136, 250, 251, 134, 136, 250, 251, 135, 136, 250,
+ 251, 248, 249, 250, 251, 248, 249, 250, 251, 249,
+ 250, 251, 249, 250, 251, 41, 250, 251, 42, 250,
+ 251, 41, 250, 251, 41, 250, 251, 41, 250, 251,
+ 41, 250, 251, 41, 250, 251, 41, 250, 251, 50,
+ 250, 251, 49, 250, 251, 51, 250, 251, 250, 251,
+ 170, 250, 251, 170, 250, 251, 165, 250, 251, 170,
+ 250, 251, 166, 170, 250, 251, 167, 170, 250, 251,
+
+ 169, 170, 250, 251, 171, 250, 251, 219, 250, 251,
+ 220, 250, 251, 219, 250, 251, 217, 219, 250, 251,
+ 216, 219, 250, 251, 218, 219, 250, 251, 172, 250,
+ 251, 174, 250, 251, 172, 250, 251, 173, 250, 251,
+ 172, 250, 251, 186, 250, 251, 186, 250, 251, 186,
+ 250, 251, 186, 250, 251, 188, 190, 250, 251, 190,
+ 250, 251, 188, 190, 250, 251, 188, 190, 250, 251,
+ 188, 190, 250, 251, 188, 190, 250, 251, 189, 190,
+ 250, 251, 233, 239, 250, 251, 238, 250, 251, 233,
+ 239, 250, 251, 237, 239, 250, 251, 239, 250, 251,
+
+ 239, 250, 251, 235, 239, 250, 251, 235, 239, 250,
+ 251, 235, 239, 250, 251, 234, 239, 250, 251, 234,
+ 239, 250, 251, 229, 239, 250, 251, 230, 239, 250,
+ 251, 250, 251, 131, 250, 251, 250, 251, 25, 250,
+ 251, 26, 250, 251, 25, 250, 251, 22, 250, 251,
+ 25, 250, 251, 25, 250, 251, 240, 244, 250, 251,
+ 242, 250, 251, 240, 244, 250, 251, 243, 244, 250,
+ 251, 244, 250, 251, 227, 250, 251, 227, 250, 251,
+ 228, 250, 251, 227, 250, 251, 227, 250, 251, 227,
+ 250, 251, 227, 250, 251, 227, 250, 251, 227, 250,
+
+ 251, 227, 250, 251, 130, 250, 251, 53, 130, 250,
+ 251, 52, 250, 251, 130, 250, 251, 130, 250, 251,
+ 130, 250, 251, 130, 250, 251, 54, 130, 250, 251,
+ 130, 250, 251, 130, 250, 251, 130, 250, 251, 130,
+ 250, 251, 130, 250, 251, 130, 250, 251, 130, 250,
+ 251, 130, 250, 251, 130, 250, 251, 130, 250, 251,
+ 130, 250, 251, 130, 250, 251, 130, 250, 251, 130,
+ 250, 251, 130, 250, 251, 130, 250, 251, 130, 250,
+ 251, 130, 250, 251, 130, 250, 251, 130, 250, 251,
+ 130, 250, 251, 37, 250, 251, 34, 250, 251, 37,
+
+ 250, 251, 35, 37, 250, 251, 48, 250, 251, 45,
+ 250, 251, 250, 251, 48, 250, 251, 48, 250, 251,
+ 44, 250, 251, 43, 250, 251, 176, 250, 251, 175,
+ 250, 251, 177, 250, 251, 178, 250, 251, 179, 250,
+ 251, 180, 250, 251, 181, 250, 251, 182, 250, 251,
+ 183, 250, 251, 32, 250, 251, 33, 250, 251, 32,
+ 250, 251, 31, 250, 251, 29, 250, 251, 30, 250,
+ 251, 29, 250, 251, 28, 250, 251, 9, 20, 18,
+ 1, 9, 19, 20, 16, 10, 16, 4, 16, 5,
+ 2, 17, 18, 149, 150, 144, 160, 158, 154, 154,
+
+ 245, 245, 245, 143, 148, 149, 138, 150, 140, 141,
+ 153, 139, 137, 135, 134, 134, 132, 135, 133, 135,
+ 248, 248, 246, 247, 42, 39, 40, 50, 49, 51,
+ 165, 165, 168, 169, 220, 216, 174, 184, 185, 190,
+ 187, 233, 238, 236, 222, 235, 235, 235, 231, 232,
+ 131, 26, 21, 23, 24, 240, 242, 241, 228, 221,
+ 225, 226, 53, 52, 129, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 55, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 36, 35, 45,
+
+ 46, 47, 32, 33, 30, 27, 16, 10, 16, 14,
+ 4, 16, 5, 6, 145, 146, 159, 154, 154, 154,
+ 154, 154, 245, 245, 156, 155, 157, 139, 145, 147,
+ 153, 132, 135, 133, 135, 38, 235, 235, 221, 130,
+ 130, 130, 130, 130, 130, 130, 67, 130, 130, 130,
+ 130, 72, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 14, 15, 4,
+ 8, 16, 5, 154, 154, 154, 154, 154, 154, 154,
+
+ 245, 157, 235, 235, 56, 57, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 73, 130, 74,
+ 130, 130, 130, 130, 130, 79, 130, 130, 130, 130,
+ 130, 130, 130, 130, 84, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 93, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 15, 8, 16, 8,
+ 16, 8, 16, 154, 154, 154, 154, 154, 154, 154,
+ 215, 235, 235, 58, 130, 130, 130, 60, 130, 130,
+ 64, 130, 130, 130, 130, 130, 70, 130, 130, 130,
+ 130, 75, 130, 130, 130, 130, 130, 130, 130, 130,
+
+ 130, 130, 130, 130, 87, 130, 130, 130, 130, 130,
+ 91, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 3, 8, 16, 7, 8, 16, 154, 154,
+ 154, 223, 224, 223, 235, 224, 235, 130, 130, 130,
+ 63, 130, 130, 130, 130, 130, 130, 130, 130, 126,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 124,
+ 130, 130, 86, 130, 130, 89, 130, 130, 90, 130,
+ 130, 130, 130, 105, 130, 130, 95, 130, 130, 96,
+ 130, 12, 13, 152, 151, 152, 130, 130, 130, 130,
+ 130, 130, 130, 68, 130, 130, 71, 130, 130, 130,
+
+ 130, 130, 130, 130, 123, 130, 130, 83, 130, 130,
+ 130, 88, 130, 130, 92, 130, 103, 130, 125, 130,
+ 130, 130, 151, 130, 130, 130, 130, 130, 130, 130,
+ 69, 130, 130, 130, 130, 130, 80, 130, 130, 130,
+ 130, 130, 130, 130, 114, 94, 130, 130, 115, 11,
+ 191, 215, 192, 215, 193, 215, 194, 215, 195, 215,
+ 196, 215, 197, 215, 198, 215, 199, 215, 200, 215,
+ 201, 215, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 85, 130, 130, 130,
+ 116, 104, 130, 117, 202, 215, 203, 215, 204, 215,
+
+ 205, 215, 206, 215, 207, 215, 208, 215, 209, 215,
+ 210, 215, 211, 215, 212, 215, 213, 215, 130, 130,
+ 130, 130, 130, 130, 130, 122, 130, 130, 130, 77,
+ 130, 130, 130, 130, 130, 130, 110, 120, 118, 111,
+ 121, 119, 214, 215, 130, 130, 130, 130, 130, 130,
+ 130, 126, 130, 76, 130, 130, 82, 130, 130, 127,
+ 130, 130, 106, 108, 107, 109, 130, 130, 130, 65,
+ 130, 130, 130, 130, 130, 78, 130, 130, 112, 113,
+ 98, 99, 130, 130, 130, 130, 130, 130, 130, 128,
+ 130, 97, 101, 130, 130, 130, 130, 130, 68, 130,
+
+ 130, 100, 102, 130, 130, 62, 130, 66, 130, 130,
+ 130, 130, 61, 130, 69, 130, 130, 130, 81, 130,
+ 59, 130
+ } ;
-#define YY_NUM_RULES 165
-#define YY_END_OF_BUFFER 166
-static yyconst short int yy_accept[769] =
+static yyconst flex_int16_t yy_accept[1108] =
{ 0,
- 0, 0, 0, 0, 87, 87, 163, 163, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 166, 164,
- 7, 18, 164, 16, 1, 17, 164, 164, 164, 164,
- 15, 108, 100, 101, 108, 93, 108, 107, 108, 108,
- 108, 107, 99, 89, 108, 108, 91, 92, 87, 88,
- 87, 86, 85, 86, 86, 163, 163, 28, 29, 28,
- 28, 28, 28, 28, 28, 31, 30, 32, 31, 113,
- 109, 110, 112, 114, 141, 142, 141, 139, 138, 140,
-
- 115, 117, 115, 116, 115, 120, 120, 120, 120, 122,
- 124, 122, 122, 122, 122, 123, 151, 155, 151, 154,
- 156, 156, 152, 152, 152, 149, 150, 164, 82, 164,
- 21, 22, 21, 20, 157, 159, 157, 160, 161, 147,
- 147, 148, 147, 147, 147, 147, 147, 147, 147, 81,
- 34, 33, 81, 81, 81, 81, 35, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 26, 23, 26, 24,
- 7, 18, 0, 16, 1, 17, 0, 0, 0, 14,
- 8, 0, 0, 0, 0, 4, 5, 0, 2, 15,
-
- 100, 101, 0, 0, 0, 95, 0, 0, 105, 105,
- 0, 162, 162, 162, 94, 0, 99, 89, 0, 0,
- 0, 91, 92, 104, 90, 0, 87, 88, 86, 85,
- 85, 83, 84, 163, 163, 28, 29, 28, 28, 28,
- 28, 31, 30, 32, 111, 112, 142, 138, 117, 0,
- 118, 119, 124, 121, 151, 155, 0, 153, 0, 144,
- 152, 152, 152, 0, 82, 0, 21, 22, 21, 19,
- 157, 159, 158, 147, 147, 147, 148, 143, 147, 147,
- 147, 34, 33, 0, 80, 0, 0, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
-
- 81, 81, 81, 36, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 0, 25, 24, 0, 14, 8,
- 0, 12, 0, 0, 0, 0, 0, 4, 5, 0,
- 6, 0, 96, 0, 97, 0, 0, 105, 105, 0,
- 105, 105, 105, 162, 162, 0, 106, 90, 98, 0,
- 104, 0, 83, 84, 28, 28, 28, 27, 28, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 152, 152, 143, 143, 147, 147, 0, 0, 81,
- 81, 81, 81, 81, 44, 81, 81, 81, 49, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
-
- 81, 81, 81, 81, 81, 81, 81, 81, 0, 81,
- 81, 81, 81, 0, 0, 0, 12, 0, 0, 0,
- 0, 0, 0, 4, 5, 0, 105, 105, 105, 105,
- 105, 105, 162, 0, 0, 28, 28, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 152, 152, 147, 147, 37, 38, 81, 81, 81, 81,
- 81, 81, 81, 81, 50, 51, 81, 81, 81, 55,
- 81, 81, 81, 81, 81, 81, 60, 81, 81, 81,
- 81, 81, 81, 67, 0, 0, 0, 81, 81, 81,
- 81, 0, 13, 0, 0, 0, 0, 0, 0, 105,
-
- 105, 105, 105, 105, 105, 0, 0, 28, 28, 137,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 152, 152, 147, 147, 39, 81, 41, 81,
- 43, 81, 81, 81, 47, 81, 52, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 62, 81, 81, 65,
- 81, 0, 0, 0, 0, 81, 81, 81, 81, 3,
- 0, 0, 0, 0, 105, 105, 105, 0, 0, 28,
- 28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 145, 146, 145, 146, 81, 42, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
-
- 81, 78, 61, 81, 64, 81, 0, 0, 0, 0,
- 81, 81, 69, 70, 0, 10, 0, 11, 0, 103,
- 0, 102, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 81, 81, 81, 45, 81, 48,
- 81, 81, 81, 81, 77, 81, 59, 63, 66, 0,
- 0, 0, 0, 79, 81, 0, 102, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
- 81, 81, 46, 81, 81, 56, 81, 81, 0, 0,
- 0, 0, 68, 0, 9, 0, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 0, 81, 81,
-
- 81, 81, 81, 81, 81, 0, 0, 0, 0, 0,
- 136, 81, 81, 81, 81, 54, 81, 81, 0, 0,
- 0, 0, 0, 0, 81, 81, 81, 53, 81, 58,
- 0, 0, 0, 0, 0, 0, 81, 81, 81, 81,
- 72, 0, 0, 0, 0, 73, 81, 81, 81, 81,
- 71, 0, 75, 0, 81, 81, 81, 74, 76, 81,
- 81, 81, 81, 81, 81, 57, 40, 0
+ 1, 1, 1, 1, 1, 1, 1, 2, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
+ 6, 9, 12, 14, 17, 21, 25, 27, 29, 31,
+ 33, 37, 40, 44, 47, 50, 54, 57, 62, 67,
+ 71, 75, 78, 81, 84, 88, 93, 97, 100, 103,
+ 107, 111, 114, 117, 120, 124, 128, 132, 136, 140,
+ 143, 146, 149, 152, 155, 158, 161, 164, 167, 170,
+
+ 173, 176, 179, 181, 184, 187, 190, 193, 197, 201,
+ 205, 208, 211, 214, 217, 221, 225, 229, 232, 235,
+ 238, 241, 244, 247, 250, 253, 256, 260, 263, 267,
+ 271, 275, 279, 283, 287, 290, 294, 298, 301, 304,
+ 308, 312, 316, 320, 324, 328, 332, 334, 337, 339,
+ 342, 345, 348, 351, 354, 357, 361, 364, 368, 372,
+ 375, 378, 381, 384, 387, 390, 393, 396, 399, 402,
+ 405, 408, 412, 415, 418, 421, 424, 427, 431, 434,
+ 437, 440, 443, 446, 449, 452, 455, 458, 461, 464,
+ 467, 470, 473, 476, 479, 482, 485, 488, 491, 494,
+
+ 497, 500, 503, 507, 510, 513, 515, 518, 521, 524,
+ 527, 530, 533, 536, 539, 542, 545, 548, 551, 554,
+ 557, 560, 563, 566, 569, 572, 575, 578, 579, 580,
+ 580, 581, 583, 585, 585, 585, 585, 586, 588, 588,
+ 588, 588, 588, 589, 590, 591, 591, 592, 594, 595,
+ 596, 596, 596, 596, 597, 597, 598, 599, 599, 600,
+ 601, 601, 602, 603, 604, 604, 604, 605, 605, 607,
+ 609, 609, 609, 609, 610, 611, 612, 613, 613, 614,
+ 615, 616, 617, 619, 621, 622, 623, 624, 625, 626,
+ 626, 626, 627, 628, 628, 629, 630, 631, 631, 632,
+
+ 632, 633, 634, 635, 636, 637, 638, 638, 639, 640,
+ 641, 642, 643, 644, 644, 645, 645, 646, 647, 648,
+ 649, 650, 651, 651, 652, 652, 653, 654, 655, 656,
+ 657, 658, 659, 659, 659, 660, 661, 662, 663, 664,
+ 665, 665, 666, 666, 666, 667, 668, 669, 670, 671,
+ 672, 673, 674, 675, 676, 677, 678, 679, 680, 681,
+ 682, 683, 684, 685, 686, 687, 688, 689, 690, 691,
+ 692, 693, 694, 695, 696, 697, 698, 698, 699, 700,
+ 701, 702, 703, 704, 705, 706, 707, 707, 708, 710,
+ 710, 711, 711, 711, 711, 711, 711, 712, 713, 714,
+
+ 714, 715, 715, 716, 716, 717, 717, 718, 718, 719,
+ 720, 720, 721, 722, 723, 724, 725, 726, 727, 727,
+ 728, 730, 731, 731, 732, 732, 734, 736, 736, 736,
+ 736, 737, 737, 737, 737, 737, 737, 737, 737, 737,
+ 737, 737, 737, 737, 737, 738, 739, 740, 740, 740,
+ 741, 742, 743, 744, 745, 746, 747, 749, 750, 751,
+ 752, 754, 755, 756, 757, 758, 759, 760, 761, 762,
+ 763, 764, 765, 766, 767, 768, 769, 770, 771, 772,
+ 773, 774, 775, 776, 777, 778, 779, 780, 781, 782,
+ 783, 784, 785, 786, 787, 788, 788, 788, 788, 788,
+
+ 790, 790, 790, 790, 790, 790, 790, 791, 793, 794,
+ 794, 795, 796, 797, 798, 799, 800, 801, 802, 803,
+ 803, 803, 803, 803, 803, 803, 803, 803, 803, 803,
+ 803, 803, 803, 803, 803, 803, 803, 803, 803, 803,
+ 803, 803, 803, 803, 803, 803, 804, 805, 806, 807,
+ 808, 809, 810, 811, 812, 813, 814, 815, 816, 817,
+ 818, 820, 822, 823, 824, 825, 826, 828, 829, 830,
+ 831, 832, 833, 834, 835, 837, 838, 839, 840, 841,
+ 842, 843, 844, 845, 846, 848, 849, 850, 851, 852,
+ 853, 854, 855, 856, 857, 857, 857, 857, 857, 858,
+
+ 858, 858, 858, 858, 858, 860, 862, 864, 864, 865,
+ 866, 867, 868, 869, 870, 871, 871, 871, 871, 871,
+ 872, 872, 872, 872, 872, 872, 872, 872, 872, 872,
+ 872, 872, 872, 872, 872, 872, 872, 872, 872, 872,
+ 872, 872, 872, 872, 873, 874, 876, 877, 878, 880,
+ 881, 883, 884, 885, 886, 887, 889, 890, 891, 892,
+ 894, 895, 896, 897, 898, 899, 900, 901, 902, 903,
+ 904, 905, 907, 908, 909, 910, 911, 913, 914, 915,
+ 916, 917, 918, 919, 920, 921, 922, 923, 923, 923,
+ 923, 923, 924, 924, 924, 924, 926, 927, 929, 929,
+
+ 930, 931, 932, 932, 932, 933, 934, 934, 934, 934,
+ 934, 934, 934, 934, 934, 934, 934, 934, 934, 934,
+ 934, 934, 934, 934, 934, 934, 934, 934, 934, 934,
+ 934, 936, 938, 939, 940, 941, 943, 944, 945, 946,
+ 947, 948, 949, 950, 952, 953, 954, 955, 956, 957,
+ 958, 959, 960, 962, 963, 965, 966, 968, 969, 971,
+ 972, 973, 974, 976, 976, 977, 979, 980, 980, 982,
+ 982, 982, 982, 982, 982, 983, 983, 984, 984, 985,
+ 985, 987, 987, 987, 987, 987, 987, 987, 987, 987,
+ 987, 987, 987, 987, 987, 987, 987, 987, 987, 987,
+
+ 987, 987, 987, 987, 987, 987, 988, 989, 990, 991,
+ 992, 993, 994, 996, 997, 999, 1000, 1001, 1002, 1003,
+ 1004, 1005, 1007, 1008, 1010, 1011, 1012, 1014, 1015, 1017,
+ 1019, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1022, 1023,
+ 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1025, 1026, 1027, 1028, 1029,
+ 1030, 1031, 1033, 1034, 1035, 1036, 1037, 1039, 1040, 1041,
+ 1042, 1043, 1044, 1045, 1045, 1045, 1046, 1046, 1046, 1046,
+
+ 1046, 1046, 1046, 1048, 1049, 1049, 1049, 1050, 1050, 1050,
+ 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1051, 1051, 1053,
+ 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080,
+ 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1089, 1090, 1091,
+ 1091, 1091, 1091, 1091, 1091, 1091, 1092, 1092, 1094, 1094,
+ 1094, 1094, 1094, 1094, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115,
+ 1117, 1119, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126,
+
+ 1128, 1129, 1130, 1132, 1133, 1134, 1135, 1136, 1137, 1137,
+ 1137, 1138, 1138, 1139, 1140, 1141, 1141, 1141, 1141, 1142,
+ 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1145, 1146, 1147,
+ 1148, 1149, 1150, 1151, 1152, 1154, 1156, 1157, 1159, 1160,
+ 1162, 1163, 1164, 1165, 1165, 1166, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1168, 1169, 1170, 1172, 1173, 1174,
+ 1175, 1176, 1178, 1179, 1180, 1181, 1182, 1182, 1182, 1182,
+ 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192,
+ 1193, 1193, 1194, 1194, 1195, 1196, 1197, 1198, 1199, 1201,
+ 1202, 1203, 1204, 1205, 1206, 1208, 1210, 1211, 1212, 1213,
+
+ 1215, 1217, 1218, 1219, 1221, 1223, 1223
} ;
-static yyconst int yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
+ 4, 4, 5, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 5, 6, 7, 8, 1, 9, 10,
- 10, 11, 12, 13, 14, 10, 15, 16, 16, 16,
- 16, 16, 16, 16, 17, 18, 19, 20, 1, 21,
- 22, 23, 10, 1, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 47,
- 26, 27, 28, 29, 30, 1, 31, 32, 33, 34,
-
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 47, 56, 57, 58, 1, 1, 1, 1, 1,
+ 1, 2, 1, 6, 7, 8, 9, 1, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 19, 19,
+ 19, 19, 19, 19, 20, 21, 22, 23, 1, 24,
+ 25, 26, 27, 1, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 44,
+ 53, 54, 55, 56, 57, 1, 58, 59, 60, 61,
+
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 44, 74, 75, 76, 77, 78, 79, 80,
+ 81, 44, 82, 83, 84, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -407,880 +669,1250 @@ static yyconst int yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst int yy_meta[59] =
+static yyconst flex_int32_t yy_meta[85] =
{ 0,
- 1, 1, 2, 1, 3, 1, 1, 1, 4, 1,
- 5, 6, 1, 7, 4, 8, 8, 8, 8, 1,
- 1, 1, 1, 9, 10, 1, 11, 12, 1, 13,
- 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 4, 1, 16
+ 1, 1, 2, 1, 3, 4, 1, 1, 1, 5,
+ 1, 6, 1, 7, 1, 8, 1, 5, 9, 9,
+ 9, 9, 10, 1, 1, 1, 1, 11, 11, 11,
+ 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 13, 14, 15, 1, 16, 11, 11, 11,
+ 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 5, 1, 17
} ;
-static yyconst short int yy_base[858] =
+static yyconst flex_int16_t yy_base[1201] =
{ 0,
- 0, 58, 115, 172, 120, 129, 2712, 2711, 230, 2705,
- 136, 141, 288, 0, 2683, 2682, 144, 151, 185, 191,
- 178, 188, 344, 347, 375, 0, 125, 131, 147, 216,
- 431, 434, 461, 0, 519, 0, 205, 349, 2710, 2716,
- 353, 2716, 2706, 0, 360, 2716, 2705, 144, 570, 2696,
- 0, 2716, 577, 2716, 2703, 2716, 438, 2716, 2684, 126,
- 149, 427, 591, 2716, 2701, 141, 2682, 2716, 0, 2716,
- 2699, 0, 2699, 2697, 155, 2696, 2716, 0, 2716, 2695,
- 2716, 0, 2662, 2641, 2637, 0, 2692, 2716, 2690, 2716,
- 2716, 2663, 0, 2716, 2716, 2716, 2688, 2716, 431, 2716,
-
- 2716, 2716, 2687, 2716, 567, 2716, 2669, 571, 164, 2716,
- 2716, 2685, 0, 2667, 573, 2716, 0, 2716, 2683, 2716,
- 573, 2674, 0, 2649, 2628, 2716, 2716, 222, 2716, 356,
- 448, 2716, 450, 2667, 0, 2716, 2678, 2716, 0, 0,
- 198, 2716, 2677, 2621, 2716, 2667, 0, 2642, 2621, 2716,
- 2673, 2716, 2671, 2668, 2640, 2639, 2716, 544, 2639, 579,
- 2634, 2635, 318, 0, 2623, 2631, 424, 562, 2614, 587,
- 2629, 2613, 2618, 2626, 2629, 2604, 2716, 2716, 2653, 612,
- 634, 2716, 2654, 0, 637, 2716, 2653, 600, 2616, 0,
- 0, 641, 647, 651, 669, 0, 0, 453, 2716, 0,
-
- 672, 2716, 2651, 2597, 605, 2716, 2649, 2616, 620, 657,
- 645, 2716, 662, 0, 2716, 2592, 688, 2716, 2646, 2592,
- 2636, 2625, 2716, 0, 2716, 2610, 0, 2716, 0, 0,
- 2642, 0, 0, 2640, 2716, 0, 2716, 0, 2602, 2598,
- 745, 0, 2638, 2716, 2716, 0, 2716, 688, 2716, 773,
- 2716, 2716, 2716, 2716, 0, 2716, 673, 2716, 0, 2716,
- 0, 2599, 2595, 690, 2716, 698, 707, 2716, 709, 2716,
- 0, 2716, 2716, 0, 596, 2579, 2716, 827, 0, 2596,
- 2592, 2632, 2716, 2628, 2716, 2593, 2592, 0, 642, 2582,
- 563, 2617, 2579, 620, 2578, 2577, 2583, 669, 2570, 2584,
-
- 2572, 0, 2569, 2716, 2570, 2571, 2579, 2582, 685, 125,
- 2570, 2567, 2566, 688, 2608, 2716, 716, 2568, 0, 0,
- 720, 2716, 2608, 884, 2562, 2559, 2569, 0, 0, 723,
- 2716, 739, 2716, 805, 2716, 808, 2562, 787, 869, 876,
- 930, 881, 973, 800, 0, 2548, 2716, 2716, 2716, 2570,
- 0, 2559, 0, 0, 2568, 2557, 0, 2716, 0, 1009,
- 2581, 678, 870, 871, 874, 879, 913, 992, 974, 1013,
- 885, 2565, 2554, 0, 1067, 2563, 2552, 2546, 2545, 2557,
- 2562, 2561, 2550, 2557, 0, 2554, 2537, 2556, 0, 2536,
- 2543, 2533, 2548, 2568, 2537, 2549, 2544, 2542, 2541, 2532,
-
- 2539, 2540, 2538, 2539, 578, 2520, 2538, 2525, 860, 2526,
- 2528, 2521, 2517, 2529, 817, 1044, 2716, 822, 1095, 914,
- 2532, 2523, 2517, 0, 0, 2524, 1102, 1025, 1142, 2539,
- 1028, 1163, 2716, 2513, 2521, 2523, 2507, 0, 2526, 1058,
- 891, 1014, 1019, 894, 1038, 1080, 1072, 1086, 1083, 1081,
- 2520, 2504, 2518, 2502, 2716, 2716, 2505, 2493, 2492, 2495,
- 2507, 1148, 2507, 2492, 0, 0, 2492, 2493, 2507, 0,
- 2525, 2490, 2498, 2522, 2485, 2495, 0, 2500, 2491, 2487,
- 2479, 2479, 2483, 0, 875, 2494, 2481, 2494, 2480, 2475,
- 2491, 2519, 2716, 920, 999, 2465, 2474, 2468, 2494, 2496,
-
- 1105, 1184, 1081, 902, 969, 2479, 2491, 2463, 2477, 2716,
- 165, 1090, 1144, 1143, 1147, 1163, 1095, 1145, 1037, 1085,
- 1150, 1173, 2461, 2475, 2459, 2473, 0, 2458, 0, 2460,
- 0, 1165, 2454, 2469, 0, 2461, 0, 2471, 2410, 2414,
- 2434, 2400, 2393, 2405, 2385, 2382, 0, 2383, 2335, 0,
- 2335, 2330, 2326, 2309, 2278, 2259, 2269, 2268, 2256, 2297,
- 1046, 2238, 2242, 2253, 1179, 1142, 1145, 2247, 2246, 0,
- 0, 1191, 1192, 1172, 1201, 1202, 1204, 1205, 1206, 1207,
- 1209, 1210, 1208, 0, 0, 0, 0, 2254, 0, 2221,
- 2229, 2218, 2208, 2200, 2209, 2198, 2195, 2165, 2168, 2149,
-
- 2132, 0, 0, 2129, 0, 2139, 2143, 2134, 2124, 2137,
- 2117, 2116, 0, 0, 1228, 2716, 1232, 2716, 2111, 2716,
- 2117, 2716, 2115, 2114, 2108, 2107, 2106, 2103, 2102, 2098,
- 2095, 2063, 2047, 1213, 2012, 1986, 1975, 0, 1954, 0,
- 1947, 1950, 1941, 1945, 0, 1942, 0, 0, 0, 1938,
- 1940, 1934, 1905, 0, 1872, 1234, 2716, 1888, 1882, 1881,
- 1864, 1848, 1832, 1828, 1827, 1826, 1823, 1806, 1809, 1784,
- 1787, 1772, 0, 1781, 1786, 0, 1766, 1767, 1759, 1744,
- 1213, 1736, 0, 1236, 2716, 1245, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 1750, 1727, 1720,
-
- 1701, 1687, 1670, 1681, 1667, 1679, 1659, 689, 1658, 1671,
- 2716, 1657, 1627, 1621, 1635, 0, 1603, 1596, 1595, 1608,
- 1602, 1587, 1586, 1583, 1581, 1587, 1555, 0, 1547, 0,
- 1527, 1507, 1520, 1503, 1483, 1482, 1485, 1443, 1440, 1228,
- 2716, 1225, 1224, 1206, 1210, 2716, 1213, 1202, 1018, 948,
- 2716, 945, 2716, 884, 780, 771, 779, 2716, 2716, 689,
- 673, 581, 408, 318, 86, 0, 0, 2716, 1263, 1279,
- 1295, 1311, 1327, 1343, 1359, 1375, 1391, 1407, 1423, 1439,
- 1455, 1471, 1481, 1496, 1505, 1520, 1536, 1545, 1560, 1576,
- 1592, 1608, 1624, 1634, 1649, 1659, 1674, 1690, 1706, 1718,
-
- 1728, 1743, 1759, 1775, 1791, 1807, 1817, 1832, 1843, 1236,
- 1858, 1874, 1890, 1898, 1905, 1920, 1936, 1952, 1968, 1977,
- 1985, 2001, 2017, 2033, 2049, 2065, 2081, 2097, 2113, 2123,
- 2138, 2148, 2155, 2170, 2182, 2192, 2207, 2223, 2239, 2255,
- 2265, 2280, 2291, 2306, 2322, 2338, 2354, 2364, 2373, 2388,
- 2404, 2420, 2429, 2437, 2453, 2469, 2485
+ 0, 84, 167, 250, 171, 184, 174, 179, 192, 233,
+ 196, 200, 334, 0, 3343, 3340, 203, 416, 206, 211,
+ 187, 216, 276, 417, 500, 0, 210, 223, 421, 427,
+ 436, 440, 583, 588, 669, 0, 277, 299, 584, 751,
+ 579, 580, 576, 732, 279, 305, 310, 444, 3378, 3975,
+ 228, 3975, 3371, 0, 322, 3975, 3358, 423, 827, 3328,
+ 0, 3975, 755, 3975, 3337, 3975, 448, 3312, 3975, 3975,
+ 3323, 3291, 222, 408, 444, 764, 3975, 3311, 230, 3289,
+ 3975, 3975, 3975, 3306, 0, 3306, 164, 3304, 3975, 3236,
+ 3217, 3975, 3975, 3266, 239, 119, 3215, 3212, 3180, 0,
+
+ 3248, 3975, 3243, 3975, 476, 3227, 3222, 3975, 3168, 0,
+ 3975, 3975, 3975, 3203, 3975, 464, 3975, 3975, 3975, 3186,
+ 3975, 742, 3975, 3161, 751, 180, 3975, 3975, 3171, 0,
+ 3149, 757, 3975, 0, 3975, 3149, 3975, 200, 3138, 0,
+ 429, 241, 3097, 3092, 3975, 3975, 306, 3975, 323, 3975,
+ 3975, 3126, 3108, 3072, 3069, 0, 3975, 3115, 3975, 0,
+ 3975, 446, 3975, 3114, 3031, 3098, 435, 371, 3045, 3026,
+ 3975, 3076, 3975, 3074, 3070, 439, 440, 3975, 578, 751,
+ 586, 562, 735, 752, 0, 572, 577, 588, 786, 749,
+ 396, 809, 727, 582, 747, 753, 764, 769, 580, 3975,
+
+ 3975, 3067, 588, 3975, 3975, 3053, 3002, 2996, 3975, 3975,
+ 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 0,
+ 3975, 3046, 3975, 3975, 3975, 3018, 2986, 837, 3975, 2998,
+ 0, 847, 3975, 2997, 817, 777, 0, 0, 891, 903,
+ 912, 924, 0, 774, 0, 451, 3975, 0, 858, 3975,
+ 2996, 2914, 472, 3975, 2974, 2953, 3975, 791, 236, 822,
+ 899, 3975, 275, 0, 2873, 2872, 3975, 2871, 949, 3975,
+ 2949, 2850, 2918, 2906, 3975, 0, 3975, 796, 3975, 0,
+ 0, 2925, 0, 0, 2597, 3975, 3975, 3975, 3975, 795,
+ 794, 3975, 3975, 484, 0, 2597, 3975, 877, 2596, 2594,
+
+ 2594, 3975, 0, 3975, 918, 3975, 1005, 3975, 3975, 3975,
+ 3975, 0, 3975, 611, 3975, 0, 3975, 0, 853, 851,
+ 3975, 3975, 490, 3975, 608, 3975, 3975, 3975, 3975, 0,
+ 3975, 3975, 596, 2510, 3975, 0, 3975, 3975, 2588, 3975,
+ 2581, 3975, 894, 906, 0, 911, 717, 727, 923, 728,
+ 2571, 882, 930, 889, 902, 916, 917, 940, 928, 923,
+ 940, 933, 0, 932, 3975, 935, 939, 951, 956, 1059,
+ 964, 965, 1052, 955, 957, 1099, 2578, 3975, 1078, 3975,
+ 3975, 3975, 0, 3975, 3975, 3975, 987, 0, 0, 1087,
+ 3975, 2576, 1132, 985, 1046, 1058, 0, 1058, 0, 1009,
+
+ 3975, 1016, 3975, 1057, 3975, 1099, 3975, 1068, 731, 1088,
+ 1095, 1178, 1244, 1280, 988, 0, 3975, 3975, 2492, 1162,
+ 3975, 3975, 1081, 0, 1086, 0, 0, 1098, 1105, 1100,
+ 3975, 1167, 1245, 1246, 1247, 1250, 2539, 1248, 1249, 1258,
+ 1244, 1251, 1259, 1321, 1233, 1224, 0, 1072, 1228, 1243,
+ 1261, 1287, 1298, 1289, 1298, 1287, 0, 1299, 1228, 1308,
+ 0, 1280, 1298, 1307, 1316, 1314, 1316, 2532, 1322, 1337,
+ 1338, 1340, 1342, 1342, 1348, 1353, 1356, 1347, 1357, 1362,
+ 1366, 1358, 1353, 1356, 1377, 1366, 1370, 1371, 1367, 1383,
+ 1384, 1379, 1391, 1392, 1381, 1388, 1397, 1275, 1455, 3975,
+
+ 1439, 1463, 1444, 1415, 1412, 1415, 0, 1409, 0, 1429,
+ 1492, 1558, 1594, 1524, 2449, 1564, 1639, 3975, 3975, 1537,
+ 1556, 1560, 1407, 2427, 1558, 1563, 1559, 1564, 1572, 1584,
+ 1574, 1562, 1615, 1619, 1609, 1625, 1626, 1643, 1614, 1651,
+ 1662, 1658, 1664, 1665, 1616, 1616, 1637, 3975, 3975, 1638,
+ 1631, 2352, 1634, 1641, 1655, 1650, 1677, 1679, 1671, 1689,
+ 0, 0, 1690, 1677, 1681, 1697, 0, 2348, 1684, 1694,
+ 2274, 1686, 1685, 1695, 0, 1692, 1711, 1704, 1703, 1701,
+ 1713, 1703, 1704, 1712, 0, 1717, 1731, 1731, 1719, 1723,
+ 1722, 1741, 1726, 1742, 1734, 1747, 1741, 2241, 3975, 1464,
+
+ 1485, 1729, 1743, 1740, 0, 1721, 1591, 2173, 1585, 2139,
+ 1771, 1807, 1417, 962, 1426, 1755, 2049, 1745, 1769, 3975,
+ 1774, 1782, 1789, 1775, 1796, 1791, 1810, 1800, 1820, 1822,
+ 1821, 1823, 1832, 1831, 1838, 1840, 1853, 1856, 1854, 1855,
+ 1863, 1865, 1861, 1846, 1862, 0, 1853, 1864, 0, 1857,
+ 0, 2008, 1866, 1862, 1869, 0, 1874, 1893, 1870, 0,
+ 1888, 1875, 1886, 1882, 1880, 1878, 1897, 1876, 1882, 1889,
+ 1889, 0, 1904, 1895, 1899, 1919, 0, 1907, 1909, 1908,
+ 1923, 1791, 1924, 1925, 1919, 1747, 1917, 1918, 1918, 1938,
+ 1924, 1726, 1599, 1927, 1937, 1970, 3975, 1702, 1652, 1923,
+
+ 1755, 1941, 1625, 1618, 3975, 3975, 1961, 1977, 1966, 1969,
+ 1956, 1979, 1983, 1986, 1989, 1984, 1992, 1987, 1994, 1990,
+ 1988, 1995, 2007, 2004, 2016, 2022, 1996, 2028, 2018, 2026,
+ 0, 0, 1620, 1990, 2009, 0, 2035, 2020, 2035, 2029,
+ 2024, 2025, 2029, 1589, 2049, 2041, 2052, 2048, 2053, 2054,
+ 2044, 2057, 0, 2064, 0, 2048, 0, 1576, 0, 2064,
+ 2070, 2056, 0, 2096, 2062, 0, 2067, 2108, 0, 1531,
+ 2072, 2078, 1438, 1853, 3975, 2105, 3975, 2068, 3975, 1463,
+ 3975, 1407, 1402, 1348, 1345, 1314, 1307, 1269, 1260, 1256,
+ 1210, 1158, 2106, 2111, 2097, 2118, 2122, 2129, 2125, 2140,
+
+ 2131, 2136, 2141, 2143, 2156, 2131, 2138, 2147, 2101, 2151,
+ 2138, 2153, 0, 2141, 0, 2144, 2165, 2153, 2159, 2158,
+ 2165, 0, 2165, 0, 2167, 2169, 0, 2178, 0, 0,
+ 0, 2183, 2167, 2179, 2210, 2178, 2189, 2188, 2189, 2202,
+ 2186, 2194, 2218, 2196, 2202, 1119, 1114, 2206, 2118, 3975,
+ 1106, 1100, 1081, 1068, 1065, 1061, 1057, 972, 968, 965,
+ 914, 925, 893, 881, 874, 869, 865, 861, 854, 843,
+ 807, 802, 776, 2235, 2212, 2226, 2221, 2227, 2239, 2238,
+ 2228, 0, 2228, 2239, 2242, 2252, 0, 2238, 2244, 2249,
+ 2244, 2258, 2263, 2269, 2255, 3975, 2263, 2265, 2265, 2281,
+
+ 2265, 2262, 0, 2285, 2288, 2274, 3975, 2277, 2280, 2295,
+ 2279, 2280, 2283, 2303, 2283, 2330, 3975, 2335, 3975, 3975,
+ 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 735,
+ 612, 608, 598, 441, 374, 261, 245, 202, 152, 149,
+ 137, 165, 2296, 2303, 2304, 2320, 2326, 2316, 2324, 2329,
+ 2324, 2316, 2319, 2335, 2324, 2327, 0, 2332, 2328, 2327,
+ 2332, 2345, 2348, 2352, 2344, 3975, 2338, 0, 2338, 2343,
+ 2357, 2362, 2357, 3975, 2371, 2356, 2359, 2358, 2380, 3975,
+ 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
+ 3975, 128, 2384, 2382, 2373, 2387, 2376, 2378, 2378, 0,
+
+ 2395, 2396, 0, 2385, 2384, 2405, 2403, 2401, 2405, 2413,
+ 3975, 2401, 3975, 3975, 3975, 2409, 2416, 2404, 3975, 3975,
+ 2400, 2422, 2422, 2414, 2417, 2417, 3975, 2421, 2421, 2418,
+ 2424, 2441, 2442, 2443, 0, 0, 2453, 0, 2436, 0,
+ 2451, 3975, 3975, 2445, 3975, 3975, 2446, 2457, 2445, 2461,
+ 2464, 2462, 2468, 2473, 2466, 2460, 0, 2462, 2459, 2461,
+ 2483, 0, 2463, 3975, 3975, 3975, 2484, 2488, 2476, 2482,
+ 3975, 2495, 2485, 2497, 2495, 2501, 2506, 2493, 0, 3975,
+ 2496, 3975, 2508, 2498, 2506, 2503, 2506, 2505, 0, 2520,
+ 3975, 3975, 2522, 2514, 0, 0, 2529, 2514, 2515, 0,
+
+ 0, 2533, 2539, 0, 0, 3975, 2601, 2618, 2635, 2652,
+ 2669, 2686, 2703, 2720, 2737, 2754, 2771, 2788, 2805, 2822,
+ 2839, 2856, 2873, 2890, 2907, 2917, 2933, 2942, 2958, 2975,
+ 2986, 3002, 3019, 3036, 3053, 3063, 3079, 3096, 3113, 3127,
+ 3137, 3153, 3170, 3187, 3204, 3215, 2009, 3227, 3244, 3254,
+ 3270, 3287, 3294, 3300, 3316, 3326, 3342, 3359, 3376, 2564,
+ 3386, 3403, 3420, 3437, 3454, 3471, 3488, 3505, 3522, 3532,
+ 3548, 3562, 3572, 3588, 3605, 3622, 3639, 3650, 3662, 3679,
+ 3696, 3713, 3730, 3740, 3749, 3765, 3782, 3799, 2571, 3809,
+ 3826, 3843, 3860, 3877, 3885, 3890, 3906, 3923, 3940, 3957
+
} ;
-static yyconst short int yy_def[858] =
+static yyconst flex_int16_t yy_def[1201] =
{ 0,
- 768, 768, 769, 769, 770, 771, 772, 772, 768, 9,
- 773, 773, 768, 13, 774, 774, 775, 775, 776, 776,
- 777, 777, 778, 778, 768, 25, 779, 779, 780, 780,
- 781, 781, 768, 33, 768, 35, 782, 782, 768, 768,
- 768, 768, 768, 783, 768, 768, 768, 768, 784, 768,
- 785, 768, 768, 768, 768, 768, 768, 768, 768, 786,
- 787, 788, 768, 768, 768, 768, 768, 768, 789, 768,
- 789, 790, 791, 790, 790, 792, 768, 793, 768, 793,
- 768, 794, 794, 794, 793, 795, 768, 768, 795, 768,
- 768, 768, 796, 768, 768, 768, 768, 768, 768, 768,
-
- 768, 768, 768, 768, 787, 768, 768, 787, 797, 768,
- 768, 768, 798, 768, 787, 768, 799, 768, 799, 768,
- 800, 768, 801, 801, 801, 768, 768, 802, 768, 802,
- 803, 768, 803, 768, 804, 768, 804, 768, 805, 806,
- 806, 768, 806, 806, 768, 806, 807, 807, 807, 768,
- 768, 768, 768, 808, 768, 768, 768, 809, 809, 809,
- 809, 809, 809, 809, 809, 809, 809, 810, 809, 809,
- 809, 809, 809, 809, 809, 809, 768, 768, 811, 768,
- 768, 768, 768, 783, 768, 768, 768, 768, 768, 812,
- 813, 768, 768, 768, 768, 814, 815, 816, 768, 785,
-
- 768, 768, 768, 768, 817, 768, 768, 768, 818, 818,
- 819, 768, 768, 820, 768, 821, 768, 768, 768, 768,
- 768, 768, 768, 822, 768, 768, 823, 768, 824, 825,
- 825, 826, 827, 828, 768, 829, 768, 830, 830, 830,
- 768, 831, 768, 768, 768, 832, 768, 768, 768, 833,
- 768, 768, 768, 768, 834, 768, 835, 768, 835, 768,
- 836, 836, 836, 837, 768, 837, 838, 768, 838, 768,
- 839, 768, 768, 840, 840, 840, 768, 768, 841, 841,
- 841, 768, 768, 842, 768, 768, 768, 843, 843, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
-
- 843, 843, 843, 768, 843, 843, 843, 843, 843, 843,
- 843, 843, 843, 843, 844, 768, 768, 768, 845, 846,
- 847, 768, 768, 768, 768, 768, 768, 848, 849, 850,
- 768, 850, 768, 851, 768, 851, 768, 852, 852, 852,
- 768, 852, 852, 768, 853, 854, 768, 768, 768, 768,
- 855, 768, 826, 827, 830, 830, 241, 768, 241, 241,
- 833, 833, 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 836, 836, 278, 278, 841, 841, 768, 768, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
-
- 843, 843, 843, 843, 843, 843, 843, 843, 768, 843,
- 843, 843, 843, 768, 847, 847, 768, 847, 847, 768,
- 768, 768, 768, 848, 849, 768, 341, 852, 343, 341,
- 852, 343, 768, 768, 768, 830, 830, 360, 768, 833,
- 833, 833, 833, 833, 833, 833, 833, 833, 833, 833,
- 836, 836, 841, 841, 768, 768, 843, 843, 843, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
- 843, 843, 843, 843, 768, 768, 768, 843, 843, 843,
- 843, 768, 768, 847, 847, 768, 768, 768, 768, 427,
-
- 852, 343, 852, 852, 852, 768, 768, 830, 830, 768,
- 833, 833, 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 833, 836, 836, 841, 841, 843, 843, 843, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
- 843, 768, 768, 768, 768, 843, 843, 843, 843, 768,
- 856, 768, 768, 768, 852, 852, 852, 768, 768, 830,
- 830, 833, 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 833, 833, 836, 836, 841, 841, 843, 843, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
-
- 843, 843, 843, 843, 843, 843, 768, 768, 768, 768,
- 843, 843, 843, 843, 856, 768, 856, 768, 768, 768,
- 768, 768, 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 833, 833, 833, 843, 843, 843, 843, 843, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 843, 768,
- 768, 768, 768, 843, 843, 857, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 833, 843,
- 843, 843, 843, 843, 843, 843, 843, 843, 768, 768,
- 768, 768, 843, 857, 768, 857, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 843, 843,
-
- 843, 843, 843, 843, 843, 768, 768, 768, 768, 768,
- 768, 843, 843, 843, 843, 843, 843, 843, 768, 768,
- 768, 768, 768, 768, 843, 843, 843, 843, 843, 843,
- 768, 768, 768, 768, 768, 768, 843, 843, 843, 843,
- 768, 768, 768, 768, 768, 768, 843, 843, 843, 843,
- 768, 768, 768, 768, 843, 843, 843, 768, 768, 843,
- 843, 843, 843, 843, 843, 843, 843, 0, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
-
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768
+ 1106, 1106, 1107, 1107, 1108, 1109, 1110, 1110, 1111, 1111,
+ 1112, 1112, 1106, 13, 1113, 1113, 1114, 1114, 1115, 1115,
+ 1116, 1116, 1117, 1117, 1106, 25, 1118, 1118, 1119, 1119,
+ 1120, 1120, 1121, 1121, 1106, 35, 1122, 1122, 1123, 1123,
+ 1113, 1113, 1113, 1113, 1124, 1124, 1125, 1125, 1106, 1106,
+ 1106, 1106, 1106, 1126, 1106, 1106, 1106, 1106, 1127, 1106,
+ 1128, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1129, 1130, 1131, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1132, 1133, 1132, 1134, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1135,
+
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1136,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1130, 1106, 1106, 1130, 1137, 1106, 1106, 1106, 1138,
+ 1106, 1130, 1106, 1139, 1106, 1139, 1106, 1140, 1106, 1141,
+ 1141, 1141, 1106, 1106, 1106, 1106, 1142, 1106, 1142, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1143, 1106, 1143, 1106, 1144,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1145, 1106, 1106, 1106, 1146, 1146,
+ 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1147,
+ 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1106,
+
+ 1106, 1148, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1149,
+ 1106, 1149, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1150, 1106, 1106, 1106, 1106, 1106, 1151, 1152, 1106, 1106,
+ 1106, 1106, 1153, 1151, 1154, 1155, 1106, 1156, 1106, 1106,
+ 1106, 1106, 1157, 1106, 1106, 1106, 1106, 1106, 1158, 1158,
+ 1159, 1106, 1106, 1160, 1106, 1106, 1106, 1161, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1162, 1106, 1106, 1106, 1163,
+ 1164, 1164, 1165, 1166, 1167, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1168, 1169, 1106, 1106, 1106, 1106, 1106,
+
+ 1106, 1106, 1170, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1171, 1106, 1172, 1106, 1172, 1106, 1173, 1173, 1173,
+ 1106, 1106, 1174, 1106, 1174, 1106, 1106, 1106, 1106, 1175,
+ 1106, 1106, 1106, 1106, 1106, 1176, 1106, 1106, 1106, 1106,
+ 1177, 1106, 1106, 1106, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1106, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1179, 1106, 1106, 1106,
+ 1106, 1106, 1180, 1106, 1106, 1106, 1106, 1181, 1182, 1183,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1184, 1181, 1185, 1186,
+
+ 1106, 1186, 1106, 1187, 1106, 1187, 1106, 1106, 1188, 1188,
+ 1188, 1106, 1188, 1188, 1106, 1189, 1106, 1106, 1190, 1106,
+ 1106, 1106, 1106, 1191, 1106, 1192, 1193, 1106, 1106, 1194,
+ 1106, 1194, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1196, 1196, 1197, 1106, 1106, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1106, 1106, 1183, 1183, 1106,
+
+ 1183, 1183, 1106, 1106, 1106, 1106, 1184, 1198, 1185, 1106,
+ 1106, 1188, 414, 412, 412, 1188, 414, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1196, 1196, 1106, 1106, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1106, 1106, 1106, 1106, 1106, 1183,
+
+ 1183, 1106, 1106, 1106, 1198, 1198, 1198, 1106, 511, 511,
+ 1188, 414, 1188, 1188, 1188, 1106, 1106, 1106, 1106, 1106,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1196, 1196, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1106, 1106, 1106,
+ 1106, 1106, 1199, 1106, 1106, 1198, 1106, 1198, 1106, 1188,
+
+ 1188, 1188, 1106, 1106, 1106, 1106, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1196, 1196, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1106, 1178, 1178, 1178, 1106, 1178, 1106,
+ 1106, 1106, 1106, 1199, 1106, 1199, 1106, 1106, 1106, 1106,
+ 1106, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+
+ 1195, 1195, 1195, 1195, 1195, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1106, 1106, 1106, 1106, 1106, 1106, 1178, 1178, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1200, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+
+ 1106, 1106, 1178, 1178, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1200, 1106, 1200, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1195, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1178, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1106,
+ 1106, 1106, 1106, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1106, 1106, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+
+ 1178, 1178, 1178, 1178, 1178, 0, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106
+
} ;
-static yyconst short int yy_nxt[2775] =
+static yyconst flex_int16_t yy_nxt[4060] =
{ 0,
- 40, 41, 42, 43, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 44, 44, 40, 40, 40, 40, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 40, 40, 40, 40, 45,
- 46, 47, 40, 48, 40, 49, 40, 40, 40, 40,
- 40, 40, 50, 40, 40, 40, 40, 40, 40, 40,
- 40, 51, 51, 40, 40, 40, 40, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-
- 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 40, 40, 40, 53, 54, 55, 56,
- 767, 57, 70, 71, 58, 58, 58, 129, 130, 58,
- 73, 70, 74, 129, 130, 59, 75, 87, 88, 89,
- 60, 61, 87, 88, 89, 188, 96, 97, 224, 132,
- 133, 210, 211, 96, 97, 404, 98, 134, 405, 99,
- 99, 99, 99, 98, 213, 213, 99, 99, 99, 99,
- 62, 58, 58, 63, 64, 65, 56, 252, 57, 66,
- 40, 58, 58, 58, 439, 189, 58, 102, 103, 104,
- 40, 252, 67, 102, 103, 104, 225, 60, 61, 275,
-
- 68, 100, 214, 107, 108, 276, 109, 178, 100, 179,
- 232, 105, 233, 107, 108, 572, 109, 105, 132, 133,
- 180, 180, 180, 180, 265, 266, 134, 62, 58, 58,
- 78, 78, 79, 80, 78, 78, 78, 78, 78, 78,
- 81, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 82, 82, 78, 78, 78, 78, 82,
+ 50, 51, 52, 50, 53, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 50, 50, 50, 50, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 50, 50, 50, 50, 55, 56, 50, 57, 50,
+ 58, 50, 59, 50, 50, 50, 50, 50, 50, 50,
+
+ 50, 60, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 50, 50, 50, 50,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 50, 50, 50, 63, 64,
+ 291, 65, 66, 83, 67, 84, 89, 68, 69, 70,
+ 70, 89, 1027, 70, 71, 86, 83, 992, 84, 50,
+ 72, 991, 87, 70, 93, 309, 94, 101, 102, 291,
+
+ 103, 101, 102, 990, 103, 113, 989, 114, 119, 315,
+ 120, 121, 148, 119, 149, 120, 121, 115, 50, 73,
+ 74, 116, 116, 116, 116, 148, 90, 149, 91, 228,
+ 229, 90, 230, 91, 309, 93, 95, 94, 276, 124,
+ 125, 99, 126, 96, 97, 283, 98, 284, 75, 70,
+ 70, 76, 77, 316, 78, 66, 988, 67, 79, 122,
+ 68, 69, 70, 70, 122, 95, 70, 71, 124, 125,
+ 290, 126, 96, 80, 260, 261, 70, 95, 128, 201,
+ 129, 221, 202, 222, 96, 97, 117, 98, 410, 411,
+ 223, 130, 320, 415, 415, 203, 203, 203, 203, 987,
+
+ 290, 201, 73, 74, 202, 81, 95, 221, 324, 222,
+ 325, 277, 225, 96, 226, 986, 223, 203, 203, 203,
+ 203, 320, 227, 232, 233, 324, 234, 325, 131, 132,
+ 133, 75, 70, 70, 104, 105, 106, 104, 107, 104,
+ 104, 104, 104, 104, 104, 104, 108, 104, 108, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 109,
+ 104, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 104, 104, 104, 104,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 104, 104, 104, 113, 128,
+ 114, 129, 291, 151, 235, 152, 263, 263, 985, 151,
+ 115, 152, 130, 153, 116, 116, 116, 116, 157, 153,
+ 158, 159, 157, 366, 158, 159, 225, 333, 226, 254,
+ 254, 291, 255, 401, 334, 402, 227, 265, 264, 266,
+ 319, 236, 267, 267, 267, 267, 290, 343, 344, 131,
+ 132, 133, 366, 154, 405, 155, 406, 298, 299, 154,
+ 300, 155, 305, 305, 305, 305, 431, 264, 432, 160,
+ 319, 236, 324, 160, 325, 984, 290, 343, 344, 117,
+
+ 134, 134, 135, 134, 136, 137, 134, 134, 134, 138,
+ 134, 134, 134, 134, 134, 134, 134, 139, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 141, 140, 140, 140, 140, 140,
+ 140, 142, 143, 134, 144, 134, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 141, 140, 140, 140, 140, 140, 140,
+ 142, 145, 134, 146, 162, 163, 205, 164, 206, 162,
+ 163, 165, 164, 353, 211, 211, 165, 333, 216, 351,
+
+ 166, 212, 212, 358, 334, 166, 379, 379, 379, 379,
+ 324, 217, 325, 352, 213, 213, 346, 359, 347, 360,
+ 315, 218, 348, 353, 214, 214, 219, 167, 371, 215,
+ 215, 376, 167, 358, 168, 169, 207, 170, 208, 168,
+ 169, 217, 170, 352, 213, 213, 346, 359, 347, 360,
+ 218, 348, 983, 214, 214, 219, 167, 371, 215, 215,
+ 376, 167, 982, 168, 316, 209, 981, 210, 168, 171,
+ 172, 173, 171, 174, 175, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 176, 177,
+ 171, 171, 171, 178, 171, 171, 179, 180, 181, 182,
+
+ 183, 184, 185, 186, 187, 185, 185, 188, 189, 190,
+ 191, 192, 185, 193, 194, 195, 196, 197, 198, 185,
+ 199, 171, 171, 171, 171, 171, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 185, 185, 188, 189, 190,
+ 191, 192, 193, 194, 195, 196, 197, 198, 185, 199,
+ 171, 171, 171, 205, 216, 206, 249, 250, 370, 251,
+ 263, 263, 452, 252, 354, 269, 270, 217, 271, 263,
+ 263, 453, 272, 456, 372, 263, 263, 218, 349, 356,
+ 364, 273, 219, 410, 411, 355, 350, 274, 370, 980,
+ 365, 452, 264, 373, 354, 374, 375, 217, 941, 357,
+
+ 453, 264, 456, 207, 372, 208, 218, 264, 349, 356,
+ 364, 219, 387, 361, 355, 398, 350, 362, 235, 275,
+ 365, 264, 408, 373, 940, 374, 375, 425, 357, 939,
+ 264, 428, 209, 429, 210, 238, 264, 253, 228, 229,
+ 367, 230, 387, 361, 412, 398, 253, 362, 232, 233,
+ 368, 234, 408, 369, 239, 236, 240, 425, 240, 249,
+ 250, 428, 251, 429, 240, 938, 252, 240, 241, 242,
+ 367, 240, 243, 244, 410, 411, 937, 245, 298, 299,
+ 368, 300, 369, 936, 239, 236, 240, 935, 240, 445,
+ 446, 934, 390, 391, 240, 392, 933, 240, 241, 242,
+
+ 240, 243, 244, 932, 390, 391, 245, 392, 246, 393,
+ 393, 393, 393, 390, 391, 931, 392, 413, 413, 445,
+ 446, 393, 393, 393, 393, 390, 391, 458, 392, 448,
+ 393, 393, 393, 393, 461, 394, 305, 305, 305, 305,
+ 253, 449, 393, 393, 393, 393, 450, 930, 462, 414,
+ 269, 270, 454, 271, 395, 464, 458, 272, 459, 448,
+ 451, 463, 460, 461, 394, 396, 273, 465, 929, 455,
+ 466, 449, 274, 468, 467, 469, 450, 462, 414, 470,
+ 471, 472, 454, 473, 395, 464, 474, 476, 459, 451,
+ 463, 480, 460, 482, 481, 396, 475, 465, 455, 485,
+
+ 466, 486, 468, 467, 275, 469, 262, 262, 470, 471,
+ 472, 401, 473, 402, 410, 411, 474, 476, 401, 928,
+ 402, 480, 927, 482, 481, 475, 926, 497, 485, 504,
+ 486, 253, 433, 434, 435, 436, 437, 437, 438, 437,
+ 437, 437, 437, 439, 437, 437, 437, 440, 437, 437,
+ 441, 437, 442, 437, 437, 443, 437, 497, 504, 405,
+ 444, 406, 433, 434, 435, 436, 437, 437, 438, 437,
+ 437, 437, 437, 439, 437, 437, 437, 440, 437, 441,
+ 437, 442, 437, 437, 443, 437, 477, 483, 499, 500,
+ 478, 501, 505, 506, 484, 479, 379, 379, 379, 379,
+
+ 508, 405, 431, 406, 432, 502, 502, 502, 502, 510,
+ 511, 925, 520, 512, 512, 924, 477, 483, 548, 923,
+ 478, 505, 922, 506, 484, 479, 487, 521, 488, 522,
+ 508, 489, 490, 503, 391, 921, 392, 491, 492, 510,
+ 410, 411, 520, 493, 494, 513, 523, 548, 495, 409,
+ 393, 393, 393, 393, 920, 496, 487, 521, 488, 522,
+ 919, 489, 490, 519, 519, 519, 519, 491, 492, 431,
+ 914, 432, 493, 494, 513, 913, 523, 495, 409, 409,
+ 861, 409, 409, 409, 409, 409, 409, 409, 409, 409,
+ 409, 409, 409, 409, 409, 409, 409, 409, 409, 409,
+
+ 409, 409, 409, 409, 409, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514, 514, 514,
+ 410, 411, 860, 515, 409, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514, 514, 409,
+ 409, 409, 516, 516, 546, 547, 524, 524, 524, 524,
+ 524, 524, 524, 524, 549, 558, 550, 599, 859, 600,
+ 524, 524, 858, 525, 526, 528, 533, 527, 551, 535,
+ 530, 857, 529, 534, 546, 547, 410, 411, 517, 517,
+
+ 517, 517, 531, 549, 558, 532, 550, 517, 517, 517,
+ 517, 517, 517, 525, 526, 528, 533, 527, 551, 535,
+ 530, 529, 552, 534, 560, 553, 554, 555, 556, 856,
+ 557, 531, 410, 411, 532, 559, 855, 517, 517, 517,
+ 517, 517, 517, 1106, 561, 562, 563, 565, 536, 537,
+ 538, 539, 552, 560, 540, 553, 554, 555, 556, 541,
+ 557, 564, 567, 542, 568, 559, 543, 854, 544, 569,
+ 853, 545, 570, 561, 571, 562, 563, 565, 536, 537,
+ 538, 539, 572, 573, 540, 574, 575, 576, 577, 541,
+ 564, 578, 567, 542, 568, 543, 581, 544, 582, 569,
+
+ 545, 579, 570, 583, 571, 584, 585, 580, 586, 587,
+ 606, 588, 572, 573, 589, 574, 575, 576, 577, 590,
+ 591, 578, 592, 593, 852, 594, 581, 582, 598, 851,
+ 595, 579, 583, 596, 597, 584, 585, 580, 586, 587,
+ 588, 500, 602, 600, 589, 503, 391, 603, 392, 590,
+ 591, 619, 592, 593, 594, 604, 499, 500, 598, 501,
+ 595, 608, 596, 597, 601, 500, 599, 501, 600, 410,
+ 411, 259, 602, 502, 502, 502, 502, 603, 410, 411,
+ 619, 502, 502, 502, 502, 604, 601, 500, 850, 501,
+ 607, 608, 409, 409, 848, 409, 409, 409, 409, 409,
+
+ 409, 409, 409, 409, 409, 409, 409, 409, 409, 409,
+ 409, 409, 409, 409, 409, 409, 409, 409, 409, 609,
+ 609, 609, 609, 609, 609, 609, 609, 609, 609, 609,
+ 609, 609, 609, 609, 609, 609, 609, 609, 609, 609,
+ 609, 609, 609, 609, 410, 411, 613, 610, 409, 609,
+ 609, 609, 609, 609, 609, 609, 609, 609, 609, 609,
+ 609, 609, 609, 609, 609, 609, 609, 609, 609, 609,
+ 609, 609, 609, 409, 409, 409, 611, 611, 616, 409,
+ 524, 524, 614, 614, 524, 524, 524, 845, 617, 618,
+ 623, 828, 696, 697, 524, 698, 524, 625, 621, 626,
+
+ 622, 775, 629, 776, 817, 624, 524, 700, 616, 628,
+ 410, 411, 612, 612, 612, 612, 410, 411, 617, 618,
+ 623, 612, 612, 612, 612, 612, 612, 625, 621, 626,
+ 622, 524, 629, 627, 624, 806, 524, 524, 524, 628,
+ 409, 524, 630, 781, 632, 644, 643, 524, 524, 636,
+ 780, 612, 612, 612, 612, 612, 612, 615, 615, 615,
+ 615, 631, 627, 633, 634, 524, 615, 615, 615, 615,
+ 615, 615, 630, 524, 632, 644, 643, 779, 646, 636,
+ 524, 645, 647, 635, 524, 649, 524, 524, 650, 651,
+ 652, 631, 653, 633, 634, 637, 615, 615, 615, 615,
+
+ 615, 615, 639, 638, 697, 640, 641, 642, 646, 654,
+ 645, 647, 656, 635, 649, 655, 658, 650, 657, 651,
+ 652, 659, 606, 660, 637, 661, 662, 692, 664, 665,
+ 669, 639, 667, 638, 640, 668, 641, 642, 670, 654,
+ 671, 672, 656, 673, 675, 655, 658, 657, 674, 676,
+ 677, 659, 660, 678, 661, 679, 662, 664, 680, 665,
+ 669, 667, 681, 683, 668, 682, 684, 670, 685, 687,
+ 671, 672, 686, 673, 675, 688, 690, 674, 676, 677,
+ 693, 689, 691, 678, 694, 679, 695, 703, 680, 701,
+ 701, 705, 681, 683, 682, 684, 524, 524, 685, 687,
+
+ 706, 686, 607, 768, 524, 688, 690, 410, 411, 693,
+ 689, 524, 691, 524, 694, 695, 708, 703, 524, 710,
+ 705, 707, 524, 410, 411, 702, 702, 702, 702, 709,
+ 706, 711, 524, 712, 702, 702, 702, 702, 702, 702,
+ 714, 713, 524, 524, 524, 524, 708, 764, 710, 715,
+ 707, 716, 717, 524, 524, 775, 718, 776, 721, 709,
+ 524, 711, 524, 712, 702, 702, 702, 702, 702, 702,
+ 714, 713, 719, 723, 720, 524, 524, 524, 524, 715,
+ 724, 716, 717, 524, 722, 524, 718, 524, 721, 726,
+ 728, 752, 731, 732, 734, 727, 730, 748, 733, 736,
+
+ 741, 738, 719, 723, 720, 725, 735, 729, 743, 740,
+ 724, 739, 742, 722, 744, 745, 746, 747, 749, 726,
+ 728, 731, 750, 732, 734, 727, 730, 733, 751, 736,
+ 741, 738, 753, 754, 725, 755, 735, 729, 740, 756,
+ 739, 757, 742, 744, 758, 745, 746, 747, 749, 759,
+ 761, 750, 760, 762, 763, 765, 766, 767, 751, 769,
+ 770, 753, 754, 771, 755, 772, 773, 777, 778, 756,
+ 757, 696, 697, 758, 698, 410, 411, 409, 524, 759,
+ 761, 760, 762, 524, 763, 765, 766, 767, 524, 769,
+ 770, 524, 771, 410, 411, 772, 773, 777, 778, 524,
+
+ 782, 524, 786, 784, 783, 524, 524, 785, 524, 524,
+ 524, 524, 524, 787, 524, 791, 524, 524, 524, 363,
+ 363, 807, 793, 737, 795, 802, 524, 788, 796, 524,
+ 782, 786, 789, 784, 783, 790, 792, 785, 524, 797,
+ 524, 794, 798, 787, 524, 791, 799, 800, 524, 804,
+ 524, 807, 793, 808, 795, 802, 788, 803, 796, 805,
+ 811, 789, 801, 809, 790, 792, 812, 813, 797, 814,
+ 794, 815, 798, 810, 704, 816, 799, 800, 818, 804,
+ 819, 820, 808, 821, 822, 823, 825, 803, 824, 805,
+ 811, 826, 801, 809, 827, 829, 812, 813, 814, 830,
+
+ 815, 831, 838, 810, 816, 839, 846, 775, 818, 776,
+ 819, 820, 849, 821, 822, 823, 825, 824, 847, 524,
+ 917, 826, 918, 827, 864, 829, 832, 833, 524, 830,
+ 831, 834, 838, 524, 835, 839, 846, 836, 840, 841,
+ 524, 849, 837, 842, 524, 878, 843, 524, 847, 844,
+ 863, 524, 862, 524, 864, 865, 832, 833, 524, 868,
+ 866, 834, 524, 524, 835, 524, 875, 836, 840, 841,
+ 876, 837, 872, 842, 878, 867, 843, 870, 524, 844,
+ 863, 862, 871, 880, 869, 865, 882, 873, 877, 868,
+ 866, 874, 879, 881, 409, 883, 875, 884, 699, 885,
+
+ 876, 886, 872, 887, 867, 888, 870, 889, 890, 891,
+ 892, 871, 880, 869, 894, 882, 873, 895, 877, 896,
+ 902, 874, 879, 881, 883, 901, 893, 884, 885, 903,
+ 904, 886, 887, 905, 907, 888, 906, 889, 890, 891,
+ 892, 897, 692, 911, 894, 898, 895, 912, 899, 896,
+ 902, 915, 943, 908, 901, 893, 909, 524, 900, 903,
+ 904, 944, 946, 905, 907, 906, 910, 945, 947, 948,
+ 950, 897, 911, 949, 951, 898, 912, 952, 899, 953,
+ 915, 942, 943, 908, 954, 955, 909, 900, 956, 666,
+ 957, 944, 946, 958, 959, 910, 945, 960, 947, 948,
+
+ 950, 961, 949, 962, 951, 963, 964, 952, 965, 953,
+ 942, 966, 967, 954, 968, 955, 969, 971, 956, 957,
+ 970, 972, 973, 958, 959, 974, 975, 960, 976, 979,
+ 961, 977, 917, 962, 918, 963, 964, 917, 965, 918,
+ 966, 967, 993, 994, 968, 995, 969, 971, 978, 970,
+ 996, 972, 973, 997, 974, 975, 998, 976, 979, 999,
+ 1000, 977, 1001, 663, 1002, 1003, 1004, 648, 1005, 1006,
+ 1007, 993, 1008, 994, 1009, 995, 1010, 978, 1011, 1012,
+ 996, 1013, 1014, 997, 1015, 1016, 998, 1017, 1018, 999,
+ 1000, 1019, 1001, 1002, 1003, 1020, 1004, 1005, 1021, 1006,
+
+ 1007, 1008, 1022, 1009, 1025, 1010, 1023, 1026, 1011, 1012,
+ 1024, 1013, 1014, 1015, 1016, 1028, 1017, 1029, 1018, 1030,
+ 1031, 1019, 1032, 1033, 1034, 1020, 1035, 1036, 1021, 1037,
+ 1038, 1022, 1039, 1025, 1040, 1023, 1041, 1026, 1042, 1024,
+ 1043, 1044, 1045, 1046, 1047, 1028, 1048, 1029, 1030, 1049,
+ 1031, 1032, 1033, 1034, 1050, 1057, 1035, 1036, 1037, 1038,
+ 1051, 1052, 1039, 1053, 1040, 1054, 1041, 1055, 1042, 1056,
+ 1043, 1044, 1045, 1046, 1047, 1048, 1058, 1059, 1060, 1049,
+ 1061, 620, 1062, 1063, 1050, 1057, 1064, 1065, 1066, 1051,
+ 1052, 1067, 1053, 1068, 1054, 1069, 1055, 1070, 1056, 1071,
+
+ 1072, 1073, 1074, 1075, 409, 1076, 1058, 1059, 1060, 1077,
+ 1061, 1062, 1078, 1063, 1079, 1080, 1064, 1065, 1066, 1081,
+ 1067, 1082, 1083, 1068, 1084, 1069, 1085, 1070, 1086, 1071,
+ 1072, 1073, 1074, 1075, 1076, 1087, 1088, 1089, 1077, 1090,
+ 1091, 1092, 1078, 1079, 1093, 1080, 1094, 566, 1095, 1081,
+ 1082, 1096, 1083, 1097, 1084, 1098, 1085, 1099, 1086, 1100,
+ 1101, 524, 1102, 1103, 1104, 1087, 1088, 1089, 1090, 1091,
+ 1105, 1092, 416, 1093, 416, 420, 1094, 1095, 391, 518,
+ 1096, 518, 1097, 378, 457, 1098, 342, 1099, 1100, 339,
+ 1101, 1102, 1103, 336, 1104, 301, 299, 301, 296, 286,
+
+ 1105, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 82, 82,
82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 83, 82, 82,
- 82, 82, 82, 82, 84, 78, 78, 78, 90, 90,
- 40, 90, 90, 90, 90, 90, 90, 90, 91, 90,
-
- 91, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 92, 93, 93, 90, 90, 90, 90, 93, 93, 93,
- 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 90, 90, 90, 111, 112, 296, 111,
- 112, 178, 766, 179, 181, 182, 183, 113, 265, 266,
- 113, 185, 186, 187, 180, 180, 180, 180, 297, 114,
- 115, 116, 114, 115, 116, 117, 117, 118, 119, 120,
- 117, 117, 117, 121, 117, 117, 117, 117, 117, 122,
- 117, 117, 117, 117, 117, 117, 117, 117, 123, 123,
-
- 117, 117, 117, 117, 123, 123, 123, 123, 123, 123,
+ 82, 82, 82, 82, 82, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+
+ 100, 100, 100, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 123, 123, 123, 123, 123, 123,
123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- 123, 123, 124, 123, 123, 123, 123, 123, 123, 125,
- 126, 117, 127, 136, 137, 138, 136, 137, 138, 206,
- 206, 207, 215, 215, 215, 215, 248, 248, 248, 248,
- 268, 269, 268, 269, 300, 331, 332, 139, 301, 765,
- 139, 140, 141, 142, 143, 140, 140, 140, 144, 140,
- 140, 145, 140, 140, 140, 146, 140, 140, 140, 140,
- 140, 140, 140, 140, 147, 147, 140, 140, 140, 140,
+ 123, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 147, 147,
147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
- 147, 147, 147, 147, 147, 147, 147, 147, 148, 147,
- 147, 147, 147, 147, 147, 149, 140, 140, 140, 150,
- 151, 152, 153, 154, 150, 150, 150, 150, 150, 150,
- 150, 150, 150, 150, 150, 155, 156, 150, 150, 150,
- 157, 150, 150, 150, 150, 150, 150, 150, 150, 158,
- 159, 160, 161, 162, 163, 164, 164, 165, 164, 164,
- 166, 167, 168, 169, 170, 164, 171, 172, 164, 173,
- 174, 175, 164, 176, 150, 150, 150, 191, 201, 202,
- 203, 258, 213, 213, 204, 289, 213, 213, 213, 213,
- 292, 290, 217, 218, 219, 383, 303, 275, 220, 259,
-
- 192, 188, 193, 276, 193, 221, 304, 335, 336, 293,
- 193, 222, 384, 193, 194, 195, 480, 193, 196, 223,
- 214, 306, 481, 197, 214, 198, 214, 317, 317, 317,
- 317, 307, 764, 205, 308, 181, 182, 183, 185, 186,
- 187, 189, 321, 322, 323, 339, 340, 205, 321, 322,
- 323, 387, 321, 322, 323, 388, 324, 324, 324, 324,
- 342, 342, 324, 324, 324, 324, 324, 324, 324, 324,
- 321, 322, 323, 201, 202, 203, 341, 344, 344, 204,
- 380, 258, 339, 340, 324, 324, 324, 324, 325, 217,
- 218, 219, 265, 266, 381, 220, 326, 439, 343, 259,
-
- 265, 266, 221, 248, 248, 248, 248, 673, 222, 268,
- 269, 268, 269, 327, 392, 402, 223, 409, 393, 440,
- 410, 416, 417, 418, 403, 331, 332, 763, 205, 411,
- 412, 317, 317, 317, 317, 419, 419, 419, 419, 721,
- 413, 331, 332, 722, 205, 357, 357, 358, 359, 357,
- 357, 357, 357, 357, 357, 360, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357, 360, 360,
- 357, 357, 357, 357, 360, 360, 360, 360, 360, 360,
- 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
- 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
-
- 357, 357, 357, 362, 363, 364, 365, 335, 336, 366,
- 335, 336, 339, 340, 367, 212, 212, 762, 368, 493,
- 494, 369, 761, 370, 417, 494, 371, 374, 374, 760,
- 374, 374, 374, 374, 374, 374, 374, 375, 374, 374,
- 374, 374, 374, 374, 374, 374, 374, 374, 374, 374,
- 375, 375, 374, 374, 374, 374, 375, 375, 375, 375,
- 375, 375, 375, 375, 375, 375, 375, 375, 375, 375,
- 375, 375, 375, 375, 375, 375, 375, 375, 375, 375,
- 375, 375, 374, 374, 374, 420, 322, 323, 427, 439,
- 439, 428, 428, 439, 339, 340, 431, 431, 439, 324,
-
- 324, 324, 324, 338, 439, 485, 339, 340, 486, 487,
- 439, 441, 443, 439, 442, 420, 322, 323, 450, 552,
- 759, 513, 493, 494, 516, 553, 444, 339, 340, 429,
- 338, 338, 439, 338, 338, 338, 338, 338, 338, 338,
- 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
- 338, 338, 338, 430, 430, 339, 340, 445, 338, 338,
+ 147, 147, 147, 147, 147, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+
+ 220, 220, 220, 220, 220, 220, 220, 224, 224, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 231, 231, 282, 231, 231, 423,
+ 422, 421, 231, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 248,
+ 248, 270, 248, 248, 420, 418, 417, 248, 259, 407,
+ 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
+ 259, 259, 259, 259, 259, 262, 254, 262, 262, 262,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 262, 262, 268, 268, 268, 403, 268, 268, 250, 233,
+
+ 229, 268, 280, 386, 280, 280, 280, 280, 280, 280,
+ 280, 280, 280, 280, 280, 280, 280, 280, 280, 281,
+ 385, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 281, 281, 281, 281, 281, 281, 285, 285, 285, 285,
+ 285, 285, 285, 285, 285, 285, 285, 285, 384, 285,
+ 382, 285, 285, 295, 381, 380, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 303, 303, 378, 303, 303, 342, 340, 339, 303, 308,
+ 338, 308, 308, 308, 308, 308, 308, 308, 308, 308,
+ 308, 308, 308, 308, 308, 308, 311, 337, 311, 311,
+
+ 311, 311, 311, 311, 311, 311, 311, 311, 311, 311,
+ 317, 311, 311, 312, 336, 312, 335, 331, 312, 312,
+ 312, 312, 312, 329, 328, 327, 312, 314, 326, 314,
+ 314, 314, 314, 314, 314, 314, 314, 314, 314, 314,
+ 314, 314, 314, 314, 318, 318, 322, 318, 318, 321,
+ 317, 313, 318, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
+ 330, 307, 330, 310, 330, 330, 330, 330, 330, 330,
+ 330, 330, 330, 307, 330, 330, 330, 332, 306, 332,
+ 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
+
+ 332, 332, 332, 332, 341, 304, 341, 341, 341, 341,
+ 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
+ 341, 345, 345, 302, 299, 345, 345, 377, 301, 377,
+ 377, 377, 377, 377, 377, 377, 377, 377, 377, 377,
+ 377, 377, 377, 377, 383, 297, 383, 383, 383, 296,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 231, 231, 294, 231, 231, 293, 292, 289, 231,
+ 388, 288, 388, 388, 388, 388, 388, 388, 388, 388,
+ 388, 388, 388, 388, 388, 388, 388, 389, 287, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+
+ 389, 389, 389, 389, 397, 397, 286, 282, 279, 397,
+ 399, 399, 278, 270, 258, 399, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
+ 400, 400, 400, 248, 248, 257, 248, 248, 256, 250,
+ 247, 248, 404, 404, 404, 404, 404, 404, 404, 404,
+ 404, 404, 404, 404, 404, 404, 404, 404, 404, 409,
+ 233, 409, 409, 409, 409, 409, 409, 409, 409, 409,
+ 409, 409, 409, 229, 409, 409, 259, 1106, 259, 259,
+ 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
+ 259, 259, 259, 419, 419, 111, 419, 419, 111, 1106,
+
+ 1106, 419, 419, 424, 1106, 424, 424, 424, 424, 424,
+ 424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
+ 280, 1106, 280, 280, 280, 280, 280, 280, 280, 280,
+ 280, 280, 280, 280, 280, 280, 280, 281, 1106, 281,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 281, 281, 281, 281, 426, 1106, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 427, 1106, 427, 427, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 427, 285, 285,
+ 285, 285, 285, 285, 285, 285, 285, 285, 285, 285,
+
+ 1106, 285, 1106, 285, 285, 430, 430, 430, 430, 430,
430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
+ 430, 430, 295, 1106, 1106, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 303,
+ 303, 1106, 303, 303, 1106, 1106, 1106, 303, 312, 1106,
+ 312, 1106, 1106, 312, 312, 312, 312, 312, 1106, 1106,
+ 1106, 312, 314, 1106, 314, 314, 314, 314, 314, 314,
+ 314, 314, 314, 314, 314, 314, 314, 314, 314, 318,
+ 318, 1106, 318, 318, 1106, 1106, 1106, 318, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 323, 323, 323, 323, 323, 330, 1106, 330, 1106, 330,
+ 330, 330, 330, 330, 330, 330, 330, 330, 1106, 330,
+ 330, 330, 447, 1106, 447, 447, 447, 447, 447, 447,
+ 447, 447, 447, 447, 447, 447, 447, 447, 447, 341,
+ 1106, 341, 341, 341, 341, 341, 341, 341, 341, 341,
+ 341, 341, 341, 341, 341, 341, 345, 345, 1106, 1106,
+ 345, 345, 377, 1106, 377, 377, 377, 377, 377, 377,
+ 377, 377, 377, 377, 377, 377, 377, 377, 377, 383,
+ 1106, 383, 383, 383, 1106, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 388, 1106, 388, 388,
+
+ 388, 388, 388, 388, 388, 388, 388, 388, 388, 388,
+ 388, 388, 388, 389, 1106, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 498, 498, 498, 498, 498, 498, 498, 498, 498, 498,
+ 498, 498, 498, 498, 498, 498, 498, 507, 507, 1106,
+ 507, 507, 1106, 1106, 1106, 507, 509, 509, 1106, 509,
+ 509, 1106, 1106, 1106, 509, 400, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
+ 400, 400, 404, 404, 404, 404, 404, 404, 404, 404,
+ 404, 404, 404, 404, 404, 404, 404, 404, 404, 409,
+
+ 1106, 409, 409, 409, 409, 409, 409, 409, 409, 409,
+ 409, 409, 409, 1106, 409, 409, 419, 419, 1106, 419,
+ 419, 1106, 1106, 1106, 419, 419, 424, 1106, 424, 424,
+ 424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
+ 424, 424, 424, 426, 1106, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 427, 1106, 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 430, 430, 430,
430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
- 430, 430, 430, 430, 430, 338, 338, 338, 432, 432,
- 432, 432, 758, 439, 339, 340, 432, 757, 339, 340,
-
- 495, 417, 418, 432, 432, 432, 432, 432, 432, 360,
- 360, 439, 438, 360, 360, 360, 360, 360, 360, 448,
- 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
- 360, 360, 439, 439, 360, 360, 360, 360, 439, 446,
- 501, 501, 447, 504, 504, 416, 417, 418, 616, 617,
- 339, 340, 638, 339, 340, 515, 439, 439, 449, 419,
- 419, 419, 419, 514, 360, 360, 360, 375, 375, 580,
- 375, 375, 375, 375, 375, 375, 375, 439, 375, 375,
- 375, 375, 375, 375, 375, 375, 375, 375, 375, 375,
- 517, 439, 375, 375, 375, 375, 495, 417, 418, 439,
-
- 439, 511, 439, 512, 439, 439, 339, 340, 209, 439,
- 419, 419, 419, 419, 439, 519, 520, 581, 518, 522,
- 566, 566, 375, 375, 375, 500, 500, 573, 521, 578,
- 339, 340, 500, 500, 500, 500, 500, 500, 500, 500,
- 500, 500, 500, 500, 500, 500, 500, 500, 500, 500,
- 500, 500, 500, 500, 500, 500, 500, 502, 502, 502,
- 502, 532, 439, 439, 439, 502, 439, 339, 340, 439,
- 339, 340, 502, 502, 502, 502, 502, 502, 505, 505,
- 505, 505, 439, 533, 582, 576, 505, 574, 579, 534,
- 575, 439, 439, 505, 505, 505, 505, 505, 505, 567,
-
- 567, 567, 567, 590, 339, 340, 338, 567, 577, 583,
- 439, 439, 625, 591, 567, 567, 567, 567, 567, 567,
- 439, 439, 624, 439, 439, 439, 439, 439, 439, 439,
- 616, 617, 439, 623, 616, 617, 685, 686, 685, 686,
- 756, 628, 626, 632, 708, 755, 634, 685, 686, 302,
- 302, 627, 629, 754, 753, 630, 631, 633, 752, 751,
- 750, 709, 669, 52, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 69,
- 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 72, 72, 72, 72, 72,
-
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 76, 76, 76, 76, 76, 76, 76, 76, 76,
- 76, 76, 76, 76, 76, 76, 76, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
- 86, 86, 86, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 101, 101, 101, 101, 101,
- 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
- 101, 106, 106, 106, 106, 106, 106, 106, 106, 106,
-
- 106, 106, 106, 106, 106, 106, 106, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 131,
- 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
- 131, 131, 131, 131, 131, 135, 135, 135, 135, 135,
- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 184, 184, 184,
- 184, 749, 748, 184, 184, 184, 190, 190, 190, 190,
-
- 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
- 190, 200, 200, 200, 200, 747, 746, 200, 200, 200,
- 209, 745, 209, 209, 209, 209, 209, 209, 209, 209,
- 209, 209, 209, 209, 209, 209, 212, 744, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 212, 212, 216, 216, 216, 743, 742, 216, 216, 216,
- 227, 741, 227, 227, 227, 227, 227, 227, 227, 227,
- 227, 227, 227, 227, 227, 227, 229, 740, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 229, 230, 739, 230, 230, 230, 230, 230, 230,
-
- 230, 230, 230, 230, 230, 230, 230, 230, 234, 234,
- 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
- 234, 234, 234, 234, 236, 738, 236, 236, 737, 236,
- 236, 236, 736, 735, 236, 236, 734, 733, 732, 236,
- 238, 238, 238, 238, 731, 730, 238, 238, 238, 242,
- 729, 242, 242, 242, 242, 242, 242, 242, 242, 242,
- 242, 242, 242, 242, 242, 246, 246, 246, 246, 728,
- 727, 246, 246, 246, 251, 726, 251, 251, 251, 251,
- 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
- 254, 725, 254, 254, 254, 254, 254, 254, 254, 254,
-
- 254, 724, 254, 254, 254, 254, 255, 723, 720, 719,
- 255, 255, 255, 255, 718, 717, 255, 255, 257, 716,
- 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
- 257, 257, 257, 257, 261, 261, 261, 261, 715, 714,
- 261, 261, 261, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 267,
- 267, 267, 267, 713, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 271, 712, 711, 271, 271,
- 271, 271, 271, 271, 271, 710, 271, 271, 271, 271,
- 271, 273, 707, 273, 273, 273, 273, 273, 273, 273,
-
- 273, 273, 273, 273, 273, 273, 273, 274, 706, 274,
- 274, 705, 274, 274, 274, 704, 703, 274, 274, 702,
- 701, 700, 274, 279, 279, 279, 279, 699, 698, 279,
- 279, 279, 284, 697, 284, 284, 284, 284, 284, 284,
- 284, 284, 284, 284, 284, 284, 284, 284, 288, 288,
- 696, 288, 288, 695, 694, 693, 288, 288, 315, 692,
- 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
- 315, 315, 315, 315, 319, 691, 319, 319, 319, 319,
- 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- 320, 690, 320, 320, 320, 320, 320, 320, 320, 320,
-
- 320, 320, 320, 320, 320, 320, 328, 328, 689, 688,
- 328, 328, 328, 329, 329, 687, 683, 329, 329, 329,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 334, 334, 334, 334,
- 334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
- 334, 334, 338, 682, 338, 338, 338, 338, 338, 338,
- 338, 338, 338, 681, 338, 338, 338, 338, 209, 680,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
- 209, 209, 209, 209, 345, 345, 679, 678, 677, 676,
- 345, 346, 346, 346, 346, 675, 674, 346, 346, 346,
-
- 346, 351, 673, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 227, 672, 227,
- 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
- 227, 227, 227, 229, 671, 229, 229, 229, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 230,
- 670, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 353, 668, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 354, 667, 354, 354, 354, 354, 354, 354, 354,
- 354, 354, 354, 354, 354, 354, 354, 234, 234, 234,
-
- 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
- 234, 234, 234, 236, 666, 236, 236, 665, 236, 236,
- 236, 664, 663, 236, 236, 662, 661, 660, 236, 238,
- 238, 238, 238, 659, 658, 238, 238, 238, 242, 657,
- 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
- 242, 242, 242, 242, 246, 246, 246, 246, 656, 655,
- 246, 246, 246, 361, 361, 654, 653, 652, 361, 361,
- 255, 651, 650, 649, 255, 255, 255, 255, 648, 647,
- 255, 255, 257, 646, 257, 257, 257, 257, 257, 257,
- 257, 257, 257, 257, 257, 257, 257, 257, 261, 261,
-
- 261, 261, 645, 644, 261, 261, 261, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 267, 267, 267, 267, 643, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 271,
- 642, 641, 271, 271, 271, 271, 271, 271, 271, 640,
- 271, 271, 271, 271, 271, 274, 639, 274, 274, 638,
- 274, 274, 274, 637, 636, 274, 274, 635, 622, 621,
- 274, 279, 279, 279, 279, 620, 619, 279, 279, 279,
- 284, 618, 284, 284, 284, 284, 284, 284, 284, 284,
- 284, 284, 284, 284, 284, 284, 288, 288, 560, 288,
-
- 288, 614, 613, 612, 288, 288, 315, 611, 315, 315,
- 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
- 315, 315, 319, 610, 319, 319, 319, 319, 319, 319,
- 319, 319, 319, 319, 319, 319, 319, 319, 320, 609,
- 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- 320, 320, 320, 320, 415, 415, 415, 415, 415, 415,
- 415, 415, 415, 415, 415, 415, 415, 415, 415, 415,
- 424, 424, 424, 424, 608, 607, 424, 424, 424, 425,
- 425, 425, 425, 606, 605, 425, 425, 425, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
-
- 330, 330, 330, 330, 334, 334, 334, 334, 334, 334,
- 334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
- 338, 604, 338, 338, 338, 338, 338, 338, 338, 338,
- 338, 603, 338, 338, 338, 338, 433, 433, 602, 601,
- 600, 599, 433, 346, 346, 346, 346, 598, 597, 346,
- 346, 346, 346, 351, 596, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 615,
- 615, 615, 615, 615, 615, 615, 615, 615, 615, 615,
- 615, 615, 615, 615, 615, 684, 684, 684, 684, 684,
- 684, 684, 684, 684, 684, 684, 684, 684, 684, 684,
-
- 684, 595, 594, 593, 592, 589, 588, 587, 586, 585,
- 584, 571, 570, 569, 568, 565, 564, 563, 562, 561,
- 560, 559, 558, 557, 556, 555, 554, 551, 550, 549,
- 548, 547, 546, 545, 544, 543, 542, 541, 540, 539,
- 538, 537, 536, 535, 531, 530, 529, 528, 527, 526,
- 525, 524, 523, 510, 509, 508, 507, 506, 503, 499,
- 498, 497, 496, 492, 491, 490, 489, 488, 484, 483,
- 482, 479, 478, 477, 476, 475, 474, 473, 472, 471,
- 470, 469, 468, 467, 466, 465, 464, 463, 462, 461,
- 460, 459, 458, 457, 456, 455, 454, 453, 452, 451,
-
- 439, 437, 436, 435, 434, 347, 426, 423, 422, 421,
- 322, 414, 316, 408, 407, 406, 401, 400, 399, 398,
- 397, 396, 395, 394, 391, 390, 389, 386, 385, 382,
- 379, 378, 285, 282, 377, 376, 278, 373, 372, 243,
- 356, 355, 235, 231, 352, 350, 349, 348, 218, 347,
- 337, 206, 333, 202, 318, 186, 182, 316, 314, 313,
- 312, 311, 310, 309, 305, 299, 298, 295, 294, 291,
- 287, 286, 285, 283, 282, 281, 280, 260, 278, 277,
- 272, 270, 263, 262, 260, 256, 250, 253, 250, 249,
- 247, 245, 244, 243, 241, 240, 239, 237, 235, 228,
-
- 231, 228, 226, 218, 208, 202, 199, 186, 182, 768,
- 94, 94, 85, 77, 77, 39, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768
+ 430, 430, 430, 430, 437, 437, 437, 318, 318, 1106,
+
+ 318, 318, 1106, 1106, 1106, 318, 447, 1106, 447, 447,
+ 447, 447, 447, 447, 447, 447, 447, 447, 447, 447,
+ 447, 447, 447, 605, 1106, 605, 605, 605, 605, 605,
+ 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
+ 774, 774, 774, 774, 774, 774, 774, 774, 774, 774,
+ 774, 774, 774, 774, 774, 774, 774, 916, 916, 916,
+ 916, 916, 916, 916, 916, 916, 916, 916, 916, 916,
+ 916, 916, 916, 916, 49, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106
} ;
-static yyconst short int yy_chk[2775] =
+static yyconst flex_int16_t yy_chk[4060] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
- 765, 3, 5, 5, 3, 3, 3, 27, 27, 3,
- 6, 6, 6, 28, 28, 3, 6, 11, 11, 11,
- 3, 3, 12, 12, 12, 48, 17, 17, 66, 29,
- 29, 60, 60, 18, 18, 310, 17, 29, 310, 17,
- 17, 17, 17, 18, 61, 61, 18, 18, 18, 18,
- 3, 3, 3, 4, 4, 4, 4, 109, 4, 4,
- 21, 4, 4, 4, 511, 48, 4, 19, 19, 19,
- 22, 109, 4, 20, 20, 20, 66, 4, 4, 141,
-
- 4, 17, 61, 21, 21, 141, 21, 37, 18, 37,
- 75, 19, 75, 22, 22, 511, 22, 20, 30, 30,
- 37, 37, 37, 37, 128, 128, 30, 4, 4, 4,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 13, 13,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
+ 96, 3, 3, 5, 3, 5, 7, 3, 3, 3,
+ 3, 8, 992, 3, 3, 6, 6, 942, 6, 21,
+ 3, 941, 6, 3, 9, 126, 9, 11, 11, 96,
+
+ 11, 12, 12, 940, 12, 17, 939, 17, 19, 138,
+ 19, 19, 27, 20, 27, 20, 20, 17, 22, 3,
+ 3, 17, 17, 17, 17, 28, 7, 28, 7, 51,
+ 51, 8, 51, 8, 126, 10, 9, 10, 79, 21,
+ 21, 10, 21, 9, 9, 87, 9, 87, 3, 3,
+ 3, 4, 4, 138, 4, 4, 938, 4, 4, 19,
+ 4, 4, 4, 4, 20, 9, 4, 4, 22, 22,
+ 95, 22, 9, 4, 73, 73, 4, 10, 23, 37,
+ 23, 45, 37, 45, 10, 10, 17, 10, 259, 259,
+ 45, 23, 142, 263, 263, 37, 37, 37, 37, 937,
+
+ 95, 38, 4, 4, 38, 4, 10, 46, 147, 46,
+ 147, 79, 47, 10, 47, 936, 46, 38, 38, 38,
+ 38, 142, 47, 55, 55, 149, 55, 149, 23, 23,
+ 23, 4, 4, 4, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 23, 23, 163, 24,
- 24, 38, 764, 38, 41, 41, 41, 23, 130, 130,
- 24, 45, 45, 45, 38, 38, 38, 38, 163, 23,
- 23, 23, 24, 24, 24, 25, 25, 25, 25, 25,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 18, 24,
+ 18, 24, 168, 29, 58, 29, 74, 74, 935, 30,
+ 18, 30, 24, 29, 18, 18, 18, 18, 31, 30,
+ 31, 31, 32, 191, 32, 32, 48, 162, 48, 67,
+ 67, 168, 67, 246, 162, 246, 48, 75, 74, 75,
+ 141, 58, 75, 75, 75, 75, 167, 176, 177, 24,
+ 24, 24, 191, 29, 253, 29, 253, 105, 105, 30,
+ 105, 30, 116, 116, 116, 116, 294, 74, 294, 31,
+ 141, 58, 323, 32, 323, 934, 167, 176, 177, 18,
+
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 31, 31, 31, 32, 32, 32, 57,
- 57, 57, 62, 62, 62, 62, 99, 99, 99, 99,
- 131, 131, 133, 133, 167, 198, 198, 31, 167, 763,
- 32, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
-
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 35,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 33, 33, 39, 33, 39, 34,
+ 34, 33, 34, 182, 41, 42, 34, 333, 43, 181,
+
+ 33, 41, 42, 186, 333, 34, 203, 203, 203, 203,
+ 325, 43, 325, 181, 41, 42, 179, 187, 179, 188,
+ 314, 43, 179, 182, 41, 42, 43, 33, 194, 41,
+ 42, 199, 34, 186, 33, 33, 39, 33, 39, 34,
+ 34, 43, 34, 181, 41, 42, 179, 187, 179, 188,
+ 43, 179, 933, 41, 42, 43, 33, 194, 41, 42,
+ 199, 34, 932, 33, 314, 39, 931, 39, 34, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 49, 53, 53,
- 53, 121, 105, 105, 53, 158, 108, 108, 115, 115,
- 160, 158, 63, 63, 63, 291, 168, 275, 63, 121,
-
- 49, 188, 49, 275, 49, 63, 168, 205, 205, 160,
- 49, 63, 291, 49, 49, 49, 405, 49, 49, 63,
- 105, 170, 405, 49, 108, 49, 115, 180, 180, 180,
- 180, 170, 762, 53, 170, 181, 181, 181, 185, 185,
- 185, 188, 192, 192, 192, 209, 209, 63, 193, 193,
- 193, 294, 194, 194, 194, 294, 192, 192, 192, 192,
- 211, 211, 193, 193, 193, 193, 194, 194, 194, 194,
- 195, 195, 195, 201, 201, 201, 210, 213, 213, 201,
- 289, 257, 210, 210, 195, 195, 195, 195, 192, 217,
- 217, 217, 264, 264, 289, 217, 194, 362, 211, 257,
-
- 266, 266, 217, 248, 248, 248, 248, 761, 217, 267,
- 267, 269, 269, 195, 298, 309, 217, 314, 298, 362,
- 314, 321, 321, 321, 309, 330, 330, 760, 201, 314,
- 314, 317, 317, 317, 317, 321, 321, 321, 321, 708,
- 314, 332, 332, 708, 217, 241, 241, 241, 241, 241,
- 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
- 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
- 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
- 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
- 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-
- 241, 241, 241, 250, 250, 250, 250, 334, 334, 250,
- 336, 336, 338, 338, 250, 344, 344, 757, 250, 415,
- 415, 250, 756, 250, 418, 418, 250, 278, 278, 755,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 324, 324, 324, 339, 363,
- 364, 340, 340, 365, 339, 339, 342, 342, 366, 324,
-
- 324, 324, 324, 340, 371, 409, 342, 342, 409, 409,
- 441, 363, 365, 444, 364, 420, 420, 420, 371, 485,
- 754, 441, 494, 494, 444, 485, 366, 504, 504, 340,
- 341, 341, 367, 341, 341, 341, 341, 341, 341, 341,
- 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
- 341, 341, 341, 341, 341, 341, 341, 367, 341, 341,
- 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
- 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
- 341, 341, 341, 341, 341, 341, 341, 341, 343, 343,
- 343, 343, 752, 369, 505, 505, 343, 750, 343, 343,
-
- 495, 495, 495, 343, 343, 343, 343, 343, 343, 360,
- 360, 368, 360, 360, 360, 360, 360, 360, 360, 369,
- 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
- 360, 360, 370, 442, 360, 360, 360, 360, 443, 368,
- 428, 428, 368, 431, 431, 416, 416, 416, 561, 561,
- 428, 428, 749, 431, 431, 443, 519, 445, 370, 416,
- 416, 416, 416, 442, 360, 360, 360, 375, 375, 519,
- 375, 375, 375, 375, 375, 375, 375, 440, 375, 375,
- 375, 375, 375, 375, 375, 375, 375, 375, 375, 375,
- 445, 447, 375, 375, 375, 375, 419, 419, 419, 446,
-
- 450, 440, 449, 440, 520, 448, 503, 503, 503, 512,
- 419, 419, 419, 419, 517, 447, 448, 520, 446, 450,
- 501, 501, 375, 375, 375, 427, 427, 512, 449, 517,
- 501, 501, 427, 427, 427, 427, 427, 427, 427, 427,
- 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
- 427, 427, 427, 427, 427, 427, 427, 429, 429, 429,
- 429, 462, 514, 513, 518, 429, 515, 566, 566, 521,
- 567, 567, 429, 429, 429, 429, 429, 429, 432, 432,
- 432, 432, 516, 462, 521, 515, 432, 513, 518, 462,
- 514, 574, 522, 432, 432, 432, 432, 432, 432, 502,
-
- 502, 502, 502, 532, 565, 565, 565, 502, 516, 522,
- 572, 573, 574, 532, 502, 502, 502, 502, 502, 502,
- 575, 576, 573, 577, 578, 579, 580, 583, 581, 582,
- 615, 615, 634, 572, 617, 617, 656, 656, 684, 684,
- 748, 577, 575, 581, 681, 747, 583, 686, 686, 810,
- 810, 576, 578, 745, 744, 579, 580, 582, 743, 742,
- 740, 681, 634, 769, 769, 769, 769, 769, 769, 769,
- 769, 769, 769, 769, 769, 769, 769, 769, 769, 770,
- 770, 770, 770, 770, 770, 770, 770, 770, 770, 770,
- 770, 770, 770, 770, 770, 771, 771, 771, 771, 771,
-
- 771, 771, 771, 771, 771, 771, 771, 771, 771, 771,
- 771, 772, 772, 772, 772, 772, 772, 772, 772, 772,
- 772, 772, 772, 772, 772, 772, 772, 773, 773, 773,
- 773, 773, 773, 773, 773, 773, 773, 773, 773, 773,
- 773, 773, 773, 774, 774, 774, 774, 774, 774, 774,
- 774, 774, 774, 774, 774, 774, 774, 774, 774, 775,
- 775, 775, 775, 775, 775, 775, 775, 775, 775, 775,
- 775, 775, 775, 775, 775, 776, 776, 776, 776, 776,
- 776, 776, 776, 776, 776, 776, 776, 776, 776, 776,
- 776, 777, 777, 777, 777, 777, 777, 777, 777, 777,
-
- 777, 777, 777, 777, 777, 777, 777, 778, 778, 778,
- 778, 778, 778, 778, 778, 778, 778, 778, 778, 778,
- 778, 778, 778, 779, 779, 779, 779, 779, 779, 779,
- 779, 779, 779, 779, 779, 779, 779, 779, 779, 780,
- 780, 780, 780, 780, 780, 780, 780, 780, 780, 780,
- 780, 780, 780, 780, 780, 781, 781, 781, 781, 781,
- 781, 781, 781, 781, 781, 781, 781, 781, 781, 781,
- 781, 782, 782, 782, 782, 782, 782, 782, 782, 782,
- 782, 782, 782, 782, 782, 782, 782, 783, 783, 783,
- 783, 739, 738, 783, 783, 783, 784, 784, 784, 784,
-
- 784, 784, 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 785, 785, 785, 785, 737, 736, 785, 785, 785,
- 786, 735, 786, 786, 786, 786, 786, 786, 786, 786,
- 786, 786, 786, 786, 786, 786, 787, 734, 787, 787,
- 787, 787, 787, 787, 787, 787, 787, 787, 787, 787,
- 787, 787, 788, 788, 788, 733, 732, 788, 788, 788,
- 789, 731, 789, 789, 789, 789, 789, 789, 789, 789,
- 789, 789, 789, 789, 789, 789, 790, 729, 790, 790,
- 790, 790, 790, 790, 790, 790, 790, 790, 790, 790,
- 790, 790, 791, 727, 791, 791, 791, 791, 791, 791,
-
- 791, 791, 791, 791, 791, 791, 791, 791, 792, 792,
- 792, 792, 792, 792, 792, 792, 792, 792, 792, 792,
- 792, 792, 792, 792, 793, 726, 793, 793, 725, 793,
- 793, 793, 724, 723, 793, 793, 722, 721, 720, 793,
- 794, 794, 794, 794, 719, 718, 794, 794, 794, 795,
- 717, 795, 795, 795, 795, 795, 795, 795, 795, 795,
- 795, 795, 795, 795, 795, 796, 796, 796, 796, 715,
- 714, 796, 796, 796, 797, 713, 797, 797, 797, 797,
- 797, 797, 797, 797, 797, 797, 797, 797, 797, 797,
- 798, 712, 798, 798, 798, 798, 798, 798, 798, 798,
-
- 798, 710, 798, 798, 798, 798, 799, 709, 707, 706,
- 799, 799, 799, 799, 705, 704, 799, 799, 800, 703,
- 800, 800, 800, 800, 800, 800, 800, 800, 800, 800,
- 800, 800, 800, 800, 801, 801, 801, 801, 702, 701,
- 801, 801, 801, 802, 802, 802, 802, 802, 802, 802,
- 802, 802, 802, 802, 802, 802, 802, 802, 802, 803,
- 803, 803, 803, 700, 803, 803, 803, 803, 803, 803,
- 803, 803, 803, 803, 803, 804, 699, 698, 804, 804,
- 804, 804, 804, 804, 804, 682, 804, 804, 804, 804,
- 804, 805, 680, 805, 805, 805, 805, 805, 805, 805,
-
- 805, 805, 805, 805, 805, 805, 805, 806, 679, 806,
- 806, 678, 806, 806, 806, 677, 675, 806, 806, 674,
- 672, 671, 806, 807, 807, 807, 807, 670, 669, 807,
- 807, 807, 808, 668, 808, 808, 808, 808, 808, 808,
- 808, 808, 808, 808, 808, 808, 808, 808, 809, 809,
- 667, 809, 809, 666, 665, 664, 809, 809, 811, 663,
- 811, 811, 811, 811, 811, 811, 811, 811, 811, 811,
- 811, 811, 811, 811, 812, 662, 812, 812, 812, 812,
- 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
- 813, 661, 813, 813, 813, 813, 813, 813, 813, 813,
-
- 813, 813, 813, 813, 813, 813, 814, 814, 660, 659,
- 814, 814, 814, 815, 815, 658, 655, 815, 815, 815,
- 816, 816, 816, 816, 816, 816, 816, 816, 816, 816,
- 816, 816, 816, 816, 816, 816, 817, 817, 817, 817,
- 817, 817, 817, 817, 817, 817, 817, 817, 817, 817,
- 817, 817, 818, 653, 818, 818, 818, 818, 818, 818,
- 818, 818, 818, 652, 818, 818, 818, 818, 819, 651,
- 819, 819, 819, 819, 819, 819, 819, 819, 819, 819,
- 819, 819, 819, 819, 820, 820, 650, 646, 644, 643,
- 820, 821, 821, 821, 821, 642, 641, 821, 821, 821,
-
- 821, 822, 639, 822, 822, 822, 822, 822, 822, 822,
- 822, 822, 822, 822, 822, 822, 822, 823, 637, 823,
- 823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
- 823, 823, 823, 824, 636, 824, 824, 824, 824, 824,
- 824, 824, 824, 824, 824, 824, 824, 824, 824, 825,
- 635, 825, 825, 825, 825, 825, 825, 825, 825, 825,
- 825, 825, 825, 825, 825, 826, 633, 826, 826, 826,
- 826, 826, 826, 826, 826, 826, 826, 826, 826, 826,
- 826, 827, 632, 827, 827, 827, 827, 827, 827, 827,
- 827, 827, 827, 827, 827, 827, 827, 828, 828, 828,
-
- 828, 828, 828, 828, 828, 828, 828, 828, 828, 828,
- 828, 828, 828, 829, 631, 829, 829, 630, 829, 829,
- 829, 629, 628, 829, 829, 627, 626, 625, 829, 830,
- 830, 830, 830, 624, 623, 830, 830, 830, 831, 621,
- 831, 831, 831, 831, 831, 831, 831, 831, 831, 831,
- 831, 831, 831, 831, 832, 832, 832, 832, 619, 612,
- 832, 832, 832, 833, 833, 611, 610, 609, 833, 833,
- 834, 608, 607, 606, 834, 834, 834, 834, 604, 601,
- 834, 834, 835, 600, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835, 836, 836,
-
- 836, 836, 599, 598, 836, 836, 836, 837, 837, 837,
- 837, 837, 837, 837, 837, 837, 837, 837, 837, 837,
- 837, 837, 837, 838, 838, 838, 838, 597, 838, 838,
- 838, 838, 838, 838, 838, 838, 838, 838, 838, 839,
- 596, 595, 839, 839, 839, 839, 839, 839, 839, 594,
- 839, 839, 839, 839, 839, 840, 593, 840, 840, 592,
- 840, 840, 840, 591, 590, 840, 840, 588, 569, 568,
- 840, 841, 841, 841, 841, 564, 563, 841, 841, 841,
- 842, 562, 842, 842, 842, 842, 842, 842, 842, 842,
- 842, 842, 842, 842, 842, 842, 843, 843, 560, 843,
-
- 843, 559, 558, 557, 843, 843, 844, 556, 844, 844,
- 844, 844, 844, 844, 844, 844, 844, 844, 844, 844,
- 844, 844, 845, 555, 845, 845, 845, 845, 845, 845,
- 845, 845, 845, 845, 845, 845, 845, 845, 846, 554,
- 846, 846, 846, 846, 846, 846, 846, 846, 846, 846,
- 846, 846, 846, 846, 847, 847, 847, 847, 847, 847,
- 847, 847, 847, 847, 847, 847, 847, 847, 847, 847,
- 848, 848, 848, 848, 553, 552, 848, 848, 848, 849,
- 849, 849, 849, 551, 549, 849, 849, 849, 850, 850,
- 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
-
- 850, 850, 850, 850, 851, 851, 851, 851, 851, 851,
- 851, 851, 851, 851, 851, 851, 851, 851, 851, 851,
- 852, 548, 852, 852, 852, 852, 852, 852, 852, 852,
- 852, 546, 852, 852, 852, 852, 853, 853, 545, 544,
- 543, 542, 853, 854, 854, 854, 854, 541, 540, 854,
- 854, 854, 854, 855, 539, 855, 855, 855, 855, 855,
- 855, 855, 855, 855, 855, 855, 855, 855, 855, 856,
- 856, 856, 856, 856, 856, 856, 856, 856, 856, 856,
- 856, 856, 856, 856, 856, 857, 857, 857, 857, 857,
- 857, 857, 857, 857, 857, 857, 857, 857, 857, 857,
-
- 857, 538, 536, 534, 533, 530, 528, 526, 525, 524,
- 523, 509, 508, 507, 506, 500, 499, 498, 497, 496,
- 492, 491, 490, 489, 488, 487, 486, 483, 482, 481,
- 480, 479, 478, 476, 475, 474, 473, 472, 471, 469,
- 468, 467, 464, 463, 461, 460, 459, 458, 457, 454,
- 453, 452, 451, 439, 437, 436, 435, 434, 430, 426,
- 423, 422, 421, 414, 413, 412, 411, 410, 408, 407,
- 406, 404, 403, 402, 401, 400, 399, 398, 397, 396,
- 395, 394, 393, 392, 391, 390, 388, 387, 386, 384,
- 383, 382, 381, 380, 379, 378, 377, 376, 373, 372,
-
- 361, 356, 355, 352, 350, 346, 337, 327, 326, 325,
- 323, 318, 315, 313, 312, 311, 308, 307, 306, 305,
- 303, 301, 300, 299, 297, 296, 295, 293, 292, 290,
- 287, 286, 284, 282, 281, 280, 276, 263, 262, 243,
- 240, 239, 234, 231, 226, 222, 221, 220, 219, 216,
- 208, 207, 204, 203, 189, 187, 183, 179, 176, 175,
- 174, 173, 172, 171, 169, 166, 165, 162, 161, 159,
- 156, 155, 154, 153, 151, 149, 148, 146, 144, 143,
- 137, 134, 125, 124, 122, 119, 114, 112, 107, 103,
- 97, 92, 89, 87, 85, 84, 83, 80, 76, 74,
-
- 73, 71, 67, 65, 59, 55, 50, 47, 43, 39,
- 16, 15, 10, 8, 7, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
- 768, 768, 768, 768
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 40, 44, 40, 63, 63, 193, 63,
+ 122, 122, 347, 63, 183, 76, 76, 44, 76, 125,
+ 125, 348, 76, 350, 195, 132, 132, 44, 180, 184,
+ 190, 76, 44, 409, 409, 183, 180, 76, 193, 930,
+ 190, 347, 122, 196, 183, 197, 198, 44, 873, 184,
+
+ 348, 125, 350, 40, 195, 40, 44, 132, 180, 184,
+ 190, 44, 236, 189, 183, 244, 180, 189, 235, 76,
+ 190, 122, 258, 196, 872, 197, 198, 278, 184, 871,
+ 125, 290, 40, 291, 40, 59, 132, 63, 228, 228,
+ 192, 228, 236, 189, 260, 244, 76, 189, 232, 232,
+ 192, 232, 258, 192, 59, 235, 59, 278, 59, 249,
+ 249, 290, 249, 291, 59, 870, 249, 59, 59, 59,
+ 192, 59, 59, 59, 260, 260, 869, 59, 298, 298,
+ 192, 298, 192, 868, 59, 235, 59, 867, 59, 319,
+ 320, 866, 239, 239, 59, 239, 865, 59, 59, 59,
+
+ 59, 59, 59, 864, 240, 240, 59, 240, 59, 239,
+ 239, 239, 239, 241, 241, 863, 241, 261, 261, 319,
+ 320, 240, 240, 240, 240, 242, 242, 352, 242, 343,
+ 241, 241, 241, 241, 354, 239, 305, 305, 305, 305,
+ 249, 344, 242, 242, 242, 242, 346, 862, 355, 261,
+ 269, 269, 349, 269, 241, 357, 352, 269, 353, 343,
+ 346, 356, 353, 354, 239, 242, 269, 358, 861, 349,
+ 359, 344, 269, 360, 359, 361, 346, 355, 261, 362,
+ 364, 366, 349, 367, 241, 357, 368, 369, 353, 346,
+ 356, 371, 353, 372, 371, 242, 368, 358, 349, 374,
+
+ 359, 375, 360, 359, 269, 361, 415, 415, 362, 364,
+ 366, 400, 367, 400, 614, 614, 368, 369, 402, 860,
+ 402, 371, 859, 372, 371, 368, 858, 387, 374, 394,
+ 375, 269, 307, 307, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 307, 387, 394, 404,
+ 307, 404, 307, 307, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 370, 373, 390, 390,
+ 370, 390, 395, 396, 373, 370, 379, 379, 379, 379,
+
+ 398, 406, 430, 406, 430, 390, 390, 390, 390, 408,
+ 410, 857, 423, 411, 411, 856, 370, 373, 448, 855,
+ 370, 395, 854, 396, 373, 370, 376, 425, 376, 428,
+ 398, 376, 376, 393, 393, 853, 393, 376, 376, 408,
+ 410, 410, 423, 376, 376, 411, 429, 448, 376, 411,
+ 393, 393, 393, 393, 852, 376, 376, 425, 376, 428,
+ 851, 376, 376, 420, 420, 420, 420, 376, 376, 432,
+ 847, 432, 376, 376, 411, 846, 429, 376, 412, 412,
+ 792, 412, 412, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 412, 412, 412, 412, 412, 412, 412, 412,
+
+ 412, 412, 412, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 412, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 412, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 791, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 412, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 412, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 413, 413, 445, 446, 441, 433, 434, 435,
+ 438, 439, 436, 442, 449, 459, 450, 498, 790, 498,
+ 440, 443, 789, 433, 434, 436, 441, 435, 451, 443,
+ 439, 788, 438, 442, 445, 446, 413, 413, 414, 414,
+
+ 414, 414, 440, 449, 459, 440, 450, 414, 414, 414,
+ 414, 414, 414, 433, 434, 436, 441, 435, 451, 443,
+ 439, 438, 452, 442, 462, 453, 454, 455, 456, 787,
+ 458, 440, 414, 414, 440, 460, 786, 414, 414, 414,
+ 414, 414, 414, 444, 463, 464, 465, 467, 444, 444,
+ 444, 444, 452, 462, 444, 453, 454, 455, 456, 444,
+ 458, 466, 469, 444, 470, 460, 444, 785, 444, 471,
+ 784, 444, 472, 463, 473, 464, 465, 467, 444, 444,
+ 444, 444, 474, 475, 444, 476, 477, 478, 479, 444,
+ 466, 480, 469, 444, 470, 444, 482, 444, 483, 471,
+
+ 444, 481, 472, 484, 473, 485, 486, 481, 487, 488,
+ 508, 489, 474, 475, 490, 476, 477, 478, 479, 491,
+ 492, 480, 493, 494, 783, 495, 482, 483, 497, 782,
+ 496, 481, 484, 496, 496, 485, 486, 481, 487, 488,
+ 489, 501, 504, 501, 490, 503, 503, 505, 503, 491,
+ 492, 523, 493, 494, 495, 506, 499, 499, 497, 499,
+ 496, 510, 496, 496, 502, 502, 600, 502, 600, 613,
+ 613, 613, 504, 499, 499, 499, 499, 505, 615, 615,
+ 523, 502, 502, 502, 502, 506, 601, 601, 780, 601,
+ 508, 510, 511, 511, 773, 511, 511, 511, 511, 511,
+
+ 511, 511, 511, 511, 511, 511, 511, 511, 511, 511,
+ 511, 511, 511, 511, 511, 511, 511, 511, 511, 511,
+ 511, 511, 511, 511, 511, 511, 511, 511, 511, 511,
+ 511, 511, 511, 511, 511, 511, 511, 511, 511, 511,
+ 511, 511, 511, 511, 511, 511, 514, 511, 511, 511,
+ 511, 511, 511, 511, 511, 511, 511, 511, 511, 511,
+ 511, 511, 511, 511, 511, 511, 511, 511, 511, 511,
+ 511, 511, 511, 511, 511, 511, 512, 512, 520, 514,
+ 525, 527, 516, 516, 532, 526, 528, 770, 521, 522,
+ 526, 758, 607, 607, 529, 607, 531, 528, 525, 529,
+
+ 525, 693, 532, 693, 744, 527, 530, 609, 520, 531,
+ 512, 512, 513, 513, 513, 513, 516, 516, 521, 522,
+ 526, 513, 513, 513, 513, 513, 513, 528, 525, 529,
+ 525, 535, 532, 530, 527, 733, 539, 533, 545, 531,
+ 609, 534, 533, 704, 535, 546, 545, 536, 537, 539,
+ 703, 513, 513, 513, 513, 513, 513, 517, 517, 517,
+ 517, 534, 530, 536, 537, 538, 517, 517, 517, 517,
+ 517, 517, 533, 540, 535, 546, 545, 699, 550, 539,
+ 542, 547, 551, 538, 541, 553, 543, 544, 554, 555,
+ 556, 534, 557, 536, 537, 540, 517, 517, 517, 517,
+
+ 517, 517, 542, 541, 698, 542, 543, 544, 550, 557,
+ 547, 551, 558, 538, 553, 557, 560, 554, 559, 555,
+ 556, 563, 606, 564, 540, 565, 566, 692, 569, 570,
+ 574, 542, 572, 541, 542, 573, 543, 544, 576, 557,
+ 577, 578, 558, 579, 581, 557, 560, 559, 580, 582,
+ 583, 563, 564, 584, 565, 586, 566, 569, 587, 570,
+ 574, 572, 588, 590, 573, 589, 591, 576, 592, 594,
+ 577, 578, 593, 579, 581, 595, 596, 580, 582, 583,
+ 602, 595, 597, 584, 603, 586, 604, 616, 587, 611,
+ 611, 618, 588, 590, 589, 591, 621, 624, 592, 594,
+
+ 619, 593, 606, 686, 622, 595, 596, 701, 701, 602,
+ 595, 623, 597, 626, 603, 604, 622, 616, 625, 624,
+ 618, 621, 628, 611, 611, 612, 612, 612, 612, 623,
+ 619, 625, 627, 626, 612, 612, 612, 612, 612, 612,
+ 628, 627, 629, 631, 630, 632, 622, 682, 624, 629,
+ 621, 630, 631, 634, 633, 774, 632, 774, 634, 623,
+ 635, 625, 636, 626, 612, 612, 612, 612, 612, 612,
+ 628, 627, 633, 636, 633, 637, 639, 640, 638, 629,
+ 637, 630, 631, 643, 635, 641, 632, 642, 634, 639,
+ 641, 668, 644, 645, 648, 640, 643, 664, 647, 650,
+
+ 655, 653, 633, 636, 633, 638, 648, 642, 658, 654,
+ 637, 653, 657, 635, 659, 661, 662, 663, 665, 639,
+ 641, 644, 666, 645, 648, 640, 643, 647, 667, 650,
+ 655, 653, 669, 670, 638, 671, 648, 642, 654, 673,
+ 653, 674, 657, 659, 675, 661, 662, 663, 665, 676,
+ 679, 666, 678, 680, 681, 683, 684, 685, 667, 687,
+ 688, 669, 670, 689, 671, 690, 691, 694, 695, 673,
+ 674, 696, 696, 675, 696, 700, 700, 700, 711, 676,
+ 679, 678, 680, 707, 681, 683, 684, 685, 709, 687,
+ 688, 710, 689, 702, 702, 690, 691, 694, 695, 708,
+
+ 707, 712, 711, 709, 708, 713, 716, 710, 714, 718,
+ 721, 715, 720, 712, 717, 716, 719, 722, 727, 1147,
+ 1147, 734, 718, 652, 720, 727, 724, 713, 721, 723,
+ 707, 711, 714, 709, 708, 715, 717, 710, 725, 722,
+ 729, 719, 723, 712, 726, 716, 724, 725, 730, 729,
+ 728, 734, 718, 735, 720, 727, 713, 728, 721, 730,
+ 738, 714, 726, 737, 715, 717, 739, 740, 722, 741,
+ 719, 742, 723, 737, 617, 743, 724, 725, 745, 729,
+ 746, 747, 735, 748, 749, 750, 752, 728, 751, 730,
+ 738, 754, 726, 737, 756, 760, 739, 740, 741, 761,
+
+ 742, 762, 765, 737, 743, 767, 771, 776, 745, 776,
+ 746, 747, 778, 748, 749, 750, 752, 751, 772, 795,
+ 849, 754, 849, 756, 795, 760, 764, 764, 793, 761,
+ 762, 764, 765, 794, 764, 767, 771, 764, 768, 768,
+ 796, 778, 764, 768, 797, 809, 768, 799, 772, 768,
+ 794, 798, 793, 801, 795, 796, 764, 764, 802, 799,
+ 797, 764, 800, 803, 764, 804, 806, 764, 768, 768,
+ 807, 764, 803, 768, 809, 798, 768, 801, 805, 768,
+ 794, 793, 802, 811, 800, 796, 814, 804, 808, 799,
+ 797, 805, 810, 812, 610, 816, 806, 817, 608, 818,
+
+ 807, 819, 803, 820, 798, 821, 801, 823, 825, 826,
+ 828, 802, 811, 800, 832, 814, 804, 833, 808, 834,
+ 837, 805, 810, 812, 816, 836, 828, 817, 818, 838,
+ 839, 819, 820, 840, 842, 821, 841, 823, 825, 826,
+ 828, 835, 598, 844, 832, 835, 833, 845, 835, 834,
+ 837, 848, 875, 843, 836, 828, 843, 874, 835, 838,
+ 839, 876, 878, 840, 842, 841, 843, 877, 879, 880,
+ 883, 835, 844, 881, 884, 835, 845, 885, 835, 886,
+ 848, 874, 875, 843, 888, 889, 843, 835, 890, 571,
+ 891, 876, 878, 892, 893, 843, 877, 894, 879, 880,
+
+ 883, 895, 881, 897, 884, 898, 899, 885, 900, 886,
+ 874, 901, 902, 888, 904, 889, 905, 908, 890, 891,
+ 906, 909, 910, 892, 893, 911, 912, 894, 913, 915,
+ 895, 914, 916, 897, 916, 898, 899, 918, 900, 918,
+ 901, 902, 943, 944, 904, 945, 905, 908, 914, 906,
+ 946, 909, 910, 947, 911, 912, 948, 913, 915, 949,
+ 950, 914, 951, 568, 952, 953, 954, 552, 955, 956,
+ 958, 943, 959, 944, 960, 945, 961, 914, 962, 963,
+ 946, 964, 965, 947, 967, 969, 948, 970, 971, 949,
+ 950, 972, 951, 952, 953, 973, 954, 955, 975, 956,
+
+ 958, 959, 976, 960, 978, 961, 977, 979, 962, 963,
+ 977, 964, 965, 967, 969, 993, 970, 994, 971, 995,
+ 996, 972, 997, 998, 999, 973, 1001, 1002, 975, 1004,
+ 1005, 976, 1006, 978, 1007, 977, 1008, 979, 1009, 977,
+ 1010, 1012, 1016, 1017, 1018, 993, 1021, 994, 995, 1022,
+ 996, 997, 998, 999, 1023, 1031, 1001, 1002, 1004, 1005,
+ 1024, 1025, 1006, 1026, 1007, 1028, 1008, 1029, 1009, 1030,
+ 1010, 1012, 1016, 1017, 1018, 1021, 1032, 1033, 1034, 1022,
+ 1037, 524, 1039, 1041, 1023, 1031, 1044, 1047, 1048, 1024,
+ 1025, 1049, 1026, 1050, 1028, 1051, 1029, 1052, 1030, 1053,
+
+ 1054, 1055, 1056, 1058, 515, 1059, 1032, 1033, 1034, 1060,
+ 1037, 1039, 1061, 1041, 1063, 1067, 1044, 1047, 1048, 1068,
+ 1049, 1069, 1070, 1050, 1072, 1051, 1073, 1052, 1074, 1053,
+ 1054, 1055, 1056, 1058, 1059, 1075, 1076, 1077, 1060, 1078,
+ 1081, 1083, 1061, 1063, 1084, 1067, 1085, 468, 1086, 1068,
+ 1069, 1087, 1070, 1088, 1072, 1090, 1073, 1093, 1074, 1094,
+ 1097, 437, 1098, 1099, 1102, 1075, 1076, 1077, 1078, 1081,
+ 1103, 1083, 1160, 1084, 1160, 419, 1085, 1086, 392, 1189,
+ 1087, 1189, 1088, 377, 351, 1090, 341, 1093, 1094, 339,
+ 1097, 1098, 1099, 334, 1102, 301, 300, 299, 296, 285,
+
+ 1103, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
+ 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1108, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1109, 1109, 1109, 1109, 1109,
+ 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+ 1109, 1109, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+ 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1111,
+ 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111,
+ 1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112, 1112,
+ 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
+
+ 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+ 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1116, 1116, 1116, 1116, 1116, 1116,
+ 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+ 1116, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+ 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1118, 1118,
+ 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
+
+ 1118, 1118, 1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119,
+ 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
+ 1119, 1119, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1121,
+ 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121,
+ 1121, 1121, 1121, 1121, 1121, 1121, 1122, 1122, 1122, 1122,
+ 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+ 1122, 1122, 1122, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+ 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
+
+ 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1125, 1125, 1125,
+ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
+ 1125, 1125, 1125, 1125, 1126, 1126, 282, 1126, 1126, 274,
+ 273, 272, 1126, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+ 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1128,
+ 1128, 271, 1128, 1128, 268, 266, 265, 1128, 1129, 256,
+ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+ 1129, 1129, 1129, 1129, 1129, 1130, 255, 1130, 1130, 1130,
+ 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+ 1130, 1130, 1131, 1131, 1131, 252, 1131, 1131, 251, 234,
+
+ 230, 1131, 1132, 227, 1132, 1132, 1132, 1132, 1132, 1132,
+ 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1133,
+ 226, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133,
+ 1133, 1133, 1133, 1133, 1133, 1133, 1134, 1134, 1134, 1134,
+ 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 222, 1134,
+ 208, 1134, 1134, 1135, 207, 206, 1135, 1135, 1135, 1135,
+ 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+ 1136, 1136, 202, 1136, 1136, 175, 174, 172, 1136, 1137,
+ 170, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+ 1137, 1137, 1137, 1137, 1137, 1137, 1138, 169, 1138, 1138,
+
+ 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+ 166, 1138, 1138, 1139, 165, 1139, 164, 158, 1139, 1139,
+ 1139, 1139, 1139, 155, 154, 153, 1139, 1140, 152, 1140,
+ 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
+ 1140, 1140, 1140, 1140, 1141, 1141, 144, 1141, 1141, 143,
+ 139, 136, 1141, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+ 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+ 1143, 131, 1143, 129, 1143, 1143, 1143, 1143, 1143, 1143,
+ 1143, 1143, 1143, 124, 1143, 1143, 1143, 1144, 120, 1144,
+ 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
+
+ 1144, 1144, 1144, 1144, 1145, 114, 1145, 1145, 1145, 1145,
+ 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
+ 1145, 1146, 1146, 109, 107, 1146, 1146, 1148, 106, 1148,
+ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+ 1148, 1148, 1148, 1148, 1149, 103, 1149, 1149, 1149, 101,
+ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+ 1149, 1150, 1150, 99, 1150, 1150, 98, 97, 94, 1150,
+ 1151, 91, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
+ 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1152, 90, 1152,
+ 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
+
+ 1152, 1152, 1152, 1152, 1153, 1153, 88, 86, 84, 1153,
+ 1154, 1154, 80, 78, 72, 1154, 1155, 1155, 1155, 1155,
+ 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
+ 1155, 1155, 1155, 1156, 1156, 71, 1156, 1156, 68, 65,
+ 60, 1156, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+ 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1158,
+ 57, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+ 1158, 1158, 1158, 53, 1158, 1158, 1159, 49, 1159, 1159,
+ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ 1159, 1159, 1159, 1161, 1161, 16, 1161, 1161, 15, 0,
+
+ 0, 1161, 1161, 1162, 0, 1162, 1162, 1162, 1162, 1162,
+ 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+ 1163, 0, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
+ 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1164, 0, 1164,
+ 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 1164, 1164, 1164, 1164, 1165, 0, 1165, 1165, 1165, 1165,
+ 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+ 1165, 1166, 0, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+ 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+
+ 0, 1167, 0, 1167, 1167, 1168, 1168, 1168, 1168, 1168,
+ 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+ 1168, 1168, 1169, 0, 0, 1169, 1169, 1169, 1169, 1169,
+ 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,
+ 1170, 0, 1170, 1170, 0, 0, 0, 1170, 1171, 0,
+ 1171, 0, 0, 1171, 1171, 1171, 1171, 1171, 0, 0,
+ 0, 1171, 1172, 0, 1172, 1172, 1172, 1172, 1172, 1172,
+ 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1173,
+ 1173, 0, 1173, 1173, 0, 0, 0, 1173, 1174, 1174,
+ 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
+
+ 1174, 1174, 1174, 1174, 1174, 1175, 0, 1175, 0, 1175,
+ 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 0, 1175,
+ 1175, 1175, 1176, 0, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177,
+ 0, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+ 1177, 1177, 1177, 1177, 1177, 1177, 1178, 1178, 0, 0,
+ 1178, 1178, 1179, 0, 1179, 1179, 1179, 1179, 1179, 1179,
+ 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1180,
+ 0, 1180, 1180, 1180, 0, 1180, 1180, 1180, 1180, 1180,
+ 1180, 1180, 1180, 1180, 1180, 1180, 1181, 0, 1181, 1181,
+
+ 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
+ 1181, 1181, 1181, 1182, 0, 1182, 1182, 1182, 1182, 1182,
+ 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
+ 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
+ 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1184, 1184, 0,
+ 1184, 1184, 0, 0, 0, 1184, 1185, 1185, 0, 1185,
+ 1185, 0, 0, 0, 1185, 1186, 1186, 1186, 1186, 1186,
+ 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
+ 1186, 1186, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1188,
+
+ 0, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 0, 1188, 1188, 1190, 1190, 0, 1190,
+ 1190, 0, 0, 0, 1190, 1190, 1191, 0, 1191, 1191,
+ 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+ 1191, 1191, 1191, 1192, 0, 1192, 1192, 1192, 1192, 1192,
+ 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
+ 1193, 0, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
+ 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1194, 1194, 1194,
+ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+ 1194, 1194, 1194, 1194, 1195, 1195, 1195, 1196, 1196, 0,
+
+ 1196, 1196, 0, 0, 0, 1196, 1197, 0, 1197, 1197,
+ 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
+ 1197, 1197, 1197, 1198, 0, 1198, 1198, 1198, 1198, 1198,
+ 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
+ 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1200, 1200, 1200,
+ 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+ 1200, 1200, 1200, 1200, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106
} ;
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
+static char *yy_full_match;
+static int yy_lp;
+#define REJECT \
+{ \
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ \
+yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
+++(yy_lp); \
+goto find_rule; \
+}
+
+static int yy_more_flag = 0;
+static int yy_more_len = 0;
+#define yymore() ((yy_more_flag) = 1)
+#define YY_MORE_ADJ (yy_more_len)
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "scan.l"
-#define INITIAL 0
-/* scan.l - scanner for flex input */
+/* scan.l - scanner for flex input -*-C-*- */
#line 4 "scan.l"
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/initscan.c,v 1.14 2013/11/04 17:03:32 millert Exp $ */
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include "flexdef.h"
#include "parse.h"
+extern bool tablesverify, tablesext;
+extern int trlcontxt; /* Set in parse.y for each rule. */
+extern const char *escaped_qstart, *escaped_qend;
#define ACTION_ECHO add_action( yytext )
#define ACTION_IFDEF(def, should_define) \
@@ -1289,6 +1921,17 @@ char *yytext;
action_define( def, 1 ); \
}
+#define ACTION_ECHO_QSTART add_action (escaped_qstart)
+#define ACTION_ECHO_QEND add_action (escaped_qend)
+
+#define ACTION_M4_IFDEF(def, should_define) \
+ do{ \
+ if ( should_define ) \
+ buf_m4_define( &m4defs_buf, def, NULL);\
+ else \
+ buf_m4_undefine( &m4defs_buf, def);\
+ } while(0)
+
#define MARK_END_OF_PROLOG mark_prolog();
#define YY_DECL \
@@ -1299,7 +1942,15 @@ char *yytext;
return CHAR;
#define RETURNNAME \
+ if(yyleng < MAXLINE) \
+ { \
strlcpy( nmstr, yytext, sizeof nmstr ); \
+ } \
+ else \
+ { \
+ synerr(_("Input line too long\n")); \
+ FLEX_EXIT(EXIT_FAILURE); \
+ } \
return NAME;
#define PUT_BACK_STRING(str, start) \
@@ -1313,8 +1964,21 @@ char *yytext;
#define CHECK_YYMORE(str) \
if ( all_lower( str ) ) \
yymore_used = true;
-#define YY_STACK_USED 1
-#define YY_NO_TOP_STATE 1
+
+#define YY_USER_INIT \
+ if ( getenv("POSIXLY_CORRECT") ) \
+ posix_compat = true;
+
+
+
+
+
+
+
+
+#line 1979 "scan.c"
+
+#define INITIAL 0
#define SECT2 1
#define SECT2PROLOG 2
#define SECT3 3
@@ -1324,7 +1988,6 @@ char *yytext;
#define CARETISBOL 7
#define NUM 8
#define QUOTE 9
-
#define FIRSTCCL 10
#define CCL 11
#define ACTION 12
@@ -1332,11 +1995,56 @@ char *yytext;
#define COMMENT 14
#define ACTION_STRING 15
#define PERCENT_BRACE_ACTION 16
-
#define OPTION 17
#define LINEDIR 18
+#define CODEBLOCK_MATCH_BRACE 19
+#define GROUP_WITH_PARAMS 20
+#define GROUP_MINUS_PARAMS 21
+#define EXTENDED_COMMENT 22
+#define COMMENT_DISCARD 23
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
-#line 1333 "scan.c"
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -1344,79 +2052,51 @@ char *yytext;
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
+extern "C" int yywrap (void );
#else
-extern int yywrap YY_PROTO(( void ));
-#endif
+extern int yywrap (void );
#endif
-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif
+ static void yyunput (int c,char *buf_ptr );
+
#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+static void yy_flex_strncpy (char *,yyconst char *,int );
#endif
#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+static int yy_flex_strlen (yyconst char * );
#endif
-#if defined(YY_NO_INPUT) && YY_NO_INPUT
-#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
-#else
-static int input YY_PROTO(( void ));
-#endif
-#endif
-
-#ifdef YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput (void );
#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
+static int input (void );
#endif
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#ifdef __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines. This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
#endif
+ static int yy_start_stack_ptr = 0;
+ static int yy_start_stack_depth = 0;
+ static int *yy_start_stack = NULL;
+
+ static void yy_push_state (int new_state );
+
+ static void yy_pop_state (void );
+
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif
/* Copy whatever the last rule matched to the standard output. */
-
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
@@ -1424,9 +2104,10 @@ YY_MALLOC_DECL
*/
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
- if ( yy_current_buffer->yy_is_interactive ) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
- int c = '*', n; \
+ int c = '*'; \
+ size_t n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
@@ -1436,9 +2117,22 @@ YY_MALLOC_DECL
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
} \
- else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
- && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" );
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
#endif
/* No semi-colon after return; correct usage is to write "yyterminate();" -
@@ -1459,12 +2153,18 @@ YY_MALLOC_DECL
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif
+/* end tables serialization structures and prototypes */
+
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
-#define YY_DECL int yylex YY_PROTO(( void ))
-#endif
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
/* Code executed at the beginning of each rule, after yytext and yyleng
* have been set up.
@@ -1480,39 +2180,34 @@ YY_MALLOC_DECL
#define YY_RULE_SETUP \
if ( yyleng > 0 ) \
- yy_current_buffer->yy_at_bol = \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
(yytext[yyleng - 1] == '\n'); \
YY_USER_ACTION
+/** The main scanner function which does all the work.
+ */
YY_DECL
- {
+{
yy_state_type yy_current_state;
char *yy_cp, *yy_bp;
int yy_act;
-
-#line 94 "scan.l"
-
- static int bracelevel, didadef, indented_code;
- static int doing_rule_action = false;
- static int option_sense;
-
- int doing_codeblock = false;
- int i;
- Char nmdef[MAXLINE], myesc();
-
-
-#line 1498 "scan.c"
-
- if ( yy_init )
+
+ if ( !(yy_init) )
{
- yy_init = 0;
+ (yy_init) = 1;
#ifdef YY_USER_INIT
YY_USER_INIT;
#endif
- if ( ! yy_start )
- yy_start = 1; /* first start state */
+ /* Create the reject buffer large enough to save one state per allowed character. */
+ if ( ! (yy_state_buf) )
+ (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE );
+ if ( ! (yy_state_buf) )
+ YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
if ( ! yyin )
yyin = stdin;
@@ -1520,100 +2215,124 @@ YY_DECL
if ( ! yyout )
yyout = stdout;
- if ( ! yy_current_buffer )
- yy_current_buffer =
- yy_create_buffer( yyin, YY_BUF_SIZE );
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
- yy_load_buffer_state();
+ yy_load_buffer_state( );
}
+ {
+#line 131 "scan.l"
+
+ static int bracelevel, didadef, indented_code;
+ static int doing_rule_action = false;
+ static int option_sense;
+
+ int doing_codeblock = false;
+ int i, brace_depth=0, brace_start_line=0;
+ Char nmdef[MAXLINE];
+
+
+#line 2239 "scan.c"
+
while ( 1 ) /* loops until end-of-file is reached */
{
- yy_cp = yy_c_buf_p;
+ (yy_more_len) = 0;
+ if ( (yy_more_flag) )
+ {
+ (yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
+ (yy_more_flag) = 0;
+ }
+ yy_cp = (yy_c_buf_p);
/* Support of yytext. */
- *yy_cp = yy_hold_char;
+ *yy_cp = (yy_hold_char);
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp = yy_cp;
- yy_current_state = yy_start;
+ yy_current_state = (yy_start);
yy_current_state += YY_AT_BOL();
+
+ (yy_state_ptr) = (yy_state_buf);
+ *(yy_state_ptr)++ = yy_current_state;
+
yy_match:
do
{
- YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
- if ( yy_accept[yy_current_state] )
- {
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
- }
+ YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 769 )
+ if ( yy_current_state >= 1107 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ *(yy_state_ptr)++ = yy_current_state;
++yy_cp;
}
- while ( yy_base[yy_current_state] != 2716 );
+ while ( yy_base[yy_current_state] != 3975 );
yy_find_action:
- yy_act = yy_accept[yy_current_state];
- if ( yy_act == 0 )
- { /* have to back up */
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
- yy_act = yy_accept[yy_current_state];
+ yy_current_state = *--(yy_state_ptr);
+ (yy_lp) = yy_accept[yy_current_state];
+find_rule: /* we branch to this label when backing up */
+ for ( ; ; ) /* until we find what rule we matched */
+ {
+ if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
+ {
+ yy_act = yy_acclist[(yy_lp)];
+ {
+ (yy_full_match) = yy_cp;
+ break;
+ }
+ }
+ --yy_cp;
+ yy_current_state = *--(yy_state_ptr);
+ (yy_lp) = yy_accept[yy_current_state];
}
YY_DO_BEFORE_ACTION;
-
do_action: /* This label is used only to access EOF actions. */
-
switch ( yy_act )
{ /* beginning of action switch */
- case 0: /* must back up */
- /* undo the effects of YY_DO_BEFORE_ACTION */
- *yy_cp = yy_hold_char;
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
- goto yy_find_action;
-
case 1:
YY_RULE_SETUP
-#line 105 "scan.l"
+#line 142 "scan.l"
indented_code = true; BEGIN(CODEBLOCK);
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 106 "scan.l"
+#line 143 "scan.l"
ACTION_ECHO; yy_push_state( COMMENT );
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 107 "scan.l"
+#line 144 "scan.l"
yy_push_state( LINEDIR );
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 108 "scan.l"
+#line 145 "scan.l"
return SCDECL;
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 109 "scan.l"
+#line 146 "scan.l"
return XSCDECL;
YY_BREAK
case 6:
+/* rule 6 can match eol */
YY_RULE_SETUP
-#line 110 "scan.l"
+#line 147 "scan.l"
{
++linenum;
line_directive_out( (FILE *) 0, 1 );
@@ -1622,13 +2341,30 @@ YY_RULE_SETUP
}
YY_BREAK
case 7:
+/* rule 7 can match eol */
YY_RULE_SETUP
-#line 117 "scan.l"
-/* discard */
+#line 153 "scan.l"
+{
+ brace_start_line = linenum;
+ ++linenum;
+ buf_linedir( &top_buf, infilename?infilename:"<stdin>", linenum);
+ brace_depth = 1;
+ yy_push_state(CODEBLOCK_MATCH_BRACE);
+ }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 119 "scan.l"
+#line 161 "scan.l"
+synerr( _("malformed '%top' directive") );
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 163 "scan.l"
+/* discard */
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 165 "scan.l"
{
sectnum = 2;
bracelevel = 0;
@@ -1638,123 +2374,206 @@ YY_RULE_SETUP
return SECTEND;
}
YY_BREAK
-case 9:
+case 11:
+/* rule 11 can match eol */
YY_RULE_SETUP
-#line 128 "scan.l"
+#line 174 "scan.l"
yytext_is_array = false; ++linenum;
YY_BREAK
-case 10:
+case 12:
+/* rule 12 can match eol */
YY_RULE_SETUP
-#line 129 "scan.l"
+#line 175 "scan.l"
yytext_is_array = true; ++linenum;
YY_BREAK
-case 11:
+case 13:
YY_RULE_SETUP
-#line 131 "scan.l"
+#line 177 "scan.l"
BEGIN(OPTION); return OPTION_OP;
YY_BREAK
-case 12:
+case 14:
+/* rule 14 can match eol */
YY_RULE_SETUP
-#line 133 "scan.l"
+#line 179 "scan.l"
++linenum; /* ignore */
YY_BREAK
-case 13:
+case 15:
+/* rule 15 can match eol */
YY_RULE_SETUP
-#line 134 "scan.l"
+#line 180 "scan.l"
++linenum; /* ignore */
YY_BREAK
-case 14:
+/* xgettext: no-c-format */
+case 16:
+/* rule 16 can match eol */
YY_RULE_SETUP
-#line 136 "scan.l"
+#line 183 "scan.l"
synerr( _( "unrecognized '%' directive" ) );
YY_BREAK
-case 15:
+case 17:
YY_RULE_SETUP
-#line 138 "scan.l"
+#line 185 "scan.l"
{
+ if(yyleng < MAXLINE)
+ {
strlcpy( nmstr, yytext, sizeof nmstr );
+ }
+ else
+ {
+ synerr( _("Definition name too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+
didadef = false;
BEGIN(PICKUPDEF);
}
YY_BREAK
-case 16:
+case 18:
YY_RULE_SETUP
-#line 144 "scan.l"
+#line 200 "scan.l"
RETURNNAME;
YY_BREAK
-case 17:
+case 19:
+/* rule 19 can match eol */
YY_RULE_SETUP
-#line 145 "scan.l"
+#line 201 "scan.l"
++linenum; /* allows blank lines in section 1 */
YY_BREAK
-case 18:
+case 20:
+/* rule 20 can match eol */
YY_RULE_SETUP
-#line 146 "scan.l"
+#line 202 "scan.l"
ACTION_ECHO; ++linenum; /* maybe end of comment line */
YY_BREAK
-case 19:
+case 21:
YY_RULE_SETUP
-#line 151 "scan.l"
+#line 207 "scan.l"
ACTION_ECHO; yy_pop_state();
YY_BREAK
-case 20:
+case 22:
YY_RULE_SETUP
-#line 152 "scan.l"
+#line 208 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 21:
+case 23:
YY_RULE_SETUP
-#line 153 "scan.l"
+#line 209 "scan.l"
+ACTION_ECHO_QSTART;
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 210 "scan.l"
+ACTION_ECHO_QEND;
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 211 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 22:
+case 26:
+/* rule 26 can match eol */
YY_RULE_SETUP
-#line 154 "scan.l"
+#line 212 "scan.l"
++linenum; ACTION_ECHO;
YY_BREAK
-case 23:
+/* This is the same as COMMENT, but is discarded rather than output. */
+case 27:
YY_RULE_SETUP
-#line 158 "scan.l"
+#line 217 "scan.l"
yy_pop_state();
YY_BREAK
-case 24:
+case 28:
+YY_RULE_SETUP
+#line 218 "scan.l"
+;
+ YY_BREAK
+case 29:
YY_RULE_SETUP
-#line 159 "scan.l"
+#line 219 "scan.l"
+;
+ YY_BREAK
+case 30:
+/* rule 30 can match eol */
+YY_RULE_SETUP
+#line 220 "scan.l"
+++linenum;
+ YY_BREAK
+
+
+case 31:
+YY_RULE_SETUP
+#line 224 "scan.l"
+yy_pop_state();
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 225 "scan.l"
+;
+ YY_BREAK
+case 33:
+/* rule 33 can match eol */
+YY_RULE_SETUP
+#line 226 "scan.l"
+++linenum;
+ YY_BREAK
+
+
+case 34:
+/* rule 34 can match eol */
+YY_RULE_SETUP
+#line 230 "scan.l"
+yy_pop_state();
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 231 "scan.l"
linenum = myctoi( yytext );
YY_BREAK
-case 25:
+case 36:
YY_RULE_SETUP
-#line 161 "scan.l"
+#line 233 "scan.l"
{
flex_free( (void *) infilename );
infilename = copy_string( yytext + 1 );
infilename[strlen( infilename ) - 1] = '\0';
}
YY_BREAK
-case 26:
+case 37:
YY_RULE_SETUP
-#line 166 "scan.l"
+#line 238 "scan.l"
/* ignore spurious characters */
YY_BREAK
-case 27:
+case 38:
+/* rule 38 can match eol */
YY_RULE_SETUP
-#line 170 "scan.l"
+#line 242 "scan.l"
++linenum; BEGIN(INITIAL);
YY_BREAK
-case 28:
+case 39:
+YY_RULE_SETUP
+#line 244 "scan.l"
+ACTION_ECHO_QSTART;
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 245 "scan.l"
+ACTION_ECHO_QEND;
+ YY_BREAK
+case 41:
YY_RULE_SETUP
-#line 172 "scan.l"
+#line 246 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 29:
+case 42:
+/* rule 42 can match eol */
YY_RULE_SETUP
-#line 174 "scan.l"
+#line 248 "scan.l"
{
++linenum;
ACTION_ECHO;
@@ -1764,17 +2583,79 @@ YY_RULE_SETUP
YY_BREAK
-case 30:
+case 43:
+YY_RULE_SETUP
+#line 257 "scan.l"
+{
+ if( --brace_depth == 0){
+ /* TODO: Matched. */
+ yy_pop_state();
+ }else
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 265 "scan.l"
+{
+ brace_depth++;
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+ YY_BREAK
+case 45:
+/* rule 45 can match eol */
+YY_RULE_SETUP
+#line 270 "scan.l"
+{
+ ++linenum;
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 275 "scan.l"
+buf_strnappend(&top_buf, escaped_qstart, strlen(escaped_qstart));
+ YY_BREAK
+case 47:
YY_RULE_SETUP
-#line 184 "scan.l"
+#line 276 "scan.l"
+buf_strnappend(&top_buf, escaped_qend, strlen(escaped_qend));
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 278 "scan.l"
+{
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+ YY_BREAK
+case YY_STATE_EOF(CODEBLOCK_MATCH_BRACE):
+#line 282 "scan.l"
+{
+ linenum = brace_start_line;
+ synerr(_("Unmatched '{'"));
+ yyterminate();
+ }
+ YY_BREAK
+
+
+case 49:
+YY_RULE_SETUP
+#line 291 "scan.l"
/* separates name and definition */
YY_BREAK
-case 31:
+case 50:
YY_RULE_SETUP
-#line 186 "scan.l"
+#line 293 "scan.l"
{
+ if(yyleng < MAXLINE)
+ {
strlcpy( (char *) nmdef, yytext, sizeof nmdef );
-
+ }
+ else
+ {
+ format_synerr( _("Definition value for {%s} too long\n"), nmstr);
+ FLEX_EXIT(EXIT_FAILURE);
+ }
/* Skip trailing whitespace. */
for ( i = strlen( (char *) nmdef ) - 1;
i >= 0 && (nmdef[i] == ' ' || nmdef[i] == '\t');
@@ -1787,9 +2668,10 @@ YY_RULE_SETUP
didadef = true;
}
YY_BREAK
-case 32:
+case 51:
+/* rule 51 can match eol */
YY_RULE_SETUP
-#line 201 "scan.l"
+#line 315 "scan.l"
{
if ( ! didadef )
synerr( _( "incomplete name definition" ) );
@@ -1799,267 +2681,436 @@ YY_RULE_SETUP
YY_BREAK
-case 33:
+case 52:
+/* rule 52 can match eol */
YY_RULE_SETUP
-#line 211 "scan.l"
+#line 325 "scan.l"
++linenum; BEGIN(INITIAL);
YY_BREAK
-case 34:
+case 53:
YY_RULE_SETUP
-#line 212 "scan.l"
+#line 326 "scan.l"
option_sense = true;
YY_BREAK
-case 35:
+case 54:
YY_RULE_SETUP
-#line 214 "scan.l"
+#line 328 "scan.l"
return '=';
YY_BREAK
-case 36:
+case 55:
YY_RULE_SETUP
-#line 216 "scan.l"
+#line 330 "scan.l"
option_sense = ! option_sense;
YY_BREAK
-case 37:
+case 56:
YY_RULE_SETUP
-#line 218 "scan.l"
+#line 332 "scan.l"
csize = option_sense ? 128 : 256;
YY_BREAK
-case 38:
+case 57:
YY_RULE_SETUP
-#line 219 "scan.l"
+#line 333 "scan.l"
csize = option_sense ? 256 : 128;
YY_BREAK
-case 39:
+case 58:
YY_RULE_SETUP
-#line 221 "scan.l"
+#line 335 "scan.l"
long_align = option_sense;
YY_BREAK
-case 40:
+case 59:
YY_RULE_SETUP
-#line 222 "scan.l"
+#line 336 "scan.l"
{
- action_define( "YY_ALWAYS_INTERACTIVE", option_sense );
+ ACTION_M4_IFDEF( "M4""_YY_ALWAYS_INTERACTIVE", option_sense );
+ interactive = option_sense;
}
YY_BREAK
-case 41:
+case 60:
YY_RULE_SETUP
-#line 225 "scan.l"
+#line 340 "scan.l"
yytext_is_array = option_sense;
YY_BREAK
-case 42:
+case 61:
YY_RULE_SETUP
-#line 226 "scan.l"
+#line 341 "scan.l"
+ansi_func_defs = option_sense;
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 342 "scan.l"
+ansi_func_protos = option_sense;
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 343 "scan.l"
backing_up_report = option_sense;
YY_BREAK
-case 43:
+case 64:
YY_RULE_SETUP
-#line 227 "scan.l"
+#line 344 "scan.l"
interactive = ! option_sense;
YY_BREAK
-case 44:
+case 65:
YY_RULE_SETUP
-#line 228 "scan.l"
+#line 345 "scan.l"
+bison_bridge_lval = option_sense;
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 346 "scan.l"
+{ if((bison_bridge_lloc = option_sense))
+ bison_bridge_lval = true;
+ }
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 349 "scan.l"
C_plus_plus = option_sense;
YY_BREAK
-case 45:
+case 68:
YY_RULE_SETUP
-#line 229 "scan.l"
-caseins = ! option_sense;
+#line 350 "scan.l"
+sf_set_case_ins(!option_sense);
YY_BREAK
-case 46:
+case 69:
YY_RULE_SETUP
-#line 230 "scan.l"
-caseins = option_sense;
+#line 351 "scan.l"
+sf_set_case_ins(option_sense);
YY_BREAK
-case 47:
+case 70:
YY_RULE_SETUP
-#line 231 "scan.l"
+#line 352 "scan.l"
ddebug = option_sense;
YY_BREAK
-case 48:
+case 71:
YY_RULE_SETUP
-#line 232 "scan.l"
+#line 353 "scan.l"
spprdflt = ! option_sense;
YY_BREAK
-case 49:
+case 72:
YY_RULE_SETUP
-#line 233 "scan.l"
+#line 354 "scan.l"
useecs = option_sense;
YY_BREAK
-case 50:
+case 73:
YY_RULE_SETUP
-#line 234 "scan.l"
+#line 355 "scan.l"
{
useecs = usemecs = false;
use_read = fullspd = true;
}
YY_BREAK
-case 51:
+case 74:
YY_RULE_SETUP
-#line 238 "scan.l"
+#line 359 "scan.l"
{
useecs = usemecs = false;
use_read = fulltbl = true;
}
YY_BREAK
-case 52:
+case 75:
YY_RULE_SETUP
-#line 242 "scan.l"
+#line 363 "scan.l"
ACTION_IFDEF("YY_NO_INPUT", ! option_sense);
YY_BREAK
-case 53:
+case 76:
YY_RULE_SETUP
-#line 243 "scan.l"
+#line 364 "scan.l"
interactive = option_sense;
YY_BREAK
-case 54:
+case 77:
YY_RULE_SETUP
-#line 244 "scan.l"
+#line 365 "scan.l"
lex_compat = option_sense;
YY_BREAK
-case 55:
+case 78:
YY_RULE_SETUP
-#line 245 "scan.l"
+#line 366 "scan.l"
+posix_compat = option_sense;
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 367 "scan.l"
{
- action_define( "YY_MAIN", option_sense );
- do_yywrap = ! option_sense;
+ ACTION_M4_IFDEF( "M4""_YY_MAIN", option_sense);
+ /* Override yywrap */
+ if( option_sense == true )
+ do_yywrap = false;
}
YY_BREAK
-case 56:
+case 80:
YY_RULE_SETUP
-#line 249 "scan.l"
+#line 373 "scan.l"
usemecs = option_sense;
YY_BREAK
-case 57:
+case 81:
YY_RULE_SETUP
-#line 250 "scan.l"
+#line 374 "scan.l"
{
- action_define( "YY_NEVER_INTERACTIVE", option_sense );
+ ACTION_M4_IFDEF( "M4""_YY_NEVER_INTERACTIVE", option_sense );
+ interactive = !option_sense;
}
YY_BREAK
-case 58:
+case 82:
YY_RULE_SETUP
-#line 253 "scan.l"
+#line 378 "scan.l"
performance_report += option_sense ? 1 : -1;
YY_BREAK
-case 59:
+case 83:
YY_RULE_SETUP
-#line 254 "scan.l"
+#line 379 "scan.l"
yytext_is_array = ! option_sense;
YY_BREAK
-case 60:
+case 84:
YY_RULE_SETUP
-#line 255 "scan.l"
+#line 380 "scan.l"
use_read = option_sense;
YY_BREAK
-case 61:
+case 85:
YY_RULE_SETUP
-#line 256 "scan.l"
+#line 381 "scan.l"
+reentrant = option_sense;
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 382 "scan.l"
reject_really_used = option_sense;
YY_BREAK
-case 62:
+case 87:
YY_RULE_SETUP
-#line 257 "scan.l"
-action_define( "YY_STACK_USED", option_sense );
+#line 383 "scan.l"
+ACTION_M4_IFDEF( "M4""_YY_STACK_USED", option_sense );
YY_BREAK
-case 63:
+case 88:
YY_RULE_SETUP
-#line 258 "scan.l"
+#line 384 "scan.l"
do_stdinit = option_sense;
YY_BREAK
-case 64:
+case 89:
YY_RULE_SETUP
-#line 259 "scan.l"
+#line 385 "scan.l"
use_stdout = option_sense;
YY_BREAK
-case 65:
+case 90:
YY_RULE_SETUP
-#line 260 "scan.l"
-ACTION_IFDEF("YY_NO_UNPUT", ! option_sense);
+#line 386 "scan.l"
+ACTION_IFDEF("YY_NO_UNISTD_H", ! option_sense);
YY_BREAK
-case 66:
+case 91:
YY_RULE_SETUP
-#line 261 "scan.l"
+#line 387 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_UNPUT", ! option_sense);
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 388 "scan.l"
printstats = option_sense;
YY_BREAK
-case 67:
+case 93:
YY_RULE_SETUP
-#line 262 "scan.l"
+#line 389 "scan.l"
nowarn = ! option_sense;
YY_BREAK
-case 68:
+case 94:
YY_RULE_SETUP
-#line 263 "scan.l"
-do_yylineno = option_sense;
+#line 390 "scan.l"
+do_yylineno = option_sense; ACTION_M4_IFDEF("M4""_YY_USE_LINENO", option_sense);
YY_BREAK
-case 69:
+case 95:
YY_RULE_SETUP
-#line 264 "scan.l"
+#line 391 "scan.l"
yymore_really_used = option_sense;
YY_BREAK
-case 70:
+case 96:
YY_RULE_SETUP
-#line 265 "scan.l"
+#line 392 "scan.l"
do_yywrap = option_sense;
YY_BREAK
-case 71:
+case 97:
YY_RULE_SETUP
-#line 267 "scan.l"
-ACTION_IFDEF("YY_NO_PUSH_STATE", ! option_sense);
+#line 394 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_PUSH_STATE", ! option_sense);
YY_BREAK
-case 72:
+case 98:
YY_RULE_SETUP
-#line 268 "scan.l"
-ACTION_IFDEF("YY_NO_POP_STATE", ! option_sense);
+#line 395 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_POP_STATE", ! option_sense);
YY_BREAK
-case 73:
+case 99:
YY_RULE_SETUP
-#line 269 "scan.l"
-ACTION_IFDEF("YY_NO_TOP_STATE", ! option_sense);
+#line 396 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_TOP_STATE", ! option_sense);
YY_BREAK
-case 74:
+case 100:
YY_RULE_SETUP
-#line 271 "scan.l"
-ACTION_IFDEF("YY_NO_SCAN_BUFFER", ! option_sense);
+#line 398 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BUFFER", ! option_sense);
YY_BREAK
-case 75:
+case 101:
YY_RULE_SETUP
-#line 272 "scan.l"
-ACTION_IFDEF("YY_NO_SCAN_BYTES", ! option_sense);
+#line 399 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BYTES", ! option_sense);
YY_BREAK
-case 76:
+case 102:
YY_RULE_SETUP
-#line 273 "scan.l"
-ACTION_IFDEF("YY_NO_SCAN_STRING", ! option_sense);
+#line 400 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SCAN_STRING", ! option_sense);
YY_BREAK
-case 77:
+case 103:
YY_RULE_SETUP
-#line 275 "scan.l"
+#line 402 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_FLEX_ALLOC", ! option_sense);
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 403 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_FLEX_REALLOC", ! option_sense);
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 404 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_FLEX_FREE", ! option_sense);
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 406 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_DEBUG", ! option_sense);
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 407 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_DEBUG", ! option_sense);
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 408 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_EXTRA", ! option_sense);
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 409 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_EXTRA", ! option_sense);
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 410 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_LENG", ! option_sense);
+ YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 411 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_TEXT", ! option_sense);
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 412 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_LINENO", ! option_sense);
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 413 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_LINENO", ! option_sense);
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 414 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_IN", ! option_sense);
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 415 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_IN", ! option_sense);
+ YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 416 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_OUT", ! option_sense);
+ YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 417 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_OUT", ! option_sense);
+ YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 418 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_LVAL", ! option_sense);
+ YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 419 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_LVAL", ! option_sense);
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 420 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_LLOC", ! option_sense);
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 421 "scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_LLOC", ! option_sense);
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 423 "scan.l"
+return OPT_EXTRA_TYPE;
+ YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 424 "scan.l"
return OPT_OUTFILE;
YY_BREAK
-case 78:
+case 124:
YY_RULE_SETUP
-#line 276 "scan.l"
+#line 425 "scan.l"
return OPT_PREFIX;
YY_BREAK
-case 79:
+case 125:
YY_RULE_SETUP
-#line 277 "scan.l"
+#line 426 "scan.l"
return OPT_YYCLASS;
YY_BREAK
-case 80:
+case 126:
+YY_RULE_SETUP
+#line 427 "scan.l"
+return OPT_HEADER;
+ YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 428 "scan.l"
+return OPT_TABLES;
+ YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 429 "scan.l"
+{
+ tablesverify = option_sense;
+ if(!tablesext && option_sense)
+ tablesext = true;
+ }
+ YY_BREAK
+case 129:
YY_RULE_SETUP
-#line 279 "scan.l"
+#line 436 "scan.l"
{
+ if(yyleng-1 < MAXLINE)
+ {
strlcpy( nmstr, yytext + 1, sizeof nmstr );
- if (nmstr[strlen(nmstr) - 1] == '"')
- nmstr[strlen(nmstr) - 1] = '\0';
+ }
+ else
+ {
+ synerr( _("Option line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+ if (nmstr[strlen( nmstr ) - 1] == '"')
+ nmstr[strlen( nmstr ) - 1] = '\0';
return NAME;
}
YY_BREAK
-case 81:
+case 130:
YY_RULE_SETUP
-#line 285 "scan.l"
+#line 450 "scan.l"
{
format_synerr( _( "unrecognized %%option: %s" ),
yytext );
@@ -2067,30 +3118,31 @@ YY_RULE_SETUP
}
YY_BREAK
-case 82:
+case 131:
+/* rule 131 can match eol */
YY_RULE_SETUP
-#line 292 "scan.l"
+#line 457 "scan.l"
++linenum; BEGIN(INITIAL);
YY_BREAK
-case 83:
+case 132:
YY_RULE_SETUP
-#line 296 "scan.l"
+#line 461 "scan.l"
++bracelevel; yyless( 2 ); /* eat only %{ */
YY_BREAK
-case 84:
+case 133:
YY_RULE_SETUP
-#line 297 "scan.l"
+#line 462 "scan.l"
--bracelevel; yyless( 2 ); /* eat only %} */
YY_BREAK
-case 85:
+case 134:
YY_RULE_SETUP
-#line 299 "scan.l"
+#line 464 "scan.l"
ACTION_ECHO; /* indented code in prolog */
YY_BREAK
-case 86:
+case 135:
YY_RULE_SETUP
-#line 301 "scan.l"
+#line 466 "scan.l"
{ /* non-indented code */
if ( bracelevel <= 0 )
{ /* not in %{ ... %} */
@@ -2103,18 +3155,19 @@ YY_RULE_SETUP
ACTION_ECHO;
}
YY_BREAK
-case 87:
+case 136:
YY_RULE_SETUP
-#line 313 "scan.l"
+#line 478 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 88:
+case 137:
+/* rule 137 can match eol */
YY_RULE_SETUP
-#line 314 "scan.l"
+#line 479 "scan.l"
++linenum; ACTION_ECHO;
YY_BREAK
case YY_STATE_EOF(SECT2PROLOG):
-#line 316 "scan.l"
+#line 481 "scan.l"
{
mark_prolog();
sectnum = 0;
@@ -2123,14 +3176,15 @@ case YY_STATE_EOF(SECT2PROLOG):
YY_BREAK
-case 89:
+case 138:
+/* rule 138 can match eol */
YY_RULE_SETUP
-#line 324 "scan.l"
+#line 489 "scan.l"
++linenum; /* allow blank lines in section 2 */
YY_BREAK
-case 90:
+case 139:
YY_RULE_SETUP
-#line 326 "scan.l"
+#line 491 "scan.l"
{
indented_code = false;
doing_codeblock = true;
@@ -2138,40 +3192,53 @@ YY_RULE_SETUP
BEGIN(PERCENT_BRACE_ACTION);
}
YY_BREAK
-case 91:
+case 140:
YY_RULE_SETUP
-#line 333 "scan.l"
-BEGIN(SC); return '<';
+#line 498 "scan.l"
+{
+ /* Allow "<" to appear in (?x) patterns. */
+ if (!sf_skip_ws())
+ BEGIN(SC);
+ return '<';
+ }
YY_BREAK
-case 92:
+case 141:
YY_RULE_SETUP
-#line 334 "scan.l"
+#line 504 "scan.l"
return '^';
YY_BREAK
-case 93:
+case 142:
YY_RULE_SETUP
-#line 335 "scan.l"
+#line 505 "scan.l"
BEGIN(QUOTE); return '"';
YY_BREAK
-case 94:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp = yy_bp + 1;
+case 143:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 336 "scan.l"
-BEGIN(NUM); return '{';
+#line 506 "scan.l"
+{
+ BEGIN(NUM);
+ if ( lex_compat || posix_compat )
+ return BEGIN_REPEAT_POSIX;
+ else
+ return BEGIN_REPEAT_FLEX;
+ }
YY_BREAK
-case 95:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp = yy_bp + 1;
+case 144:
+/* rule 144 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+YY_LINENO_REWIND_TO(yy_bp + 1);
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 337 "scan.l"
+#line 513 "scan.l"
return '$';
YY_BREAK
-case 96:
+case 145:
YY_RULE_SETUP
-#line 339 "scan.l"
+#line 515 "scan.l"
{
bracelevel = 1;
BEGIN(PERCENT_BRACE_ACTION);
@@ -2184,91 +3251,138 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 97:
+case 146:
+/* rule 146 can match eol */
YY_RULE_SETUP
-#line 350 "scan.l"
-continued_action = true; ++linenum; return '\n';
+#line 526 "scan.l"
+{
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ /* Push back everything starting at the "|" */
+ size_t amt;
+ amt = strchr (yytext, '|') - yytext;
+ yyless(amt);
+ }
+ else {
+ continued_action = true;
+ ++linenum;
+ return '\n';
+ }
+ }
YY_BREAK
-case 98:
+case 147:
YY_RULE_SETUP
-#line 352 "scan.l"
+#line 541 "scan.l"
{
- yyless( yyleng - 2 ); /* put back '/', '*' */
- bracelevel = 0;
- continued_action = false;
- BEGIN(ACTION);
+
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ yy_push_state(COMMENT_DISCARD);
+ }
+ else{
+ yyless( yyleng - 2 ); /* put back '/', '*' */
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+ }
}
YY_BREAK
-case 99:
+case 148:
YY_RULE_SETUP
-#line 359 "scan.l"
-/* allow indented rules */
+#line 555 "scan.l"
+/* allow indented rules */ ;
YY_BREAK
-case 100:
+case 149:
YY_RULE_SETUP
-#line 361 "scan.l"
+#line 557 "scan.l"
{
- /* This rule is separate from the one below because
- * otherwise we get variable trailing context, so
- * we can't build the scanner using -{f,F}.
- */
- bracelevel = 0;
- continued_action = false;
- BEGIN(ACTION);
-
- if ( in_rule )
- {
- doing_rule_action = true;
- in_rule = false;
- return '\n';
- }
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ }
+ else{
+ /* This rule is separate from the one below because
+ * otherwise we get variable trailing context, so
+ * we can't build the scanner using -{f,F}.
+ */
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+ return '\n';
+ }
+ }
}
YY_BREAK
-case 101:
+case 150:
+/* rule 150 can match eol */
YY_RULE_SETUP
-#line 378 "scan.l"
+#line 579 "scan.l"
{
- bracelevel = 0;
- continued_action = false;
- BEGIN(ACTION);
- unput( '\n' ); /* so <ACTION> sees it */
-
- if ( in_rule )
- {
- doing_rule_action = true;
- in_rule = false;
- return '\n';
- }
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ ++linenum;
+ }
+ else{
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+ unput( '\n' ); /* so <ACTION> sees it */
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+ return '\n';
+ }
+ }
}
YY_BREAK
-case 102:
-#line 393 "scan.l"
-case 103:
+case 151:
+#line 600 "scan.l"
+case 152:
YY_RULE_SETUP
-#line 393 "scan.l"
+#line 600 "scan.l"
return EOF_OP;
YY_BREAK
-case 104:
+case 153:
YY_RULE_SETUP
-#line 395 "scan.l"
+#line 602 "scan.l"
{
sectnum = 3;
BEGIN(SECT3);
+ outn("/* Begin user sect3 */");
yyterminate(); /* to stop the parser */
}
YY_BREAK
-case 105:
+case 154:
YY_RULE_SETUP
-#line 401 "scan.l"
+#line 609 "scan.l"
{
int cclval;
+ if(yyleng < MAXLINE)
+ {
strlcpy( nmstr, yytext, sizeof nmstr );
+ }
+ else
+ {
+ synerr( _("Input line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
/* Check to see if we've already encountered this
* ccl.
*/
- if ( (cclval = ccllookup( (Char *) nmstr )) != 0 )
+ if (0 /* <--- This "0" effectively disables the reuse of a
+ * character class (purely based on its source text).
+ * The reason it was disabled is so yacc/bison can parse
+ * ccl operations, such as ccl difference and union.
+ */
+ && (cclval = ccllookup( (Char *) nmstr )) != 0 )
{
if ( input() != ']' )
synerr( _( "bad character class" ) );
@@ -2294,15 +3408,41 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 106:
+case 155:
+YY_RULE_SETUP
+#line 655 "scan.l"
+return CCL_OP_DIFF;
+ YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 656 "scan.l"
+return CCL_OP_UNION;
+ YY_BREAK
+/* Check for :space: at the end of the rule so we don't
+ * wrap the expanded regex in '(' ')' -- breaking trailing
+ * context.
+ */
+case 157:
+/* rule 157 can match eol */
YY_RULE_SETUP
-#line 435 "scan.l"
+#line 663 "scan.l"
{
Char *nmdefptr;
- Char *ndlookup();
+ int end_is_ws, end_ch;
+ end_ch = yytext[yyleng-1];
+ end_is_ws = end_ch != '}' ? 1 : 0;
+
+ if(yyleng-1 < MAXLINE)
+ {
strlcpy( nmstr, yytext + 1, sizeof nmstr );
- nmstr[yyleng - 2] = '\0'; /* chop trailing brace */
+ }
+ else
+ {
+ synerr( _("Input line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+nmstr[yyleng - 2 - end_is_ws] = '\0'; /* chop trailing brace */
if ( (nmdefptr = ndlookup( nmstr )) == 0 )
format_synerr(
@@ -2312,9 +3452,12 @@ YY_RULE_SETUP
else
{ /* push back name surrounded by ()'s */
int len = strlen( (char *) nmdefptr );
+ if (end_is_ws)
+ unput(end_ch);
if ( lex_compat || nmdefptr[0] == '^' ||
- (len > 0 && nmdefptr[len - 1] == '$') )
+ (len > 0 && nmdefptr[len - 1] == '$')
+ || (end_is_ws && trlcontxt && !sf_skip_ws()))
{ /* don't use ()'s after all */
PUT_BACK_STRING((char *) nmdefptr, 0);
@@ -2331,69 +3474,126 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 107:
+case 158:
+YY_RULE_SETUP
+#line 711 "scan.l"
+{
+ if (sf_skip_ws())
+ yy_push_state(COMMENT_DISCARD);
+ else{
+ /* Push back the "*" and return "/" as usual. */
+ yyless(1);
+ return '/';
+ }
+ }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 721 "scan.l"
+{
+ if (lex_compat || posix_compat){
+ /* Push back the "?#" and treat it like a normal parens. */
+ yyless(1);
+ sf_push();
+ return '(';
+ }
+ else
+ yy_push_state(EXTENDED_COMMENT);
+ }
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 731 "scan.l"
+{
+ sf_push();
+ if (lex_compat || posix_compat)
+ /* Push back the "?" and treat it like a normal parens. */
+ yyless(1);
+ else
+ BEGIN(GROUP_WITH_PARAMS);
+ return '(';
+ }
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 740 "scan.l"
+sf_push(); return '(';
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 741 "scan.l"
+sf_pop(); return ')';
+ YY_BREAK
+case 163:
YY_RULE_SETUP
-#line 469 "scan.l"
+#line 743 "scan.l"
return (unsigned char) yytext[0];
YY_BREAK
-case 108:
+case 164:
YY_RULE_SETUP
-#line 470 "scan.l"
+#line 744 "scan.l"
RETURNCHAR;
YY_BREAK
-case 109:
+case 165:
+/* rule 165 can match eol */
YY_RULE_SETUP
-#line 475 "scan.l"
+#line 749 "scan.l"
+++linenum; /* Allow blank lines & continuations */
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 750 "scan.l"
return (unsigned char) yytext[0];
YY_BREAK
-case 110:
+case 167:
YY_RULE_SETUP
-#line 476 "scan.l"
+#line 751 "scan.l"
BEGIN(SECT2); return '>';
YY_BREAK
-case 111:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp = yy_bp + 1;
+case 168:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 477 "scan.l"
+#line 752 "scan.l"
BEGIN(CARETISBOL); return '>';
YY_BREAK
-case 112:
+case 169:
YY_RULE_SETUP
-#line 478 "scan.l"
+#line 753 "scan.l"
RETURNNAME;
YY_BREAK
-case 113:
+case 170:
YY_RULE_SETUP
-#line 479 "scan.l"
+#line 754 "scan.l"
{
format_synerr( _( "bad <start condition>: %s" ),
yytext );
}
YY_BREAK
-case 114:
+case 171:
YY_RULE_SETUP
-#line 485 "scan.l"
+#line 760 "scan.l"
BEGIN(SECT2); return '^';
YY_BREAK
-case 115:
+case 172:
YY_RULE_SETUP
-#line 489 "scan.l"
+#line 764 "scan.l"
RETURNCHAR;
YY_BREAK
-case 116:
+case 173:
YY_RULE_SETUP
-#line 490 "scan.l"
+#line 765 "scan.l"
BEGIN(SECT2); return '"';
YY_BREAK
-case 117:
+case 174:
+/* rule 174 can match eol */
YY_RULE_SETUP
-#line 492 "scan.l"
+#line 767 "scan.l"
{
synerr( _( "missing quote" ) );
BEGIN(SECT2);
@@ -2403,50 +3603,100 @@ YY_RULE_SETUP
YY_BREAK
-case 118:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp = yy_bp + 1;
+case 175:
+YY_RULE_SETUP
+#line 776 "scan.l"
+BEGIN(SECT2);
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 777 "scan.l"
+BEGIN(GROUP_MINUS_PARAMS);
+ YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 778 "scan.l"
+sf_set_case_ins(1);
+ YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 779 "scan.l"
+sf_set_dot_all(1);
+ YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 780 "scan.l"
+sf_set_skip_ws(1);
+ YY_BREAK
+
+
+case 180:
+YY_RULE_SETUP
+#line 783 "scan.l"
+BEGIN(SECT2);
+ YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 784 "scan.l"
+sf_set_case_ins(0);
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 785 "scan.l"
+sf_set_dot_all(0);
+ YY_BREAK
+case 183:
+YY_RULE_SETUP
+#line 786 "scan.l"
+sf_set_skip_ws(0);
+ YY_BREAK
+
+
+case 184:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 502 "scan.l"
+#line 790 "scan.l"
BEGIN(CCL); return '^';
YY_BREAK
-case 119:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp = yy_bp + 1;
+case 185:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 503 "scan.l"
+#line 791 "scan.l"
return '^';
YY_BREAK
-case 120:
+case 186:
YY_RULE_SETUP
-#line 504 "scan.l"
+#line 792 "scan.l"
BEGIN(CCL); RETURNCHAR;
YY_BREAK
-case 121:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp = yy_bp + 1;
+case 187:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 508 "scan.l"
+#line 796 "scan.l"
return '-';
YY_BREAK
-case 122:
+case 188:
YY_RULE_SETUP
-#line 509 "scan.l"
+#line 797 "scan.l"
RETURNCHAR;
YY_BREAK
-case 123:
+case 189:
YY_RULE_SETUP
-#line 510 "scan.l"
+#line 798 "scan.l"
BEGIN(SECT2); return ']';
YY_BREAK
-case 124:
+case 190:
+/* rule 190 can match eol */
YY_RULE_SETUP
-#line 511 "scan.l"
+#line 799 "scan.l"
{
synerr( _( "bad character class" ) );
BEGIN(SECT2);
@@ -2455,69 +3705,129 @@ YY_RULE_SETUP
YY_BREAK
-case 125:
+case 191:
YY_RULE_SETUP
-#line 519 "scan.l"
+#line 807 "scan.l"
BEGIN(CCL); return CCE_ALNUM;
YY_BREAK
-case 126:
+case 192:
YY_RULE_SETUP
-#line 520 "scan.l"
+#line 808 "scan.l"
BEGIN(CCL); return CCE_ALPHA;
YY_BREAK
-case 127:
+case 193:
YY_RULE_SETUP
-#line 521 "scan.l"
+#line 809 "scan.l"
BEGIN(CCL); return CCE_BLANK;
YY_BREAK
-case 128:
+case 194:
YY_RULE_SETUP
-#line 522 "scan.l"
+#line 810 "scan.l"
BEGIN(CCL); return CCE_CNTRL;
YY_BREAK
-case 129:
+case 195:
YY_RULE_SETUP
-#line 523 "scan.l"
+#line 811 "scan.l"
BEGIN(CCL); return CCE_DIGIT;
YY_BREAK
-case 130:
+case 196:
YY_RULE_SETUP
-#line 524 "scan.l"
+#line 812 "scan.l"
BEGIN(CCL); return CCE_GRAPH;
YY_BREAK
-case 131:
+case 197:
YY_RULE_SETUP
-#line 525 "scan.l"
+#line 813 "scan.l"
BEGIN(CCL); return CCE_LOWER;
YY_BREAK
-case 132:
+case 198:
YY_RULE_SETUP
-#line 526 "scan.l"
+#line 814 "scan.l"
BEGIN(CCL); return CCE_PRINT;
YY_BREAK
-case 133:
+case 199:
YY_RULE_SETUP
-#line 527 "scan.l"
+#line 815 "scan.l"
BEGIN(CCL); return CCE_PUNCT;
YY_BREAK
-case 134:
+case 200:
YY_RULE_SETUP
-#line 528 "scan.l"
+#line 816 "scan.l"
BEGIN(CCL); return CCE_SPACE;
YY_BREAK
-case 135:
+case 201:
YY_RULE_SETUP
-#line 529 "scan.l"
+#line 817 "scan.l"
BEGIN(CCL); return CCE_UPPER;
YY_BREAK
-case 136:
+case 202:
YY_RULE_SETUP
-#line 530 "scan.l"
+#line 818 "scan.l"
BEGIN(CCL); return CCE_XDIGIT;
YY_BREAK
-case 137:
+case 203:
+YY_RULE_SETUP
+#line 820 "scan.l"
+BEGIN(CCL); return CCE_NEG_ALNUM;
+ YY_BREAK
+case 204:
+YY_RULE_SETUP
+#line 821 "scan.l"
+BEGIN(CCL); return CCE_NEG_ALPHA;
+ YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 822 "scan.l"
+BEGIN(CCL); return CCE_NEG_BLANK;
+ YY_BREAK
+case 206:
+YY_RULE_SETUP
+#line 823 "scan.l"
+BEGIN(CCL); return CCE_NEG_CNTRL;
+ YY_BREAK
+case 207:
+YY_RULE_SETUP
+#line 824 "scan.l"
+BEGIN(CCL); return CCE_NEG_DIGIT;
+ YY_BREAK
+case 208:
YY_RULE_SETUP
-#line 531 "scan.l"
+#line 825 "scan.l"
+BEGIN(CCL); return CCE_NEG_GRAPH;
+ YY_BREAK
+case 209:
+YY_RULE_SETUP
+#line 826 "scan.l"
+BEGIN(CCL); return CCE_NEG_LOWER;
+ YY_BREAK
+case 210:
+YY_RULE_SETUP
+#line 827 "scan.l"
+BEGIN(CCL); return CCE_NEG_PRINT;
+ YY_BREAK
+case 211:
+YY_RULE_SETUP
+#line 828 "scan.l"
+BEGIN(CCL); return CCE_NEG_PUNCT;
+ YY_BREAK
+case 212:
+YY_RULE_SETUP
+#line 829 "scan.l"
+BEGIN(CCL); return CCE_NEG_SPACE;
+ YY_BREAK
+case 213:
+YY_RULE_SETUP
+#line 830 "scan.l"
+BEGIN(CCL); return CCE_NEG_UPPER;
+ YY_BREAK
+case 214:
+YY_RULE_SETUP
+#line 831 "scan.l"
+BEGIN(CCL); return CCE_NEG_XDIGIT;
+ YY_BREAK
+case 215:
+YY_RULE_SETUP
+#line 832 "scan.l"
{
format_synerr(
_( "bad character class expression: %s" ),
@@ -2527,36 +3837,43 @@ YY_RULE_SETUP
YY_BREAK
-case 138:
+case 216:
YY_RULE_SETUP
-#line 540 "scan.l"
+#line 841 "scan.l"
{
yylval = myctoi( yytext );
return NUMBER;
}
YY_BREAK
-case 139:
+case 217:
YY_RULE_SETUP
-#line 545 "scan.l"
+#line 846 "scan.l"
return ',';
YY_BREAK
-case 140:
+case 218:
YY_RULE_SETUP
-#line 546 "scan.l"
-BEGIN(SECT2); return '}';
+#line 847 "scan.l"
+{
+ BEGIN(SECT2);
+ if ( lex_compat || posix_compat )
+ return END_REPEAT_POSIX;
+ else
+ return END_REPEAT_FLEX;
+ }
YY_BREAK
-case 141:
+case 219:
YY_RULE_SETUP
-#line 548 "scan.l"
+#line 855 "scan.l"
{
synerr( _( "bad character inside {}'s" ) );
BEGIN(SECT2);
return '}';
}
YY_BREAK
-case 142:
+case 220:
+/* rule 220 can match eol */
YY_RULE_SETUP
-#line 554 "scan.l"
+#line 861 "scan.l"
{
synerr( _( "missing }" ) );
BEGIN(SECT2);
@@ -2566,42 +3883,53 @@ YY_RULE_SETUP
YY_BREAK
-case 143:
+case 221:
YY_RULE_SETUP
-#line 564 "scan.l"
+#line 871 "scan.l"
bracelevel = 0;
YY_BREAK
-case 144:
+case 222:
YY_RULE_SETUP
-#line 566 "scan.l"
+#line 873 "scan.l"
ACTION_ECHO; yy_push_state( COMMENT );
YY_BREAK
-case 145:
+case 223:
YY_RULE_SETUP
-#line 569 "scan.l"
+#line 876 "scan.l"
{
ACTION_ECHO;
CHECK_REJECT(yytext);
}
YY_BREAK
-case 146:
+case 224:
YY_RULE_SETUP
-#line 573 "scan.l"
+#line 880 "scan.l"
{
ACTION_ECHO;
CHECK_YYMORE(yytext);
}
YY_BREAK
-case 147:
+case 225:
YY_RULE_SETUP
-#line 579 "scan.l"
+#line 886 "scan.l"
+ACTION_ECHO_QSTART;
+ YY_BREAK
+case 226:
+YY_RULE_SETUP
+#line 887 "scan.l"
+ACTION_ECHO_QEND;
+ YY_BREAK
+case 227:
+YY_RULE_SETUP
+#line 888 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 148:
+case 228:
+/* rule 228 can match eol */
YY_RULE_SETUP
-#line 580 "scan.l"
+#line 889 "scan.l"
{
++linenum;
ACTION_ECHO;
@@ -2619,39 +3947,55 @@ YY_RULE_SETUP
/* Reject and YYmore() are checked for above, in PERCENT_BRACE_ACTION */
-case 149:
+case 229:
YY_RULE_SETUP
-#line 598 "scan.l"
+#line 907 "scan.l"
ACTION_ECHO; ++bracelevel;
YY_BREAK
-case 150:
+case 230:
YY_RULE_SETUP
-#line 599 "scan.l"
+#line 908 "scan.l"
ACTION_ECHO; --bracelevel;
YY_BREAK
-case 151:
+case 231:
YY_RULE_SETUP
-#line 600 "scan.l"
+#line 909 "scan.l"
+ACTION_ECHO_QSTART;
+ YY_BREAK
+case 232:
+YY_RULE_SETUP
+#line 910 "scan.l"
+ACTION_ECHO_QEND;
+ YY_BREAK
+case 233:
+YY_RULE_SETUP
+#line 911 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 152:
+case 234:
YY_RULE_SETUP
-#line 601 "scan.l"
+#line 912 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 153:
+case 235:
YY_RULE_SETUP
-#line 602 "scan.l"
+#line 913 "scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 236:
+YY_RULE_SETUP
+#line 914 "scan.l"
ACTION_ECHO; /* character constant */
YY_BREAK
-case 154:
+case 237:
YY_RULE_SETUP
-#line 603 "scan.l"
+#line 915 "scan.l"
ACTION_ECHO; BEGIN(ACTION_STRING);
YY_BREAK
-case 155:
+case 238:
+/* rule 238 can match eol */
YY_RULE_SETUP
-#line 604 "scan.l"
+#line 916 "scan.l"
{
++linenum;
ACTION_ECHO;
@@ -2665,51 +4009,62 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 156:
+case 239:
YY_RULE_SETUP
-#line 616 "scan.l"
+#line 928 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 157:
+case 240:
YY_RULE_SETUP
-#line 620 "scan.l"
+#line 932 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 158:
+case 241:
YY_RULE_SETUP
-#line 621 "scan.l"
+#line 933 "scan.l"
ACTION_ECHO;
YY_BREAK
-case 159:
+case 242:
+/* rule 242 can match eol */
YY_RULE_SETUP
-#line 622 "scan.l"
-++linenum; ACTION_ECHO;
+#line 934 "scan.l"
+++linenum; ACTION_ECHO; BEGIN(ACTION);
YY_BREAK
-case 160:
+case 243:
YY_RULE_SETUP
-#line 623 "scan.l"
+#line 935 "scan.l"
ACTION_ECHO; BEGIN(ACTION);
YY_BREAK
-case 161:
+case 244:
YY_RULE_SETUP
-#line 624 "scan.l"
+#line 936 "scan.l"
ACTION_ECHO;
YY_BREAK
case YY_STATE_EOF(COMMENT):
+case YY_STATE_EOF(COMMENT_DISCARD):
case YY_STATE_EOF(ACTION):
case YY_STATE_EOF(ACTION_STRING):
-#line 627 "scan.l"
+#line 939 "scan.l"
{
synerr( _( "EOF encountered inside an action" ) );
yyterminate();
}
YY_BREAK
-case 162:
+case YY_STATE_EOF(EXTENDED_COMMENT):
+case YY_STATE_EOF(GROUP_WITH_PARAMS):
+case YY_STATE_EOF(GROUP_MINUS_PARAMS):
+#line 944 "scan.l"
+{
+ synerr( _( "EOF encountered inside pattern" ) );
+ yyterminate();
+ }
+ YY_BREAK
+case 245:
YY_RULE_SETUP
-#line 633 "scan.l"
+#line 949 "scan.l"
{
yylval = myesc( (Char *) yytext );
@@ -2720,66 +4075,84 @@ YY_RULE_SETUP
}
YY_BREAK
-case 163:
+case 246:
YY_RULE_SETUP
-#line 644 "scan.l"
+#line 960 "scan.l"
+fwrite (escaped_qstart, 1, strlen(escaped_qstart), yyout);
+ YY_BREAK
+case 247:
+YY_RULE_SETUP
+#line 961 "scan.l"
+fwrite (escaped_qend, 1, strlen(escaped_qend), yyout);
+ YY_BREAK
+case 248:
+/* rule 248 can match eol */
+YY_RULE_SETUP
+#line 962 "scan.l"
+ECHO;
+ YY_BREAK
+case 249:
+/* rule 249 can match eol */
+YY_RULE_SETUP
+#line 963 "scan.l"
ECHO;
YY_BREAK
case YY_STATE_EOF(SECT3):
-#line 645 "scan.l"
+#line 964 "scan.l"
sectnum = 0; yyterminate();
YY_BREAK
-case 164:
+case 250:
+/* rule 250 can match eol */
YY_RULE_SETUP
-#line 648 "scan.l"
+#line 967 "scan.l"
format_synerr( _( "bad character: %s" ), yytext );
YY_BREAK
-case 165:
+case 251:
YY_RULE_SETUP
-#line 650 "scan.l"
+#line 969 "scan.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 2736 "scan.c"
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(SECT2):
-case YY_STATE_EOF(CODEBLOCK):
-case YY_STATE_EOF(PICKUPDEF):
-case YY_STATE_EOF(SC):
-case YY_STATE_EOF(CARETISBOL):
-case YY_STATE_EOF(NUM):
-case YY_STATE_EOF(QUOTE):
-case YY_STATE_EOF(FIRSTCCL):
-case YY_STATE_EOF(CCL):
-case YY_STATE_EOF(RECOVER):
-case YY_STATE_EOF(PERCENT_BRACE_ACTION):
-case YY_STATE_EOF(OPTION):
-case YY_STATE_EOF(LINEDIR):
- yyterminate();
+#line 4115 "scan.c"
+ case YY_STATE_EOF(INITIAL):
+ case YY_STATE_EOF(SECT2):
+ case YY_STATE_EOF(CODEBLOCK):
+ case YY_STATE_EOF(PICKUPDEF):
+ case YY_STATE_EOF(SC):
+ case YY_STATE_EOF(CARETISBOL):
+ case YY_STATE_EOF(NUM):
+ case YY_STATE_EOF(QUOTE):
+ case YY_STATE_EOF(FIRSTCCL):
+ case YY_STATE_EOF(CCL):
+ case YY_STATE_EOF(RECOVER):
+ case YY_STATE_EOF(PERCENT_BRACE_ACTION):
+ case YY_STATE_EOF(OPTION):
+ case YY_STATE_EOF(LINEDIR):
+ yyterminate();
case YY_END_OF_BUFFER:
{
/* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = yy_hold_char;
+ *yy_cp = (yy_hold_char);
YY_RESTORE_YY_MORE_OFFSET
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
{
/* We're scanning a new file or input source. It's
* possible that this happened because the user
* just pointed yyin at a new source and called
* yylex(). If so, then we have to assure
- * consistency between yy_current_buffer and our
+ * consistency between YY_CURRENT_BUFFER and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yy_current_buffer->yy_input_file = yyin;
- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
}
/* Note that here we test for yy_c_buf_p "<=" to the position
@@ -2789,13 +4162,13 @@ case YY_STATE_EOF(LINEDIR):
* end-of-buffer state). Contrast this with the test
* in input().
*/
- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
{ /* This was really a NUL. */
yy_state_type yy_next_state;
- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
/* Okay, we're now positioned to make the NUL
* transition. We couldn't have
@@ -2808,30 +4181,30 @@ case YY_STATE_EOF(LINEDIR):
yy_next_state = yy_try_NUL_trans( yy_current_state );
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
if ( yy_next_state )
{
/* Consume the NUL. */
- yy_cp = ++yy_c_buf_p;
+ yy_cp = ++(yy_c_buf_p);
yy_current_state = yy_next_state;
goto yy_match;
}
else
{
- yy_cp = yy_c_buf_p;
+ yy_cp = (yy_c_buf_p);
goto yy_find_action;
}
}
- else switch ( yy_get_next_buffer() )
+ else switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_END_OF_FILE:
{
- yy_did_buffer_switch_on_eof = 0;
+ (yy_did_buffer_switch_on_eof) = 0;
- if ( yywrap() )
+ if ( yywrap( ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
@@ -2842,7 +4215,7 @@ case YY_STATE_EOF(LINEDIR):
* YY_NULL, it'll still work - another
* YY_NULL will get returned.
*/
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
yy_act = YY_STATE_EOF(YY_START);
goto do_action;
@@ -2850,30 +4223,30 @@ case YY_STATE_EOF(LINEDIR):
else
{
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
}
break;
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p =
- yytext_ptr + yy_amount_of_matched_text;
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_match;
case EOB_ACT_LAST_MATCH:
- yy_c_buf_p =
- &yy_current_buffer->yy_ch_buf[yy_n_chars];
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_find_action;
}
break;
@@ -2884,8 +4257,8 @@ case YY_STATE_EOF(LINEDIR):
"fatal flex scanner internal error--no action found" );
} /* end of action switch */
} /* end of scanning one token */
- } /* end of yylex */
-
+ } /* end of user's declarations */
+} /* end of yylex */
/* yy_get_next_buffer - try to read in a new buffer
*
@@ -2894,21 +4267,20 @@ case YY_STATE_EOF(LINEDIR):
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
* EOB_ACT_END_OF_FILE - end of file
*/
-
-static int yy_get_next_buffer YY_PROTO(( void ))
- {
- char *dest = yy_current_buffer->yy_ch_buf;
- char *source = yytext_ptr;
+static int yy_get_next_buffer (void)
+{
+ char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ char *source = (yytext_ptr);
int number_to_move, i;
int ret_val;
- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
YY_FATAL_ERROR(
"fatal flex scanner internal error--end of buffer missed" );
- if ( yy_current_buffer->yy_fill_buffer == 0 )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
{ /* Don't try to fill the buffer, so this is an EOF. */
- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
{
/* We matched a single character, the EOB, so
* treat this as a final EOF.
@@ -2928,86 +4300,52 @@ static int yy_get_next_buffer YY_PROTO(( void ))
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
- yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
else
{
- int num_to_read =
- yy_current_buffer->yy_buf_size - number_to_move - 1;
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{ /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
+
YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = yy_current_buffer;
-
- int yy_c_buf_p_offset =
- (int) (yy_c_buf_p - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- int new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- yy_flex_realloc( (void *) b->yy_ch_buf,
- b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
- num_to_read = yy_current_buffer->yy_buf_size -
- number_to_move - 1;
-#endif
}
if ( num_to_read > YY_READ_BUF_SIZE )
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
- yy_n_chars, num_to_read );
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
- if ( yy_n_chars == 0 )
+ if ( (yy_n_chars) == 0 )
{
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
- yyrestart( yyin );
+ yyrestart(yyin );
}
else
{
ret_val = EOB_ACT_LAST_MATCH;
- yy_current_buffer->yy_buffer_status =
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
YY_BUFFER_EOF_PENDING;
}
}
@@ -3015,153 +4353,141 @@ static int yy_get_next_buffer YY_PROTO(( void ))
else
ret_val = EOB_ACT_CONTINUE_SCAN;
- yy_n_chars += number_to_move;
- yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
- return ret_val;
- }
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+ return ret_val;
+}
/* yy_get_previous_state - get the state just before the EOB char was reached */
-static yy_state_type yy_get_previous_state YY_PROTO(( void ))
- {
+ static yy_state_type yy_get_previous_state (void)
+{
yy_state_type yy_current_state;
char *yy_cp;
-
- yy_current_state = yy_start;
+
+ yy_current_state = (yy_start);
yy_current_state += YY_AT_BOL();
- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ (yy_state_ptr) = (yy_state_buf);
+ *(yy_state_ptr)++ = yy_current_state;
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
{
YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
- if ( yy_accept[yy_current_state] )
- {
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
- }
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 769 )
+ if ( yy_current_state >= 1107 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ *(yy_state_ptr)++ = yy_current_state;
}
return yy_current_state;
- }
-
+}
/* yy_try_NUL_trans - try to make a transition on the NUL character
*
* synopsis
* next_state = yy_try_NUL_trans( current_state );
*/
-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
- {
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
int yy_is_jam;
- char *yy_cp = yy_c_buf_p;
-
+
YY_CHAR yy_c = 1;
- if ( yy_accept[yy_current_state] )
- {
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
- }
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 769 )
+ if ( yy_current_state >= 1107 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 768);
-
- return yy_is_jam ? 0 : yy_current_state;
- }
+ yy_is_jam = (yy_current_state == 1106);
+ if ( ! yy_is_jam )
+ *(yy_state_ptr)++ = yy_current_state;
+ return yy_is_jam ? 0 : yy_current_state;
+}
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-char *yy_bp;
-#endif
- {
- char *yy_cp = yy_c_buf_p;
+ static void yyunput (int c, char * yy_bp )
+{
+ char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
/* undo effects of setting up yytext */
- *yy_cp = yy_hold_char;
+ *yy_cp = (yy_hold_char);
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
{ /* need to shift things up to make room */
/* +2 for EOB chars. */
- int number_to_move = yy_n_chars + 2;
- char *dest = &yy_current_buffer->yy_ch_buf[
- yy_current_buffer->yy_buf_size + 2];
+ yy_size_t number_to_move = (yy_n_chars) + 2;
+ char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
char *source =
- &yy_current_buffer->yy_ch_buf[number_to_move];
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
- while ( source > yy_current_buffer->yy_ch_buf )
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
*--dest = *--source;
yy_cp += (int) (dest - source);
yy_bp += (int) (dest - source);
- yy_current_buffer->yy_n_chars =
- yy_n_chars = yy_current_buffer->yy_buf_size;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
YY_FATAL_ERROR( "flex scanner push-back overflow" );
}
*--yy_cp = (char) c;
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
- yytext_ptr = yy_bp;
- yy_hold_char = *yy_cp;
- yy_c_buf_p = yy_cp;
- }
-#endif /* ifndef YY_NO_UNPUT */
-
-
+#ifndef YY_NO_INPUT
#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ))
+ static int yyinput (void)
#else
-static int input YY_PROTO(( void ))
+ static int input (void)
#endif
- {
- int c;
- *yy_c_buf_p = yy_hold_char;
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
{
/* yy_c_buf_p now points to the character we want to return.
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
/* This was really a NUL. */
- *yy_c_buf_p = '\0';
+ *(yy_c_buf_p) = '\0';
else
{ /* need more input */
- int offset = yy_c_buf_p - yytext_ptr;
- ++yy_c_buf_p;
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
- switch ( yy_get_next_buffer() )
+ switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_LAST_MATCH:
/* This happens because yy_g_n_b()
@@ -3175,16 +4501,16 @@ static int input YY_PROTO(( void ))
*/
/* Reset buffer status. */
- yyrestart( yyin );
+ yyrestart(yyin );
- /* fall through */
+ /*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE:
{
- if ( yywrap() )
+ if ( yywrap( ) )
return EOF;
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
#ifdef __cplusplus
return yyinput();
@@ -3194,91 +4520,94 @@ static int input YY_PROTO(( void ))
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + offset;
+ (yy_c_buf_p) = (yytext_ptr) + offset;
break;
}
}
}
- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
- *yy_c_buf_p = '\0'; /* preserve yytext */
- yy_hold_char = *++yy_c_buf_p;
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
- yy_current_buffer->yy_at_bol = (c == '\n');
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
return c;
- }
+}
+#endif /* ifndef YY_NO_INPUT */
-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
- {
- if ( ! yy_current_buffer )
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
-
- yy_init_buffer( yy_current_buffer, input_file );
- yy_load_buffer_state();
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
}
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
- {
- if ( yy_current_buffer == new_buffer )
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
return;
- if ( yy_current_buffer )
+ if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
- *yy_c_buf_p = yy_hold_char;
- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
- yy_current_buffer = new_buffer;
- yy_load_buffer_state();
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
/* We don't actually know whether we did this switch during
* EOF (yywrap()) processing, but the only time this flag
* is looked at is after yywrap() is called, so it's safe
* to go ahead and always set it.
*/
- yy_did_buffer_switch_on_eof = 1;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
- {
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
- yyin = yy_current_buffer->yy_input_file;
- yy_hold_char = *yy_c_buf_p;
- }
-
+ (yy_did_buffer_switch_on_eof) = 1;
+}
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
- {
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
@@ -3287,80 +4616,71 @@ int size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
- yy_init_buffer( b, file );
+ yy_init_buffer(b,file );
return b;
- }
+}
-
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
- {
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
if ( ! b )
return;
- if ( b == yy_current_buffer )
- yy_current_buffer = (YY_BUFFER_STATE) 0;
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
- yy_flex_free( (void *) b->yy_ch_buf );
-
- yy_flex_free( (void *) b );
- }
-
-
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
-#endif
-#endif
+ yyfree((void *) b->yy_ch_buf );
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
+ yyfree((void *) b );
+}
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
- {
- yy_flush_buffer( b );
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
b->yy_input_file = file;
b->yy_fill_buffer = 1;
-#if defined(YY_ALWAYS_INTERACTIVE) && YY_ALWAYS_INTERACTIVE
- b->yy_is_interactive = 1;
-#else
-#if defined(YY_NEVER_INTERACTIVE) && YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
-
- {
- if ( ! b )
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
return;
b->yy_n_chars = 0;
@@ -3377,29 +4697,125 @@ YY_BUFFER_STATE b;
b->yy_at_bol = 1;
b->yy_buffer_status = YY_BUFFER_NEW;
- if ( b == yy_current_buffer )
- yy_load_buffer_state();
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
}
+}
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
-#ifndef YY_NO_SCAN_BUFFER
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
- {
- YY_BUFFER_STATE b;
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
if ( size < 2 ||
base[size-2] != YY_END_OF_BUFFER_CHAR ||
base[size-1] != YY_END_OF_BUFFER_CHAR )
/* They forgot to leave room for the EOB's. */
return 0;
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
@@ -3413,56 +4829,51 @@ yy_size_t size;
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
- yy_switch_to_buffer( b );
+ yy_switch_to_buffer(b );
return b;
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
-#endif
- {
- int len;
- for ( len = 0; yy_str[len]; ++len )
- ;
+}
- return yy_scan_bytes( yy_str, len );
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_BYTES
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
- {
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
- int i;
-
+ yy_size_t i;
+
/* Get memory for full buffer, including space for trailing EOB's. */
- n = len + 2;
- buf = (char *) yy_flex_alloc( n );
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
- for ( i = 0; i < len; ++i )
- buf[i] = bytes[i];
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
- b = yy_scan_buffer( buf, n );
+ b = yy_scan_buffer(buf,n );
if ( ! b )
YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
@@ -3472,78 +4883,49 @@ int len;
b->yy_is_our_buffer = 1;
return b;
- }
-#endif
-
+}
-#ifndef YY_NO_PUSH_STATE
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
- {
- if ( yy_start_stack_ptr >= yy_start_stack_depth )
+ static void yy_push_state (int new_state )
+{
+ if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
{
yy_size_t new_size;
- yy_start_stack_depth += YY_START_STACK_INCR;
- new_size = yy_start_stack_depth * sizeof( int );
+ (yy_start_stack_depth) += YY_START_STACK_INCR;
+ new_size = (yy_start_stack_depth) * sizeof( int );
- if ( ! yy_start_stack )
- yy_start_stack = (int *) yy_flex_alloc( new_size );
+ if ( ! (yy_start_stack) )
+ (yy_start_stack) = (int *) yyalloc(new_size );
else
- yy_start_stack = (int *) yy_flex_realloc(
- (void *) yy_start_stack, new_size );
+ (yy_start_stack) = (int *) yyrealloc((void *) (yy_start_stack),new_size );
- if ( ! yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
+ if ( ! (yy_start_stack) )
+ YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
}
- yy_start_stack[yy_start_stack_ptr++] = YY_START;
+ (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
BEGIN(new_state);
- }
-#endif
+}
-
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ))
- {
- if ( --yy_start_stack_ptr < 0 )
+ static void yy_pop_state (void)
+{
+ if ( --(yy_start_stack_ptr) < 0 )
YY_FATAL_ERROR( "start-condition stack underflow" );
- BEGIN(yy_start_stack[yy_start_stack_ptr]);
- }
-#endif
-
-
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ))
- {
- return yy_start_stack[yy_start_stack_ptr - 1];
- }
-#endif
+ BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
+}
#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
-#else
-static void yy_fatal_error( msg )
-char msg[];
-#endif
- {
- (void) fprintf( stderr, "%s\n", msg );
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE );
- }
-
-
+}
/* Redefine yyless() so it works in section 3 code. */
@@ -3552,68 +4934,193 @@ char msg[];
do \
{ \
/* Undo effects of setting up yytext. */ \
- yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n; \
- yy_hold_char = *yy_c_buf_p; \
- *yy_c_buf_p = '\0'; \
- yyleng = n; \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
} \
while ( 0 )
+/* Accessor methods (get/set functions) to struct members. */
-/* Internal utility routines. */
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
-#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+ (yy_start_stack_ptr) = 0;
+ (yy_start_stack_depth) = 0;
+ (yy_start_stack) = NULL;
+
+ (yy_state_buf) = 0;
+ (yy_state_ptr) = 0;
+ (yy_full_match) = 0;
+ (yy_lp) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
#endif
- {
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Destroy the start condition stack. */
+ yyfree((yy_start_stack) );
+ (yy_start_stack) = NULL;
+
+ yyfree ( (yy_state_buf) );
+ (yy_state_buf) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
int i;
for ( i = 0; i < n; ++i )
s1[i] = s2[i];
- }
+}
#endif
#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
- {
+static int yy_flex_strlen (yyconst char * s )
+{
int n;
for ( n = 0; s[n]; ++n )
;
return n;
- }
+}
#endif
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
- {
+void *yyalloc (yy_size_t size )
+{
return (void *) malloc( size );
- }
+}
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
- {
+void *yyrealloc (void * ptr, yy_size_t size )
+{
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
@@ -3622,26 +5129,17 @@ yy_size_t size;
* as though doing an assignment.
*/
return (void *) realloc( (char *) ptr, size );
- }
+}
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 969 "scan.l"
-#if defined(YY_MAIN) && YY_MAIN
-int main()
- {
- yylex();
- return 0;
- }
-#endif
-#line 650 "scan.l"
@@ -3703,3 +5201,4 @@ void *ptr;
if ( ptr )
free( ptr );
}
+
diff --git a/usr.bin/lex/initskel.c b/usr.bin/lex/initskel.c
new file mode 100644
index 00000000000..2316ae6c294
--- /dev/null
+++ b/usr.bin/lex/initskel.c
@@ -0,0 +1,3732 @@
+/* $OpenBSD: initskel.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* File created from flex.skl via mkskel.sh */
+
+#include "flexdef.h"
+
+const char *skel[] = {
+ "%# -*-C-*- vi: set ft=c:",
+ "%# This file is processed in several stages.",
+ "%# Here are the stages, as best as I can describe:",
+ "%#",
+ "%# 1. flex.skl is processed through GNU m4 during the",
+ "%# pre-compilation stage of flex. Only macros starting",
+ "%# with `m4_' are processed, and quoting is normal.",
+ "%#",
+ "%# 2. The preprocessed skeleton is translated verbatim into a",
+ "%# C array, saved as \"skel.c\" and compiled into the flex binary.",
+ "%#",
+ "%# 3. At runtime, the skeleton is generated and filtered (again)",
+ "%# through m4. Macros beginning with `m4_' will be processed.",
+ "%# The quoting is \"[[\" and \"]]\" so we don't interfere with",
+ "%# user code.",
+ "%# ",
+ "%# All generate macros for the m4 stage contain the text \"m4\" or \"M4\"",
+ "%# in them. This is to distinguish them from CPP macros.",
+ "%# The exception to this rule is YY_G, which is an m4 macro, ",
+ "%# but it needs to be remain short because it is used everywhere.",
+ "%#",
+ "/* A lexical scanner generated by flex */",
+ "",
+ "%# Macros for preproc stage.",
+ "",
+ "",
+ "%# Macros for runtime processing stage.",
+ "m4_changecom",
+ "m4_changequote",
+ "m4_changequote([[, ]])",
+ "",
+ "%# ",
+ "%# Lines in this skeleton starting with a \"%\" character are \"control lines\"",
+ "%# and affect the generation of the scanner. The possible control codes are",
+ "%# listed and processed in misc.c.",
+ "%#",
+ "%# %# - A comment. The current line is omitted from the generated scanner.",
+ "%# %if-c++-only - The following lines are printed for C++ scanners ONLY.",
+ "%# %if-c-only - The following lines are NOT printed for C++ scanners.",
+ "%# %if-c-or-c++ - The following lines are printed in BOTH C and C++ scanners.",
+ "%# %if-reentrant - Print for reentrant scanners.(push)",
+ "%# %if-not-reentrant - Print for non-reentrant scanners. (push)",
+ "%# %if-bison-bridge - Print for bison-bridge. (push)",
+ "%# %if-not-bison-bridge - Print for non-bison-bridge. (push)",
+ "%# %endif - pop from the previous if code.",
+ "%# %% - A stop-point, where code is inserted by flex.",
+ "%# Each stop-point is numbered here and also in the code generator.",
+ "%# (See gen.c, etc. for details.)",
+ "%# %not-for-header - Begin code that should NOT appear in a \".h\" file.",
+ "%# %ok-for-header - %c and %e are used for building a header file.",
+ "%# %if-tables-serialization",
+ "%#",
+ "%# All control-lines EXCEPT comment lines (\"%#\") will be inserted into",
+ "%# the generated scanner as a C-style comment. This is to aid those who",
+ "%# edit the skeleton.",
+ "%#",
+ "",
+ "%not-for-header",
+ "%if-c-only",
+ "%if-not-reentrant",
+ "m4_ifelse(M4_YY_PREFIX,yy,,",
+ "#define yy_create_buffer M4_YY_PREFIX[[_create_buffer]]",
+ "#define yy_delete_buffer M4_YY_PREFIX[[_delete_buffer]]",
+ "#define yy_flex_debug M4_YY_PREFIX[[_flex_debug]]",
+ "#define yy_init_buffer M4_YY_PREFIX[[_init_buffer]]",
+ "#define yy_flush_buffer M4_YY_PREFIX[[_flush_buffer]]",
+ "#define yy_load_buffer_state M4_YY_PREFIX[[_load_buffer_state]]",
+ "#define yy_switch_to_buffer M4_YY_PREFIX[[_switch_to_buffer]]",
+ "#define yyin M4_YY_PREFIX[[in]]",
+ "#define yyleng M4_YY_PREFIX[[leng]]",
+ "#define yylex M4_YY_PREFIX[[lex]]",
+ "#define yylineno M4_YY_PREFIX[[lineno]]",
+ "#define yyout M4_YY_PREFIX[[out]]",
+ "#define yyrestart M4_YY_PREFIX[[restart]]",
+ "#define yytext M4_YY_PREFIX[[text]]",
+ "#define yywrap M4_YY_PREFIX[[wrap]]",
+ "#define yyalloc M4_YY_PREFIX[[alloc]]",
+ "#define yyrealloc M4_YY_PREFIX[[realloc]]",
+ "#define yyfree M4_YY_PREFIX[[free]]",
+ ")",
+ "%endif",
+ "%endif",
+ "%ok-for-header",
+ "",
+ "#define FLEX_SCANNER",
+ "#define YY_FLEX_MAJOR_VERSION 2",
+ "#define YY_FLEX_MINOR_VERSION 5",
+ "#define YY_FLEX_SUBMINOR_VERSION 39",
+ "#if YY_FLEX_SUBMINOR_VERSION > 0",
+ "#define FLEX_BETA",
+ "#endif",
+ "",
+ "%# Some negated symbols",
+ "m4_ifdef( [[M4_YY_IN_HEADER]], , [[m4_define([[M4_YY_NOT_IN_HEADER]], [[]])]])",
+ "m4_ifdef( [[M4_YY_REENTRANT]], , [[m4_define([[M4_YY_NOT_REENTRANT]], [[]])]])",
+ "",
+ "%# This is the m4 way to say \"(stack_used || is_reentrant)",
+ "m4_ifdef( [[M4_YY_STACK_USED]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])",
+ "m4_ifdef( [[M4_YY_REENTRANT]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])",
+ "",
+ "%# Prefixes.",
+ "%# The complexity here is necessary so that m4 preserves",
+ "%# the argument lists to each C function.",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_PREFIX]],, [[m4_define([[M4_YY_PREFIX]], [[yy]])]])",
+ "",
+ "",
+ "",
+ "%if-c++-only",
+ " /* The c++ scanner is a mess. The FlexLexer.h header file relies on the",
+ " * following macro. This is required in order to pass the c++-multiple-scanners",
+ " * test in the regression suite. We get reports that it breaks inheritance.",
+ " * We will address this in a future release of flex, or omit the C++ scanner",
+ " * altogether.",
+ " */",
+ " #define yyFlexLexer M4_YY_PREFIX[[FlexLexer]]",
+ "%endif",
+ "",
+ "%if-c-only",
+ " m4_define(yy[[_create_buffer]], [[M4_YY_PREFIX[[_create_buffer]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_delete_buffer]], [[M4_YY_PREFIX[[_delete_buffer]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_scan_buffer]], [[M4_YY_PREFIX[[_scan_buffer]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_scan_string]], [[M4_YY_PREFIX[[_scan_string]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_scan_bytes]], [[M4_YY_PREFIX[[_scan_bytes]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_init_buffer]], [[M4_YY_PREFIX[[_init_buffer]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_flush_buffer]], [[M4_YY_PREFIX[[_flush_buffer]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_load_buffer_state]], [[M4_YY_PREFIX[[_load_buffer_state]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_switch_to_buffer]], [[M4_YY_PREFIX[[_switch_to_buffer]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[push_buffer_state]], [[M4_YY_PREFIX[[push_buffer_state]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[pop_buffer_state]], [[M4_YY_PREFIX[[pop_buffer_state]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[ensure_buffer_stack]], [[M4_YY_PREFIX[[ensure_buffer_stack]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[lex]], [[M4_YY_PREFIX[[lex]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[restart]], [[M4_YY_PREFIX[[restart]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[lex_init]], [[M4_YY_PREFIX[[lex_init]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[lex_init_extra]], [[M4_YY_PREFIX[[lex_init_extra]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[lex_destroy]], [[M4_YY_PREFIX[[lex_destroy]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[get_debug]], [[M4_YY_PREFIX[[get_debug]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[set_debug]], [[M4_YY_PREFIX[[set_debug]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[get_extra]], [[M4_YY_PREFIX[[get_extra]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[set_extra]], [[M4_YY_PREFIX[[set_extra]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[get_in]], [[M4_YY_PREFIX[[get_in]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[set_in]], [[M4_YY_PREFIX[[set_in]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[get_out]], [[M4_YY_PREFIX[[get_out]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[set_out]], [[M4_YY_PREFIX[[set_out]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[get_leng]], [[M4_YY_PREFIX[[get_leng]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[get_text]], [[M4_YY_PREFIX[[get_text]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[get_lineno]], [[M4_YY_PREFIX[[get_lineno]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[set_lineno]], [[M4_YY_PREFIX[[set_lineno]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_ifdef( [[M4_YY_REENTRANT]],",
+ " [[",
+ " m4_define(yy[[get_column]], [[M4_YY_PREFIX[[get_column]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[set_column]], [[M4_YY_PREFIX[[set_column]]m4_ifelse($#,0,,[[($@)]])]])",
+ " ]])",
+ " m4_define(yy[[wrap]], [[M4_YY_PREFIX[[wrap]]m4_ifelse($#,0,,[[($@)]])]])",
+ "%endif",
+ "",
+ "m4_ifdef( [[M4_YY_BISON_LVAL]],",
+ "[[",
+ " m4_define(yy[[get_lval]], [[M4_YY_PREFIX[[get_lval]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[set_lval]], [[M4_YY_PREFIX[[set_lval]]m4_ifelse($#,0,,[[($@)]])]])",
+ "]])",
+ "",
+ "m4_ifdef( [[<M4_YY_BISON_LLOC>]],",
+ "[[",
+ " m4_define(yy[[get_lloc]], [[M4_YY_PREFIX[[get_lloc]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[set_lloc]], [[M4_YY_PREFIX[[set_lloc]]m4_ifelse($#,0,,[[($@)]])]])",
+ "]])",
+ "",
+ "",
+ " m4_define(yy[[alloc]], [[M4_YY_PREFIX[[alloc]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[realloc]], [[M4_YY_PREFIX[[realloc]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[free]], [[M4_YY_PREFIX[[free]]m4_ifelse($#,0,,[[($@)]])]])",
+ "",
+ "%if-c-only",
+ "m4_ifdef( [[M4_YY_NOT_REENTRANT]],",
+ "[[",
+ " m4_define(yy[[text]], [[M4_YY_PREFIX[[text]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[leng]], [[M4_YY_PREFIX[[leng]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[in]], [[M4_YY_PREFIX[[in]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[out]], [[M4_YY_PREFIX[[out]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[_flex_debug]], [[M4_YY_PREFIX[[_flex_debug]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[lineno]], [[M4_YY_PREFIX[[lineno]]m4_ifelse($#,0,,[[($@)]])]])",
+ "]])",
+ "%endif",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_TABLES_EXTERNAL]],",
+ "[[",
+ " m4_define(yy[[tables_fload]], [[M4_YY_PREFIX[[tables_fload]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[tables_destroy]], [[M4_YY_PREFIX[[tables_destroy]]m4_ifelse($#,0,,[[($@)]])]])",
+ " m4_define(yy[[TABLES_NAME]], [[M4_YY_PREFIX[[TABLES_NAME]]m4_ifelse($#,0,,[[($@)]])]])",
+ "]])",
+ "",
+ "/* First, we deal with platform-specific or compiler-specific issues. */",
+ "",
+ "/* begin standard C headers. */",
+ "%if-c-only",
+ "#include <stdio.h>",
+ "#include <string.h>",
+ "#include <errno.h>",
+ "#include <stdlib.h>",
+ "%endif",
+ "",
+ "%if-tables-serialization",
+ "#include <sys/types.h>",
+ "#include <netinet/in.h>",
+ "%endif",
+ "/* end standard C headers. */",
+ "",
+ "%if-c-or-c++",
+ "/* flex integer type definitions */",
+ "",
+ "#ifndef FLEXINT_H",
+ "#define FLEXINT_H",
+ "",
+ "/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */",
+ "",
+ "#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L",
+ "",
+ "/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,",
+ " * if you want the limit (max/min) macros for int types. ",
+ " */",
+ "#ifndef __STDC_LIMIT_MACROS",
+ "#define __STDC_LIMIT_MACROS 1",
+ "#endif",
+ "",
+ "#include <inttypes.h>",
+ "typedef int8_t flex_int8_t;",
+ "typedef uint8_t flex_uint8_t;",
+ "typedef int16_t flex_int16_t;",
+ "typedef uint16_t flex_uint16_t;",
+ "typedef int32_t flex_int32_t;",
+ "typedef uint32_t flex_uint32_t;",
+ "#else",
+ "typedef signed char flex_int8_t;",
+ "typedef short int flex_int16_t;",
+ "typedef int flex_int32_t;",
+ "typedef unsigned char flex_uint8_t; ",
+ "typedef unsigned short int flex_uint16_t;",
+ "typedef unsigned int flex_uint32_t;",
+ "",
+ "/* Limits of integral types. */",
+ "#ifndef INT8_MIN",
+ "#define INT8_MIN (-128)",
+ "#endif",
+ "#ifndef INT16_MIN",
+ "#define INT16_MIN (-32767-1)",
+ "#endif",
+ "#ifndef INT32_MIN",
+ "#define INT32_MIN (-2147483647-1)",
+ "#endif",
+ "#ifndef INT8_MAX",
+ "#define INT8_MAX (127)",
+ "#endif",
+ "#ifndef INT16_MAX",
+ "#define INT16_MAX (32767)",
+ "#endif",
+ "#ifndef INT32_MAX",
+ "#define INT32_MAX (2147483647)",
+ "#endif",
+ "#ifndef UINT8_MAX",
+ "#define UINT8_MAX (255U)",
+ "#endif",
+ "#ifndef UINT16_MAX",
+ "#define UINT16_MAX (65535U)",
+ "#endif",
+ "#ifndef UINT32_MAX",
+ "#define UINT32_MAX (4294967295U)",
+ "#endif",
+ "",
+ "#endif /* ! C99 */",
+ "",
+ "#endif /* ! FLEXINT_H */",
+ "",
+ "%endif",
+ "",
+ "%if-c++-only",
+ "/* begin standard C++ headers. */",
+ "#include <iostream> ",
+ "#include <errno.h>",
+ "#include <cstdlib>",
+ "#include <cstdio>",
+ "#include <cstring>",
+ "/* end standard C++ headers. */",
+ "%endif",
+ "",
+ "#ifdef __cplusplus",
+ "",
+ "/* The \"const\" storage-class-modifier is valid. */",
+ "#define YY_USE_CONST",
+ "",
+ "#else /* ! __cplusplus */",
+ "",
+ "/* C99 requires __STDC__ to be defined as 1. */",
+ "#if defined (__STDC__)",
+ "",
+ "#define YY_USE_CONST",
+ "",
+ "#endif /* defined (__STDC__) */",
+ "#endif /* ! __cplusplus */",
+ "",
+ "#ifdef YY_USE_CONST",
+ "#define yyconst const",
+ "#else",
+ "#define yyconst",
+ "#endif",
+ "",
+ "%# For compilers that can not handle prototypes.",
+ "%# e.g.,",
+ "%# The function prototype",
+ "%# int foo(int x, char* y);",
+ "%# ",
+ "%# ...should be written as",
+ "%# int foo M4_YY_PARAMS(int x, char* y);",
+ "%# ",
+ "%# ...which could possibly generate",
+ "%# int foo ();",
+ "%# ",
+ "m4_ifdef( [[M4_YY_NO_ANSI_FUNC_PROTOS]],",
+ "[[",
+ " m4_define( [[M4_YY_PARAMS]], [[()]])",
+ "]],",
+ "[[",
+ " m4_define( [[M4_YY_PARAMS]], [[($*)]])",
+ "]])",
+ "",
+ "%not-for-header",
+ "/* Returned upon end-of-file. */",
+ "#define YY_NULL 0",
+ "%ok-for-header",
+ "",
+ "%not-for-header",
+ "/* Promotes a possibly negative, possibly signed char to an unsigned",
+ " * integer for use as an array index. If the signed char is negative,",
+ " * we want to instead treat it as an 8-bit unsigned char, hence the",
+ " * double cast.",
+ " */",
+ "#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)",
+ "%ok-for-header",
+ "",
+ "",
+ "",
+ "%if-reentrant",
+ "",
+ "/* An opaque pointer. */",
+ "#ifndef YY_TYPEDEF_YY_SCANNER_T",
+ "#define YY_TYPEDEF_YY_SCANNER_T",
+ "typedef void* yyscan_t;",
+ "#endif",
+ "",
+ "%# Declare yyguts variable",
+ "m4_define( [[M4_YY_DECL_GUTS_VAR]], [[struct yyguts_t * yyg = (struct yyguts_t*)yyscanner]])",
+ "%# Perform a noop access on yyguts to prevent unused variable complains",
+ "m4_define( [[M4_YY_NOOP_GUTS_VAR]], [[(void)yyg]])",
+ "%# For use wherever a Global is accessed or assigned.",
+ "m4_define( [[YY_G]], [[yyg->$1]])",
+ "",
+ "%# For use in function prototypes to append the additional argument.",
+ "m4_define( [[M4_YY_PROTO_LAST_ARG]], [[, yyscan_t yyscanner]])",
+ "m4_define( [[M4_YY_PROTO_ONLY_ARG]], [[yyscan_t yyscanner]])",
+ "",
+ "%# For use in function definitions to append the additional argument.",
+ "m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],",
+ "[[",
+ " m4_define( [[M4_YY_DEF_LAST_ARG]], [[, yyscanner]])",
+ " m4_define( [[M4_YY_DEF_ONLY_ARG]], [[yyscanner]])",
+ "]],",
+ "[[",
+ " m4_define( [[M4_YY_DEF_LAST_ARG]], [[, yyscan_t yyscanner]])",
+ " m4_define( [[M4_YY_DEF_ONLY_ARG]], [[yyscan_t yyscanner]])",
+ "]])",
+ "m4_define( [[M4_YY_DECL_LAST_ARG]], [[yyscan_t yyscanner;]])",
+ "",
+ "%# For use in function calls to pass the additional argument.",
+ "m4_define( [[M4_YY_CALL_LAST_ARG]], [[, yyscanner]])",
+ "m4_define( [[M4_YY_CALL_ONLY_ARG]], [[yyscanner]])",
+ "",
+ "%# For use in function documentation to adjust for additional argument.",
+ "m4_define( [[M4_YY_DOC_PARAM]], [[@param yyscanner The scanner object.]])",
+ "",
+ "/* For convenience, these vars (plus the bison vars far below)",
+ " are macros in the reentrant scanner. */",
+ "#define yyin YY_G(yyin_r)",
+ "#define yyout YY_G(yyout_r)",
+ "#define yyextra YY_G(yyextra_r)",
+ "#define yyleng YY_G(yyleng_r)",
+ "#define yytext YY_G(yytext_r)",
+ "#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)",
+ "#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)",
+ "#define yy_flex_debug YY_G(yy_flex_debug_r)",
+ "",
+ "m4_define( [[M4_YY_INCR_LINENO]],",
+ "[[ ",
+ " do{ yylineno++;",
+ " yycolumn=0;",
+ " }while(0)",
+ "]])",
+ "",
+ "%endif",
+ "",
+ "",
+ "",
+ "%if-not-reentrant",
+ "",
+ "m4_define( [[M4_YY_INCR_LINENO]],",
+ "[[ ",
+ " yylineno++;",
+ "]])",
+ "",
+ "%# Define these macros to be no-ops.",
+ "m4_define( [[M4_YY_DECL_GUTS_VAR]], [[m4_dnl]])",
+ "m4_define( [[M4_YY_NOOP_GUTS_VAR]], [[m4_dnl]])",
+ "m4_define( [[YY_G]], [[($1)]])",
+ "m4_define( [[M4_YY_PROTO_LAST_ARG]])",
+ "m4_define( [[M4_YY_PROTO_ONLY_ARG]], [[void]])",
+ "m4_define( [[M4_YY_DEF_LAST_ARG]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],",
+ "[[",
+ " m4_define( [[M4_YY_DEF_ONLY_ARG]])",
+ "]],",
+ "[[",
+ " m4_define( [[M4_YY_DEF_ONLY_ARG]], [[void]])",
+ "]])",
+ "m4_define([[M4_YY_DECL_LAST_ARG]])",
+ "m4_define([[M4_YY_CALL_LAST_ARG]])",
+ "m4_define([[M4_YY_CALL_ONLY_ARG]])",
+ "m4_define( [[M4_YY_DOC_PARAM]], [[]])",
+ "",
+ "%endif",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],",
+ "[[",
+ "%# For compilers that need traditional function definitions.",
+ "%# e.g.,",
+ "%# The function prototype taking 2 arguments",
+ "%# int foo (int x, char* y)",
+ "%#",
+ "%# ...should be written as",
+ "%# int foo YYFARGS2(int,x, char*,y)",
+ "%#",
+ "%# ...which could possibly generate",
+ "%# int foo (x,y,yyscanner)",
+ "%# int x;",
+ "%# char * y;",
+ "%# yyscan_t yyscanner;",
+ "%#",
+ "%# Generate traditional function defs",
+ " m4_define( [[YYFARGS0]], [[(M4_YY_DEF_ONLY_ARG) [[\\]]",
+ " M4_YY_DECL_LAST_ARG]])",
+ " m4_define( [[YYFARGS1]], [[($2 M4_YY_DEF_LAST_ARG) [[\\]]",
+ " $1 $2; [[\\]]",
+ " M4_YY_DECL_LAST_ARG]])",
+ " m4_define( [[YYFARGS2]], [[($2,$4 M4_YY_DEF_LAST_ARG) [[\\]]",
+ " $1 $2; [[\\]]",
+ " $3 $4; [[\\]]",
+ " M4_YY_DECL_LAST_ARG]])",
+ " m4_define( [[YYFARGS3]], [[($2,$4,$6 M4_YY_DEF_LAST_ARG) [[\\]]",
+ " $1 $2; [[\\]]",
+ " $3 $4; [[\\]]",
+ " $5 $6; [[\\]]",
+ " M4_YY_DECL_LAST_ARG]])",
+ "]],",
+ "[[",
+ "%# Generate C99 function defs.",
+ " m4_define( [[YYFARGS0]], [[(M4_YY_DEF_ONLY_ARG)]])",
+ " m4_define( [[YYFARGS1]], [[($1 $2 M4_YY_DEF_LAST_ARG)]])",
+ " m4_define( [[YYFARGS2]], [[($1 $2, $3 $4 M4_YY_DEF_LAST_ARG)]])",
+ " m4_define( [[YYFARGS3]], [[($1 $2, $3 $4, $5 $6 M4_YY_DEF_LAST_ARG)]])",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Enter a start condition. This macro really ought to take a parameter,",
+ " * but we do it the disgusting crufty way forced on us by the ()-less",
+ " * definition of BEGIN.",
+ " */",
+ "#define BEGIN YY_G(yy_start) = 1 + 2 *",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Translate the current start state into a value that can be later handed",
+ " * to BEGIN to return to the state. The YYSTATE alias is for lex",
+ " * compatibility.",
+ " */",
+ "#define YY_START ((YY_G(yy_start) - 1) / 2)",
+ "#define YYSTATE YY_START",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Action number for EOF rule of a given start state. */",
+ "#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Special action meaning \"start processing a new file\". */",
+ "#define YY_NEW_FILE yyrestart( yyin M4_YY_CALL_LAST_ARG )",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define YY_END_OF_BUFFER_CHAR 0",
+ "]])",
+ "",
+ "/* Size of default input buffer. */",
+ "#ifndef YY_BUF_SIZE",
+ "#define YY_BUF_SIZE 16384",
+ "#endif",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* The state buf must be large enough to hold one state per character in the main buffer.",
+ " */",
+ "#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))",
+ "]])",
+ "",
+ "",
+ "#ifndef YY_TYPEDEF_YY_BUFFER_STATE",
+ "#define YY_TYPEDEF_YY_BUFFER_STATE",
+ "typedef struct yy_buffer_state *YY_BUFFER_STATE;",
+ "#endif",
+ "",
+ "#ifndef YY_TYPEDEF_YY_SIZE_T",
+ "#define YY_TYPEDEF_YY_SIZE_T",
+ "typedef size_t yy_size_t;",
+ "#endif",
+ "",
+ "%if-not-reentrant",
+ "extern yy_size_t yyleng;",
+ "%endif",
+ "",
+ "%if-c-only",
+ "%if-not-reentrant",
+ "extern FILE *yyin, *yyout;",
+ "%endif",
+ "%endif",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define EOB_ACT_CONTINUE_SCAN 0",
+ "#define EOB_ACT_END_OF_FILE 1",
+ "#define EOB_ACT_LAST_MATCH 2",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_USE_LINENO]],",
+ " [[",
+ " /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires",
+ " * access to the local variable yy_act. Since yyless() is a macro, it would break",
+ " * existing scanners that call yyless() from OUTSIDE yylex. ",
+ " * One obvious solution it to make yy_act a global. I tried that, and saw",
+ " * a 5% performance hit in a non-yylineno scanner, because yy_act is",
+ " * normally declared as a register variable-- so it is not worth it.",
+ " */",
+ " #define YY_LESS_LINENO(n) \\",
+ " do { \\",
+ " int yyl;\\",
+ " for ( yyl = n; yyl < yyleng; ++yyl )\\",
+ " if ( yytext[yyl] == '\\n' )\\",
+ " --yylineno;\\",
+ " }while(0)",
+ " #define YY_LINENO_REWIND_TO(dst) \\",
+ " do {\\",
+ " const char *p;\\",
+ " for ( p = yy_cp-1; p >= (dst); --p)\\",
+ " if ( *p == '\\n' )\\",
+ " --yylineno;\\",
+ " }while(0)",
+ " ]],",
+ " [[",
+ " #define YY_LESS_LINENO(n)",
+ " #define YY_LINENO_REWIND_TO(ptr)",
+ " ]])",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Return all but the first \"n\" matched characters back to the input stream. */",
+ "#define yyless(n) \\",
+ " do \\",
+ " { \\",
+ " /* Undo effects of setting up yytext. */ \\",
+ " int yyless_macro_arg = (n); \\",
+ " YY_LESS_LINENO(yyless_macro_arg);\\",
+ " *yy_cp = YY_G(yy_hold_char); \\",
+ " YY_RESTORE_YY_MORE_OFFSET \\",
+ " YY_G(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \\",
+ " YY_DO_BEFORE_ACTION; /* set up yytext again */ \\",
+ " } \\",
+ " while ( 0 )",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define unput(c) yyunput( c, YY_G(yytext_ptr) M4_YY_CALL_LAST_ARG )",
+ "]])",
+ "",
+ "#ifndef YY_STRUCT_YY_BUFFER_STATE",
+ "#define YY_STRUCT_YY_BUFFER_STATE",
+ "struct yy_buffer_state",
+ " {",
+ "%if-c-only",
+ " FILE *yy_input_file;",
+ "%endif",
+ "",
+ "%if-c++-only",
+ " std::istream* yy_input_file;",
+ "%endif",
+ "",
+ "",
+ " char *yy_ch_buf; /* input buffer */",
+ " char *yy_buf_pos; /* current position in input buffer */",
+ "",
+ " /* Size of input buffer in bytes, not including room for EOB",
+ " * characters.",
+ " */",
+ " yy_size_t yy_buf_size;",
+ "",
+ " /* Number of characters read into yy_ch_buf, not including EOB",
+ " * characters.",
+ " */",
+ " yy_size_t yy_n_chars;",
+ "",
+ " /* Whether we \"own\" the buffer - i.e., we know we created it,",
+ " * and can realloc() it to grow it, and should free() it to",
+ " * delete it.",
+ " */",
+ " int yy_is_our_buffer;",
+ "",
+ " /* Whether this is an \"interactive\" input source; if so, and",
+ " * if we're using stdio for input, then we want to use getc()",
+ " * instead of fread(), to make sure we stop fetching input after",
+ " * each newline.",
+ " */",
+ " int yy_is_interactive;",
+ "",
+ " /* Whether we're considered to be at the beginning of a line.",
+ " * If so, '^' rules will be active on the next match, otherwise",
+ " * not.",
+ " */",
+ " int yy_at_bol;",
+ "",
+ " int yy_bs_lineno; /**< The line count. */",
+ " int yy_bs_column; /**< The column count. */",
+ " ",
+ "",
+ " /* Whether to try to fill the input buffer when we reach the",
+ " * end of it.",
+ " */",
+ " int yy_fill_buffer;",
+ "",
+ " int yy_buffer_status;",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define YY_BUFFER_NEW 0",
+ "#define YY_BUFFER_NORMAL 1",
+ " /* When an EOF's been seen but there's still some text to process",
+ " * then we mark the buffer as YY_EOF_PENDING, to indicate that we",
+ " * shouldn't try reading from the input source any more. We might",
+ " * still have a bunch of tokens to match, though, because of",
+ " * possible backing-up.",
+ " *",
+ " * When we actually see the EOF, we change the status to \"new\"",
+ " * (via yyrestart()), so that the user can continue scanning by",
+ " * just pointing yyin at a new input file.",
+ " */",
+ "#define YY_BUFFER_EOF_PENDING 2",
+ "]])",
+ " };",
+ "#endif /* !YY_STRUCT_YY_BUFFER_STATE */",
+ "",
+ "%if-c-only Standard (non-C++) definition",
+ "%not-for-header",
+ "%if-not-reentrant",
+ "",
+ "/* Stack of input buffers. */",
+ "static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */",
+ "static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */",
+ "static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */",
+ "%endif",
+ "%ok-for-header",
+ "%endif",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* We provide macros for accessing buffer states in case in the",
+ " * future we want to put the buffer states in a more general",
+ " * \"scanner state\".",
+ " *",
+ " * Returns the top of the stack, or NULL.",
+ " */",
+ "#define YY_CURRENT_BUFFER ( YY_G(yy_buffer_stack) \\",
+ " ? YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)] \\",
+ " : NULL)",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Same as previous macro, but useful when we know that the buffer stack is not",
+ " * NULL or when we need an lvalue. For internal use only.",
+ " */",
+ "#define YY_CURRENT_BUFFER_LVALUE YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)]",
+ "]])",
+ "",
+ "%if-c-only Standard (non-C++) definition",
+ "",
+ "%if-not-reentrant",
+ "%not-for-header",
+ "/* yy_hold_char holds the character lost when yytext is formed. */",
+ "static char yy_hold_char;",
+ "static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */",
+ "yy_size_t yyleng;",
+ "",
+ "/* Points to current character in buffer. */",
+ "static char *yy_c_buf_p = (char *) 0;",
+ "static int yy_init = 0; /* whether we need to initialize */",
+ "static int yy_start = 0; /* start state number */",
+ "",
+ "/* Flag which is used to allow yywrap()'s to do buffer switches",
+ " * instead of setting up a fresh yyin. A bit of a hack ...",
+ " */",
+ "static int yy_did_buffer_switch_on_eof;",
+ "%ok-for-header",
+ "%endif",
+ "",
+ "void yyrestart M4_YY_PARAMS( FILE *input_file M4_YY_PROTO_LAST_ARG );",
+ "void yy_switch_to_buffer M4_YY_PARAMS( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );",
+ "YY_BUFFER_STATE yy_create_buffer M4_YY_PARAMS( FILE *file, int size M4_YY_PROTO_LAST_ARG );",
+ "void yy_delete_buffer M4_YY_PARAMS( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );",
+ "void yy_flush_buffer M4_YY_PARAMS( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );",
+ "void yypush_buffer_state M4_YY_PARAMS( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );",
+ "void yypop_buffer_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "static void yyensure_buffer_stack M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "static void yy_load_buffer_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "static void yy_init_buffer M4_YY_PARAMS( YY_BUFFER_STATE b, FILE *file M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG)",
+ "]])",
+ "",
+ "YY_BUFFER_STATE yy_scan_buffer M4_YY_PARAMS( char *base, yy_size_t size M4_YY_PROTO_LAST_ARG );",
+ "YY_BUFFER_STATE yy_scan_string M4_YY_PARAMS( yyconst char *yy_str M4_YY_PROTO_LAST_ARG );",
+ "YY_BUFFER_STATE yy_scan_bytes M4_YY_PARAMS( yyconst char *bytes, yy_size_t len M4_YY_PROTO_LAST_ARG );",
+ "",
+ "%endif",
+ "",
+ "void *yyalloc M4_YY_PARAMS( yy_size_t M4_YY_PROTO_LAST_ARG );",
+ "void *yyrealloc M4_YY_PARAMS( void *, yy_size_t M4_YY_PROTO_LAST_ARG );",
+ "void yyfree M4_YY_PARAMS( void * M4_YY_PROTO_LAST_ARG );",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define yy_new_buffer yy_create_buffer",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define yy_set_interactive(is_interactive) \\",
+ " { \\",
+ " if ( ! YY_CURRENT_BUFFER ){ \\",
+ " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \\",
+ " YY_CURRENT_BUFFER_LVALUE = \\",
+ " yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \\",
+ " } \\",
+ " YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \\",
+ " }",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define yy_set_bol(at_bol) \\",
+ " { \\",
+ " if ( ! YY_CURRENT_BUFFER ){\\",
+ " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \\",
+ " YY_CURRENT_BUFFER_LVALUE = \\",
+ " yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \\",
+ " } \\",
+ " YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \\",
+ " }",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)",
+ "]])",
+ "",
+ "%% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "%% [1.5] DFA",
+ "]])",
+ "",
+ "%if-c-only Standard (non-C++) definition",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "static yy_state_type yy_get_previous_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "static yy_state_type yy_try_NUL_trans M4_YY_PARAMS( yy_state_type current_state M4_YY_PROTO_LAST_ARG);",
+ "static int yy_get_next_buffer M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "static void yy_fatal_error M4_YY_PARAMS( yyconst char msg[] M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "",
+ "%endif",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Done after the current pattern has been matched and before the",
+ " * corresponding action - sets up yytext.",
+ " */",
+ "#define YY_DO_BEFORE_ACTION \\",
+ " YY_G(yytext_ptr) = yy_bp; \\",
+ "%% [2.0] code to fiddle yytext and yyleng for yymore() goes here \\",
+ " YY_G(yy_hold_char) = *yy_cp; \\",
+ " *yy_cp = '\\0'; \\",
+ "%% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \\",
+ " YY_G(yy_c_buf_p) = yy_cp;",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "%% [4.0] data tables for the DFA and the user's section 1 definitions go here",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_IN_HEADER]], [[#ifdef YY_HEADER_EXPORT_START_CONDITIONS]])",
+ "M4_YY_SC_DEFS",
+ "m4_ifdef( [[M4_YY_IN_HEADER]], [[#endif]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_UNISTD_H]],,",
+ "[[",
+ "#ifndef YY_NO_UNISTD_H",
+ "/* Special case for \"unistd.h\", since it is non-ANSI. We include it way",
+ " * down here because we want the user's section 1 to have been scanned first.",
+ " * The user has a chance to override it with an option.",
+ " */",
+ "%if-c-only",
+ "#include <unistd.h>",
+ "%endif",
+ "%if-c++-only",
+ "#include <unistd.h>",
+ "%endif",
+ "#endif",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_EXTRA_TYPE_DEFS]],",
+ "[[",
+ "#define YY_EXTRA_TYPE M4_EXTRA_TYPE_DEFS",
+ "]],",
+ "[[",
+ "#ifndef YY_EXTRA_TYPE",
+ "#define YY_EXTRA_TYPE void *",
+ "#endif",
+ "]]",
+ ")",
+ "",
+ "%if-c-only Reentrant structure and macros (non-C++).",
+ "%if-reentrant",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Holds the entire state of the reentrant scanner. */",
+ "struct yyguts_t",
+ " {",
+ "",
+ " /* User-defined. Not touched by flex. */",
+ " YY_EXTRA_TYPE yyextra_r;",
+ "",
+ " /* The rest are the same as the globals declared in the non-reentrant scanner. */",
+ " FILE *yyin_r, *yyout_r;",
+ " size_t yy_buffer_stack_top; /**< index of top of stack. */",
+ " size_t yy_buffer_stack_max; /**< capacity of stack. */",
+ " YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */",
+ " char yy_hold_char;",
+ " yy_size_t yy_n_chars;",
+ " yy_size_t yyleng_r;",
+ " char *yy_c_buf_p;",
+ " int yy_init;",
+ " int yy_start;",
+ " int yy_did_buffer_switch_on_eof;",
+ " int yy_start_stack_ptr;",
+ " int yy_start_stack_depth;",
+ " int *yy_start_stack;",
+ " yy_state_type yy_last_accepting_state;",
+ " char* yy_last_accepting_cpos;",
+ "",
+ " int yylineno_r;",
+ " int yy_flex_debug_r;",
+ "",
+ "m4_ifdef( [[M4_YY_USES_REJECT]],",
+ "[[",
+ " yy_state_type *yy_state_buf;",
+ " yy_state_type *yy_state_ptr;",
+ " char *yy_full_match;",
+ " int yy_lp;",
+ "",
+ " /* These are only needed for trailing context rules,",
+ " * but there's no conditional variable for that yet. */",
+ " int yy_looking_for_trail_begin;",
+ " int yy_full_lp;",
+ " int *yy_full_state;",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],",
+ "[[",
+ " char yytext_r[YYLMAX];",
+ " char *yytext_ptr;",
+ " int yy_more_offset;",
+ " int yy_prev_more_offset;",
+ "]],",
+ "[[",
+ " char *yytext_r;",
+ " int yy_more_flag;",
+ " int yy_more_len;",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_BISON_LVAL]],",
+ "[[",
+ " YYSTYPE * yylval_r;",
+ "]])",
+ "",
+ "m4_ifdef( [[<M4_YY_BISON_LLOC>]],",
+ "[[",
+ " YYLTYPE * yylloc_r;",
+ "]])",
+ "",
+ " }; /* end struct yyguts_t */",
+ "]])",
+ "",
+ "",
+ "%if-c-only",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "static int yy_init_globals M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "%endif",
+ "",
+ "%if-reentrant",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_BISON_LVAL]],",
+ " [[",
+ " /* This must go here because YYSTYPE and YYLTYPE are included",
+ " * from bison output in section 1.*/",
+ " # define yylval YY_G(yylval_r)",
+ " ]])",
+ "",
+ " m4_ifdef( [[<M4_YY_BISON_LLOC>]],",
+ " [[",
+ " # define yylloc YY_G(yylloc_r)",
+ " ]])",
+ "]])",
+ "",
+ "int yylex_init M4_YY_PARAMS(yyscan_t* scanner);",
+ "",
+ "int yylex_init_extra M4_YY_PARAMS( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);",
+ "",
+ "%endif",
+ "",
+ "%endif End reentrant structures and macros.",
+ "",
+ "/* Accessor methods to globals.",
+ " These are made visible to non-reentrant scanners for convenience. */",
+ "",
+ "m4_ifdef( [[M4_YY_NO_DESTROY]],,",
+ "[[",
+ "int yylex_destroy M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_DEBUG]],,",
+ "[[",
+ "int yyget_debug M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_DEBUG]],,",
+ "[[",
+ "void yyset_debug M4_YY_PARAMS( int debug_flag M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_EXTRA]],,",
+ "[[",
+ "YY_EXTRA_TYPE yyget_extra M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_EXTRA]],,",
+ "[[",
+ "void yyset_extra M4_YY_PARAMS( YY_EXTRA_TYPE user_defined M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_IN]],,",
+ "[[",
+ "FILE *yyget_in M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_IN]],,",
+ "[[",
+ "void yyset_in M4_YY_PARAMS( FILE * in_str M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_OUT]],,",
+ "[[",
+ "FILE *yyget_out M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_OUT]],,",
+ "[[",
+ "void yyset_out M4_YY_PARAMS( FILE * out_str M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_LENG]],,",
+ "[[",
+ "yy_size_t yyget_leng M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_TEXT]],,",
+ "[[",
+ "char *yyget_text M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_LINENO]],,",
+ "[[",
+ "int yyget_lineno M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_LINENO]],,",
+ "[[",
+ "void yyset_lineno M4_YY_PARAMS( int line_number M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_REENTRANT]],",
+ "[[",
+ "m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,",
+ "[[",
+ "int yyget_column M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_REENTRANT]],",
+ "[[",
+ "m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,",
+ "[[",
+ "void yyset_column M4_YY_PARAMS( int column_no M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "]])",
+ "",
+ "%if-bison-bridge",
+ "m4_ifdef( [[M4_YY_NO_GET_LVAL]],,",
+ "[[",
+ "YYSTYPE * yyget_lval M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "]])",
+ "",
+ "void yyset_lval M4_YY_PARAMS( YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG );",
+ "",
+ "m4_ifdef( [[<M4_YY_BISON_LLOC>]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_NO_GET_LLOC]],,",
+ " [[",
+ " YYLTYPE *yyget_lloc M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ " ]])",
+ "",
+ " m4_ifdef( [[M4_YY_NO_SET_LLOC]],,",
+ " [[",
+ " void yyset_lloc M4_YY_PARAMS( YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG );",
+ " ]])",
+ "]])",
+ "%endif",
+ "",
+ "/* Macros after this point can all be overridden by user definitions in",
+ " * section 1.",
+ " */",
+ "",
+ "#ifndef YY_SKIP_YYWRAP",
+ "#ifdef __cplusplus",
+ "extern \"C\" int yywrap M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "#else",
+ "extern int yywrap M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "#endif",
+ "#endif",
+ "",
+ "%not-for-header",
+ " m4_ifdef( [[M4_YY_NO_UNPUT]],,",
+ " [[",
+ " static void yyunput M4_YY_PARAMS( int c, char *buf_ptr M4_YY_PROTO_LAST_ARG);",
+ " ]])",
+ "%ok-for-header",
+ "%endif",
+ "",
+ "#ifndef yytext_ptr",
+ "static void yy_flex_strncpy M4_YY_PARAMS( char *, yyconst char *, int M4_YY_PROTO_LAST_ARG);",
+ "#endif",
+ "",
+ "#ifdef YY_NEED_STRLEN",
+ "static int yy_flex_strlen M4_YY_PARAMS( yyconst char * M4_YY_PROTO_LAST_ARG);",
+ "#endif",
+ "",
+ "#ifndef YY_NO_INPUT",
+ "%if-c-only Standard (non-C++) definition",
+ "%not-for-header",
+ "#ifdef __cplusplus",
+ "static int yyinput M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "#else",
+ "static int input M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ "#endif",
+ "%ok-for-header",
+ "%endif",
+ "#endif",
+ "",
+ "",
+ "%if-c-only",
+ "%# TODO: This is messy.",
+ "m4_ifdef( [[M4_YY_STACK_USED]],",
+ "[[",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_REENTRANT]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ " [[",
+ " static int yy_start_stack_ptr = 0;",
+ " static int yy_start_stack_depth = 0;",
+ " static int *yy_start_stack = NULL;",
+ " ]])",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,",
+ " [[",
+ " static void yy_push_state M4_YY_PARAMS( int new_state M4_YY_PROTO_LAST_ARG);",
+ " ]])",
+ " m4_ifdef( [[M4_YY_NO_POP_STATE]],,",
+ " [[",
+ " static void yy_pop_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ " ]])",
+ " m4_ifdef( [[M4_YY_NO_TOP_STATE]],,",
+ " [[",
+ " static int yy_top_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
+ " ]])",
+ "]])",
+ "",
+ "]],",
+ "[[",
+ "m4_define( [[M4_YY_NO_PUSH_STATE]])",
+ "m4_define( [[M4_YY_NO_POP_STATE]])",
+ "m4_define( [[M4_YY_NO_TOP_STATE]])",
+ "]])",
+ "%endif",
+ "",
+ "/* Amount of stuff to slurp up with each read. */",
+ "#ifndef YY_READ_BUF_SIZE",
+ "#define YY_READ_BUF_SIZE 8192",
+ "#endif",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Copy whatever the last rule matched to the standard output. */",
+ "#ifndef ECHO",
+ "%if-c-only Standard (non-C++) definition",
+ "/* This used to be an fputs(), but since the string might contain NUL's,",
+ " * we now use fwrite().",
+ " */",
+ "#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)",
+ "%endif",
+ "%if-c++-only C++ definition",
+ "#define ECHO LexerOutput( yytext, yyleng )",
+ "%endif",
+ "#endif",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Gets input and stuffs it into \"buf\". number of characters read, or YY_NULL,",
+ " * is returned in \"result\".",
+ " */",
+ "#ifndef YY_INPUT",
+ "#define YY_INPUT(buf,result,max_size) \\",
+ "%% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \\",
+ "\\",
+ "%if-c++-only C++ definition \\",
+ " if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \\",
+ " YY_FATAL_ERROR( \"input in flex scanner failed\" );",
+ "%endif",
+ "",
+ "#endif",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* No semi-colon after return; correct usage is to write \"yyterminate();\" -",
+ " * we don't want an extra ';' after the \"return\" because that will cause",
+ " * some compilers to complain about unreachable statements.",
+ " */",
+ "#ifndef yyterminate",
+ "#define yyterminate() return YY_NULL",
+ "#endif",
+ "]])",
+ "",
+ "/* Number of entries by which start-condition stack grows. */",
+ "#ifndef YY_START_STACK_INCR",
+ "#define YY_START_STACK_INCR 25",
+ "#endif",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Report a fatal error. */",
+ "#ifndef YY_FATAL_ERROR",
+ "%if-c-only",
+ "#define YY_FATAL_ERROR(msg) yy_fatal_error( msg M4_YY_CALL_LAST_ARG)",
+ "%endif",
+ "%if-c++-only",
+ "#define YY_FATAL_ERROR(msg) LexerError( msg )",
+ "%endif",
+ "#endif",
+ "]])",
+ "",
+ "%if-tables-serialization structures and prototypes",
+ "#ifdef FLEX_SCANNER",
+ "/*",
+ "dnl tables_shared.h - tables serialization header",
+ "dnl",
+ "dnl Copyright (c) 1990 The Regents of the University of California.",
+ "dnl All rights reserved.",
+ "dnl",
+ "dnl This code is derived from software contributed to Berkeley by",
+ "dnl Vern Paxson.",
+ "dnl",
+ "dnl The United States Government has rights in this work pursuant",
+ "dnl to contract no. DE-AC03-76SF00098 between the United States",
+ "dnl Department of Energy and the University of California.",
+ "dnl",
+ "dnl This file is part of flex.",
+ "dnl",
+ "dnl Redistribution and use in source and binary forms, with or without",
+ "dnl modification, are permitted provided that the following conditions",
+ "dnl are met:",
+ "dnl",
+ "dnl 1. Redistributions of source code must retain the above copyright",
+ "dnl notice, this list of conditions and the following disclaimer.",
+ "dnl 2. Redistributions in binary form must reproduce the above copyright",
+ "dnl notice, this list of conditions and the following disclaimer in the",
+ "dnl documentation and/or other materials provided with the distribution.",
+ "dnl",
+ "dnl Neither the name of the University nor the names of its contributors",
+ "dnl may be used to endorse or promote products derived from this software",
+ "dnl without specific prior written permission.",
+ "dnl",
+ "dnl THIS SOFTWARE IS PROVIDED `AS IS' AND WITHOUT ANY EXPRESS OR",
+ "dnl IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED",
+ "dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR",
+ "dnl PURPOSE.",
+ " ",
+ "dnl",
+ "dnl This file is meant to be included in both the skeleton and the actual",
+ "dnl flex code (hence the name \"_shared\").",
+ "*/",
+ "#ifndef yyskel_static",
+ "#define yyskel_static static",
+ "#endif",
+ "#else",
+ "#ifndef yyskel_static",
+ "#define yyskel_static",
+ "#endif",
+ "#endif",
+ "",
+ "/* Structures and prototypes for serializing flex tables. The",
+ " * binary format is documented in the manual.",
+ " *",
+ " * Design considerations:",
+ " *",
+ " * - The format allows many tables per file.",
+ " * - The tables can be streamed.",
+ " * - All data is stored in network byte order.",
+ " * - We do not hinder future unicode support.",
+ " * - We can lookup tables by name.",
+ " */",
+ "",
+ "/** Magic number for serialized format. */",
+ "#ifndef YYTBL_MAGIC",
+ "#define YYTBL_MAGIC 0xF13C57B1",
+ "#endif",
+ "",
+ "/** Calculate (0-7) = number bytes needed to pad n to next 64-bit boundary. */",
+ "#ifndef yypad64",
+ "#define yypad64(n) ((8-((n)%8))%8)",
+ "#endif",
+ "",
+ "",
+ "#ifndef YYTABLES_TYPES",
+ "#define YYTABLES_TYPES",
+ "/** Possible values for td_id field. Each one corresponds to a",
+ " * scanner table of the same name.",
+ " */",
+ "enum yytbl_id {",
+ " YYTD_ID_ACCEPT = 0x01, /**< 1-dim ints */",
+ " YYTD_ID_BASE = 0x02, /**< 1-dim ints */",
+ " YYTD_ID_CHK = 0x03, /**< 1-dim ints */",
+ " YYTD_ID_DEF = 0x04, /**< 1-dim ints */",
+ " YYTD_ID_EC = 0x05, /**< 1-dim ints */",
+ " YYTD_ID_META = 0x06, /**< 1-dim ints */",
+ " YYTD_ID_NUL_TRANS = 0x07, /**< 1-dim ints, maybe indices */",
+ " YYTD_ID_NXT = 0x08, /**< may be 2 dimensional ints */",
+ " YYTD_ID_RULE_CAN_MATCH_EOL = 0x09, /**< 1-dim ints */",
+ " YYTD_ID_START_STATE_LIST = 0x0A, /**< 1-dim indices into trans tbl */",
+ " YYTD_ID_TRANSITION = 0x0B, /**< structs */",
+ " YYTD_ID_ACCLIST = 0x0C /**< 1-dim ints */",
+ "};",
+ "",
+ "/** bit flags for t_flags field of struct yytbl_data */",
+ "enum yytbl_flags {",
+ " /* These first three are mutually exclusive */",
+ " YYTD_DATA8 = 0x01, /**< data is an array of type flex_int8_t */",
+ " YYTD_DATA16 = 0x02, /**< data is an array of type flex_int16_t */",
+ " YYTD_DATA32 = 0x04, /**< data is an array of type flex_int32_t */",
+ "",
+ " /* These two are mutually exclusive. */",
+ " YYTD_PTRANS = 0x08, /**< data is a list of indexes of entries",
+ " into the expanded yy_transition",
+ " array. See notes in manual. */",
+ " YYTD_STRUCT = 0x10 /**< data consists of yy_trans_info structs */",
+ "};",
+ "",
+ "/* The serialized tables header. */",
+ "struct yytbl_hdr {",
+ " flex_uint32_t th_magic; /**< Must be 0xF13C57B1 (comes from \"Flex Table\") */",
+ " flex_uint32_t th_hsize; /**< Size of this header in bytes. */",
+ " flex_uint32_t th_ssize; /**< Size of this dataset, in bytes, including header. */",
+ " flex_uint16_t th_flags; /**< Currently unused, must be 0 */",
+ " char *th_version; /**< Flex version string. NUL terminated. */",
+ " char *th_name; /**< The name of this table set. NUL terminated. */",
+ "};",
+ "",
+ "/** A single serialized table */",
+ "struct yytbl_data {",
+ " flex_uint16_t td_id; /**< enum yytbl_id table identifier */",
+ " flex_uint16_t td_flags; /**< how to interpret this data */",
+ " flex_uint32_t td_hilen; /**< num elements in highest dimension array */",
+ " flex_uint32_t td_lolen; /**< num elements in lowest dimension array */",
+ " void *td_data; /**< table data */",
+ "};",
+ "#endif",
+ "",
+ "/** Extract corresponding data size_t from td_flags */",
+ "#ifndef YYTDFLAGS2BYTES",
+ "#define YYTDFLAGS2BYTES(td_flags)\\",
+ " (((td_flags) & YYTD_DATA8)\\",
+ " ? sizeof(flex_int8_t)\\",
+ " :(((td_flags) & YYTD_DATA16)\\",
+ " ? sizeof(flex_int16_t)\\",
+ " :sizeof(flex_int32_t)))",
+ "#endif",
+ "",
+ "#ifdef FLEX_SCANNER",
+ "%not-for-header",
+ "#endif",
+ "yyskel_static flex_int32_t yytbl_calc_total_len (const struct yytbl_data *tbl);",
+ "#ifdef FLEX_SCANNER",
+ "%ok-for-header",
+ "#endif",
+ "",
+ "/* vim:set noexpandtab cindent tabstop=8 softtabstop=0 shiftwidth=8 textwidth=0: */",
+ "",
+ "",
+ "/* Load the DFA tables from the given stream. */",
+ "int yytables_fload M4_YY_PARAMS(FILE * fp M4_YY_PROTO_LAST_ARG);",
+ "",
+ "/* Unload the tables from memory. */",
+ "int yytables_destroy M4_YY_PARAMS(M4_YY_PROTO_ONLY_ARG);",
+ "%not-for-header",
+ "",
+ "/** Describes a mapping from a serialized table id to its deserialized state in",
+ " * this scanner. This is the bridge between our \"generic\" deserialization code",
+ " * and the specifics of this scanner. ",
+ " */",
+ "struct yytbl_dmap {",
+ " enum yytbl_id dm_id;/**< table identifier */",
+ " void **dm_arr; /**< address of pointer to store the deserialized table. */",
+ " size_t dm_sz; /**< local sizeof() each element in table. */",
+ "};",
+ "",
+ "/** A {0,0,0}-terminated list of structs, forming the map */",
+ "static struct yytbl_dmap yydmap[] =",
+ "{",
+ "%tables-yydmap generated elements",
+ " {0,0,0}",
+ "};",
+ "",
+ "/** A tables-reader object to maintain some state in the read. */",
+ "struct yytbl_reader {",
+ " FILE * fp; /**< input stream */",
+ " flex_uint32_t bread; /**< bytes read since beginning of current tableset */",
+ "};",
+ "",
+ "%endif",
+ "/* end tables serialization structures and prototypes */",
+ "",
+ "%ok-for-header",
+ "",
+ "/* Default declaration of generated scanner - a define so the user can",
+ " * easily add parameters.",
+ " */",
+ "#ifndef YY_DECL",
+ "#define YY_DECL_IS_OURS 1",
+ "%if-c-only Standard (non-C++) definition",
+ "",
+ "",
+ "m4_define( [[M4_YY_LEX_PROTO]], [[M4_YY_PARAMS(M4_YY_PROTO_ONLY_ARG)]])",
+ "m4_define( [[M4_YY_LEX_DECLARATION]], [[YYFARGS0(void)]])",
+ "",
+ "m4_ifdef( [[M4_YY_BISON_LVAL]],",
+ "[[",
+ " m4_dnl The bison pure parser is used. Redefine yylex to",
+ " m4_dnl accept the lval parameter.",
+ "",
+ " m4_define( [[M4_YY_LEX_PROTO]], [[\\]]",
+ " [[M4_YY_PARAMS(YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG)]])",
+ " m4_define( [[M4_YY_LEX_DECLARATION]], [[\\]]",
+ " [[YYFARGS1(YYSTYPE *,yylval_param)]])",
+ "]])",
+ "",
+ "m4_ifdef( [[<M4_YY_BISON_LLOC>]],",
+ "[[",
+ " m4_dnl Locations are used. yylex should also accept the ylloc parameter.",
+ "",
+ " m4_define( [[M4_YY_LEX_PROTO]], [[\\]]",
+ " [[M4_YY_PARAMS(YYSTYPE * yylval_param, YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG)]])",
+ " m4_define( [[M4_YY_LEX_DECLARATION]], [[\\]]",
+ " [[YYFARGS2(YYSTYPE *,yylval_param, YYLTYPE *,yylloc_param)]])",
+ "]])",
+ "",
+ "extern int yylex M4_YY_LEX_PROTO;",
+ "",
+ "#define YY_DECL int yylex M4_YY_LEX_DECLARATION",
+ "%endif",
+ "%if-c++-only C++ definition",
+ "#define YY_DECL int yyFlexLexer::yylex()",
+ "%endif",
+ "#endif /* !YY_DECL */",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Code executed at the beginning of each rule, after yytext and yyleng",
+ " * have been set up.",
+ " */",
+ "#ifndef YY_USER_ACTION",
+ "#define YY_USER_ACTION",
+ "#endif",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* Code executed at the end of each rule. */",
+ "#ifndef YY_BREAK",
+ "#define YY_BREAK break;",
+ "#endif",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "%% [6.0] YY_RULE_SETUP definition goes here",
+ "]])",
+ "",
+ "%not-for-header",
+ "/** The main scanner function which does all the work.",
+ " */",
+ "YY_DECL",
+ "{",
+ " yy_state_type yy_current_state;",
+ " char *yy_cp, *yy_bp;",
+ " int yy_act;",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_REENTRANT]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_BISON_LVAL]],",
+ " [[",
+ " YYSTYPE * yylval;",
+ " ]])",
+ " m4_ifdef( [[<M4_YY_BISON_LLOC>]],",
+ " [[",
+ " YYLTYPE * yylloc;",
+ " ]])",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_BISON_LVAL]],",
+ "[[",
+ " yylval = yylval_param;",
+ "]])",
+ "",
+ "m4_ifdef( [[<M4_YY_BISON_LLOC>]],",
+ "[[",
+ " yylloc = yylloc_param;",
+ "]])",
+ "",
+ " if ( !YY_G(yy_init) )",
+ " {",
+ " YY_G(yy_init) = 1;",
+ "",
+ "#ifdef YY_USER_INIT",
+ " YY_USER_INIT;",
+ "#endif",
+ "",
+ "m4_ifdef( [[M4_YY_USES_REJECT]],",
+ "[[",
+ " /* Create the reject buffer large enough to save one state per allowed character. */",
+ " if ( ! YY_G(yy_state_buf) )",
+ " YY_G(yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE M4_YY_CALL_LAST_ARG);",
+ " if ( ! YY_G(yy_state_buf) )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yylex()\" );",
+ "]])",
+ "",
+ " if ( ! YY_G(yy_start) )",
+ " YY_G(yy_start) = 1; /* first start state */",
+ "",
+ " if ( ! yyin )",
+ "%if-c-only",
+ " yyin = stdin;",
+ "%endif",
+ "%if-c++-only",
+ " yyin = & std::cin;",
+ "%endif",
+ "",
+ " if ( ! yyout )",
+ "%if-c-only",
+ " yyout = stdout;",
+ "%endif",
+ "%if-c++-only",
+ " yyout = & std::cout;",
+ "%endif",
+ "",
+ " if ( ! YY_CURRENT_BUFFER ) {",
+ " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);",
+ " YY_CURRENT_BUFFER_LVALUE =",
+ " yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);",
+ " }",
+ "",
+ " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );",
+ " }",
+ "",
+ " {",
+ "%% [7.0] user's declarations go here",
+ "",
+ " while ( 1 ) /* loops until end-of-file is reached */",
+ " {",
+ "%% [8.0] yymore()-related code goes here",
+ " yy_cp = YY_G(yy_c_buf_p);",
+ "",
+ " /* Support of yytext. */",
+ " *yy_cp = YY_G(yy_hold_char);",
+ "",
+ " /* yy_bp points to the position in yy_ch_buf of the start of",
+ " * the current run.",
+ " */",
+ " yy_bp = yy_cp;",
+ "",
+ "%% [9.0] code to set up and find next match goes here",
+ "",
+ "yy_find_action:",
+ "%% [10.0] code to find the action number goes here",
+ "",
+ " YY_DO_BEFORE_ACTION;",
+ "",
+ "%% [11.0] code for yylineno update goes here",
+ "",
+ "do_action: /* This label is used only to access EOF actions. */",
+ "",
+ "%% [12.0] debug code goes here",
+ "",
+ " switch ( yy_act )",
+ " { /* beginning of action switch */",
+ "%% [13.0] actions go here",
+ "",
+ " case YY_END_OF_BUFFER:",
+ " {",
+ " /* Amount of text matched not including the EOB char. */",
+ " int yy_amount_of_matched_text = (int) (yy_cp - YY_G(yytext_ptr)) - 1;",
+ "",
+ " /* Undo the effects of YY_DO_BEFORE_ACTION. */",
+ " *yy_cp = YY_G(yy_hold_char);",
+ " YY_RESTORE_YY_MORE_OFFSET",
+ "",
+ " if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )",
+ " {",
+ " /* We're scanning a new file or input source. It's",
+ " * possible that this happened because the user",
+ " * just pointed yyin at a new source and called",
+ " * yylex(). If so, then we have to assure",
+ " * consistency between YY_CURRENT_BUFFER and our",
+ " * globals. Here is the right place to do so, because",
+ " * this is the first action (other than possibly a",
+ " * back-up) that will match for the new input source.",
+ " */",
+ " YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;",
+ " YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;",
+ " YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;",
+ " }",
+ "",
+ " /* Note that here we test for yy_c_buf_p \"<=\" to the position",
+ " * of the first EOB in the buffer, since yy_c_buf_p will",
+ " * already have been incremented past the NUL character",
+ " * (since all states make transitions on EOB to the",
+ " * end-of-buffer state). Contrast this with the test",
+ " * in input().",
+ " */",
+ " if ( YY_G(yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )",
+ " { /* This was really a NUL. */",
+ " yy_state_type yy_next_state;",
+ "",
+ " YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + yy_amount_of_matched_text;",
+ "",
+ " yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );",
+ "",
+ " /* Okay, we're now positioned to make the NUL",
+ " * transition. We couldn't have",
+ " * yy_get_previous_state() go ahead and do it",
+ " * for us because it doesn't know how to deal",
+ " * with the possibility of jamming (and we don't",
+ " * want to build jamming into it because then it",
+ " * will run more slowly).",
+ " */",
+ "",
+ " yy_next_state = yy_try_NUL_trans( yy_current_state M4_YY_CALL_LAST_ARG);",
+ "",
+ " yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;",
+ "",
+ " if ( yy_next_state )",
+ " {",
+ " /* Consume the NUL. */",
+ " yy_cp = ++YY_G(yy_c_buf_p);",
+ " yy_current_state = yy_next_state;",
+ " goto yy_match;",
+ " }",
+ "",
+ " else",
+ " {",
+ "%% [14.0] code to do back-up for compressed tables and set up yy_cp goes here",
+ " goto yy_find_action;",
+ " }",
+ " }",
+ "",
+ " else switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )",
+ " {",
+ " case EOB_ACT_END_OF_FILE:",
+ " {",
+ " YY_G(yy_did_buffer_switch_on_eof) = 0;",
+ "",
+ " if ( yywrap( M4_YY_CALL_ONLY_ARG ) )",
+ " {",
+ " /* Note: because we've taken care in",
+ " * yy_get_next_buffer() to have set up",
+ " * yytext, we can now set up",
+ " * yy_c_buf_p so that if some total",
+ " * hoser (like flex itself) wants to",
+ " * call the scanner after we return the",
+ " * YY_NULL, it'll still work - another",
+ " * YY_NULL will get returned.",
+ " */",
+ " YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + YY_MORE_ADJ;",
+ "",
+ " yy_act = YY_STATE_EOF(YY_START);",
+ " goto do_action;",
+ " }",
+ "",
+ " else",
+ " {",
+ " if ( ! YY_G(yy_did_buffer_switch_on_eof) )",
+ " YY_NEW_FILE;",
+ " }",
+ " break;",
+ " }",
+ "",
+ " case EOB_ACT_CONTINUE_SCAN:",
+ " YY_G(yy_c_buf_p) =",
+ " YY_G(yytext_ptr) + yy_amount_of_matched_text;",
+ "",
+ " yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );",
+ "",
+ " yy_cp = YY_G(yy_c_buf_p);",
+ " yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;",
+ " goto yy_match;",
+ "",
+ " case EOB_ACT_LAST_MATCH:",
+ " YY_G(yy_c_buf_p) =",
+ " &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)];",
+ "",
+ " yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );",
+ "",
+ " yy_cp = YY_G(yy_c_buf_p);",
+ " yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;",
+ " goto yy_find_action;",
+ " }",
+ " break;",
+ " }",
+ "",
+ " default:",
+ " YY_FATAL_ERROR(",
+ " \"fatal flex scanner internal error--no action found\" );",
+ " } /* end of action switch */",
+ " } /* end of scanning one token */",
+ " } /* end of user's declarations */",
+ "} /* end of yylex */",
+ "%ok-for-header",
+ "",
+ "%if-c++-only",
+ "%not-for-header",
+ "/* The contents of this function are C++ specific, so the YY_G macro is not used.",
+ " */",
+ "yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout )",
+ "{",
+ " yyin = arg_yyin;",
+ " yyout = arg_yyout;",
+ " yy_c_buf_p = 0;",
+ " yy_init = 0;",
+ " yy_start = 0;",
+ " yy_flex_debug = 0;",
+ " yylineno = 1; // this will only get updated if %option yylineno",
+ "",
+ " yy_did_buffer_switch_on_eof = 0;",
+ "",
+ " yy_looking_for_trail_begin = 0;",
+ " yy_more_flag = 0;",
+ " yy_more_len = 0;",
+ " yy_more_offset = yy_prev_more_offset = 0;",
+ "",
+ " yy_start_stack_ptr = yy_start_stack_depth = 0;",
+ " yy_start_stack = NULL;",
+ "",
+ " yy_buffer_stack = 0;",
+ " yy_buffer_stack_top = 0;",
+ " yy_buffer_stack_max = 0;",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_USES_REJECT]],",
+ "[[",
+ " yy_state_buf = new yy_state_type[YY_STATE_BUF_SIZE];",
+ "]],",
+ "[[",
+ " yy_state_buf = 0;",
+ "]])",
+ "}",
+ "",
+ "/* The contents of this function are C++ specific, so the YY_G macro is not used.",
+ " */",
+ "yyFlexLexer::~yyFlexLexer()",
+ "{",
+ " delete [] yy_state_buf;",
+ " yyfree( yy_start_stack M4_YY_CALL_LAST_ARG );",
+ " yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);",
+ " yyfree( yy_buffer_stack M4_YY_CALL_LAST_ARG );",
+ "}",
+ "",
+ "/* The contents of this function are C++ specific, so the YY_G macro is not used.",
+ " */",
+ "void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )",
+ "{",
+ " if ( new_in )",
+ " {",
+ " yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);",
+ " yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE M4_YY_CALL_LAST_ARG) M4_YY_CALL_LAST_ARG);",
+ " }",
+ "",
+ " if ( new_out )",
+ " yyout = new_out;",
+ "}",
+ "",
+ "#ifdef YY_INTERACTIVE",
+ "int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )",
+ "#else",
+ "int yyFlexLexer::LexerInput( char* buf, int max_size )",
+ "#endif",
+ "{",
+ " if ( yyin->eof() || yyin->fail() )",
+ " return 0;",
+ "",
+ "#ifdef YY_INTERACTIVE",
+ " yyin->get( buf[0] );",
+ "",
+ " if ( yyin->eof() )",
+ " return 0;",
+ "",
+ " if ( yyin->bad() )",
+ " return -1;",
+ "",
+ " return 1;",
+ "",
+ "#else",
+ " (void) yyin->read( buf, max_size );",
+ "",
+ " if ( yyin->bad() )",
+ " return -1;",
+ " else",
+ " return yyin->gcount();",
+ "#endif",
+ "}",
+ "",
+ "void yyFlexLexer::LexerOutput( const char* buf, int size )",
+ "{",
+ " (void) yyout->write( buf, size );",
+ "}",
+ "%ok-for-header",
+ "%endif",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/* yy_get_next_buffer - try to read in a new buffer",
+ " *",
+ " * Returns a code representing an action:",
+ " * EOB_ACT_LAST_MATCH -",
+ " * EOB_ACT_CONTINUE_SCAN - continue scanning from current position",
+ " * EOB_ACT_END_OF_FILE - end of file",
+ " */",
+ "%if-c-only",
+ "static int yy_get_next_buffer YYFARGS0(void)",
+ "%endif",
+ "%if-c++-only",
+ "int yyFlexLexer::yy_get_next_buffer()",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;",
+ " char *source = YY_G(yytext_ptr);",
+ " int number_to_move, i;",
+ " int ret_val;",
+ "",
+ " if ( YY_G(yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] )",
+ " YY_FATAL_ERROR(",
+ " \"fatal flex scanner internal error--end of buffer missed\" );",
+ "",
+ " if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )",
+ " { /* Don't try to fill the buffer, so this is an EOF. */",
+ " if ( YY_G(yy_c_buf_p) - YY_G(yytext_ptr) - YY_MORE_ADJ == 1 )",
+ " {",
+ " /* We matched a single character, the EOB, so",
+ " * treat this as a final EOF.",
+ " */",
+ " return EOB_ACT_END_OF_FILE;",
+ " }",
+ "",
+ " else",
+ " {",
+ " /* We matched some text prior to the EOB, first",
+ " * process it.",
+ " */",
+ " return EOB_ACT_LAST_MATCH;",
+ " }",
+ " }",
+ "",
+ " /* Try to read more data. */",
+ "",
+ " /* First move last chars to start of buffer. */",
+ " number_to_move = (int) (YY_G(yy_c_buf_p) - YY_G(yytext_ptr)) - 1;",
+ "",
+ " for ( i = 0; i < number_to_move; ++i )",
+ " *(dest++) = *(source++);",
+ "",
+ " if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )",
+ " /* don't do the read, it's not guaranteed to return an EOF,",
+ " * just force an EOF",
+ " */",
+ " YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars) = 0;",
+ "",
+ " else",
+ " {",
+ " yy_size_t num_to_read =",
+ " YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;",
+ "",
+ " while ( num_to_read <= 0 )",
+ " { /* Not enough room in the buffer - grow it. */",
+ "m4_ifdef( [[M4_YY_USES_REJECT]],",
+ "[[",
+ " YY_FATAL_ERROR(",
+ "\"input buffer overflow, can't enlarge buffer because scanner uses REJECT\" );",
+ "]],",
+ "[[",
+ " /* just a shorter name for the current buffer */",
+ " YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;",
+ "",
+ " int yy_c_buf_p_offset =",
+ " (int) (YY_G(yy_c_buf_p) - b->yy_ch_buf);",
+ "",
+ " if ( b->yy_is_our_buffer )",
+ " {",
+ " yy_size_t new_size = b->yy_buf_size * 2;",
+ "",
+ " if ( new_size <= 0 )",
+ " b->yy_buf_size += b->yy_buf_size / 8;",
+ " else",
+ " b->yy_buf_size *= 2;",
+ "",
+ " b->yy_ch_buf = (char *)",
+ " /* Include room in for 2 EOB chars. */",
+ " yyrealloc( (void *) b->yy_ch_buf,",
+ " b->yy_buf_size + 2 M4_YY_CALL_LAST_ARG );",
+ " }",
+ " else",
+ " /* Can't grow it, we don't own it. */",
+ " b->yy_ch_buf = 0;",
+ "",
+ " if ( ! b->yy_ch_buf )",
+ " YY_FATAL_ERROR(",
+ " \"fatal error - scanner input buffer overflow\" );",
+ "",
+ " YY_G(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];",
+ "",
+ " num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -",
+ " number_to_move - 1;",
+ "]])",
+ " }",
+ "",
+ " if ( num_to_read > YY_READ_BUF_SIZE )",
+ " num_to_read = YY_READ_BUF_SIZE;",
+ "",
+ " /* Read in more data. */",
+ " YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),",
+ " YY_G(yy_n_chars), num_to_read );",
+ "",
+ " YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);",
+ " }",
+ "",
+ " if ( YY_G(yy_n_chars) == 0 )",
+ " {",
+ " if ( number_to_move == YY_MORE_ADJ )",
+ " {",
+ " ret_val = EOB_ACT_END_OF_FILE;",
+ " yyrestart( yyin M4_YY_CALL_LAST_ARG);",
+ " }",
+ "",
+ " else",
+ " {",
+ " ret_val = EOB_ACT_LAST_MATCH;",
+ " YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =",
+ " YY_BUFFER_EOF_PENDING;",
+ " }",
+ " }",
+ "",
+ " else",
+ " ret_val = EOB_ACT_CONTINUE_SCAN;",
+ "",
+ " if ((yy_size_t) (YY_G(yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {",
+ " /* Extend the array by 50%, plus the number we really need. */",
+ " yy_size_t new_size = YY_G(yy_n_chars) + number_to_move + (YY_G(yy_n_chars) >> 1);",
+ " YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(",
+ " (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, new_size M4_YY_CALL_LAST_ARG );",
+ " if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yy_get_next_buffer()\" );",
+ " }",
+ "",
+ " YY_G(yy_n_chars) += number_to_move;",
+ " YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;",
+ " YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;",
+ "",
+ " YY_G(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];",
+ "",
+ " return ret_val;",
+ "}",
+ "]])",
+ "",
+ "/* yy_get_previous_state - get the state just before the EOB char was reached */",
+ "",
+ "%if-c-only",
+ "%not-for-header",
+ " static yy_state_type yy_get_previous_state YYFARGS0(void)",
+ "%endif",
+ "%if-c++-only",
+ " yy_state_type yyFlexLexer::yy_get_previous_state()",
+ "%endif",
+ "{",
+ " yy_state_type yy_current_state;",
+ " char *yy_cp;",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ "%% [15.0] code to get the start state into yy_current_state goes here",
+ "",
+ " for ( yy_cp = YY_G(yytext_ptr) + YY_MORE_ADJ; yy_cp < YY_G(yy_c_buf_p); ++yy_cp )",
+ " {",
+ "%% [16.0] code to find the next state goes here",
+ " }",
+ "",
+ " return yy_current_state;",
+ "}",
+ "",
+ "",
+ "/* yy_try_NUL_trans - try to make a transition on the NUL character",
+ " *",
+ " * synopsis",
+ " * next_state = yy_try_NUL_trans( current_state );",
+ " */",
+ "%if-c-only",
+ " static yy_state_type yy_try_NUL_trans YYFARGS1( yy_state_type, yy_current_state)",
+ "%endif",
+ "%if-c++-only",
+ " yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )",
+ "%endif",
+ "{",
+ " int yy_is_jam;",
+ " M4_YY_DECL_GUTS_VAR(); /* This var may be unused depending upon options. */",
+ "%% [17.0] code to find the next state, and perhaps do backing up, goes here",
+ "",
+ " M4_YY_NOOP_GUTS_VAR();",
+ " return yy_is_jam ? 0 : yy_current_state;",
+ "}",
+ "",
+ "",
+ "%if-c-only",
+ "m4_ifdef( [[M4_YY_NO_UNPUT]],,",
+ "[[",
+ " static void yyunput YYFARGS2( int,c, char *,yy_bp)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yyunput( int c, char* yy_bp)",
+ "%endif",
+ "{",
+ " char *yy_cp;",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " yy_cp = YY_G(yy_c_buf_p);",
+ "",
+ " /* undo effects of setting up yytext */",
+ " *yy_cp = YY_G(yy_hold_char);",
+ "",
+ " if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )",
+ " { /* need to shift things up to make room */",
+ " /* +2 for EOB chars. */",
+ " yy_size_t number_to_move = YY_G(yy_n_chars) + 2;",
+ " char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[",
+ " YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];",
+ " char *source =",
+ " &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];",
+ "",
+ " while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )",
+ " *--dest = *--source;",
+ "",
+ " yy_cp += (int) (dest - source);",
+ " yy_bp += (int) (dest - source);",
+ " YY_CURRENT_BUFFER_LVALUE->yy_n_chars =",
+ " YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;",
+ "",
+ " if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )",
+ " YY_FATAL_ERROR( \"flex scanner push-back overflow\" );",
+ " }",
+ "",
+ " *--yy_cp = (char) c;",
+ "",
+ "%% [18.0] update yylineno here",
+ "m4_ifdef( [[M4_YY_USE_LINENO]],",
+ "[[",
+ " if ( c == '\\n' ){",
+ " --yylineno;",
+ " }",
+ "]])",
+ "",
+ " YY_G(yytext_ptr) = yy_bp;",
+ " YY_G(yy_hold_char) = *yy_cp;",
+ " YY_G(yy_c_buf_p) = yy_cp;",
+ "}",
+ "%if-c-only",
+ "]])",
+ "%endif",
+ "",
+ "%if-c-only",
+ "#ifndef YY_NO_INPUT",
+ "#ifdef __cplusplus",
+ " static int yyinput YYFARGS0(void)",
+ "#else",
+ " static int input YYFARGS0(void)",
+ "#endif",
+ "",
+ "%endif",
+ "%if-c++-only",
+ " int yyFlexLexer::yyinput()",
+ "%endif",
+ "{",
+ " int c;",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);",
+ "",
+ " if ( *YY_G(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )",
+ " {",
+ " /* yy_c_buf_p now points to the character we want to return.",
+ " * If this occurs *before* the EOB characters, then it's a",
+ " * valid NUL; if not, then we've hit the end of the buffer.",
+ " */",
+ " if ( YY_G(yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )",
+ " /* This was really a NUL. */",
+ " *YY_G(yy_c_buf_p) = '\\0';",
+ "",
+ " else",
+ " { /* need more input */",
+ " yy_size_t offset = YY_G(yy_c_buf_p) - YY_G(yytext_ptr);",
+ " ++YY_G(yy_c_buf_p);",
+ "",
+ " switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )",
+ " {",
+ " case EOB_ACT_LAST_MATCH:",
+ " /* This happens because yy_g_n_b()",
+ " * sees that we've accumulated a",
+ " * token and flags that we need to",
+ " * try matching the token before",
+ " * proceeding. But for input(),",
+ " * there's no matching to consider.",
+ " * So convert the EOB_ACT_LAST_MATCH",
+ " * to EOB_ACT_END_OF_FILE.",
+ " */",
+ "",
+ " /* Reset buffer status. */",
+ " yyrestart( yyin M4_YY_CALL_LAST_ARG);",
+ "",
+ " /*FALLTHROUGH*/",
+ "",
+ " case EOB_ACT_END_OF_FILE:",
+ " {",
+ " if ( yywrap( M4_YY_CALL_ONLY_ARG ) )",
+ " return EOF;",
+ "",
+ " if ( ! YY_G(yy_did_buffer_switch_on_eof) )",
+ " YY_NEW_FILE;",
+ "#ifdef __cplusplus",
+ " return yyinput(M4_YY_CALL_ONLY_ARG);",
+ "#else",
+ " return input(M4_YY_CALL_ONLY_ARG);",
+ "#endif",
+ " }",
+ "",
+ " case EOB_ACT_CONTINUE_SCAN:",
+ " YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + offset;",
+ " break;",
+ " }",
+ " }",
+ " }",
+ "",
+ " c = *(unsigned char *) YY_G(yy_c_buf_p); /* cast for 8-bit char's */",
+ " *YY_G(yy_c_buf_p) = '\\0'; /* preserve yytext */",
+ " YY_G(yy_hold_char) = *++YY_G(yy_c_buf_p);",
+ "",
+ "%% [19.0] update BOL and yylineno",
+ "",
+ " return c;",
+ "}",
+ "%if-c-only",
+ "#endif /* ifndef YY_NO_INPUT */",
+ "%endif",
+ "",
+ "/** Immediately switch to a different input stream.",
+ " * @param input_file A readable stream.",
+ " * M4_YY_DOC_PARAM",
+ " * @note This function does not reset the start condition to @c INITIAL .",
+ " */",
+ "%if-c-only",
+ " void yyrestart YYFARGS1( FILE *,input_file)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yyrestart( std::istream* input_file )",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " if ( ! YY_CURRENT_BUFFER ){",
+ " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);",
+ " YY_CURRENT_BUFFER_LVALUE =",
+ " yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);",
+ " }",
+ "",
+ " yy_init_buffer( YY_CURRENT_BUFFER, input_file M4_YY_CALL_LAST_ARG);",
+ " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );",
+ "}",
+ "",
+ "/** Switch to a different input buffer.",
+ " * @param new_buffer The new input buffer.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "%if-c-only",
+ " void yy_switch_to_buffer YYFARGS1( YY_BUFFER_STATE ,new_buffer)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " /* TODO. We should be able to replace this entire function body",
+ " * with",
+ " * yypop_buffer_state();",
+ " * yypush_buffer_state(new_buffer);",
+ " */",
+ " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);",
+ " if ( YY_CURRENT_BUFFER == new_buffer )",
+ " return;",
+ "",
+ " if ( YY_CURRENT_BUFFER )",
+ " {",
+ " /* Flush out information for old buffer. */",
+ " *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);",
+ " YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);",
+ " YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);",
+ " }",
+ "",
+ " YY_CURRENT_BUFFER_LVALUE = new_buffer;",
+ " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );",
+ "",
+ " /* We don't actually know whether we did this switch during",
+ " * EOF (yywrap()) processing, but the only time this flag",
+ " * is looked at is after yywrap() is called, so it's safe",
+ " * to go ahead and always set it.",
+ " */",
+ " YY_G(yy_did_buffer_switch_on_eof) = 1;",
+ "}",
+ "",
+ "",
+ "%if-c-only",
+ "static void yy_load_buffer_state YYFARGS0(void)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yy_load_buffer_state()",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;",
+ " YY_G(yytext_ptr) = YY_G(yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;",
+ " yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;",
+ " YY_G(yy_hold_char) = *YY_G(yy_c_buf_p);",
+ "}",
+ "",
+ "/** Allocate and initialize an input buffer state.",
+ " * @param file A readable stream.",
+ " * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.",
+ " * M4_YY_DOC_PARAM",
+ " * @return the allocated buffer state.",
+ " */",
+ "%if-c-only",
+ " YY_BUFFER_STATE yy_create_buffer YYFARGS2( FILE *,file, int ,size)",
+ "%endif",
+ "%if-c++-only",
+ " YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )",
+ "%endif",
+ "{",
+ " YY_BUFFER_STATE b;",
+ " m4_dnl M4_YY_DECL_GUTS_VAR();",
+ "",
+ " b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );",
+ " if ( ! b )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yy_create_buffer()\" );",
+ "",
+ " b->yy_buf_size = size;",
+ "",
+ " /* yy_ch_buf has to be 2 characters longer than the size given because",
+ " * we need to put in 2 end-of-buffer characters.",
+ " */",
+ " b->yy_ch_buf = (char *) yyalloc( b->yy_buf_size + 2 M4_YY_CALL_LAST_ARG );",
+ " if ( ! b->yy_ch_buf )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yy_create_buffer()\" );",
+ "",
+ " b->yy_is_our_buffer = 1;",
+ "",
+ " yy_init_buffer( b, file M4_YY_CALL_LAST_ARG);",
+ "",
+ " return b;",
+ "}",
+ "",
+ "/** Destroy the buffer.",
+ " * @param b a buffer created with yy_create_buffer()",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "%if-c-only",
+ " void yy_delete_buffer YYFARGS1( YY_BUFFER_STATE ,b)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " if ( ! b )",
+ " return;",
+ "",
+ " if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */",
+ " YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;",
+ "",
+ " if ( b->yy_is_our_buffer )",
+ " yyfree( (void *) b->yy_ch_buf M4_YY_CALL_LAST_ARG );",
+ "",
+ " yyfree( (void *) b M4_YY_CALL_LAST_ARG );",
+ "}",
+ "",
+ "",
+ "/* Initializes or reinitializes a buffer.",
+ " * This function is sometimes called more than once on the same buffer,",
+ " * such as during a yyrestart() or at EOF.",
+ " */",
+ "%if-c-only",
+ " static void yy_init_buffer YYFARGS2( YY_BUFFER_STATE ,b, FILE *,file)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file )",
+ "%endif",
+ "",
+ "{",
+ " int oerrno = errno;",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " yy_flush_buffer( b M4_YY_CALL_LAST_ARG);",
+ "",
+ " b->yy_input_file = file;",
+ " b->yy_fill_buffer = 1;",
+ "",
+ " /* If b is the current buffer, then yy_init_buffer was _probably_",
+ " * called from yyrestart() or through yy_get_next_buffer.",
+ " * In that case, we don't want to reset the lineno or column.",
+ " */",
+ " if (b != YY_CURRENT_BUFFER){",
+ " b->yy_bs_lineno = 1;",
+ " b->yy_bs_column = 0;",
+ " }",
+ "",
+ "%if-c-only",
+ "m4_ifdef( [[M4_YY_ALWAYS_INTERACTIVE]],",
+ "[[",
+ " b->yy_is_interactive = 1;",
+ "]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_NEVER_INTERACTIVE]],",
+ " [[",
+ " b->yy_is_interactive = 0;",
+ " ]],",
+ " [[",
+ " b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;",
+ " ]])",
+ "]])",
+ "%endif",
+ "%if-c++-only",
+ " b->yy_is_interactive = 0;",
+ "%endif",
+ " errno = oerrno;",
+ "}",
+ "",
+ "/** Discard all buffered characters. On the next scan, YY_INPUT will be called.",
+ " * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "%if-c-only",
+ " void yy_flush_buffer YYFARGS1( YY_BUFFER_STATE ,b)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " if ( ! b )",
+ " return;",
+ "",
+ " b->yy_n_chars = 0;",
+ "",
+ " /* We always need two end-of-buffer characters. The first causes",
+ " * a transition to the end-of-buffer state. The second causes",
+ " * a jam in that state.",
+ " */",
+ " b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;",
+ " b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;",
+ "",
+ " b->yy_buf_pos = &b->yy_ch_buf[0];",
+ "",
+ " b->yy_at_bol = 1;",
+ " b->yy_buffer_status = YY_BUFFER_NEW;",
+ "",
+ " if ( b == YY_CURRENT_BUFFER )",
+ " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );",
+ "}",
+ "",
+ "%if-c-or-c++",
+ "/** Pushes the new state onto the stack. The new state becomes",
+ " * the current state. This function will allocate the stack",
+ " * if necessary.",
+ " * @param new_buffer The new state.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "%if-c-only",
+ "void yypush_buffer_state YYFARGS1(YY_BUFFER_STATE,new_buffer)",
+ "%endif",
+ "%if-c++-only",
+ "void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " if (new_buffer == NULL)",
+ " return;",
+ "",
+ " yyensure_buffer_stack(M4_YY_CALL_ONLY_ARG);",
+ "",
+ " /* This block is copied from yy_switch_to_buffer. */",
+ " if ( YY_CURRENT_BUFFER )",
+ " {",
+ " /* Flush out information for old buffer. */",
+ " *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);",
+ " YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);",
+ " YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);",
+ " }",
+ "",
+ " /* Only push if top exists. Otherwise, replace top. */",
+ " if (YY_CURRENT_BUFFER)",
+ " YY_G(yy_buffer_stack_top)++;",
+ " YY_CURRENT_BUFFER_LVALUE = new_buffer;",
+ "",
+ " /* copied from yy_switch_to_buffer. */",
+ " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );",
+ " YY_G(yy_did_buffer_switch_on_eof) = 1;",
+ "}",
+ "%endif",
+ "",
+ "",
+ "%if-c-or-c++",
+ "/** Removes and deletes the top of the stack, if present.",
+ " * The next element becomes the new top.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "%if-c-only",
+ "void yypop_buffer_state YYFARGS0(void)",
+ "%endif",
+ "%if-c++-only",
+ "void yyFlexLexer::yypop_buffer_state (void)",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " if (!YY_CURRENT_BUFFER)",
+ " return;",
+ "",
+ " yy_delete_buffer(YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);",
+ " YY_CURRENT_BUFFER_LVALUE = NULL;",
+ " if (YY_G(yy_buffer_stack_top) > 0)",
+ " --YY_G(yy_buffer_stack_top);",
+ "",
+ " if (YY_CURRENT_BUFFER) {",
+ " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );",
+ " YY_G(yy_did_buffer_switch_on_eof) = 1;",
+ " }",
+ "}",
+ "%endif",
+ "",
+ "",
+ "%if-c-or-c++",
+ "/* Allocates the stack if it does not exist.",
+ " * Guarantees space for at least one push.",
+ " */",
+ "%if-c-only",
+ "static void yyensure_buffer_stack YYFARGS0(void)",
+ "%endif",
+ "%if-c++-only",
+ "void yyFlexLexer::yyensure_buffer_stack(void)",
+ "%endif",
+ "{",
+ " yy_size_t num_to_alloc;",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " if (!YY_G(yy_buffer_stack)) {",
+ "",
+ " /* First allocation is just for 2 elements, since we don't know if this",
+ " * scanner will even need a stack. We use 2 instead of 1 to avoid an",
+ " * immediate realloc on the next call.",
+ " */",
+ " num_to_alloc = 1;",
+ " YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc",
+ " (num_to_alloc * sizeof(struct yy_buffer_state*)",
+ " M4_YY_CALL_LAST_ARG);",
+ " if ( ! YY_G(yy_buffer_stack) )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yyensure_buffer_stack()\" );",
+ " ",
+ " ",
+ " memset(YY_G(yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));",
+ " ",
+ " YY_G(yy_buffer_stack_max) = num_to_alloc;",
+ " YY_G(yy_buffer_stack_top) = 0;",
+ " return;",
+ " }",
+ "",
+ " if (YY_G(yy_buffer_stack_top) >= (YY_G(yy_buffer_stack_max)) - 1){",
+ "",
+ " /* Increase the buffer to prepare for a possible push. */",
+ " int grow_size = 8 /* arbitrary grow size */;",
+ "",
+ " num_to_alloc = YY_G(yy_buffer_stack_max) + grow_size;",
+ " YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc",
+ " (YY_G(yy_buffer_stack),",
+ " num_to_alloc * sizeof(struct yy_buffer_state*)",
+ " M4_YY_CALL_LAST_ARG);",
+ " if ( ! YY_G(yy_buffer_stack) )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yyensure_buffer_stack()\" );",
+ "",
+ " /* zero only the new slots.*/",
+ " memset(YY_G(yy_buffer_stack) + YY_G(yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));",
+ " YY_G(yy_buffer_stack_max) = num_to_alloc;",
+ " }",
+ "}",
+ "%endif",
+ "",
+ "",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SCAN_BUFFER]],,",
+ "[[",
+ "%if-c-only",
+ "/** Setup the input buffer state to scan directly from a user-specified character buffer.",
+ " * @param base the character buffer",
+ " * @param size the size in bytes of the character buffer",
+ " * M4_YY_DOC_PARAM",
+ " * @return the newly allocated buffer state object. ",
+ " */",
+ "YY_BUFFER_STATE yy_scan_buffer YYFARGS2( char *,base, yy_size_t ,size)",
+ "{",
+ " YY_BUFFER_STATE b;",
+ " m4_dnl M4_YY_DECL_GUTS_VAR();",
+ "",
+ " if ( size < 2 ||",
+ " base[size-2] != YY_END_OF_BUFFER_CHAR ||",
+ " base[size-1] != YY_END_OF_BUFFER_CHAR )",
+ " /* They forgot to leave room for the EOB's. */",
+ " return 0;",
+ "",
+ " b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );",
+ " if ( ! b )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yy_scan_buffer()\" );",
+ "",
+ " b->yy_buf_size = size - 2; /* \"- 2\" to take care of EOB's */",
+ " b->yy_buf_pos = b->yy_ch_buf = base;",
+ " b->yy_is_our_buffer = 0;",
+ " b->yy_input_file = 0;",
+ " b->yy_n_chars = b->yy_buf_size;",
+ " b->yy_is_interactive = 0;",
+ " b->yy_at_bol = 1;",
+ " b->yy_fill_buffer = 0;",
+ " b->yy_buffer_status = YY_BUFFER_NEW;",
+ "",
+ " yy_switch_to_buffer( b M4_YY_CALL_LAST_ARG );",
+ "",
+ " return b;",
+ "}",
+ "%endif",
+ "]])",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SCAN_STRING]],,",
+ "[[",
+ "%if-c-only",
+ "/** Setup the input buffer state to scan a string. The next call to yylex() will",
+ " * scan from a @e copy of @a str.",
+ " * @param yystr a NUL-terminated string to scan",
+ " * M4_YY_DOC_PARAM",
+ " * @return the newly allocated buffer state object.",
+ " * @note If you want to scan bytes that may contain NUL values, then use",
+ " * yy_scan_bytes() instead.",
+ " */",
+ "YY_BUFFER_STATE yy_scan_string YYFARGS1( yyconst char *, yystr)",
+ "{",
+ " m4_dnl M4_YY_DECL_GUTS_VAR();",
+ "",
+ " return yy_scan_bytes( yystr, strlen(yystr) M4_YY_CALL_LAST_ARG);",
+ "}",
+ "%endif",
+ "]])",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SCAN_BYTES]],,",
+ "[[",
+ "%if-c-only",
+ "/** Setup the input buffer state to scan the given bytes. The next call to yylex() will",
+ " * scan from a @e copy of @a bytes.",
+ " * @param yybytes the byte buffer to scan",
+ " * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.",
+ " * M4_YY_DOC_PARAM",
+ " * @return the newly allocated buffer state object.",
+ " */",
+ "YY_BUFFER_STATE yy_scan_bytes YYFARGS2( yyconst char *,yybytes, yy_size_t ,_yybytes_len)",
+ "{",
+ " YY_BUFFER_STATE b;",
+ " char *buf;",
+ " yy_size_t n;",
+ " yy_size_t i;",
+ " m4_dnl M4_YY_DECL_GUTS_VAR();",
+ "",
+ " /* Get memory for full buffer, including space for trailing EOB's. */",
+ " n = _yybytes_len + 2;",
+ " buf = (char *) yyalloc( n M4_YY_CALL_LAST_ARG );",
+ " if ( ! buf )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yy_scan_bytes()\" );",
+ "",
+ " for ( i = 0; i < _yybytes_len; ++i )",
+ " buf[i] = yybytes[i];",
+ "",
+ " buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;",
+ "",
+ " b = yy_scan_buffer( buf, n M4_YY_CALL_LAST_ARG);",
+ " if ( ! b )",
+ " YY_FATAL_ERROR( \"bad buffer in yy_scan_bytes()\" );",
+ "",
+ " /* It's okay to grow etc. this buffer, and we should throw it",
+ " * away when we're done.",
+ " */",
+ " b->yy_is_our_buffer = 1;",
+ "",
+ " return b;",
+ "}",
+ "%endif",
+ "]])",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,",
+ "[[",
+ "%if-c-only",
+ " static void yy_push_state YYFARGS1( int ,new_state)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yy_push_state( int new_state )",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " if ( YY_G(yy_start_stack_ptr) >= YY_G(yy_start_stack_depth) )",
+ " {",
+ " yy_size_t new_size;",
+ "",
+ " YY_G(yy_start_stack_depth) += YY_START_STACK_INCR;",
+ " new_size = YY_G(yy_start_stack_depth) * sizeof( int );",
+ "",
+ " if ( ! YY_G(yy_start_stack) )",
+ " YY_G(yy_start_stack) = (int *) yyalloc( new_size M4_YY_CALL_LAST_ARG );",
+ "",
+ " else",
+ " YY_G(yy_start_stack) = (int *) yyrealloc(",
+ " (void *) YY_G(yy_start_stack), new_size M4_YY_CALL_LAST_ARG );",
+ "",
+ " if ( ! YY_G(yy_start_stack) )",
+ " YY_FATAL_ERROR( \"out of memory expanding start-condition stack\" );",
+ " }",
+ "",
+ " YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)++] = YY_START;",
+ "",
+ " BEGIN(new_state);",
+ "}",
+ "]])",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_POP_STATE]],,",
+ "[[",
+ "%if-c-only",
+ " static void yy_pop_state YYFARGS0(void)",
+ "%endif",
+ "%if-c++-only",
+ " void yyFlexLexer::yy_pop_state()",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " if ( --YY_G(yy_start_stack_ptr) < 0 )",
+ " YY_FATAL_ERROR( \"start-condition stack underflow\" );",
+ "",
+ " BEGIN(YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)]);",
+ "}",
+ "]])",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_TOP_STATE]],,",
+ "[[",
+ "%if-c-only",
+ " static int yy_top_state YYFARGS0(void)",
+ "%endif",
+ "%if-c++-only",
+ " int yyFlexLexer::yy_top_state()",
+ "%endif",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1];",
+ "}",
+ "]])",
+ "",
+ "#ifndef YY_EXIT_FAILURE",
+ "#define YY_EXIT_FAILURE 2",
+ "#endif",
+ "",
+ "%if-c-only",
+ "static void yy_fatal_error YYFARGS1(yyconst char*, msg)",
+ "{",
+ " m4_dnl M4_YY_DECL_GUTS_VAR();",
+ " (void) fprintf( stderr, \"%s\\n\", msg );",
+ " exit( YY_EXIT_FAILURE );",
+ "}",
+ "%endif",
+ "%if-c++-only",
+ "void yyFlexLexer::LexerError( yyconst char msg[] )",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " std::cerr << msg << std::endl;",
+ " exit( YY_EXIT_FAILURE );",
+ "}",
+ "%endif",
+ "",
+ "/* Redefine yyless() so it works in section 3 code. */",
+ "",
+ "#undef yyless",
+ "#define yyless(n) \\",
+ " do \\",
+ " { \\",
+ " /* Undo effects of setting up yytext. */ \\",
+ " int yyless_macro_arg = (n); \\",
+ " YY_LESS_LINENO(yyless_macro_arg);\\",
+ " yytext[yyleng] = YY_G(yy_hold_char); \\",
+ " YY_G(yy_c_buf_p) = yytext + yyless_macro_arg; \\",
+ " YY_G(yy_hold_char) = *YY_G(yy_c_buf_p); \\",
+ " *YY_G(yy_c_buf_p) = '\\0'; \\",
+ " yyleng = yyless_macro_arg; \\",
+ " } \\",
+ " while ( 0 )",
+ "",
+ "",
+ "",
+ "/* Accessor methods (get/set functions) to struct members. */",
+ "",
+ "%if-c-only",
+ "%if-reentrant",
+ "m4_ifdef( [[M4_YY_NO_GET_EXTRA]],,",
+ "[[",
+ "/** Get the user-defined data for this scanner.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "YY_EXTRA_TYPE yyget_extra YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return yyextra;",
+ "}",
+ "]])",
+ "%endif",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_LINENO]],,",
+ "[[",
+ "/** Get the current line number.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "int yyget_lineno YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " ",
+ " m4_ifdef( [[M4_YY_REENTRANT]],",
+ " [[",
+ " if (! YY_CURRENT_BUFFER)",
+ " return 0;",
+ " ]])",
+ " return yylineno;",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_REENTRANT]],",
+ "[[",
+ "m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,",
+ "[[",
+ "/** Get the current column number.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "int yyget_column YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " ",
+ " m4_ifdef( [[M4_YY_REENTRANT]],",
+ " [[",
+ " if (! YY_CURRENT_BUFFER)",
+ " return 0;",
+ " ]])",
+ " return yycolumn;",
+ "}",
+ "]])",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_IN]],,",
+ "[[",
+ "/** Get the input stream.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "FILE *yyget_in YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return yyin;",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_OUT]],,",
+ "[[",
+ "/** Get the output stream.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "FILE *yyget_out YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return yyout;",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_LENG]],,",
+ "[[",
+ "/** Get the length of the current token.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "yy_size_t yyget_leng YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return yyleng;",
+ "}",
+ "]])",
+ "",
+ "/** Get the current token.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "m4_ifdef( [[M4_YY_NO_GET_TEXT]],,",
+ "[[",
+ "char *yyget_text YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return yytext;",
+ "}",
+ "]])",
+ "",
+ "%if-reentrant",
+ "m4_ifdef( [[M4_YY_NO_SET_EXTRA]],,",
+ "[[",
+ "/** Set the user-defined data. This data is never touched by the scanner.",
+ " * @param user_defined The data to be associated with this scanner.",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "void yyset_extra YYFARGS1( YY_EXTRA_TYPE ,user_defined)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " yyextra = user_defined ;",
+ "}",
+ "]])",
+ "%endif",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_LINENO]],,",
+ "[[",
+ "/** Set the current line number.",
+ " * @param line_number",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "void yyset_lineno YYFARGS1( int ,line_number)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " m4_ifdef( [[M4_YY_REENTRANT]],",
+ " [[",
+ " /* lineno is only valid if an input buffer exists. */",
+ " if (! YY_CURRENT_BUFFER )",
+ " YY_FATAL_ERROR( \"yyset_lineno called with no buffer\" );",
+ " ]])",
+ " yylineno = line_number;",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_REENTRANT]],",
+ "[[",
+ "m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,",
+ "[[",
+ "/** Set the current column.",
+ " * @param line_number",
+ " * M4_YY_DOC_PARAM",
+ " */",
+ "void yyset_column YYFARGS1( int , column_no)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " m4_ifdef( [[M4_YY_REENTRANT]],",
+ " [[",
+ " /* column is only valid if an input buffer exists. */",
+ " if (! YY_CURRENT_BUFFER )",
+ " YY_FATAL_ERROR( \"yyset_column called with no buffer\" );",
+ " ]])",
+ " yycolumn = column_no;",
+ "}",
+ "]])",
+ "]])",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_IN]],,",
+ "[[",
+ "/** Set the input stream. This does not discard the current",
+ " * input buffer.",
+ " * @param in_str A readable stream.",
+ " * M4_YY_DOC_PARAM",
+ " * @see yy_switch_to_buffer",
+ " */",
+ "void yyset_in YYFARGS1( FILE * ,in_str)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " yyin = in_str ;",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_OUT]],,",
+ "[[",
+ "void yyset_out YYFARGS1( FILE * ,out_str)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " yyout = out_str ;",
+ "}",
+ "]])",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NO_GET_DEBUG]],,",
+ "[[",
+ "int yyget_debug YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return yy_flex_debug;",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_DEBUG]],,",
+ "[[",
+ "void yyset_debug YYFARGS1( int ,bdebug)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " yy_flex_debug = bdebug ;",
+ "}",
+ "]])",
+ "%endif",
+ "",
+ "%if-reentrant",
+ "/* Accessor methods for yylval and yylloc */",
+ "",
+ "%if-bison-bridge",
+ "m4_ifdef( [[M4_YY_NO_GET_LVAL]],,",
+ "[[",
+ "YYSTYPE * yyget_lval YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return yylval;",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_SET_LVAL]],,",
+ "[[",
+ "void yyset_lval YYFARGS1( YYSTYPE * ,yylval_param)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " yylval = yylval_param;",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[<M4_YY_BISON_LLOC>]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_NO_GET_LLOC]],,",
+ " [[",
+ "YYLTYPE *yyget_lloc YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " return yylloc;",
+ "}",
+ " ]])",
+ "",
+ " m4_ifdef( [[M4_YY_NO_SET_LLOC]],,",
+ " [[",
+ "void yyset_lloc YYFARGS1( YYLTYPE * ,yylloc_param)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " yylloc = yylloc_param;",
+ "}",
+ " ]])",
+ "]])",
+ "",
+ "%endif",
+ "",
+ "",
+ "/* User-visible API */",
+ "",
+ "/* yylex_init is special because it creates the scanner itself, so it is",
+ " * the ONLY reentrant function that doesn't take the scanner as the last argument.",
+ " * That's why we explicitly handle the declaration, instead of using our macros.",
+ " */",
+ "m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],",
+ "[[",
+ "int yylex_init( ptr_yy_globals )",
+ " yyscan_t* ptr_yy_globals;",
+ "]],",
+ "[[",
+ "int yylex_init(yyscan_t* ptr_yy_globals)",
+ "]])",
+ "{",
+ " if (ptr_yy_globals == NULL){",
+ " errno = EINVAL;",
+ " return 1;",
+ " }",
+ "",
+ " *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );",
+ "",
+ " if (*ptr_yy_globals == NULL){",
+ " errno = ENOMEM;",
+ " return 1;",
+ " }",
+ "",
+ " /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */",
+ " memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));",
+ "",
+ " return yy_init_globals ( *ptr_yy_globals );",
+ "}",
+ "",
+ "",
+ "/* yylex_init_extra has the same functionality as yylex_init, but follows the",
+ " * convention of taking the scanner as the last argument. Note however, that",
+ " * this is a *pointer* to a scanner, as it will be allocated by this call (and",
+ " * is the reason, too, why this function also must handle its own declaration).",
+ " * The user defined value in the first argument will be available to yyalloc in",
+ " * the yyextra field.",
+ " */",
+ "m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],",
+ "[[",
+ "int yylex_init_extra( yy_user_defined, ptr_yy_globals )",
+ " YY_EXTRA_TYPE yy_user_defined;",
+ " yyscan_t* ptr_yy_globals;",
+ "]],",
+ "[[",
+ "int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )",
+ "]])",
+ "{",
+ " struct yyguts_t dummy_yyguts;",
+ "",
+ " yyset_extra (yy_user_defined, &dummy_yyguts);",
+ "",
+ " if (ptr_yy_globals == NULL){",
+ " errno = EINVAL;",
+ " return 1;",
+ " }",
+ " ",
+ " *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );",
+ " ",
+ " if (*ptr_yy_globals == NULL){",
+ " errno = ENOMEM;",
+ " return 1;",
+ " }",
+ " ",
+ " /* By setting to 0xAA, we expose bugs in",
+ " yy_init_globals. Leave at 0x00 for releases. */",
+ " memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));",
+ " ",
+ " yyset_extra (yy_user_defined, *ptr_yy_globals);",
+ " ",
+ " return yy_init_globals ( *ptr_yy_globals );",
+ "}",
+ "",
+ "%endif if-c-only",
+ "",
+ "",
+ "%if-c-only",
+ "static int yy_init_globals YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ " /* Initialization is the same as for the non-reentrant scanner.",
+ " * This function is called from yylex_destroy(), so don't allocate here.",
+ " */",
+ "",
+ "m4_ifdef( [[M4_YY_USE_LINENO]],",
+ "[[",
+ " m4_ifdef( [[M4_YY_NOT_REENTRANT]],",
+ " [[",
+ " /* We do not touch yylineno unless the option is enabled. */",
+ " yylineno = 1;",
+ " ]])",
+ "]])",
+ " YY_G(yy_buffer_stack) = 0;",
+ " YY_G(yy_buffer_stack_top) = 0;",
+ " YY_G(yy_buffer_stack_max) = 0;",
+ " YY_G(yy_c_buf_p) = (char *) 0;",
+ " YY_G(yy_init) = 0;",
+ " YY_G(yy_start) = 0;",
+ "",
+ "m4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],",
+ "[[",
+ " YY_G(yy_start_stack_ptr) = 0;",
+ " YY_G(yy_start_stack_depth) = 0;",
+ " YY_G(yy_start_stack) = NULL;",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_USES_REJECT]],",
+ "[[",
+ " YY_G(yy_state_buf) = 0;",
+ " YY_G(yy_state_ptr) = 0;",
+ " YY_G(yy_full_match) = 0;",
+ " YY_G(yy_lp) = 0;",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],",
+ "[[",
+ " YY_G(yytext_ptr) = 0;",
+ " YY_G(yy_more_offset) = 0;",
+ " YY_G(yy_prev_more_offset) = 0;",
+ "]])",
+ "",
+ "/* Defined in main.c */",
+ "#ifdef YY_STDINIT",
+ " yyin = stdin;",
+ " yyout = stdout;",
+ "#else",
+ " yyin = (FILE *) 0;",
+ " yyout = (FILE *) 0;",
+ "#endif",
+ "",
+ " /* For future reference: Set errno on error, since we are called by",
+ " * yylex_init()",
+ " */",
+ " return 0;",
+ "}",
+ "%endif",
+ "",
+ "",
+ "%if-c-only SNIP! this currently causes conflicts with the c++ scanner",
+ "/* yylex_destroy is for both reentrant and non-reentrant scanners. */",
+ "int yylex_destroy YYFARGS0(void)",
+ "{",
+ " M4_YY_DECL_GUTS_VAR();",
+ "",
+ " /* Pop the buffer stack, destroying each element. */",
+ " while(YY_CURRENT_BUFFER){",
+ " yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG );",
+ " YY_CURRENT_BUFFER_LVALUE = NULL;",
+ " yypop_buffer_state(M4_YY_CALL_ONLY_ARG);",
+ " }",
+ "",
+ " /* Destroy the stack itself. */",
+ " yyfree(YY_G(yy_buffer_stack) M4_YY_CALL_LAST_ARG);",
+ " YY_G(yy_buffer_stack) = NULL;",
+ "",
+ "m4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],",
+ "[[",
+ " /* Destroy the start condition stack. */",
+ " yyfree( YY_G(yy_start_stack) M4_YY_CALL_LAST_ARG );",
+ " YY_G(yy_start_stack) = NULL;",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_USES_REJECT]],",
+ "[[",
+ " yyfree ( YY_G(yy_state_buf) M4_YY_CALL_LAST_ARG);",
+ " YY_G(yy_state_buf) = NULL;",
+ "]])",
+ "",
+ " /* Reset the globals. This is important in a non-reentrant scanner so the next time",
+ " * yylex() is called, initialization will occur. */",
+ " yy_init_globals( M4_YY_CALL_ONLY_ARG);",
+ "",
+ "%if-reentrant",
+ " /* Destroy the main struct (reentrant only). */",
+ " yyfree ( yyscanner M4_YY_CALL_LAST_ARG );",
+ " yyscanner = NULL;",
+ "%endif",
+ " return 0;",
+ "}",
+ "%endif",
+ "",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "/*",
+ " * Internal utility routines.",
+ " */",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#ifndef yytext_ptr",
+ "static void yy_flex_strncpy YYFARGS3( char*,s1, yyconst char *,s2, int,n)",
+ "{",
+ " int i;",
+ " for ( i = 0; i < n; ++i )",
+ " s1[i] = s2[i];",
+ "}",
+ "#endif",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],",
+ "[[",
+ "#ifdef YY_NEED_STRLEN",
+ "static int yy_flex_strlen YYFARGS1( yyconst char *,s)",
+ "{",
+ " int n;",
+ " for ( n = 0; s[n]; ++n )",
+ " ;",
+ "",
+ " return n;",
+ "}",
+ "#endif",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_FLEX_ALLOC]],,",
+ "[[",
+ "void *yyalloc YYFARGS1( yy_size_t ,size)",
+ "{",
+ " return (void *) malloc( size );",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_FLEX_REALLOC]],,",
+ "[[",
+ "void *yyrealloc YYFARGS2( void *,ptr, yy_size_t ,size)",
+ "{",
+ " /* The cast to (char *) in the following accommodates both",
+ " * implementations that use char* generic pointers, and those",
+ " * that use void* generic pointers. It works with the latter",
+ " * because both ANSI C and C++ allow castless assignment from",
+ " * any pointer type to void*, and deal with argument conversions",
+ " * as though doing an assignment.",
+ " */",
+ " return (void *) realloc( (char *) ptr, size );",
+ "}",
+ "]])",
+ "",
+ "m4_ifdef( [[M4_YY_NO_FLEX_FREE]],,",
+ "[[",
+ "void yyfree YYFARGS1( void *,ptr)",
+ "{",
+ " free( (char *) ptr ); /* see yyrealloc() for (char *) cast */",
+ "}",
+ "]])",
+ "",
+ "%if-tables-serialization definitions",
+ "#ifdef FLEX_SCANNER",
+ "/*",
+ "dnl tables_shared.c - tables serialization code",
+ "dnl ",
+ "dnl Copyright (c) 1990 The Regents of the University of California.",
+ "dnl All rights reserved.",
+ "dnl ",
+ "dnl This code is derived from software contributed to Berkeley by",
+ "dnl Vern Paxson.",
+ "dnl ",
+ "dnl The United States Government has rights in this work pursuant",
+ "dnl to contract no. DE-AC03-76SF00098 between the United States",
+ "dnl Department of Energy and the University of California.",
+ "dnl ",
+ "dnl This file is part of flex.",
+ "dnl ",
+ "dnl Redistribution and use in source and binary forms, with or without",
+ "dnl modification, are permitted provided that the following conditions",
+ "dnl are met:",
+ "dnl ",
+ "dnl 1. Redistributions of source code must retain the above copyright",
+ "dnl notice, this list of conditions and the following disclaimer.",
+ "dnl 2. Redistributions in binary form must reproduce the above copyright",
+ "dnl notice, this list of conditions and the following disclaimer in the",
+ "dnl documentation and/or other materials provided with the distribution.",
+ "dnl ",
+ "dnl Neither the name of the University nor the names of its contributors",
+ "dnl may be used to endorse or promote products derived from this software",
+ "dnl without specific prior written permission.",
+ "dnl ",
+ "dnl THIS SOFTWARE IS PROVIDED `AS IS' AND WITHOUT ANY EXPRESS OR",
+ "dnl IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED",
+ "dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR",
+ "dnl PURPOSE.",
+ "dnl ",
+ "*/",
+ " ",
+ "/* This file is meant to be included in both the skeleton and the actual",
+ " * flex code (hence the name \"_shared\"). ",
+ " */",
+ "#ifndef yyskel_static",
+ "#define yyskel_static static",
+ "#endif",
+ "#else",
+ "#include \"flexdef.h\"",
+ "#include \"tables.h\"",
+ "#ifndef yyskel_static",
+ "#define yyskel_static",
+ "#endif",
+ "#endif",
+ "",
+ "",
+ "/** Get the number of integers in this table. This is NOT the",
+ " * same thing as the number of elements.",
+ " * @param td the table ",
+ " * @return the number of integers in the table",
+ " */",
+ "yyskel_static flex_int32_t yytbl_calc_total_len (const struct yytbl_data *tbl)",
+ "{",
+ " flex_int32_t n;",
+ "",
+ " /* total number of ints */",
+ " n = tbl->td_lolen;",
+ " if (tbl->td_hilen > 0)",
+ " n *= tbl->td_hilen;",
+ "",
+ " if (tbl->td_id == YYTD_ID_TRANSITION)",
+ " n *= 2;",
+ " return n;",
+ "}",
+ "",
+ "",
+ "static int yytbl_read8 (void *v, struct yytbl_reader * rd)",
+ "{",
+ " errno = 0;",
+ " if (fread (v, sizeof (flex_uint8_t), 1, rd->fp) != 1){",
+ " errno = EIO;",
+ " return -1;",
+ " }",
+ " rd->bread += sizeof(flex_uint8_t);",
+ " return 0;",
+ "}",
+ "",
+ "static int yytbl_read16 (void *v, struct yytbl_reader * rd)",
+ "{",
+ " errno = 0;",
+ " if (fread (v, sizeof (flex_uint16_t), 1, rd->fp) != 1){",
+ " errno = EIO;",
+ " return -1;",
+ " }",
+ " *((flex_uint16_t *) v) = ntohs (*((flex_uint16_t *) v));",
+ " rd->bread += sizeof(flex_uint16_t);",
+ " return 0;",
+ "}",
+ "",
+ "static int yytbl_read32 (void *v, struct yytbl_reader * rd)",
+ "{",
+ " errno = 0;",
+ " if (fread (v, sizeof (flex_uint32_t), 1, rd->fp) != 1){",
+ " errno = EIO;",
+ " return -1;",
+ " }",
+ " *((flex_uint32_t *) v) = ntohl (*((flex_uint32_t *) v));",
+ " rd->bread += sizeof(flex_uint32_t);",
+ " return 0;",
+ "}",
+ "",
+ "/** Read the header */",
+ "static int yytbl_hdr_read YYFARGS2(struct yytbl_hdr *, th, struct yytbl_reader *, rd)",
+ "{",
+ " int bytes;",
+ " memset (th, 0, sizeof (struct yytbl_hdr));",
+ "",
+ " if (yytbl_read32 (&(th->th_magic), rd) != 0)",
+ " return -1;",
+ "",
+ " if (th->th_magic != YYTBL_MAGIC){",
+ " YY_FATAL_ERROR( \"bad magic number\" ); /* TODO: not fatal. */",
+ " return -1;",
+ " }",
+ "",
+ " if (yytbl_read32 (&(th->th_hsize), rd) != 0",
+ " || yytbl_read32 (&(th->th_ssize), rd) != 0",
+ " || yytbl_read16 (&(th->th_flags), rd) != 0)",
+ " return -1;",
+ "",
+ " /* Sanity check on header size. Greater than 1k suggests some funny business. */",
+ " if (th->th_hsize < 16 || th->th_hsize > 1024){",
+ " YY_FATAL_ERROR( \"insane header size detected\" ); /* TODO: not fatal. */",
+ " return -1;",
+ " }",
+ "",
+ " /* Allocate enough space for the version and name fields */",
+ " bytes = th->th_hsize - 14;",
+ " th->th_version = (char *) yyalloc (bytes M4_YY_CALL_LAST_ARG);",
+ " if ( ! th->th_version )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yytbl_hdr_read()\" );",
+ "",
+ " /* we read it all into th_version, and point th_name into that data */",
+ " if (fread (th->th_version, 1, bytes, rd->fp) != bytes){",
+ " errno = EIO;",
+ " yyfree(th->th_version M4_YY_CALL_LAST_ARG);",
+ " th->th_version = NULL;",
+ " return -1;",
+ " }",
+ " else",
+ " rd->bread += bytes;",
+ "",
+ " th->th_name = th->th_version + strlen (th->th_version) + 1;",
+ " return 0;",
+ "}",
+ "",
+ "/** lookup id in the dmap list.",
+ " * @param dmap pointer to first element in list",
+ " * @return NULL if not found.",
+ " */",
+ "static struct yytbl_dmap *yytbl_dmap_lookup YYFARGS2(struct yytbl_dmap *, dmap,",
+ " int, id)",
+ "{",
+ " while (dmap->dm_id)",
+ " if (dmap->dm_id == id)",
+ " return dmap;",
+ " else",
+ " dmap++;",
+ " return NULL;",
+ "}",
+ "",
+ "/** Read a table while mapping its contents to the local array. ",
+ " * @param dmap used to performing mapping",
+ " * @return 0 on success",
+ " */",
+ "static int yytbl_data_load YYFARGS2(struct yytbl_dmap *, dmap, struct yytbl_reader*, rd)",
+ "{",
+ " struct yytbl_data td;",
+ " struct yytbl_dmap *transdmap=0;",
+ " int len, i, rv, inner_loop_count;",
+ " void *p=0;",
+ "",
+ " memset (&td, 0, sizeof (struct yytbl_data));",
+ "",
+ " if (yytbl_read16 (&td.td_id, rd) != 0",
+ " || yytbl_read16 (&td.td_flags, rd) != 0",
+ " || yytbl_read32 (&td.td_hilen, rd) != 0",
+ " || yytbl_read32 (&td.td_lolen, rd) != 0)",
+ " return -1;",
+ "",
+ " /* Lookup the map for the transition table so we have it in case we need it",
+ " * inside the loop below. This scanner might not even have a transition",
+ " * table, which is ok.",
+ " */",
+ " transdmap = yytbl_dmap_lookup (dmap, YYTD_ID_TRANSITION M4_YY_CALL_LAST_ARG);",
+ "",
+ " if ((dmap = yytbl_dmap_lookup (dmap, td.td_id M4_YY_CALL_LAST_ARG)) == NULL){",
+ " YY_FATAL_ERROR( \"table id not found in map.\" ); /* TODO: not fatal. */",
+ " return -1;",
+ " }",
+ "",
+ " /* Allocate space for table.",
+ " * The --full yy_transition table is a special case, since we",
+ " * need the dmap.dm_sz entry to tell us the sizeof the individual",
+ " * struct members.",
+ " */",
+ " {",
+ " size_t bytes;",
+ "",
+ " if ((td.td_flags & YYTD_STRUCT))",
+ " bytes = sizeof(struct yy_trans_info) * td.td_lolen * (td.td_hilen ? td.td_hilen : 1);",
+ " else",
+ " bytes = td.td_lolen * (td.td_hilen ? td.td_hilen : 1) * dmap->dm_sz;",
+ "",
+ " if(M4_YY_TABLES_VERIFY)",
+ " /* We point to the array itself */",
+ " p = dmap->dm_arr; ",
+ " else",
+ " /* We point to the address of a pointer. */",
+ " *dmap->dm_arr = p = (void *) yyalloc (bytes M4_YY_CALL_LAST_ARG);",
+ " if ( ! p )",
+ " YY_FATAL_ERROR( \"out of dynamic memory in yytbl_data_load()\" );",
+ " }",
+ "",
+ " /* If it's a struct, we read 2 integers to get one element */",
+ " if ((td.td_flags & YYTD_STRUCT) != 0)",
+ " inner_loop_count = 2;",
+ " else",
+ " inner_loop_count = 1;",
+ "",
+ " /* read and map each element.",
+ " * This loop iterates once for each element of the td_data array.",
+ " * Notice that we increment 'i' in the inner loop.",
+ " */",
+ " len = yytbl_calc_total_len (&td);",
+ " for (i = 0; i < len; ){",
+ " int j;",
+ "",
+ "",
+ " /* This loop really executes exactly 1 or 2 times.",
+ " * The second time is to handle the second member of the",
+ " * YYTD_STRUCT for the yy_transition array.",
+ " */",
+ " for (j = 0; j < inner_loop_count; j++, i++) {",
+ " flex_int32_t t32;",
+ "",
+ " /* read into t32 no matter what the real size is. */",
+ " {",
+ " flex_int16_t t16;",
+ " flex_int8_t t8;",
+ "",
+ " switch (YYTDFLAGS2BYTES (td.td_flags)) {",
+ " case sizeof (flex_int32_t):",
+ " rv = yytbl_read32 (&t32, rd);",
+ " break;",
+ " case sizeof (flex_int16_t):",
+ " rv = yytbl_read16 (&t16, rd);",
+ " t32 = t16;",
+ " break;",
+ " case sizeof (flex_int8_t):",
+ " rv = yytbl_read8 (&t8, rd);",
+ " t32 = t8;",
+ " break;",
+ " default: ",
+ " YY_FATAL_ERROR( \"invalid td_flags\" ); /* TODO: not fatal. */",
+ " return -1;",
+ " }",
+ " }",
+ " if (rv != 0)",
+ " return -1;",
+ "",
+ " /* copy into the deserialized array... */",
+ "",
+ " if ((td.td_flags & YYTD_STRUCT)) {",
+ " /* t32 is the j'th member of a two-element struct. */",
+ " void *v;",
+ "",
+ " v = j == 0 ? &(((struct yy_trans_info *) p)->yy_verify)",
+ " : &(((struct yy_trans_info *) p)->yy_nxt);",
+ "",
+ " switch (dmap->dm_sz) {",
+ " case sizeof (flex_int32_t):",
+ " if (M4_YY_TABLES_VERIFY){",
+ " if( ((flex_int32_t *) v)[0] != (flex_int32_t) t32)",
+ " YY_FATAL_ERROR( \"tables verification failed at YYTD_STRUCT flex_int32_t\" );",
+ " }else",
+ " ((flex_int32_t *) v)[0] = (flex_int32_t) t32;",
+ " break;",
+ " case sizeof (flex_int16_t):",
+ " if (M4_YY_TABLES_VERIFY ){",
+ " if(((flex_int16_t *) v)[0] != (flex_int16_t) t32)",
+ " YY_FATAL_ERROR( \"tables verification failed at YYTD_STRUCT flex_int16_t\" );",
+ " }else",
+ " ((flex_int16_t *) v)[0] = (flex_int16_t) t32;",
+ " break;",
+ " case sizeof(flex_int8_t):",
+ " if (M4_YY_TABLES_VERIFY ){",
+ " if( ((flex_int8_t *) v)[0] != (flex_int8_t) t32)",
+ " YY_FATAL_ERROR( \"tables verification failed at YYTD_STRUCT flex_int8_t\" );",
+ " }else",
+ " ((flex_int8_t *) v)[0] = (flex_int8_t) t32;",
+ " break;",
+ " default:",
+ " YY_FATAL_ERROR( \"invalid dmap->dm_sz for struct\" ); /* TODO: not fatal. */",
+ " return -1;",
+ " }",
+ "",
+ " /* if we're done with j, increment p */",
+ " if (j == 1)",
+ " p = (struct yy_trans_info *) p + 1;",
+ " }",
+ " else if ((td.td_flags & YYTD_PTRANS)) {",
+ " /* t32 is an index into the transition array. */",
+ " struct yy_trans_info *v;",
+ "",
+ "",
+ " if (!transdmap){",
+ " YY_FATAL_ERROR( \"transition table not found\" ); /* TODO: not fatal. */",
+ " return -1;",
+ " }",
+ " ",
+ " if( M4_YY_TABLES_VERIFY)",
+ " v = &(((struct yy_trans_info *) (transdmap->dm_arr))[t32]);",
+ " else",
+ " v = &((*((struct yy_trans_info **) (transdmap->dm_arr)))[t32]);",
+ "",
+ " if(M4_YY_TABLES_VERIFY ){",
+ " if( ((struct yy_trans_info **) p)[0] != v)",
+ " YY_FATAL_ERROR( \"tables verification failed at YYTD_PTRANS\" );",
+ " }else",
+ " ((struct yy_trans_info **) p)[0] = v;",
+ " ",
+ " /* increment p */",
+ " p = (struct yy_trans_info **) p + 1;",
+ " }",
+ " else {",
+ " /* t32 is a plain int. copy data, then incrememnt p. */",
+ " switch (dmap->dm_sz) {",
+ " case sizeof (flex_int32_t):",
+ " if(M4_YY_TABLES_VERIFY ){",
+ " if( ((flex_int32_t *) p)[0] != (flex_int32_t) t32)",
+ " YY_FATAL_ERROR( \"tables verification failed at flex_int32_t\" );",
+ " }else",
+ " ((flex_int32_t *) p)[0] = (flex_int32_t) t32;",
+ " p = ((flex_int32_t *) p) + 1;",
+ " break;",
+ " case sizeof (flex_int16_t):",
+ " if(M4_YY_TABLES_VERIFY ){",
+ " if( ((flex_int16_t *) p)[0] != (flex_int16_t) t32)",
+ " YY_FATAL_ERROR( \"tables verification failed at flex_int16_t\" );",
+ " }else",
+ " ((flex_int16_t *) p)[0] = (flex_int16_t) t32;",
+ " p = ((flex_int16_t *) p) + 1;",
+ " break;",
+ " case sizeof (flex_int8_t):",
+ " if(M4_YY_TABLES_VERIFY ){",
+ " if( ((flex_int8_t *) p)[0] != (flex_int8_t) t32)",
+ " YY_FATAL_ERROR( \"tables verification failed at flex_int8_t\" );",
+ " }else",
+ " ((flex_int8_t *) p)[0] = (flex_int8_t) t32;",
+ " p = ((flex_int8_t *) p) + 1;",
+ " break;",
+ " default:",
+ " YY_FATAL_ERROR( \"invalid dmap->dm_sz for plain int\" ); /* TODO: not fatal. */",
+ " return -1;",
+ " }",
+ " }",
+ " }",
+ "",
+ " }",
+ "",
+ " /* Now eat padding. */",
+ " {",
+ " int pad;",
+ " pad = yypad64(rd->bread);",
+ " while(--pad >= 0){",
+ " flex_int8_t t8;",
+ " if(yytbl_read8(&t8,rd) != 0)",
+ " return -1;",
+ " }",
+ " }",
+ "",
+ " return 0;",
+ "}",
+ "",
+ "%define-yytables The name for this specific scanner's tables.",
+ "",
+ "/* Find the key and load the DFA tables from the given stream. */",
+ "static int yytbl_fload YYFARGS2(FILE *, fp, const char *, key)",
+ "{",
+ " int rv=0;",
+ " struct yytbl_hdr th;",
+ " struct yytbl_reader rd;",
+ "",
+ " rd.fp = fp;",
+ " th.th_version = NULL;",
+ "",
+ " /* Keep trying until we find the right set of tables or end of file. */",
+ " while (!feof(rd.fp)) {",
+ " rd.bread = 0;",
+ " if (yytbl_hdr_read (&th, &rd M4_YY_CALL_LAST_ARG) != 0){",
+ " rv = -1;",
+ " goto return_rv;",
+ " }",
+ "",
+ " /* A NULL key means choose the first set of tables. */",
+ " if (key == NULL)",
+ " break;",
+ "",
+ " if (strcmp(th.th_name,key) != 0){",
+ " /* Skip ahead to next set */",
+ " fseek(rd.fp, th.th_ssize - th.th_hsize, SEEK_CUR);",
+ " yyfree(th.th_version M4_YY_CALL_LAST_ARG);",
+ " th.th_version = NULL;",
+ " }",
+ " else",
+ " break;",
+ " }",
+ "",
+ " while (rd.bread < th.th_ssize){",
+ " /* Load the data tables */",
+ " if(yytbl_data_load (yydmap,&rd M4_YY_CALL_LAST_ARG) != 0){",
+ " rv = -1;",
+ " goto return_rv;",
+ " }",
+ " }",
+ "",
+ "return_rv:",
+ " if(th.th_version){",
+ " yyfree(th.th_version M4_YY_CALL_LAST_ARG);",
+ " th.th_version = NULL;",
+ " }",
+ "",
+ " return rv;",
+ "}",
+ "",
+ "/** Load the DFA tables for this scanner from the given stream. */",
+ "int yytables_fload YYFARGS1(FILE *, fp)",
+ "{",
+ "",
+ " if( yytbl_fload(fp, YYTABLES_NAME M4_YY_CALL_LAST_ARG) != 0)",
+ " return -1;",
+ " return 0;",
+ "}",
+ "",
+ "/** Destroy the loaded tables, freeing memory, etc.. */",
+ "int yytables_destroy YYFARGS0(void)",
+ "{ ",
+ " struct yytbl_dmap *dmap=0;",
+ "",
+ " if(!M4_YY_TABLES_VERIFY){",
+ " /* Walk the dmap, freeing the pointers */",
+ " for(dmap=yydmap; dmap->dm_id; dmap++) {",
+ " void * v;",
+ " v = dmap->dm_arr;",
+ " if(v && *(char**)v){",
+ " yyfree(*(char**)v M4_YY_CALL_LAST_ARG);",
+ " *(char**)v = NULL;",
+ " }",
+ " }",
+ " }",
+ "",
+ " return 0;",
+ "}",
+ "",
+ "/* end table serialization code definitions */",
+ "%endif",
+ "",
+ "",
+ "m4_ifdef([[M4_YY_MAIN]], [[",
+ "int main M4_YY_PARAMS(void);",
+ "",
+ "int main ()",
+ "{",
+ "",
+ "%if-reentrant",
+ " yyscan_t lexer;",
+ " yylex_init(&lexer);",
+ " yylex( lexer );",
+ " yylex_destroy( lexer);",
+ "",
+ "%endif",
+ "%if-not-reentrant",
+ " yylex();",
+ "%endif",
+ "",
+ " return 0;",
+ "}",
+ "]])",
+ "",
+ "%ok-for-header",
+ "m4_ifdef( [[M4_YY_IN_HEADER]],",
+ "[[",
+ "#undef YY_NEW_FILE",
+ "#undef YY_FLUSH_BUFFER",
+ "#undef yy_set_bol",
+ "#undef yy_new_buffer",
+ "#undef yy_set_interactive",
+ "#undef YY_DO_BEFORE_ACTION",
+ "",
+ "#ifdef YY_DECL_IS_OURS",
+ "#undef YY_DECL_IS_OURS",
+ "#undef YY_DECL",
+ "#endif",
+ "]])",
+ 0
+};
diff --git a/usr.bin/lex/libmain.c b/usr.bin/lex/libmain.c
index 417155f2b0d..37bc4ee1347 100644
--- a/usr.bin/lex/libmain.c
+++ b/usr.bin/lex/libmain.c
@@ -1,19 +1,35 @@
-/* $OpenBSD: libmain.c,v 1.7 2012/12/05 23:20:25 deraadt Exp $ */
+/* $OpenBSD: libmain.c,v 1.8 2015/11/19 19:43:40 tedu Exp $ */
/* libmain - flex run-time support library "main" function */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/libmain.c,v 1.7 2012/12/05 23:20:25 deraadt Exp $ */
+/* This file is part of flex. */
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
-int yylex(void);
-int main(int, char **);
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
-/* ARGSUSED */
-int
-main(int argc, char *argv[])
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+extern int yylex ();
+
+int main (argc, argv)
+ int argc;
+ char *argv[];
{
- while (yylex() != 0)
- ;
+ while (yylex () != 0) ;
return 0;
}
diff --git a/usr.bin/lex/libyywrap.c b/usr.bin/lex/libyywrap.c
index 3c42a6d6c3a..f359c95ee5d 100644
--- a/usr.bin/lex/libyywrap.c
+++ b/usr.bin/lex/libyywrap.c
@@ -1,13 +1,29 @@
-/* $OpenBSD: libyywrap.c,v 1.7 2012/12/05 23:20:25 deraadt Exp $ */
+/* $OpenBSD: libyywrap.c,v 1.8 2015/11/19 19:43:40 tedu Exp $ */
/* libyywrap - flex run-time support library "yywrap" function */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/libyywrap.c,v 1.7 2012/12/05 23:20:25 deraadt Exp $ */
+/* This file is part of flex. */
-int yywrap(void);
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
-int
-yywrap(void)
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+int yywrap (void)
{
return 1;
}
diff --git a/usr.bin/lex/main.c b/usr.bin/lex/main.c
index ce8e98cfa83..05e3f267e72 100644
--- a/usr.bin/lex/main.c
+++ b/usr.bin/lex/main.c
@@ -1,354 +1,496 @@
-/* $OpenBSD: main.c,v 1.15 2015/10/10 05:47:54 deraadt Exp $ */
+/* $OpenBSD: main.c,v 1.16 2015/11/19 19:43:40 tedu Exp $ */
/* flex - tool to generate fast lexical analyzers */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/main.c,v 1.15 2015/10/10 05:47:54 deraadt Exp $ */
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
#include "flexdef.h"
#include "version.h"
+#include "options.h"
+#include "tables.h"
static char flex_version[] = FLEX_VERSION;
-
/* declare functions that have forward references */
-void flexinit PROTO((int, char**));
-void readin PROTO((void));
-void set_up_initial_allocations PROTO((void));
-
-#ifdef NEED_ARGV_FIXUP
-extern void argv_fixup PROTO((int *, char ***));
-#endif
+void flexinit PROTO ((int, char **));
+void readin PROTO ((void));
+void set_up_initial_allocations PROTO ((void));
+static char *basename2 PROTO ((char *path, int should_strip_ext));
/* these globals are all defined and commented in flexdef.h */
-int printstats, syntaxerror, eofseen, ddebug, trace, nowarn, spprdflt;
-int interactive, caseins, lex_compat, do_yylineno, useecs, fulltbl, usemecs;
-int fullspd, gen_line_dirs, performance_report, backing_up_report;
-int C_plus_plus, long_align, use_read, yytext_is_array, do_yywrap, csize;
-int yymore_used, reject, real_reject, continued_action, in_rule;
-int yymore_really_used, reject_really_used;
-int datapos, dataline, linenum, out_linenum;
-FILE *skelfile = NULL;
-int skel_ind = 0;
-char *action_array;
-int action_size, defs1_offset, prolog_offset, action_offset, action_index;
-char *infilename = NULL, *outfilename = NULL;
-int did_outfilename;
-char *prefix, *yyclass;
-int do_stdinit, use_stdout;
-int onestate[ONE_STACK_SIZE], onesym[ONE_STACK_SIZE];
-int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;
-int current_mns, current_max_rules;
-int num_rules, num_eof_rules, default_rule, lastnfa;
-int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;
-int *accptnum, *assoc_rule, *state_type;
-int *rule_type, *rule_linenum, *rule_useful;
-int current_state_type;
-int variable_trailing_context_rules;
-int numtemps, numprots, protprev[MSP], protnext[MSP], prottbl[MSP];
-int protcomst[MSP], firstprot, lastprot, protsave[PROT_SAVE_SIZE];
-int numecs, nextecm[CSIZE + 1], ecgroup[CSIZE + 1], nummecs, tecfwd[CSIZE + 1];
-int tecbck[CSIZE + 1];
-int lastsc, *scset, *scbol, *scxclu, *sceof;
-int current_max_scs;
-char **scname;
-int current_max_dfa_size, current_max_xpairs;
-int current_max_template_xpairs, current_max_dfas;
-int lastdfa, *nxt, *chk, *tnxt;
-int *base, *def, *nultrans, NUL_ec, tblend, firstfree, **dss, *dfasiz;
+int printstats, syntaxerror, eofseen, ddebug, trace, nowarn, spprdflt;
+int interactive, lex_compat, posix_compat, do_yylineno,
+ useecs, fulltbl, usemecs;
+int fullspd, gen_line_dirs, performance_report, backing_up_report;
+int C_plus_plus, long_align, use_read, yytext_is_array, do_yywrap,
+ csize;
+int reentrant, bison_bridge_lval, bison_bridge_lloc;
+int yymore_used, reject, real_reject, continued_action, in_rule;
+int yymore_really_used, reject_really_used;
+int datapos, dataline, linenum;
+FILE *skelfile = NULL;
+int skel_ind = 0;
+char *action_array;
+int action_size, defs1_offset, prolog_offset, action_offset,
+ action_index;
+char *infilename = NULL, *outfilename = NULL, *headerfilename = NULL;
+int did_outfilename;
+char *prefix, *yyclass, *extra_type = NULL;
+int do_stdinit, use_stdout;
+int onestate[ONE_STACK_SIZE], onesym[ONE_STACK_SIZE];
+int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;
+int maximum_mns, current_mns, current_max_rules;
+int num_rules, num_eof_rules, default_rule, lastnfa;
+int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;
+int *accptnum, *assoc_rule, *state_type;
+int *rule_type, *rule_linenum, *rule_useful;
+int current_state_type;
+int variable_trailing_context_rules;
+int numtemps, numprots, protprev[MSP], protnext[MSP], prottbl[MSP];
+int protcomst[MSP], firstprot, lastprot, protsave[PROT_SAVE_SIZE];
+int numecs, nextecm[CSIZE + 1], ecgroup[CSIZE + 1], nummecs,
+ tecfwd[CSIZE + 1];
+int tecbck[CSIZE + 1];
+int lastsc, *scset, *scbol, *scxclu, *sceof;
+int current_max_scs;
+char **scname;
+int current_max_dfa_size, current_max_xpairs;
+int current_max_template_xpairs, current_max_dfas;
+int lastdfa, *nxt, *chk, *tnxt;
+int *base, *def, *nultrans, NUL_ec, tblend, firstfree, **dss, *dfasiz;
union dfaacc_union *dfaacc;
-int *accsiz, *dhash, numas;
-int numsnpairs, jambase, jamstate;
-int lastccl, *cclmap, *ccllen, *cclng, cclreuse;
-int current_maxccls, current_max_ccl_tbl_size;
-Char *ccltbl;
-char nmstr[MAXLINE];
-int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs;
-int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave;
-int num_backing_up, bol_needed;
-FILE *backing_up_file;
-int end_of_buffer_state;
-char **input_files;
-int num_input_files;
+int *accsiz, *dhash, numas;
+int numsnpairs, jambase, jamstate;
+int lastccl, *cclmap, *ccllen, *cclng, cclreuse;
+int current_maxccls, current_max_ccl_tbl_size;
+Char *ccltbl;
+char nmstr[MAXLINE];
+int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs;
+int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave;
+int num_backing_up, bol_needed;
+FILE *backing_up_file;
+int end_of_buffer_state;
+char **input_files;
+int num_input_files;
+jmp_buf flex_main_jmp_buf;
+bool *rule_has_nl, *ccl_has_nl;
+int nlch = '\n';
+bool ansi_func_defs, ansi_func_protos;
+
+bool tablesext, tablesverify, gentables;
+char *tablesfilename=0,*tablesname=0;
+struct yytbl_writer tableswr;
/* Make sure program_name is initialized so we don't crash if writing
* out an error message before getting the program name from argv[0].
*/
-char *program_name = "flex";
+char *program_name = "flex";
#ifndef SHORT_FILE_NAMES
-static const char outfile_template[] = "lex.%s.%s";
-static const char backing_name[] = "lex.backup";
+static const char *outfile_template = "lex.%s.%s";
+static const char *backing_name = "lex.backup";
+static const char *tablesfile_template = "lex.%s.tables";
#else
-static const char outfile_template[] = "lex%s.%s";
-static const char backing_name[] = "lex.bck";
-#endif
-
-#ifdef THINK_C
-#include <console.h>
+static const char *outfile_template = "lex%s.%s";
+static const char *backing_name = "lex.bck";
+static const char *tablesfile_template = "lex%s.tbl";
#endif
#ifdef MS_DOS
extern unsigned _stklen = 16384;
#endif
+/* From scan.l */
+extern FILE* yyout;
+
static char outfile_path[MAXLINE];
static int outfile_created = 0;
static char *skelname = NULL;
-
-
-int main( argc, argv )
-int argc;
-char **argv;
- {
- int i;
-
- if (pledge("stdio rpath wpath cpath", NULL) == -1)
- {
- fprintf( stderr, _( "%s: pledge\n" ),
- program_name);
- exit(1);
- }
-
-#ifdef THINK_C
- argc = ccommand( &argv );
-#endif
-#ifdef NEED_ARGV_FIXUP
- argv_fixup( &argc, &argv );
-#endif
-
- flexinit( argc, argv );
-
- readin();
-
- ntod();
-
- for ( i = 1; i <= num_rules; ++i )
- if ( ! rule_useful[i] && i != default_rule )
- line_warning( _( "rule cannot be matched" ),
- rule_linenum[i] );
-
- if ( spprdflt && ! reject && rule_useful[default_rule] )
- line_warning(
- _( "-s option given but default rule can be matched" ),
- rule_linenum[default_rule] );
+static int _stdout_closed = 0; /* flag to prevent double-fclose() on stdout. */
+const char *escaped_qstart = "[[]]M4_YY_NOOP[M4_YY_NOOP[M4_YY_NOOP[[]]";
+const char *escaped_qend = "[[]]M4_YY_NOOP]M4_YY_NOOP]M4_YY_NOOP[[]]";
+
+/* For debugging. The max number of filters to apply to skeleton. */
+static int preproc_level = 1000;
+
+int flex_main PROTO ((int argc, char *argv[]));
+int main PROTO ((int argc, char *argv[]));
+
+int flex_main (argc, argv)
+ int argc;
+ char *argv[];
+{
+ int i, exit_status, child_status;
+
+ /* Set a longjmp target. Yes, I know it's a hack, but it gets worse: The
+ * return value of setjmp, if non-zero, is the desired exit code PLUS ONE.
+ * For example, if you want 'main' to return with code '2', then call
+ * longjmp() with an argument of 3. This is because it is invalid to
+ * specify a value of 0 to longjmp. FLEX_EXIT(n) should be used instead of
+ * exit(n);
+ */
+ exit_status = setjmp (flex_main_jmp_buf);
+ if (exit_status){
+ if (stdout && !_stdout_closed && !ferror(stdout)){
+ fflush(stdout);
+ fclose(stdout);
+ }
+ while (wait(&child_status) > 0){
+ if (!WIFEXITED (child_status)
+ || WEXITSTATUS (child_status) != 0){
+ /* report an error of a child
+ */
+ if( exit_status <= 1 )
+ exit_status = 2;
+
+ }
+ }
+ return exit_status - 1;
+ }
+
+ flexinit (argc, argv);
+
+ readin ();
+
+ skelout ();
+ /* %% [1.5] DFA */
+ ntod ();
+
+ for (i = 1; i <= num_rules; ++i)
+ if (!rule_useful[i] && i != default_rule)
+ line_warning (_("rule cannot be matched"),
+ rule_linenum[i]);
+
+ if (spprdflt && !reject && rule_useful[default_rule])
+ line_warning (_
+ ("-s option given but default rule can be matched"),
+ rule_linenum[default_rule]);
/* Generate the C state transition tables from the DFA. */
- make_tables();
+ make_tables ();
/* Note, flexend does not return. It exits with its argument
* as status.
*/
- flexend( 0 );
+ flexend (0);
+
+ return 0; /* keep compilers/lint happy */
+}
+
+/* Wrapper around flex_main, so flex_main can be built as a library. */
+int main (argc, argv)
+ int argc;
+ char *argv[];
+{
+#if ENABLE_NLS
+#if HAVE_LOCALE_H
+ setlocale (LC_MESSAGES, "");
+ setlocale (LC_CTYPE, "");
+ textdomain (PACKAGE);
+ bindtextdomain (PACKAGE, LOCALEDIR);
+#endif
+#endif
- return 0;
+ if (pledge("stdio rpath wpath cpath proc exec", NULL) == -1)
+ {
+ fprintf( stderr, _( "%s: pledge\n"),
+ program_name);
+ exit(1);
}
+ return flex_main (argc, argv);
+}
/* check_options - check user-specified options */
-void check_options()
- {
- int i;
+void check_options ()
+{
+ int i;
+ const char * m4 = NULL;
- if ( lex_compat )
- {
- if ( C_plus_plus )
- flexerror( _( "Can't use -+ with -l option" ) );
+ if (lex_compat) {
+ if (C_plus_plus)
+ flexerror (_("Can't use -+ with -l option"));
- if ( fulltbl || fullspd )
- flexerror( _( "Can't use -f or -F with -l option" ) );
+ if (fulltbl || fullspd)
+ flexerror (_("Can't use -f or -F with -l option"));
- /* Don't rely on detecting use of yymore() and REJECT,
- * just assume they'll be used.
- */
- yymore_really_used = reject_really_used = true;
+ if (reentrant || bison_bridge_lval)
+ flexerror (_
+ ("Can't use --reentrant or --bison-bridge with -l option"));
yytext_is_array = true;
do_yylineno = true;
use_read = false;
- }
+ }
+
- if ( do_yylineno )
+#if 0
+ /* This makes no sense whatsoever. I'm removing it. */
+ if (do_yylineno)
/* This should really be "maintain_backup_tables = true" */
reject_really_used = true;
+#endif
- if ( csize == unspecified )
- {
- if ( (fulltbl || fullspd) && ! useecs )
+ if (csize == unspecified) {
+ if ((fulltbl || fullspd) && !useecs)
csize = DEFAULT_CSIZE;
else
csize = CSIZE;
- }
+ }
- if ( interactive == unspecified )
- {
- if ( fulltbl || fullspd )
+ if (interactive == unspecified) {
+ if (fulltbl || fullspd)
interactive = false;
else
interactive = true;
- }
+ }
- if ( fulltbl || fullspd )
- {
- if ( usemecs )
- flexerror(
- _( "-Cf/-CF and -Cm don't make sense together" ) );
+ if (fulltbl || fullspd) {
+ if (usemecs)
+ flexerror (_
+ ("-Cf/-CF and -Cm don't make sense together"));
- if ( interactive )
- flexerror( _( "-Cf/-CF and -I are incompatible" ) );
+ if (interactive)
+ flexerror (_("-Cf/-CF and -I are incompatible"));
- if ( lex_compat )
- flexerror(
- _( "-Cf/-CF are incompatible with lex-compatibility mode" ) );
+ if (lex_compat)
+ flexerror (_
+ ("-Cf/-CF are incompatible with lex-compatibility mode"));
- if ( do_yylineno )
- flexerror(
- _( "-Cf/-CF and %option yylineno are incompatible" ) );
- if ( fulltbl && fullspd )
- flexerror( _( "-Cf and -CF are mutually exclusive" ) );
- }
+ if (fulltbl && fullspd)
+ flexerror (_
+ ("-Cf and -CF are mutually exclusive"));
+ }
- if ( C_plus_plus && fullspd )
- flexerror( _( "Can't use -+ with -CF option" ) );
+ if (C_plus_plus && fullspd)
+ flexerror (_("Can't use -+ with -CF option"));
- if ( C_plus_plus && yytext_is_array )
- {
- warn( _( "%array incompatible with -+ option" ) );
+ if (C_plus_plus && yytext_is_array) {
+ warn (_("%array incompatible with -+ option"));
yytext_is_array = false;
- }
+ }
+
+ if (C_plus_plus && (reentrant))
+ flexerror (_("Options -+ and --reentrant are mutually exclusive."));
+
+ if (C_plus_plus && bison_bridge_lval)
+ flexerror (_("bison bridge not supported for the C++ scanner."));
- if ( useecs )
- { /* Set up doubly-linked equivalence classes. */
+
+ if (useecs) { /* Set up doubly-linked equivalence classes. */
/* We loop all the way up to csize, since ecgroup[csize] is
* the position used for NUL characters.
*/
ecgroup[1] = NIL;
- for ( i = 2; i <= csize; ++i )
- {
+ for (i = 2; i <= csize; ++i) {
ecgroup[i] = i - 1;
nextecm[i - 1] = i;
- }
+ }
nextecm[csize] = NIL;
- }
+ }
- else
- {
+ else {
/* Put everything in its own equivalence class. */
- for ( i = 1; i <= csize; ++i )
- {
+ for (i = 1; i <= csize; ++i) {
ecgroup[i] = i;
nextecm[i] = BAD_SUBSCRIPT; /* to catch errors */
- }
}
+ }
- if ( ! use_stdout )
- {
- FILE *prev_stdout;
+ if (!ansi_func_defs)
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_ANSI_FUNC_DEFS", NULL);
- if ( ! did_outfilename )
- {
- char *suffix;
+ if (!ansi_func_protos)
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_ANSI_FUNC_PROTOS", NULL);
- if ( C_plus_plus )
+ if (extra_type)
+ buf_m4_define( &m4defs_buf, "M4_EXTRA_TYPE_DEFS", extra_type);
+
+ if (!use_stdout) {
+ FILE *prev_stdout;
+
+ if (!did_outfilename) {
+ char *suffix;
+
+ if (C_plus_plus)
suffix = "cc";
else
suffix = "c";
- snprintf( outfile_path, sizeof outfile_path,
- outfile_template, prefix, suffix );
+ snprintf (outfile_path, sizeof(outfile_path), outfile_template,
+ prefix, suffix);
outfilename = outfile_path;
- }
+ }
- prev_stdout = freopen( outfilename, "w", stdout );
+ prev_stdout = freopen (outfilename, "w+", stdout);
- if ( prev_stdout == NULL )
- lerrsf( _( "could not create %s" ), outfilename );
+ if (prev_stdout == NULL)
+ lerrsf (_("could not create %s"), outfilename);
outfile_created = 1;
- }
+ }
- if ( skelname && (skelfile = fopen( skelname, "r" )) == NULL )
- lerrsf( _( "can't open skeleton file %s" ), skelname );
- if ( strcmp( prefix, "yy" ) )
- {
-#define GEN_PREFIX(name) out_str3( "#define yy%s %s%s\n", name, prefix, name )
- if ( C_plus_plus )
- GEN_PREFIX( "FlexLexer" );
- else
- {
- GEN_PREFIX( "_create_buffer" );
- GEN_PREFIX( "_delete_buffer" );
- GEN_PREFIX( "_scan_buffer" );
- GEN_PREFIX( "_scan_string" );
- GEN_PREFIX( "_scan_bytes" );
- GEN_PREFIX( "_flex_debug" );
- GEN_PREFIX( "_init_buffer" );
- GEN_PREFIX( "_flush_buffer" );
- GEN_PREFIX( "_load_buffer_state" );
- GEN_PREFIX( "_switch_to_buffer" );
- GEN_PREFIX( "in" );
- GEN_PREFIX( "leng" );
- GEN_PREFIX( "lex" );
- GEN_PREFIX( "out" );
- GEN_PREFIX( "restart" );
- GEN_PREFIX( "text" );
-
- if ( do_yylineno )
- GEN_PREFIX( "lineno" );
- }
+ /* Setup the filter chain. */
+ output_chain = filter_create_int(NULL, filter_tee_header, headerfilename);
+ if ( !(m4 = getenv("M4")))
+ m4 = M4;
+ filter_create_ext(output_chain, m4, "-P", 0);
+ filter_create_int(output_chain, filter_fix_linedirs, NULL);
+
+ /* For debugging, only run the requested number of filters. */
+ if (preproc_level > 0) {
+ filter_truncate(output_chain, preproc_level);
+ filter_apply_chain(output_chain);
+ }
+ yyout = stdout;
- if ( do_yywrap )
- GEN_PREFIX( "wrap" );
- outn( "" );
+ /* always generate the tablesverify flag. */
+ buf_m4_define (&m4defs_buf, "M4_YY_TABLES_VERIFY", tablesverify ? "1" : "0");
+ if (tablesext)
+ gentables = false;
+
+ if (tablesverify)
+ /* force generation of C tables. */
+ gentables = true;
+
+
+ if (tablesext) {
+ FILE *tablesout;
+ struct yytbl_hdr hdr;
+ char *pname = 0;
+ int nbytes = 0;
+
+ buf_m4_define (&m4defs_buf, "M4_YY_TABLES_EXTERNAL", NULL);
+
+ if (!tablesfilename) {
+ nbytes = strlen (prefix) + strlen (tablesfile_template) + 2;
+ tablesfilename = pname = (char *) calloc (nbytes, 1);
+ snprintf (pname, nbytes, tablesfile_template, prefix);
}
- if ( did_outfilename )
- line_directive_out( stdout, 0 );
+ if ((tablesout = fopen (tablesfilename, "w")) == NULL)
+ lerrsf (_("could not create %s"), tablesfilename);
+ if (pname)
+ free (pname);
+ tablesfilename = 0;
+
+ yytbl_writer_init (&tableswr, tablesout);
- skelout();
+ nbytes = strlen (prefix) + strlen ("tables") + 2;
+ tablesname = (char *) calloc (nbytes, 1);
+ snprintf (tablesname, nbytes, "%stables", prefix);
+ yytbl_hdr_init (&hdr, flex_version, tablesname);
+
+ if (yytbl_hdr_fwrite (&tableswr, &hdr) <= 0)
+ flexerror (_("could not write tables header"));
}
+ if (skelname && (skelfile = fopen (skelname, "r")) == NULL)
+ lerrsf (_("can't open skeleton file %s"), skelname);
+
+ if (reentrant) {
+ buf_m4_define (&m4defs_buf, "M4_YY_REENTRANT", NULL);
+ if (yytext_is_array)
+ buf_m4_define (&m4defs_buf, "M4_YY_TEXT_IS_ARRAY", NULL);
+ }
+
+ if ( bison_bridge_lval)
+ buf_m4_define (&m4defs_buf, "M4_YY_BISON_LVAL", NULL);
+
+ if ( bison_bridge_lloc)
+ buf_m4_define (&m4defs_buf, "<M4_YY_BISON_LLOC>", NULL);
+
+ buf_m4_define(&m4defs_buf, "M4_YY_PREFIX", prefix);
+
+ if (did_outfilename)
+ line_directive_out (stdout, 0);
+
+ if (do_yylineno)
+ buf_m4_define (&m4defs_buf, "M4_YY_USE_LINENO", NULL);
+
+ /* Create the alignment type. */
+ buf_strdefine (&userdef_buf, "YY_INT_ALIGNED",
+ long_align ? "long int" : "short int");
+
+ /* Define the start condition macros. */
+ {
+ struct Buf tmpbuf;
+ buf_init(&tmpbuf, sizeof(char));
+ for (i = 1; i <= lastsc; i++) {
+ char *str, *fmt = "#define %s %d\n";
+ size_t strsz;
+
+ str = (char*)flex_alloc(strsz = strlen(fmt) + strlen(scname[i]) + (int)(1 + log10(i)) + 2);
+ if (!str)
+ flexfatal(_("allocation of macro definition failed"));
+ snprintf(str, strsz, fmt, scname[i], i - 1);
+ buf_strappend(&tmpbuf, str);
+ free(str);
+ }
+ buf_m4_define(&m4defs_buf, "M4_YY_SC_DEFS", tmpbuf.elts);
+ buf_destroy(&tmpbuf);
+ }
+
+ /* This is where we begin writing to the file. */
+
+ /* Dump the %top code. */
+ if( top_buf.elts)
+ outn((char*) top_buf.elts);
+
+ /* Dump the m4 definitions. */
+ buf_print_strings(&m4defs_buf, stdout);
+ m4defs_buf.nelts = 0; /* memory leak here. */
+
+ /* Place a bogus line directive, it will be fixed in the filter. */
+ outn("#line 0 \"M4_YY_OUTFILE_NAME\"\n");
+
+ /* Dump the user defined preproc directives. */
+ if (userdef_buf.elts)
+ outn ((char *) (userdef_buf.elts));
+
+ skelout ();
+ /* %% [1.0] */
+}
/* flexend - terminate flex
*
@@ -356,494 +498,958 @@ void check_options()
* This routine does not return.
*/
-void flexend( exit_status )
-int exit_status;
+void flexend (exit_status)
+ int exit_status;
- {
- int tblsiz;
- int unlink();
-
- if ( skelfile != NULL )
- {
- if ( ferror( skelfile ) )
- lerrsf( _( "input error reading skeleton file %s" ),
- skelname );
-
- else if ( fclose( skelfile ) )
- lerrsf( _( "error closing skeleton file %s" ),
- skelname );
- }
+{
+ static int called_before = -1; /* prevent infinite recursion. */
+ int tblsiz;
- if ( exit_status != 0 && outfile_created )
- {
- if ( ferror( stdout ) )
- lerrsf( _( "error writing output file %s" ),
- outfilename );
+ if (++called_before)
+ FLEX_EXIT (exit_status);
- else if ( fclose( stdout ) )
- lerrsf( _( "error closing output file %s" ),
- outfilename );
+ if (skelfile != NULL) {
+ if (ferror (skelfile))
+ lerrsf (_("input error reading skeleton file %s"),
+ skelname);
- else if ( unlink( outfilename ) )
- lerrsf( _( "error deleting output file %s" ),
- outfilename );
+ else if (fclose (skelfile))
+ lerrsf (_("error closing skeleton file %s"),
+ skelname);
+ }
+
+#if 0
+ fprintf (header_out,
+ "#ifdef YY_HEADER_EXPORT_START_CONDITIONS\n");
+ fprintf (header_out,
+ "/* Beware! Start conditions are not prefixed. */\n");
+
+ /* Special case for "INITIAL" */
+ fprintf (header_out,
+ "#undef INITIAL\n#define INITIAL 0\n");
+ for (i = 2; i <= lastsc; i++)
+ fprintf (header_out, "#define %s %d\n", scname[i], i - 1);
+ fprintf (header_out,
+ "#endif /* YY_HEADER_EXPORT_START_CONDITIONS */\n\n");
+
+ /* Kill ALL flex-related macros. This is so the user
+ * can #include more than one generated header file. */
+ fprintf (header_out, "#ifndef YY_HEADER_NO_UNDEFS\n");
+ fprintf (header_out,
+ "/* Undefine all internal macros, etc., that do no belong in the header. */\n\n");
+
+ {
+ const char * undef_list[] = {
+
+ "BEGIN",
+ "ECHO",
+ "EOB_ACT_CONTINUE_SCAN",
+ "EOB_ACT_END_OF_FILE",
+ "EOB_ACT_LAST_MATCH",
+ "FLEX_SCANNER",
+ "FLEX_STD",
+ "REJECT",
+ "YYFARGS0",
+ "YYFARGS1",
+ "YYFARGS2",
+ "YYFARGS3",
+ "YYLMAX",
+ "YYSTATE",
+ "YY_AT_BOL",
+ "YY_BREAK",
+ "YY_BUFFER_EOF_PENDING",
+ "YY_BUFFER_NEW",
+ "YY_BUFFER_NORMAL",
+ "YY_BUF_SIZE",
+ "M4_YY_CALL_LAST_ARG",
+ "M4_YY_CALL_ONLY_ARG",
+ "YY_CURRENT_BUFFER",
+ "YY_DECL",
+ "M4_YY_DECL_LAST_ARG",
+ "M4_YY_DEF_LAST_ARG",
+ "M4_YY_DEF_ONLY_ARG",
+ "YY_DO_BEFORE_ACTION",
+ "YY_END_OF_BUFFER",
+ "YY_END_OF_BUFFER_CHAR",
+ "YY_EXIT_FAILURE",
+ "YY_EXTRA_TYPE",
+ "YY_FATAL_ERROR",
+ "YY_FLEX_DEFINED_ECHO",
+ "YY_FLEX_LEX_COMPAT",
+ "YY_FLEX_MAJOR_VERSION",
+ "YY_FLEX_MINOR_VERSION",
+ "YY_FLEX_SUBMINOR_VERSION",
+ "YY_FLUSH_BUFFER",
+ "YY_G",
+ "YY_INPUT",
+ "YY_INTERACTIVE",
+ "YY_INT_ALIGNED",
+ "YY_LAST_ARG",
+ "YY_LESS_LINENO",
+ "YY_LEX_ARGS",
+ "YY_LEX_DECLARATION",
+ "YY_LEX_PROTO",
+ "YY_MAIN",
+ "YY_MORE_ADJ",
+ "YY_NEED_STRLEN",
+ "YY_NEW_FILE",
+ "YY_NULL",
+ "YY_NUM_RULES",
+ "YY_ONLY_ARG",
+ "YY_PARAMS",
+ "YY_PROTO",
+ "M4_YY_PROTO_LAST_ARG",
+ "M4_YY_PROTO_ONLY_ARG void",
+ "YY_READ_BUF_SIZE",
+ "YY_REENTRANT",
+ "YY_RESTORE_YY_MORE_OFFSET",
+ "YY_RULE_SETUP",
+ "YY_SC_TO_UI",
+ "YY_SKIP_YYWRAP",
+ "YY_START",
+ "YY_START_STACK_INCR",
+ "YY_STATE_EOF",
+ "YY_STDINIT",
+ "YY_TRAILING_HEAD_MASK",
+ "YY_TRAILING_MASK",
+ "YY_USER_ACTION",
+ "YY_USE_CONST",
+ "YY_USE_PROTOS",
+ "unput",
+ "yyTABLES_NAME",
+ "yy_create_buffer",
+ "yy_delete_buffer",
+ "yy_flex_debug",
+ "yy_flush_buffer",
+ "yy_init_buffer",
+ "yy_load_buffer_state",
+ "yy_new_buffer",
+ "yy_scan_buffer",
+ "yy_scan_bytes",
+ "yy_scan_string",
+ "yy_set_bol",
+ "yy_set_interactive",
+ "yy_switch_to_buffer",
+ "yypush_buffer_state",
+ "yypop_buffer_state",
+ "yyensure_buffer_stack",
+ "yyalloc",
+ "yyconst",
+ "yyextra",
+ "yyfree",
+ "yyget_debug",
+ "yyget_extra",
+ "yyget_in",
+ "yyget_leng",
+ "yyget_lineno",
+ "yyget_lloc",
+ "yyget_lval",
+ "yyget_out",
+ "yyget_text",
+ "yyin",
+ "yyleng",
+ "yyless",
+ "yylex",
+ "yylex_destroy",
+ "yylex_init",
+ "yylex_init_extra",
+ "yylineno",
+ "yylloc",
+ "yylval",
+ "yymore",
+ "yyout",
+ "yyrealloc",
+ "yyrestart",
+ "yyset_debug",
+ "yyset_extra",
+ "yyset_in",
+ "yyset_lineno",
+ "yyset_lloc",
+ "yyset_lval",
+ "yyset_out",
+ "yytables_destroy",
+ "yytables_fload",
+ "yyterminate",
+ "yytext",
+ "yytext_ptr",
+ "yywrap",
+
+ /* must be null-terminated */
+ NULL};
+
+
+ for (i=0; undef_list[i] != NULL; i++)
+ fprintf (header_out, "#undef %s\n", undef_list[i]);
+ }
+
+ /* undef any of the auto-generated symbols. */
+ for (i = 0; i < defs_buf.nelts; i++) {
+
+ /* don't undef start conditions */
+ if (sclookup (((char **) defs_buf.elts)[i]) > 0)
+ continue;
+ fprintf (header_out, "#undef %s\n",
+ ((char **) defs_buf.elts)[i]);
}
- if ( backing_up_report && backing_up_file )
- {
- if ( num_backing_up == 0 )
- fprintf( backing_up_file, _( "No backing up.\n" ) );
- else if ( fullspd || fulltbl )
- fprintf( backing_up_file,
- _( "%d backing up (non-accepting) states.\n" ),
- num_backing_up );
+ fprintf (header_out,
+ "#endif /* !YY_HEADER_NO_UNDEFS */\n");
+ fprintf (header_out, "\n");
+ fprintf (header_out, "#undef %sIN_HEADER\n", prefix);
+ fprintf (header_out, "#endif /* %sHEADER_H */\n", prefix);
+
+ if (ferror (header_out))
+ lerrsf (_("error creating header file %s"),
+ headerfilename);
+ fflush (header_out);
+ fclose (header_out);
+#endif
+
+ if (exit_status != 0 && outfile_created) {
+ if (ferror (stdout))
+ lerrsf (_("error writing output file %s"),
+ outfilename);
+
+ else if ((_stdout_closed = 1) && fclose (stdout))
+ lerrsf (_("error closing output file %s"),
+ outfilename);
+
+ else if (unlink (outfilename))
+ lerrsf (_("error deleting output file %s"),
+ outfilename);
+ }
+
+
+ if (backing_up_report && backing_up_file) {
+ if (num_backing_up == 0)
+ fprintf (backing_up_file, _("No backing up.\n"));
+ else if (fullspd || fulltbl)
+ fprintf (backing_up_file,
+ _
+ ("%d backing up (non-accepting) states.\n"),
+ num_backing_up);
else
- fprintf( backing_up_file,
- _( "Compressed tables always back up.\n" ) );
+ fprintf (backing_up_file,
+ _("Compressed tables always back up.\n"));
- if ( ferror( backing_up_file ) )
- lerrsf( _( "error writing backup file %s" ),
- backing_name );
+ if (ferror (backing_up_file))
+ lerrsf (_("error writing backup file %s"),
+ backing_name);
- else if ( fclose( backing_up_file ) )
- lerrsf( _( "error closing backup file %s" ),
- backing_name );
- }
+ else if (fclose (backing_up_file))
+ lerrsf (_("error closing backup file %s"),
+ backing_name);
+ }
- if ( printstats )
- {
- fprintf( stderr, _( "%s version %s usage statistics:\n" ),
- program_name, flex_version );
-
- fprintf( stderr, _( " scanner options: -" ) );
-
- if ( C_plus_plus )
- putc( '+', stderr );
- if ( backing_up_report )
- putc( 'b', stderr );
- if ( ddebug )
- putc( 'd', stderr );
- if ( caseins )
- putc( 'i', stderr );
- if ( lex_compat )
- putc( 'l', stderr );
- if ( performance_report > 0 )
- putc( 'p', stderr );
- if ( performance_report > 1 )
- putc( 'p', stderr );
- if ( spprdflt )
- putc( 's', stderr );
- if ( use_stdout )
- putc( 't', stderr );
- if ( printstats )
- putc( 'v', stderr ); /* always true! */
- if ( nowarn )
- putc( 'w', stderr );
- if ( interactive == false )
- putc( 'B', stderr );
- if ( interactive == true )
- putc( 'I', stderr );
- if ( ! gen_line_dirs )
- putc( 'L', stderr );
- if ( trace )
- putc( 'T', stderr );
-
- if ( csize == unspecified )
+ if (printstats) {
+ fprintf (stderr, _("%s version %s usage statistics:\n"),
+ program_name, flex_version);
+
+ fprintf (stderr, _(" scanner options: -"));
+
+ if (C_plus_plus)
+ putc ('+', stderr);
+ if (backing_up_report)
+ putc ('b', stderr);
+ if (ddebug)
+ putc ('d', stderr);
+ if (sf_case_ins())
+ putc ('i', stderr);
+ if (lex_compat)
+ putc ('l', stderr);
+ if (posix_compat)
+ putc ('X', stderr);
+ if (performance_report > 0)
+ putc ('p', stderr);
+ if (performance_report > 1)
+ putc ('p', stderr);
+ if (spprdflt)
+ putc ('s', stderr);
+ if (reentrant)
+ fputs ("--reentrant", stderr);
+ if (bison_bridge_lval)
+ fputs ("--bison-bridge", stderr);
+ if (bison_bridge_lloc)
+ fputs ("--bison-locations", stderr);
+ if (use_stdout)
+ putc ('t', stderr);
+ if (printstats)
+ putc ('v', stderr); /* always true! */
+ if (nowarn)
+ putc ('w', stderr);
+ if (interactive == false)
+ putc ('B', stderr);
+ if (interactive == true)
+ putc ('I', stderr);
+ if (!gen_line_dirs)
+ putc ('L', stderr);
+ if (trace)
+ putc ('T', stderr);
+
+ if (csize == unspecified)
/* We encountered an error fairly early on, so csize
* never got specified. Define it now, to prevent
* bogus table sizes being written out below.
*/
csize = 256;
- if ( csize == 128 )
- putc( '7', stderr );
+ if (csize == 128)
+ putc ('7', stderr);
else
- putc( '8', stderr );
-
- fprintf( stderr, " -C" );
-
- if ( long_align )
- putc( 'a', stderr );
- if ( fulltbl )
- putc( 'f', stderr );
- if ( fullspd )
- putc( 'F', stderr );
- if ( useecs )
- putc( 'e', stderr );
- if ( usemecs )
- putc( 'm', stderr );
- if ( use_read )
- putc( 'r', stderr );
-
- if ( did_outfilename )
- fprintf( stderr, " -o%s", outfilename );
-
- if ( skelname )
- fprintf( stderr, " -S%s", skelname );
-
- if ( strcmp( prefix, "yy" ) )
- fprintf( stderr, " -P%s", prefix );
-
- putc( '\n', stderr );
-
- fprintf( stderr, _( " %d/%d NFA states\n" ),
- lastnfa, current_mns );
- fprintf( stderr, _( " %d/%d DFA states (%d words)\n" ),
- lastdfa, current_max_dfas, totnst );
- fprintf( stderr, _( " %d rules\n" ),
- num_rules + num_eof_rules - 1 /* - 1 for def. rule */ );
-
- if ( num_backing_up == 0 )
- fprintf( stderr, _( " No backing up\n" ) );
- else if ( fullspd || fulltbl )
- fprintf( stderr,
- _( " %d backing-up (non-accepting) states\n" ),
- num_backing_up );
+ putc ('8', stderr);
+
+ fprintf (stderr, " -C");
+
+ if (long_align)
+ putc ('a', stderr);
+ if (fulltbl)
+ putc ('f', stderr);
+ if (fullspd)
+ putc ('F', stderr);
+ if (useecs)
+ putc ('e', stderr);
+ if (usemecs)
+ putc ('m', stderr);
+ if (use_read)
+ putc ('r', stderr);
+
+ if (did_outfilename)
+ fprintf (stderr, " -o%s", outfilename);
+
+ if (skelname)
+ fprintf (stderr, " -S%s", skelname);
+
+ if (strcmp (prefix, "yy"))
+ fprintf (stderr, " -P%s", prefix);
+
+ putc ('\n', stderr);
+
+ fprintf (stderr, _(" %d/%d NFA states\n"),
+ lastnfa, current_mns);
+ fprintf (stderr, _(" %d/%d DFA states (%d words)\n"),
+ lastdfa, current_max_dfas, totnst);
+ fprintf (stderr, _(" %d rules\n"),
+ num_rules + num_eof_rules -
+ 1 /* - 1 for def. rule */ );
+
+ if (num_backing_up == 0)
+ fprintf (stderr, _(" No backing up\n"));
+ else if (fullspd || fulltbl)
+ fprintf (stderr,
+ _
+ (" %d backing-up (non-accepting) states\n"),
+ num_backing_up);
else
- fprintf( stderr,
- _( " Compressed tables always back-up\n" ) );
-
- if ( bol_needed )
- fprintf( stderr,
- _( " Beginning-of-line patterns used\n" ) );
-
- fprintf( stderr, _( " %d/%d start conditions\n" ), lastsc,
- current_max_scs );
- fprintf( stderr,
- _( " %d epsilon states, %d double epsilon states\n" ),
- numeps, eps2 );
-
- if ( lastccl == 0 )
- fprintf( stderr, _( " no character classes\n" ) );
+ fprintf (stderr,
+ _
+ (" Compressed tables always back-up\n"));
+
+ if (bol_needed)
+ fprintf (stderr,
+ _(" Beginning-of-line patterns used\n"));
+
+ fprintf (stderr, _(" %d/%d start conditions\n"), lastsc,
+ current_max_scs);
+ fprintf (stderr,
+ _
+ (" %d epsilon states, %d double epsilon states\n"),
+ numeps, eps2);
+
+ if (lastccl == 0)
+ fprintf (stderr, _(" no character classes\n"));
else
- fprintf( stderr,
-_( " %d/%d character classes needed %d/%d words of storage, %d reused\n" ),
- lastccl, current_maxccls,
- cclmap[lastccl] + ccllen[lastccl],
- current_max_ccl_tbl_size, cclreuse );
-
- fprintf( stderr, _( " %d state/nextstate pairs created\n" ),
- numsnpairs );
- fprintf( stderr, _( " %d/%d unique/duplicate transitions\n" ),
- numuniq, numdup );
-
- if ( fulltbl )
- {
+ fprintf (stderr,
+ _
+ (" %d/%d character classes needed %d/%d words of storage, %d reused\n"),
+ lastccl, current_maxccls,
+ cclmap[lastccl] + ccllen[lastccl],
+ current_max_ccl_tbl_size, cclreuse);
+
+ fprintf (stderr, _(" %d state/nextstate pairs created\n"),
+ numsnpairs);
+ fprintf (stderr,
+ _(" %d/%d unique/duplicate transitions\n"),
+ numuniq, numdup);
+
+ if (fulltbl) {
tblsiz = lastdfa * numecs;
- fprintf( stderr, _( " %d table entries\n" ), tblsiz );
- }
+ fprintf (stderr, _(" %d table entries\n"),
+ tblsiz);
+ }
- else
- {
+ else {
tblsiz = 2 * (lastdfa + numtemps) + 2 * tblend;
- fprintf( stderr,
- _( " %d/%d base-def entries created\n" ),
- lastdfa + numtemps, current_max_dfas );
- fprintf( stderr,
- _( " %d/%d (peak %d) nxt-chk entries created\n" ),
- tblend, current_max_xpairs, peakpairs );
- fprintf( stderr,
- _( " %d/%d (peak %d) template nxt-chk entries created\n" ),
- numtemps * nummecs,
- current_max_template_xpairs,
- numtemps * numecs );
- fprintf( stderr, _( " %d empty table entries\n" ),
- nummt );
- fprintf( stderr, _( " %d protos created\n" ),
- numprots );
- fprintf( stderr,
- _( " %d templates created, %d uses\n" ),
- numtemps, tmpuses );
- }
+ fprintf (stderr,
+ _(" %d/%d base-def entries created\n"),
+ lastdfa + numtemps, current_max_dfas);
+ fprintf (stderr,
+ _
+ (" %d/%d (peak %d) nxt-chk entries created\n"),
+ tblend, current_max_xpairs, peakpairs);
+ fprintf (stderr,
+ _
+ (" %d/%d (peak %d) template nxt-chk entries created\n"),
+ numtemps * nummecs,
+ current_max_template_xpairs,
+ numtemps * numecs);
+ fprintf (stderr, _(" %d empty table entries\n"),
+ nummt);
+ fprintf (stderr, _(" %d protos created\n"),
+ numprots);
+ fprintf (stderr,
+ _(" %d templates created, %d uses\n"),
+ numtemps, tmpuses);
+ }
- if ( useecs )
- {
+ if (useecs) {
tblsiz = tblsiz + csize;
- fprintf( stderr,
- _( " %d/%d equivalence classes created\n" ),
- numecs, csize );
- }
+ fprintf (stderr,
+ _
+ (" %d/%d equivalence classes created\n"),
+ numecs, csize);
+ }
- if ( usemecs )
- {
+ if (usemecs) {
tblsiz = tblsiz + numecs;
- fprintf( stderr,
- _( " %d/%d meta-equivalence classes created\n" ),
- nummecs, csize );
- }
-
- fprintf( stderr,
- _( " %d (%d saved) hash collisions, %d DFAs equal\n" ),
- hshcol, hshsave, dfaeql );
- fprintf( stderr, _( " %d sets of reallocations needed\n" ),
- num_reallocs );
- fprintf( stderr, _( " %d total table entries needed\n" ),
- tblsiz );
+ fprintf (stderr,
+ _
+ (" %d/%d meta-equivalence classes created\n"),
+ nummecs, csize);
}
- exit( exit_status );
+ fprintf (stderr,
+ _
+ (" %d (%d saved) hash collisions, %d DFAs equal\n"),
+ hshcol, hshsave, dfaeql);
+ fprintf (stderr, _(" %d sets of reallocations needed\n"),
+ num_reallocs);
+ fprintf (stderr, _(" %d total table entries needed\n"),
+ tblsiz);
}
+ FLEX_EXIT (exit_status);
+}
-/* flexinit - initialize flex */
-void flexinit( argc, argv )
-int argc;
-char **argv;
- {
- int i, sawcmpflag;
- char *arg;
+/* flexinit - initialize flex */
- printstats = syntaxerror = trace = spprdflt = caseins = false;
- lex_compat = C_plus_plus = backing_up_report = ddebug = fulltbl = false;
- fullspd = long_align = nowarn = yymore_used = continued_action = false;
- do_yylineno = yytext_is_array = in_rule = reject = do_stdinit = false;
+void flexinit (argc, argv)
+ int argc;
+ char **argv;
+{
+ int i, sawcmpflag, rv, optind;
+ char *arg;
+ scanopt_t sopt;
+
+ printstats = syntaxerror = trace = spprdflt = false;
+ lex_compat = posix_compat = C_plus_plus = backing_up_report =
+ ddebug = fulltbl = false;
+ fullspd = long_align = nowarn = yymore_used = continued_action =
+ false;
+ do_yylineno = yytext_is_array = in_rule = reject = do_stdinit =
+ false;
yymore_really_used = reject_really_used = unspecified;
interactive = csize = unspecified;
do_yywrap = gen_line_dirs = usemecs = useecs = true;
+ reentrant = bison_bridge_lval = bison_bridge_lloc = false;
performance_report = 0;
did_outfilename = 0;
prefix = "yy";
yyclass = 0;
use_read = use_stdout = false;
+ tablesext = tablesverify = false;
+ gentables = true;
+ tablesfilename = tablesname = NULL;
+ ansi_func_defs = ansi_func_protos = true;
sawcmpflag = false;
/* Initialize dynamic array for holding the rule actions. */
action_size = 2048; /* default size of action array in bytes */
- action_array = allocate_character_array( action_size );
+ action_array = allocate_character_array (action_size);
defs1_offset = prolog_offset = action_offset = action_index = 0;
action_array[0] = '\0';
- program_name = argv[0];
+ /* Initialize any buffers. */
+ buf_init (&userdef_buf, sizeof (char)); /* one long string */
+ buf_init (&defs_buf, sizeof (char *)); /* list of strings */
+ buf_init (&yydmap_buf, sizeof (char)); /* one long string */
+ buf_init (&top_buf, sizeof (char)); /* one long string */
- if ( program_name[0] != '\0' &&
- program_name[strlen( program_name ) - 1] == '+' )
+ {
+ const char * m4defs_init_str[] = {"m4_changequote\n",
+ "m4_changequote([[, ]])\n"};
+ buf_init (&m4defs_buf, sizeof (char *));
+ buf_append (&m4defs_buf, &m4defs_init_str, 2);
+ }
+
+ sf_init ();
+
+ /* initialize regex lib */
+ flex_init_regex();
+
+ /* Enable C++ if program name ends with '+'. */
+ program_name = basename2 (argv[0], 0);
+
+ if (program_name[0] != '\0' &&
+ program_name[strlen (program_name) - 1] == '+')
C_plus_plus = true;
/* read flags */
- for ( --argc, ++argv; argc ; --argc, ++argv )
- {
- arg = argv[0];
+ sopt = scanopt_init (flexopts, argc, argv, 0);
+ if (!sopt) {
+ /* This will only happen when flexopts array is altered. */
+ fprintf (stderr,
+ _("Internal error. flexopts are malformed.\n"));
+ FLEX_EXIT (1);
+ }
+
+ while ((rv = scanopt (sopt, &arg, &optind)) != 0) {
- if ( arg[0] != '-' || arg[1] == '\0' )
+ if (rv < 0) {
+ /* Scanopt has already printed an option-specific error message. */
+ fprintf (stderr,
+ _
+ ("Try `%s --help' for more information.\n"),
+ program_name);
+ FLEX_EXIT (1);
+ }
+
+ switch ((enum flexopt_flag_t) rv) {
+ case OPT_CPLUSPLUS:
+ C_plus_plus = true;
+ break;
+
+ case OPT_BATCH:
+ interactive = false;
break;
- if ( arg[1] == '-' )
- { /* --option */
- if ( ! strcmp( arg, "--help" ) )
- arg = "-h";
+ case OPT_BACKUP:
+ backing_up_report = true;
+ break;
- else if ( ! strcmp( arg, "--version" ) )
- arg = "-V";
+ case OPT_DONOTHING:
+ break;
- else if ( ! strcmp( arg, "--" ) )
- { /* end of options */
- --argc;
- ++argv;
- break;
- }
+ case OPT_COMPRESSION:
+ if (!sawcmpflag) {
+ useecs = false;
+ usemecs = false;
+ fulltbl = false;
+ sawcmpflag = true;
}
- for ( i = 1; arg[i] != '\0'; ++i )
- switch ( arg[i] )
- {
- case '+':
- C_plus_plus = true;
+ for (i = 0; arg && arg[i] != '\0'; i++)
+ switch (arg[i]) {
+ case 'a':
+ long_align = true;
break;
- case 'B':
- interactive = false;
+ case 'e':
+ useecs = true;
break;
- case 'b':
- backing_up_report = true;
+ case 'F':
+ fullspd = true;
break;
- case 'c':
+ case 'f':
+ fulltbl = true;
break;
- case 'C':
- if ( i != 1 )
- flexerror(
- _( "-C flag must be given separately" ) );
-
- if ( ! sawcmpflag )
- {
- useecs = false;
- usemecs = false;
- fulltbl = false;
- sawcmpflag = true;
- }
-
- for ( ++i; arg[i] != '\0'; ++i )
- switch ( arg[i] )
- {
- case 'a':
- long_align =
- true;
- break;
-
- case 'e':
- useecs = true;
- break;
-
- case 'F':
- fullspd = true;
- break;
-
- case 'f':
- fulltbl = true;
- break;
-
- case 'm':
- usemecs = true;
- break;
-
- case 'r':
- use_read = true;
- break;
-
- default:
- lerrif(
- _( "unknown -C option '%c'" ),
- (int) arg[i] );
- break;
- }
-
- goto get_next_arg;
-
- case 'd':
- ddebug = true;
+ case 'm':
+ usemecs = true;
break;
- case 'f':
- useecs = usemecs = false;
- use_read = fulltbl = true;
+ case 'r':
+ use_read = true;
break;
- case 'F':
- useecs = usemecs = false;
- use_read = fullspd = true;
+ default:
+ lerrif (_
+ ("unknown -C option '%c'"),
+ (int) arg[i]);
break;
+ }
+ break;
- case '?':
- case 'h':
- usage();
- exit( 0 );
+ case OPT_DEBUG:
+ ddebug = true;
+ break;
- case 'I':
- interactive = true;
- break;
+ case OPT_NO_DEBUG:
+ ddebug = false;
+ break;
- case 'i':
- caseins = true;
- break;
+ case OPT_FULL:
+ useecs = usemecs = false;
+ use_read = fulltbl = true;
+ break;
- case 'l':
- lex_compat = true;
- break;
+ case OPT_FAST:
+ useecs = usemecs = false;
+ use_read = fullspd = true;
+ break;
- case 'L':
- gen_line_dirs = false;
- break;
+ case OPT_HELP:
+ usage ();
+ FLEX_EXIT (0);
- case 'n':
- /* Stupid do-nothing deprecated
- * option.
- */
- break;
+ case OPT_INTERACTIVE:
+ interactive = true;
+ break;
- case 'o':
- if ( i != 1 )
- flexerror(
- _( "-o flag must be given separately" ) );
+ case OPT_CASE_INSENSITIVE:
+ sf_set_case_ins(true);
+ break;
- outfilename = arg + i + 1;
- did_outfilename = 1;
- goto get_next_arg;
+ case OPT_LEX_COMPAT:
+ lex_compat = true;
+ break;
- case 'P':
- if ( i != 1 )
- flexerror(
- _( "-P flag must be given separately" ) );
+ case OPT_POSIX_COMPAT:
+ posix_compat = true;
+ break;
- prefix = arg + i + 1;
- goto get_next_arg;
+ case OPT_PREPROC_LEVEL:
+ preproc_level = strtol(arg,NULL,0);
+ break;
- case 'p':
- ++performance_report;
- break;
+ case OPT_MAIN:
+ buf_strdefine (&userdef_buf, "YY_MAIN", "1");
+ do_yywrap = false;
+ break;
- case 'S':
- if ( i != 1 )
- flexerror(
- _( "-S flag must be given separately" ) );
+ case OPT_NO_MAIN:
+ buf_strdefine (&userdef_buf, "YY_MAIN", "0");
+ break;
- skelname = arg + i + 1;
- goto get_next_arg;
+ case OPT_NO_LINE:
+ gen_line_dirs = false;
+ break;
- case 's':
- spprdflt = true;
- break;
+ case OPT_OUTFILE:
+ outfilename = arg;
+ did_outfilename = 1;
+ break;
- case 't':
- use_stdout = true;
- break;
+ case OPT_PREFIX:
+ prefix = arg;
+ break;
- case 'T':
- trace = true;
- break;
+ case OPT_PERF_REPORT:
+ ++performance_report;
+ break;
- case 'v':
- printstats = true;
- break;
+ case OPT_BISON_BRIDGE:
+ bison_bridge_lval = true;
+ break;
- case 'V':
- printf( _( "%s version %s\n" ),
- program_name, flex_version );
- exit( 0 );
+ case OPT_BISON_BRIDGE_LOCATIONS:
+ bison_bridge_lval = bison_bridge_lloc = true;
+ break;
- case 'w':
- nowarn = true;
- break;
+ case OPT_REENTRANT:
+ reentrant = true;
+ break;
- case '7':
- csize = 128;
- break;
+ case OPT_NO_REENTRANT:
+ reentrant = false;
+ break;
- case '8':
- csize = CSIZE;
- break;
+ case OPT_SKEL:
+ skelname = arg;
+ break;
- default:
- fprintf( stderr,
- _( "%s: unknown flag '%c'. For usage, try\n\t%s --help\n" ),
- program_name, (int) arg[i],
- program_name );
- exit( 1 );
+ case OPT_DEFAULT:
+ spprdflt = false;
+ break;
+
+ case OPT_NO_DEFAULT:
+ spprdflt = true;
+ break;
+
+ case OPT_STDOUT:
+ use_stdout = true;
+ break;
+
+ case OPT_NO_UNISTD_H:
+ //buf_strdefine (&userdef_buf, "YY_NO_UNISTD_H", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_UNISTD_H",0);
+ break;
+
+ case OPT_TABLES_FILE:
+ tablesext = true;
+ tablesfilename = arg;
+ break;
+
+ case OPT_TABLES_VERIFY:
+ tablesverify = true;
+ break;
+
+ case OPT_TRACE:
+ trace = true;
+ break;
+
+ case OPT_VERBOSE:
+ printstats = true;
+ break;
+
+ case OPT_VERSION:
+ printf (_("%s %s\n"), program_name, flex_version);
+ FLEX_EXIT (0);
+
+ case OPT_WARN:
+ nowarn = false;
+ break;
+
+ case OPT_NO_WARN:
+ nowarn = true;
+ break;
+
+ case OPT_7BIT:
+ csize = 128;
+ break;
+
+ case OPT_8BIT:
+ csize = CSIZE;
+ break;
+
+ case OPT_ALIGN:
+ long_align = true;
+ break;
+
+ case OPT_NO_ALIGN:
+ long_align = false;
+ break;
+
+ case OPT_ALWAYS_INTERACTIVE:
+ buf_m4_define (&m4defs_buf, "M4_YY_ALWAYS_INTERACTIVE", 0);
+ break;
+
+ case OPT_NEVER_INTERACTIVE:
+ buf_m4_define( &m4defs_buf, "M4_YY_NEVER_INTERACTIVE", 0);
+ break;
+
+ case OPT_ARRAY:
+ yytext_is_array = true;
+ break;
+
+ case OPT_POINTER:
+ yytext_is_array = false;
+ break;
+
+ case OPT_ECS:
+ useecs = true;
+ break;
+
+ case OPT_NO_ECS:
+ useecs = false;
+ break;
+
+ case OPT_HEADER_FILE:
+ headerfilename = arg;
+ break;
+
+ case OPT_META_ECS:
+ usemecs = true;
+ break;
+
+ case OPT_NO_META_ECS:
+ usemecs = false;
+ break;
+
+ case OPT_PREPROCDEFINE:
+ {
+ /* arg is "symbol" or "symbol=definition". */
+ char *def;
+
+ for (def = arg;
+ *def != '\0' && *def != '='; ++def) ;
+
+ buf_strappend (&userdef_buf, "#define ");
+ if (*def == '\0') {
+ buf_strappend (&userdef_buf, arg);
+ buf_strappend (&userdef_buf,
+ " 1\n");
+ }
+ else {
+ buf_strnappend (&userdef_buf, arg,
+ def - arg);
+ buf_strappend (&userdef_buf, " ");
+ buf_strappend (&userdef_buf,
+ def + 1);
+ buf_strappend (&userdef_buf, "\n");
}
+ }
+ break;
- /* Used by -C, -S, -o, and -P flags in lieu of a "continue 2"
- * control.
- */
- get_next_arg: ;
- }
+ case OPT_READ:
+ use_read = true;
+ break;
+
+ case OPT_STACK:
+ //buf_strdefine (&userdef_buf, "YY_STACK_USED", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_STACK_USED",0);
+ break;
+
+ case OPT_STDINIT:
+ do_stdinit = true;
+ break;
+
+ case OPT_NO_STDINIT:
+ do_stdinit = false;
+ break;
+
+ case OPT_YYCLASS:
+ yyclass = arg;
+ break;
+
+ case OPT_YYLINENO:
+ do_yylineno = true;
+ break;
+
+ case OPT_NO_YYLINENO:
+ do_yylineno = false;
+ break;
+
+ case OPT_YYWRAP:
+ do_yywrap = true;
+ break;
+
+ case OPT_NO_YYWRAP:
+ do_yywrap = false;
+ break;
+
+ case OPT_YYMORE:
+ yymore_really_used = true;
+ break;
+
+ case OPT_NO_YYMORE:
+ yymore_really_used = false;
+ break;
- num_input_files = argc;
- input_files = argv;
- set_input_file( num_input_files > 0 ? input_files[0] : NULL );
+ case OPT_REJECT:
+ reject_really_used = true;
+ break;
+
+ case OPT_NO_REJECT:
+ reject_really_used = false;
+ break;
+
+ case OPT_NO_ANSI_FUNC_DEFS:
+ ansi_func_defs = false;
+ break;
+
+ case OPT_NO_ANSI_FUNC_PROTOS:
+ ansi_func_protos = false;
+ break;
+
+ case OPT_NO_YY_PUSH_STATE:
+ //buf_strdefine (&userdef_buf, "YY_NO_PUSH_STATE", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_PUSH_STATE",0);
+ break;
+ case OPT_NO_YY_POP_STATE:
+ //buf_strdefine (&userdef_buf, "YY_NO_POP_STATE", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_POP_STATE",0);
+ break;
+ case OPT_NO_YY_TOP_STATE:
+ //buf_strdefine (&userdef_buf, "YY_NO_TOP_STATE", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_TOP_STATE",0);
+ break;
+ case OPT_NO_UNPUT:
+ //buf_strdefine (&userdef_buf, "YY_NO_UNPUT", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_UNPUT",0);
+ break;
+ case OPT_NO_YY_SCAN_BUFFER:
+ //buf_strdefine (&userdef_buf, "YY_NO_SCAN_BUFFER", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SCAN_BUFFER",0);
+ break;
+ case OPT_NO_YY_SCAN_BYTES:
+ //buf_strdefine (&userdef_buf, "YY_NO_SCAN_BYTES", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SCAN_BYTES",0);
+ break;
+ case OPT_NO_YY_SCAN_STRING:
+ //buf_strdefine (&userdef_buf, "YY_NO_SCAN_STRING", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SCAN_STRING",0);
+ break;
+ case OPT_NO_YYGET_EXTRA:
+ //buf_strdefine (&userdef_buf, "YY_NO_GET_EXTRA", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_GET_EXTRA",0);
+ break;
+ case OPT_NO_YYSET_EXTRA:
+ //buf_strdefine (&userdef_buf, "YY_NO_SET_EXTRA", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SET_EXTRA",0);
+ break;
+ case OPT_NO_YYGET_LENG:
+ //buf_strdefine (&userdef_buf, "YY_NO_GET_LENG", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_GET_LENG",0);
+ break;
+ case OPT_NO_YYGET_TEXT:
+ //buf_strdefine (&userdef_buf, "YY_NO_GET_TEXT", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_GET_TEXT",0);
+ break;
+ case OPT_NO_YYGET_LINENO:
+ //buf_strdefine (&userdef_buf, "YY_NO_GET_LINENO", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_GET_LINENO",0);
+ break;
+ case OPT_NO_YYSET_LINENO:
+ //buf_strdefine (&userdef_buf, "YY_NO_SET_LINENO", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SET_LINENO",0);
+ break;
+ case OPT_NO_YYGET_IN:
+ //buf_strdefine (&userdef_buf, "YY_NO_GET_IN", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_GET_IN",0);
+ break;
+ case OPT_NO_YYSET_IN:
+ //buf_strdefine (&userdef_buf, "YY_NO_SET_IN", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SET_IN",0);
+ break;
+ case OPT_NO_YYGET_OUT:
+ //buf_strdefine (&userdef_buf, "YY_NO_GET_OUT", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_GET_OUT",0);
+ break;
+ case OPT_NO_YYSET_OUT:
+ //buf_strdefine (&userdef_buf, "YY_NO_SET_OUT", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SET_OUT",0);
+ break;
+ case OPT_NO_YYGET_LVAL:
+ //buf_strdefine (&userdef_buf, "YY_NO_GET_LVAL", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_GET_LVAL",0);
+ break;
+ case OPT_NO_YYSET_LVAL:
+ //buf_strdefine (&userdef_buf, "YY_NO_SET_LVAL", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SET_LVAL",0);
+ break;
+ case OPT_NO_YYGET_LLOC:
+ //buf_strdefine (&userdef_buf, "YY_NO_GET_LLOC", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_GET_LLOC",0);
+ break;
+ case OPT_NO_YYSET_LLOC:
+ //buf_strdefine (&userdef_buf, "YY_NO_SET_LLOC", "1");
+ buf_m4_define( &m4defs_buf, "M4_YY_NO_SET_LLOC",0);
+ break;
+
+ } /* switch */
+ } /* while scanopt() */
+
+ scanopt_destroy (sopt);
+
+ num_input_files = argc - optind;
+ input_files = argv + optind;
+ set_input_file (num_input_files > 0 ? input_files[0] : NULL);
lastccl = lastsc = lastdfa = lastnfa = 0;
num_rules = num_eof_rules = default_rule = 0;
numas = numsnpairs = tmpuses = 0;
- numecs = numeps = eps2 = num_reallocs = hshcol = dfaeql = totnst = 0;
+ numecs = numeps = eps2 = num_reallocs = hshcol = dfaeql = totnst =
+ 0;
numuniq = numdup = hshsave = eofseen = datapos = dataline = 0;
num_backing_up = onesp = numprots = 0;
variable_trailing_context_rules = bol_needed = false;
- out_linenum = linenum = sectnum = 1;
+ linenum = sectnum = 1;
firstprot = NIL;
/* Used in mkprot() so that the first proto goes in slot 1
@@ -851,334 +1457,410 @@ char **argv;
*/
lastprot = 1;
- set_up_initial_allocations();
- }
+ set_up_initial_allocations ();
+}
/* readin - read in the rules section of the input file(s) */
-void readin()
- {
+void readin ()
+{
static char yy_stdinit[] = "FILE *yyin = stdin, *yyout = stdout;";
static char yy_nostdinit[] =
"FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;";
- line_directive_out( (FILE *) 0, 1 );
+ line_directive_out ((FILE *) 0, 1);
- if ( yyparse() )
- {
- pinpoint_message( _( "fatal parse error" ) );
- flexend( 1 );
- }
+ if (yyparse ()) {
+ pinpoint_message (_("fatal parse error"));
+ flexend (1);
+ }
- if ( syntaxerror )
- flexend( 1 );
+ if (syntaxerror)
+ flexend (1);
+
+ /* If the user explicitly requested posix compatibility by specifing the
+ * posix-compat option, then we check for conflicting options. However, if
+ * the POSIXLY_CORRECT variable is set, then we quietly make flex as
+ * posix-compatible as possible. This is the recommended behavior
+ * according to the GNU Coding Standards.
+ *
+ * Note: The posix option was added to flex to provide the posix behavior
+ * of the repeat operator in regular expressions, e.g., `ab{3}'
+ */
+ if (posix_compat) {
+ /* TODO: This is where we try to make flex behave according to
+ * posiz, AND check for conflicting options. How far should we go
+ * with this? Should we disable all the neat-o flex features?
+ */
+ /* Update: Estes says no, since other flex features don't violate posix. */
+ }
- if ( backing_up_report )
- {
- backing_up_file = fopen( backing_name, "w" );
- if ( backing_up_file == NULL )
- lerrsf(
- _( "could not create backing-up info file %s" ),
- backing_name );
- }
+ if (getenv ("POSIXLY_CORRECT")) {
+ posix_compat = true;
+ }
+
+ if (backing_up_report) {
+ backing_up_file = fopen (backing_name, "w");
+ if (backing_up_file == NULL)
+ lerrsf (_
+ ("could not create backing-up info file %s"),
+ backing_name);
+ }
else
backing_up_file = NULL;
- if ( yymore_really_used == true )
+ if (yymore_really_used == true)
yymore_used = true;
- else if ( yymore_really_used == false )
+ else if (yymore_really_used == false)
yymore_used = false;
- if ( reject_really_used == true )
+ if (reject_really_used == true)
reject = true;
- else if ( reject_really_used == false )
+ else if (reject_really_used == false)
reject = false;
- if ( performance_report > 0 )
- {
- if ( lex_compat )
- {
- fprintf( stderr,
-_( "-l AT&T lex compatibility option entails a large performance penalty\n" ) );
- fprintf( stderr,
-_( " and may be the actual source of other reported performance penalties\n" ) );
- }
+ if (performance_report > 0) {
+ if (lex_compat) {
+ fprintf (stderr,
+ _
+ ("-l AT&T lex compatibility option entails a large performance penalty\n"));
+ fprintf (stderr,
+ _
+ (" and may be the actual source of other reported performance penalties\n"));
+ }
- else if ( do_yylineno )
- {
- fprintf( stderr,
- _( "%%option yylineno entails a large performance penalty\n" ) );
- }
+ else if (do_yylineno) {
+ fprintf (stderr,
+ _
+ ("%%option yylineno entails a performance penalty ONLY on rules that can match newline characters\n"));
+ }
- if ( performance_report > 1 )
- {
- if ( interactive )
- fprintf( stderr,
- _( "-I (interactive) entails a minor performance penalty\n" ) );
+ if (performance_report > 1) {
+ if (interactive)
+ fprintf (stderr,
+ _
+ ("-I (interactive) entails a minor performance penalty\n"));
- if ( yymore_used )
- fprintf( stderr,
- _( "yymore() entails a minor performance penalty\n" ) );
- }
+ if (yymore_used)
+ fprintf (stderr,
+ _
+ ("yymore() entails a minor performance penalty\n"));
+ }
- if ( reject )
- fprintf( stderr,
- _( "REJECT entails a large performance penalty\n" ) );
+ if (reject)
+ fprintf (stderr,
+ _
+ ("REJECT entails a large performance penalty\n"));
- if ( variable_trailing_context_rules )
- fprintf( stderr,
-_( "Variable trailing context rules entail a large performance penalty\n" ) );
- }
+ if (variable_trailing_context_rules)
+ fprintf (stderr,
+ _
+ ("Variable trailing context rules entail a large performance penalty\n"));
+ }
- if ( reject )
+ if (reject)
real_reject = true;
- if ( variable_trailing_context_rules )
+ if (variable_trailing_context_rules)
reject = true;
- if ( (fulltbl || fullspd) && reject )
- {
- if ( real_reject )
- flexerror(
- _( "REJECT cannot be used with -f or -F" ) );
- else if ( do_yylineno )
- flexerror(
- _( "%option yylineno cannot be used with -f or -F" ) );
+ if ((fulltbl || fullspd) && reject) {
+ if (real_reject)
+ flexerror (_
+ ("REJECT cannot be used with -f or -F"));
+ else if (do_yylineno)
+ flexerror (_
+ ("%option yylineno cannot be used with REJECT"));
else
- flexerror(
- _( "variable trailing context rules cannot be used with -f or -F" ) );
- }
-
- if ( reject )
- outn( "\n#define YY_USES_REJECT" );
+ flexerror (_
+ ("variable trailing context rules cannot be used with -f or -F"));
+ }
- if ( ! do_yywrap )
- {
- outn( "\n#define yywrap() 1" );
- outn( "#define YY_SKIP_YYWRAP" );
- }
+ if (reject){
+ out_m4_define( "M4_YY_USES_REJECT", NULL);
+ //outn ("\n#define YY_USES_REJECT");
+ }
+
+ if (!do_yywrap) {
+ if (!C_plus_plus)
+ if (reentrant)
+ outn ("\n#define yywrap(yyscanner) 1");
+ else
+ outn ("\n#define yywrap() 1");
+ outn ("#define YY_SKIP_YYWRAP");
+ }
- if ( ddebug )
- outn( "\n#define FLEX_DEBUG" );
+ if (ddebug)
+ outn ("\n#define FLEX_DEBUG");
- if ( csize == 256 )
- outn( "typedef unsigned char YY_CHAR;" );
+ OUT_BEGIN_CODE ();
+ if (csize == 256)
+ outn ("typedef unsigned char YY_CHAR;");
else
- outn( "typedef char YY_CHAR;" );
-
- if ( C_plus_plus )
- {
- outn( "#define yytext_ptr yytext" );
+ outn ("typedef char YY_CHAR;");
+ OUT_END_CODE ();
- if ( interactive )
- outn( "#define YY_INTERACTIVE" );
- }
+ if (C_plus_plus) {
+ outn ("#define yytext_ptr yytext");
- else
- {
- if ( do_stdinit )
- {
- outn( "#ifdef VMS" );
- outn( "#ifndef __VMS_POSIX" );
- outn( yy_nostdinit );
- outn( "#else" );
- outn( yy_stdinit );
- outn( "#endif" );
- outn( "#else" );
- outn( yy_stdinit );
- outn( "#endif" );
- }
+ if (interactive)
+ outn ("#define YY_INTERACTIVE");
+ }
- else
- outn( yy_nostdinit );
+ else {
+ OUT_BEGIN_CODE ();
+ /* In reentrant scanner, stdinit is handled in flex.skl. */
+ if (do_stdinit) {
+ if (reentrant){
+ outn ("#ifdef VMS");
+ outn ("#ifdef __VMS_POSIX");
+ outn ("#define YY_STDINIT");
+ outn ("#endif");
+ outn ("#else");
+ outn ("#define YY_STDINIT");
+ outn ("#endif");
+ }
+
+ outn ("#ifdef VMS");
+ outn ("#ifndef __VMS_POSIX");
+ outn (yy_nostdinit);
+ outn ("#else");
+ outn (yy_stdinit);
+ outn ("#endif");
+ outn ("#else");
+ outn (yy_stdinit);
+ outn ("#endif");
}
- if ( fullspd )
- outn( "typedef yyconst struct yy_trans_info *yy_state_type;" );
- else if ( ! C_plus_plus )
- outn( "typedef int yy_state_type;" );
+ else {
+ if(!reentrant)
+ outn (yy_nostdinit);
+ }
+ OUT_END_CODE ();
+ }
- if ( ddebug )
- outn( "\n#define FLEX_DEBUG" );
+ OUT_BEGIN_CODE ();
+ if (fullspd)
+ outn ("typedef yyconst struct yy_trans_info *yy_state_type;");
+ else if (!C_plus_plus)
+ outn ("typedef int yy_state_type;");
+ OUT_END_CODE ();
+
+ if (lex_compat)
+ outn ("#define YY_FLEX_LEX_COMPAT");
+
+ if (!C_plus_plus && !reentrant) {
+ outn ("extern int yylineno;");
+ OUT_BEGIN_CODE ();
+ outn ("int yylineno = 1;");
+ OUT_END_CODE ();
+ }
- if ( lex_compat )
- outn( "#define YY_FLEX_LEX_COMPAT" );
+ if (C_plus_plus) {
+ outn ("\n#include <FlexLexer.h>");
- if ( do_yylineno && ! C_plus_plus )
- {
- outn( "extern int yylineno;" );
- outn( "int yylineno = 1;" );
+ if (!do_yywrap) {
+ outn("\nint yyFlexLexer::yywrap() { return 1; }");
}
- if ( C_plus_plus )
- {
- outn( "\n#include <FlexLexer.h>" );
+ if (yyclass) {
+ outn ("int yyFlexLexer::yylex()");
+ outn ("\t{");
+ outn ("\tLexerError( \"yyFlexLexer::yylex invoked but %option yyclass used\" );");
+ outn ("\treturn 0;");
+ outn ("\t}");
- if ( yyclass )
- {
- outn( "int yyFlexLexer::yylex()" );
- outn( "\t{" );
- outn(
-"\tLexerError( \"yyFlexLexer::yylex invoked but %option yyclass used\" );" );
- outn( "\treturn 0;" );
- outn( "\t}" );
-
- out_str( "\n#define YY_DECL int %s::yylex()\n",
- yyclass );
- }
+ out_str ("\n#define YY_DECL int %s::yylex()\n",
+ yyclass);
}
+ }
- else
- {
- if ( yytext_is_array )
- outn( "extern char yytext[];\n" );
+ else {
- else
- {
- outn( "extern char *yytext;" );
- outn( "#define yytext_ptr yytext" );
+ /* Watch out: yytext_ptr is a variable when yytext is an array,
+ * but it's a macro when yytext is a pointer.
+ */
+ if (yytext_is_array) {
+ if (!reentrant)
+ outn ("extern char yytext[];\n");
+ }
+ else {
+ if (reentrant) {
+ outn ("#define yytext_ptr yytext_r");
+ }
+ else {
+ outn ("extern char *yytext;");
+ outn ("#define yytext_ptr yytext");
}
-
- if ( yyclass )
- flexerror(
- _( "%option yyclass only meaningful for C++ scanners" ) );
}
- if ( useecs )
- numecs = cre8ecs( nextecm, ecgroup, csize );
+ if (yyclass)
+ flexerror (_
+ ("%option yyclass only meaningful for C++ scanners"));
+ }
+
+ if (useecs)
+ numecs = cre8ecs (nextecm, ecgroup, csize);
else
numecs = csize;
/* Now map the equivalence class for NUL to its expected place. */
ecgroup[0] = ecgroup[csize];
- NUL_ec = ABS( ecgroup[0] );
+ NUL_ec = ABS (ecgroup[0]);
- if ( useecs )
- ccl2ecl();
- }
+ if (useecs)
+ ccl2ecl ();
+}
/* set_up_initial_allocations - allocate memory for internal tables */
-void set_up_initial_allocations()
- {
+void set_up_initial_allocations ()
+{
+ maximum_mns = (long_align ? MAXIMUM_MNS_LONG : MAXIMUM_MNS);
current_mns = INITIAL_MNS;
- firstst = allocate_integer_array( current_mns );
- lastst = allocate_integer_array( current_mns );
- finalst = allocate_integer_array( current_mns );
- transchar = allocate_integer_array( current_mns );
- trans1 = allocate_integer_array( current_mns );
- trans2 = allocate_integer_array( current_mns );
- accptnum = allocate_integer_array( current_mns );
- assoc_rule = allocate_integer_array( current_mns );
- state_type = allocate_integer_array( current_mns );
+ firstst = allocate_integer_array (current_mns);
+ lastst = allocate_integer_array (current_mns);
+ finalst = allocate_integer_array (current_mns);
+ transchar = allocate_integer_array (current_mns);
+ trans1 = allocate_integer_array (current_mns);
+ trans2 = allocate_integer_array (current_mns);
+ accptnum = allocate_integer_array (current_mns);
+ assoc_rule = allocate_integer_array (current_mns);
+ state_type = allocate_integer_array (current_mns);
current_max_rules = INITIAL_MAX_RULES;
- rule_type = allocate_integer_array( current_max_rules );
- rule_linenum = allocate_integer_array( current_max_rules );
- rule_useful = allocate_integer_array( current_max_rules );
+ rule_type = allocate_integer_array (current_max_rules);
+ rule_linenum = allocate_integer_array (current_max_rules);
+ rule_useful = allocate_integer_array (current_max_rules);
+ rule_has_nl = allocate_bool_array (current_max_rules);
current_max_scs = INITIAL_MAX_SCS;
- scset = allocate_integer_array( current_max_scs );
- scbol = allocate_integer_array( current_max_scs );
- scxclu = allocate_integer_array( current_max_scs );
- sceof = allocate_integer_array( current_max_scs );
- scname = allocate_char_ptr_array( current_max_scs );
+ scset = allocate_integer_array (current_max_scs);
+ scbol = allocate_integer_array (current_max_scs);
+ scxclu = allocate_integer_array (current_max_scs);
+ sceof = allocate_integer_array (current_max_scs);
+ scname = allocate_char_ptr_array (current_max_scs);
current_maxccls = INITIAL_MAX_CCLS;
- cclmap = allocate_integer_array( current_maxccls );
- ccllen = allocate_integer_array( current_maxccls );
- cclng = allocate_integer_array( current_maxccls );
+ cclmap = allocate_integer_array (current_maxccls);
+ ccllen = allocate_integer_array (current_maxccls);
+ cclng = allocate_integer_array (current_maxccls);
+ ccl_has_nl = allocate_bool_array (current_maxccls);
current_max_ccl_tbl_size = INITIAL_MAX_CCL_TBL_SIZE;
- ccltbl = allocate_Character_array( current_max_ccl_tbl_size );
+ ccltbl = allocate_Character_array (current_max_ccl_tbl_size);
current_max_dfa_size = INITIAL_MAX_DFA_SIZE;
current_max_xpairs = INITIAL_MAX_XPAIRS;
- nxt = allocate_integer_array( current_max_xpairs );
- chk = allocate_integer_array( current_max_xpairs );
+ nxt = allocate_integer_array (current_max_xpairs);
+ chk = allocate_integer_array (current_max_xpairs);
current_max_template_xpairs = INITIAL_MAX_TEMPLATE_XPAIRS;
- tnxt = allocate_integer_array( current_max_template_xpairs );
+ tnxt = allocate_integer_array (current_max_template_xpairs);
current_max_dfas = INITIAL_MAX_DFAS;
- base = allocate_integer_array( current_max_dfas );
- def = allocate_integer_array( current_max_dfas );
- dfasiz = allocate_integer_array( current_max_dfas );
- accsiz = allocate_integer_array( current_max_dfas );
- dhash = allocate_integer_array( current_max_dfas );
- dss = allocate_int_ptr_array( current_max_dfas );
- dfaacc = allocate_dfaacc_union( current_max_dfas );
+ base = allocate_integer_array (current_max_dfas);
+ def = allocate_integer_array (current_max_dfas);
+ dfasiz = allocate_integer_array (current_max_dfas);
+ accsiz = allocate_integer_array (current_max_dfas);
+ dhash = allocate_integer_array (current_max_dfas);
+ dss = allocate_int_ptr_array (current_max_dfas);
+ dfaacc = allocate_dfaacc_union (current_max_dfas);
nultrans = (int *) 0;
- }
-
-
-void usage()
- {
- FILE *f = stdout;
-
- fprintf( f,
-_( "%s [-bdfhilnpstvwBFILTV78+? -C[aefFmr] -ooutput -Pprefix -Sskeleton]\n" ),
- program_name );
- fprintf( f, _( "\t[--help --version] [file ...]\n" ) );
-
- fprintf( f, _( "\t-b generate backing-up information to %s\n" ),
- backing_name );
- fprintf( f, _( "\t-d turn on debug mode in generated scanner\n" ) );
- fprintf( f, _( "\t-f generate fast, large scanner\n" ) );
- fprintf( f, _( "\t-h produce this help message\n" ) );
- fprintf( f, _( "\t-i generate case-insensitive scanner\n" ) );
- fprintf( f, _( "\t-l maximal compatibility with original lex\n" ) );
- fprintf( f, _( "\t-n do-nothing POSIX option\n" ) );
- fprintf( f, _( "\t-p generate performance report to stderr\n" ) );
- fprintf( f,
- _( "\t-s suppress default rule to ECHO unmatched text\n" ) );
-
- if ( ! did_outfilename )
- {
- snprintf( outfile_path, sizeof outfile_path, outfile_template,
- prefix, C_plus_plus ? "cc" : "c" );
+}
+
+
+/* extracts basename from path, optionally stripping the extension "\.*"
+ * (same concept as /bin/sh `basename`, but different handling of extension). */
+static char *basename2 (path, strip_ext)
+ char *path;
+ int strip_ext; /* boolean */
+{
+ char *b, *e = 0;
+
+ b = path;
+ for (b = path; *path; path++)
+ if (*path == '/')
+ b = path + 1;
+ else if (*path == '.')
+ e = path;
+
+ if (strip_ext && e && e > b)
+ *e = '\0';
+ return b;
+}
+
+void usage ()
+{
+ FILE *f = stdout;
+
+ if (!did_outfilename) {
+ snprintf (outfile_path, sizeof(outfile_path), outfile_template,
+ prefix, C_plus_plus ? "cc" : "c");
outfilename = outfile_path;
- }
-
- fprintf( f,
- _( "\t-t write generated scanner on stdout instead of %s\n" ),
- outfilename );
-
- fprintf( f,
- _( "\t-v write summary of scanner statistics to f\n" ) );
- fprintf( f, _( "\t-w do not generate warnings\n" ) );
- fprintf( f, _( "\t-B generate batch scanner (opposite of -I)\n" ) );
- fprintf( f,
- _( "\t-F use alternative fast scanner representation\n" ) );
- fprintf( f,
- _( "\t-I generate interactive scanner (opposite of -B)\n" ) );
- fprintf( f, _( "\t-L suppress #line directives in scanner\n" ) );
- fprintf( f, _( "\t-T %s should run in trace mode\n" ), program_name );
- fprintf( f, _( "\t-V report %s version\n" ), program_name );
- fprintf( f, _( "\t-7 generate 7-bit scanner\n" ) );
- fprintf( f, _( "\t-8 generate 8-bit scanner\n" ) );
- fprintf( f, _( "\t-+ generate C++ scanner class\n" ) );
- fprintf( f, _( "\t-? produce this help message\n" ) );
- fprintf( f,
-_( "\t-C specify degree of table compression (default is -Cem):\n" ) );
- fprintf( f,
-_( "\t\t-Ca trade off larger tables for better memory alignment\n" ) );
- fprintf( f, _( "\t\t-Ce construct equivalence classes\n" ) );
- fprintf( f,
-_( "\t\t-Cf do not compress scanner tables; use -f representation\n" ) );
- fprintf( f,
-_( "\t\t-CF do not compress scanner tables; use -F representation\n" ) );
- fprintf( f, _( "\t\t-Cm construct meta-equivalence classes\n" ) );
- fprintf( f,
- _( "\t\t-Cr use read() instead of stdio for scanner input\n" ) );
- fprintf( f, _( "\t-o specify output filename\n" ) );
- fprintf( f, _( "\t-P specify scanner prefix other than \"yy\"\n" ) );
- fprintf( f, _( "\t-S specify skeleton file\n" ) );
- fprintf( f, _( "\t--help produce this help message\n" ) );
- fprintf( f, _( "\t--version report %s version\n" ), program_name );
}
+
+ fprintf (f, _("Usage: %s [OPTIONS] [FILE]...\n"), program_name);
+ fprintf (f,
+ _
+ ("Generates programs that perform pattern-matching on text.\n"
+ "\n" "Table Compression:\n"
+ " -Ca, --align trade off larger tables for better memory alignment\n"
+ " -Ce, --ecs construct equivalence classes\n"
+ " -Cf do not compress tables; use -f representation\n"
+ " -CF do not compress tables; use -F representation\n"
+ " -Cm, --meta-ecs construct meta-equivalence classes\n"
+ " -Cr, --read use read() instead of stdio for scanner input\n"
+ " -f, --full generate fast, large scanner. Same as -Cfr\n"
+ " -F, --fast use alternate table representation. Same as -CFr\n"
+ " -Cem default compression (same as --ecs --meta-ecs)\n"
+ "\n" "Debugging:\n"
+ " -d, --debug enable debug mode in scanner\n"
+ " -b, --backup write backing-up information to %s\n"
+ " -p, --perf-report write performance report to stderr\n"
+ " -s, --nodefault suppress default rule to ECHO unmatched text\n"
+ " -T, --trace %s should run in trace mode\n"
+ " -w, --nowarn do not generate warnings\n"
+ " -v, --verbose write summary of scanner statistics to stdout\n"
+ "\n" "Files:\n"
+ " -o, --outfile=FILE specify output filename\n"
+ " -S, --skel=FILE specify skeleton file\n"
+ " -t, --stdout write scanner on stdout instead of %s\n"
+ " --yyclass=NAME name of C++ class\n"
+ " --header-file=FILE create a C header file in addition to the scanner\n"
+ " --tables-file[=FILE] write tables to FILE\n" "\n"
+ "Scanner behavior:\n"
+ " -7, --7bit generate 7-bit scanner\n"
+ " -8, --8bit generate 8-bit scanner\n"
+ " -B, --batch generate batch scanner (opposite of -I)\n"
+ " -i, --case-insensitive ignore case in patterns\n"
+ " -l, --lex-compat maximal compatibility with original lex\n"
+ " -X, --posix-compat maximal compatibility with POSIX lex\n"
+ " -I, --interactive generate interactive scanner (opposite of -B)\n"
+ " --yylineno track line count in yylineno\n"
+ "\n" "Generated code:\n"
+ " -+, --c++ generate C++ scanner class\n"
+ " -Dmacro[=defn] #define macro defn (default defn is '1')\n"
+ " -L, --noline suppress #line directives in scanner\n"
+ " -P, --prefix=STRING use STRING as prefix instead of \"yy\"\n"
+ " -R, --reentrant generate a reentrant C scanner\n"
+ " --bison-bridge scanner for bison pure parser.\n"
+ " --bison-locations include yylloc support.\n"
+ " --stdinit initialize yyin/yyout to stdin/stdout\n"
+ " --noansi-definitions old-style function definitions\n"
+ " --noansi-prototypes empty parameter list in prototypes\n"
+ " --nounistd do not include <unistd.h>\n"
+ " --noFUNCTION do not generate a particular FUNCTION\n"
+ "\n" "Miscellaneous:\n"
+ " -n do-nothing POSIX option\n"
+ " -?\n"
+ " -h, --help produce this help message\n"
+ " -V, --version report %s version\n"),
+ backing_name, program_name, outfile_path, program_name);
+
+}
diff --git a/usr.bin/lex/misc.c b/usr.bin/lex/misc.c
index 40797f57448..0dddc3aace7 100644
--- a/usr.bin/lex/misc.c
+++ b/usr.bin/lex/misc.c
@@ -1,71 +1,151 @@
-/* $OpenBSD: misc.c,v 1.14 2015/10/15 05:57:09 mmcc Exp $ */
+/* $OpenBSD: misc.c,v 1.15 2015/11/19 19:43:40 tedu Exp $ */
/* misc - miscellaneous flex routines */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/misc.c,v 1.14 2015/10/15 05:57:09 mmcc Exp $ */
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
-#include "flexdef.h"
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
-void action_define( defname, value )
-char *defname;
-int value;
- {
- char buf[MAXLINE];
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
- if ( (int) strlen( defname ) > MAXLINE / 2 )
- {
- format_pinpoint_message( _( "name \"%s\" ridiculously long" ),
- defname );
+#include "flexdef.h"
+#include "tables.h"
+
+#define CMD_IF_TABLES_SER "%if-tables-serialization"
+#define CMD_TABLES_YYDMAP "%tables-yydmap"
+#define CMD_DEFINE_YYTABLES "%define-yytables"
+#define CMD_IF_CPP_ONLY "%if-c++-only"
+#define CMD_IF_C_ONLY "%if-c-only"
+#define CMD_IF_C_OR_CPP "%if-c-or-c++"
+#define CMD_NOT_FOR_HEADER "%not-for-header"
+#define CMD_OK_FOR_HEADER "%ok-for-header"
+#define CMD_PUSH "%push"
+#define CMD_POP "%pop"
+#define CMD_IF_REENTRANT "%if-reentrant"
+#define CMD_IF_NOT_REENTRANT "%if-not-reentrant"
+#define CMD_IF_BISON_BRIDGE "%if-bison-bridge"
+#define CMD_IF_NOT_BISON_BRIDGE "%if-not-bison-bridge"
+#define CMD_ENDIF "%endif"
+
+/* we allow the skeleton to push and pop. */
+struct sko_state {
+ bool dc; /**< do_copy */
+};
+static struct sko_state *sko_stack=0;
+static int sko_len=0,sko_sz=0;
+static void sko_push(bool dc)
+{
+ if(!sko_stack){
+ sko_sz = 1;
+ sko_stack = (struct sko_state*)flex_alloc(sizeof(struct sko_state)*sko_sz);
+ if (!sko_stack)
+ flexfatal(_("allocation of sko_stack failed"));
+ sko_len = 0;
+ }
+ if(sko_len >= sko_sz){
+ sko_sz *= 2;
+ sko_stack = (struct sko_state*)flex_realloc(sko_stack,sizeof(struct sko_state)*sko_sz);
+ }
+
+ /* initialize to zero and push */
+ sko_stack[sko_len].dc = dc;
+ sko_len++;
+}
+static void sko_peek(bool *dc)
+{
+ if(sko_len <= 0)
+ flex_die("peek attempt when sko stack is empty");
+ if(dc)
+ *dc = sko_stack[sko_len-1].dc;
+}
+static void sko_pop(bool* dc)
+{
+ sko_peek(dc);
+ sko_len--;
+ if(sko_len < 0)
+ flex_die("popped too many times in skeleton.");
+}
+
+/* Append "#define defname value\n" to the running buffer. */
+void action_define (defname, value)
+ const char *defname;
+ int value;
+{
+ char buf[MAXLINE];
+ char *cpy;
+
+ if ((int) strlen (defname) > MAXLINE / 2) {
+ format_pinpoint_message (_
+ ("name \"%s\" ridiculously long"),
+ defname);
return;
- }
+ }
+
+ snprintf (buf, sizeof(buf), "#define %s %d\n", defname, value);
+ add_action (buf);
+
+ /* track #defines so we can undef them when we're done. */
+ cpy = copy_string (defname);
+ buf_append (&defs_buf, &cpy, 1);
+}
+
+
+/** Append "m4_define([[defname]],[[value]])m4_dnl\n" to the running buffer.
+ * @param defname The macro name.
+ * @param value The macro value, can be NULL, which is the same as the empty string.
+ */
+void action_m4_define (const char *defname, const char * value)
+{
+ char buf[MAXLINE];
+
+ flexfatal ("DO NOT USE THIS FUNCTION!");
- snprintf( buf, sizeof buf, "#define %s %d\n", defname, value );
- add_action( buf );
+ if ((int) strlen (defname) > MAXLINE / 2) {
+ format_pinpoint_message (_
+ ("name \"%s\" ridiculously long"),
+ defname);
+ return;
}
+ snprintf (buf, sizeof(buf), "m4_define([[%s]],[[%s]])m4_dnl\n", defname, value?value:"");
+ add_action (buf);
+}
-void add_action( new_text )
-char *new_text;
- {
- int len = strlen( new_text );
+/* Append "new_text" to the running buffer. */
+void add_action (new_text)
+ const char *new_text;
+{
+ int len = strlen (new_text);
- while ( len + action_index >= action_size - 10 /* slop */ )
- {
- int new_size = action_size * 2;
+ while (len + action_index >= action_size - 10 /* slop */ ) {
+ int new_size = action_size * 2;
- if ( new_size <= 0 )
+ if (new_size <= 0)
/* Increase just a little, to try to avoid overflow
* on 16-bit machines.
*/
@@ -74,95 +154,71 @@ char *new_text;
action_size = new_size;
action_array =
- reallocate_character_array( action_array, action_size );
- }
+ reallocate_character_array (action_array,
+ action_size);
+ }
- strlcpy( &action_array[action_index], new_text,
+ strlcpy ( &action_array[action_index], new_text,
action_size - action_index );
action_index += len;
- }
+}
/* allocate_array - allocate memory for an integer array of the given size */
-void *allocate_array( size, element_size )
-int size;
-size_t element_size;
- {
+void *allocate_array (size, element_size)
+ int size;
+ size_t element_size;
+{
void *mem;
- size_t num_bytes = element_size * size;
+ size_t num_bytes = element_size * size;
- mem = flex_alloc( num_bytes );
- if ( ! mem )
- flexfatal(
- _( "memory allocation failed in allocate_array()" ) );
+ mem = flex_alloc (num_bytes);
+ if (!mem)
+ flexfatal (_
+ ("memory allocation failed in allocate_array()"));
return mem;
- }
+}
/* all_lower - true if a string is all lower-case */
-int all_lower( str )
-char *str;
- {
- while ( *str )
- {
- if ( ! isascii( (Char) *str ) || ! islower( (Char) *str ) )
+int all_lower (str)
+ char *str;
+{
+ while (*str) {
+ if (!isascii ((Char) * str) || !islower ((Char) * str))
return 0;
++str;
- }
+ }
return 1;
- }
+}
/* all_upper - true if a string is all upper-case */
-int all_upper( str )
-char *str;
- {
- while ( *str )
- {
- if ( ! isascii( (Char) *str ) || ! isupper( (Char) *str ) )
+int all_upper (str)
+ char *str;
+{
+ while (*str) {
+ if (!isascii ((Char) * str) || !isupper ((Char) * str))
return 0;
++str;
- }
+ }
return 1;
- }
+}
-/* bubble - bubble sort an integer array in increasing order
- *
- * synopsis
- * int v[n], n;
- * void bubble( v, n );
- *
- * description
- * sorts the first n elements of array v and replaces them in
- * increasing order.
- *
- * passed
- * v - the array to be sorted
- * n - the number of elements of 'v' to be sorted
- */
+/* intcmp - compares two integers for use by qsort. */
-void bubble( v, n )
-int v[], n;
- {
- int i, j, k;
-
- for ( i = n; i > 1; --i )
- for ( j = 1; j < i; ++j )
- if ( v[j] > v[j + 1] ) /* compare */
- {
- k = v[j]; /* exchange */
- v[j] = v[j + 1];
- v[j + 1] = k;
- }
- }
+int intcmp (const void *a, const void *b)
+{
+ return *(const int *) a - *(const int *) b;
+}
/* check_char - checks a character to make sure it's within the range
@@ -170,328 +226,304 @@ int v[], n;
* and exits.
*/
-void check_char( c )
-int c;
- {
- if ( c >= CSIZE )
- lerrsf( _( "bad character '%s' detected in check_char()" ),
- readable_form( c ) );
-
- if ( c >= csize )
- lerrsf(
- _( "scanner requires -8 flag to use the character %s" ),
- readable_form( c ) );
- }
+void check_char (c)
+ int c;
+{
+ if (c >= CSIZE)
+ lerrsf (_("bad character '%s' detected in check_char()"),
+ readable_form (c));
+
+ if (c >= csize)
+ lerrsf (_
+ ("scanner requires -8 flag to use the character %s"),
+ readable_form (c));
+}
/* clower - replace upper-case letter to lower-case */
-Char clower( c )
-int c;
- {
- return (Char) ((isascii( c ) && isupper( c )) ? tolower( c ) : c);
- }
+Char clower (c)
+ int c;
+{
+ return (Char) ((isascii (c) && isupper (c)) ? tolower (c) : c);
+}
/* copy_string - returns a dynamically allocated copy of a string */
-char *copy_string( str )
-const char *str;
- {
+char *copy_string (str)
+ const char *str;
+{
const char *c1;
char *c2;
- char *copy;
+ char *copy;
unsigned int size;
/* find length */
- for ( c1 = str; *c1; ++c1 )
- ;
+ for (c1 = str; *c1; ++c1) ;
+
+ size = (c1 - str + 1) * sizeof (char);
- size = (c1 - str + 1) * sizeof( char );
- copy = (char *) flex_alloc( size );
+ copy = (char *) flex_alloc (size);
- if ( copy == NULL )
- flexfatal( _( "dynamic memory failure in copy_string()" ) );
+ if (copy == NULL)
+ flexfatal (_("dynamic memory failure in copy_string()"));
- for ( c2 = copy; (*c2++ = *str++) != 0; )
- ;
+ for (c2 = copy; (*c2++ = *str++) != 0;) ;
return copy;
- }
+}
/* copy_unsigned_string -
* returns a dynamically allocated copy of a (potentially) unsigned string
*/
-Char *copy_unsigned_string( str )
-Char *str;
- {
+Char *copy_unsigned_string (str)
+ Char *str;
+{
Char *c;
- Char *copy;
+ Char *copy;
/* find length */
- for ( c = str; *c; ++c )
- ;
+ for (c = str; *c; ++c) ;
- copy = allocate_Character_array( c - str + 1 );
+ copy = allocate_Character_array (c - str + 1);
- for ( c = copy; (*c++ = *str++) != 0; )
- ;
+ for (c = copy; (*c++ = *str++) != 0;) ;
return copy;
- }
+}
-/* cshell - shell sort a character array in increasing order
- *
- * synopsis
- *
- * Char v[n];
- * int n, special_case_0;
- * cshell( v, n, special_case_0 );
- *
- * description
- * Does a shell sort of the first n elements of array v.
- * If special_case_0 is true, then any element equal to 0
- * is instead assumed to have infinite weight.
- *
- * passed
- * v - array to be sorted
- * n - number of elements of v to be sorted
- */
+/* cclcmp - compares two characters for use by qsort with '\0' sorting last. */
-void cshell( v, n, special_case_0 )
-Char v[];
-int n, special_case_0;
- {
- int gap, i, j, jg;
- Char k;
-
- for ( gap = n / 2; gap > 0; gap = gap / 2 )
- for ( i = gap; i < n; ++i )
- for ( j = i - gap; j >= 0; j = j - gap )
- {
- jg = j + gap;
-
- if ( special_case_0 )
- {
- if ( v[jg] == 0 )
- break;
-
- else if ( v[j] != 0 && v[j] <= v[jg] )
- break;
- }
-
- else if ( v[j] <= v[jg] )
- break;
-
- k = v[j];
- v[j] = v[jg];
- v[jg] = k;
- }
- }
+int cclcmp (const void *a, const void *b)
+{
+ if (!*(const Char *) a)
+ return 1;
+ else
+ if (!*(const Char *) b)
+ return - 1;
+ else
+ return *(const Char *) a - *(const Char *) b;
+}
/* dataend - finish up a block of data declarations */
-void dataend()
- {
- if ( datapos > 0 )
- dataflush();
+void dataend ()
+{
+ /* short circuit any output */
+ if (gentables) {
- /* add terminator for initialization; { for vi */
- outn( " } ;\n" );
+ if (datapos > 0)
+ dataflush ();
+ /* add terminator for initialization; { for vi */
+ outn (" } ;\n");
+ }
dataline = 0;
datapos = 0;
- }
+}
/* dataflush - flush generated data statements */
-void dataflush()
- {
- outc( '\n' );
+void dataflush ()
+{
+ /* short circuit any output */
+ if (!gentables)
+ return;
+
+ outc ('\n');
- if ( ++dataline >= NUMDATALINES )
- {
+ if (++dataline >= NUMDATALINES) {
/* Put out a blank line so that the table is grouped into
* large blocks that enable the user to find elements easily.
*/
- outc( '\n' );
+ outc ('\n');
dataline = 0;
- }
+ }
/* Reset the number of characters written on the current line. */
datapos = 0;
- }
+}
/* flexerror - report an error message and terminate */
-void flexerror( msg )
-const char msg[];
- {
- fprintf( stderr, "%s: %s\n", program_name, msg );
- flexend( 1 );
- }
+void flexerror (msg)
+ const char *msg;
+{
+ fprintf (stderr, "%s: %s\n", program_name, msg);
+ flexend (1);
+}
/* flexfatal - report a fatal error message and terminate */
-void flexfatal( msg )
-const char msg[];
- {
- fprintf( stderr, _( "%s: fatal internal error, %s\n" ),
- program_name, msg );
- exit( 1 );
- }
+void flexfatal (msg)
+ const char *msg;
+{
+ fprintf (stderr, _("%s: fatal internal error, %s\n"),
+ program_name, msg);
+ FLEX_EXIT (1);
+}
/* htoi - convert a hexadecimal digit string to an integer value */
-int htoi( str )
-Char str[];
- {
+int htoi (str)
+ Char str[];
+{
unsigned int result;
- (void) sscanf( (char *) str, "%x", &result );
+ (void) sscanf ((char *) str, "%x", &result);
return result;
- }
+}
/* lerrif - report an error message formatted with one integer argument */
-void lerrif( msg, arg )
-const char msg[];
-int arg;
- {
- char errmsg[MAXLINE];
- (void) snprintf( errmsg, sizeof errmsg, msg, arg );
- flexerror( errmsg );
- }
+void lerrif (msg, arg)
+ const char *msg;
+ int arg;
+{
+ char errmsg[MAXLINE];
+
+ snprintf (errmsg, sizeof(errmsg), msg, arg);
+ flexerror (errmsg);
+}
/* lerrsf - report an error message formatted with one string argument */
-void lerrsf( msg, arg )
-const char msg[], arg[];
- {
- char errmsg[MAXLINE];
+void lerrsf (msg, arg)
+ const char *msg, arg[];
+{
+ char errmsg[MAXLINE];
- (void) snprintf( errmsg, sizeof errmsg, msg, arg );
- flexerror( errmsg );
- }
+ snprintf (errmsg, sizeof(errmsg)-1, msg, arg);
+ errmsg[sizeof(errmsg)-1] = 0; /* ensure NULL termination */
+ flexerror (errmsg);
+}
+
+
+/* lerrsf_fatal - as lerrsf, but call flexfatal */
+
+void lerrsf_fatal (msg, arg)
+ const char *msg, arg[];
+{
+ char errmsg[MAXLINE];
+
+ snprintf (errmsg, sizeof(errmsg)-1, msg, arg);
+ errmsg[sizeof(errmsg)-1] = 0; /* ensure NULL termination */
+ flexfatal (errmsg);
+}
/* line_directive_out - spit out a "#line" statement */
-void line_directive_out( output_file, do_infile )
-FILE *output_file;
-int do_infile;
- {
- char directive[MAXLINE], filename[MAXLINE];
- char *s1, *s2, *s3;
- static const char line_fmt[] = "#line %d \"%s\"\n";
+void line_directive_out (output_file, do_infile)
+ FILE *output_file;
+ int do_infile;
+{
+ char directive[MAXLINE], filename[MAXLINE];
+ char *s1, *s2, *s3;
+ static const char *line_fmt = "#line %d \"%s\"\n";
- if ( ! gen_line_dirs )
+ if (!gen_line_dirs)
return;
- if ( (do_infile && ! infilename) || (! do_infile && ! outfilename) )
- /* don't know the filename to use, skip */
- return;
+ s1 = do_infile ? infilename : "M4_YY_OUTFILE_NAME";
- s1 = do_infile ? infilename : outfilename;
+ if (do_infile && !s1)
+ s1 = "<stdin>";
+
s2 = filename;
- s3 = &filename[sizeof( filename ) - 2];
+ s3 = &filename[sizeof (filename) - 2];
- while ( s2 < s3 && *s1 )
- {
- if ( *s1 == '\\' )
+ while (s2 < s3 && *s1) {
+ if (*s1 == '\\')
/* Escape the '\' */
*s2++ = '\\';
*s2++ = *s1++;
- }
+ }
*s2 = '\0';
- if ( do_infile )
- snprintf( directive, sizeof directive, line_fmt,
- linenum, filename );
- else
- {
- if ( output_file == stdout )
- /* Account for the line directive itself. */
- ++out_linenum;
-
- snprintf( directive, sizeof directive, line_fmt,
- out_linenum, filename );
- }
+ if (do_infile)
+ snprintf (directive, sizeof(directive), line_fmt, linenum, filename);
+ else {
+ snprintf (directive, sizeof(directive), line_fmt, 0, filename);
+ }
/* If output_file is nil then we should put the directive in
* the accumulated actions.
*/
- if ( output_file )
- {
- fputs( directive, output_file );
- }
- else
- add_action( directive );
+ if (output_file) {
+ fputs (directive, output_file);
}
+ else
+ add_action (directive);
+}
/* mark_defs1 - mark the current position in the action array as
* representing where the user's section 1 definitions end
* and the prolog begins
*/
-void mark_defs1()
- {
+void mark_defs1 ()
+{
defs1_offset = 0;
action_array[action_index++] = '\0';
action_offset = prolog_offset = action_index;
action_array[action_index] = '\0';
- }
+}
/* mark_prolog - mark the current position in the action array as
* representing the end of the action prolog
*/
-void mark_prolog()
- {
+void mark_prolog ()
+{
action_array[action_index++] = '\0';
action_offset = action_index;
action_array[action_index] = '\0';
- }
+}
/* mk2data - generate a data statement for a two-dimensional array
*
* Generates a data statement initializing the current 2-D array to "value".
*/
-void mk2data( value )
-int value;
- {
- if ( datapos >= NUMDATAITEMS )
- {
- outc( ',' );
- dataflush();
- }
+void mk2data (value)
+ int value;
+{
+ /* short circuit any output */
+ if (!gentables)
+ return;
- if ( datapos == 0 )
+ if (datapos >= NUMDATAITEMS) {
+ outc (',');
+ dataflush ();
+ }
+
+ if (datapos == 0)
/* Indent. */
- out( " " );
+ out (" ");
else
- outc( ',' );
+ outc (',');
++datapos;
- out_dec( "%5d", value );
- }
+ out_dec ("%5d", value);
+}
/* mkdata - generate a data statement
@@ -499,76 +531,87 @@ int value;
* Generates a data statement initializing the current array element to
* "value".
*/
-void mkdata( value )
-int value;
- {
- if ( datapos >= NUMDATAITEMS )
- {
- outc( ',' );
- dataflush();
- }
+void mkdata (value)
+ int value;
+{
+ /* short circuit any output */
+ if (!gentables)
+ return;
- if ( datapos == 0 )
+ if (datapos >= NUMDATAITEMS) {
+ outc (',');
+ dataflush ();
+ }
+
+ if (datapos == 0)
/* Indent. */
- out( " " );
+ out (" ");
else
- outc( ',' );
+ outc (',');
++datapos;
- out_dec( "%5d", value );
- }
+ out_dec ("%5d", value);
+}
/* myctoi - return the integer represented by a string of digits */
-int myctoi( array )
-char array[];
- {
- int val = 0;
+int myctoi (array)
+ const char *array;
+{
+ int val = 0;
- (void) sscanf( array, "%d", &val );
+ (void) sscanf (array, "%d", &val);
return val;
- }
+}
/* myesc - return character corresponding to escape sequence */
-Char myesc( array )
-Char array[];
- {
- Char c, esc_char;
-
- switch ( array[1] )
- {
- case 'b': return '\b';
- case 'f': return '\f';
- case 'n': return '\n';
- case 'r': return '\r';
- case 't': return '\t';
-
-#ifdef __STDC__
- case 'a': return '\a';
- case 'v': return '\v';
+Char myesc (array)
+ Char array[];
+{
+ Char c, esc_char;
+
+ switch (array[1]) {
+ case 'b':
+ return '\b';
+ case 'f':
+ return '\f';
+ case 'n':
+ return '\n';
+ case 'r':
+ return '\r';
+ case 't':
+ return '\t';
+
+#if defined (__STDC__)
+ case 'a':
+ return '\a';
+ case 'v':
+ return '\v';
#else
- case 'a': return '\007';
- case 'v': return '\013';
+ case 'a':
+ return '\007';
+ case 'v':
+ return '\013';
#endif
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- { /* \<octal> */
- int sptr = 1;
-
- while ( isascii( array[sptr] ) &&
- isdigit( array[sptr] ) )
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ { /* \<octal> */
+ int sptr = 1;
+
+ while (isascii (array[sptr]) &&
+ isdigit (array[sptr]))
/* Don't increment inside loop control
* because if isdigit() is a macro it might
* expand into multiple increments ...
@@ -578,19 +621,19 @@ Char array[];
c = array[sptr];
array[sptr] = '\0';
- esc_char = otoi( array + 1 );
+ esc_char = otoi (array + 1);
array[sptr] = c;
return esc_char;
- }
+ }
- case 'x':
- { /* \x<hex> */
- int sptr = 2;
+ case 'x':
+ { /* \x<hex> */
+ int sptr = 2;
- while ( isascii( array[sptr] ) &&
- isxdigit( array[sptr] ) )
+ while (isascii (array[sptr]) &&
+ isxdigit (array[sptr]))
/* Don't increment inside loop control
* because if isdigit() is a macro it might
* expand into multiple increments ...
@@ -600,119 +643,104 @@ Char array[];
c = array[sptr];
array[sptr] = '\0';
- esc_char = htoi( array + 2 );
+ esc_char = htoi (array + 2);
array[sptr] = c;
return esc_char;
- }
-
- default:
- return array[1];
}
+
+ default:
+ return array[1];
}
+}
/* otoi - convert an octal digit string to an integer value */
-int otoi( str )
-Char str[];
- {
+int otoi (str)
+ Char str[];
+{
unsigned int result;
- (void) sscanf( (char *) str, "%o", &result );
+ (void) sscanf ((char *) str, "%o", &result);
return result;
- }
+}
/* out - various flavors of outputing a (possibly formatted) string for the
* generated scanner, keeping track of the line count.
*/
-void out( str )
-const char str[];
- {
- fputs( str, stdout );
- out_line_count( str );
- }
-
-void out_dec( fmt, n )
-const char fmt[];
-int n;
- {
- printf( fmt, n );
- out_line_count( fmt );
- }
-
-void out_dec2( fmt, n1, n2 )
-const char fmt[];
-int n1, n2;
- {
- printf( fmt, n1, n2 );
- out_line_count( fmt );
- }
-
-void out_hex( fmt, x )
-const char fmt[];
-unsigned int x;
- {
- printf( fmt, x );
- out_line_count( fmt );
- }
-
-void out_line_count( str )
-const char str[];
- {
- int i;
-
- for ( i = 0; str[i]; ++i )
- if ( str[i] == '\n' )
- ++out_linenum;
- }
-
-void out_str( fmt, str )
-const char fmt[], str[];
- {
- printf( fmt, str );
- out_line_count( fmt );
- out_line_count( str );
- }
-
-void out_str3( fmt, s1, s2, s3 )
-const char fmt[], s1[], s2[], s3[];
- {
- printf( fmt, s1, s2, s3 );
- out_line_count( fmt );
- out_line_count( s1 );
- out_line_count( s2 );
- out_line_count( s3 );
- }
-
-void out_str_dec( fmt, str, n )
-const char fmt[], str[];
-int n;
- {
- printf( fmt, str, n );
- out_line_count( fmt );
- out_line_count( str );
- }
-
-void outc( c )
-int c;
- {
- putc( c, stdout );
-
- if ( c == '\n' )
- ++out_linenum;
- }
-
-void outn( str )
-const char str[];
- {
- puts( str );
- out_line_count( str );
- ++out_linenum;
- }
+void out (str)
+ const char *str;
+{
+ fputs (str, stdout);
+}
+
+void out_dec (fmt, n)
+ const char *fmt;
+ int n;
+{
+ fprintf (stdout, fmt, n);
+}
+
+void out_dec2 (fmt, n1, n2)
+ const char *fmt;
+ int n1, n2;
+{
+ fprintf (stdout, fmt, n1, n2);
+}
+
+void out_hex (fmt, x)
+ const char *fmt;
+ unsigned int x;
+{
+ fprintf (stdout, fmt, x);
+}
+
+void out_str (fmt, str)
+ const char *fmt, str[];
+{
+ fprintf (stdout,fmt, str);
+}
+
+void out_str3 (fmt, s1, s2, s3)
+ const char *fmt, s1[], s2[], s3[];
+{
+ fprintf (stdout,fmt, s1, s2, s3);
+}
+
+void out_str_dec (fmt, str, n)
+ const char *fmt, str[];
+ int n;
+{
+ fprintf (stdout,fmt, str, n);
+}
+
+void outc (c)
+ int c;
+{
+ fputc (c, stdout);
+}
+
+void outn (str)
+ const char *str;
+{
+ fputs (str,stdout);
+ fputc('\n',stdout);
+}
+
+/** Print "m4_define( [[def]], [[val]])m4_dnl\n".
+ * @param def The m4 symbol to define.
+ * @param val The definition; may be NULL.
+ * @return buf
+ */
+void out_m4_define (const char* def, const char* val)
+{
+ const char * fmt = "m4_define( [[%s]], [[%s]])m4_dnl\n";
+ fprintf(stdout, fmt, def, val?val:"");
+}
/* readable_form - return the human-readable form of a character
@@ -720,62 +748,65 @@ const char str[];
* The returned string is in static storage.
*/
-char *readable_form( c )
-int c;
- {
+char *readable_form (c)
+ int c;
+{
static char rform[10];
- if ( (c >= 0 && c < 32) || c >= 127 )
- {
- switch ( c )
- {
- case '\b': return "\\b";
- case '\f': return "\\f";
- case '\n': return "\\n";
- case '\r': return "\\r";
- case '\t': return "\\t";
-
-#ifdef __STDC__
- case '\a': return "\\a";
- case '\v': return "\\v";
+ if ((c >= 0 && c < 32) || c >= 127) {
+ switch (c) {
+ case '\b':
+ return "\\b";
+ case '\f':
+ return "\\f";
+ case '\n':
+ return "\\n";
+ case '\r':
+ return "\\r";
+ case '\t':
+ return "\\t";
+
+#if defined (__STDC__)
+ case '\a':
+ return "\\a";
+ case '\v':
+ return "\\v";
#endif
- default:
- (void) snprintf( rform, sizeof rform,
- "\\%.3o", (unsigned int) c );
- return rform;
- }
+ default:
+ snprintf (rform, sizeof(rform), "\\%.3o", (unsigned int) c);
+ return rform;
}
+ }
- else if ( c == ' ' )
+ else if (c == ' ')
return "' '";
- else
- {
+ else {
rform[0] = c;
rform[1] = '\0';
return rform;
- }
}
+}
/* reallocate_array - increase the size of a dynamic array */
-void *reallocate_array( array, size, element_size )
-void *array;
-int size;
-size_t element_size;
- {
+void *reallocate_array (array, size, element_size)
+ void *array;
+ int size;
+ size_t element_size;
+{
void *new_array;
- size_t num_bytes = element_size * size;
+ size_t num_bytes = element_size * size;
- new_array = flex_realloc( array, num_bytes );
- if ( ! new_array )
- flexfatal( _( "attempt to increase array size failed" ) );
+ new_array = flex_realloc (array, num_bytes);
+ if (!new_array)
+ flexfatal (_("attempt to increase array size failed"));
return new_array;
- }
+}
/* skelout - write out one section of the skeleton file
@@ -784,56 +815,129 @@ size_t element_size;
* Copies skelfile or skel array to stdout until a line beginning with
* "%%" or EOF is found.
*/
-void skelout()
- {
- char buf_storage[MAXLINE];
- char *buf = buf_storage;
- int do_copy = 1;
+void skelout ()
+{
+ char buf_storage[MAXLINE];
+ char *buf = buf_storage;
+ bool do_copy = true;
+
+ /* "reset" the state by clearing the buffer and pushing a '1' */
+ if(sko_len > 0)
+ sko_peek(&do_copy);
+ sko_len = 0;
+ sko_push(do_copy=true);
+
/* Loop pulling lines either from the skelfile, if we're using
* one, or from the skel[] array.
*/
- while ( skelfile ?
- (fgets( buf, MAXLINE, skelfile ) != NULL) :
- ((buf = (char *) skel[skel_ind++]) != 0) )
- { /* copy from skel array */
- if ( buf[0] == '%' )
- { /* control line */
- switch ( buf[1] )
- {
- case '%':
- return;
-
- case '+':
- do_copy = C_plus_plus;
- break;
-
- case '-':
- do_copy = ! C_plus_plus;
- break;
-
- case '*':
- do_copy = 1;
- break;
-
- default:
- flexfatal(
- _( "bad line in skeleton file" ) );
- }
+ while (skelfile ?
+ (fgets (buf, MAXLINE, skelfile) != NULL) :
+ ((buf = (char *) skel[skel_ind++]) != 0)) {
+
+ if (skelfile)
+ chomp (buf);
+
+ /* copy from skel array */
+ if (buf[0] == '%') { /* control line */
+ /* print the control line as a comment. */
+ if (ddebug && buf[1] != '#') {
+ if (buf[strlen (buf) - 1] == '\\')
+ out_str ("/* %s */\\\n", buf);
+ else
+ out_str ("/* %s */\n", buf);
}
- else if ( do_copy )
- {
- if ( skelfile )
- /* Skeleton file reads include final
- * newline, skel[] array does not.
- */
- out( buf );
- else
- outn( buf );
+ /* We've been accused of using cryptic markers in the skel.
+ * So we'll use emacs-style-hyphenated-commands.
+ * We might consider a hash if this if-else-if-else
+ * chain gets too large.
+ */
+#define cmd_match(s) (strncmp(buf,(s),strlen(s))==0)
+
+ if (buf[1] == '%') {
+ /* %% is a break point for skelout() */
+ return;
+ }
+ else if (cmd_match (CMD_PUSH)){
+ sko_push(do_copy);
+ if(ddebug){
+ out_str("/*(state = (%s) */",do_copy?"true":"false");
+ }
+ out_str("%s\n", buf[strlen (buf) - 1] =='\\' ? "\\" : "");
+ }
+ else if (cmd_match (CMD_POP)){
+ sko_pop(&do_copy);
+ if(ddebug){
+ out_str("/*(state = (%s) */",do_copy?"true":"false");
+ }
+ out_str("%s\n", buf[strlen (buf) - 1] =='\\' ? "\\" : "");
+ }
+ else if (cmd_match (CMD_IF_REENTRANT)){
+ sko_push(do_copy);
+ do_copy = reentrant && do_copy;
+ }
+ else if (cmd_match (CMD_IF_NOT_REENTRANT)){
+ sko_push(do_copy);
+ do_copy = !reentrant && do_copy;
+ }
+ else if (cmd_match(CMD_IF_BISON_BRIDGE)){
+ sko_push(do_copy);
+ do_copy = bison_bridge_lval && do_copy;
+ }
+ else if (cmd_match(CMD_IF_NOT_BISON_BRIDGE)){
+ sko_push(do_copy);
+ do_copy = !bison_bridge_lval && do_copy;
+ }
+ else if (cmd_match (CMD_ENDIF)){
+ sko_pop(&do_copy);
+ }
+ else if (cmd_match (CMD_IF_TABLES_SER)) {
+ do_copy = do_copy && tablesext;
+ }
+ else if (cmd_match (CMD_TABLES_YYDMAP)) {
+ if (tablesext && yydmap_buf.elts)
+ outn ((char *) (yydmap_buf.elts));
+ }
+ else if (cmd_match (CMD_DEFINE_YYTABLES)) {
+ out_str("#define YYTABLES_NAME \"%s\"\n",
+ tablesname?tablesname:"yytables");
+ }
+ else if (cmd_match (CMD_IF_CPP_ONLY)) {
+ /* only for C++ */
+ sko_push(do_copy);
+ do_copy = C_plus_plus;
+ }
+ else if (cmd_match (CMD_IF_C_ONLY)) {
+ /* %- only for C */
+ sko_push(do_copy);
+ do_copy = !C_plus_plus;
+ }
+ else if (cmd_match (CMD_IF_C_OR_CPP)) {
+ /* %* for C and C++ */
+ sko_push(do_copy);
+ do_copy = true;
+ }
+ else if (cmd_match (CMD_NOT_FOR_HEADER)) {
+ /* %c begin linkage-only (non-header) code. */
+ OUT_BEGIN_CODE ();
+ }
+ else if (cmd_match (CMD_OK_FOR_HEADER)) {
+ /* %e end linkage-only code. */
+ OUT_END_CODE ();
+ }
+ else if (buf[1] == '#') {
+ /* %# a comment in the skel. ignore. */
+ }
+ else {
+ flexfatal (_("bad line in skeleton file"));
}
}
- }
+
+ else if (do_copy)
+ outn (buf);
+ } /* end while */
+}
/* transition_struct_out - output a yy_trans_info structure
@@ -842,39 +946,43 @@ void skelout()
* element_n. Formats the output with spaces and carriage returns.
*/
-void transition_struct_out( element_v, element_n )
-int element_v, element_n;
- {
- out_dec2( " {%4d,%4d },", element_v, element_n );
+void transition_struct_out (element_v, element_n)
+ int element_v, element_n;
+{
+
+ /* short circuit any output */
+ if (!gentables)
+ return;
+
+ out_dec2 (" {%4d,%4d },", element_v, element_n);
datapos += TRANS_STRUCT_PRINT_LENGTH;
- if ( datapos >= 79 - TRANS_STRUCT_PRINT_LENGTH )
- {
- outc( '\n' );
+ if (datapos >= 79 - TRANS_STRUCT_PRINT_LENGTH) {
+ outc ('\n');
- if ( ++dataline % 10 == 0 )
- outc( '\n' );
+ if (++dataline % 10 == 0)
+ outc ('\n');
datapos = 0;
- }
}
+}
/* The following is only needed when building flex's parser using certain
* broken versions of bison.
*/
-void *yy_flex_xmalloc( size )
-int size;
- {
- void *result = flex_alloc( (size_t) size );
+void *yy_flex_xmalloc (size)
+ int size;
+{
+ void *result = flex_alloc ((size_t) size);
- if ( ! result )
- flexfatal(
- _( "memory allocation failed in yy_flex_xmalloc()" ) );
+ if (!result)
+ flexfatal (_
+ ("memory allocation failed in yy_flex_xmalloc()"));
return result;
- }
+}
/* zero_out - set a region of memory to 0
@@ -882,15 +990,37 @@ int size;
* Sets region_ptr[0] through region_ptr[size_in_bytes - 1] to zero.
*/
-void zero_out( region_ptr, size_in_bytes )
-char *region_ptr;
-size_t size_in_bytes;
- {
+void zero_out (region_ptr, size_in_bytes)
+ char *region_ptr;
+ size_t size_in_bytes;
+{
char *rp, *rp_end;
rp = region_ptr;
rp_end = region_ptr + size_in_bytes;
- while ( rp < rp_end )
+ while (rp < rp_end)
*rp++ = 0;
- }
+}
+
+/* Remove all '\n' and '\r' characters, if any, from the end of str.
+ * str can be any null-terminated string, or NULL.
+ * returns str. */
+char *chomp (str)
+ char *str;
+{
+ char *p = str;
+
+ if (!str || !*str) /* s is null or empty string */
+ return str;
+
+ /* find end of string minus one */
+ while (*p)
+ ++p;
+ --p;
+
+ /* eat newlines */
+ while (p >= str && (*p == '\r' || *p == '\n'))
+ *p-- = 0;
+ return str;
+}
diff --git a/usr.bin/lex/mkskel.sh b/usr.bin/lex/mkskel.sh
index 59f1a53808a..9a8b02e1fed 100644
--- a/usr.bin/lex/mkskel.sh
+++ b/usr.bin/lex/mkskel.sh
@@ -1,6 +1,26 @@
#! /bin/sh
-# $OpenBSD: mkskel.sh,v 1.2 1996/06/26 05:35:39 deraadt Exp $
+# $OpenBSD: mkskel.sh,v 1.3 2015/11/19 19:43:40 tedu Exp $
+# This file is part of flex.
+
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+
+# Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE.
cat <<!
/* File created from flex.skl via mkskel.sh */
@@ -10,7 +30,7 @@ cat <<!
const char *skel[] = {
!
-sed 's/\\/&&/g' $* | sed 's/"/\\"/g' | sed 's/.*/ "&",/'
+sed 's/\\/&&/g' | sed 's/"/\\"/g' | sed 's/.*/ "&",/'
cat <<!
0
diff --git a/usr.bin/lex/nfa.c b/usr.bin/lex/nfa.c
index bbf3d8d6bf7..f92f7fa9b86 100644
--- a/usr.bin/lex/nfa.c
+++ b/usr.bin/lex/nfa.c
@@ -1,47 +1,45 @@
-/* $OpenBSD: nfa.c,v 1.9 2003/06/04 17:34:44 millert Exp $ */
+/* $OpenBSD: nfa.c,v 1.10 2015/11/19 19:43:40 tedu Exp $ */
/* nfa - NFA construction routines */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/nfa.c,v 1.9 2003/06/04 17:34:44 millert Exp $ */
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include "flexdef.h"
/* declare functions that have forward references */
-int dupmachine PROTO((int));
-void mkxtion PROTO((int, int));
+int dupmachine PROTO ((int));
+void mkxtion PROTO ((int, int));
/* add_accept - add an accepting state to a machine
@@ -49,25 +47,25 @@ void mkxtion PROTO((int, int));
* accepting_number becomes mach's accepting number.
*/
-void add_accept( mach, accepting_number )
-int mach, accepting_number;
- {
+void add_accept (mach, accepting_number)
+ int mach, accepting_number;
+{
/* Hang the accepting number off an epsilon state. if it is associated
* with a state that has a non-epsilon out-transition, then the state
* will accept BEFORE it makes that transition, i.e., one character
* too soon.
*/
- if ( transchar[finalst[mach]] == SYM_EPSILON )
+ if (transchar[finalst[mach]] == SYM_EPSILON)
accptnum[finalst[mach]] = accepting_number;
- else
- {
- int astate = mkstate( SYM_EPSILON );
+ else {
+ int astate = mkstate (SYM_EPSILON);
+
accptnum[astate] = accepting_number;
- (void) link_machines( mach, astate );
- }
+ (void) link_machines (mach, astate);
}
+}
/* copysingl - make a given number of copies of a singleton machine
@@ -81,31 +79,32 @@ int mach, accepting_number;
* num - the number of copies of singl to be present in newsng
*/
-int copysingl( singl, num )
-int singl, num;
- {
- int copy, i;
+int copysingl (singl, num)
+ int singl, num;
+{
+ int copy, i;
- copy = mkstate( SYM_EPSILON );
+ copy = mkstate (SYM_EPSILON);
- for ( i = 1; i <= num; ++i )
- copy = link_machines( copy, dupmachine( singl ) );
+ for (i = 1; i <= num; ++i)
+ copy = link_machines (copy, dupmachine (singl));
return copy;
- }
+}
/* dumpnfa - debugging routine to write out an nfa */
-void dumpnfa( state1 )
-int state1;
+void dumpnfa (state1)
+ int state1;
- {
- int sym, tsp1, tsp2, anum, ns;
+{
+ int sym, tsp1, tsp2, anum, ns;
- fprintf( stderr,
- _( "\n\n********** beginning dump of nfa with start state %d\n" ),
- state1 );
+ fprintf (stderr,
+ _
+ ("\n\n********** beginning dump of nfa with start state %d\n"),
+ state1);
/* We probably should loop starting at firstst[state1] and going to
* lastst[state1], but they're not maintained properly when we "or"
@@ -114,26 +113,25 @@ int state1;
*/
/* for ( ns = firstst[state1]; ns <= lastst[state1]; ++ns ) */
- for ( ns = 1; ns <= lastnfa; ++ns )
- {
- fprintf( stderr, _( "state # %4d\t" ), ns );
+ for (ns = 1; ns <= lastnfa; ++ns) {
+ fprintf (stderr, _("state # %4d\t"), ns);
sym = transchar[ns];
tsp1 = trans1[ns];
tsp2 = trans2[ns];
anum = accptnum[ns];
- fprintf( stderr, "%3d: %4d, %4d", sym, tsp1, tsp2 );
-
- if ( anum != NIL )
- fprintf( stderr, " [%d]", anum );
+ fprintf (stderr, "%3d: %4d, %4d", sym, tsp1, tsp2);
- fprintf( stderr, "\n" );
- }
+ if (anum != NIL)
+ fprintf (stderr, " [%d]", anum);
- fprintf( stderr, _( "********** end of dump\n" ) );
+ fprintf (stderr, "\n");
}
+ fprintf (stderr, _("********** end of dump\n"));
+}
+
/* dupmachine - make a duplicate of a given machine
*
@@ -152,32 +150,30 @@ int state1;
* states accessible by the arrays firstst and lastst
*/
-int dupmachine( mach )
-int mach;
- {
- int i, init, state_offset;
- int state = 0;
- int last = lastst[mach];
-
- for ( i = firstst[mach]; i <= last; ++i )
- {
- state = mkstate( transchar[i] );
-
- if ( trans1[i] != NO_TRANSITION )
- {
- mkxtion( finalst[state], trans1[i] + state - i );
-
- if ( transchar[i] == SYM_EPSILON &&
- trans2[i] != NO_TRANSITION )
- mkxtion( finalst[state],
- trans2[i] + state - i );
- }
+int dupmachine (mach)
+ int mach;
+{
+ int i, init, state_offset;
+ int state = 0;
+ int last = lastst[mach];
- accptnum[state] = accptnum[i];
+ for (i = firstst[mach]; i <= last; ++i) {
+ state = mkstate (transchar[i]);
+
+ if (trans1[i] != NO_TRANSITION) {
+ mkxtion (finalst[state], trans1[i] + state - i);
+
+ if (transchar[i] == SYM_EPSILON &&
+ trans2[i] != NO_TRANSITION)
+ mkxtion (finalst[state],
+ trans2[i] + state - i);
}
- if ( state == 0 )
- flexfatal( _( "empty machine in dupmachine()" ) );
+ accptnum[state] = accptnum[i];
+ }
+
+ if (state == 0)
+ flexfatal (_("empty machine in dupmachine()"));
state_offset = state - i + 1;
@@ -187,7 +183,7 @@ int mach;
lastst[init] = lastst[mach] + state_offset;
return init;
- }
+}
/* finish_rule - finish up the processing for a rule
@@ -202,12 +198,13 @@ int mach;
* context has variable length.
*/
-void finish_rule( mach, variable_trail_rule, headcnt, trailcnt )
-int mach, variable_trail_rule, headcnt, trailcnt;
- {
- char action_text[MAXLINE];
+void finish_rule (mach, variable_trail_rule, headcnt, trailcnt,
+ pcont_act)
+ int mach, variable_trail_rule, headcnt, trailcnt, pcont_act;
+{
+ char action_text[MAXLINE];
- add_accept( mach, num_rules );
+ add_accept (mach, num_rules);
/* We did this in new_rule(), but it often gets the wrong
* number because we do it before we start parsing the current rule.
@@ -217,70 +214,88 @@ int mach, variable_trail_rule, headcnt, trailcnt;
/* If this is a continued action, then the line-number has already
* been updated, giving us the wrong number.
*/
- if ( continued_action )
+ if (continued_action)
--rule_linenum[num_rules];
- snprintf( action_text, sizeof action_text, "case %d:\n", num_rules );
- add_action( action_text );
- if ( variable_trail_rule )
- {
+ /* If the previous rule was continued action, then we inherit the
+ * previous newline flag, possibly overriding the current one.
+ */
+ if (pcont_act && rule_has_nl[num_rules - 1])
+ rule_has_nl[num_rules] = true;
+
+ snprintf (action_text, sizeof(action_text), "case %d:\n", num_rules);
+ add_action (action_text);
+ if (rule_has_nl[num_rules]) {
+ snprintf (action_text, sizeof(action_text), "/* rule %d can match eol */\n",
+ num_rules);
+ add_action (action_text);
+ }
+
+
+ if (variable_trail_rule) {
rule_type[num_rules] = RULE_VARIABLE;
- if ( performance_report > 0 )
- fprintf( stderr,
- _( "Variable trailing context rule at line %d\n" ),
- rule_linenum[num_rules] );
+ if (performance_report > 0)
+ fprintf (stderr,
+ _
+ ("Variable trailing context rule at line %d\n"),
+ rule_linenum[num_rules]);
variable_trailing_context_rules = true;
- }
+ }
- else
- {
+ else {
rule_type[num_rules] = RULE_NORMAL;
- if ( headcnt > 0 || trailcnt > 0 )
- {
+ if (headcnt > 0 || trailcnt > 0) {
/* Do trailing context magic to not match the trailing
* characters.
*/
- char *scanner_cp = "yy_c_buf_p = yy_cp";
- char *scanner_bp = "yy_bp";
-
- add_action(
- "*yy_cp = yy_hold_char; /* undo effects of setting up yytext */\n" );
-
- if ( headcnt > 0 )
- {
- snprintf( action_text, sizeof action_text,
- "%s = %s + %d;\n",
- scanner_cp, scanner_bp, headcnt );
- add_action( action_text );
+ char *scanner_cp = "YY_G(yy_c_buf_p) = yy_cp";
+ char *scanner_bp = "yy_bp";
+
+ add_action
+ ("*yy_cp = YY_G(yy_hold_char); /* undo effects of setting up yytext */\n");
+
+ if (headcnt > 0) {
+ if (rule_has_nl[num_rules]) {
+ snprintf (action_text, sizeof(action_text),
+ "YY_LINENO_REWIND_TO(%s + %d);\n", scanner_bp, headcnt);
+ add_action (action_text);
}
+ snprintf (action_text, sizeof(action_text), "%s = %s + %d;\n",
+ scanner_cp, scanner_bp, headcnt);
+ add_action (action_text);
+ }
- else
- {
- snprintf( action_text, sizeof action_text,
- "%s -= %d;\n",
- scanner_cp, trailcnt );
- add_action( action_text );
+ else {
+ if (rule_has_nl[num_rules]) {
+ snprintf (action_text, sizeof(action_text),
+ "YY_LINENO_REWIND_TO(yy_cp - %d);\n", trailcnt);
+ add_action (action_text);
}
- add_action(
- "YY_DO_BEFORE_ACTION; /* set up yytext again */\n" );
+ snprintf (action_text, sizeof(action_text), "%s -= %d;\n",
+ scanner_cp, trailcnt);
+ add_action (action_text);
}
+
+ add_action
+ ("YY_DO_BEFORE_ACTION; /* set up yytext again */\n");
}
+ }
/* Okay, in the action code at this point yytext and yyleng have
* their proper final values for this rule, so here's the point
* to do any user action. But don't do it for continued actions,
* as that'll result in multiple YY_RULE_SETUP's.
*/
- if ( ! continued_action )
- add_action( "YY_RULE_SETUP\n" );
+ if (!continued_action)
+ add_action ("YY_RULE_SETUP\n");
- line_directive_out( (FILE *) 0, 1 );
- }
+ line_directive_out ((FILE *) 0, 1);
+}
/* link_machines - connect two machines together
@@ -299,25 +314,24 @@ int mach, variable_trail_rule, headcnt, trailcnt;
* FIRST is set to new by the operation. last is unmolested.
*/
-int link_machines( first, last )
-int first, last;
- {
- if ( first == NIL )
+int link_machines (first, last)
+ int first, last;
+{
+ if (first == NIL)
return last;
- else if ( last == NIL )
+ else if (last == NIL)
return first;
- else
- {
- mkxtion( finalst[first], last );
+ else {
+ mkxtion (finalst[first], last);
finalst[first] = finalst[last];
- lastst[first] = MAX( lastst[first], lastst[last] );
- firstst[first] = MIN( firstst[first], firstst[last] );
+ lastst[first] = MAX (lastst[first], lastst[last]);
+ firstst[first] = MIN (firstst[first], firstst[last]);
return first;
- }
}
+}
/* mark_beginning_as_normal - mark each "beginning" state in a machine
@@ -327,36 +341,32 @@ int first, last;
* The "beginning" states are the epsilon closure of the first state
*/
-void mark_beginning_as_normal( mach )
-int mach;
- {
- switch ( state_type[mach] )
- {
- case STATE_NORMAL:
- /* Oh, we've already visited here. */
- return;
-
- case STATE_TRAILING_CONTEXT:
- state_type[mach] = STATE_NORMAL;
-
- if ( transchar[mach] == SYM_EPSILON )
- {
- if ( trans1[mach] != NO_TRANSITION )
- mark_beginning_as_normal(
- trans1[mach] );
-
- if ( trans2[mach] != NO_TRANSITION )
- mark_beginning_as_normal(
- trans2[mach] );
- }
- break;
+void mark_beginning_as_normal (mach)
+ int mach;
+{
+ switch (state_type[mach]) {
+ case STATE_NORMAL:
+ /* Oh, we've already visited here. */
+ return;
+
+ case STATE_TRAILING_CONTEXT:
+ state_type[mach] = STATE_NORMAL;
- default:
- flexerror(
- _( "bad state type in mark_beginning_as_normal()" ) );
- break;
+ if (transchar[mach] == SYM_EPSILON) {
+ if (trans1[mach] != NO_TRANSITION)
+ mark_beginning_as_normal (trans1[mach]);
+
+ if (trans2[mach] != NO_TRANSITION)
+ mark_beginning_as_normal (trans2[mach]);
}
+ break;
+
+ default:
+ flexerror (_
+ ("bad state type in mark_beginning_as_normal()"));
+ break;
}
+}
/* mkbranch - make a machine that branches to two machines
@@ -373,24 +383,24 @@ int mach;
* more mkbranch's. Compare with mkor()
*/
-int mkbranch( first, second )
-int first, second;
- {
- int eps;
+int mkbranch (first, second)
+ int first, second;
+{
+ int eps;
- if ( first == NO_TRANSITION )
+ if (first == NO_TRANSITION)
return second;
- else if ( second == NO_TRANSITION )
+ else if (second == NO_TRANSITION)
return first;
- eps = mkstate( SYM_EPSILON );
+ eps = mkstate (SYM_EPSILON);
- mkxtion( eps, first );
- mkxtion( eps, second );
+ mkxtion (eps, first);
+ mkxtion (eps, second);
return eps;
- }
+}
/* mkclos - convert a machine into a closure
@@ -401,11 +411,11 @@ int first, second;
* new - a new state which matches the closure of "state"
*/
-int mkclos( state )
-int state;
- {
- return mkopt( mkposcl( state ) );
- }
+int mkclos (state)
+ int state;
+{
+ return mkopt (mkposcl (state));
+}
/* mkopt - make a machine optional
@@ -422,28 +432,27 @@ int state;
* 2. mach is destroyed by the call
*/
-int mkopt( mach )
-int mach;
- {
- int eps;
+int mkopt (mach)
+ int mach;
+{
+ int eps;
- if ( ! SUPER_FREE_EPSILON(finalst[mach]) )
- {
- eps = mkstate( SYM_EPSILON );
- mach = link_machines( mach, eps );
- }
+ if (!SUPER_FREE_EPSILON (finalst[mach])) {
+ eps = mkstate (SYM_EPSILON);
+ mach = link_machines (mach, eps);
+ }
/* Can't skimp on the following if FREE_EPSILON(mach) is true because
* some state interior to "mach" might point back to the beginning
* for a closure.
*/
- eps = mkstate( SYM_EPSILON );
- mach = link_machines( eps, mach );
+ eps = mkstate (SYM_EPSILON);
+ mach = link_machines (eps, mach);
- mkxtion( mach, finalst[mach] );
+ mkxtion (mach, finalst[mach]);
return mach;
- }
+}
/* mkor - make a machine that matches either one of two machines
@@ -460,56 +469,52 @@ int mach;
* the number of epsilon states needed
*/
-int mkor( first, second )
-int first, second;
- {
- int eps, orend;
+int mkor (first, second)
+ int first, second;
+{
+ int eps, orend;
- if ( first == NIL )
+ if (first == NIL)
return second;
- else if ( second == NIL )
+ else if (second == NIL)
return first;
- else
- {
+ else {
/* See comment in mkopt() about why we can't use the first
* state of "first" or "second" if they satisfy "FREE_EPSILON".
*/
- eps = mkstate( SYM_EPSILON );
+ eps = mkstate (SYM_EPSILON);
- first = link_machines( eps, first );
+ first = link_machines (eps, first);
- mkxtion( first, second );
+ mkxtion (first, second);
- if ( SUPER_FREE_EPSILON(finalst[first]) &&
- accptnum[finalst[first]] == NIL )
- {
+ if (SUPER_FREE_EPSILON (finalst[first]) &&
+ accptnum[finalst[first]] == NIL) {
orend = finalst[first];
- mkxtion( finalst[second], orend );
- }
+ mkxtion (finalst[second], orend);
+ }
- else if ( SUPER_FREE_EPSILON(finalst[second]) &&
- accptnum[finalst[second]] == NIL )
- {
+ else if (SUPER_FREE_EPSILON (finalst[second]) &&
+ accptnum[finalst[second]] == NIL) {
orend = finalst[second];
- mkxtion( finalst[first], orend );
- }
+ mkxtion (finalst[first], orend);
+ }
- else
- {
- eps = mkstate( SYM_EPSILON );
+ else {
+ eps = mkstate (SYM_EPSILON);
- first = link_machines( first, eps );
+ first = link_machines (first, eps);
orend = finalst[first];
- mkxtion( finalst[second], orend );
- }
+ mkxtion (finalst[second], orend);
}
+ }
finalst[first] = orend;
return first;
- }
+}
/* mkposcl - convert a machine into a positive closure
@@ -520,24 +525,22 @@ int first, second;
* new - a machine matching the positive closure of "state"
*/
-int mkposcl( state )
-int state;
- {
- int eps;
+int mkposcl (state)
+ int state;
+{
+ int eps;
- if ( SUPER_FREE_EPSILON(finalst[state]) )
- {
- mkxtion( finalst[state], state );
+ if (SUPER_FREE_EPSILON (finalst[state])) {
+ mkxtion (finalst[state], state);
return state;
- }
+ }
- else
- {
- eps = mkstate( SYM_EPSILON );
- mkxtion( eps, state );
- return link_machines( state, eps );
- }
+ else {
+ eps = mkstate (SYM_EPSILON);
+ mkxtion (eps, state);
+ return link_machines (state, eps);
}
+}
/* mkrep - make a replicated machine
@@ -549,39 +552,39 @@ int state;
* number of times to "ub" number of times
*
* note
- * if "ub" is INFINITY then "new" matches "lb" or more occurrences of "mach"
+ * if "ub" is INFINITE_REPEAT then "new" matches "lb" or more occurrences of "mach"
*/
-int mkrep( mach, lb, ub )
-int mach, lb, ub;
- {
- int base_mach, tail, copy, i;
+int mkrep (mach, lb, ub)
+ int mach, lb, ub;
+{
+ int base_mach, tail, copy, i;
- base_mach = copysingl( mach, lb - 1 );
+ base_mach = copysingl (mach, lb - 1);
- if ( ub == INFINITY )
- {
- copy = dupmachine( mach );
- mach = link_machines( mach,
- link_machines( base_mach, mkclos( copy ) ) );
- }
-
- else
- {
- tail = mkstate( SYM_EPSILON );
+ if (ub == INFINITE_REPEAT) {
+ copy = dupmachine (mach);
+ mach = link_machines (mach,
+ link_machines (base_mach,
+ mkclos (copy)));
+ }
- for ( i = lb; i < ub; ++i )
- {
- copy = dupmachine( mach );
- tail = mkopt( link_machines( copy, tail ) );
- }
+ else {
+ tail = mkstate (SYM_EPSILON);
- mach = link_machines( mach, link_machines( base_mach, tail ) );
+ for (i = lb; i < ub; ++i) {
+ copy = dupmachine (mach);
+ tail = mkopt (link_machines (copy, tail));
}
- return mach;
+ mach =
+ link_machines (mach,
+ link_machines (base_mach, tail));
}
+ return mach;
+}
+
/* mkstate - create a state with a transition on a given symbol
*
@@ -599,30 +602,31 @@ int mach, lb, ub;
* that it admittedly is)
*/
-int mkstate( sym )
-int sym;
- {
- if ( ++lastnfa >= current_mns )
- {
- if ( (current_mns += MNS_INCREMENT) >= MAXIMUM_MNS )
- lerrif(
- _( "input rules are too complicated (>= %d NFA states)" ),
- current_mns );
+int mkstate (sym)
+ int sym;
+{
+ if (++lastnfa >= current_mns) {
+ if ((current_mns += MNS_INCREMENT) >= maximum_mns)
+ lerrif (_
+ ("input rules are too complicated (>= %d NFA states)"),
+current_mns);
++num_reallocs;
- firstst = reallocate_integer_array( firstst, current_mns );
- lastst = reallocate_integer_array( lastst, current_mns );
- finalst = reallocate_integer_array( finalst, current_mns );
- transchar = reallocate_integer_array( transchar, current_mns );
- trans1 = reallocate_integer_array( trans1, current_mns );
- trans2 = reallocate_integer_array( trans2, current_mns );
- accptnum = reallocate_integer_array( accptnum, current_mns );
+ firstst = reallocate_integer_array (firstst, current_mns);
+ lastst = reallocate_integer_array (lastst, current_mns);
+ finalst = reallocate_integer_array (finalst, current_mns);
+ transchar =
+ reallocate_integer_array (transchar, current_mns);
+ trans1 = reallocate_integer_array (trans1, current_mns);
+ trans2 = reallocate_integer_array (trans2, current_mns);
+ accptnum =
+ reallocate_integer_array (accptnum, current_mns);
assoc_rule =
- reallocate_integer_array( assoc_rule, current_mns );
+ reallocate_integer_array (assoc_rule, current_mns);
state_type =
- reallocate_integer_array( state_type, current_mns );
- }
+ reallocate_integer_array (state_type, current_mns);
+ }
firstst[lastnfa] = lastnfa;
finalst[lastnfa] = lastnfa;
@@ -643,28 +647,26 @@ int sym;
* elsewhere in the input).
*/
- if ( sym < 0 )
- {
+ if (sym < 0) {
/* We don't have to update the equivalence classes since
* that was already done when the ccl was created for the
* first time.
*/
- }
+ }
- else if ( sym == SYM_EPSILON )
+ else if (sym == SYM_EPSILON)
++numeps;
- else
- {
- check_char( sym );
+ else {
+ check_char (sym);
- if ( useecs )
+ if (useecs)
/* Map NUL's to csize. */
- mkechar( sym ? sym : csize, nextecm, ecgroup );
- }
+ mkechar (sym ? sym : csize, nextecm, ecgroup);
+ }
return lastnfa;
- }
+}
/* mkxtion - make a transition from one state to another
@@ -677,42 +679,43 @@ int sym;
* stateto - the state to which the transition is to be made
*/
-void mkxtion( statefrom, stateto )
-int statefrom, stateto;
- {
- if ( trans1[statefrom] == NO_TRANSITION )
+void mkxtion (statefrom, stateto)
+ int statefrom, stateto;
+{
+ if (trans1[statefrom] == NO_TRANSITION)
trans1[statefrom] = stateto;
- else if ( (transchar[statefrom] != SYM_EPSILON) ||
- (trans2[statefrom] != NO_TRANSITION) )
- flexfatal( _( "found too many transitions in mkxtion()" ) );
+ else if ((transchar[statefrom] != SYM_EPSILON) ||
+ (trans2[statefrom] != NO_TRANSITION))
+ flexfatal (_("found too many transitions in mkxtion()"));
- else
- { /* second out-transition for an epsilon state */
+ else { /* second out-transition for an epsilon state */
++eps2;
trans2[statefrom] = stateto;
- }
}
+}
/* new_rule - initialize for a new rule */
-void new_rule()
- {
- if ( ++num_rules >= current_max_rules )
- {
+void new_rule ()
+{
+ if (++num_rules >= current_max_rules) {
++num_reallocs;
current_max_rules += MAX_RULES_INCREMENT;
- rule_type = reallocate_integer_array( rule_type,
- current_max_rules );
- rule_linenum = reallocate_integer_array( rule_linenum,
- current_max_rules );
- rule_useful = reallocate_integer_array( rule_useful,
- current_max_rules );
- }
+ rule_type = reallocate_integer_array (rule_type,
+ current_max_rules);
+ rule_linenum = reallocate_integer_array (rule_linenum,
+ current_max_rules);
+ rule_useful = reallocate_integer_array (rule_useful,
+ current_max_rules);
+ rule_has_nl = reallocate_bool_array (rule_has_nl,
+ current_max_rules);
+ }
- if ( num_rules > MAX_RULE )
- lerrif( _( "too many rules (> %d)!" ), MAX_RULE );
+ if (num_rules > MAX_RULE)
+ lerrif (_("too many rules (> %d)!"), MAX_RULE);
rule_linenum[num_rules] = linenum;
rule_useful[num_rules] = false;
- }
+ rule_has_nl[num_rules] = false;
+}
diff --git a/usr.bin/lex/options.c b/usr.bin/lex/options.c
new file mode 100644
index 00000000000..3c6f1a01523
--- /dev/null
+++ b/usr.bin/lex/options.c
@@ -0,0 +1,282 @@
+/* $OpenBSD: options.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* flex - tool to generate fast lexical analyzers */
+
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "options.h"
+
+/* Be sure to synchronize these options with those defined in "options.h",
+ * the giant switch() statement in "main.c", and the %option processing in
+ * "scan.l".
+ */
+
+
+/* The command-line options, passed to scanopt_init() */
+optspec_t flexopts[] = {
+
+ {"-7", OPT_7BIT, 0}
+ ,
+ {"--7bit", OPT_7BIT, 0}
+ , /* Generate 7-bit scanner. */
+ {"-8", OPT_8BIT, 0}
+ ,
+ {"--8bit", OPT_8BIT, 0}
+ , /* Generate 8-bit scanner. */
+ {"--align", OPT_ALIGN, 0}
+ , /* Trade off larger tables for better memory alignment. */
+ {"--noalign", OPT_NO_ALIGN, 0}
+ ,
+ {"--always-interactive", OPT_ALWAYS_INTERACTIVE, 0}
+ ,
+ {"--array", OPT_ARRAY, 0}
+ ,
+ {"-b", OPT_BACKUP, 0}
+ ,
+ {"--backup", OPT_BACKUP, 0}
+ , /* Generate backing-up information to lex.backup. */
+ {"-B", OPT_BATCH, 0}
+ ,
+ {"--batch", OPT_BATCH, 0}
+ , /* Generate batch scanner (opposite of -I). */
+ {"--bison-bridge", OPT_BISON_BRIDGE, 0}
+ , /* Scanner to be called by a bison pure parser. */
+ {"--bison-locations", OPT_BISON_BRIDGE_LOCATIONS, 0}
+ , /* Scanner to be called by a bison pure parser. */
+ {"-i", OPT_CASE_INSENSITIVE, 0}
+ ,
+ {"--case-insensitive", OPT_CASE_INSENSITIVE, 0}
+ , /* Generate case-insensitive scanner. */
+
+ {"-C[aefFmr]", OPT_COMPRESSION,
+ "Specify degree of table compression (default is -Cem)"},
+ {"-+", OPT_CPLUSPLUS, 0}
+ ,
+ {"--c++", OPT_CPLUSPLUS, 0}
+ , /* Generate C++ scanner class. */
+ {"-d", OPT_DEBUG, 0}
+ ,
+ {"--debug", OPT_DEBUG, 0}
+ , /* Turn on debug mode in generated scanner. */
+ {"--nodebug", OPT_NO_DEBUG, 0}
+ ,
+ {"-s", OPT_NO_DEFAULT, 0}
+ ,
+ {"--nodefault", OPT_NO_DEFAULT, 0}
+ , /* Suppress default rule to ECHO unmatched text. */
+ {"--default", OPT_DEFAULT, 0}
+ ,
+ {"-c", OPT_DONOTHING, 0}
+ , /* For POSIX lex compatibility. */
+ {"-n", OPT_DONOTHING, 0}
+ , /* For POSIX lex compatibility. */
+ {"--ecs", OPT_ECS, 0}
+ , /* Construct equivalence classes. */
+ {"--noecs", OPT_NO_ECS, 0}
+ ,
+ {"-F", OPT_FAST, 0}
+ ,
+ {"--fast", OPT_FAST, 0}
+ , /* Same as -CFr. */
+ {"-f", OPT_FULL, 0}
+ ,
+ {"--full", OPT_FULL, 0}
+ , /* Same as -Cfr. */
+ {"--header-file[=FILE]", OPT_HEADER_FILE, 0}
+ ,
+ {"-?", OPT_HELP, 0}
+ ,
+ {"-h", OPT_HELP, 0}
+ ,
+ {"--help", OPT_HELP, 0}
+ , /* Produce this help message. */
+ {"-I", OPT_INTERACTIVE, 0}
+ ,
+ {"--interactive", OPT_INTERACTIVE, 0}
+ , /* Generate interactive scanner (opposite of -B). */
+ {"-l", OPT_LEX_COMPAT, 0}
+ ,
+ {"--lex-compat", OPT_LEX_COMPAT, 0}
+ , /* Maximal compatibility with original lex. */
+ {"-X", OPT_POSIX_COMPAT, 0}
+ ,
+ {"--posix-compat", OPT_POSIX_COMPAT, 0}
+ , /* Maximal compatibility with POSIX lex. */
+ {"--preproc=NUM", OPT_PREPROC_LEVEL, 0}
+ ,
+ {"-L", OPT_NO_LINE, 0}
+ , /* Suppress #line directives in scanner. */
+ {"--noline", OPT_NO_LINE, 0}
+ , /* Suppress #line directives in scanner. */
+ {"--main", OPT_MAIN, 0}
+ , /* use built-in main() function. */
+ {"--nomain", OPT_NO_MAIN, 0}
+ ,
+ {"--meta-ecs", OPT_META_ECS, 0}
+ , /* Construct meta-equivalence classes. */
+ {"--nometa-ecs", OPT_NO_META_ECS, 0}
+ ,
+ {"--never-interactive", OPT_NEVER_INTERACTIVE, 0}
+ ,
+ {"-o FILE", OPT_OUTFILE, 0}
+ ,
+ {"--outfile=FILE", OPT_OUTFILE, 0}
+ , /* Write to FILE (default is lex.yy.c) */
+ {"-p", OPT_PERF_REPORT, 0}
+ ,
+ {"--perf-report", OPT_PERF_REPORT, 0}
+ , /* Generate performance report to stderr. */
+ {"--pointer", OPT_POINTER, 0}
+ ,
+ {"-P PREFIX", OPT_PREFIX, 0}
+ ,
+ {"--prefix=PREFIX", OPT_PREFIX, 0}
+ , /* Use PREFIX (default is yy) */
+ {"-Dmacro", OPT_PREPROCDEFINE, 0}
+ , /* Define a preprocessor symbol. */
+ {"--read", OPT_READ, 0}
+ , /* Use read(2) instead of stdio. */
+ {"-R", OPT_REENTRANT, 0}
+ ,
+ {"--reentrant", OPT_REENTRANT, 0}
+ , /* Generate a reentrant C scanner. */
+ {"--noreentrant", OPT_NO_REENTRANT, 0}
+ ,
+ {"--reject", OPT_REJECT, 0}
+ ,
+ {"--noreject", OPT_NO_REJECT, 0}
+ ,
+ {"-S FILE", OPT_SKEL, 0}
+ ,
+ {"--skel=FILE", OPT_SKEL, 0}
+ , /* Use skeleton from FILE */
+ {"--stack", OPT_STACK, 0}
+ ,
+ {"--stdinit", OPT_STDINIT, 0}
+ ,
+ {"--nostdinit", OPT_NO_STDINIT, 0}
+ ,
+ {"-t", OPT_STDOUT, 0}
+ ,
+ {"--stdout", OPT_STDOUT, 0}
+ , /* Write generated scanner to stdout. */
+ {"-T", OPT_TRACE, 0}
+ ,
+ {"--trace", OPT_TRACE, 0}
+ , /* Flex should run in trace mode. */
+ {"--tables-file[=FILE]", OPT_TABLES_FILE, 0}
+ , /* Save tables to FILE */
+ {"--tables-verify", OPT_TABLES_VERIFY, 0}
+ , /* Tables integrity check */
+ {"--nounistd", OPT_NO_UNISTD_H, 0}
+ , /* Do not include unistd.h */
+ {"-v", OPT_VERBOSE, 0}
+ ,
+ {"--verbose", OPT_VERBOSE, 0}
+ , /* Write summary of scanner statistics to stdout. */
+ {"-V", OPT_VERSION, 0}
+ ,
+ {"--version", OPT_VERSION, 0}
+ , /* Report flex version. */
+ {"--warn", OPT_WARN, 0}
+ ,
+ {"-w", OPT_NO_WARN, 0}
+ ,
+ {"--nowarn", OPT_NO_WARN, 0}
+ , /* Suppress warning messages. */
+ {"--noansi-definitions", OPT_NO_ANSI_FUNC_DEFS, 0}
+ ,
+ {"--noansi-prototypes", OPT_NO_ANSI_FUNC_PROTOS, 0}
+ ,
+ {"--yyclass=NAME", OPT_YYCLASS, 0}
+ ,
+ {"--yylineno", OPT_YYLINENO, 0}
+ ,
+ {"--noyylineno", OPT_NO_YYLINENO, 0}
+ ,
+
+ {"--yymore", OPT_YYMORE, 0}
+ ,
+ {"--noyymore", OPT_NO_YYMORE, 0}
+ ,
+ {"--noyywrap", OPT_NO_YYWRAP, 0}
+ ,
+ {"--yywrap", OPT_YYWRAP, 0}
+ ,
+
+ {"--nounput", OPT_NO_UNPUT, 0}
+ ,
+ {"--noyy_push_state", OPT_NO_YY_PUSH_STATE, 0}
+ ,
+ {"--noyy_pop_state", OPT_NO_YY_POP_STATE, 0}
+ ,
+ {"--noyy_top_state", OPT_NO_YY_TOP_STATE, 0}
+ ,
+ {"--noyy_scan_buffer", OPT_NO_YY_SCAN_BUFFER, 0}
+ ,
+ {"--noyy_scan_bytes", OPT_NO_YY_SCAN_BYTES, 0}
+ ,
+ {"--noyy_scan_string", OPT_NO_YY_SCAN_STRING, 0}
+ ,
+ {"--noyyget_extra", OPT_NO_YYGET_EXTRA, 0}
+ ,
+ {"--noyyset_extra", OPT_NO_YYSET_EXTRA, 0}
+ ,
+ {"--noyyget_leng", OPT_NO_YYGET_LENG, 0}
+ ,
+ {"--noyyget_text", OPT_NO_YYGET_TEXT, 0}
+ ,
+ {"--noyyget_lineno", OPT_NO_YYGET_LINENO, 0}
+ ,
+ {"--noyyset_lineno", OPT_NO_YYSET_LINENO, 0}
+ ,
+ {"--noyyget_in", OPT_NO_YYGET_IN, 0}
+ ,
+ {"--noyyset_in", OPT_NO_YYSET_IN, 0}
+ ,
+ {"--noyyget_out", OPT_NO_YYGET_OUT, 0}
+ ,
+ {"--noyyset_out", OPT_NO_YYSET_OUT, 0}
+ ,
+ {"--noyyget_lval", OPT_NO_YYGET_LVAL, 0}
+ ,
+ {"--noyyset_lval", OPT_NO_YYSET_LVAL, 0}
+ ,
+ {"--noyyget_lloc", OPT_NO_YYGET_LLOC, 0}
+ ,
+ {"--noyyset_lloc", OPT_NO_YYSET_LLOC, 0}
+ ,
+
+ {0, 0, 0} /* required final NULL entry. */
+};
+
+/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */
diff --git a/usr.bin/lex/options.h b/usr.bin/lex/options.h
new file mode 100644
index 00000000000..49dd97383f5
--- /dev/null
+++ b/usr.bin/lex/options.h
@@ -0,0 +1,136 @@
+/* $OpenBSD: options.h,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* flex - tool to generate fast lexical analyzers */
+
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#ifndef OPTIONS_H
+#define OPTIONS_H
+#include "scanopt.h"
+
+extern optspec_t flexopts[];
+
+enum flexopt_flag_t {
+ /* Use positive integers only, since they are return codes for scanopt.
+ * Order is not important. */
+ OPT_7BIT = 1,
+ OPT_8BIT,
+ OPT_ALIGN,
+ OPT_ALWAYS_INTERACTIVE,
+ OPT_ARRAY,
+ OPT_BACKUP,
+ OPT_BATCH,
+ OPT_BISON_BRIDGE,
+ OPT_BISON_BRIDGE_LOCATIONS,
+ OPT_CASE_INSENSITIVE,
+ OPT_COMPRESSION,
+ OPT_CPLUSPLUS,
+ OPT_DEBUG,
+ OPT_DEFAULT,
+ OPT_DONOTHING,
+ OPT_ECS,
+ OPT_FAST,
+ OPT_FULL,
+ OPT_HEADER_FILE,
+ OPT_HELP,
+ OPT_INTERACTIVE,
+ OPT_LEX_COMPAT,
+ OPT_POSIX_COMPAT,
+ OPT_MAIN,
+ OPT_META_ECS,
+ OPT_NEVER_INTERACTIVE,
+ OPT_NO_ALIGN,
+ OPT_NO_ANSI_FUNC_DEFS,
+ OPT_NO_ANSI_FUNC_PROTOS,
+ OPT_NO_DEBUG,
+ OPT_NO_DEFAULT,
+ OPT_NO_ECS,
+ OPT_NO_LINE,
+ OPT_NO_MAIN,
+ OPT_NO_META_ECS,
+ OPT_NO_REENTRANT,
+ OPT_NO_REJECT,
+ OPT_NO_STDINIT,
+ OPT_NO_UNPUT,
+ OPT_NO_WARN,
+ OPT_NO_YYGET_EXTRA,
+ OPT_NO_YYGET_IN,
+ OPT_NO_YYGET_LENG,
+ OPT_NO_YYGET_LINENO,
+ OPT_NO_YYGET_LLOC,
+ OPT_NO_YYGET_LVAL,
+ OPT_NO_YYGET_OUT,
+ OPT_NO_YYGET_TEXT,
+ OPT_NO_YYLINENO,
+ OPT_NO_YYMORE,
+ OPT_NO_YYSET_EXTRA,
+ OPT_NO_YYSET_IN,
+ OPT_NO_YYSET_LINENO,
+ OPT_NO_YYSET_LLOC,
+ OPT_NO_YYSET_LVAL,
+ OPT_NO_YYSET_OUT,
+ OPT_NO_YYWRAP,
+ OPT_NO_YY_POP_STATE,
+ OPT_NO_YY_PUSH_STATE,
+ OPT_NO_YY_SCAN_BUFFER,
+ OPT_NO_YY_SCAN_BYTES,
+ OPT_NO_YY_SCAN_STRING,
+ OPT_NO_YY_TOP_STATE,
+ OPT_OUTFILE,
+ OPT_PERF_REPORT,
+ OPT_POINTER,
+ OPT_PREFIX,
+ OPT_PREPROCDEFINE,
+ OPT_PREPROC_LEVEL,
+ OPT_READ,
+ OPT_REENTRANT,
+ OPT_REJECT,
+ OPT_SKEL,
+ OPT_STACK,
+ OPT_STDINIT,
+ OPT_STDOUT,
+ OPT_TABLES_FILE,
+ OPT_TABLES_VERIFY,
+ OPT_TRACE,
+ OPT_NO_UNISTD_H,
+ OPT_VERBOSE,
+ OPT_VERSION,
+ OPT_WARN,
+ OPT_YYCLASS,
+ OPT_YYLINENO,
+ OPT_YYMORE,
+ OPT_YYWRAP
+};
+
+#endif
+
+/* vim:set tabstop=8 softtabstop=4 shiftwidth=4 textwidth=0: */
diff --git a/usr.bin/lex/parse.y b/usr.bin/lex/parse.y
index 76440edc2f5..090f0d4fb19 100644
--- a/usr.bin/lex/parse.y
+++ b/usr.bin/lex/parse.y
@@ -1,106 +1,107 @@
-/* $OpenBSD: parse.y,v 1.8 2003/06/04 17:34:44 millert Exp $ */
+/* $OpenBSD: parse.y,v 1.9 2015/11/19 19:43:40 tedu Exp $ */
/* parse.y - parser for flex input */
%token CHAR NUMBER SECTEND SCDECL XSCDECL NAME PREVCCL EOF_OP
-%token OPTION_OP OPT_OUTFILE OPT_PREFIX OPT_YYCLASS
+%token OPTION_OP OPT_OUTFILE OPT_PREFIX OPT_YYCLASS OPT_HEADER OPT_EXTRA_TYPE
+%token OPT_TABLES
%token CCE_ALNUM CCE_ALPHA CCE_BLANK CCE_CNTRL CCE_DIGIT CCE_GRAPH
%token CCE_LOWER CCE_PRINT CCE_PUNCT CCE_SPACE CCE_UPPER CCE_XDIGIT
-%{
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+%token CCE_NEG_ALNUM CCE_NEG_ALPHA CCE_NEG_BLANK CCE_NEG_CNTRL CCE_NEG_DIGIT CCE_NEG_GRAPH
+%token CCE_NEG_LOWER CCE_NEG_PRINT CCE_NEG_PUNCT CCE_NEG_SPACE CCE_NEG_UPPER CCE_NEG_XDIGIT
+
+%left CCL_OP_DIFF CCL_OP_UNION
+
+/*
+ *POSIX and AT&T lex place the
+ * precedence of the repeat operator, {}, below that of concatenation.
+ * Thus, ab{3} is ababab. Most other POSIX utilities use an Extended
+ * Regular Expression (ERE) precedence that has the repeat operator
+ * higher than concatenation. This causes ab{3} to yield abbb.
*
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
+ * In order to support the POSIX and AT&T precedence and the flex
+ * precedence we define two token sets for the begin and end tokens of
+ * the repeat operator, '{' and '}'. The lexical scanner chooses
+ * which tokens to return based on whether posix_compat or lex_compat
+ * are specified. Specifying either posix_compat or lex_compat will
+ * cause flex to parse scanner files as per the AT&T and
+ * POSIX-mandated behavior.
*/
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/parse.y,v 1.8 2003/06/04 17:34:44 millert Exp $ */
+%token BEGIN_REPEAT_POSIX END_REPEAT_POSIX BEGIN_REPEAT_FLEX END_REPEAT_FLEX
-/* Some versions of bison are broken in that they use alloca() but don't
- * declare it properly. The following is the patented (just kidding!)
- * #ifdef chud to fix the problem, courtesy of Francois Pinard.
- */
-#ifdef YYBISON
-/* AIX requires this to be the first thing in the file. What a piece. */
-# ifdef _AIX
- #pragma alloca
-# endif
-#endif
+%{
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include "flexdef.h"
+#include "tables.h"
-/* The remainder of the alloca() cruft has to come after including flexdef.h,
- * so HAVE_ALLOCA_H is (possibly) defined.
- */
-#ifdef YYBISON
-# ifdef __GNUC__
-# ifndef alloca
-# define alloca __builtin_alloca
-# endif
-# else
-# if HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef __hpux
-void *alloca ();
-# else
-# ifdef __TURBOC__
-# include <malloc.h>
-# else
-char *alloca ();
-# endif
-# endif
-# endif
-# endif
-#endif
-
-/* Bletch, ^^^^ that was ugly! */
-
-
-int pat, scnum, eps, headcnt, trailcnt, anyccl, lastchar, i, rulelen;
+int pat, scnum, eps, headcnt, trailcnt, lastchar, i, rulelen;
int trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule;
int *scon_stk;
int scon_stk_ptr;
static int madeany = false; /* whether we've made the '.' character class */
+static int ccldot, cclany;
int previous_continued_action; /* whether the previous rule's action was '|' */
+#define format_warn3(fmt, a1, a2) \
+ do{ \
+ char fw3_msg[MAXLINE];\
+ snprintf( fw3_msg, MAXLINE,(fmt), (a1), (a2) );\
+ warn( fw3_msg );\
+ }while(0)
+
/* Expand a POSIX character class expression. */
#define CCL_EXPR(func) \
- { \
+ do{ \
int c; \
for ( c = 0; c < csize; ++c ) \
if ( isascii(c) && func(c) ) \
ccladd( currccl, c ); \
- }
+ }while(0)
+
+/* negated class */
+#define CCL_NEG_EXPR(func) \
+ do{ \
+ int c; \
+ for ( c = 0; c < csize; ++c ) \
+ if ( !func(c) ) \
+ ccladd( currccl, c ); \
+ }while(0)
/* While POSIX defines isblank(), it's not ANSI C. */
#define IS_BLANK(c) ((c) == ' ' || (c) == '\t')
@@ -130,7 +131,7 @@ goal : initlex sect1 sect1end sect2 initforrule
*/
default_rule = num_rules;
- finish_rule( def_rule, false, 0, 0 );
+ finish_rule( def_rule, false, 0, 0, 0);
for ( i = 1; i <= lastsc; ++i )
scset[i] = mkbranch( scset[i], def_rule );
@@ -157,7 +158,7 @@ sect1 : sect1 startconddecl namelist1
| sect1 options
|
| error
- { synerr( "unknown error processing section 1" ); }
+ { synerr( _("unknown error processing section 1") ); }
;
sect1end : SECTEND
@@ -182,7 +183,7 @@ namelist1 : namelist1 NAME
{ scinstal( nmstr, xcluflg ); }
| error
- { synerr( "bad start condition list" ); }
+ { synerr( _("bad start condition list") ); }
;
options : OPTION_OP optionlist
@@ -197,10 +198,16 @@ option : OPT_OUTFILE '=' NAME
outfilename = copy_string( nmstr );
did_outfilename = 1;
}
+ | OPT_EXTRA_TYPE '=' NAME
+ { extra_type = copy_string( nmstr ); }
| OPT_PREFIX '=' NAME
{ prefix = copy_string( nmstr ); }
| OPT_YYCLASS '=' NAME
{ yyclass = copy_string( nmstr ); }
+ | OPT_HEADER '=' NAME
+ { headerfilename = copy_string( nmstr ); }
+ | OPT_TABLES '=' NAME
+ { tablesext = true; tablesfilename = copy_string( nmstr ); }
;
sect2 : sect2 scon initforrule flexrule '\n'
@@ -227,7 +234,7 @@ flexrule : '^' rule
{
pat = $2;
finish_rule( pat, variable_trail_rule,
- headcnt, trailcnt );
+ headcnt, trailcnt , previous_continued_action);
if ( scon_stk_ptr > 0 )
{
@@ -263,7 +270,7 @@ flexrule : '^' rule
{
pat = $1;
finish_rule( pat, variable_trail_rule,
- headcnt, trailcnt );
+ headcnt, trailcnt , previous_continued_action);
if ( scon_stk_ptr > 0 )
{
@@ -307,7 +314,7 @@ flexrule : '^' rule
}
| error
- { synerr( "unrecognized rule" ); }
+ { synerr( _("unrecognized rule") ); }
;
scon_stk_ptr :
@@ -343,7 +350,7 @@ namelist2 : namelist2 ',' sconname
| sconname
| error
- { synerr( "bad start condition list" ); }
+ { synerr( _("bad start condition list") ); }
;
sconname : NAME
@@ -399,6 +406,7 @@ rule : re2 re
/* Mark as variable. */
varlength = true;
headcnt = 0;
+
}
if ( lex_compat || (varlength && headcnt == 0) )
@@ -425,7 +433,7 @@ rule : re2 re
}
| re2 re '$'
- { synerr( "trailing context used twice" ); }
+ { synerr( _("trailing context used twice") ); }
| re '$'
{
@@ -438,7 +446,7 @@ rule : re2 re
if ( trlcontxt )
{
- synerr( "trailing context used twice" );
+ synerr( _("trailing context used twice") );
$$ = mkstate( SYM_EPSILON );
}
@@ -507,7 +515,7 @@ re2 : re '/'
*/
if ( trlcontxt )
- synerr( "trailing context used twice" );
+ synerr( _("trailing context used twice") );
else
trlcontxt = true;
@@ -536,6 +544,69 @@ series : series singleton
| singleton
{ $$ = $1; }
+
+ | series BEGIN_REPEAT_POSIX NUMBER ',' NUMBER END_REPEAT_POSIX
+ {
+ varlength = true;
+
+ if ( $3 > $5 || $3 < 0 )
+ {
+ synerr( _("bad iteration values") );
+ $$ = $1;
+ }
+ else
+ {
+ if ( $3 == 0 )
+ {
+ if ( $5 <= 0 )
+ {
+ synerr(
+ _("bad iteration values") );
+ $$ = $1;
+ }
+ else
+ $$ = mkopt(
+ mkrep( $1, 1, $5 ) );
+ }
+ else
+ $$ = mkrep( $1, $3, $5 );
+ }
+ }
+
+ | series BEGIN_REPEAT_POSIX NUMBER ',' END_REPEAT_POSIX
+ {
+ varlength = true;
+
+ if ( $3 <= 0 )
+ {
+ synerr( _("iteration value must be positive") );
+ $$ = $1;
+ }
+
+ else
+ $$ = mkrep( $1, $3, INFINITE_REPEAT );
+ }
+
+ | series BEGIN_REPEAT_POSIX NUMBER END_REPEAT_POSIX
+ {
+ /* The series could be something like "(foo)",
+ * in which case we have no idea what its length
+ * is, so we punt here.
+ */
+ varlength = true;
+
+ if ( $3 <= 0 )
+ {
+ synerr( _("iteration value must be positive")
+ );
+ $$ = $1;
+ }
+
+ else
+ $$ = link_machines( $1,
+ copysingl( $1, $3 - 1 ) );
+ }
+
;
singleton : singleton '*'
@@ -557,13 +628,13 @@ singleton : singleton '*'
$$ = mkopt( $1 );
}
- | singleton '{' NUMBER ',' NUMBER '}'
+ | singleton BEGIN_REPEAT_FLEX NUMBER ',' NUMBER END_REPEAT_FLEX
{
varlength = true;
if ( $3 > $5 || $3 < 0 )
{
- synerr( "bad iteration values" );
+ synerr( _("bad iteration values") );
$$ = $1;
}
else
@@ -573,7 +644,7 @@ singleton : singleton '*'
if ( $5 <= 0 )
{
synerr(
- "bad iteration values" );
+ _("bad iteration values") );
$$ = $1;
}
else
@@ -585,21 +656,21 @@ singleton : singleton '*'
}
}
- | singleton '{' NUMBER ',' '}'
+ | singleton BEGIN_REPEAT_FLEX NUMBER ',' END_REPEAT_FLEX
{
varlength = true;
if ( $3 <= 0 )
{
- synerr( "iteration value must be positive" );
+ synerr( _("iteration value must be positive") );
$$ = $1;
}
else
- $$ = mkrep( $1, $3, INFINITY );
+ $$ = mkrep( $1, $3, INFINITE_REPEAT );
}
- | singleton '{' NUMBER '}'
+ | singleton BEGIN_REPEAT_FLEX NUMBER END_REPEAT_FLEX
{
/* The singleton could be something like "(foo)",
* in which case we have no idea what its length
@@ -609,7 +680,7 @@ singleton : singleton '*'
if ( $3 <= 0 )
{
- synerr( "iteration value must be positive" );
+ synerr( _("iteration value must be positive") );
$$ = $1;
}
@@ -623,31 +694,40 @@ singleton : singleton '*'
if ( ! madeany )
{
/* Create the '.' character class. */
- anyccl = cclinit();
- ccladd( anyccl, '\n' );
- cclnegate( anyccl );
+ ccldot = cclinit();
+ ccladd( ccldot, '\n' );
+ cclnegate( ccldot );
+
+ if ( useecs )
+ mkeccl( ccltbl + cclmap[ccldot],
+ ccllen[ccldot], nextecm,
+ ecgroup, csize, csize );
+
+ /* Create the (?s:'.') character class. */
+ cclany = cclinit();
+ cclnegate( cclany );
- if ( useecs )
- mkeccl( ccltbl + cclmap[anyccl],
- ccllen[anyccl], nextecm,
- ecgroup, csize, csize );
+ if ( useecs )
+ mkeccl( ccltbl + cclmap[cclany],
+ ccllen[cclany], nextecm,
+ ecgroup, csize, csize );
madeany = true;
}
++rulelen;
- $$ = mkstate( -anyccl );
+ if (sf_dot_all())
+ $$ = mkstate( -cclany );
+ else
+ $$ = mkstate( -ccldot );
}
| fullccl
{
- if ( ! cclsorted )
- /* Sort characters for fast searching. We
- * use a shell sort since this list could
- * be large.
+ /* Sort characters for fast searching.
*/
- cshell( ccltbl + cclmap[$1], ccllen[$1], true );
+ qsort( ccltbl + cclmap[$1], ccllen[$1], sizeof (*ccltbl), cclcmp );
if ( useecs )
mkeccl( ccltbl + cclmap[$1], ccllen[$1],
@@ -655,6 +735,9 @@ singleton : singleton '*'
++rulelen;
+ if (ccl_has_nl[$1])
+ rule_has_nl[num_rules] = true;
+
$$ = mkstate( -$1 );
}
@@ -662,6 +745,9 @@ singleton : singleton '*'
{
++rulelen;
+ if (ccl_has_nl[$1])
+ rule_has_nl[num_rules] = true;
+
$$ = mkstate( -$1 );
}
@@ -675,15 +761,25 @@ singleton : singleton '*'
{
++rulelen;
- if ( caseins && $1 >= 'A' && $1 <= 'Z' )
- $1 = clower( $1 );
+ if ($1 == nlch)
+ rule_has_nl[num_rules] = true;
- $$ = mkstate( $1 );
+ if (sf_case_ins() && has_case($1))
+ /* create an alternation, as in (a|A) */
+ $$ = mkor (mkstate($1), mkstate(reverse_case($1)));
+ else
+ $$ = mkstate( $1 );
}
;
+fullccl:
+ fullccl CCL_OP_DIFF braceccl { $$ = ccl_set_diff ($1, $3); }
+ | fullccl CCL_OP_UNION braceccl { $$ = ccl_set_union ($1, $3); }
+ | braceccl
+ ;
-fullccl : '[' ccl ']'
- { $$ = $2; }
+braceccl:
+
+ '[' ccl ']' { $$ = $2; }
| '[' '^' ccl ']'
{
@@ -694,16 +790,35 @@ fullccl : '[' ccl ']'
ccl : ccl CHAR '-' CHAR
{
- if ( caseins )
- {
- if ( $2 >= 'A' && $2 <= 'Z' )
- $2 = clower( $2 );
- if ( $4 >= 'A' && $4 <= 'Z' )
- $4 = clower( $4 );
- }
+
+ if (sf_case_ins())
+ {
+
+ /* If one end of the range has case and the other
+ * does not, or the cases are different, then we're not
+ * sure what range the user is trying to express.
+ * Examples: [@-z] or [S-t]
+ */
+ if (has_case ($2) != has_case ($4)
+ || (has_case ($2) && (b_islower ($2) != b_islower ($4)))
+ || (has_case ($2) && (b_isupper ($2) != b_isupper ($4))))
+ format_warn3 (
+ _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
+ $2, $4);
+
+ /* If the range spans uppercase characters but not
+ * lowercase (or vice-versa), then should we automatically
+ * include lowercase characters in the range?
+ * Example: [@-_] spans [a-z] but not [A-Z]
+ */
+ else if (!has_case ($2) && !has_case ($4) && !range_covers_case ($2, $4))
+ format_warn3 (
+ _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
+ $2, $4);
+ }
if ( $2 > $4 )
- synerr( "negative range in character class" );
+ synerr( _("negative range in character class") );
else
{
@@ -715,6 +830,19 @@ ccl : ccl CHAR '-' CHAR
*/
cclsorted = cclsorted && ($2 > lastchar);
lastchar = $4;
+
+ /* Do it again for upper/lowercase */
+ if (sf_case_ins() && has_case($2) && has_case($4)){
+ $2 = reverse_case ($2);
+ $4 = reverse_case ($4);
+
+ for ( i = $2; i <= $4; ++i )
+ ccladd( $1, i );
+
+ cclsorted = cclsorted && ($2 > lastchar);
+ lastchar = $4;
+ }
+
}
$$ = $1;
@@ -722,12 +850,19 @@ ccl : ccl CHAR '-' CHAR
| ccl CHAR
{
- if ( caseins && $2 >= 'A' && $2 <= 'Z' )
- $2 = clower( $2 );
-
ccladd( $1, $2 );
cclsorted = cclsorted && ($2 > lastchar);
lastchar = $2;
+
+ /* Do it again for upper/lowercase */
+ if (sf_case_ins() && has_case($2)){
+ $2 = reverse_case ($2);
+ ccladd ($1, $2);
+
+ cclsorted = cclsorted && ($2 > lastchar);
+ lastchar = $2;
+ }
+
$$ = $1;
}
@@ -746,33 +881,65 @@ ccl : ccl CHAR '-' CHAR
}
;
-ccl_expr: CCE_ALNUM { CCL_EXPR(isalnum) }
- | CCE_ALPHA { CCL_EXPR(isalpha) }
- | CCE_BLANK { CCL_EXPR(IS_BLANK) }
- | CCE_CNTRL { CCL_EXPR(iscntrl) }
- | CCE_DIGIT { CCL_EXPR(isdigit) }
- | CCE_GRAPH { CCL_EXPR(isgraph) }
- | CCE_LOWER { CCL_EXPR(islower) }
- | CCE_PRINT { CCL_EXPR(isprint) }
- | CCE_PUNCT { CCL_EXPR(ispunct) }
- | CCE_SPACE { CCL_EXPR(isspace) }
+ccl_expr:
+ CCE_ALNUM { CCL_EXPR(isalnum); }
+ | CCE_ALPHA { CCL_EXPR(isalpha); }
+ | CCE_BLANK { CCL_EXPR(IS_BLANK); }
+ | CCE_CNTRL { CCL_EXPR(iscntrl); }
+ | CCE_DIGIT { CCL_EXPR(isdigit); }
+ | CCE_GRAPH { CCL_EXPR(isgraph); }
+ | CCE_LOWER {
+ CCL_EXPR(islower);
+ if (sf_case_ins())
+ CCL_EXPR(isupper);
+ }
+ | CCE_PRINT { CCL_EXPR(isprint); }
+ | CCE_PUNCT { CCL_EXPR(ispunct); }
+ | CCE_SPACE { CCL_EXPR(isspace); }
+ | CCE_XDIGIT { CCL_EXPR(isxdigit); }
| CCE_UPPER {
- if ( caseins )
- CCL_EXPR(islower)
+ CCL_EXPR(isupper);
+ if (sf_case_ins())
+ CCL_EXPR(islower);
+ }
+
+ | CCE_NEG_ALNUM { CCL_NEG_EXPR(isalnum); }
+ | CCE_NEG_ALPHA { CCL_NEG_EXPR(isalpha); }
+ | CCE_NEG_BLANK { CCL_NEG_EXPR(IS_BLANK); }
+ | CCE_NEG_CNTRL { CCL_NEG_EXPR(iscntrl); }
+ | CCE_NEG_DIGIT { CCL_NEG_EXPR(isdigit); }
+ | CCE_NEG_GRAPH { CCL_NEG_EXPR(isgraph); }
+ | CCE_NEG_PRINT { CCL_NEG_EXPR(isprint); }
+ | CCE_NEG_PUNCT { CCL_NEG_EXPR(ispunct); }
+ | CCE_NEG_SPACE { CCL_NEG_EXPR(isspace); }
+ | CCE_NEG_XDIGIT { CCL_NEG_EXPR(isxdigit); }
+ | CCE_NEG_LOWER {
+ if ( sf_case_ins() )
+ warn(_("[:^lower:] is ambiguous in case insensitive scanner"));
+ else
+ CCL_NEG_EXPR(islower);
+ }
+ | CCE_NEG_UPPER {
+ if ( sf_case_ins() )
+ warn(_("[:^upper:] ambiguous in case insensitive scanner"));
else
- CCL_EXPR(isupper)
+ CCL_NEG_EXPR(isupper);
}
- | CCE_XDIGIT { CCL_EXPR(isxdigit) }
;
string : string CHAR
{
- if ( caseins && $2 >= 'A' && $2 <= 'Z' )
- $2 = clower( $2 );
+ if ( $2 == nlch )
+ rule_has_nl[num_rules] = true;
++rulelen;
- $$ = link_machines( $1, mkstate( $2 ) );
+ if (sf_case_ins() && has_case($2))
+ $$ = mkor (mkstate($2), mkstate(reverse_case($2)));
+ else
+ $$ = mkstate ($2);
+
+ $$ = link_machines( $1, $$);
}
|
@@ -788,7 +955,7 @@ string : string CHAR
void build_eof_action()
{
- register int i;
+ int i;
char action_text[MAXLINE];
for ( i = 1; i <= scon_stk_ptr; ++i )
@@ -801,8 +968,11 @@ void build_eof_action()
else
{
sceof[scon_stk[i]] = true;
- snprintf( action_text, sizeof action_text,
- "case YY_STATE_EOF(%s):\n",
+
+ if (previous_continued_action /* && previous action was regular */)
+ add_action("YY_RULE_SETUP\n");
+
+ snprintf( action_text, sizeof(action_text), "case YY_STATE_EOF(%s):\n",
scname[scon_stk[i]] );
add_action( action_text );
}
@@ -823,11 +993,11 @@ void build_eof_action()
/* format_synerr - write out formatted syntax error */
void format_synerr( msg, arg )
-char msg[], arg[];
+const char *msg, arg[];
{
char errmsg[MAXLINE];
- (void) snprintf( errmsg, sizeof errmsg, msg, arg );
+ (void) snprintf( errmsg, sizeof(errmsg), msg, arg );
synerr( errmsg );
}
@@ -835,7 +1005,7 @@ char msg[], arg[];
/* synerr - report a syntax error */
void synerr( str )
-char str[];
+const char *str;
{
syntaxerror = true;
pinpoint_message( str );
@@ -845,11 +1015,11 @@ char str[];
/* format_warn - write out formatted warning */
void format_warn( msg, arg )
-char msg[], arg[];
+const char *msg, arg[];
{
char warn_msg[MAXLINE];
- (void) snprintf( warn_msg, sizeof warn_msg, msg, arg );
+ snprintf( warn_msg, sizeof(warn_msg), msg, arg );
warn( warn_msg );
}
@@ -857,7 +1027,7 @@ char msg[], arg[];
/* warn - report a warning, unless -w was given */
void warn( str )
-char str[];
+const char *str;
{
line_warning( str, linenum );
}
@@ -867,11 +1037,11 @@ char str[];
*/
void format_pinpoint_message( msg, arg )
-char msg[], arg[];
+const char *msg, arg[];
{
char errmsg[MAXLINE];
- (void) snprintf( errmsg, sizeof errmsg, msg, arg );
+ snprintf( errmsg, sizeof(errmsg), msg, arg );
pinpoint_message( errmsg );
}
@@ -879,7 +1049,7 @@ char msg[], arg[];
/* pinpoint_message - write out a message, pinpointing its location */
void pinpoint_message( str )
-char str[];
+const char *str;
{
line_pinpoint( str, linenum );
}
@@ -888,14 +1058,14 @@ char str[];
/* line_warning - report a warning at a given line, unless -w was given */
void line_warning( str, line )
-char str[];
+const char *str;
int line;
{
char warning[MAXLINE];
if ( ! nowarn )
{
- snprintf( warning, sizeof warning, "warning, %s", str );
+ snprintf( warning, sizeof(warning), "warning, %s", str );
line_pinpoint( warning, line );
}
}
@@ -904,10 +1074,10 @@ int line;
/* line_pinpoint - write out a message, pinpointing it at the given line */
void line_pinpoint( str, line )
-char str[];
+const char *str;
int line;
{
- fprintf( stderr, "\"%s\", line %d: %s\n", infilename, line, str );
+ fprintf( stderr, "%s:%d: %s\n", infilename, line, str );
}
@@ -916,6 +1086,6 @@ int line;
*/
void yyerror( msg )
-char msg[];
+const char *msg;
{
}
diff --git a/usr.bin/lex/regex.c b/usr.bin/lex/regex.c
new file mode 100644
index 00000000000..4144231b416
--- /dev/null
+++ b/usr.bin/lex/regex.c
@@ -0,0 +1,174 @@
+/* $OpenBSD: regex.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/** regex - regular expression functions related to POSIX regex lib. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+
+
+static const char* REGEXP_LINEDIR = "^#line ([[:digit:]]+) \"(.*)\"";
+static const char* REGEXP_BLANK_LINE = "^[[:space:]]*$";
+
+regex_t regex_linedir; /**< matches line directives */
+regex_t regex_blank_line; /**< matches blank lines */
+
+
+/** Initialize the regular expressions.
+ * @return true upon success.
+ */
+bool flex_init_regex(void)
+{
+ flex_regcomp(&regex_linedir, REGEXP_LINEDIR, REG_EXTENDED);
+ flex_regcomp(&regex_blank_line, REGEXP_BLANK_LINE, REG_EXTENDED);
+
+ return true;
+}
+
+/** Compiles a regular expression or dies trying.
+ * @param preg Same as for regcomp().
+ * @param regex Same as for regcomp().
+ * @param cflags Same as for regcomp().
+ */
+void flex_regcomp(regex_t *preg, const char *regex, int cflags)
+{
+ int err;
+
+ memset (preg, 0, sizeof (regex_t));
+
+ if ((err = regcomp (preg, regex, cflags)) != 0) {
+ const int errbuf_sz = 200;
+ char *errbuf, *rxerr;
+
+ errbuf = (char*)flex_alloc(errbuf_sz *sizeof(char));
+ if (!errbuf)
+ flexfatal(_("Unable to allocate buffer to report regcomp"));
+ rxerr = (char*)flex_alloc(errbuf_sz *sizeof(char));
+ if (!rxerr)
+ flexfatal(_("Unable to allocate buffer for regerror"));
+ regerror (err, preg, rxerr, errbuf_sz);
+ snprintf (errbuf, errbuf_sz, "regcomp for \"%s\" failed: %s", regex, rxerr);
+
+ flexfatal (errbuf);
+ free(errbuf);
+ free(rxerr);
+ }
+}
+
+/** Extract a copy of the match, or NULL if no match.
+ * @param m A match as returned by regexec().
+ * @param src The source string that was passed to regexec().
+ * @return The allocated string.
+ */
+char *regmatch_dup (regmatch_t * m, const char *src)
+{
+ char *str;
+ int len;
+
+ if (m == NULL || m->rm_so < 0)
+ return NULL;
+ len = m->rm_eo - m->rm_so;
+ str = (char *) flex_alloc ((len + 1) * sizeof (char));
+ if (!str)
+ flexfatal(_("Unable to allocate a copy of the match"));
+ strncpy (str, src + m->rm_so, len);
+ str[len] = 0;
+ return str;
+}
+
+/** Copy the match.
+ * @param m A match as returned by regexec().
+ * @param dest The destination buffer.
+ * @param src The source string that was passed to regexec().
+ * @return dest
+ */
+char *regmatch_cpy (regmatch_t * m, char *dest, const char *src)
+{
+ if (m == NULL || m->rm_so < 0) {
+ if (dest)
+ dest[0] = '\0';
+ return dest;
+ }
+
+ snprintf (dest, regmatch_len(m), "%s", src + m->rm_so);
+ return dest;
+}
+
+/** Get the length in characters of the match.
+ * @param m A match as returned by regexec().
+ * @param src The source string that was passed to regexec().
+ * @return The length of the match.
+ */
+int regmatch_len (regmatch_t * m)
+{
+ if (m == NULL || m->rm_so < 0) {
+ return 0;
+ }
+
+ return m->rm_eo - m->rm_so;
+}
+
+
+
+/** Convert a regmatch_t object to an integer using the strtol() function.
+ * @param m A match as returned by regexec().
+ * @param src The source string that was passed to regexec().
+ * @param endptr Same as the second argument to strtol().
+ * @param base Same as the third argument to strtol().
+ * @return The converted integer or error (Return value is the same as for strtol()).
+ */
+int regmatch_strtol (regmatch_t * m, const char *src, char **endptr,
+ int base)
+{
+ int n = 0;
+
+#define bufsz 20
+ char buf[bufsz];
+ char *s;
+
+ if (m == NULL || m->rm_so < 0)
+ return 0;
+
+ if (regmatch_len (m) < bufsz)
+ s = regmatch_cpy (m, buf, src);
+ else
+ s = regmatch_dup (m, src);
+
+ n = strtol (s, endptr, base);
+
+ if (s != buf)
+ free (s);
+
+ return n;
+}
+
+/** Check for empty or non-existent match.
+ * @param m A match as returned by regexec().
+ * @return false if match length is non-zero.
+ * Note that reg_empty returns true even if match did not occur at all.
+ */
+bool regmatch_empty (regmatch_t * m)
+{
+ return (m == NULL || m->rm_so < 0 || m->rm_so == m->rm_eo);
+}
+
+/* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
diff --git a/usr.bin/lex/scan.l b/usr.bin/lex/scan.l
index 8f0fa2d2789..6c84a80f73c 100644
--- a/usr.bin/lex/scan.l
+++ b/usr.bin/lex/scan.l
@@ -1,43 +1,44 @@
-/* $OpenBSD: scan.l,v 1.9 2006/12/06 05:03:29 ray Exp $ */
+/* $OpenBSD: scan.l,v 1.10 2015/11/19 19:43:40 tedu Exp $ */
-/* scan.l - scanner for flex input */
+/* scan.l - scanner for flex input -*-C-*- */
%{
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
-
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/scan.l,v 1.9 2006/12/06 05:03:29 ray Exp $ */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include "flexdef.h"
#include "parse.h"
+extern bool tablesverify, tablesext;
+extern int trlcontxt; /* Set in parse.y for each rule. */
+extern const char *escaped_qstart, *escaped_qend;
#define ACTION_ECHO add_action( yytext )
#define ACTION_IFDEF(def, should_define) \
@@ -46,6 +47,17 @@
action_define( def, 1 ); \
}
+#define ACTION_ECHO_QSTART add_action (escaped_qstart)
+#define ACTION_ECHO_QEND add_action (escaped_qend)
+
+#define ACTION_M4_IFDEF(def, should_define) \
+ do{ \
+ if ( should_define ) \
+ buf_m4_define( &m4defs_buf, def, NULL);\
+ else \
+ buf_m4_undefine( &m4defs_buf, def);\
+ } while(0)
+
#define MARK_END_OF_PROLOG mark_prolog();
#define YY_DECL \
@@ -56,7 +68,15 @@
return CHAR;
#define RETURNNAME \
- strlcpy( nmstr, yytext, sizeof nmstr); \
+ if(yyleng < MAXLINE) \
+ { \
+ strlcpy( nmstr, yytext, sizeof nmstr ); \
+ } \
+ else \
+ { \
+ synerr(_("Input line too long\n")); \
+ FLEX_EXIT(EXIT_FAILURE); \
+ } \
return NAME;
#define PUT_BACK_STRING(str, start) \
@@ -70,18 +90,27 @@
#define CHECK_YYMORE(str) \
if ( all_lower( str ) ) \
yymore_used = true;
+
+#define YY_USER_INIT \
+ if ( getenv("POSIXLY_CORRECT") ) \
+ posix_compat = true;
+
%}
-%option caseless nodefault outfile="scan.c" stack noyy_top_state
+%option caseless nodefault stack noyy_top_state
%option nostdinit
%x SECT2 SECT2PROLOG SECT3 CODEBLOCK PICKUPDEF SC CARETISBOL NUM QUOTE
%x FIRSTCCL CCL ACTION RECOVER COMMENT ACTION_STRING PERCENT_BRACE_ACTION
-%x OPTION LINEDIR
+%x OPTION LINEDIR CODEBLOCK_MATCH_BRACE
+%x GROUP_WITH_PARAMS
+%x GROUP_MINUS_PARAMS
+%x EXTENDED_COMMENT
+%x COMMENT_DISCARD
WS [[:blank:]]+
OPTWS [[:blank:]]*
-NOT_WS [^[:blank:]\n]
+NOT_WS [^[:blank:]\r\n]
NL \r?\n
@@ -94,18 +123,21 @@ ESCSEQ (\\([^\n]|[0-7]{1,3}|x[[:xdigit:]]{1,2}))
FIRST_CCL_CHAR ([^\\\n]|{ESCSEQ})
CCL_CHAR ([^\\\n\]]|{ESCSEQ})
-CCL_EXPR ("[:"[[:alpha:]]+":]")
+CCL_EXPR ("[:"^?[[:alpha:]]+":]")
LEXOPT [aceknopr]
+M4QSTART "[["
+M4QEND "]]"
+
%%
static int bracelevel, didadef, indented_code;
static int doing_rule_action = false;
static int option_sense;
int doing_codeblock = false;
- int i;
- Char nmdef[MAXLINE], myesc();
+ int i, brace_depth=0, brace_start_line=0;
+ Char nmdef[MAXLINE];
<INITIAL>{
@@ -120,6 +152,15 @@ LEXOPT [aceknopr]
indented_code = false;
BEGIN(CODEBLOCK);
}
+ ^"%top"[[:blank:]]*"{"[[:blank:]]*{NL} {
+ brace_start_line = linenum;
+ ++linenum;
+ buf_linedir( &top_buf, infilename?infilename:"<stdin>", linenum);
+ brace_depth = 1;
+ yy_push_state(CODEBLOCK_MATCH_BRACE);
+ }
+
+ ^"%top".* synerr( _("malformed '%top' directive") );
{WS} /* discard */
@@ -140,10 +181,20 @@ LEXOPT [aceknopr]
^"%"{LEXOPT}{OPTWS}[[:digit:]]*{OPTWS}{NL} ++linenum; /* ignore */
^"%"{LEXOPT}{WS}.*{NL} ++linenum; /* ignore */
+ /* xgettext: no-c-format */
^"%"[^sxaceknopr{}].* synerr( _( "unrecognized '%' directive" ) );
^{NAME} {
+ if(yyleng < MAXLINE)
+ {
strlcpy( nmstr, yytext, sizeof nmstr );
+ }
+ else
+ {
+ synerr( _("Definition name too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+
didadef = false;
BEGIN(PICKUPDEF);
}
@@ -157,8 +208,24 @@ LEXOPT [aceknopr]
<COMMENT>{
"*/" ACTION_ECHO; yy_pop_state();
"*" ACTION_ECHO;
- [^*\n]+ ACTION_ECHO;
- [^*\n]*{NL} ++linenum; ACTION_ECHO;
+ {M4QSTART} ACTION_ECHO_QSTART;
+ {M4QEND} ACTION_ECHO_QEND;
+ [^*\n] ACTION_ECHO;
+ {NL} ++linenum; ACTION_ECHO;
+}
+
+<COMMENT_DISCARD>{
+ /* This is the same as COMMENT, but is discarded rather than output. */
+ "*/" yy_pop_state();
+ "*" ;
+ [^*\n] ;
+ {NL} ++linenum;
+}
+
+<EXTENDED_COMMENT>{
+ ")" yy_pop_state();
+ [^\n\)]+ ;
+ {NL} ++linenum;
}
<LINEDIR>{
@@ -176,7 +243,9 @@ LEXOPT [aceknopr]
<CODEBLOCK>{
^"%}".*{NL} ++linenum; BEGIN(INITIAL);
- {NAME}|{NOT_NAME}|. ACTION_ECHO;
+ {M4QSTART} ACTION_ECHO_QSTART;
+ {M4QEND} ACTION_ECHO_QEND;
+ . ACTION_ECHO;
{NL} {
++linenum;
@@ -186,13 +255,53 @@ LEXOPT [aceknopr]
}
}
+<CODEBLOCK_MATCH_BRACE>{
+ "}" {
+ if( --brace_depth == 0){
+ /* TODO: Matched. */
+ yy_pop_state();
+ }else
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+
+ "{" {
+ brace_depth++;
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+
+ {NL} {
+ ++linenum;
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+
+ {M4QSTART} buf_strnappend(&top_buf, escaped_qstart, strlen(escaped_qstart));
+ {M4QEND} buf_strnappend(&top_buf, escaped_qend, strlen(escaped_qend));
+
+ [^{}\r\n] {
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+
+ <<EOF>> {
+ linenum = brace_start_line;
+ synerr(_("Unmatched '{'"));
+ yyterminate();
+ }
+}
+
<PICKUPDEF>{
{WS} /* separates name and definition */
- {NOT_WS}.* {
- strlcpy( (char *) nmdef, yytext, sizeof nmdef);
-
+ {NOT_WS}[^\r\n]* {
+ if(yyleng < MAXLINE)
+ {
+ strlcpy( (char *) nmdef, yytext, sizeof nmdef );
+ }
+ else
+ {
+ format_synerr( _("Definition value for {%s} too long\n"), nmstr);
+ FLEX_EXIT(EXIT_FAILURE);
+ }
/* Skip trailing whitespace. */
for ( i = strlen( (char *) nmdef ) - 1;
i >= 0 && (nmdef[i] == ' ' || nmdef[i] == '\t');
@@ -227,14 +336,21 @@ LEXOPT [aceknopr]
align long_align = option_sense;
always-interactive {
- action_define( "YY_ALWAYS_INTERACTIVE", option_sense );
+ ACTION_M4_IFDEF( "M4""_YY_ALWAYS_INTERACTIVE", option_sense );
+ interactive = option_sense;
}
array yytext_is_array = option_sense;
+ ansi-definitions ansi_func_defs = option_sense;
+ ansi-prototypes ansi_func_protos = option_sense;
backup backing_up_report = option_sense;
batch interactive = ! option_sense;
+ bison-bridge bison_bridge_lval = option_sense;
+ bison-locations { if((bison_bridge_lloc = option_sense))
+ bison_bridge_lval = true;
+ }
"c++" C_plus_plus = option_sense;
- caseful|case-sensitive caseins = ! option_sense;
- caseless|case-insensitive caseins = option_sense;
+ caseful|case-sensitive sf_set_case_ins(!option_sense);
+ caseless|case-insensitive sf_set_case_ins(option_sense);
debug ddebug = option_sense;
default spprdflt = ! option_sense;
ecs useecs = option_sense;
@@ -249,44 +365,88 @@ LEXOPT [aceknopr]
input ACTION_IFDEF("YY_NO_INPUT", ! option_sense);
interactive interactive = option_sense;
lex-compat lex_compat = option_sense;
+ posix-compat posix_compat = option_sense;
main {
- action_define( "YY_MAIN", option_sense );
- do_yywrap = ! option_sense;
+ ACTION_M4_IFDEF( "M4""_YY_MAIN", option_sense);
+ /* Override yywrap */
+ if( option_sense == true )
+ do_yywrap = false;
}
meta-ecs usemecs = option_sense;
never-interactive {
- action_define( "YY_NEVER_INTERACTIVE", option_sense );
+ ACTION_M4_IFDEF( "M4""_YY_NEVER_INTERACTIVE", option_sense );
+ interactive = !option_sense;
}
perf-report performance_report += option_sense ? 1 : -1;
pointer yytext_is_array = ! option_sense;
read use_read = option_sense;
+ reentrant reentrant = option_sense;
reject reject_really_used = option_sense;
- stack action_define( "YY_STACK_USED", option_sense );
+ stack ACTION_M4_IFDEF( "M4""_YY_STACK_USED", option_sense );
stdinit do_stdinit = option_sense;
stdout use_stdout = option_sense;
- unput ACTION_IFDEF("YY_NO_UNPUT", ! option_sense);
+ unistd ACTION_IFDEF("YY_NO_UNISTD_H", ! option_sense);
+ unput ACTION_M4_IFDEF("M4""_YY_NO_UNPUT", ! option_sense);
verbose printstats = option_sense;
warn nowarn = ! option_sense;
- yylineno do_yylineno = option_sense;
+ yylineno do_yylineno = option_sense; ACTION_M4_IFDEF("M4""_YY_USE_LINENO", option_sense);
yymore yymore_really_used = option_sense;
- yywrap do_yywrap = option_sense;
-
- yy_push_state ACTION_IFDEF("YY_NO_PUSH_STATE", ! option_sense);
- yy_pop_state ACTION_IFDEF("YY_NO_POP_STATE", ! option_sense);
- yy_top_state ACTION_IFDEF("YY_NO_TOP_STATE", ! option_sense);
-
- yy_scan_buffer ACTION_IFDEF("YY_NO_SCAN_BUFFER", ! option_sense);
- yy_scan_bytes ACTION_IFDEF("YY_NO_SCAN_BYTES", ! option_sense);
- yy_scan_string ACTION_IFDEF("YY_NO_SCAN_STRING", ! option_sense);
-
+ yywrap do_yywrap = option_sense;
+
+ yy_push_state ACTION_M4_IFDEF("M4""_YY_NO_PUSH_STATE", ! option_sense);
+ yy_pop_state ACTION_M4_IFDEF("M4""_YY_NO_POP_STATE", ! option_sense);
+ yy_top_state ACTION_M4_IFDEF("M4""_YY_NO_TOP_STATE", ! option_sense);
+
+ yy_scan_buffer ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BUFFER", ! option_sense);
+ yy_scan_bytes ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BYTES", ! option_sense);
+ yy_scan_string ACTION_M4_IFDEF("M4""_YY_NO_SCAN_STRING", ! option_sense);
+
+ yyalloc ACTION_M4_IFDEF("M4""_YY_NO_FLEX_ALLOC", ! option_sense);
+ yyrealloc ACTION_M4_IFDEF("M4""_YY_NO_FLEX_REALLOC", ! option_sense);
+ yyfree ACTION_M4_IFDEF("M4""_YY_NO_FLEX_FREE", ! option_sense);
+
+ yyget_debug ACTION_M4_IFDEF("M4""_YY_NO_GET_DEBUG", ! option_sense);
+ yyset_debug ACTION_M4_IFDEF("M4""_YY_NO_SET_DEBUG", ! option_sense);
+ yyget_extra ACTION_M4_IFDEF("M4""_YY_NO_GET_EXTRA", ! option_sense);
+ yyset_extra ACTION_M4_IFDEF("M4""_YY_NO_SET_EXTRA", ! option_sense);
+ yyget_leng ACTION_M4_IFDEF("M4""_YY_NO_GET_LENG", ! option_sense);
+ yyget_text ACTION_M4_IFDEF("M4""_YY_NO_GET_TEXT", ! option_sense);
+ yyget_lineno ACTION_M4_IFDEF("M4""_YY_NO_GET_LINENO", ! option_sense);
+ yyset_lineno ACTION_M4_IFDEF("M4""_YY_NO_SET_LINENO", ! option_sense);
+ yyget_in ACTION_M4_IFDEF("M4""_YY_NO_GET_IN", ! option_sense);
+ yyset_in ACTION_M4_IFDEF("M4""_YY_NO_SET_IN", ! option_sense);
+ yyget_out ACTION_M4_IFDEF("M4""_YY_NO_GET_OUT", ! option_sense);
+ yyset_out ACTION_M4_IFDEF("M4""_YY_NO_SET_OUT", ! option_sense);
+ yyget_lval ACTION_M4_IFDEF("M4""_YY_NO_GET_LVAL", ! option_sense);
+ yyset_lval ACTION_M4_IFDEF("M4""_YY_NO_SET_LVAL", ! option_sense);
+ yyget_lloc ACTION_M4_IFDEF("M4""_YY_NO_GET_LLOC", ! option_sense);
+ yyset_lloc ACTION_M4_IFDEF("M4""_YY_NO_SET_LLOC", ! option_sense);
+
+ extra-type return OPT_EXTRA_TYPE;
outfile return OPT_OUTFILE;
prefix return OPT_PREFIX;
yyclass return OPT_YYCLASS;
+ header(-file)? return OPT_HEADER;
+ tables-file return OPT_TABLES;
+ tables-verify {
+ tablesverify = option_sense;
+ if(!tablesext && option_sense)
+ tablesext = true;
+ }
+
\"[^"\n]*\" {
- strlcpy( nmstr, yytext + 1, sizeof nmstr);
- if (nmstr[strlen(nmstr) - 1] == '"')
- nmstr[strlen(nmstr) - 1] = '\0';
+ if(yyleng-1 < MAXLINE)
+ {
+ strlcpy( nmstr, yytext + 1, sizeof nmstr );
+ }
+ else
+ {
+ synerr( _("Option line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+ if (nmstr[strlen( nmstr ) - 1] == '"')
+ nmstr[strlen( nmstr ) - 1] = '\0';
return NAME;
}
@@ -318,7 +478,7 @@ LEXOPT [aceknopr]
ACTION_ECHO;
}
- .* ACTION_ECHO;
+ . ACTION_ECHO;
{NL} ++linenum; ACTION_ECHO;
<<EOF>> {
@@ -338,10 +498,21 @@ LEXOPT [aceknopr]
BEGIN(PERCENT_BRACE_ACTION);
}
- ^{OPTWS}"<" BEGIN(SC); return '<';
+ ^{OPTWS}"<" {
+ /* Allow "<" to appear in (?x) patterns. */
+ if (!sf_skip_ws())
+ BEGIN(SC);
+ return '<';
+ }
^{OPTWS}"^" return '^';
\" BEGIN(QUOTE); return '"';
- "{"/[[:digit:]] BEGIN(NUM); return '{';
+ "{"/[[:digit:]] {
+ BEGIN(NUM);
+ if ( lex_compat || posix_compat )
+ return BEGIN_REPEAT_POSIX;
+ else
+ return BEGIN_REPEAT_FLEX;
+ }
"$"/([[:blank:]]|{NL}) return '$';
{WS}"%{" {
@@ -355,46 +526,77 @@ LEXOPT [aceknopr]
return '\n';
}
}
- {WS}"|".*{NL} continued_action = true; ++linenum; return '\n';
+ {WS}"|".*{NL} {
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ /* Push back everything starting at the "|" */
+ size_t amt;
+ amt = strchr (yytext, '|') - yytext;
+ yyless(amt);
+ }
+ else {
+ continued_action = true;
+ ++linenum;
+ return '\n';
+ }
+ }
^{WS}"/*" {
- yyless( yyleng - 2 ); /* put back '/', '*' */
- bracelevel = 0;
- continued_action = false;
- BEGIN(ACTION);
+
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ yy_push_state(COMMENT_DISCARD);
+ }
+ else{
+ yyless( yyleng - 2 ); /* put back '/', '*' */
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+ }
}
- ^{WS} /* allow indented rules */
+ ^{WS} /* allow indented rules */ ;
{WS} {
- /* This rule is separate from the one below because
- * otherwise we get variable trailing context, so
- * we can't build the scanner using -{f,F}.
- */
- bracelevel = 0;
- continued_action = false;
- BEGIN(ACTION);
-
- if ( in_rule )
- {
- doing_rule_action = true;
- in_rule = false;
- return '\n';
- }
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ }
+ else{
+ /* This rule is separate from the one below because
+ * otherwise we get variable trailing context, so
+ * we can't build the scanner using -{f,F}.
+ */
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+ return '\n';
+ }
+ }
}
{OPTWS}{NL} {
- bracelevel = 0;
- continued_action = false;
- BEGIN(ACTION);
- unput( '\n' ); /* so <ACTION> sees it */
-
- if ( in_rule )
- {
- doing_rule_action = true;
- in_rule = false;
- return '\n';
- }
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ ++linenum;
+ }
+ else{
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+ unput( '\n' ); /* so <ACTION> sees it */
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+ return '\n';
+ }
+ }
}
^{OPTWS}"<<EOF>>" |
@@ -403,18 +605,32 @@ LEXOPT [aceknopr]
^"%%".* {
sectnum = 3;
BEGIN(SECT3);
+ outn("/* Begin user sect3 */");
yyterminate(); /* to stop the parser */
}
"["({FIRST_CCL_CHAR}|{CCL_EXPR})({CCL_CHAR}|{CCL_EXPR})* {
int cclval;
- strlcpy( nmstr, yytext, sizeof nmstr);
+ if(yyleng < MAXLINE)
+ {
+ strlcpy( nmstr, yytext, sizeof nmstr );
+ }
+ else
+ {
+ synerr( _("Input line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
/* Check to see if we've already encountered this
* ccl.
*/
- if ( (cclval = ccllookup( (Char *) nmstr )) != 0 )
+ if (0 /* <--- This "0" effectively disables the reuse of a
+ * character class (purely based on its source text).
+ * The reason it was disabled is so yacc/bison can parse
+ * ccl operations, such as ccl difference and union.
+ */
+ && (cclval = ccllookup( (Char *) nmstr )) != 0 )
{
if ( input() != ']' )
synerr( _( "bad character class" ) );
@@ -439,13 +655,31 @@ LEXOPT [aceknopr]
return '[';
}
}
+ "{-}" return CCL_OP_DIFF;
+ "{+}" return CCL_OP_UNION;
- "{"{NAME}"}" {
- register Char *nmdefptr;
- Char *ndlookup();
+ /* Check for :space: at the end of the rule so we don't
+ * wrap the expanded regex in '(' ')' -- breaking trailing
+ * context.
+ */
+ "{"{NAME}"}"[[:space:]]? {
+ Char *nmdefptr;
+ int end_is_ws, end_ch;
+
+ end_ch = yytext[yyleng-1];
+ end_is_ws = end_ch != '}' ? 1 : 0;
+
+ if(yyleng-1 < MAXLINE)
+ {
strlcpy( nmstr, yytext + 1, sizeof nmstr );
- nmstr[yyleng - 2] = '\0'; /* chop trailing brace */
+ }
+ else
+ {
+ synerr( _("Input line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+nmstr[yyleng - 2 - end_is_ws] = '\0'; /* chop trailing brace */
if ( (nmdefptr = ndlookup( nmstr )) == 0 )
format_synerr(
@@ -455,9 +689,12 @@ LEXOPT [aceknopr]
else
{ /* push back name surrounded by ()'s */
int len = strlen( (char *) nmdefptr );
+ if (end_is_ws)
+ unput(end_ch);
if ( lex_compat || nmdefptr[0] == '^' ||
- (len > 0 && nmdefptr[len - 1] == '$') )
+ (len > 0 && nmdefptr[len - 1] == '$')
+ || (end_is_ws && trlcontxt && !sf_skip_ws()))
{ /* don't use ()'s after all */
PUT_BACK_STRING((char *) nmdefptr, 0);
@@ -474,12 +711,45 @@ LEXOPT [aceknopr]
}
}
+ "/*" {
+ if (sf_skip_ws())
+ yy_push_state(COMMENT_DISCARD);
+ else{
+ /* Push back the "*" and return "/" as usual. */
+ yyless(1);
+ return '/';
+ }
+ }
+
+ "(?#" {
+ if (lex_compat || posix_compat){
+ /* Push back the "?#" and treat it like a normal parens. */
+ yyless(1);
+ sf_push();
+ return '(';
+ }
+ else
+ yy_push_state(EXTENDED_COMMENT);
+ }
+ "(?" {
+ sf_push();
+ if (lex_compat || posix_compat)
+ /* Push back the "?" and treat it like a normal parens. */
+ yyless(1);
+ else
+ BEGIN(GROUP_WITH_PARAMS);
+ return '(';
+ }
+ "(" sf_push(); return '(';
+ ")" sf_pop(); return ')';
+
[/|*+?.(){}] return (unsigned char) yytext[0];
. RETURNCHAR;
}
<SC>{
+ {OPTWS}{NL}{OPTWS} ++linenum; /* Allow blank lines & continuations */
[,*] return (unsigned char) yytext[0];
">" BEGIN(SECT2); return '>';
">"/^ BEGIN(CARETISBOL); return '>';
@@ -505,6 +775,19 @@ LEXOPT [aceknopr]
}
}
+<GROUP_WITH_PARAMS>{
+ ":" BEGIN(SECT2);
+ "-" BEGIN(GROUP_MINUS_PARAMS);
+ i sf_set_case_ins(1);
+ s sf_set_dot_all(1);
+ x sf_set_skip_ws(1);
+}
+<GROUP_MINUS_PARAMS>{
+ ":" BEGIN(SECT2);
+ i sf_set_case_ins(0);
+ s sf_set_dot_all(0);
+ x sf_set_skip_ws(0);
+}
<FIRSTCCL>{
"^"/[^-\]\n] BEGIN(CCL); return '^';
@@ -536,6 +819,19 @@ LEXOPT [aceknopr]
"[:space:]" BEGIN(CCL); return CCE_SPACE;
"[:upper:]" BEGIN(CCL); return CCE_UPPER;
"[:xdigit:]" BEGIN(CCL); return CCE_XDIGIT;
+
+ "[:^alnum:]" BEGIN(CCL); return CCE_NEG_ALNUM;
+ "[:^alpha:]" BEGIN(CCL); return CCE_NEG_ALPHA;
+ "[:^blank:]" BEGIN(CCL); return CCE_NEG_BLANK;
+ "[:^cntrl:]" BEGIN(CCL); return CCE_NEG_CNTRL;
+ "[:^digit:]" BEGIN(CCL); return CCE_NEG_DIGIT;
+ "[:^graph:]" BEGIN(CCL); return CCE_NEG_GRAPH;
+ "[:^lower:]" BEGIN(CCL); return CCE_NEG_LOWER;
+ "[:^print:]" BEGIN(CCL); return CCE_NEG_PRINT;
+ "[:^punct:]" BEGIN(CCL); return CCE_NEG_PUNCT;
+ "[:^space:]" BEGIN(CCL); return CCE_NEG_SPACE;
+ "[:^upper:]" BEGIN(CCL); return CCE_NEG_UPPER;
+ "[:^xdigit:]" BEGIN(CCL); return CCE_NEG_XDIGIT;
{CCL_EXPR} {
format_synerr(
_( "bad character class expression: %s" ),
@@ -551,7 +847,13 @@ LEXOPT [aceknopr]
}
"," return ',';
- "}" BEGIN(SECT2); return '}';
+ "}" {
+ BEGIN(SECT2);
+ if ( lex_compat || posix_compat )
+ return END_REPEAT_POSIX;
+ else
+ return END_REPEAT_FLEX;
+ }
. {
synerr( _( "bad character inside {}'s" ) );
@@ -584,7 +886,9 @@ LEXOPT [aceknopr]
}
}
- {NAME}|{NOT_NAME}|. ACTION_ECHO;
+ {M4QSTART} ACTION_ECHO_QSTART;
+ {M4QEND} ACTION_ECHO_QEND;
+ . ACTION_ECHO;
{NL} {
++linenum;
ACTION_ECHO;
@@ -605,7 +909,10 @@ LEXOPT [aceknopr]
<ACTION>{
"{" ACTION_ECHO; ++bracelevel;
"}" ACTION_ECHO; --bracelevel;
- [^[:alpha:]_{}"'/\n]+ ACTION_ECHO;
+ {M4QSTART} ACTION_ECHO_QSTART;
+ {M4QEND} ACTION_ECHO_QEND;
+ [^[:alpha:]_{}"'/\n\[\]]+ ACTION_ECHO;
+ [\[\]] ACTION_ECHO;
{NAME} ACTION_ECHO;
"'"([^'\\\n]|\\.)*"'" ACTION_ECHO; /* character constant */
\" ACTION_ECHO; BEGIN(ACTION_STRING);
@@ -627,16 +934,20 @@ LEXOPT [aceknopr]
<ACTION_STRING>{
[^"\\\n]+ ACTION_ECHO;
\\. ACTION_ECHO;
- {NL} ++linenum; ACTION_ECHO;
+ {NL} ++linenum; ACTION_ECHO; BEGIN(ACTION);
\" ACTION_ECHO; BEGIN(ACTION);
. ACTION_ECHO;
}
-<COMMENT,ACTION,ACTION_STRING><<EOF>> {
+<COMMENT,COMMENT_DISCARD,ACTION,ACTION_STRING><<EOF>> {
synerr( _( "EOF encountered inside an action" ) );
yyterminate();
}
+<EXTENDED_COMMENT,GROUP_WITH_PARAMS,GROUP_MINUS_PARAMS><<EOF>> {
+ synerr( _( "EOF encountered inside pattern" ) );
+ yyterminate();
+ }
<SECT2,QUOTE,FIRSTCCL,CCL>{ESCSEQ} {
yylval = myesc( (Char *) yytext );
@@ -649,7 +960,10 @@ LEXOPT [aceknopr]
<SECT3>{
- .*(\n?) ECHO;
+ {M4QSTART} fwrite (escaped_qstart, 1, strlen(escaped_qstart), yyout);
+ {M4QEND} fwrite (escaped_qend, 1, strlen(escaped_qend), yyout);
+ [^\[\]\n]*(\n?) ECHO;
+ (.|\n) ECHO;
<<EOF>> sectnum = 0; yyterminate();
}
diff --git a/usr.bin/lex/scanflags.c b/usr.bin/lex/scanflags.c
new file mode 100644
index 00000000000..a39beb50d89
--- /dev/null
+++ b/usr.bin/lex/scanflags.c
@@ -0,0 +1,71 @@
+/* $OpenBSD: scanflags.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* scanflags - flags used by scanning. */
+
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+
+scanflags_t* _sf_stk = NULL;
+size_t _sf_top_ix=0, _sf_max=0;
+
+void
+sf_push (void)
+{
+ if (_sf_top_ix + 1 >= _sf_max)
+ _sf_stk = (scanflags_t*) flex_realloc ( (void*) _sf_stk, sizeof(scanflags_t) * (_sf_max += 32));
+
+ // copy the top element
+ _sf_stk[_sf_top_ix + 1] = _sf_stk[_sf_top_ix];
+ ++_sf_top_ix;
+}
+
+void
+sf_pop (void)
+{
+ assert(_sf_top_ix > 0);
+ --_sf_top_ix;
+}
+
+/* one-time initialization. Should be called before any sf_ functions. */
+void
+sf_init (void)
+{
+ assert(_sf_stk == NULL);
+ _sf_stk = (scanflags_t*) flex_alloc ( sizeof(scanflags_t) * (_sf_max = 32));
+ if (!_sf_stk)
+ lerrsf_fatal(_("Unable to allocate %ld of stack"),
+ (void *)sizeof(scanflags_t));
+ _sf_stk[_sf_top_ix] = 0;
+}
+
+/* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
diff --git a/usr.bin/lex/scanopt.c b/usr.bin/lex/scanopt.c
new file mode 100644
index 00000000000..55b464664f4
--- /dev/null
+++ b/usr.bin/lex/scanopt.c
@@ -0,0 +1,875 @@
+/* $OpenBSD: scanopt.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* flex - tool to generate fast lexical analyzers */
+
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+#include "scanopt.h"
+
+
+/* Internal structures */
+
+#ifdef HAVE_STRCASECMP
+#define STRCASECMP(a,b) strcasecmp(a,b)
+#else
+static int STRCASECMP PROTO ((const char *, const char *));
+
+static int STRCASECMP (a, b)
+ const char *a;
+ const char *b;
+{
+ while (tolower (*a++) == tolower (*b++)) ;
+ return b - a;
+}
+#endif
+
+#define ARG_NONE 0x01
+#define ARG_REQ 0x02
+#define ARG_OPT 0x04
+#define IS_LONG 0x08
+
+struct _aux {
+ int flags; /* The above hex flags. */
+ int namelen; /* Length of the actual option word, e.g., "--file[=foo]" is 4 */
+ int printlen; /* Length of entire string, e.g., "--file[=foo]" is 12 */
+};
+
+
+struct _scanopt_t {
+ const optspec_t *options; /* List of options. */
+ struct _aux *aux; /* Auxiliary data about options. */
+ int optc; /* Number of options. */
+ int argc; /* Number of args. */
+ char **argv; /* Array of strings. */
+ int index; /* Used as: argv[index][subscript]. */
+ int subscript;
+ char no_err_msg; /* If true, do not print errors. */
+ char has_long;
+ char has_short;
+};
+
+/* Accessor functions. These WOULD be one-liners, but portability calls. */
+static const char *NAME PROTO ((struct _scanopt_t *, int));
+static int PRINTLEN PROTO ((struct _scanopt_t *, int));
+static int RVAL PROTO ((struct _scanopt_t *, int));
+static int FLAGS PROTO ((struct _scanopt_t *, int));
+static const char *DESC PROTO ((struct _scanopt_t *, int));
+static int scanopt_err PROTO ((struct _scanopt_t *, int, int, int));
+static int matchlongopt PROTO ((char *, char **, int *, char **, int *));
+static int find_opt
+PROTO ((struct _scanopt_t *, int, char *, int, int *, int *opt_offset));
+
+static const char *NAME (s, i)
+ struct _scanopt_t *s;
+ int i;
+{
+ return s->options[i].opt_fmt +
+ ((s->aux[i].flags & IS_LONG) ? 2 : 1);
+}
+
+static int PRINTLEN (s, i)
+ struct _scanopt_t *s;
+ int i;
+{
+ return s->aux[i].printlen;
+}
+
+static int RVAL (s, i)
+ struct _scanopt_t *s;
+ int i;
+{
+ return s->options[i].r_val;
+}
+
+static int FLAGS (s, i)
+ struct _scanopt_t *s;
+ int i;
+{
+ return s->aux[i].flags;
+}
+
+static const char *DESC (s, i)
+ struct _scanopt_t *s;
+ int i;
+{
+ return s->options[i].desc ? s->options[i].desc : "";
+}
+
+#ifndef NO_SCANOPT_USAGE
+static int get_cols PROTO ((void));
+
+static int get_cols ()
+{
+ char *env;
+ int cols = 80; /* default */
+
+#ifdef HAVE_NCURSES_H
+ initscr ();
+ endwin ();
+ if (COLS > 0)
+ return COLS;
+#endif
+
+ if ((env = getenv ("COLUMNS")) != NULL)
+ cols = atoi (env);
+
+ return cols;
+}
+#endif
+
+/* Macro to check for NULL before assigning a value. */
+#define SAFE_ASSIGN(ptr,val) \
+ do{ \
+ if((ptr)!=NULL) \
+ *(ptr) = val; \
+ }while(0)
+
+/* Macro to assure we reset subscript whenever we adjust s->index.*/
+#define INC_INDEX(s,n) \
+ do{ \
+ (s)->index += (n); \
+ (s)->subscript= 0; \
+ }while(0)
+
+scanopt_t *scanopt_init (options, argc, argv, flags)
+ const optspec_t *options;
+ int argc;
+ char **argv;
+ int flags;
+{
+ int i;
+ struct _scanopt_t *s;
+ s = (struct _scanopt_t *) malloc (sizeof (struct _scanopt_t));
+
+ s->options = options;
+ s->optc = 0;
+ s->argc = argc;
+ s->argv = (char **) argv;
+ s->index = 1;
+ s->subscript = 0;
+ s->no_err_msg = (flags & SCANOPT_NO_ERR_MSG);
+ s->has_long = 0;
+ s->has_short = 0;
+
+ /* Determine option count. (Find entry with all zeros). */
+ s->optc = 0;
+ while (options[s->optc].opt_fmt
+ || options[s->optc].r_val || options[s->optc].desc)
+ s->optc++;
+
+ /* Build auxiliary data */
+ s->aux = (struct _aux *) malloc (s->optc * sizeof (struct _aux));
+
+ for (i = 0; i < s->optc; i++) {
+ const Char *p, *pname;
+ const struct optspec_t *opt;
+ struct _aux *aux;
+
+ opt = s->options + i;
+ aux = s->aux + i;
+
+ aux->flags = ARG_NONE;
+
+ if (opt->opt_fmt[0] == '-' && opt->opt_fmt[1] == '-') {
+ aux->flags |= IS_LONG;
+ pname = (const Char *)(opt->opt_fmt + 2);
+ s->has_long = 1;
+ }
+ else {
+ pname = (const Char *)(opt->opt_fmt + 1);
+ s->has_short = 1;
+ }
+ aux->printlen = strlen (opt->opt_fmt);
+
+ aux->namelen = 0;
+ for (p = pname + 1; *p; p++) {
+ /* detect required arg */
+ if (*p == '=' || isspace (*p)
+ || !(aux->flags & IS_LONG)) {
+ if (aux->namelen == 0)
+ aux->namelen = p - pname;
+ aux->flags |= ARG_REQ;
+ aux->flags &= ~ARG_NONE;
+ }
+ /* detect optional arg. This overrides required arg. */
+ if (*p == '[') {
+ if (aux->namelen == 0)
+ aux->namelen = p - pname;
+ aux->flags &= ~(ARG_REQ | ARG_NONE);
+ aux->flags |= ARG_OPT;
+ break;
+ }
+ }
+ if (aux->namelen == 0)
+ aux->namelen = p - pname;
+ }
+ return (scanopt_t *) s;
+}
+
+#ifndef NO_SCANOPT_USAGE
+/* these structs are for scanopt_usage(). */
+struct usg_elem {
+ int idx;
+ struct usg_elem *next;
+ struct usg_elem *alias;
+};
+typedef struct usg_elem usg_elem;
+
+
+/* Prints a usage message based on contents of optlist.
+ * Parameters:
+ * scanner - The scanner, already initialized with scanopt_init().
+ * fp - The file stream to write to.
+ * usage - Text to be prepended to option list.
+ * Return: Always returns 0 (zero).
+ * The output looks something like this:
+
+[indent][option, alias1, alias2...][indent][description line1
+ description line2...]
+ */
+int scanopt_usage (scanner, fp, usage)
+ scanopt_t *scanner;
+ FILE *fp;
+ const char *usage;
+{
+ struct _scanopt_t *s;
+ int i, columns, indent = 2;
+ usg_elem *byr_val = NULL; /* option indices sorted by r_val */
+ usg_elem *store; /* array of preallocated elements. */
+ int store_idx = 0;
+ usg_elem *ue;
+ int maxlen[2];
+ int desccol = 0;
+ int print_run = 0;
+
+ maxlen[0] = 0;
+ maxlen[1] = 0;
+
+ s = (struct _scanopt_t *) scanner;
+
+ if (usage) {
+ fprintf (fp, "%s\n", usage);
+ }
+ else {
+ /* Find the basename of argv[0] */
+ const char *p;
+
+ p = s->argv[0] + strlen (s->argv[0]);
+ while (p != s->argv[0] && *p != '/')
+ --p;
+ if (*p == '/')
+ p++;
+
+ fprintf (fp, _("Usage: %s [OPTIONS]...\n"), p);
+ }
+ fprintf (fp, "\n");
+
+ /* Sort by r_val and string. Yes, this is O(n*n), but n is small. */
+ store = (usg_elem *) malloc (s->optc * sizeof (usg_elem));
+ for (i = 0; i < s->optc; i++) {
+
+ /* grab the next preallocate node. */
+ ue = store + store_idx++;
+ ue->idx = i;
+ ue->next = ue->alias = NULL;
+
+ /* insert into list. */
+ if (!byr_val)
+ byr_val = ue;
+ else {
+ int found_alias = 0;
+ usg_elem **ue_curr, **ptr_if_no_alias = NULL;
+
+ ue_curr = &byr_val;
+ while (*ue_curr) {
+ if (RVAL (s, (*ue_curr)->idx) ==
+ RVAL (s, ue->idx)) {
+ /* push onto the alias list. */
+ ue_curr = &((*ue_curr)->alias);
+ found_alias = 1;
+ break;
+ }
+ if (!ptr_if_no_alias
+ &&
+ STRCASECMP (NAME (s, (*ue_curr)->idx),
+ NAME (s, ue->idx)) > 0) {
+ ptr_if_no_alias = ue_curr;
+ }
+ ue_curr = &((*ue_curr)->next);
+ }
+ if (!found_alias && ptr_if_no_alias)
+ ue_curr = ptr_if_no_alias;
+ ue->next = *ue_curr;
+ *ue_curr = ue;
+ }
+ }
+
+#if 0
+ if (1) {
+ printf ("ORIGINAL:\n");
+ for (i = 0; i < s->optc; i++)
+ printf ("%2d: %s\n", i, NAME (s, i));
+ printf ("SORTED:\n");
+ ue = byr_val;
+ while (ue) {
+ usg_elem *ue2;
+
+ printf ("%2d: %s\n", ue->idx, NAME (s, ue->idx));
+ for (ue2 = ue->alias; ue2; ue2 = ue2->next)
+ printf (" +---> %2d: %s\n", ue2->idx,
+ NAME (s, ue2->idx));
+ ue = ue->next;
+ }
+ }
+#endif
+
+ /* Now build each row of output. */
+
+ /* first pass calculate how much room we need. */
+ for (ue = byr_val; ue; ue = ue->next) {
+ usg_elem *ap;
+ int len = 0;
+ int nshort = 0, nlong = 0;
+
+
+#define CALC_LEN(i) do {\
+ if(FLAGS(s,i) & IS_LONG) \
+ len += (nlong++||nshort) ? 2+PRINTLEN(s,i) : PRINTLEN(s,i);\
+ else\
+ len += (nshort++||nlong)? 2+PRINTLEN(s,i) : PRINTLEN(s,i);\
+ }while(0)
+
+ if (!(FLAGS (s, ue->idx) & IS_LONG))
+ CALC_LEN (ue->idx);
+
+ /* do short aliases first. */
+ for (ap = ue->alias; ap; ap = ap->next) {
+ if (FLAGS (s, ap->idx) & IS_LONG)
+ continue;
+ CALC_LEN (ap->idx);
+ }
+
+ if (FLAGS (s, ue->idx) & IS_LONG)
+ CALC_LEN (ue->idx);
+
+ /* repeat the above loop, this time for long aliases. */
+ for (ap = ue->alias; ap; ap = ap->next) {
+ if (!(FLAGS (s, ap->idx) & IS_LONG))
+ continue;
+ CALC_LEN (ap->idx);
+ }
+
+ if (len > maxlen[0])
+ maxlen[0] = len;
+
+ /* It's much easier to calculate length for description column! */
+ len = strlen (DESC (s, ue->idx));
+ if (len > maxlen[1])
+ maxlen[1] = len;
+ }
+
+ /* Determine how much room we have, and how much we will allocate to each col.
+ * Do not address pathological cases. Output will just be ugly. */
+ columns = get_cols () - 1;
+ if (maxlen[0] + maxlen[1] + indent * 2 > columns) {
+ /* col 0 gets whatever it wants. we'll wrap the desc col. */
+ maxlen[1] = columns - (maxlen[0] + indent * 2);
+ if (maxlen[1] < 14) /* 14 is arbitrary lower limit on desc width. */
+ maxlen[1] = INT_MAX;
+ }
+ desccol = maxlen[0] + indent * 2;
+
+#define PRINT_SPACES(fp,n)\
+ do{\
+ int _n;\
+ _n=(n);\
+ while(_n-- > 0)\
+ fputc(' ',(fp));\
+ }while(0)
+
+
+ /* Second pass (same as above loop), this time we print. */
+ /* Sloppy hack: We iterate twice. The first time we print short and long options.
+ The second time we print those lines that have ONLY long options. */
+ while (print_run++ < 2) {
+ for (ue = byr_val; ue; ue = ue->next) {
+ usg_elem *ap;
+ int nwords = 0, nchars = 0, has_short = 0;
+
+/* TODO: get has_short schtick to work */
+ has_short = !(FLAGS (s, ue->idx) & IS_LONG);
+ for (ap = ue->alias; ap; ap = ap->next) {
+ if (!(FLAGS (s, ap->idx) & IS_LONG)) {
+ has_short = 1;
+ break;
+ }
+ }
+ if ((print_run == 1 && !has_short) ||
+ (print_run == 2 && has_short))
+ continue;
+
+ PRINT_SPACES (fp, indent);
+ nchars += indent;
+
+/* Print, adding a ", " between aliases. */
+#define PRINT_IT(i) do{\
+ if(nwords++)\
+ nchars+=fprintf(fp,", ");\
+ nchars+=fprintf(fp,"%s",s->options[i].opt_fmt);\
+ }while(0)
+
+ if (!(FLAGS (s, ue->idx) & IS_LONG))
+ PRINT_IT (ue->idx);
+
+ /* print short aliases first. */
+ for (ap = ue->alias; ap; ap = ap->next) {
+ if (!(FLAGS (s, ap->idx) & IS_LONG))
+ PRINT_IT (ap->idx);
+ }
+
+
+ if (FLAGS (s, ue->idx) & IS_LONG)
+ PRINT_IT (ue->idx);
+
+ /* repeat the above loop, this time for long aliases. */
+ for (ap = ue->alias; ap; ap = ap->next) {
+ if (FLAGS (s, ap->idx) & IS_LONG)
+ PRINT_IT (ap->idx);
+ }
+
+ /* pad to desccol */
+ PRINT_SPACES (fp, desccol - nchars);
+
+ /* Print description, wrapped to maxlen[1] columns. */
+ if (1) {
+ const char *pstart;
+
+ pstart = DESC (s, ue->idx);
+ while (1) {
+ int n = 0;
+ const char *lastws = NULL, *p;
+
+ p = pstart;
+
+ while (*p && n < maxlen[1]
+ && *p != '\n') {
+ if (isspace ((Char)(*p))
+ || *p == '-') lastws =
+ p;
+ n++;
+ p++;
+ }
+
+ if (!*p) { /* hit end of desc. done. */
+ fprintf (fp, "%s\n",
+ pstart);
+ break;
+ }
+ else if (*p == '\n') { /* print everything up to here then wrap. */
+ fprintf (fp, "%.*s\n", n,
+ pstart);
+ PRINT_SPACES (fp, desccol);
+ pstart = p + 1;
+ continue;
+ }
+ else { /* we hit the edge of the screen. wrap at space if possible. */
+ if (lastws) {
+ fprintf (fp,
+ "%.*s\n",
+ (int)(lastws - pstart),
+ pstart);
+ pstart =
+ lastws + 1;
+ }
+ else {
+ fprintf (fp,
+ "%.*s\n",
+ n,
+ pstart);
+ pstart = p + 1;
+ }
+ PRINT_SPACES (fp, desccol);
+ continue;
+ }
+ }
+ }
+ }
+ } /* end while */
+ free (store);
+ return 0;
+}
+#endif /* no scanopt_usage */
+
+
+static int scanopt_err (s, opt_offset, is_short, err)
+ struct _scanopt_t *s;
+ int opt_offset;
+ int is_short;
+ int err;
+{
+ const char *optname = "";
+ char optchar[2];
+ const optspec_t *opt = NULL;
+
+ if (opt_offset >= 0)
+ opt = s->options + opt_offset;
+
+ if (!s->no_err_msg) {
+
+ if (s->index > 0 && s->index < s->argc) {
+ if (is_short) {
+ optchar[0] =
+ s->argv[s->index][s->subscript];
+ optchar[1] = '\0';
+ optname = optchar;
+ }
+ else {
+ optname = s->argv[s->index];
+ }
+ }
+
+ fprintf (stderr, "%s: ", s->argv[0]);
+ switch (err) {
+ case SCANOPT_ERR_ARG_NOT_ALLOWED:
+ fprintf (stderr,
+ _
+ ("option `%s' doesn't allow an argument\n"),
+ optname);
+ break;
+ case SCANOPT_ERR_ARG_NOT_FOUND:
+ fprintf (stderr,
+ _("option `%s' requires an argument\n"),
+ optname);
+ break;
+ case SCANOPT_ERR_OPT_AMBIGUOUS:
+ fprintf (stderr, _("option `%s' is ambiguous\n"),
+ optname);
+ break;
+ case SCANOPT_ERR_OPT_UNRECOGNIZED:
+ fprintf (stderr, _("Unrecognized option `%s'\n"),
+ optname);
+ break;
+ default:
+ fprintf (stderr, _("Unknown error=(%d)\n"), err);
+ break;
+ }
+ }
+ return err;
+}
+
+
+/* Internal. Match str against the regex ^--([^=]+)(=(.*))?
+ * return 1 if *looks* like a long option.
+ * 'str' is the only input argument, the rest of the arguments are output only.
+ * optname will point to str + 2
+ *
+ */
+static int matchlongopt (str, optname, optlen, arg, arglen)
+ char *str;
+ char **optname;
+ int *optlen;
+ char **arg;
+ int *arglen;
+{
+ char *p;
+
+ *optname = *arg = (char *) 0;
+ *optlen = *arglen = 0;
+
+ /* Match regex /--./ */
+ p = str;
+ if (p[0] != '-' || p[1] != '-' || !p[2])
+ return 0;
+
+ p += 2;
+ *optname = (char *) p;
+
+ /* find the end of optname */
+ while (*p && *p != '=')
+ ++p;
+
+ *optlen = p - *optname;
+
+ if (!*p)
+ /* an option with no '=...' part. */
+ return 1;
+
+
+ /* We saw an '=' char. The rest of p is the arg. */
+ p++;
+ *arg = p;
+ while (*p)
+ ++p;
+ *arglen = p - *arg;
+
+ return 1;
+}
+
+
+/* Internal. Look up long or short option by name.
+ * Long options must match a non-ambiguous prefix, or exact match.
+ * Short options must be exact.
+ * Return boolean true if found and no error.
+ * Error stored in err_code or zero if no error. */
+static int find_opt (s, lookup_long, optstart, len, err_code, opt_offset)
+ struct _scanopt_t *s;
+ int lookup_long;
+ char *optstart;
+ int len;
+ int *err_code;
+ int *opt_offset;
+{
+ int nmatch = 0, lastr_val = 0, i;
+
+ *err_code = 0;
+ *opt_offset = -1;
+
+ if (!optstart)
+ return 0;
+
+ for (i = 0; i < s->optc; i++) {
+ char *optname;
+
+ optname =
+ (char *) (s->options[i].opt_fmt +
+ (lookup_long ? 2 : 1));
+
+ if (lookup_long && (s->aux[i].flags & IS_LONG)) {
+ if (len > s->aux[i].namelen)
+ continue;
+
+ if (strncmp (optname, optstart, len) == 0) {
+ nmatch++;
+ *opt_offset = i;
+
+ /* exact match overrides all. */
+ if (len == s->aux[i].namelen) {
+ nmatch = 1;
+ break;
+ }
+
+ /* ambiguity is ok between aliases. */
+ if (lastr_val
+ && lastr_val ==
+ s->options[i].r_val) nmatch--;
+ lastr_val = s->options[i].r_val;
+ }
+ }
+ else if (!lookup_long && !(s->aux[i].flags & IS_LONG)) {
+ if (optname[0] == optstart[0]) {
+ nmatch++;
+ *opt_offset = i;
+ }
+ }
+ }
+
+ if (nmatch == 0) {
+ *err_code = SCANOPT_ERR_OPT_UNRECOGNIZED;
+ *opt_offset = -1;
+ }
+ else if (nmatch > 1) {
+ *err_code = SCANOPT_ERR_OPT_AMBIGUOUS;
+ *opt_offset = -1;
+ }
+
+ return *err_code ? 0 : 1;
+}
+
+
+int scanopt (svoid, arg, optindex)
+ scanopt_t *svoid;
+ char **arg;
+ int *optindex;
+{
+ char *optname = NULL, *optarg = NULL, *pstart;
+ int namelen = 0, arglen = 0;
+ int errcode = 0, has_next;
+ const optspec_t *optp;
+ struct _scanopt_t *s;
+ struct _aux *auxp;
+ int is_short;
+ int opt_offset = -1;
+
+ s = (struct _scanopt_t *) svoid;
+
+ /* Normalize return-parameters. */
+ SAFE_ASSIGN (arg, NULL);
+ SAFE_ASSIGN (optindex, s->index);
+
+ if (s->index >= s->argc)
+ return 0;
+
+ /* pstart always points to the start of our current scan. */
+ pstart = s->argv[s->index] + s->subscript;
+ if (!pstart)
+ return 0;
+
+ if (s->subscript == 0) {
+
+ /* test for exact match of "--" */
+ if (pstart[0] == '-' && pstart[1] == '-' && !pstart[2]) {
+ SAFE_ASSIGN (optindex, s->index + 1);
+ INC_INDEX (s, 1);
+ return 0;
+ }
+
+ /* Match an opt. */
+ if (matchlongopt
+ (pstart, &optname, &namelen, &optarg, &arglen)) {
+
+ /* it LOOKS like an opt, but is it one?! */
+ if (!find_opt
+ (s, 1, optname, namelen, &errcode,
+ &opt_offset)) {
+ scanopt_err (s, opt_offset, 0, errcode);
+ return errcode;
+ }
+ /* We handle this below. */
+ is_short = 0;
+
+ /* Check for short opt. */
+ }
+ else if (pstart[0] == '-' && pstart[1]) {
+ /* Pass through to below. */
+ is_short = 1;
+ s->subscript++;
+ pstart++;
+ }
+
+ else {
+ /* It's not an option. We're done. */
+ return 0;
+ }
+ }
+
+ /* We have to re-check the subscript status because it
+ * may have changed above. */
+
+ if (s->subscript != 0) {
+
+ /* we are somewhere in a run of short opts,
+ * e.g., at the 'z' in `tar -xzf` */
+
+ optname = pstart;
+ namelen = 1;
+ is_short = 1;
+
+ if (!find_opt
+ (s, 0, pstart, namelen, &errcode, &opt_offset)) {
+ return scanopt_err (s, opt_offset, 1, errcode);
+ }
+
+ optarg = pstart + 1;
+ if (!*optarg) {
+ optarg = NULL;
+ arglen = 0;
+ }
+ else
+ arglen = strlen (optarg);
+ }
+
+ /* At this point, we have a long or short option matched at opt_offset into
+ * the s->options array (and corresponding aux array).
+ * A trailing argument is in {optarg,arglen}, if any.
+ */
+
+ /* Look ahead in argv[] to see if there is something
+ * that we can use as an argument (if needed). */
+ has_next = s->index + 1 < s->argc
+ && strcmp ("--", s->argv[s->index + 1]) != 0;
+
+ optp = s->options + opt_offset;
+ auxp = s->aux + opt_offset;
+
+ /* case: no args allowed */
+ if (auxp->flags & ARG_NONE) {
+ if (optarg && !is_short) {
+ scanopt_err (s, opt_offset, is_short, errcode =
+ SCANOPT_ERR_ARG_NOT_ALLOWED);
+ INC_INDEX (s, 1);
+ return errcode;
+ }
+ else if (!optarg)
+ INC_INDEX (s, 1);
+ else
+ s->subscript++;
+ return optp->r_val;
+ }
+
+ /* case: required */
+ if (auxp->flags & ARG_REQ) {
+ if (!optarg && !has_next)
+ return scanopt_err (s, opt_offset, is_short,
+ SCANOPT_ERR_ARG_NOT_FOUND);
+
+ if (!optarg) {
+ /* Let the next argv element become the argument. */
+ SAFE_ASSIGN (arg, s->argv[s->index + 1]);
+ INC_INDEX (s, 2);
+ }
+ else {
+ SAFE_ASSIGN (arg, (char *) optarg);
+ INC_INDEX (s, 1);
+ }
+ return optp->r_val;
+ }
+
+ /* case: optional */
+ if (auxp->flags & ARG_OPT) {
+ SAFE_ASSIGN (arg, optarg);
+ INC_INDEX (s, 1);
+ return optp->r_val;
+ }
+
+
+ /* Should not reach here. */
+ return 0;
+}
+
+
+int scanopt_destroy (svoid)
+ scanopt_t *svoid;
+{
+ struct _scanopt_t *s;
+
+ s = (struct _scanopt_t *) svoid;
+ if (s) {
+ if (s->aux)
+ free (s->aux);
+ free (s);
+ }
+ return 0;
+}
+
+
+/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */
diff --git a/usr.bin/lex/scanopt.h b/usr.bin/lex/scanopt.h
new file mode 100644
index 00000000000..523a4e557ab
--- /dev/null
+++ b/usr.bin/lex/scanopt.h
@@ -0,0 +1,134 @@
+/* $OpenBSD: scanopt.h,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* flex - tool to generate fast lexical analyzers */
+
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#ifndef SCANOPT_H
+#define SCANOPT_H
+
+#include "flexdef.h"
+
+
+#ifndef NO_SCANOPT_USAGE
+/* Used by scanopt_usage for pretty-printing. */
+#ifdef HAVE_NCURSES_H
+#include <ncurses.h>
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef PROTO
+#define PROTO(args) args
+#endif
+/* Error codes. */ enum scanopt_err_t {
+ SCANOPT_ERR_OPT_UNRECOGNIZED = -1, /* Unrecognized option. */
+ SCANOPT_ERR_OPT_AMBIGUOUS = -2, /* It matched more than one option name. */
+ SCANOPT_ERR_ARG_NOT_FOUND = -3, /* The required arg was not found. */
+ SCANOPT_ERR_ARG_NOT_ALLOWED = -4 /* Option does not take an argument. */
+ };
+
+
+/* flags passed to scanopt_init */
+ enum scanopt_flag_t {
+ SCANOPT_NO_ERR_MSG = 0x01 /* Suppress printing to stderr. */
+ };
+
+/* Specification for a single option. */
+ struct optspec_t {
+ const char *opt_fmt; /* e.g., "--foo=FILE", "-f FILE", "-n [NUM]" */
+ int r_val; /* Value to be returned by scanopt_ex(). */
+ const char *desc; /* Brief description of this option, or NULL. */
+ };
+ typedef struct optspec_t optspec_t;
+
+
+/* Used internally by scanopt() to maintain state. */
+/* Never modify these value directly. */
+ typedef void *scanopt_t;
+
+
+/* Initializes scanner and checks option list for errors.
+ * Parameters:
+ * options - Array of options.
+ * argc - Same as passed to main().
+ * argv - Same as passed to main(). First element is skipped.
+ * flags - Control behavior.
+ * Return: A malloc'd pointer .
+ */
+ scanopt_t *scanopt_init PROTO ((const optspec_t * options,
+ int argc, char **argv, int flags));
+
+/* Frees memory used by scanner.
+ * Always returns 0. */
+ int scanopt_destroy PROTO ((scanopt_t * scanner));
+
+#ifndef NO_SCANOPT_USAGE
+/* Prints a usage message based on contents of optlist.
+ * Parameters:
+ * scanner - The scanner, already initialized with scanopt_init().
+ * fp - The file stream to write to.
+ * usage - Text to be prepended to option list. May be NULL.
+ * Return: Always returns 0 (zero).
+ */
+ int scanopt_usage
+ PROTO (
+ (scanopt_t * scanner, FILE * fp,
+ const char *usage));
+#endif
+
+/* Scans command-line options in argv[].
+ * Parameters:
+ * scanner - The scanner, already initialized with scanopt_init().
+ * optarg - Return argument, may be NULL.
+ * On success, it points to start of an argument.
+ * optindex - Return argument, may be NULL.
+ * On success or failure, it is the index of this option.
+ * If return is zero, then optindex is the NEXT valid option index.
+ *
+ * Return: > 0 on success. Return value is from optspec_t->rval.
+ * == 0 if at end of options.
+ * < 0 on error (return value is an error code).
+ *
+ */
+ int scanopt
+ PROTO (
+ (scanopt_t * scanner, char **optarg,
+ int *optindex));
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */
diff --git a/usr.bin/lex/sym.c b/usr.bin/lex/sym.c
index 9a9f3b1bb91..0a9e08491ec 100644
--- a/usr.bin/lex/sym.c
+++ b/usr.bin/lex/sym.c
@@ -1,53 +1,72 @@
-/* $OpenBSD: sym.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* $OpenBSD: sym.c,v 1.7 2015/11/19 19:43:40 tedu Exp $ */
/* sym - symbol table routines */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/sym.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include "flexdef.h"
+/* Variables for symbol tables:
+ * sctbl - start-condition symbol table
+ * ndtbl - name-definition symbol table
+ * ccltab - character class text symbol table
+ */
-/* declare functions that have forward references */
+struct hash_entry {
+ struct hash_entry *prev, *next;
+ char *name;
+ char *str_val;
+ int int_val;
+};
+
+typedef struct hash_entry **hash_table;
+
+#define NAME_TABLE_HASH_SIZE 101
+#define START_COND_HASH_SIZE 101
+#define CCL_HASH_SIZE 101
-int hashfunct PROTO((char[], int));
+static struct hash_entry *ndtbl[NAME_TABLE_HASH_SIZE];
+static struct hash_entry *sctbl[START_COND_HASH_SIZE];
+static struct hash_entry *ccltab[CCL_HASH_SIZE];
-struct hash_entry *ndtbl[NAME_TABLE_HASH_SIZE];
-struct hash_entry *sctbl[START_COND_HASH_SIZE];
-struct hash_entry *ccltab[CCL_HASH_SIZE];
+/* declare functions that have forward references */
+
+static int addsym PROTO ((char[], char *, int, hash_table, int));
+static struct hash_entry *findsym PROTO ((const char *sym,
+ hash_table table,
-struct hash_entry *findsym();
+ int table_size));
+static int hashfunct PROTO ((const char *, int));
/* addsym - add symbol and definitions to symbol table
@@ -55,40 +74,37 @@ struct hash_entry *findsym();
* -1 is returned if the symbol already exists, and the change not made.
*/
-int addsym( sym, str_def, int_def, table, table_size )
-char sym[];
-char *str_def;
-int int_def;
-hash_table table;
-int table_size;
- {
- int hash_val = hashfunct( sym, table_size );
+static int addsym (sym, str_def, int_def, table, table_size)
+ char sym[];
+ char *str_def;
+ int int_def;
+ hash_table table;
+ int table_size;
+{
+ int hash_val = hashfunct (sym, table_size);
struct hash_entry *sym_entry = table[hash_val];
struct hash_entry *new_entry;
struct hash_entry *successor;
- while ( sym_entry )
- {
- if ( ! strcmp( sym, sym_entry->name ) )
- { /* entry already exists */
+ while (sym_entry) {
+ if (!strcmp (sym, sym_entry->name)) { /* entry already exists */
return -1;
- }
+ }
sym_entry = sym_entry->next;
- }
+ }
/* create new entry */
new_entry = (struct hash_entry *)
- flex_alloc( sizeof( struct hash_entry ) );
+ flex_alloc (sizeof (struct hash_entry));
- if ( new_entry == NULL )
- flexfatal( _( "symbol table memory allocation failed" ) );
+ if (new_entry == NULL)
+ flexfatal (_("symbol table memory allocation failed"));
- if ( (successor = table[hash_val]) != 0 )
- {
+ if ((successor = table[hash_val]) != 0) {
new_entry->next = successor;
successor->prev = new_entry;
- }
+ }
else
new_entry->next = NULL;
@@ -100,24 +116,22 @@ int table_size;
table[hash_val] = new_entry;
return 0;
- }
+}
/* cclinstal - save the text of a character class */
-void cclinstal( ccltxt, cclnum )
-Char ccltxt[];
-int cclnum;
- {
+void cclinstal (ccltxt, cclnum)
+ Char ccltxt[];
+ int cclnum;
+{
/* We don't bother checking the return status because we are not
* called unless the symbol is new.
*/
- Char *copy_unsigned_string();
- (void) addsym( (char *) copy_unsigned_string( ccltxt ),
- (char *) 0, cclnum,
- ccltab, CCL_HASH_SIZE );
- }
+ (void) addsym ((char *) copy_unsigned_string (ccltxt),
+ (char *) 0, cclnum, ccltab, CCL_HASH_SIZE);
+}
/* ccllookup - lookup the number associated with character class text
@@ -125,75 +139,70 @@ int cclnum;
* Returns 0 if there's no CCL associated with the text.
*/
-int ccllookup( ccltxt )
-Char ccltxt[];
- {
- return findsym( (char *) ccltxt, ccltab, CCL_HASH_SIZE )->int_val;
- }
+int ccllookup (ccltxt)
+ Char ccltxt[];
+{
+ return findsym ((char *) ccltxt, ccltab, CCL_HASH_SIZE)->int_val;
+}
/* findsym - find symbol in symbol table */
-struct hash_entry *findsym( sym, table, table_size )
-char sym[];
-hash_table table;
-int table_size;
- {
- static struct hash_entry empty_entry =
- {
+static struct hash_entry *findsym (sym, table, table_size)
+ const char *sym;
+ hash_table table;
+ int table_size;
+{
+ static struct hash_entry empty_entry = {
(struct hash_entry *) 0, (struct hash_entry *) 0,
(char *) 0, (char *) 0, 0,
- } ;
+ };
struct hash_entry *sym_entry =
- table[hashfunct( sym, table_size )];
- while ( sym_entry )
- {
- if ( ! strcmp( sym, sym_entry->name ) )
+ table[hashfunct (sym, table_size)];
+
+ while (sym_entry) {
+ if (!strcmp (sym, sym_entry->name))
return sym_entry;
sym_entry = sym_entry->next;
- }
-
- return &empty_entry;
}
+ return &empty_entry;
+}
/* hashfunct - compute the hash value for "str" and hash size "hash_size" */
-int hashfunct( str, hash_size )
-char str[];
-int hash_size;
- {
+static int hashfunct (str, hash_size)
+ const char *str;
+ int hash_size;
+{
int hashval;
int locstr;
hashval = 0;
locstr = 0;
- while ( str[locstr] )
- {
+ while (str[locstr]) {
hashval = (hashval << 1) + (unsigned char) str[locstr++];
hashval %= hash_size;
- }
+ }
return hashval;
- }
+}
/* ndinstal - install a name definition */
-void ndinstal( name, definition )
-char name[];
-Char definition[];
- {
- char *copy_string();
- Char *copy_unsigned_string();
-
- if ( addsym( copy_string( name ),
- (char *) copy_unsigned_string( definition ), 0,
- ndtbl, NAME_TABLE_HASH_SIZE ) )
- synerr( _( "name defined twice" ) );
- }
+void ndinstal (name, definition)
+ const char *name;
+ Char definition[];
+{
+
+ if (addsym (copy_string (name),
+ (char *) copy_unsigned_string (definition), 0,
+ ndtbl, NAME_TABLE_HASH_SIZE))
+ synerr (_("name defined twice"));
+}
/* ndlookup - lookup a name definition
@@ -201,27 +210,27 @@ Char definition[];
* Returns a nil pointer if the name definition does not exist.
*/
-Char *ndlookup( nd )
-char nd[];
- {
- return (Char *) findsym( nd, ndtbl, NAME_TABLE_HASH_SIZE )->str_val;
- }
+Char *ndlookup (nd)
+ const char *nd;
+{
+ return (Char *) findsym (nd, ndtbl, NAME_TABLE_HASH_SIZE)->str_val;
+}
/* scextend - increase the maximum number of start conditions */
-void scextend()
- {
+void scextend ()
+{
current_max_scs += MAX_SCS_INCREMENT;
++num_reallocs;
- scset = reallocate_integer_array( scset, current_max_scs );
- scbol = reallocate_integer_array( scbol, current_max_scs );
- scxclu = reallocate_integer_array( scxclu, current_max_scs );
- sceof = reallocate_integer_array( sceof, current_max_scs );
- scname = reallocate_char_ptr_array( scname, current_max_scs );
- }
+ scset = reallocate_integer_array (scset, current_max_scs);
+ scbol = reallocate_integer_array (scbol, current_max_scs);
+ scxclu = reallocate_integer_array (scxclu, current_max_scs);
+ sceof = reallocate_integer_array (sceof, current_max_scs);
+ scname = reallocate_char_ptr_array (scname, current_max_scs);
+}
/* scinstal - make a start condition
@@ -230,31 +239,27 @@ void scextend()
* The start condition is "exclusive" if xcluflg is true.
*/
-void scinstal( str, xcluflg )
-char str[];
-int xcluflg;
- {
- char *copy_string();
-
- /* Generate start condition definition, for use in BEGIN et al. */
- action_define( str, lastsc );
+void scinstal (str, xcluflg)
+ const char *str;
+ int xcluflg;
+{
- if ( ++lastsc >= current_max_scs )
- scextend();
+ if (++lastsc >= current_max_scs)
+ scextend ();
- scname[lastsc] = copy_string( str );
+ scname[lastsc] = copy_string (str);
- if ( addsym( scname[lastsc], (char *) 0, lastsc,
- sctbl, START_COND_HASH_SIZE ) )
- format_pinpoint_message(
- _( "start condition %s declared twice" ),
- str );
+ if (addsym (scname[lastsc], (char *) 0, lastsc,
+ sctbl, START_COND_HASH_SIZE))
+ format_pinpoint_message (_
+ ("start condition %s declared twice"),
+str);
- scset[lastsc] = mkstate( SYM_EPSILON );
- scbol[lastsc] = mkstate( SYM_EPSILON );
+ scset[lastsc] = mkstate (SYM_EPSILON);
+ scbol[lastsc] = mkstate (SYM_EPSILON);
scxclu[lastsc] = xcluflg;
sceof[lastsc] = false;
- }
+}
/* sclookup - lookup the number associated with a start condition
@@ -262,8 +267,8 @@ int xcluflg;
* Returns 0 if no such start condition.
*/
-int sclookup( str )
-char str[];
- {
- return findsym( str, sctbl, START_COND_HASH_SIZE )->int_val;
- }
+int sclookup (str)
+ const char *str;
+{
+ return findsym (str, sctbl, START_COND_HASH_SIZE)->int_val;
+}
diff --git a/usr.bin/lex/tables.c b/usr.bin/lex/tables.c
new file mode 100644
index 00000000000..d0322138494
--- /dev/null
+++ b/usr.bin/lex/tables.c
@@ -0,0 +1,504 @@
+/* $OpenBSD: tables.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* tables.c - tables serialization code
+ *
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Vern Paxson.
+ *
+ * The United States Government has rights in this work pursuant
+ * to contract no. DE-AC03-76SF00098 between the United States
+ * Department of Energy and the University of California.
+ *
+ * This file is part of flex.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
+
+#include "flexdef.h"
+#include "tables.h"
+
+/** Convert size_t to t_flag.
+ * @param n in {1,2,4}
+ * @return YYTD_DATA*.
+ */
+#define BYTES2TFLAG(n)\
+ (((n) == sizeof(flex_int8_t))\
+ ? YYTD_DATA8\
+ :(((n)== sizeof(flex_int16_t))\
+ ? YYTD_DATA16\
+ : YYTD_DATA32))
+
+/** Clear YYTD_DATA* bit flags
+ * @return the flag with the YYTD_DATA* bits cleared
+ */
+#define TFLAGS_CLRDATA(flg) ((flg) & ~(YYTD_DATA8 | YYTD_DATA16 | YYTD_DATA32))
+
+int yytbl_write32 (struct yytbl_writer *wr, flex_uint32_t v);
+int yytbl_write16 (struct yytbl_writer *wr, flex_uint16_t v);
+int yytbl_write8 (struct yytbl_writer *wr, flex_uint8_t v);
+int yytbl_writen (struct yytbl_writer *wr, void *v, flex_int32_t len);
+static flex_int32_t yytbl_data_geti (const struct yytbl_data *tbl, int i);
+/* XXX Not used
+static flex_int32_t yytbl_data_getijk (const struct yytbl_data *tbl, int i,
+ int j, int k);
+ */
+
+
+/** Initialize the table writer.
+ * @param wr an uninitialized writer
+ * @param the output file
+ * @return 0 on success
+ */
+int yytbl_writer_init (struct yytbl_writer *wr, FILE * out)
+{
+ wr->out = out;
+ wr->total_written = 0;
+ return 0;
+}
+
+/** Initialize a table header.
+ * @param th The uninitialized structure
+ * @param version_str the version string
+ * @param name the name of this table set
+ */
+int yytbl_hdr_init (struct yytbl_hdr *th, const char *version_str,
+ const char *name)
+{
+ memset (th, 0, sizeof (struct yytbl_hdr));
+
+ th->th_magic = YYTBL_MAGIC;
+ th->th_hsize = 14 + strlen (version_str) + 1 + strlen (name) + 1;
+ th->th_hsize += yypad64 (th->th_hsize);
+ th->th_ssize = 0; // Not known at this point.
+ th->th_flags = 0;
+ th->th_version = copy_string (version_str);
+ th->th_name = copy_string (name);
+ return 0;
+}
+
+/** Allocate and initialize a table data structure.
+ * @param tbl a pointer to an uninitialized table
+ * @param id the table identifier
+ * @return 0 on success
+ */
+int yytbl_data_init (struct yytbl_data *td, enum yytbl_id id)
+{
+
+ memset (td, 0, sizeof (struct yytbl_data));
+ td->td_id = id;
+ td->td_flags = YYTD_DATA32;
+ return 0;
+}
+
+/** Clean up table and data array.
+ * @param td will be destroyed
+ * @return 0 on success
+ */
+int yytbl_data_destroy (struct yytbl_data *td)
+{
+ if (td->td_data)
+ free (td->td_data);
+ td->td_data = 0;
+ free (td);
+ return 0;
+}
+
+/** Write enough padding to bring the file pointer to a 64-bit boundary. */
+static int yytbl_write_pad64 (struct yytbl_writer *wr)
+{
+ int pad, bwritten = 0;
+
+ pad = yypad64 (wr->total_written);
+ while (pad-- > 0)
+ if (yytbl_write8 (wr, 0) < 0)
+ return -1;
+ else
+ bwritten++;
+ return bwritten;
+}
+
+/** write the header.
+ * @param out the output stream
+ * @param th table header to be written
+ * @return -1 on error, or bytes written on success.
+ */
+int yytbl_hdr_fwrite (struct yytbl_writer *wr, const struct yytbl_hdr *th)
+{
+ int sz, rv;
+ int bwritten = 0;
+
+ if (yytbl_write32 (wr, th->th_magic) < 0
+ || yytbl_write32 (wr, th->th_hsize) < 0)
+ flex_die (_("th_magic|th_hsize write32 failed"));
+ bwritten += 8;
+
+ if (fgetpos (wr->out, &(wr->th_ssize_pos)) != 0)
+ flex_die (_("fgetpos failed"));
+
+ if (yytbl_write32 (wr, th->th_ssize) < 0
+ || yytbl_write16 (wr, th->th_flags) < 0)
+ flex_die (_("th_ssize|th_flags write failed"));
+ bwritten += 6;
+
+ sz = strlen (th->th_version) + 1;
+ if ((rv = yytbl_writen (wr, th->th_version, sz)) != sz)
+ flex_die (_("th_version writen failed"));
+ bwritten += rv;
+
+ sz = strlen (th->th_name) + 1;
+ if ((rv = yytbl_writen (wr, th->th_name, sz)) != sz)
+ flex_die (_("th_name writen failed"));
+ bwritten += rv;
+
+ /* add padding */
+ if ((rv = yytbl_write_pad64 (wr)) < 0)
+ flex_die (_("pad64 failed"));
+ bwritten += rv;
+
+ /* Sanity check */
+ if (bwritten != (int) th->th_hsize)
+ flex_die (_("pad64 failed"));
+
+ return bwritten;
+}
+
+
+/** Write this table.
+ * @param out the file writer
+ * @param td table data to be written
+ * @return -1 on error, or bytes written on success.
+ */
+int yytbl_data_fwrite (struct yytbl_writer *wr, struct yytbl_data *td)
+{
+ int rv;
+ flex_int32_t bwritten = 0;
+ flex_int32_t i, total_len;
+ fpos_t pos;
+
+ if ((rv = yytbl_write16 (wr, td->td_id)) < 0)
+ return -1;
+ bwritten += rv;
+
+ if ((rv = yytbl_write16 (wr, td->td_flags)) < 0)
+ return -1;
+ bwritten += rv;
+
+ if ((rv = yytbl_write32 (wr, td->td_hilen)) < 0)
+ return -1;
+ bwritten += rv;
+
+ if ((rv = yytbl_write32 (wr, td->td_lolen)) < 0)
+ return -1;
+ bwritten += rv;
+
+ total_len = yytbl_calc_total_len (td);
+ for (i = 0; i < total_len; i++) {
+ switch (YYTDFLAGS2BYTES (td->td_flags)) {
+ case sizeof (flex_int8_t):
+ rv = yytbl_write8 (wr, yytbl_data_geti (td, i));
+ break;
+ case sizeof (flex_int16_t):
+ rv = yytbl_write16 (wr, yytbl_data_geti (td, i));
+ break;
+ case sizeof (flex_int32_t):
+ rv = yytbl_write32 (wr, yytbl_data_geti (td, i));
+ break;
+ default:
+ flex_die (_("invalid td_flags detected"));
+ }
+ if (rv < 0) {
+ flex_die (_("error while writing tables"));
+ return -1;
+ }
+ bwritten += rv;
+ }
+
+ /* Sanity check */
+ if (bwritten != (int) (12 + total_len * YYTDFLAGS2BYTES (td->td_flags))) {
+ flex_die (_("insanity detected"));
+ return -1;
+ }
+
+ /* add padding */
+ if ((rv = yytbl_write_pad64 (wr)) < 0) {
+ flex_die (_("pad64 failed"));
+ return -1;
+ }
+ bwritten += rv;
+
+ /* Now go back and update the th_hsize member */
+ if (fgetpos (wr->out, &pos) != 0
+ || fsetpos (wr->out, &(wr->th_ssize_pos)) != 0
+ || yytbl_write32 (wr, wr->total_written) < 0
+ || fsetpos (wr->out, &pos)) {
+ flex_die (_("get|set|fwrite32 failed"));
+ return -1;
+ }
+ else
+ /* Don't count the int we just wrote. */
+ wr->total_written -= sizeof (flex_int32_t);
+ return bwritten;
+}
+
+/** Write n bytes.
+ * @param wr the table writer
+ * @param v data to be written
+ * @param len number of bytes
+ * @return -1 on error. number of bytes written on success.
+ */
+int yytbl_writen (struct yytbl_writer *wr, void *v, flex_int32_t len)
+{
+ int rv;
+
+ rv = fwrite (v, 1, len, wr->out);
+ if (rv != len)
+ return -1;
+ wr->total_written += len;
+ return len;
+}
+
+/** Write four bytes in network byte order
+ * @param wr the table writer
+ * @param v a dword in host byte order
+ * @return -1 on error. number of bytes written on success.
+ */
+int yytbl_write32 (struct yytbl_writer *wr, flex_uint32_t v)
+{
+ flex_uint32_t vnet;
+ size_t bytes, rv;
+
+ vnet = htonl (v);
+ bytes = sizeof (flex_uint32_t);
+ rv = fwrite (&vnet, bytes, 1, wr->out);
+ if (rv != 1)
+ return -1;
+ wr->total_written += bytes;
+ return bytes;
+}
+
+/** Write two bytes in network byte order.
+ * @param wr the table writer
+ * @param v a word in host byte order
+ * @return -1 on error. number of bytes written on success.
+ */
+int yytbl_write16 (struct yytbl_writer *wr, flex_uint16_t v)
+{
+ flex_uint16_t vnet;
+ size_t bytes, rv;
+
+ vnet = htons (v);
+ bytes = sizeof (flex_uint16_t);
+ rv = fwrite (&vnet, bytes, 1, wr->out);
+ if (rv != 1)
+ return -1;
+ wr->total_written += bytes;
+ return bytes;
+}
+
+/** Write a byte.
+ * @param wr the table writer
+ * @param v the value to be written
+ * @return -1 on error. number of bytes written on success.
+ */
+int yytbl_write8 (struct yytbl_writer *wr, flex_uint8_t v)
+{
+ size_t bytes, rv;
+
+ bytes = sizeof (flex_uint8_t);
+ rv = fwrite (&v, bytes, 1, wr->out);
+ if (rv != 1)
+ return -1;
+ wr->total_written += bytes;
+ return bytes;
+}
+
+
+/* XXX Not Used */
+#if 0
+/** Extract data element [i][j] from array data tables.
+ * @param tbl data table
+ * @param i index into higher dimension array. i should be zero for one-dimensional arrays.
+ * @param j index into lower dimension array.
+ * @param k index into struct, must be 0 or 1. Only valid for YYTD_ID_TRANSITION table
+ * @return data[i][j + k]
+ */
+static flex_int32_t yytbl_data_getijk (const struct yytbl_data *tbl, int i,
+ int j, int k)
+{
+ flex_int32_t lo;
+
+ k %= 2;
+ lo = tbl->td_lolen;
+
+ switch (YYTDFLAGS2BYTES (tbl->td_flags)) {
+ case sizeof (flex_int8_t):
+ return ((flex_int8_t *) (tbl->td_data))[(i * lo + j) * (k + 1) +
+ k];
+ case sizeof (flex_int16_t):
+ return ((flex_int16_t *) (tbl->td_data))[(i * lo + j) * (k +
+ 1) +
+ k];
+ case sizeof (flex_int32_t):
+ return ((flex_int32_t *) (tbl->td_data))[(i * lo + j) * (k +
+ 1) +
+ k];
+ default:
+ flex_die (_("invalid td_flags detected"));
+ break;
+ }
+
+ return 0;
+}
+#endif /* Not used */
+
+/** Extract data element [i] from array data tables treated as a single flat array of integers.
+ * Be careful for 2-dimensional arrays or for YYTD_ID_TRANSITION, which is an array
+ * of structs.
+ * @param tbl data table
+ * @param i index into array.
+ * @return data[i]
+ */
+static flex_int32_t yytbl_data_geti (const struct yytbl_data *tbl, int i)
+{
+
+ switch (YYTDFLAGS2BYTES (tbl->td_flags)) {
+ case sizeof (flex_int8_t):
+ return ((flex_int8_t *) (tbl->td_data))[i];
+ case sizeof (flex_int16_t):
+ return ((flex_int16_t *) (tbl->td_data))[i];
+ case sizeof (flex_int32_t):
+ return ((flex_int32_t *) (tbl->td_data))[i];
+ default:
+ flex_die (_("invalid td_flags detected"));
+ break;
+ }
+ return 0;
+}
+
+/** Set data element [i] in array data tables treated as a single flat array of integers.
+ * Be careful for 2-dimensional arrays or for YYTD_ID_TRANSITION, which is an array
+ * of structs.
+ * @param tbl data table
+ * @param i index into array.
+ * @param newval new value for data[i]
+ */
+static void yytbl_data_seti (const struct yytbl_data *tbl, int i,
+ flex_int32_t newval)
+{
+
+ switch (YYTDFLAGS2BYTES (tbl->td_flags)) {
+ case sizeof (flex_int8_t):
+ ((flex_int8_t *) (tbl->td_data))[i] = (flex_int8_t) newval;
+ break;
+ case sizeof (flex_int16_t):
+ ((flex_int16_t *) (tbl->td_data))[i] = (flex_int16_t) newval;
+ break;
+ case sizeof (flex_int32_t):
+ ((flex_int32_t *) (tbl->td_data))[i] = (flex_int32_t) newval;
+ break;
+ default:
+ flex_die (_("invalid td_flags detected"));
+ break;
+ }
+}
+
+/** Calculate the number of bytes needed to hold the largest
+ * absolute value in this data array.
+ * @param tbl the data table
+ * @return sizeof(n) where n in {flex_int8_t, flex_int16_t, flex_int32_t}
+ */
+static size_t min_int_size (struct yytbl_data *tbl)
+{
+ flex_uint32_t i, total_len;
+ flex_int32_t max = 0;
+
+ total_len = yytbl_calc_total_len (tbl);
+
+ for (i = 0; i < total_len; i++) {
+ flex_int32_t n;
+
+ n = abs (yytbl_data_geti (tbl, i));
+
+ if (n > max)
+ max = n;
+ }
+
+ if (max <= INT8_MAX)
+ return sizeof (flex_int8_t);
+ else if (max <= INT16_MAX)
+ return sizeof (flex_int16_t);
+ else
+ return sizeof (flex_int32_t);
+}
+
+/** Transform data to smallest possible of (int32, int16, int8).
+ * For example, we may have generated an int32 array due to user options
+ * (e.g., %option align), but if the maximum value in that array
+ * is 80 (for example), then we can serialize it with only 1 byte per int.
+ * This is NOT the same as compressed DFA tables. We're just trying
+ * to save storage space here.
+ *
+ * @param tbl the table to be compressed
+ */
+void yytbl_data_compress (struct yytbl_data *tbl)
+{
+ flex_int32_t i, newsz, total_len;
+ struct yytbl_data newtbl;
+
+ yytbl_data_init (&newtbl, tbl->td_id);
+ newtbl.td_hilen = tbl->td_hilen;
+ newtbl.td_lolen = tbl->td_lolen;
+ newtbl.td_flags = tbl->td_flags;
+
+ newsz = min_int_size (tbl);
+
+
+ if (newsz == (int) YYTDFLAGS2BYTES (tbl->td_flags))
+ /* No change in this table needed. */
+ return;
+
+ if (newsz > (int) YYTDFLAGS2BYTES (tbl->td_flags)) {
+ flex_die (_("detected negative compression"));
+ return;
+ }
+
+ total_len = yytbl_calc_total_len (tbl);
+ newtbl.td_data = calloc (total_len, newsz);
+ newtbl.td_flags =
+ TFLAGS_CLRDATA (newtbl.td_flags) | BYTES2TFLAG (newsz);
+
+ for (i = 0; i < total_len; i++) {
+ flex_int32_t g;
+
+ g = yytbl_data_geti (tbl, i);
+ yytbl_data_seti (&newtbl, i, g);
+ }
+
+
+ /* Now copy over the old table */
+ free (tbl->td_data);
+ *tbl = newtbl;
+}
+
+/* vim:set noexpandtab cindent tabstop=8 softtabstop=0 shiftwidth=8 textwidth=0: */
diff --git a/usr.bin/lex/tables.h b/usr.bin/lex/tables.h
new file mode 100644
index 00000000000..b398b8bafcd
--- /dev/null
+++ b/usr.bin/lex/tables.h
@@ -0,0 +1,87 @@
+/* $OpenBSD: tables.h,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+/* tables.h - tables serialization code
+ *
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Vern Paxson.
+ *
+ * The United States Government has rights in this work pursuant
+ * to contract no. DE-AC03-76SF00098 between the United States
+ * Department of Energy and the University of California.
+ *
+ * This file is part of flex.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
+#ifndef TABLES_H
+#define TABLES_H
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+extern "C" {
+/* *INDENT-ON* */
+#endif
+
+/* Tables serialization API declarations. */
+#include "tables_shared.h"
+struct yytbl_writer {
+ FILE *out;
+ flex_uint32_t total_written;
+ /**< bytes written so far */
+ fpos_t th_ssize_pos;
+ /**< position of th_ssize */
+};
+
+/* These are used by main.c, gen.c, etc.
+ * tablesext - if true, create external tables
+ * tablesfilename - filename for external tables
+ * tablesname - name that goes in serialized data, e.g., "yytables"
+ * tableswr - writer for external tables
+ * tablesverify - true if tables-verify option specified
+ * gentables - true if we should spit out the normal C tables
+ */
+extern bool tablesext, tablesverify,gentables;
+extern char *tablesfilename, *tablesname;
+extern struct yytbl_writer tableswr;
+
+int yytbl_writer_init (struct yytbl_writer *, FILE *);
+int yytbl_hdr_init (struct yytbl_hdr *th, const char *version_str,
+ const char *name);
+int yytbl_data_init (struct yytbl_data *tbl, enum yytbl_id id);
+int yytbl_data_destroy (struct yytbl_data *td);
+int yytbl_hdr_fwrite (struct yytbl_writer *wr,
+ const struct yytbl_hdr *th);
+int yytbl_data_fwrite (struct yytbl_writer *wr, struct yytbl_data *td);
+void yytbl_data_compress (struct yytbl_data *tbl);
+struct yytbl_data *mkftbl (void);
+
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+}
+/* *INDENT-ON* */
+#endif
+#endif
+
+/* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
diff --git a/usr.bin/lex/tables_shared.c b/usr.bin/lex/tables_shared.c
new file mode 100644
index 00000000000..2f3ea46cdf8
--- /dev/null
+++ b/usr.bin/lex/tables_shared.c
@@ -0,0 +1,72 @@
+/* $OpenBSD: tables_shared.c,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+#ifdef FLEX_SCANNER
+/*
+dnl tables_shared.c - tables serialization code
+dnl
+dnl Copyright (c) 1990 The Regents of the University of California.
+dnl All rights reserved.
+dnl
+dnl This code is derived from software contributed to Berkeley by
+dnl Vern Paxson.
+dnl
+dnl The United States Government has rights in this work pursuant
+dnl to contract no. DE-AC03-76SF00098 between the United States
+dnl Department of Energy and the University of California.
+dnl
+dnl This file is part of flex.
+dnl
+dnl Redistribution and use in source and binary forms, with or without
+dnl modification, are permitted provided that the following conditions
+dnl are met:
+dnl
+dnl 1. Redistributions of source code must retain the above copyright
+dnl notice, this list of conditions and the following disclaimer.
+dnl 2. Redistributions in binary form must reproduce the above copyright
+dnl notice, this list of conditions and the following disclaimer in the
+dnl documentation and/or other materials provided with the distribution.
+dnl
+dnl Neither the name of the University nor the names of its contributors
+dnl may be used to endorse or promote products derived from this software
+dnl without specific prior written permission.
+dnl
+dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+dnl IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+dnl PURPOSE.
+dnl
+*/
+
+/* This file is meant to be included in both the skeleton and the actual
+ * flex code (hence the name "_shared").
+ */
+#ifndef yyskel_static
+#define yyskel_static static
+#endif
+#else
+#include "flexdef.h"
+#include "tables.h"
+#ifndef yyskel_static
+#define yyskel_static
+#endif
+#endif
+
+
+/** Get the number of integers in this table. This is NOT the
+ * same thing as the number of elements.
+ * @param td the table
+ * @return the number of integers in the table
+ */
+yyskel_static flex_int32_t yytbl_calc_total_len (const struct yytbl_data *tbl)
+{
+ flex_int32_t n;
+
+ /* total number of ints */
+ n = tbl->td_lolen;
+ if (tbl->td_hilen > 0)
+ n *= tbl->td_hilen;
+
+ if (tbl->td_id == YYTD_ID_TRANSITION)
+ n *= 2;
+ return n;
+}
diff --git a/usr.bin/lex/tables_shared.h b/usr.bin/lex/tables_shared.h
new file mode 100644
index 00000000000..216fb470572
--- /dev/null
+++ b/usr.bin/lex/tables_shared.h
@@ -0,0 +1,146 @@
+/* $OpenBSD: tables_shared.h,v 1.1 2015/11/19 19:43:40 tedu Exp $ */
+
+#ifdef FLEX_SCANNER
+/*
+dnl tables_shared.h - tables serialization header
+dnl
+dnl Copyright (c) 1990 The Regents of the University of California.
+dnl All rights reserved.
+dnl
+dnl This code is derived from software contributed to Berkeley by
+dnl Vern Paxson.
+dnl
+dnl The United States Government has rights in this work pursuant
+dnl to contract no. DE-AC03-76SF00098 between the United States
+dnl Department of Energy and the University of California.
+dnl
+dnl This file is part of flex.
+dnl
+dnl Redistribution and use in source and binary forms, with or without
+dnl modification, are permitted provided that the following conditions
+dnl are met:
+dnl
+dnl 1. Redistributions of source code must retain the above copyright
+dnl notice, this list of conditions and the following disclaimer.
+dnl 2. Redistributions in binary form must reproduce the above copyright
+dnl notice, this list of conditions and the following disclaimer in the
+dnl documentation and/or other materials provided with the distribution.
+dnl
+dnl Neither the name of the University nor the names of its contributors
+dnl may be used to endorse or promote products derived from this software
+dnl without specific prior written permission.
+dnl
+dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+dnl IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+dnl PURPOSE.
+
+dnl
+dnl This file is meant to be included in both the skeleton and the actual
+dnl flex code (hence the name "_shared").
+*/
+#ifndef yyskel_static
+#define yyskel_static static
+#endif
+#else
+#ifndef yyskel_static
+#define yyskel_static
+#endif
+#endif
+
+/* Structures and prototypes for serializing flex tables. The
+ * binary format is documented in the manual.
+ *
+ * Design considerations:
+ *
+ * - The format allows many tables per file.
+ * - The tables can be streamed.
+ * - All data is stored in network byte order.
+ * - We do not hinder future unicode support.
+ * - We can lookup tables by name.
+ */
+
+/** Magic number for serialized format. */
+#ifndef YYTBL_MAGIC
+#define YYTBL_MAGIC 0xF13C57B1
+#endif
+
+/** Calculate (0-7) = number bytes needed to pad n to next 64-bit boundary. */
+#ifndef yypad64
+#define yypad64(n) ((8-((n)%8))%8)
+#endif
+
+
+#ifndef YYTABLES_TYPES
+#define YYTABLES_TYPES
+/** Possible values for td_id field. Each one corresponds to a
+ * scanner table of the same name.
+ */
+enum yytbl_id {
+ YYTD_ID_ACCEPT = 0x01, /**< 1-dim ints */
+ YYTD_ID_BASE = 0x02, /**< 1-dim ints */
+ YYTD_ID_CHK = 0x03, /**< 1-dim ints */
+ YYTD_ID_DEF = 0x04, /**< 1-dim ints */
+ YYTD_ID_EC = 0x05, /**< 1-dim ints */
+ YYTD_ID_META = 0x06, /**< 1-dim ints */
+ YYTD_ID_NUL_TRANS = 0x07, /**< 1-dim ints, maybe indices */
+ YYTD_ID_NXT = 0x08, /**< may be 2 dimensional ints */
+ YYTD_ID_RULE_CAN_MATCH_EOL = 0x09, /**< 1-dim ints */
+ YYTD_ID_START_STATE_LIST = 0x0A, /**< 1-dim indices into trans tbl */
+ YYTD_ID_TRANSITION = 0x0B, /**< structs */
+ YYTD_ID_ACCLIST = 0x0C /**< 1-dim ints */
+};
+
+/** bit flags for t_flags field of struct yytbl_data */
+enum yytbl_flags {
+ /* These first three are mutually exclusive */
+ YYTD_DATA8 = 0x01, /**< data is an array of type flex_int8_t */
+ YYTD_DATA16 = 0x02, /**< data is an array of type flex_int16_t */
+ YYTD_DATA32 = 0x04, /**< data is an array of type flex_int32_t */
+
+ /* These two are mutually exclusive. */
+ YYTD_PTRANS = 0x08, /**< data is a list of indexes of entries
+ into the expanded `yy_transition'
+ array. See notes in manual. */
+ YYTD_STRUCT = 0x10 /**< data consists of yy_trans_info structs */
+};
+
+/* The serialized tables header. */
+struct yytbl_hdr {
+ flex_uint32_t th_magic; /**< Must be 0xF13C57B1 (comes from "Flex Table") */
+ flex_uint32_t th_hsize; /**< Size of this header in bytes. */
+ flex_uint32_t th_ssize; /**< Size of this dataset, in bytes, including header. */
+ flex_uint16_t th_flags; /**< Currently unused, must be 0 */
+ char *th_version; /**< Flex version string. NUL terminated. */
+ char *th_name; /**< The name of this table set. NUL terminated. */
+};
+
+/** A single serialized table */
+struct yytbl_data {
+ flex_uint16_t td_id; /**< enum yytbl_id table identifier */
+ flex_uint16_t td_flags; /**< how to interpret this data */
+ flex_uint32_t td_hilen; /**< num elements in highest dimension array */
+ flex_uint32_t td_lolen; /**< num elements in lowest dimension array */
+ void *td_data; /**< table data */
+};
+#endif
+
+/** Extract corresponding data size_t from td_flags */
+#ifndef YYTDFLAGS2BYTES
+#define YYTDFLAGS2BYTES(td_flags)\
+ (((td_flags) & YYTD_DATA8)\
+ ? sizeof(flex_int8_t)\
+ :(((td_flags) & YYTD_DATA16)\
+ ? sizeof(flex_int16_t)\
+ :sizeof(flex_int32_t)))
+#endif
+
+#ifdef FLEX_SCANNER
+%not-for-header
+#endif
+yyskel_static flex_int32_t yytbl_calc_total_len (const struct yytbl_data *tbl);
+#ifdef FLEX_SCANNER
+%ok-for-header
+#endif
+
+/* vim:set noexpandtab cindent tabstop=8 softtabstop=0 shiftwidth=8 textwidth=0: */
diff --git a/usr.bin/lex/tblcmp.c b/usr.bin/lex/tblcmp.c
index f206019a256..7d5e60503ac 100644
--- a/usr.bin/lex/tblcmp.c
+++ b/usr.bin/lex/tblcmp.c
@@ -1,50 +1,48 @@
-/* $OpenBSD: tblcmp.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* $OpenBSD: tblcmp.c,v 1.7 2015/11/19 19:43:40 tedu Exp $ */
/* tblcmp - table compression routines */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/tblcmp.c,v 1.6 2003/06/04 17:34:44 millert Exp $ */
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include "flexdef.h"
/* declarations for functions that have forward references */
-void mkentry PROTO((int*, int, int, int, int));
-void mkprot PROTO((int[], int, int));
-void mktemplate PROTO((int[], int, int));
-void mv2front PROTO((int));
-int tbldiff PROTO((int[], int, int[]));
+void mkentry PROTO ((int *, int, int, int, int));
+void mkprot PROTO ((int[], int, int));
+void mktemplate PROTO ((int[], int, int));
+void mv2front PROTO ((int));
+int tbldiff PROTO ((int[], int, int[]));
/* bldtbl - build table entries for dfa state
@@ -82,11 +80,11 @@ int tbldiff PROTO((int[], int, int[]));
* cost only one difference.
*/
-void bldtbl( state, statenum, totaltrans, comstate, comfreq )
-int state[], statenum, totaltrans, comstate, comfreq;
- {
- int extptr, extrct[2][CSIZE + 1];
- int mindiff, minprot, i, d;
+void bldtbl (state, statenum, totaltrans, comstate, comfreq)
+ int state[], statenum, totaltrans, comstate, comfreq;
+{
+ int extptr, extrct[2][CSIZE + 1];
+ int mindiff, minprot, i, d;
/* If extptr is 0 then the first array of extrct holds the result
* of the "best difference" to date, which is those transitions
@@ -104,35 +102,32 @@ int state[], statenum, totaltrans, comstate, comfreq;
* compact its tables.
*/
- if ( (totaltrans * 100) < (numecs * PROTO_SIZE_PERCENTAGE) )
- mkentry( state, numecs, statenum, JAMSTATE, totaltrans );
+ if ((totaltrans * 100) < (numecs * PROTO_SIZE_PERCENTAGE))
+ mkentry (state, numecs, statenum, JAMSTATE, totaltrans);
- else
- {
+ else {
/* "checkcom" is true if we should only check "state" against
* protos which have the same "comstate" value.
*/
- int checkcom =
+ int checkcom =
+
comfreq * 100 > totaltrans * CHECK_COM_PERCENTAGE;
minprot = firstprot;
mindiff = totaltrans;
- if ( checkcom )
- {
+ if (checkcom) {
/* Find first proto which has the same "comstate". */
- for ( i = firstprot; i != NIL; i = protnext[i] )
- if ( protcomst[i] == comstate )
- {
+ for (i = firstprot; i != NIL; i = protnext[i])
+ if (protcomst[i] == comstate) {
minprot = i;
- mindiff = tbldiff( state, minprot,
- extrct[extptr] );
+ mindiff = tbldiff (state, minprot,
+ extrct[extptr]);
break;
- }
- }
+ }
+ }
- else
- {
+ else {
/* Since we've decided that the most common destination
* out of "state" does not occur with a high enough
* frequency, we set the "comstate" to zero, assuring
@@ -141,13 +136,12 @@ int state[], statenum, totaltrans, comstate, comfreq;
*/
comstate = 0;
- if ( firstprot != NIL )
- {
+ if (firstprot != NIL) {
minprot = firstprot;
- mindiff = tbldiff( state, minprot,
- extrct[extptr] );
- }
+ mindiff = tbldiff (state, minprot,
+ extrct[extptr]);
}
+ }
/* We now have the first interesting proto in "minprot". If
* it matches within the tolerances set for the first proto,
@@ -155,58 +149,55 @@ int state[], statenum, totaltrans, comstate, comfreq;
* to see if we have any other reasonable matches.
*/
- if ( mindiff * 100 > totaltrans * FIRST_MATCH_DIFF_PERCENTAGE )
- {
+ if (mindiff * 100 >
+ totaltrans * FIRST_MATCH_DIFF_PERCENTAGE) {
/* Not a good enough match. Scan the rest of the
* protos.
*/
- for ( i = minprot; i != NIL; i = protnext[i] )
- {
- d = tbldiff( state, i, extrct[1 - extptr] );
- if ( d < mindiff )
- {
+ for (i = minprot; i != NIL; i = protnext[i]) {
+ d = tbldiff (state, i, extrct[1 - extptr]);
+ if (d < mindiff) {
extptr = 1 - extptr;
mindiff = d;
minprot = i;
- }
}
}
+ }
/* Check if the proto we've decided on as our best bet is close
* enough to the state we want to match to be usable.
*/
- if ( mindiff * 100 > totaltrans * ACCEPTABLE_DIFF_PERCENTAGE )
- {
+ if (mindiff * 100 >
+ totaltrans * ACCEPTABLE_DIFF_PERCENTAGE) {
/* No good. If the state is homogeneous enough,
* we make a template out of it. Otherwise, we
* make a proto.
*/
- if ( comfreq * 100 >=
- totaltrans * TEMPLATE_SAME_PERCENTAGE )
- mktemplate( state, statenum, comstate );
+ if (comfreq * 100 >=
+ totaltrans * TEMPLATE_SAME_PERCENTAGE)
+ mktemplate (state, statenum,
+ comstate);
- else
- {
- mkprot( state, statenum, comstate );
- mkentry( state, numecs, statenum,
- JAMSTATE, totaltrans );
- }
+ else {
+ mkprot (state, statenum, comstate);
+ mkentry (state, numecs, statenum,
+ JAMSTATE, totaltrans);
}
+ }
- else
- { /* use the proto */
- mkentry( extrct[extptr], numecs, statenum,
- prottbl[minprot], mindiff );
+ else { /* use the proto */
+ mkentry (extrct[extptr], numecs, statenum,
+ prottbl[minprot], mindiff);
/* If this state was sufficiently different from the
* proto we built it from, make it, too, a proto.
*/
- if ( mindiff * 100 >=
- totaltrans * NEW_PROTO_DIFF_PERCENTAGE )
- mkprot( state, statenum, comstate );
+ if (mindiff * 100 >=
+ totaltrans * NEW_PROTO_DIFF_PERCENTAGE)
+ mkprot (state, statenum, comstate);
/* Since mkprot added a new proto to the proto queue,
* it's possible that "minprot" is no longer on the
@@ -218,10 +209,10 @@ int state[], statenum, totaltrans, comstate, comfreq;
* following call will do nothing.
*/
- mv2front( minprot );
- }
+ mv2front (minprot);
}
}
+}
/* cmptmps - compress template table entries
@@ -232,62 +223,56 @@ int state[], statenum, totaltrans, comstate, comfreq;
* classes.
*/
-void cmptmps()
- {
- int tmpstorage[CSIZE + 1];
+void cmptmps ()
+{
+ int tmpstorage[CSIZE + 1];
int *tmp = tmpstorage, i, j;
- int totaltrans, trans;
+ int totaltrans, trans;
peakpairs = numtemps * numecs + tblend;
- if ( usemecs )
- {
+ if (usemecs) {
/* Create equivalence classes based on data gathered on
* template transitions.
*/
- nummecs = cre8ecs( tecfwd, tecbck, numecs );
- }
+ nummecs = cre8ecs (tecfwd, tecbck, numecs);
+ }
else
nummecs = numecs;
- while ( lastdfa + numtemps + 1 >= current_max_dfas )
- increase_max_dfas();
+ while (lastdfa + numtemps + 1 >= current_max_dfas)
+ increase_max_dfas ();
/* Loop through each template. */
- for ( i = 1; i <= numtemps; ++i )
- {
+ for (i = 1; i <= numtemps; ++i) {
/* Number of non-jam transitions out of this template. */
totaltrans = 0;
- for ( j = 1; j <= numecs; ++j )
- {
+ for (j = 1; j <= numecs; ++j) {
trans = tnxt[numecs * i + j];
- if ( usemecs )
- {
+ if (usemecs) {
/* The absolute value of tecbck is the
* meta-equivalence class of a given
* equivalence class, as set up by cre8ecs().
*/
- if ( tecbck[j] > 0 )
- {
+ if (tecbck[j] > 0) {
tmp[tecbck[j]] = trans;
- if ( trans > 0 )
+ if (trans > 0)
++totaltrans;
- }
}
+ }
- else
- {
+ else {
tmp[j] = trans;
- if ( trans > 0 )
+ if (trans > 0)
++totaltrans;
- }
}
+ }
/* It is assumed (in a rather subtle way) in the skeleton
* that if we're using meta-equivalence classes, the def[]
@@ -297,28 +282,29 @@ void cmptmps()
*/
/* Leave room for the jam-state after the last real state. */
- mkentry( tmp, nummecs, lastdfa + i + 1, JAMSTATE, totaltrans );
- }
+ mkentry (tmp, nummecs, lastdfa + i + 1, JAMSTATE,
+ totaltrans);
}
+}
/* expand_nxt_chk - expand the next check arrays */
-void expand_nxt_chk()
- {
+void expand_nxt_chk ()
+{
int old_max = current_max_xpairs;
current_max_xpairs += MAX_XPAIRS_INCREMENT;
++num_reallocs;
- nxt = reallocate_integer_array( nxt, current_max_xpairs );
- chk = reallocate_integer_array( chk, current_max_xpairs );
+ nxt = reallocate_integer_array (nxt, current_max_xpairs);
+ chk = reallocate_integer_array (chk, current_max_xpairs);
- zero_out( (char *) (chk + old_max),
- (size_t) (MAX_XPAIRS_INCREMENT * sizeof( int )) );
- }
+ zero_out ((char *) (chk + old_max),
+ (size_t) (MAX_XPAIRS_INCREMENT * sizeof (int)));
+}
/* find_table_space - finds a space in the table for a state to be placed
@@ -340,9 +326,9 @@ void expand_nxt_chk()
* and an action number will be added in [-1].
*/
-int find_table_space( state, numtrans )
-int *state, numtrans;
- {
+int find_table_space (state, numtrans)
+ int *state, numtrans;
+{
/* Firstfree is the position of the first possible occurrence of two
* consecutive unused records in the chk and nxt arrays.
*/
@@ -353,19 +339,18 @@ int *state, numtrans;
/* If there are too many out-transitions, put the state at the end of
* nxt and chk.
*/
- if ( numtrans > MAX_XTIONS_FULL_INTERIOR_FIT )
- {
+ if (numtrans > MAX_XTIONS_FULL_INTERIOR_FIT) {
/* If table is empty, return the first available spot in
* chk/nxt, which should be 1.
*/
- if ( tblend < 2 )
+ if (tblend < 2)
return 1;
/* Start searching for table space near the end of
* chk/nxt arrays.
*/
i = tblend - numecs;
- }
+ }
else
/* Start searching for table space from the beginning
@@ -374,21 +359,18 @@ int *state, numtrans;
*/
i = firstfree;
- while ( 1 ) /* loops until a space is found */
- {
- while ( i + numecs >= current_max_xpairs )
- expand_nxt_chk();
+ while (1) { /* loops until a space is found */
+ while (i + numecs >= current_max_xpairs)
+ expand_nxt_chk ();
/* Loops until space for end-of-buffer and action number
* are found.
*/
- while ( 1 )
- {
+ while (1) {
/* Check for action number space. */
- if ( chk[i - 1] == 0 )
- {
+ if (chk[i - 1] == 0) {
/* Check for end-of-buffer space. */
- if ( chk[i] == 0 )
+ if (chk[i] == 0)
break;
else
@@ -398,19 +380,19 @@ int *state, numtrans;
* so we skip a space.
*/
i += 2;
- }
+ }
else
++i;
- while ( i + numecs >= current_max_xpairs )
- expand_nxt_chk();
- }
+ while (i + numecs >= current_max_xpairs)
+ expand_nxt_chk ();
+ }
/* If we started search from the beginning, store the new
* firstfree for the next call of find_table_space().
*/
- if ( numtrans <= MAX_XTIONS_FULL_INTERIOR_FIT )
+ if (numtrans <= MAX_XTIONS_FULL_INTERIOR_FIT)
firstfree = i + 1;
/* Check to see if all elements in chk (and therefore nxt)
@@ -420,18 +402,18 @@ int *state, numtrans;
state_ptr = &state[1];
ptr_to_last_entry_in_state = &chk[i + numecs + 1];
- for ( chk_ptr = &chk[i + 1];
- chk_ptr != ptr_to_last_entry_in_state; ++chk_ptr )
- if ( *(state_ptr++) != 0 && *chk_ptr != 0 )
+ for (chk_ptr = &chk[i + 1];
+ chk_ptr != ptr_to_last_entry_in_state; ++chk_ptr)
+ if (*(state_ptr++) != 0 && *chk_ptr != 0)
break;
- if ( chk_ptr == ptr_to_last_entry_in_state )
+ if (chk_ptr == ptr_to_last_entry_in_state)
return i;
else
- ++i;
- }
+ ++i;
}
+}
/* inittbl - initialize transition tables
@@ -439,18 +421,19 @@ int *state, numtrans;
* Initializes "firstfree" to be one beyond the end of the table. Initializes
* all "chk" entries to be zero.
*/
-void inittbl()
- {
+void inittbl ()
+{
int i;
- zero_out( (char *) chk, (size_t) (current_max_xpairs * sizeof( int )) );
+ zero_out ((char *) chk,
+
+ (size_t) (current_max_xpairs * sizeof (int)));
tblend = 0;
firstfree = tblend + 1;
numtemps = 0;
- if ( usemecs )
- {
+ if (usemecs) {
/* Set up doubly-linked meta-equivalence classes; these
* are sets of equivalence classes which all have identical
* transitions out of TEMPLATES.
@@ -458,39 +441,37 @@ void inittbl()
tecbck[1] = NIL;
- for ( i = 2; i <= numecs; ++i )
- {
+ for (i = 2; i <= numecs; ++i) {
tecbck[i] = i - 1;
tecfwd[i - 1] = i;
- }
+ }
tecfwd[numecs] = NIL;
- }
}
+}
/* mkdeftbl - make the default, "jam" table entries */
-void mkdeftbl()
- {
- int i;
+void mkdeftbl ()
+{
+ int i;
jamstate = lastdfa + 1;
- ++tblend; /* room for transition on end-of-buffer character */
+ ++tblend; /* room for transition on end-of-buffer character */
- while ( tblend + numecs >= current_max_xpairs )
- expand_nxt_chk();
+ while (tblend + numecs >= current_max_xpairs)
+ expand_nxt_chk ();
/* Add in default end-of-buffer transition. */
nxt[tblend] = end_of_buffer_state;
chk[tblend] = jamstate;
- for ( i = 1; i <= numecs; ++i )
- {
+ for (i = 1; i <= numecs; ++i) {
nxt[tblend + i] = 0;
chk[tblend + i] = jamstate;
- }
+ }
jambase = tblend;
@@ -499,7 +480,7 @@ void mkdeftbl()
tblend += numecs;
++numtemps;
- }
+}
/* mkentry - create base/def and nxt/chk entries for transition array
@@ -521,46 +502,42 @@ void mkdeftbl()
* state array.
*/
-void mkentry( state, numchars, statenum, deflink, totaltrans )
-int *state;
-int numchars, statenum, deflink, totaltrans;
- {
+void mkentry (state, numchars, statenum, deflink, totaltrans)
+ int *state;
+ int numchars, statenum, deflink, totaltrans;
+{
int minec, maxec, i, baseaddr;
- int tblbase, tbllast;
+ int tblbase, tbllast;
- if ( totaltrans == 0 )
- { /* there are no out-transitions */
- if ( deflink == JAMSTATE )
+ if (totaltrans == 0) { /* there are no out-transitions */
+ if (deflink == JAMSTATE)
base[statenum] = JAMSTATE;
else
base[statenum] = 0;
def[statenum] = deflink;
return;
- }
+ }
- for ( minec = 1; minec <= numchars; ++minec )
- {
- if ( state[minec] != SAME_TRANS )
- if ( state[minec] != 0 || deflink != JAMSTATE )
+ for (minec = 1; minec <= numchars; ++minec) {
+ if (state[minec] != SAME_TRANS)
+ if (state[minec] != 0 || deflink != JAMSTATE)
break;
- }
+ }
- if ( totaltrans == 1 )
- {
+ if (totaltrans == 1) {
/* There's only one out-transition. Save it for later to fill
* in holes in the tables.
*/
- stack1( statenum, minec, state[minec], deflink );
+ stack1 (statenum, minec, state[minec], deflink);
return;
- }
+ }
- for ( maxec = numchars; maxec > 0; --maxec )
- {
- if ( state[maxec] != SAME_TRANS )
- if ( state[maxec] != 0 || deflink != JAMSTATE )
+ for (maxec = numchars; maxec > 0; --maxec) {
+ if (state[maxec] != SAME_TRANS)
+ if (state[maxec] != 0 || deflink != JAMSTATE)
break;
- }
+ }
/* Whether we try to fit the state table in the middle of the table
* entries we have already generated, or if we just take the state
@@ -572,131 +549,121 @@ int numchars, statenum, deflink, totaltrans;
*/
/* Find the first transition of state that we need to worry about. */
- if ( totaltrans * 100 <= numchars * INTERIOR_FIT_PERCENTAGE )
- {
+ if (totaltrans * 100 <= numchars * INTERIOR_FIT_PERCENTAGE) {
/* Attempt to squeeze it into the middle of the tables. */
baseaddr = firstfree;
- while ( baseaddr < minec )
- {
+ while (baseaddr < minec) {
/* Using baseaddr would result in a negative base
* address below; find the next free slot.
*/
- for ( ++baseaddr; chk[baseaddr] != 0; ++baseaddr )
- ;
- }
+ for (++baseaddr; chk[baseaddr] != 0; ++baseaddr) ;
+ }
- while ( baseaddr + maxec - minec + 1 >= current_max_xpairs )
- expand_nxt_chk();
+ while (baseaddr + maxec - minec + 1 >= current_max_xpairs)
+ expand_nxt_chk ();
- for ( i = minec; i <= maxec; ++i )
- if ( state[i] != SAME_TRANS &&
- (state[i] != 0 || deflink != JAMSTATE) &&
- chk[baseaddr + i - minec] != 0 )
- { /* baseaddr unsuitable - find another */
- for ( ++baseaddr;
- baseaddr < current_max_xpairs &&
- chk[baseaddr] != 0; ++baseaddr )
- ;
+ for (i = minec; i <= maxec; ++i)
+ if (state[i] != SAME_TRANS &&
+ (state[i] != 0 || deflink != JAMSTATE) &&
+ chk[baseaddr + i - minec] != 0) { /* baseaddr unsuitable - find another */
+ for (++baseaddr;
+ baseaddr < current_max_xpairs &&
+ chk[baseaddr] != 0; ++baseaddr) ;
- while ( baseaddr + maxec - minec + 1 >=
- current_max_xpairs )
- expand_nxt_chk();
+ while (baseaddr + maxec - minec + 1 >=
+ current_max_xpairs)
+ expand_nxt_chk ();
/* Reset the loop counter so we'll start all
* over again next time it's incremented.
*/
i = minec - 1;
- }
- }
+ }
+ }
- else
- {
+ else {
/* Ensure that the base address we eventually generate is
* non-negative.
*/
- baseaddr = MAX( tblend + 1, minec );
- }
+ baseaddr = MAX (tblend + 1, minec);
+ }
tblbase = baseaddr - minec;
tbllast = tblbase + maxec;
- while ( tbllast + 1 >= current_max_xpairs )
- expand_nxt_chk();
+ while (tbllast + 1 >= current_max_xpairs)
+ expand_nxt_chk ();
base[statenum] = tblbase;
def[statenum] = deflink;
- for ( i = minec; i <= maxec; ++i )
- if ( state[i] != SAME_TRANS )
- if ( state[i] != 0 || deflink != JAMSTATE )
- {
+ for (i = minec; i <= maxec; ++i)
+ if (state[i] != SAME_TRANS)
+ if (state[i] != 0 || deflink != JAMSTATE) {
nxt[tblbase + i] = state[i];
chk[tblbase + i] = statenum;
- }
+ }
- if ( baseaddr == firstfree )
+ if (baseaddr == firstfree)
/* Find next free slot in tables. */
- for ( ++firstfree; chk[firstfree] != 0; ++firstfree )
- ;
+ for (++firstfree; chk[firstfree] != 0; ++firstfree) ;
- tblend = MAX( tblend, tbllast );
- }
+ tblend = MAX (tblend, tbllast);
+}
/* mk1tbl - create table entries for a state (or state fragment) which
* has only one out-transition
*/
-void mk1tbl( state, sym, onenxt, onedef )
-int state, sym, onenxt, onedef;
- {
- if ( firstfree < sym )
+void mk1tbl (state, sym, onenxt, onedef)
+ int state, sym, onenxt, onedef;
+{
+ if (firstfree < sym)
firstfree = sym;
- while ( chk[firstfree] != 0 )
- if ( ++firstfree >= current_max_xpairs )
- expand_nxt_chk();
+ while (chk[firstfree] != 0)
+ if (++firstfree >= current_max_xpairs)
+ expand_nxt_chk ();
base[state] = firstfree - sym;
def[state] = onedef;
chk[firstfree] = state;
nxt[firstfree] = onenxt;
- if ( firstfree > tblend )
- {
+ if (firstfree > tblend) {
tblend = firstfree++;
- if ( firstfree >= current_max_xpairs )
- expand_nxt_chk();
- }
+ if (firstfree >= current_max_xpairs)
+ expand_nxt_chk ();
}
+}
/* mkprot - create new proto entry */
-void mkprot( state, statenum, comstate )
-int state[], statenum, comstate;
- {
- int i, slot, tblbase;
+void mkprot (state, statenum, comstate)
+ int state[], statenum, comstate;
+{
+ int i, slot, tblbase;
- if ( ++numprots >= MSP || numecs * numprots >= PROT_SAVE_SIZE )
- {
+ if (++numprots >= MSP || numecs * numprots >= PROT_SAVE_SIZE) {
/* Gotta make room for the new proto by dropping last entry in
* the queue.
*/
slot = lastprot;
lastprot = protprev[lastprot];
protnext[lastprot] = NIL;
- }
+ }
else
slot = numprots;
protnext[slot] = firstprot;
- if ( firstprot != NIL )
+ if (firstprot != NIL)
protprev[firstprot] = slot;
firstprot = slot;
@@ -706,21 +673,21 @@ int state[], statenum, comstate;
/* Copy state into save area so it can be compared with rapidly. */
tblbase = numecs * (slot - 1);
- for ( i = 1; i <= numecs; ++i )
+ for (i = 1; i <= numecs; ++i)
protsave[tblbase + i] = state[i];
- }
+}
/* mktemplate - create a template entry based on a state, and connect the state
* to it
*/
-void mktemplate( state, statenum, comstate )
-int state[], statenum, comstate;
- {
- int i, numdiff, tmpbase, tmp[CSIZE + 1];
- Char transset[CSIZE + 1];
- int tsptr;
+void mktemplate (state, statenum, comstate)
+ int state[], statenum, comstate;
+{
+ int i, numdiff, tmpbase, tmp[CSIZE + 1];
+ Char transset[CSIZE + 1];
+ int tsptr;
++numtemps;
@@ -733,60 +700,58 @@ int state[], statenum, comstate;
tmpbase = numtemps * numecs;
- if ( tmpbase + numecs >= current_max_template_xpairs )
- {
- current_max_template_xpairs += MAX_TEMPLATE_XPAIRS_INCREMENT;
+ if (tmpbase + numecs >= current_max_template_xpairs) {
+ current_max_template_xpairs +=
+ MAX_TEMPLATE_XPAIRS_INCREMENT;
++num_reallocs;
- tnxt = reallocate_integer_array( tnxt,
- current_max_template_xpairs );
- }
+ tnxt = reallocate_integer_array (tnxt,
+ current_max_template_xpairs);
+ }
- for ( i = 1; i <= numecs; ++i )
- if ( state[i] == 0 )
+ for (i = 1; i <= numecs; ++i)
+ if (state[i] == 0)
tnxt[tmpbase + i] = 0;
- else
- {
+ else {
transset[tsptr++] = i;
tnxt[tmpbase + i] = comstate;
- }
+ }
- if ( usemecs )
- mkeccl( transset, tsptr, tecfwd, tecbck, numecs, 0 );
+ if (usemecs)
+ mkeccl (transset, tsptr, tecfwd, tecbck, numecs, 0);
- mkprot( tnxt + tmpbase, -numtemps, comstate );
+ mkprot (tnxt + tmpbase, -numtemps, comstate);
/* We rely on the fact that mkprot adds things to the beginning
* of the proto queue.
*/
- numdiff = tbldiff( state, firstprot, tmp );
- mkentry( tmp, numecs, statenum, -numtemps, numdiff );
- }
+ numdiff = tbldiff (state, firstprot, tmp);
+ mkentry (tmp, numecs, statenum, -numtemps, numdiff);
+}
/* mv2front - move proto queue element to front of queue */
-void mv2front( qelm )
-int qelm;
- {
- if ( firstprot != qelm )
- {
- if ( qelm == lastprot )
+void mv2front (qelm)
+ int qelm;
+{
+ if (firstprot != qelm) {
+ if (qelm == lastprot)
lastprot = protprev[lastprot];
protnext[protprev[qelm]] = protnext[qelm];
- if ( protnext[qelm] != NIL )
+ if (protnext[qelm] != NIL)
protprev[protnext[qelm]] = protprev[qelm];
protprev[qelm] = NIL;
protnext[qelm] = firstprot;
protprev[firstprot] = qelm;
firstprot = qelm;
- }
}
+}
/* place_state - place a state into full speed transition table
@@ -796,12 +761,12 @@ int qelm;
* Transnum is the number of out-transitions for the state.
*/
-void place_state( state, statenum, transnum )
-int *state, statenum, transnum;
- {
+void place_state (state, statenum, transnum)
+ int *state, statenum, transnum;
+{
int i;
int *state_ptr;
- int position = find_table_space( state, transnum );
+ int position = find_table_space (state, transnum);
/* "base" is the table of start positions. */
base[statenum] = position;
@@ -821,16 +786,15 @@ int *state, statenum, transnum;
/* Place the state into chk and nxt. */
state_ptr = &state[1];
- for ( i = 1; i <= numecs; ++i, ++state_ptr )
- if ( *state_ptr != 0 )
- {
+ for (i = 1; i <= numecs; ++i, ++state_ptr)
+ if (*state_ptr != 0) {
chk[position + i] = i;
nxt[position + i] = *state_ptr;
- }
+ }
- if ( position + numecs > tblend )
+ if (position + numecs > tblend)
tblend = position + numecs;
- }
+}
/* stack1 - save states with only one out-transition to be processed later
@@ -840,21 +804,20 @@ int *state, statenum, transnum;
* no room, we process the sucker right now.
*/
-void stack1( statenum, sym, nextstate, deflink )
-int statenum, sym, nextstate, deflink;
- {
- if ( onesp >= ONE_STACK_SIZE - 1 )
- mk1tbl( statenum, sym, nextstate, deflink );
+void stack1 (statenum, sym, nextstate, deflink)
+ int statenum, sym, nextstate, deflink;
+{
+ if (onesp >= ONE_STACK_SIZE - 1)
+ mk1tbl (statenum, sym, nextstate, deflink);
- else
- {
+ else {
++onesp;
onestate[onesp] = statenum;
onesym[onesp] = sym;
onenext[onesp] = nextstate;
onedef[onesp] = deflink;
- }
}
+}
/* tbldiff - compute differences between two state tables
@@ -871,24 +834,22 @@ int statenum, sym, nextstate, deflink;
* number is "numecs" minus the number of "SAME_TRANS" entries in "ext".
*/
-int tbldiff( state, pr, ext )
-int state[], pr, ext[];
- {
+int tbldiff (state, pr, ext)
+ int state[], pr, ext[];
+{
int i, *sp = state, *ep = ext, *protp;
int numdiff = 0;
protp = &protsave[numecs * (pr - 1)];
- for ( i = numecs; i > 0; --i )
- {
- if ( *++protp == *++sp )
+ for (i = numecs; i > 0; --i) {
+ if (*++protp == *++sp)
*++ep = SAME_TRANS;
- else
- {
+ else {
*++ep = *sp;
++numdiff;
- }
}
+ }
return numdiff;
- }
+}
diff --git a/usr.bin/lex/version.h b/usr.bin/lex/version.h
index abe28b14d45..dca5b65d437 100644
--- a/usr.bin/lex/version.h
+++ b/usr.bin/lex/version.h
@@ -1,3 +1,3 @@
-/* $OpenBSD: version.h,v 1.4 1996/12/10 22:22:03 millert Exp $ */
+/* $OpenBSD: version.h,v 1.5 2015/11/19 19:43:40 tedu Exp $ */
-#define FLEX_VERSION "2.5.4"
+#define FLEX_VERSION VERSION
diff --git a/usr.bin/lex/yylex.c b/usr.bin/lex/yylex.c
index dd32bf438c2..e50dea258de 100644
--- a/usr.bin/lex/yylex.c
+++ b/usr.bin/lex/yylex.c
@@ -1,39 +1,37 @@
-/* $OpenBSD: yylex.c,v 1.5 2003/06/04 17:34:44 millert Exp $ */
+/* $OpenBSD: yylex.c,v 1.6 2015/11/19 19:43:40 tedu Exp $ */
/* yylex - scanner front-end for flex */
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Vern Paxson.
- *
- * The United States Government has rights in this work pursuant
- * to contract no. DE-AC03-76SF00098 between the United States
- * Department of Energy and the University of California.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- */
-
-/* $Header: /cvs/OpenBSD/src/usr.bin/lex/yylex.c,v 1.5 2003/06/04 17:34:44 millert Exp $ */
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
#include <ctype.h>
#include "flexdef.h"
@@ -42,42 +40,94 @@
/* yylex - scan for a regular expression token */
-int yylex()
- {
- int toktype;
+int yylex ()
+{
+ int toktype;
static int beglin = false;
extern char *yytext;
- if ( eofseen )
+ if (eofseen)
toktype = EOF;
else
- toktype = flexscan();
+ toktype = flexscan ();
- if ( toktype == EOF || toktype == 0 )
- {
+ if (toktype == EOF || toktype == 0) {
eofseen = 1;
- if ( sectnum == 1 )
- {
- synerr( _( "premature EOF" ) );
+ if (sectnum == 1) {
+ synerr (_("premature EOF"));
sectnum = 2;
toktype = SECTEND;
- }
+ }
else
toktype = 0;
- }
+ }
- if ( trace )
- {
- if ( beglin )
- {
- fprintf( stderr, "%d\t", num_rules + 1 );
+ if (trace) {
+ if (beglin) {
+ fprintf (stderr, "%d\t", num_rules + 1);
beglin = 0;
- }
+ }
+
+ switch (toktype) {
+ case '<':
+ case '>':
+ case '^':
+ case '$':
+ case '"':
+ case '[':
+ case ']':
+ case '{':
+ case '}':
+ case '|':
+ case '(':
+ case ')':
+ case '-':
+ case '/':
+ case '\\':
+ case '?':
+ case '.':
+ case '*':
+ case '+':
+ case ',':
+ (void) putc (toktype, stderr);
+ break;
+
+ case '\n':
+ (void) putc ('\n', stderr);
+
+ if (sectnum == 2)
+ beglin = 1;
+
+ break;
+
+ case SCDECL:
+ fputs ("%s", stderr);
+ break;
+
+ case XSCDECL:
+ fputs ("%x", stderr);
+ break;
+
+ case SECTEND:
+ fputs ("%%\n", stderr);
+
+ /* We set beglin to be true so we'll start
+ * writing out numbers as we echo rules.
+ * flexscan() has already assigned sectnum.
+ */
+ if (sectnum == 2)
+ beglin = 1;
- switch ( toktype )
- {
+ break;
+
+ case NAME:
+ fprintf (stderr, "'%s'", nmstr);
+ break;
+
+ case CHAR:
+ switch (yylval) {
case '<':
case '>':
case '^':
@@ -98,126 +148,66 @@ int yylex()
case '*':
case '+':
case ',':
- (void) putc( toktype, stderr );
- break;
-
- case '\n':
- (void) putc( '\n', stderr );
-
- if ( sectnum == 2 )
- beglin = 1;
-
- break;
-
- case SCDECL:
- fputs( "%s", stderr );
- break;
-
- case XSCDECL:
- fputs( "%x", stderr );
- break;
-
- case SECTEND:
- fputs( "%%\n", stderr );
-
- /* We set beglin to be true so we'll start
- * writing out numbers as we echo rules.
- * flexscan() has already assigned sectnum.
- */
- if ( sectnum == 2 )
- beglin = 1;
-
- break;
-
- case NAME:
- fprintf( stderr, "'%s'", nmstr );
- break;
-
- case CHAR:
- switch ( yylval )
- {
- case '<':
- case '>':
- case '^':
- case '$':
- case '"':
- case '[':
- case ']':
- case '{':
- case '}':
- case '|':
- case '(':
- case ')':
- case '-':
- case '/':
- case '\\':
- case '?':
- case '.':
- case '*':
- case '+':
- case ',':
- fprintf( stderr, "\\%c",
- yylval );
- break;
-
- default:
- if ( ! isascii( yylval ) ||
- ! isprint( yylval ) )
- fprintf( stderr,
- "\\%.3o",
- (unsigned int) yylval );
- else
- (void) putc( yylval,
- stderr );
- break;
- }
-
- break;
-
- case NUMBER:
- fprintf( stderr, "%d", yylval );
- break;
-
- case PREVCCL:
- fprintf( stderr, "[%d]", yylval );
- break;
-
- case EOF_OP:
- fprintf( stderr, "<<EOF>>" );
- break;
-
- case OPTION_OP:
- fprintf( stderr, "%s ", yytext );
- break;
-
- case OPT_OUTFILE:
- case OPT_PREFIX:
- case CCE_ALNUM:
- case CCE_ALPHA:
- case CCE_BLANK:
- case CCE_CNTRL:
- case CCE_DIGIT:
- case CCE_GRAPH:
- case CCE_LOWER:
- case CCE_PRINT:
- case CCE_PUNCT:
- case CCE_SPACE:
- case CCE_UPPER:
- case CCE_XDIGIT:
- fprintf( stderr, "%s", yytext );
- break;
-
- case 0:
- fprintf( stderr, _( "End Marker\n" ) );
+ fprintf (stderr, "\\%c", yylval);
break;
default:
- fprintf( stderr,
- _( "*Something Weird* - tok: %d val: %d\n" ),
- toktype, yylval );
+ if (!isascii (yylval) || !isprint (yylval))
+ fprintf (stderr,
+ "\\%.3o",
+ (unsigned int) yylval);
+ else
+ (void) putc (yylval, stderr);
break;
}
+
+ break;
+
+ case NUMBER:
+ fprintf (stderr, "%d", yylval);
+ break;
+
+ case PREVCCL:
+ fprintf (stderr, "[%d]", yylval);
+ break;
+
+ case EOF_OP:
+ fprintf (stderr, "<<EOF>>");
+ break;
+
+ case OPTION_OP:
+ fprintf (stderr, "%s ", yytext);
+ break;
+
+ case OPT_OUTFILE:
+ case OPT_PREFIX:
+ case CCE_ALNUM:
+ case CCE_ALPHA:
+ case CCE_BLANK:
+ case CCE_CNTRL:
+ case CCE_DIGIT:
+ case CCE_GRAPH:
+ case CCE_LOWER:
+ case CCE_PRINT:
+ case CCE_PUNCT:
+ case CCE_SPACE:
+ case CCE_UPPER:
+ case CCE_XDIGIT:
+ fprintf (stderr, "%s", yytext);
+ break;
+
+ case 0:
+ fprintf (stderr, _("End Marker\n"));
+ break;
+
+ default:
+ fprintf (stderr,
+ _
+ ("*Something Weird* - tok: %d val: %d\n"),
+ toktype, yylval);
+ break;
}
+ }
return toktype;
- }
+}